@adhdev/daemon-standalone 0.5.2 → 0.5.3
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/package.json
CHANGED
|
@@ -101,7 +101,7 @@ Error generating stack: `+s.message+`
|
|
|
101
101
|
`).replace(/\n{3,}/g,`
|
|
102
102
|
|
|
103
103
|
`).trim();return{toolCounts:n,textContent:o,hasTools:Object.keys(n).length>0}}function $c(e){return e?new Date(e).toLocaleTimeString("en-US",{hour:"numeric",minute:"2-digit",hour12:!0}):""}const Ty=w.forwardRef(function({messages:t,actionLogs:r,agentName:n="Agent",isCliMode:i=!1,isWorking:s=!1,contextKey:o="",receivedAtMap:l={},emptyState:a,onLoadMore:c,isLoadingMore:h,hasMoreHistory:u},d){var U;const f=w.useRef(null),m=w.useRef(null),g=w.useRef(0),x=w.useRef(""),_=w.useRef(!1),[v,y]=w.useState(new Set),[E,N]=w.useState(new Set),k=w.useRef(!1),I=()=>{const M=f.current;return M?M.scrollHeight-M.scrollTop-M.clientHeight<200:!0},z=t.length>0?`${t.length}:${(((U=t[t.length-1])==null?void 0:U.content)||"").length}`:"0:0";w.useEffect(()=>{var L,$;const M=!_.current,F=x.current!==o;if(x.current=o,M||F){_.current=!0,k.current=!1;const S=()=>{var ne;(ne=m.current)==null||ne.scrollIntoView({behavior:"instant"})};requestAnimationFrame(()=>requestAnimationFrame(S)),setTimeout(S,100),setTimeout(S,300),g.current=t.length;return}t.length>g.current?k.current||(L=m.current)==null||L.scrollIntoView({behavior:"instant"}):I()&&!k.current&&(($=m.current)==null||$.scrollIntoView({behavior:"instant"})),g.current=t.length},[z,o,s]),w.useImperativeHandle(d,()=>({scrollToBottom:(M="smooth")=>{var F;(F=m.current)==null||F.scrollIntoView({behavior:M})}})),w.useEffect(()=>{const M=f.current;if(!M)return;let F;const W=()=>{clearTimeout(F),F=setTimeout(()=>{k.current=!I()},50)};return M.addEventListener("scroll",W,{passive:!0}),()=>{M.removeEventListener("scroll",W),clearTimeout(F)}},[]);const Z=w.useRef(!1),T=w.useRef(0),R=w.useRef(!1);w.useEffect(()=>{const M=f.current;if(!M||!R.current||T.current===0)return;const W=M.scrollHeight-T.current;W>0&&(M.scrollTop=W),T.current=0,R.current=!1},[t.length]),w.useEffect(()=>{const M=f.current;if(!M||!c)return;const F=()=>{M.scrollTop<60&&u&&!h&&!Z.current&&(Z.current=!0,T.current=M.scrollHeight,c(),setTimeout(()=>{Z.current=!1},1500))};return M.addEventListener("scroll",F,{passive:!0}),()=>M.removeEventListener("scroll",F)},[c,u,h]);const A=(()=>{const M=t.map(($,S)=>({type:"message",data:$,index:S,ts:$.receivedAt||l[$.id??`i-${S}`]||0}));if(!r||r.length===0)return M;const F=[...r].sort(($,S)=>$.timestamp-S.timestamp).map(($,S)=>({type:"action",data:$,index:S,ts:$.timestamp})),W=[];let L=0;for(const $ of M){for(;L<F.length&&$.ts>0&&F[L].ts<$.ts;)W.push(F[L++]);W.push($)}for(;L<F.length;)W.push(F[L++]);return W})(),D=700;return p.jsxs("div",{ref:f,"data-chat-scroll":!0,className:"flex-1 min-h-0 overflow-y-auto px-5 py-6 flex flex-col gap-4 bg-bg-primary",children:[h&&p.jsx("div",{className:"text-center py-3 text-text-muted text-xs opacity-60",children:"⏳ Loading older messages..."}),u&&!h&&p.jsx("div",{className:"text-center py-2",children:p.jsx("button",{onClick:c,className:"bg-transparent border border-border-subtle text-text-muted text-[11px] rounded-xl px-4 py-1 cursor-pointer opacity-70",children:"↑ Load older messages"})}),A.length===0&&!u&&(a||p.jsx("div",{className:"text-center mt-16 opacity-20 text-[13px]",children:"Waiting for messages..."})),A.map(M=>{if(M.type==="action"){const ge=M.data;return p.jsxs("div",{className:"self-center max-w-[80%] bg-indigo-500/[0.08] text-accent px-3.5 py-1.5 rounded-[20px] text-xs text-center border border-indigo-500/15 opacity-85",children:[p.jsx(Ac,{remarkPlugins:[Fc],children:ge.text}),p.jsx("span",{className:"text-[10px] opacity-50 ml-2",children:$c(ge.timestamp)})]},`action-${M.index}`)}const F=M.data,W=M.index,L=(F.role||"").toLowerCase(),$=L==="user"||L==="human",S=F.kind||"standard",ne=F.receivedAt||l[F.id??`i-${W}`],oe=`${o}-${W}`,b=v.has(oe),me=E.has(oe);if(S==="thought")return p.jsx("div",{className:"self-start max-w-[88%] border-l-2 border-indigo-500/35 pl-3 text-text-muted text-xs italic leading-relaxed opacity-75",children:p.jsx("div",{className:"chat-markdown",children:p.jsx(Ac,{remarkPlugins:[Fc,Om],children:F.content||""})})},`msg-${W}`);if(S==="tool")return p.jsxs("div",{className:"self-start flex items-center gap-1.5 text-[11px] text-text-muted py-0.5 px-2.5 pl-2 bg-emerald-500/[0.05] border border-emerald-500/[0.12] rounded-md font-mono",children:[p.jsx("span",{className:"text-emerald-500 text-[10px]",children:"⏺"}),p.jsx("span",{className:"text-emerald-500 opacity-80",children:(F.content||"").split(`
|
|
104
|
-
`)[0].slice(0,80)})]},`msg-${W}`);if(S==="system")return p.jsx("div",{className:"self-center text-[11px] text-text-muted opacity-60 px-3 py-0.5 rounded-[20px] border border-border-subtle",children:(F.content||"").slice(0,100)},`msg-${W}`);const V=!$&&i?XT(F.content||""):null,H=V?V.textContent:F.content||"",G=V?Object.entries(V.toolCounts):[],he=i&&!$&&!b&&H.length>D,ue=b?F.content||"":he&&!me?H.slice(0,D):H;return p.jsxs("div",{className:`max-w-[88%] flex flex-col gap-1 ${$?"self-end":"self-start"}`,children:[G.length>0&&p.jsxs("div",{className:"flex flex-wrap gap-1 items-center mb-0.5",children:[G.map(([ge,O])=>p.jsxs("span",{className:"text-[10px] font-mono text-emerald-500 bg-emerald-500/[0.07] border border-emerald-500/[0.18] rounded px-[7px] py-0.5",children:["⏺ ",ge,O>1?` ×${O}`:""]},ge)),(V==null?void 0:V.hasTools)&&p.jsx("button",{onClick:()=>y(ge=>{const O=new Set(ge);return b?O.delete(oe):O.add(oe),O}),className:"text-[10px] text-text-muted bg-transparent border-none cursor-pointer px-1 py-px opacity-50",children:b?"Collapse":"Original"}),!H&&ne!=null&&p.jsx("span",{className:"text-[10px] opacity-35 ml-0.5",children:$c(ne)})]}),(H||$)&&p.jsxs("div",{style:{background:$?"var(--accent-primary)":"var(--bg-secondary)",color:$?"#fff":"var(--text-primary)",padding:"
|
|
104
|
+
`)[0].slice(0,80)})]},`msg-${W}`);if(S==="system")return p.jsx("div",{className:"self-center text-[11px] text-text-muted opacity-60 px-3 py-0.5 rounded-[20px] border border-border-subtle",children:(F.content||"").slice(0,100)},`msg-${W}`);const V=!$&&i?XT(F.content||""):null,H=V?V.textContent:F.content||"",G=V?Object.entries(V.toolCounts):[],he=i&&!$&&!b&&H.length>D,ue=b?F.content||"":he&&!me?H.slice(0,D):H;return p.jsxs("div",{className:`max-w-[88%] flex flex-col gap-1 ${$?"self-end":"self-start"}`,children:[G.length>0&&p.jsxs("div",{className:"flex flex-wrap gap-1 items-center mb-0.5",children:[G.map(([ge,O])=>p.jsxs("span",{className:"text-[10px] font-mono text-emerald-500 bg-emerald-500/[0.07] border border-emerald-500/[0.18] rounded px-[7px] py-0.5",children:["⏺ ",ge,O>1?` ×${O}`:""]},ge)),(V==null?void 0:V.hasTools)&&p.jsx("button",{onClick:()=>y(ge=>{const O=new Set(ge);return b?O.delete(oe):O.add(oe),O}),className:"text-[10px] text-text-muted bg-transparent border-none cursor-pointer px-1 py-px opacity-50",children:b?"Collapse":"Original"}),!H&&ne!=null&&p.jsx("span",{className:"text-[10px] opacity-35 ml-0.5",children:$c(ne)})]}),(H||$)&&p.jsxs("div",{style:{background:$?"linear-gradient(135deg, var(--accent-primary), #4f46e5)":"var(--bg-secondary)",color:$?"#fff":"var(--text-primary)",padding:"12px 16px",borderRadius:$?"16px 16px 4px 16px":"16px 16px 16px 4px",fontSize:13,lineHeight:1.65,border:$?"none":"1px solid var(--border-subtle)",boxShadow:$?"0 2px 12px rgba(99, 102, 241, 0.25)":"0 1px 4px rgba(0,0,0,0.2), inset 0 1px 0 rgba(255,255,255,0.04)"},children:[p.jsxs("div",{className:`flex justify-between items-baseline gap-2 ${H?"mb-1.5":"mb-0"}`,children:[p.jsx("span",{className:"text-[10px] font-bold opacity-60 tracking-wide uppercase",children:$?"You":n}),ne!=null&&p.jsx("span",{className:"text-[10px] opacity-45",children:$c(ne)})]}),H&&p.jsx("div",{className:"chat-markdown",children:p.jsx(Ac,{remarkPlugins:[Fc,Om,YT],children:ue})}),he&&p.jsx("button",{onClick:()=>N(ge=>{const O=new Set(ge);return me?O.delete(oe):O.add(oe),O}),className:"mt-1.5 text-[11px] font-semibold text-[var(--accent-primary)] bg-transparent border-none cursor-pointer p-0 opacity-80",children:me?"Collapse ↑":`Show more (${Math.round(H.length/100)*100} chars) ↓`})]})]},`msg-${W}`)}),s&&p.jsx("div",{className:"self-start max-w-[90%] bg-bg-secondary rounded-[16px_16px_16px_4px] border border-border-subtle",children:p.jsxs("div",{className:"typing-indicator",children:[p.jsx("div",{className:"dot"}),p.jsx("div",{className:"dot"}),p.jsx("div",{className:"dot"}),p.jsx("span",{className:"text-[11px] text-text-muted ml-1",children:"Agent working..."})]})}),p.jsx("div",{className:"min-h-10",ref:m})]})}),Cs={idle:{bg:"rgba(100,116,139,0.15)",text:"#94a3b8",dot:"#64748b",label:"Idle"},streaming:{bg:"rgba(59,130,246,0.15)",text:"#60a5fa",dot:"#3b82f6",label:"Streaming"},waiting_approval:{bg:"rgba(245,158,11,0.15)",text:"#fbbf24",dot:"#f59e0b",label:"Waiting Approval"},error:{bg:"rgba(239,68,68,0.15)",text:"#f87171",dot:"#ef4444",label:"Error"},disconnected:{bg:"rgba(75,85,99,0.15)",text:"#6b7280",dot:"#4b5563",label:"Disconnected"}},Hc={cline:"#22d3ee","roo-code":"#a78bfa",continue:"#34d399",copilot:"#60a5fa"};function GT({agentStreams:e,sendCommand:t}){var d,f,m;const[r,n]=w.useState(null),[i,s]=w.useState(""),[o,l]=w.useState(!1);w.useEffect(()=>{!r&&e.length>0&&n(e[0].agentType)},[e,r]);const a=e.find(g=>g.agentType===r),c=w.useCallback(async()=>{if(!(!i.trim()||!r||o)){l(!0);try{await t("agent_stream_send",{agentType:r,text:i.trim()}),s("")}catch(g){console.error("Failed to send agent message",g)}finally{l(!1)}}},[i,r,o,t]),h=w.useCallback(async g=>{if(r)try{await t("agent_stream_resolve",{agentType:r,action:g})}catch(x){console.error("Failed to resolve agent action",x)}},[r,t]),u=w.useCallback(async()=>{if(r)try{await t("agent_stream_new_session",{agentType:r})}catch(g){console.error("Failed to start new session",g)}},[r,t]);return e.length===0?null:p.jsxs("div",{className:"flex flex-col h-full bg-[#0c0e14] rounded-xl overflow-hidden border border-white/[0.06]",children:[p.jsxs("div",{className:"flex items-center gap-0.5 px-3 pt-2 border-b border-white/[0.06] bg-white/[0.02] overflow-x-auto",children:[e.map(g=>{const x=g.agentType===r,_=Hc[g.agentType]||"#94a3b8",v=Cs[g.status]||Cs.idle;return p.jsxs("button",{onClick:()=>n(g.agentType),className:`flex items-center gap-2 px-4 py-2 border-none rounded-t-lg text-[13px] whitespace-nowrap cursor-pointer transition-all duration-150 ${x?"bg-white/[0.05] text-slate-100 font-semibold":"bg-transparent text-slate-500 font-normal"}`,style:{borderBottom:x?`2px solid ${_}`:"2px solid transparent"},children:[p.jsx("span",{className:"w-2 h-2 rounded-full",style:{background:v.dot,boxShadow:g.status==="streaming"?`0 0 6px ${v.dot}`:"none",animation:g.status==="streaming"?"pulse 1.5s infinite":"none"}}),g.agentName,g.status==="waiting_approval"&&p.jsx("span",{className:"text-[10px] px-1.5 py-px rounded bg-yellow-500/20 text-yellow-300 font-semibold",children:"APPROVE"})]},g.agentType)}),p.jsx("div",{className:"flex-1"}),p.jsx("button",{onClick:u,title:"New Chat Session",className:"px-2 py-1 mb-1 border-none bg-white/[0.06] text-slate-400 rounded-md cursor-pointer text-[13px]",children:"+ New"})]}),a?p.jsxs(p.Fragment,{children:[p.jsxs("div",{className:"flex items-center gap-2 px-3.5 py-1.5 text-[11px] text-slate-500 border-b border-white/[0.04]",children:[p.jsx("span",{className:"px-2 py-0.5 rounded font-semibold text-[10px] tracking-wide uppercase",style:{background:(d=Cs[a.status])==null?void 0:d.bg,color:(f=Cs[a.status])==null?void 0:f.text},children:((m=Cs[a.status])==null?void 0:m.label)||a.status}),a.model&&p.jsxs("span",{className:"text-slate-600",children:["Model: ",p.jsx("span",{className:"text-slate-400",children:a.model})]}),p.jsx("span",{className:"text-slate-700",children:"|"}),p.jsxs("span",{children:[a.messages.length," messages"]})]}),a.activeModal&&p.jsxs("div",{className:"px-3.5 py-2.5 bg-gradient-to-br from-yellow-500/10 to-orange-600/[0.08] border-b border-yellow-500/20 flex items-center gap-2.5",children:[p.jsx("span",{className:"text-base",children:"⚠️"}),p.jsx("span",{className:"flex-1 text-[13px] text-yellow-300 leading-snug",children:a.activeModal.message||"Action requires approval"}),p.jsx("button",{onClick:()=>h("approve"),className:"px-3.5 py-1 border-none rounded-md bg-green-500 text-white text-xs font-semibold cursor-pointer",children:"Approve"}),p.jsx("button",{onClick:()=>h("reject"),className:"px-3.5 py-1 border-none rounded-md bg-red-500/20 text-red-400 text-xs font-semibold cursor-pointer",children:"Reject"})]}),p.jsx(Ty,{messages:a.messages.map((g,x)=>({role:g.role,content:g.content,kind:g.kind,id:`${a.agentType}-${x}`,receivedAt:g.timestamp})),agentName:a.agentName,isWorking:a.status==="streaming",contextKey:`agent-${a.agentType}`,emptyState:p.jsxs("div",{className:"flex items-center justify-center h-full text-text-muted text-[13px]",children:["No messages yet. Start a conversation with ",a.agentName,"."]})}),p.jsxs("div",{className:"px-3.5 py-2.5 border-t border-white/[0.06] flex gap-2",children:[p.jsx("input",{type:"text",value:i,onChange:g=>s(g.target.value),onKeyDown:g=>{g.key==="Enter"&&!g.shiftKey&&(g.preventDefault(),c())},placeholder:`Message ${a.agentName}...`,disabled:o,className:"flex-1 bg-white/[0.04] border border-white/[0.08] rounded-lg px-3.5 py-2 text-slate-200 text-[13px] outline-none"}),p.jsx("button",{onClick:c,disabled:o||!i.trim(),className:"px-4.5 py-2 border-none rounded-lg text-[13px] font-semibold transition-all duration-150",style:{background:i.trim()?`linear-gradient(135deg, ${Hc[a.agentType]||"#3b82f6"}, ${Hc[a.agentType]||"#3b82f6"}cc)`:"rgba(255,255,255,0.04)",color:i.trim()?"#fff":"#475569",cursor:i.trim()?"pointer":"default"},children:o?"…":"Send"})]})]}):p.jsx("div",{className:"flex-1 flex items-center justify-center text-slate-700 text-[13px]",children:"Select an agent tab to view its chat stream."}),p.jsx("style",{children:`
|
|
105
105
|
@keyframes pulse {
|
|
106
106
|
0%, 100% { opacity: 1; }
|
|
107
107
|
50% { opacity: 0.4; }
|
|
@@ -164,7 +164,7 @@ WARNING: This link could potentially be dangerous`)){let r=window.open();if(r){t
|
|
|
164
164
|
to { opacity: 1; transform: translateY(0); }
|
|
165
165
|
}
|
|
166
166
|
`})]})}function g3({screenshotUrl:e,mode:t="preview",zoom:r=100,interactive:n=!1,connectionState:i,onDismiss:s,onClickAt:o,onKeyDown:l,badge:a,emptyMessage:c,aspectRatio:h,className:u,style:d}){const f=w.useRef(null),m=w.useCallback(g=>{if(!n||!o||!f.current)return;const x=f.current,_=x.getBoundingClientRect(),v=(g.clientX-_.left)/_.width*x.naturalWidth,y=(g.clientY-_.top)/_.height*x.naturalHeight;o(v,y,x.naturalWidth,x.naturalHeight)},[n,o]);return t==="preview"?e?p.jsxs("div",{className:`relative rounded-xl overflow-hidden border border-border-subtle bg-bg-secondary ${u||""}`,style:{aspectRatio:h||"16/9",...d},children:[p.jsx("img",{ref:f,src:e,alt:"IDE Screenshot",className:"w-full h-full object-cover"}),s&&p.jsx("button",{onClick:s,className:"absolute top-2.5 right-2.5 bg-black/50 border-none text-white w-5 h-5 rounded-full text-[10px] z-10 cursor-pointer flex items-center justify-center",children:"✕"})]}):null:e?p.jsxs("div",{className:`${n?"screenshot-interactive":""} ${u||""} relative h-full flex items-center justify-center overflow-auto`,tabIndex:n?0:void 0,onKeyDown:n?l:void 0,style:d,children:[p.jsx("img",{ref:f,src:e,alt:"IDE Screenshot",onClick:n?m:void 0,className:"max-w-full max-h-full object-contain",style:{...n?{cursor:"crosshair"}:{},...r!==100?{transform:`scale(${r/100})`,transformOrigin:"center center"}:{}}}),a&&p.jsx("div",{className:"absolute bottom-4 left-1/2 -translate-x-1/2 bg-black/70 text-white px-3.5 py-1.5 rounded-[20px] text-xs font-semibold backdrop-blur-sm",children:a})]}):p.jsxs("div",{className:`flex items-center justify-center flex-col gap-2 h-full text-text-muted ${u||""}`,style:d,children:[p.jsx("p",{className:"text-base",children:c||"🖥 Waiting for screenshot stream..."}),i&&p.jsxs("p",{className:"text-[13px] mt-2 opacity-50",children:["P2P: ",i]})]})}function y1({activeConv:e,onModalButton:t}){const[r,n]=w.useState(null);if(w.useEffect(()=>{n(null)},[e.modalMessage,e.status]),e.status!=="waiting_approval"||!e.modalButtons)return null;const i=s=>{r||(n(s),t(s))};return p.jsxs("div",{className:"bg-gradient-to-br from-amber-600 to-amber-700 text-white py-2.5 px-4 shrink-0 z-[5]",children:[e.modalMessage&&p.jsx("div",{className:"text-[11px] opacity-85 mb-1.5 whitespace-nowrap overflow-hidden text-ellipsis max-w-full",children:e.modalMessage.replace(/[\n\r]+/g," ").slice(0,120)}),p.jsxs("div",{className:"flex justify-between items-center",children:[p.jsxs("div",{className:"font-black text-xs flex items-center gap-2",children:[p.jsx("span",{children:"⚠️"})," ",r?"PROCESSING...":"ACTION REQUIRED"]}),p.jsx("div",{className:"flex gap-2 flex-wrap",children:e.modalButtons.map((s,o)=>{const l=s.replace(/[⌥⏎⇧⌫⌘⌃]/g,"").trim().toLowerCase(),a=/^(run|approve|accept|yes|allow|always)/.test(l),c=/^(reject|deny|delete|remove|abort)/.test(l),h=r===s,u=r!==null;return p.jsx("button",{onClick:()=>i(s),disabled:u,className:`btn btn-sm border-none rounded-md text-xs px-3 py-1 ${a?"bg-white text-amber-700 font-extrabold":c?"bg-red-500/30 text-white font-semibold":"bg-white/15 text-white font-semibold"} ${u&&!h?"opacity-40":"opacity-100"} ${u?"cursor-not-allowed":"cursor-pointer"}`,children:h?"⏳ ...":s.replace(/[⌥⏎⇧⌫⌘⌃]/g,"").trim()},o)})})]})]})}const gr=new Map;function _3({ideId:e,ideType:t,agentType:r,agentName:n,serverModel:i,serverMode:s,acpConfigOptions:o,acpModes:l}){var me;const{sendCommand:a}=Si(),c=!!(o||l),h=`${e}:${r}`,u=gr.get(h),[d,f]=w.useState(!1),[m,g]=w.useState(!1),[x,_]=w.useState((u==null?void 0:u.models)||[]),[v,y]=w.useState((u==null?void 0:u.modes)||[]),E=V=>V?typeof V=="string"?V:typeof V=="object"?V.name||V.id||JSON.stringify(V):String(V):"",[N,k]=w.useState(E(i)),[I,z]=w.useState(E(s)),[Z,T]=w.useState(!1),[R,A]=w.useState(!1),D=w.useRef(0),U=V=>V.map(H=>typeof H=="string"?H:(H==null?void 0:H.name)||(H==null?void 0:H.id)||String(H));w.useEffect(()=>{if(o){const V=o.find(H=>H.category==="model");if(V){const H=U(V.options.map(he=>he.value));_(H),V.currentValue&&k(E(V.currentValue));const G=gr.get(h)||{models:[],modes:[]};gr.set(h,{...G,models:H})}}if(l&&l.length>0){const V=U(l.map(G=>G.id));y(V);const H=gr.get(h)||{models:[],modes:[]};gr.set(h,{...H,modes:V})}else if(o){const V=o.find(H=>H.category!=="model");if(V){const H=U(V.options.map(he=>he.value));y(H),V.currentValue&&z(E(V.currentValue));const G=gr.get(h)||{models:[],modes:[]};gr.set(h,{...G,modes:H})}}},[o,l,h]),w.useEffect(()=>{f(!1),g(!1),k(E(i)),z(E(s));const V=gr.get(h);V?(_(V.models),y(V.modes)):(_([]),y([]))},[e,r]),w.useEffect(()=>{i&&Date.now()>D.current&&k(E(i))},[i]),w.useEffect(()=>{s&&Date.now()>D.current&&z(E(s))},[s]);const M=w.useCallback(async(V,H={})=>{const G={...H},he=e.split(":");return he.length>=3&&(he[1]==="ide"||he[1]==="cli"||he[1]==="acp")&&(G._targetInstance=he.slice(2).join(":"),G._targetType=he[1]),await a(e,V,G)},[e]),F=async()=>{var V,H;if(x.length>0){f(!d);return}if(c){f(!0);return}T(!0);try{const G=await M("list_extension_models",{agentType:r,ideType:t}),he=(G==null?void 0:G.models)||((V=G==null?void 0:G.result)==null?void 0:V.models)||[],ue=U(he);_(ue),G!=null&&G.current&&k(E(G.current)),(H=G==null?void 0:G.result)!=null&&H.current&&k(E(G.result.current));const ge=gr.get(h)||{models:[],modes:[]};gr.set(h,{...ge,models:ue}),f(!0)}catch{}finally{T(!1)}},W=async()=>{var V,H;if(v.length>0){g(!m);return}if(c){g(!0);return}A(!0);try{const G=await M("list_extension_modes",{agentType:r,ideType:t}),he=(G==null?void 0:G.modes)||((V=G==null?void 0:G.result)==null?void 0:V.modes)||[],ue=U(he);y(ue),G!=null&&G.current&&z(E(G.current)),(H=G==null?void 0:G.result)!=null&&H.current&&z(E(G.result.current));const ge=gr.get(h)||{models:[],modes:[]};gr.set(h,{...ge,modes:ue}),g(!0)}catch{}finally{A(!1)}},L=async V=>{f(!1),k(V),D.current=Date.now()+5e3;try{c?await M("change_model",{agentType:r,ideType:t,model:V}):await M("set_extension_model",{agentType:r,ideType:t,model:V})}catch{}},$=c&&!(l&&l.length>0)&&(o==null?void 0:o.some(V=>V.category!=="model")),S=$?(me=o==null?void 0:o.find(V=>V.category!=="model"))==null?void 0:me.configId:void 0,ne=async V=>{g(!1),z(V),D.current=Date.now()+5e3;try{c&&$&&S?await M("set_thought_level",{agentType:r,ideType:t,configId:S,value:V}):c?await M("set_mode",{agentType:r,ideType:t,mode:V}):await M("set_extension_mode",{agentType:r,ideType:t,mode:V})}catch{}},b={cline:"#22d3ee","roo-code":"#a78bfa",cursor:"#60a5fa",antigravity:"#f97316",windsurf:"#34d399"}[r]||"#94a3b8";return p.jsxs("div",{className:"flex items-center gap-1.5 px-3 py-1 flex-wrap text-[10px] border-t border-border-subtle bg-[var(--surface-primary)]",children:[p.jsx("span",{className:"text-[9px] font-bold tracking-wide uppercase opacity-70",style:{color:b},children:n}),p.jsx("span",{className:"text-border-subtle text-[10px]",children:"│"}),p.jsxs("div",{className:"relative",children:[p.jsxs("span",{className:"inline-flex items-center gap-1 px-2 py-0.5 rounded-xl text-[10px] font-medium cursor-pointer transition-all bg-[var(--surface-tertiary)] whitespace-nowrap max-w-40 overflow-hidden text-ellipsis",style:{borderColor:d?`${b}55`:"transparent",border:"1px solid",color:N?"var(--text-primary)":"var(--text-muted)"},onClick:F,children:[p.jsx("span",{className:"text-[9px] opacity-60",children:"🤖"}),Z?"...":N||"Model",p.jsx("span",{className:"text-[7px] opacity-50",children:"▼"})]}),d&&x.length>0&&p.jsxs(p.Fragment,{children:[p.jsx("div",{className:"fixed inset-0 z-[59]",onClick:()=>f(!1)}),p.jsxs("div",{className:"absolute bottom-full left-0 z-[60] bg-[var(--surface-primary)] border border-border-subtle rounded-lg mb-1 max-h-[220px] overflow-y-auto min-w-40 shadow-[0_-4px_16px_rgba(0,0,0,0.3)]",children:[p.jsx("div",{className:"px-3 py-1.5 text-[9px] font-bold text-text-muted tracking-wider border-b border-border-subtle",children:"SELECT MODEL"}),x.map(V=>p.jsx("div",{className:"px-3 py-[7px] text-[11px] cursor-pointer whitespace-nowrap overflow-hidden text-ellipsis",style:{background:V===N?`${b}18`:"transparent",color:V===N?b:"var(--text-secondary)",fontWeight:V===N?600:400,borderLeft:V===N?`2px solid ${b}`:"2px solid transparent"},onMouseEnter:H=>{H.currentTarget.style.background=`${b}12`},onMouseLeave:H=>{H.currentTarget.style.background=V===N?`${b}18`:"transparent"},onClick:()=>L(V),children:V},V))]})]})]}),p.jsxs("div",{className:"relative",children:[p.jsxs("span",{className:"inline-flex items-center gap-1 px-2 py-0.5 rounded-xl text-[10px] font-medium cursor-pointer transition-all bg-[var(--surface-tertiary)] whitespace-nowrap max-w-40 overflow-hidden text-ellipsis",style:{borderColor:m?`${b}55`:"transparent",border:"1px solid",color:I?"var(--text-primary)":"var(--text-muted)"},onClick:W,children:[p.jsx("span",{className:"text-[9px] opacity-60",children:$?"🧠":"⚡"}),R?"...":I||($?"Thinking":"Mode"),p.jsx("span",{className:"text-[7px] opacity-50",children:"▼"})]}),m&&v.length>0&&p.jsxs(p.Fragment,{children:[p.jsx("div",{className:"fixed inset-0 z-[59]",onClick:()=>g(!1)}),p.jsxs("div",{className:"absolute bottom-full left-0 z-[60] bg-[var(--surface-primary)] border border-border-subtle rounded-lg mb-1 max-h-[220px] overflow-y-auto min-w-40 shadow-[0_-4px_16px_rgba(0,0,0,0.3)]",children:[p.jsx("div",{className:"px-3 py-1.5 text-[9px] font-bold text-text-muted tracking-wider border-b border-border-subtle",children:$?"SELECT THINKING LEVEL":"SELECT MODE"}),v.map(V=>p.jsx("div",{className:"px-3 py-[7px] text-[11px] cursor-pointer whitespace-nowrap overflow-hidden text-ellipsis",style:{background:V===I?`${b}18`:"transparent",color:V===I?b:"var(--text-secondary)",fontWeight:V===I?600:400,borderLeft:V===I?`2px solid ${b}`:"2px solid transparent"},onMouseEnter:H=>{H.currentTarget.style.background=`${b}12`},onMouseLeave:H=>{H.currentTarget.style.background=V===I?`${b}18`:"transparent"},onClick:()=>ne(V),children:V},V))]})]})]})]})}const ar=e=>(e.ideId||e.tabKey||e.id||"").includes(":cli:"),Dr=e=>(e.ideId||e.tabKey||e.id||"").includes(":acp:");function x1({activeConv:e,ides:t,agentInput:r,setAgentInput:n,handleSendChat:i,handleFocusAgent:s,isFocusingAgent:o,messageReceivedAt:l,actionLogs:a}){const c=w.useRef(null),{sendCommand:h}=Si(),[u,d]=w.useState([]),[f,m]=w.useState(0),[g,x]=w.useState(!0),[_,v]=w.useState(!1),y=w.useRef("");e.tabKey!==y.current&&(y.current=e.tabKey,d([]),m(0),x(!0));const E=w.useCallback(async()=>{var I,z,Z,T,R;if(!(_||!g)){v(!0);try{const A=t.find(L=>L.id===e.ideId),D=(A==null?void 0:A.daemonId)||((I=e.ideId)==null?void 0:I.split(":")[0])||"";if(!D){x(!1);return}const U=e.ideType||e.agentType||"",M=(e.ideId||"").split(":"),F=M.length>=3?M.slice(2).join(":"):void 0;console.log("[ChatPane] requestChatHistory:",{daemonId:D,agentType:U,instanceId:F,offset:f});const W=await h(D,"chat_history",{agentType:U,offset:f,limit:30,instanceId:F});console.log("[ChatPane] got result:",{count:((z=W.messages)==null?void 0:z.length)||0,hasMore:W.hasMore}),((Z=W.messages)==null?void 0:Z.length)>0&&(d(L=>[...W.messages,...L]),m(L=>L+W.messages.length)),x(W.hasMore)}catch(A){console.warn("[ChatPane] Failed to load history:",A),!((T=A==null?void 0:A.message)!=null&&T.includes("P2P not available"))&&!((R=A==null?void 0:A.message)!=null&&R.includes("channel not open"))&&x(!1)}finally{v(!1)}}},[_,g,f,t,e]),N=w.useRef(0);w.useEffect(()=>{if(e.messages.length<10&&g&&!_&&u.length===0){const I=N.current;if(I>5)return;const Z=setTimeout(()=>{N.current=I+1,E()},I===0?0:2e3);return()=>clearTimeout(Z)}else u.length>0&&(N.current=0)},[e.tabKey,e.messages.length,g,_,u.length,E]);const k=(()=>{const I=e.messages.map((T,R)=>{const A=`${e.ideId}-${T.id??`i-${R}`}`;return{...T,receivedAt:T.receivedAt||l[A]||0}});if(u.length===0)return I;const z=new Set(I.map(T=>`${T.role}:${(T.content||"").slice(0,100)}`));return[...u.filter(T=>!z.has(`${T.role}:${(T.content||"").slice(0,100)}`)),...I]})();return p.jsxs(p.Fragment,{children:[p.jsx(Ty,{messages:k,actionLogs:a.filter(I=>I.ideId===e.tabKey).sort((I,z)=>I.timestamp-z.timestamp),agentName:e.agentName||e.displayPrimary||"Agent",isCliMode:ar(e)||Dr(e),isWorking:e.status==="working",contextKey:e.tabKey,onLoadMore:E,isLoadingMore:_,hasMoreHistory:g,emptyState:e.messages.length===0?e.status==="not_monitored"?p.jsxs("div",{className:"text-center mt-16 flex flex-col items-center gap-3",children:[p.jsx("div",{className:"text-3xl opacity-60",children:"🔌"}),p.jsx("div",{className:"text-[13px] opacity-50",children:"Agent not monitored"}),p.jsx("button",{onClick:s,disabled:o,className:"btn btn-sm bg-accent text-white border-none rounded-[10px] px-5 py-2 font-bold text-[13px] cursor-pointer transition-all",children:o?"⌛ Switching...":`📂 Open ${e.displayPrimary} Panel`}),p.jsx("div",{className:"text-[11px] opacity-35 max-w-[280px]",children:"Click to switch monitoring to this agent"})]}):e.status==="panel_hidden"?p.jsxs("div",{className:"text-center mt-16 flex flex-col items-center gap-3",children:[p.jsx("div",{className:"text-3xl opacity-60",children:"👁️🗨️"}),p.jsx("div",{className:"text-[13px] opacity-50",children:"Panel is not visible in IDE"}),p.jsx("button",{onClick:s,disabled:o,className:"btn btn-sm bg-accent text-white border-none rounded-[10px] px-5 py-2 font-bold text-[13px] cursor-pointer transition-all",children:o?"⌛ Opening...":`📂 Open ${e.displayPrimary} Panel`}),p.jsx("div",{className:"text-[11px] opacity-35 max-w-[280px]",children:"Open the agent sidebar in your IDE to start viewing messages"})]}):void 0:void 0}),!ar(e)&&(()=>{const I=t.find(z=>z.id===e.ideId);return p.jsx(_3,{ideId:e.ideId,ideType:e.ideType,agentType:e.streamSource==="agent-stream"?e.agentType:e.ideType,agentName:e.streamSource==="agent-stream"?e.agentName:e.displaySecondary,serverModel:(I==null?void 0:I.currentModel)||void 0,serverMode:(I==null?void 0:I.currentPlan)||void 0,acpConfigOptions:Dr(e)?I==null?void 0:I.acpConfigOptions:void 0,acpModes:Dr(e)?I==null?void 0:I.acpModes:void 0})})(),p.jsx("div",{className:"dashboard-input-area px-3 py-2.5 bg-[var(--surface-primary)] border-t border-border-subtle shrink-0",children:p.jsxs("div",{className:"flex gap-2.5 items-center",children:[p.jsx("div",{className:"flex-1 relative",children:p.jsx("input",{ref:c,type:"text",placeholder:`Send message to ${e.displayPrimary}...`,value:r,onChange:I=>n(I.target.value),onPaste:I=>{const z=I.clipboardData.getData("text");z&&n(Z=>Z+z),I.preventDefault()},onKeyDown:I=>{if(I.key==="Enter"){if(I.nativeEvent.isComposing){I.preventDefault();return}I.preventDefault(),i()}},onBlur:()=>{window.innerWidth<768&&setTimeout(()=>{document.documentElement.scrollTop=0},100)},className:"w-full h-10 rounded-[20px] px-4 bg-bg-secondary border border-border-subtle text-sm text-text-primary"})}),p.jsx("button",{onClick:i,disabled:!r.trim(),className:`w-10 h-10 rounded-full flex items-center justify-center border-none shrink-0 transition-all duration-300 ${r.trim()?"bg-accent cursor-pointer":"bg-bg-secondary cursor-default"}`,children:p.jsx("svg",{width:"18",height:"18",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",strokeLinecap:"round",strokeLinejoin:"round",className:r.trim()?"text-white":"text-text-muted",children:p.jsx("path",{d:"M22 2L11 13M22 2l-7 20-4-9-9-4 20-7z"})})})]})})]})}function v3({activeConv:e,ptyBuffers:t,terminalRef:r,agentInput:n,setAgentInput:i,handleSendChat:s,handleModalButton:o}){const l=w.useRef(null),{sendCommand:a,sendData:c}=Si();return p.jsxs(p.Fragment,{children:[p.jsxs("div",{className:"flex items-center justify-between px-3 py-1.5 bg-[var(--surface-primary)] border-b border-border-subtle shrink-0",children:[p.jsx("div",{className:"flex gap-1",children:p.jsx("div",{className:"px-3 py-1 rounded-md text-[11px] font-semibold bg-accent text-white",children:"⬛ Terminal"})}),p.jsxs("div",{className:"flex items-center gap-2",children:[p.jsxs("div",{className:"text-[10px] text-text-muted",children:[e.agentName," — Terminal"]}),p.jsx("button",{onClick:()=>{if(!r.current||!e)return;const h=t.current.get(e.tabKey);if(h&&h.length>0)for(const u of h)r.current.write(u);requestAnimationFrame(()=>{requestAnimationFrame(()=>{var u;(u=r.current)==null||u.bumpResize()})})},title:"Refresh terminal (replay buffer + TUI redraw)",className:"px-2 py-0.5 rounded-[5px] text-[11px] bg-bg-secondary text-text-secondary border border-border-subtle cursor-pointer leading-none",children:"↺"}),p.jsx("button",{onClick:async()=>{var d;const h=(d=e.ideId)!=null&&d.includes(":cli:")?e.ideId.split(":cli:")[1]:e.ideType||e.agentType||"";if(!window.confirm(`Stop ${h}?
|
|
167
|
-
This will terminate the CLI process.`))return;const u=e.ideId||e.daemonId||"";try{await a(u,"stop_cli",{cliType:h})}catch(f){console.error("Stop CLI failed:",f)}},title:"Stop CLI process",className:"px-2 py-0.5 rounded-[5px] text-[11px] bg-red-500/[0.08] text-red-400 border border-red-500/30 cursor-pointer leading-none font-semibold",children:"■ Stop"})]})]}),p.jsx(y1,{activeConv:e,onModalButton:o}),p.jsx("div",{className:"flex-1 min-h-0 p-2 bg-[#0f1117]",children:p.jsx(v1,{ref:r,onInput:h=>{var f;const u=e.ideId||e.daemonId||"",d=(f=e.ideId)!=null&&f.includes(":cli:")?e.ideId.split(":cli:")[1]:e.ideType||e.agentType||"";c!=null&&c(u,{type:"pty_input",cliType:d,data:h})||a(u,"pty_input",{cliType:d,data:h}).catch(console.error)},onResize:(h,u)=>{var m;const d=e.ideId||e.daemonId||"",f=(m=e.ideId)!=null&&m.includes(":cli:")?e.ideId.split(":cli:")[1]:e.ideType||e.agentType||"";c!=null&&c(d,{type:"pty_resize",cliType:f,cols:h,rows:u})||a(d,"pty_resize",{cliType:f,cols:h,rows:u,force:!0}).catch(()=>{})}},e.tabKey)}),p.jsx("div",{className:"px-3 py-2 bg-[var(--surface-primary)] border-t border-border-subtle shrink-0",children:p.jsxs("div",{className:"flex gap-2.5 items-center",children:[p.jsx("div",{className:"flex-1 relative",children:p.jsx("input",{ref:l,type:"text",placeholder:`Send message to ${e.displayPrimary}...`,value:n,onChange:h=>i(h.target.value),onPaste:h=>{const u=h.clipboardData.getData("text");u&&i(d=>d+u),h.preventDefault()},onKeyDown:h=>{if(h.key==="Enter"){if(h.nativeEvent.isComposing){h.preventDefault();return}h.preventDefault(),s()}},className:"w-full h-9 rounded-[18px] px-4 bg-bg-secondary border border-border-subtle text-[13px] text-text-primary"})}),p.jsx("button",{onClick:s,disabled:!n.trim(),className:`w-9 h-9 rounded-full flex items-center justify-center border-none shrink-0 transition-all duration-300 ${n.trim()?"bg-accent cursor-pointer":"bg-bg-secondary cursor-default"}`,children:p.jsx("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",strokeLinecap:"round",strokeLinejoin:"round",className:n.trim()?"text-white":"text-text-muted",children:p.jsx("path",{d:"M22 2L11 13M22 2l-7 20-4-9-9-4 20-7z"})})})]})})]})}function y3({wsStatus:e,showReconnected:t,loginUrl:r}){const n=e==="disconnected"||e==="reconnecting"||e==="offline"||e==="auth_failed",i=e==="auth_failed"?"red":e==="offline"?"orange":"violet",s={red:"linear-gradient(90deg, rgba(239,68,68,0.12), rgba(239,68,68,0.04))",orange:"linear-gradient(90deg, rgba(255,107,53,0.12), rgba(255,107,53,0.04))",violet:"linear-gradient(90deg, rgba(139,92,246,0.12), rgba(139,92,246,0.04))"},o={red:"1px solid rgba(239,68,68,0.2)",orange:"1px solid rgba(255,107,53,0.2)",violet:"1px solid rgba(139,92,246,0.2)"},l={red:"#ef4444",orange:"#ff6b35",violet:"#a78bfa"};return p.jsxs(p.Fragment,{children:[n&&p.jsxs("div",{className:"py-2.5 px-5 text-[13px] font-semibold flex items-center gap-2.5 justify-center",style:{background:s[i],borderBottom:o[i],color:l[i]},children:[p.jsx("img",{src:"/otter-logo.png",alt:"",className:"w-5 h-5",style:{opacity:e==="auth_failed"?.6:1,animation:e==="auth_failed"?void 0:"pulse 2s ease-in-out infinite",filter:e==="auth_failed"?"grayscale(1)":void 0}}),e==="offline"&&"Network offline — waiting for connection...",e==="disconnected"&&"Reconnecting to server...",e==="reconnecting"&&"Reconnecting to server...",e==="auth_failed"&&(r?p.jsxs(p.Fragment,{children:["Session expired."," ",p.jsx("a",{href:r,className:"text-inherit underline",children:"Log in again"})]}):"Connection failed — please restart the server.")]}),t&&e==="connected"&&p.jsxs("div",{className:"py-2 px-4 text-xs font-semibold flex items-center gap-2 justify-center bg-gradient-to-r from-green-500/[0.12] to-green-500/[0.04] text-green-400 border-b border-green-500/15 animate-[fadeIn_0.3s_ease]",children:[p.jsx("img",{src:"/otter-logo.png",alt:"",className:"w-4 h-4"}),"Connected"]})]})}const ru=e=>(e.ideId||e.tabKey||e.id||"").includes(":cli:"),nu=e=>(e.ideId||e.tabKey||e.id||"").includes(":acp:");function x3({activeConv:e,agentCount:t,wsStatus:r,isP2PActive:n,onOpenHistory:i}){const s=cs(),o=n?"#22c55e":r==="connected"?"#eab308":"#ef4444",l=n?"0 0 4px #22c55e80":r==="connected"?"0 0 4px #eab30880":"0 0 4px #ef444480";return p.jsxs("div",{className:"dashboard-header",children:[p.jsx("div",{className:"flex items-center gap-3",children:p.jsxs("div",{className:"leading-tight",children:[p.jsxs("h1",{className:"header-title m-0",children:["DASHBOARD",p.jsxs("span",{className:"header-count-mobile text-[10px] font-semibold opacity-60 ml-2 tracking-wide",children:[t," Active",p.jsx("span",{className:"inline-block w-[5px] h-[5px] rounded-full ml-1 align-middle",style:{background:o}})]})]}),p.jsxs("div",{className:"header-subtitle text-[11px] items-center gap-1",children:[t," AGENTS ACTIVE",p.jsx("span",{title:n?"P2P Direct":r==="connected"?"WebSocket":"Disconnected",className:"inline-block w-1.5 h-1.5 rounded-full shrink-0",style:{background:o,boxShadow:l}})]})]})}),p.jsxs("div",{className:"flex gap-2 items-center",children:[e&&!ru(e)&&!nu(e)&&p.jsx("button",{onClick:()=>s(`/ide/${e.ideId}`),className:"btn btn-primary btn-sm border-none px-3 py-1.5 text-xs",children:"IDE"}),e&&!ru(e)&&!nu(e)&&p.jsx("button",{onClick:i,className:"btn btn-secondary btn-sm border-none bg-bg-secondary px-2.5 py-1.5 flex items-center gap-1",title:"Chat History",children:"📜"}),e&&!ru(e)&&!nu(e)&&p.jsx("button",{onClick:()=>s(`/ide/${e.ideId}?view=remote`),className:"btn btn-secondary btn-sm border-none bg-bg-secondary px-2.5 py-1.5",title:"Remote Control",children:"🖥️"})]})]})}function Ur(e){return e?e.charAt(0).toUpperCase()+e.slice(1).toLowerCase():"IDE"}function S3(e){if(e<60)return`${Math.round(e)}s`;const t=Math.floor(e/60);if(t<60)return`${t}m`;const r=Math.floor(t/60),n=t%60;if(r<24)return n>0?`${r}h ${n}m`:`${r}h`;const i=Math.floor(r/24),s=r%24;return`${i}d ${s}h`}function Ag(e){return e<1024*1024*1024?`${(e/(1024*1024)).toFixed(0)} MB`:`${(e/(1024*1024*1024)).toFixed(1)} GB`}function Bg(e){return(e.id||"").includes(":cli:")}function Yh(e,t){return Ur(e)}function w3(e){if(!Array.isArray(e)||e.length<=1)return e;const t=new Map,r=["generating","streaming","active","connected","idle","panel_hidden"];for(const n of e){const i=(n.name||n.id||"").toLowerCase().replace(/\s+/g,"-"),s=t.get(i);if(!s){t.set(i,n);continue}const o=r.indexOf(s.status||"idle"),l=r.indexOf(n.status||"idle");l>=0&&(o<0||l<o)&&t.set(i,n)}return Array.from(t.values())}function b3({activeConv:e,ides:t,isCreatingChat:r,isRefreshingHistory:n,onClose:i,onNewChat:s,onSwitchSession:o,onRefreshHistory:l}){var u;const a=t.find(d=>d.id===e.ideId),c=(a==null?void 0:a.chats)||[],h=(u=a==null?void 0:a.activeChat)==null?void 0:u.id;return p.jsxs("div",{className:"fixed inset-0 z-[1000] flex items-center justify-center",children:[p.jsx("div",{onClick:i,className:"absolute inset-0 bg-black/60 backdrop-blur-sm"}),p.jsxs("div",{className:"card fade-in relative w-[90%] max-w-[500px] max-h-[80vh] flex flex-col p-0 overflow-hidden shadow-[0_20px_40px_rgba(0,0,0,0.4)] rounded-[20px]",children:[p.jsxs("div",{className:"px-6 py-5 border-b border-border-subtle flex justify-between items-center bg-[var(--surface-primary)]",children:[p.jsxs("div",{children:[p.jsx("h3",{className:"m-0 text-lg font-extrabold",children:"Chat History"}),p.jsxs("div",{className:"text-xs text-text-muted mt-0.5",children:[e.displayPrimary," — ",Ur(e.ideType)]})]}),p.jsx("button",{onClick:i,className:"bg-transparent border-none text-xl text-text-muted cursor-pointer",children:"✕"})]}),p.jsxs("div",{className:"flex-1 overflow-y-auto p-3 bg-bg-primary",children:[p.jsx("button",{onClick:s,disabled:r,className:"w-full p-3.5 rounded-xl mb-3 bg-indigo-500/10 border border-dashed border-accent text-accent font-bold text-sm cursor-pointer",children:r?"⌛ Creating...":"+ Start New Chat Session"}),c.map(d=>p.jsxs("div",{onClick:()=>{o(e.ideId,d.id),i()},className:`p-4 rounded-xl mb-2 cursor-pointer border transition-all ${h===d.id?"bg-[var(--bg-glass-hover)] border-accent":"bg-[var(--surface-secondary)] border-border-subtle"}`,children:[p.jsx("div",{className:`font-bold text-sm mb-1 ${h===d.id?"text-[var(--accent-primary-light)]":"text-text-primary"}`,children:d.title||"Untitled Session"}),p.jsxs("div",{className:"flex justify-between items-center",children:[p.jsxs("div",{className:"text-[11px] text-text-muted font-mono",children:[d.id.substring(0,12),"..."]}),h===d.id&&p.jsx("span",{className:"text-[10px] bg-accent text-white px-2 py-0.5 rounded-[10px] font-extrabold",children:"ACTIVE"})]})]},d.id)),c.length===0&&p.jsxs("div",{className:"py-10 px-5 text-center text-text-muted",children:[p.jsx("div",{className:"text-3xl mb-3",children:"🕯️"}),p.jsx("div",{className:"text-[13px]",children:"No recent chat sessions found."})]})]}),p.jsx("div",{className:"px-5 py-4 bg-[var(--surface-tertiary)] border-t border-border-subtle text-right",children:p.jsx("button",{onClick:l,disabled:n,className:"btn btn-secondary btn-sm rounded-[10px]",children:n?"⌛ Refreshing...":"🔄 Refresh History"})})]})]})}function k3({sortedConversations:e,activeTabId:t,tabsOverflow:r,tabsContainerRef:n,terminalRef:i,onSelectTab:s,onReorder:o,pinTab:l,clearTabPinTimers:a,retryP2P:c}){const{sendCommand:h}=Si(),u=w.useRef(null),d=w.useRef(null),f=w.useRef(null),m=w.useRef(null),[g,x]=w.useState(!1),_=w.useCallback((R,A)=>{const D=A.touches[0];f.current={x:D.clientX,y:D.clientY},d.current=R,m.current=setTimeout(()=>{x(!0)},400)},[]),v=w.useCallback(R=>{if(!g||!d.current){m.current&&(clearTimeout(m.current),m.current=null);return}R.preventDefault();const A=R.touches[0],D=n.current;if(!D)return;const U=Array.from(D.querySelectorAll("[data-tabkey]"));for(const M of U){const F=M.getBoundingClientRect();if(A.clientX>=F.left&&A.clientX<=F.right){const W=M.getAttribute("data-tabkey");if(W&&W!==d.current){const L=e.map(ne=>ne.tabKey),$=L.indexOf(d.current),S=L.indexOf(W);if($!==-1&&S!==-1){const ne=[...L];ne.splice($,1),ne.splice(S,0,d.current),o(ne)}}break}}},[g,e,n,o]),y=w.useCallback(()=>{m.current&&(clearTimeout(m.current),m.current=null),x(!1),d.current=null,f.current=null},[]),E=()=>{const R=n.current;R&&R.scrollBy({left:-150,behavior:"smooth"})},N=()=>{const R=n.current;R&&R.scrollBy({left:150,behavior:"smooth"})},[k,I]=w.useState(!1),[z,Z]=w.useState(!1),T=w.useCallback(()=>{const R=n.current;R&&(I(R.scrollLeft>4),Z(R.scrollLeft+R.clientWidth<R.scrollWidth-4))},[n]);return w.useEffect(()=>{const R=n.current;if(!R)return;T(),R.addEventListener("scroll",T,{passive:!0});const A=new ResizeObserver(T);return A.observe(R),()=>{R.removeEventListener("scroll",T),A.disconnect()}},[n,T,e.length]),p.jsxs("div",{className:"relative shrink-0",children:[r&&p.jsx("button",{onClick:E,className:"absolute left-0 top-0 bottom-0 z-[5] w-8 border-none text-text-muted text-xs flex items-center justify-center transition-opacity duration-150",style:{background:"linear-gradient(to right, var(--bg-secondary) 60%, transparent)",cursor:k?"pointer":"default",opacity:k?.7:0,pointerEvents:k?"auto":"none"},onMouseEnter:R=>{k&&(R.currentTarget.style.opacity="1")},onMouseLeave:R=>{R.currentTarget.style.opacity=k?"0.7":"0"},children:"◀"}),r&&p.jsx("button",{onClick:N,className:"absolute right-0 top-0 bottom-0 z-[5] w-8 border-none text-text-muted text-xs flex items-center justify-center transition-opacity duration-150",style:{background:"linear-gradient(to left, var(--bg-secondary) 60%, transparent)",cursor:z?"pointer":"default",opacity:z?.7:0,pointerEvents:z?"auto":"none"},onMouseEnter:R=>{z&&(R.currentTarget.style.opacity="1")},onMouseLeave:R=>{R.currentTarget.style.opacity=z?"0.7":"0"},children:"▶"}),p.jsxs("div",{ref:n,className:"dashboard-agent-tabs flex overflow-x-auto overflow-y-visible shrink-0 bg-bg-secondary border-b border-border-subtle pt-1.5 pb-0 gap-1 select-none",onWheel:R=>{const A=n.current;A&&Math.abs(R.deltaY)>Math.abs(R.deltaX)&&(R.preventDefault(),A.scrollLeft+=R.deltaY)},style:{paddingLeft:r?36:8,paddingRight:r?36:8,scrollbarWidth:"none",WebkitOverflowScrolling:"touch"},children:[e.map((R,A)=>{const D=t===R.tabKey,U=R.status==="working"?"agent-tab-working":R.status==="waiting_approval"?"agent-tab-waiting":"",M=A<9?String(A+1):null,F=R.p2pState==="gave_up";return p.jsxs("div",{"data-tabkey":R.tabKey,className:`${U} shrink-0 px-2.5 py-1.5 rounded-t-lg border-b-0 cursor-grab flex items-center gap-2 transition-all duration-200`,draggable:!0,onDragStart:()=>{u.current=R.tabKey},onDragOver:W=>{W.preventDefault(),W.currentTarget.style.borderLeft="2px solid var(--accent-primary)"},onDragLeave:W=>{W.currentTarget.style.borderLeft=D?"1px solid var(--border-subtle)":"1px solid transparent"},onDrop:W=>{if(W.preventDefault(),W.currentTarget.style.borderLeft=D?"1px solid var(--border-subtle)":"1px solid transparent",!u.current||u.current===R.tabKey)return;const L=e.map(oe=>oe.tabKey),$=L.indexOf(u.current),S=L.indexOf(R.tabKey);if($===-1||S===-1)return;const ne=[...L];ne.splice($,1),ne.splice(S,0,u.current),o(ne),u.current=null},onDragEnd:()=>{u.current=null},onTouchStart:W=>_(R.tabKey,W),onTouchMove:v,onTouchEnd:y,onClick:()=>{a(),s(R.tabKey),R.streamSource==="agent-stream"&&R.agentType&&(h(R.ideId,"agent_stream_focus",{agentType:R.agentType}).catch(()=>{}),l(R.tabKey,[200,1500])),ar(R)&&setTimeout(()=>{var W,L;(L=(W=i.current)==null?void 0:W.bumpResize)==null||L.call(W)},100)},style:{background:D?"var(--bg-primary)":"rgba(255,255,255,0.03)",borderTop:D?"1px solid var(--border-subtle)":"1px solid transparent",borderLeft:D?"1px solid var(--border-subtle)":"1px solid transparent",borderRight:D?"1px solid var(--border-subtle)":"1px solid transparent",opacity:g&&d.current===R.tabKey?F?.15:.3:F?D?.6:.3:D?1:.5},children:[R.status==="working"?p.jsx("div",{className:"tab-spinner"}):R.status==="waiting_approval"?p.jsx("span",{className:"text-[8px] px-[5px] py-px text-yellow-400",children:"▲"}):R.p2pState==="gave_up"?p.jsx("span",{onClick:W=>{var $;W.stopPropagation();const L=R.daemonId||(($=R.ideId)==null?void 0:$.split(":")[0])||"";c==null||c(L)},title:"P2P disconnected — click to reconnect",className:"text-[8px] px-[5px] py-px text-yellow-400 cursor-pointer",children:"●"}):R.p2pState==="connecting"?p.jsx("span",{className:"text-[8px] px-[5px] py-px text-blue-400",children:"○"}):R.p2pState==="connected"?p.jsx("span",{className:"text-[8px] px-[5px] py-px text-green-400",children:"●"}):p.jsx("span",{className:"text-[8px] px-[5px] py-px text-text-muted",children:"●"}),p.jsxs("div",{className:"min-w-0",children:[p.jsx("div",{className:"text-xs font-bold whitespace-nowrap overflow-hidden text-ellipsis",children:R.displayPrimary}),p.jsxs("div",{className:"text-[8px] opacity-50 flex gap-1 items-center",children:[R.displaySecondary,R.machineName&&p.jsxs(p.Fragment,{children:[p.jsx("span",{className:"opacity-40",children:"·"}),p.jsxs("span",{className:"opacity-70",children:["🖥 ",R.machineName]})]})]})]}),M&&p.jsx("span",{className:"text-[9px] opacity-35 font-mono ml-0.5 shrink-0",children:M})]},R.tabKey)}),e.length===0&&p.jsx("div",{className:"p-2 text-xs opacity-40",children:"No active agents online."})]})]})}const Og={success:"rgba(16, 185, 129, 0.95)",warning:"rgba(245, 158, 11, 0.95)",info:"rgba(99, 102, 241, 0.95)"};function C3({toasts:e,onDismiss:t,onClickToast:r}){return p.jsx("div",{className:"fixed top-4 right-4 z-[9999] flex flex-col gap-2 pointer-events-none",children:e.map(n=>p.jsx("div",{className:"fade-in text-white px-5 py-3 rounded-xl text-[13px] font-semibold shadow-[0_8px_32px_rgba(0,0,0,0.3)] backdrop-blur-lg pointer-events-auto cursor-pointer animate-[toast-in_0.3s_ease-out] max-w-[360px]",style:{background:Og[n.type]||Og.info},onClick:()=>{r&&r(n),t(n.id)},children:n.message},n.id))})}const E3=e=>(e.id||"").includes(":cli:")||(e.id||"").includes(":acp:")||(e.id||"").includes(":ide:")?!0:e.daemonId!==e.id;function T3(e){var n;const t=(n=e.workspaceFolders)==null?void 0:n[0];return t!=null&&t.name?t.name:((t==null?void 0:t.path)??"").split("/").filter(Boolean).pop()||"Workspace"}function N3(e,t,r,n){var s;const i={};if(r)for(const o of r){const l=o;if(l.type==="adhdev-daemon"||l.daemonMode){const a=l.machine||{},c=l.machineNickname,h=a.hostname||((s=l.system)==null?void 0:s.hostname)||"",u=c||(h&&h!=="Unknown"?h.replace(/\.local$/,""):null)||`Machine ${(l.id||"").substring(0,6)}`;i[l.id]=u}}return e.flatMap(o=>{var x,_,v,y,E;const l=[],a=o.daemonId&&i[o.daemonId]||void 0,c=o.daemonId||((x=o.id)==null?void 0:x.split(":")[0])||o.id,h=n?n[c]||"new":void 0,u=T3(o),d=Ur(o.type),f=o.agentStreams,m=Array.isArray(f)?f:[],g=E3(o);if(g){const N=Yh(o.type),k=(_=o.agents)==null?void 0:_[0],I=(v=o.activeChat)==null?void 0:v.activeModal,z=I&&Array.isArray(I.buttons)&&I.buttons.length>0,Z=(y=o.activeChat)==null?void 0:y.status,T=Z==="generating"||Z==="loading"||Z&&Z.toLowerCase()==="thinking",A=z||Z==="waiting_approval"?"waiting_approval":T?"working":(k==null?void 0:k.status)||"idle",D=o.activeChat||{title:"",messages:[]};let U=D.title&&String(D.title).trim()?String(D.title).trim():"";const M=(E=o.activeChat)==null?void 0:E.id,F=o.chats;if(M&&Array.isArray(F)&&F.length>0){const ne=F.find(oe=>oe.id===M||oe.id&&String(oe.id)===String(M));ne!=null&&ne.title&&String(ne.title).trim()&&(U=String(ne.title).trim())}const W=D.messages||[],L=t[o.id]||[],$=new Map;W.filter(ne=>ne.role==="user").forEach(ne=>{$.set(ne.content,($.get(ne.content)||0)+1)});const S=L.filter(ne=>{const oe=$.get(ne.content)||0;return oe>0?($.set(ne.content,oe-1),!1):!0});l.push({ideId:o.id,daemonId:o.daemonId||void 0,agentName:N,agentType:ar(o)||Dr(o)?o.type:(k==null?void 0:k.type)||"ide-native",status:A,title:U,messages:[...W,...S],ideType:o.type,workspaceName:u,displayPrimary:U||N||u,displaySecondary:d,cdpconnected:o.cdpconnected,modalButtons:z?I.buttons:void 0,modalMessage:z?I.message:void 0,streamSource:"native",tabKey:o.id,machineName:a,p2pState:h})}if(g&&(ar(o)||Dr(o)))return l;for(const N of m){const k=N.activeModal&&Array.isArray(N.activeModal.buttons)&&N.activeModal.buttons.length>0,I=k?"waiting_approval":N.status==="streaming"?"working":N.status,z=`${o.id}:${N.agentType}`,Z=N.messages||[],T=t[z]||[],R=new Map;Z.filter(D=>D.role==="user").forEach(D=>{R.set(D.content,(R.get(D.content)||0)+1)});const A=T.filter(D=>{const U=R.get(D.content)||0;return U>0?(R.set(D.content,U-1),!1):!0});l.push({ideId:o.id,daemonId:o.daemonId||void 0,agentName:N.agentName,agentType:N.agentType,status:I,title:"",messages:[...Z,...A],ideType:o.type,workspaceName:u,displayPrimary:N.agentName,displaySecondary:d,cdpconnected:o.cdpconnected,modalButtons:k?N.activeModal.buttons:void 0,modalMessage:k?N.activeModal.message:void 0,streamSource:"agent-stream",tabKey:z,machineName:a,p2pState:h})}return l.length===0&&l.push({ideId:o.id,daemonId:o.daemonId||void 0,agentName:Yh(o.type),agentType:"ide-native",status:"idle",title:"",messages:[],ideType:o.type,workspaceName:u,displayPrimary:u||d,displaySecondary:d,cdpconnected:o.cdpconnected,streamSource:"native",tabKey:o.id,p2pState:h}),l})}let P3=y0;function wf(){return P3()}class L3{constructor(){ps(this,"listeners",new Map)}send(t){}isConnected(){return!1}on(t,r){return this.listeners.has(t)||this.listeners.set(t,new Set),this.listeners.get(t).add(r),()=>{var n;(n=this.listeners.get(t))==null||n.delete(r)}}emit(t,...r){var n;(n=this.listeners.get(t))==null||n.forEach(i=>i(...r))}}let R3=new L3;class D3{constructor(){ps(this,"ptyCallbacks",new Set)}sendPtyInput(t,r,n){return!1}sendPtyResize(t,r,n,i){return!1}async requestChatHistory(t,r,n,i,s){return{messages:[],hasMore:!1}}retryConnection(t){}getState(t){return"disconnected"}sendData(t,r){return!1}get(t){}onScreenshot(t,r){return()=>{}}onStatusEvent(t){return()=>{}}onPtyOutput(t){return this.ptyCallbacks.add(t),()=>{this.ptyCallbacks.delete(t)}}emitPtyOutput(t,r){this.ptyCallbacks.forEach(n=>n(t,r))}}let ti=new D3,jg=ti;function M3(){const{sendCommand:e}=Si(),t=wf(),{updateIdeChats:r,screenshotMap:n,setScreenshotMap:i}=t,s=t.ides||[],o=t.toasts||[],l=t.setToasts||(()=>{}),a=t.wsStatus||"connected",c=t.isP2PActive||!1,h=t.p2pStates||{},u=t.retryP2P||(()=>{}),d=t.showReconnected||!1,[f,m]=w.useState(()=>{try{const j=new URLSearchParams(window.location.search).get("activeTab");return j||sessionStorage.getItem("adhdev_dashboard_activeTab")}catch{return null}}),g=w.useCallback(B=>{m(B);try{B?sessionStorage.setItem("adhdev_dashboard_activeTab",B):sessionStorage.removeItem("adhdev_dashboard_activeTab")}catch{}},[]),x=w.useRef([]),[_,v]=w.useState(""),[y,E]=w.useState({}),[N,k]=w.useState(!1),[I,z]=w.useState(!1),[Z,T]=w.useState(!1),[R,A]=w.useState([]),[D,U]=w.useState({}),[M,F]=w.useState({}),W=w.useRef(null),L=w.useRef(null),$=w.useRef(null),[S,ne]=w.useState(!1),oe=s.find(B=>B.type==="adhdev-daemon"),b=(oe==null?void 0:oe.detectedIdes)||[],me=!!oe,V=w.useMemo(()=>{var K,Y;const B=s.filter(ee=>ee.type!=="adhdev-daemon"),j=new Map;for(const ee of B){const se=j.get(ee.id);if(!se)j.set(ee.id,ee);else{const le=(((K=se.workspaceFolders)==null?void 0:K.length)||0)+(se.activeChat?1:0);((((Y=ee.workspaceFolders)==null?void 0:Y.length)||0)+(ee.activeChat?1:0)>le||(ee.timestamp||0)>(se.timestamp||0))&&j.set(ee.id,ee)}}return Array.from(j.values())},[s]),H=w.useMemo(()=>{const B=N3(V,D,s,h),j=Date.now();return B.map(K=>{const Y=M[K.tabKey];return Y&&j-Y<5e3?{...K,messages:[],title:""}:K})},[V,D,M,s]),[G,he]=w.useState(()=>{try{return JSON.parse(sessionStorage.getItem("adhdev_tabOrder")||"[]")}catch{return[]}}),ue=w.useMemo(()=>{if(G.length===0)return H;const B=new Map(G.map((j,K)=>[j,K]));return[...H].sort((j,K)=>{const Y=B.get(j.tabKey)??9999,ee=B.get(K.tabKey)??9999;return Y-ee})},[H,G]);w.useEffect(()=>{const B=$.current;if(!B)return;const j=()=>ne(B.scrollWidth>B.clientWidth+2);j();const K=new ResizeObserver(j);return K.observe(B),B.addEventListener("scroll",j),()=>{K.disconnect(),B.removeEventListener("scroll",j)}},[ue.length]);const ge=w.useCallback(B=>{he(B);try{sessionStorage.setItem("adhdev_tabOrder",JSON.stringify(B))}catch{}},[]);w.useEffect(()=>{if(Object.keys(M).length===0)return;const j=setTimeout(()=>{F(K=>{const Y=Date.now(),ee={};for(const[se,le]of Object.entries(K))Y-le<5e3&&(ee[se]=le);return Object.keys(ee).length===Object.keys(K).length?K:ee})},5500);return()=>clearTimeout(j)},[M]);const O=ue.find(B=>B.tabKey===f),Ue=ue.map(B=>B.tabKey).join(","),ve=w.useRef(!1);w.useEffect(()=>{if(ue.length===0||ve.current&&f&&ue.some(j=>j.tabKey===f))return;const B=ue.find(j=>j.cdpconnected===!0);B?g(B.tabKey):(!f||!ue.some(j=>j.tabKey===f))&&g(ue[0].tabKey)},[Ue]);const Ke=w.useCallback(()=>{x.current.forEach(B=>clearTimeout(B)),x.current=[]},[]),Ot=w.useCallback((B,j)=>{Ke();for(const K of j)x.current.push(setTimeout(()=>g(B),K))},[Ke]);w.useEffect(()=>{var K;if(!((K=O==null?void 0:O.messages)!=null&&K.length))return;const B=O.ideId,j=Date.now();E(Y=>{let ee=!1;const se={...Y};return O.messages.forEach((le,fe)=>{const ae=`${B}-${le.id??`i-${fe}`}`;se[ae]==null&&(se[ae]=j,ee=!0)}),ee?se:Y})},[O==null?void 0:O.ideId,O==null?void 0:O.messages]);const qt=w.useRef(!1);w.useEffect(()=>{if(!N){qt.current=!1;return}if(!O||qt.current||I)return;const B=s.find(j=>j.id===O.ideId);B&&(!B.chats||B.chats.length===0)&&(qt.current=!0,X())},[N,O==null?void 0:O.ideId]),w.useEffect(()=>{const B=setInterval(()=>{const j=Date.now()-3e5;A(K=>{const Y=K.filter(ee=>ee.timestamp>j).slice(-100);return Y.length===K.length?K:Y})},6e4);return()=>clearInterval(B)},[]);const De=w.useRef(new Map);w.useEffect(()=>{const B=(K,Y)=>{var fe,ae,xe;if(!Y)return;for(const we of H){if(!ar(we))continue;const nt=(fe=we.ideId)!=null&&fe.includes(":cli:")?we.ideId.split(":cli:")[1]:"";if(K===nt||K===we.agentType||K===we.ideType){const jt=De.current.get(we.tabKey)||[];jt.push(Y),jt.length>1e4&&jt.splice(0,jt.length-5e3),De.current.set(we.tabKey,jt)}}const ee=O&&ar(O),se=(ae=O==null?void 0:O.ideId)!=null&&ae.includes(":cli:")?O.ideId.split(":cli:")[1]:"",le=K===se||K===(O==null?void 0:O.agentType)||K===(O==null?void 0:O.ideType);ee&&le&&((xe=W.current)==null||xe.write(Y))},j=jg.onPtyOutput(B);return()=>{j()}},[O==null?void 0:O.agentType,O==null?void 0:O.ideType,O==null?void 0:O.tabKey,H]),w.useEffect(()=>{if(!O||!ar(O))return;const j=setTimeout(()=>{if(W.current){const K=De.current.get(O.tabKey);if(K&&K.length>0)for(const Y of K)W.current.write(Y);W.current.bumpResize()}},200);return()=>clearTimeout(j)},[O==null?void 0:O.tabKey]),w.useEffect(()=>{if(!O)return;const B=setTimeout(()=>{var j;(j=L.current)==null||j.focus()},150);return()=>clearTimeout(B)},[O==null?void 0:O.tabKey]),w.useEffect(()=>{const B=j=>{var le,fe,ae,xe,we,Ze;const K=parseInt(j.key);if(isNaN(K)||K<1||K>9)return;if(j.ctrlKey){j.preventDefault();const nt=ue[K-1];nt&&(Ke(),g(nt.tabKey));return}const Y=(le=document.activeElement)==null?void 0:le.tagName,ee=Y==="INPUT"||Y==="TEXTAREA"||((fe=document.activeElement)==null?void 0:fe.isContentEditable),se=((xe=(ae=document.activeElement)==null?void 0:ae.closest)==null?void 0:xe.call(ae,".xterm-helper-textarea"))!=null||((Ze=(we=document.activeElement)==null?void 0:we.classList)==null?void 0:Ze.contains("xterm-helper-textarea"));if(!ee&&!se){j.preventDefault();const nt=ue[K-1];nt&&(Ke(),g(nt.tabKey))}};return window.addEventListener("keydown",B),()=>window.removeEventListener("keydown",B)},[ue,Ke,g]),w.useEffect(()=>{const B=R3.on("status_event",j=>{var se;const K=Ur(j.ideType||"");let Y="",ee="info";if(j.event==="agent:generating_completed"){const le=j.duration?` (${j.duration}s)`:"";Y=`✅ ${K} agent task completed${le}`,ee="success";try{new Audio("data:audio/wav;base64,UklGRigAAABXQVZFZm10IBAAAAABAAEAQB8AAEAfAAABAAgAZGF0YQQAAAB/f39/").play().catch(()=>{})}catch{}if(j.ideId){const fe={role:"system",timestamp:Date.now(),content:`✅ Task completed${le}`,_localId:`sys_complete_${Date.now()}`};U(ae=>{for(const xe of Object.keys(ae))if(xe.includes(j.ideId))return{...ae,[xe]:[...ae[xe]||[],fe]};return ae})}}else if(j.event==="agent:generating_started")j.ideId&&U(le=>{const fe={...le};for(const ae of Object.keys(fe))ae.includes(j.ideId)&&(fe[ae]=(fe[ae]||[]).filter(xe=>{var we;return!(xe.role==="system"&&((we=xe._localId)!=null&&we.startsWith("sys_complete_")))}));return fe});else if((j.event==="agent:waiting_approval"||j.event==="agent:approval_needed")&&(Y=`⚡ ${K} approval needed`,ee="warning",j.ideId)){const le=j.modalMessage||"Approval requested",fe=(se=j.modalButtons)!=null&&se.length?j.modalButtons.map(xe=>`[${xe}]`).join(" "):"[Approve] [Reject]",ae={role:"system",timestamp:Date.now(),content:`⚡ Approval requested: ${le}
|
|
167
|
+
This will terminate the CLI process.`))return;const u=e.ideId||e.daemonId||"";try{await a(u,"stop_cli",{cliType:h})}catch(f){console.error("Stop CLI failed:",f)}},title:"Stop CLI process",className:"px-2 py-0.5 rounded-[5px] text-[11px] bg-red-500/[0.08] text-red-400 border border-red-500/30 cursor-pointer leading-none font-semibold",children:"■ Stop"})]})]}),p.jsx(y1,{activeConv:e,onModalButton:o}),p.jsx("div",{className:"flex-1 min-h-0 p-2 bg-[#0f1117]",children:p.jsx(v1,{ref:r,onInput:h=>{var f;const u=e.ideId||e.daemonId||"",d=(f=e.ideId)!=null&&f.includes(":cli:")?e.ideId.split(":cli:")[1]:e.ideType||e.agentType||"";c!=null&&c(u,{type:"pty_input",cliType:d,data:h})||a(u,"pty_input",{cliType:d,data:h}).catch(console.error)},onResize:(h,u)=>{var m;const d=e.ideId||e.daemonId||"",f=(m=e.ideId)!=null&&m.includes(":cli:")?e.ideId.split(":cli:")[1]:e.ideType||e.agentType||"";c!=null&&c(d,{type:"pty_resize",cliType:f,cols:h,rows:u})||a(d,"pty_resize",{cliType:f,cols:h,rows:u,force:!0}).catch(()=>{})}},e.tabKey)}),p.jsx("div",{className:"px-3 py-2 bg-[var(--surface-primary)] border-t border-border-subtle shrink-0",children:p.jsxs("div",{className:"flex gap-2.5 items-center",children:[p.jsx("div",{className:"flex-1 relative",children:p.jsx("input",{ref:l,type:"text",placeholder:`Send message to ${e.displayPrimary}...`,value:n,onChange:h=>i(h.target.value),onPaste:h=>{const u=h.clipboardData.getData("text");u&&i(d=>d+u),h.preventDefault()},onKeyDown:h=>{if(h.key==="Enter"){if(h.nativeEvent.isComposing){h.preventDefault();return}h.preventDefault(),s()}},className:"w-full h-9 rounded-[18px] px-4 bg-bg-secondary border border-border-subtle text-[13px] text-text-primary"})}),p.jsx("button",{onClick:s,disabled:!n.trim(),className:`w-9 h-9 rounded-full flex items-center justify-center border-none shrink-0 transition-all duration-300 ${n.trim()?"bg-accent cursor-pointer":"bg-bg-secondary cursor-default"}`,children:p.jsx("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",strokeLinecap:"round",strokeLinejoin:"round",className:n.trim()?"text-white":"text-text-muted",children:p.jsx("path",{d:"M22 2L11 13M22 2l-7 20-4-9-9-4 20-7z"})})})]})})]})}function y3({wsStatus:e,showReconnected:t,loginUrl:r}){const n=e==="disconnected"||e==="reconnecting"||e==="offline"||e==="auth_failed",i=e==="auth_failed"?"red":e==="offline"?"orange":"violet",s={red:"linear-gradient(90deg, rgba(239,68,68,0.12), rgba(239,68,68,0.04))",orange:"linear-gradient(90deg, rgba(255,107,53,0.12), rgba(255,107,53,0.04))",violet:"linear-gradient(90deg, rgba(139,92,246,0.12), rgba(139,92,246,0.04))"},o={red:"1px solid rgba(239,68,68,0.2)",orange:"1px solid rgba(255,107,53,0.2)",violet:"1px solid rgba(139,92,246,0.2)"},l={red:"#ef4444",orange:"#ff6b35",violet:"#a78bfa"};return p.jsxs(p.Fragment,{children:[n&&p.jsxs("div",{className:"py-2.5 px-5 text-[13px] font-semibold flex items-center gap-2.5 justify-center",style:{background:s[i],borderBottom:o[i],color:l[i]},children:[p.jsx("img",{src:"/otter-logo.png",alt:"",className:"w-5 h-5",style:{opacity:e==="auth_failed"?.6:1,animation:e==="auth_failed"?void 0:"pulse 2s ease-in-out infinite",filter:e==="auth_failed"?"grayscale(1)":void 0}}),e==="offline"&&"Network offline — waiting for connection...",e==="disconnected"&&"Reconnecting to server...",e==="reconnecting"&&"Reconnecting to server...",e==="auth_failed"&&(r?p.jsxs(p.Fragment,{children:["Session expired."," ",p.jsx("a",{href:r,className:"text-inherit underline",children:"Log in again"})]}):"Connection failed — please restart the server.")]}),t&&e==="connected"&&p.jsxs("div",{className:"py-2 px-4 text-xs font-semibold flex items-center gap-2 justify-center bg-gradient-to-r from-green-500/[0.12] to-green-500/[0.04] text-green-400 border-b border-green-500/15 animate-[fadeIn_0.3s_ease]",children:[p.jsx("img",{src:"/otter-logo.png",alt:"",className:"w-4 h-4"}),"Connected"]})]})}const ru=e=>(e.ideId||e.tabKey||e.id||"").includes(":cli:"),nu=e=>(e.ideId||e.tabKey||e.id||"").includes(":acp:");function x3({activeConv:e,agentCount:t,wsStatus:r,isP2PActive:n,onOpenHistory:i}){const s=cs(),o=n?"#22c55e":r==="connected"?"#eab308":"#ef4444",l=n?"0 0 4px #22c55e80":r==="connected"?"0 0 4px #eab30880":"0 0 4px #ef444480";return p.jsxs("div",{className:"dashboard-header",children:[p.jsx("div",{className:"flex items-center gap-3",children:p.jsxs("div",{className:"leading-tight",children:[p.jsxs("h1",{className:"header-title m-0",children:["💬 Dashboard",p.jsxs("span",{className:"header-count-mobile text-[10px] font-semibold opacity-60 ml-2 tracking-wide",children:[t," Active",p.jsx("span",{className:"inline-block w-[5px] h-[5px] rounded-full ml-1 align-middle",style:{background:o}})]})]}),p.jsxs("div",{className:"header-subtitle text-[11px] items-center gap-1",children:[t," agent",t!==1?"s":""," active",p.jsx("span",{title:n?"P2P Direct":r==="connected"?"WebSocket":"Disconnected",className:"inline-block w-1.5 h-1.5 rounded-full shrink-0",style:{background:o,boxShadow:l}})]})]})}),p.jsxs("div",{className:"flex gap-2 items-center",children:[e&&!ru(e)&&!nu(e)&&p.jsx("button",{onClick:()=>s(`/ide/${e.ideId}`),className:"btn btn-primary btn-sm border-none px-3 py-1.5 text-xs",children:"IDE"}),e&&!ru(e)&&!nu(e)&&p.jsx("button",{onClick:i,className:"btn btn-secondary btn-sm border-none bg-bg-secondary px-2.5 py-1.5 flex items-center gap-1",title:"Chat History",children:"📜"}),e&&!ru(e)&&!nu(e)&&p.jsx("button",{onClick:()=>s(`/ide/${e.ideId}?view=remote`),className:"btn btn-secondary btn-sm border-none bg-bg-secondary px-2.5 py-1.5",title:"Remote Control",children:"🖥️"})]})]})}function Ur(e){return e?e.charAt(0).toUpperCase()+e.slice(1).toLowerCase():"IDE"}function S3(e){if(e<60)return`${Math.round(e)}s`;const t=Math.floor(e/60);if(t<60)return`${t}m`;const r=Math.floor(t/60),n=t%60;if(r<24)return n>0?`${r}h ${n}m`:`${r}h`;const i=Math.floor(r/24),s=r%24;return`${i}d ${s}h`}function Ag(e){return e<1024*1024*1024?`${(e/(1024*1024)).toFixed(0)} MB`:`${(e/(1024*1024*1024)).toFixed(1)} GB`}function Bg(e){return(e.id||"").includes(":cli:")}function Yh(e,t){return Ur(e)}function w3(e){if(!Array.isArray(e)||e.length<=1)return e;const t=new Map,r=["generating","streaming","active","connected","idle","panel_hidden"];for(const n of e){const i=(n.name||n.id||"").toLowerCase().replace(/\s+/g,"-"),s=t.get(i);if(!s){t.set(i,n);continue}const o=r.indexOf(s.status||"idle"),l=r.indexOf(n.status||"idle");l>=0&&(o<0||l<o)&&t.set(i,n)}return Array.from(t.values())}function b3({activeConv:e,ides:t,isCreatingChat:r,isRefreshingHistory:n,onClose:i,onNewChat:s,onSwitchSession:o,onRefreshHistory:l}){var u;const a=t.find(d=>d.id===e.ideId),c=(a==null?void 0:a.chats)||[],h=(u=a==null?void 0:a.activeChat)==null?void 0:u.id;return p.jsxs("div",{className:"fixed inset-0 z-[1000] flex items-center justify-center",children:[p.jsx("div",{onClick:i,className:"absolute inset-0 bg-black/60 backdrop-blur-sm"}),p.jsxs("div",{className:"card fade-in relative w-[90%] max-w-[500px] max-h-[80vh] flex flex-col p-0 overflow-hidden shadow-[0_20px_40px_rgba(0,0,0,0.4)] rounded-[20px]",children:[p.jsxs("div",{className:"px-6 py-5 border-b border-border-subtle flex justify-between items-center bg-[var(--surface-primary)]",children:[p.jsxs("div",{children:[p.jsx("h3",{className:"m-0 text-lg font-extrabold",children:"Chat History"}),p.jsxs("div",{className:"text-xs text-text-muted mt-0.5",children:[e.displayPrimary," — ",Ur(e.ideType)]})]}),p.jsx("button",{onClick:i,className:"bg-transparent border-none text-xl text-text-muted cursor-pointer",children:"✕"})]}),p.jsxs("div",{className:"flex-1 overflow-y-auto p-3 bg-bg-primary",children:[p.jsx("button",{onClick:s,disabled:r,className:"w-full p-3.5 rounded-xl mb-3 bg-indigo-500/10 border border-dashed border-accent text-accent font-bold text-sm cursor-pointer",children:r?"⌛ Creating...":"+ Start New Chat Session"}),c.map(d=>p.jsxs("div",{onClick:()=>{o(e.ideId,d.id),i()},className:`p-4 rounded-xl mb-2 cursor-pointer border transition-all ${h===d.id?"bg-[var(--bg-glass-hover)] border-accent":"bg-[var(--surface-secondary)] border-border-subtle"}`,children:[p.jsx("div",{className:`font-bold text-sm mb-1 ${h===d.id?"text-[var(--accent-primary-light)]":"text-text-primary"}`,children:d.title||"Untitled Session"}),p.jsxs("div",{className:"flex justify-between items-center",children:[p.jsxs("div",{className:"text-[11px] text-text-muted font-mono",children:[d.id.substring(0,12),"..."]}),h===d.id&&p.jsx("span",{className:"text-[10px] bg-accent text-white px-2 py-0.5 rounded-[10px] font-extrabold",children:"ACTIVE"})]})]},d.id)),c.length===0&&p.jsxs("div",{className:"py-10 px-5 text-center text-text-muted",children:[p.jsx("div",{className:"text-3xl mb-3",children:"🕯️"}),p.jsx("div",{className:"text-[13px]",children:"No recent chat sessions found."})]})]}),p.jsx("div",{className:"px-5 py-4 bg-[var(--surface-tertiary)] border-t border-border-subtle text-right",children:p.jsx("button",{onClick:l,disabled:n,className:"btn btn-secondary btn-sm rounded-[10px]",children:n?"⌛ Refreshing...":"🔄 Refresh History"})})]})]})}function k3({sortedConversations:e,activeTabId:t,tabsOverflow:r,tabsContainerRef:n,terminalRef:i,onSelectTab:s,onReorder:o,pinTab:l,clearTabPinTimers:a,retryP2P:c}){const{sendCommand:h}=Si(),u=w.useRef(null),d=w.useRef(null),f=w.useRef(null),m=w.useRef(null),[g,x]=w.useState(!1),_=w.useCallback((R,A)=>{const D=A.touches[0];f.current={x:D.clientX,y:D.clientY},d.current=R,m.current=setTimeout(()=>{x(!0)},400)},[]),v=w.useCallback(R=>{if(!g||!d.current){m.current&&(clearTimeout(m.current),m.current=null);return}R.preventDefault();const A=R.touches[0],D=n.current;if(!D)return;const U=Array.from(D.querySelectorAll("[data-tabkey]"));for(const M of U){const F=M.getBoundingClientRect();if(A.clientX>=F.left&&A.clientX<=F.right){const W=M.getAttribute("data-tabkey");if(W&&W!==d.current){const L=e.map(ne=>ne.tabKey),$=L.indexOf(d.current),S=L.indexOf(W);if($!==-1&&S!==-1){const ne=[...L];ne.splice($,1),ne.splice(S,0,d.current),o(ne)}}break}}},[g,e,n,o]),y=w.useCallback(()=>{m.current&&(clearTimeout(m.current),m.current=null),x(!1),d.current=null,f.current=null},[]),E=()=>{const R=n.current;R&&R.scrollBy({left:-150,behavior:"smooth"})},N=()=>{const R=n.current;R&&R.scrollBy({left:150,behavior:"smooth"})},[k,I]=w.useState(!1),[z,Z]=w.useState(!1),T=w.useCallback(()=>{const R=n.current;R&&(I(R.scrollLeft>4),Z(R.scrollLeft+R.clientWidth<R.scrollWidth-4))},[n]);return w.useEffect(()=>{const R=n.current;if(!R)return;T(),R.addEventListener("scroll",T,{passive:!0});const A=new ResizeObserver(T);return A.observe(R),()=>{R.removeEventListener("scroll",T),A.disconnect()}},[n,T,e.length]),p.jsxs("div",{className:"relative shrink-0",children:[r&&p.jsx("button",{onClick:E,className:"absolute left-0 top-0 bottom-0 z-[5] w-8 border-none text-text-muted text-xs flex items-center justify-center transition-opacity duration-150",style:{background:"linear-gradient(to right, var(--bg-secondary) 60%, transparent)",cursor:k?"pointer":"default",opacity:k?.7:0,pointerEvents:k?"auto":"none"},onMouseEnter:R=>{k&&(R.currentTarget.style.opacity="1")},onMouseLeave:R=>{R.currentTarget.style.opacity=k?"0.7":"0"},children:"◀"}),r&&p.jsx("button",{onClick:N,className:"absolute right-0 top-0 bottom-0 z-[5] w-8 border-none text-text-muted text-xs flex items-center justify-center transition-opacity duration-150",style:{background:"linear-gradient(to left, var(--bg-secondary) 60%, transparent)",cursor:z?"pointer":"default",opacity:z?.7:0,pointerEvents:z?"auto":"none"},onMouseEnter:R=>{z&&(R.currentTarget.style.opacity="1")},onMouseLeave:R=>{R.currentTarget.style.opacity=z?"0.7":"0"},children:"▶"}),p.jsxs("div",{ref:n,className:"dashboard-agent-tabs flex overflow-x-auto overflow-y-visible shrink-0 bg-bg-secondary border-b border-border-subtle pt-1.5 pb-0 gap-1 select-none",onWheel:R=>{const A=n.current;A&&Math.abs(R.deltaY)>Math.abs(R.deltaX)&&(R.preventDefault(),A.scrollLeft+=R.deltaY)},style:{paddingLeft:r?36:8,paddingRight:r?36:8,scrollbarWidth:"none",WebkitOverflowScrolling:"touch"},children:[e.map((R,A)=>{const D=t===R.tabKey,U=R.status==="working"?"agent-tab-working":R.status==="waiting_approval"?"agent-tab-waiting":"",M=A<9?String(A+1):null,F=R.p2pState==="gave_up";return p.jsxs("div",{"data-tabkey":R.tabKey,className:`${U} shrink-0 px-2.5 py-1.5 rounded-t-lg border-b-0 cursor-grab flex items-center gap-2 transition-all duration-200`,draggable:!0,onDragStart:()=>{u.current=R.tabKey},onDragOver:W=>{W.preventDefault(),W.currentTarget.style.borderLeft="2px solid var(--accent-primary)"},onDragLeave:W=>{W.currentTarget.style.borderLeft=D?"1px solid var(--border-subtle)":"1px solid transparent"},onDrop:W=>{if(W.preventDefault(),W.currentTarget.style.borderLeft=D?"1px solid var(--border-subtle)":"1px solid transparent",!u.current||u.current===R.tabKey)return;const L=e.map(oe=>oe.tabKey),$=L.indexOf(u.current),S=L.indexOf(R.tabKey);if($===-1||S===-1)return;const ne=[...L];ne.splice($,1),ne.splice(S,0,u.current),o(ne),u.current=null},onDragEnd:()=>{u.current=null},onTouchStart:W=>_(R.tabKey,W),onTouchMove:v,onTouchEnd:y,onClick:()=>{a(),s(R.tabKey),R.streamSource==="agent-stream"&&R.agentType&&(h(R.ideId,"agent_stream_focus",{agentType:R.agentType}).catch(()=>{}),l(R.tabKey,[200,1500])),ar(R)&&setTimeout(()=>{var W,L;(L=(W=i.current)==null?void 0:W.bumpResize)==null||L.call(W)},100)},style:{background:D?"var(--bg-primary)":"rgba(255,255,255,0.03)",borderTop:D?"1px solid var(--border-subtle)":"1px solid transparent",borderLeft:D?"1px solid var(--border-subtle)":"1px solid transparent",borderRight:D?"1px solid var(--border-subtle)":"1px solid transparent",opacity:g&&d.current===R.tabKey?F?.15:.3:F?D?.6:.3:D?1:.5},children:[R.status==="working"?p.jsx("div",{className:"tab-spinner"}):R.status==="waiting_approval"?p.jsx("span",{className:"text-[8px] px-[5px] py-px text-yellow-400",children:"▲"}):R.p2pState==="gave_up"?p.jsx("span",{onClick:W=>{var $;W.stopPropagation();const L=R.daemonId||(($=R.ideId)==null?void 0:$.split(":")[0])||"";c==null||c(L)},title:"P2P disconnected — click to reconnect",className:"text-[8px] px-[5px] py-px text-yellow-400 cursor-pointer",children:"●"}):R.p2pState==="connecting"?p.jsx("span",{className:"text-[8px] px-[5px] py-px text-blue-400",children:"○"}):R.p2pState==="connected"?p.jsx("span",{className:"text-[8px] px-[5px] py-px text-green-400",children:"●"}):p.jsx("span",{className:"text-[8px] px-[5px] py-px text-text-muted",children:"●"}),p.jsxs("div",{className:"min-w-0",children:[p.jsx("div",{className:"text-xs font-bold whitespace-nowrap overflow-hidden text-ellipsis",children:R.displayPrimary}),p.jsxs("div",{className:"text-[8px] opacity-50 flex gap-1 items-center",children:[R.displaySecondary,R.machineName&&p.jsxs(p.Fragment,{children:[p.jsx("span",{className:"opacity-40",children:"·"}),p.jsxs("span",{className:"opacity-70",children:["🖥 ",R.machineName]})]})]})]}),M&&p.jsx("span",{className:"text-[9px] opacity-35 font-mono ml-0.5 shrink-0",children:M})]},R.tabKey)}),e.length===0&&p.jsx("div",{className:"p-2 text-xs opacity-40",children:"No active agents online."})]})]})}const Og={success:"rgba(16, 185, 129, 0.95)",warning:"rgba(245, 158, 11, 0.95)",info:"rgba(99, 102, 241, 0.95)"};function C3({toasts:e,onDismiss:t,onClickToast:r}){return p.jsx("div",{className:"fixed top-4 right-4 z-[9999] flex flex-col gap-2 pointer-events-none",children:e.map(n=>p.jsx("div",{className:"fade-in text-white px-5 py-3 rounded-xl text-[13px] font-semibold shadow-[0_8px_32px_rgba(0,0,0,0.3)] backdrop-blur-lg pointer-events-auto cursor-pointer animate-[toast-in_0.3s_ease-out] max-w-[360px]",style:{background:Og[n.type]||Og.info},onClick:()=>{r&&r(n),t(n.id)},children:n.message},n.id))})}const E3=e=>(e.id||"").includes(":cli:")||(e.id||"").includes(":acp:")||(e.id||"").includes(":ide:")?!0:e.daemonId!==e.id;function T3(e){var n;const t=(n=e.workspaceFolders)==null?void 0:n[0];return t!=null&&t.name?t.name:((t==null?void 0:t.path)??"").split("/").filter(Boolean).pop()||"Workspace"}function N3(e,t,r,n){var s;const i={};if(r)for(const o of r){const l=o;if(l.type==="adhdev-daemon"||l.daemonMode){const a=l.machine||{},c=l.machineNickname,h=a.hostname||((s=l.system)==null?void 0:s.hostname)||"",u=c||(h&&h!=="Unknown"?h.replace(/\.local$/,""):null)||`Machine ${(l.id||"").substring(0,6)}`;i[l.id]=u}}return e.flatMap(o=>{var x,_,v,y,E;const l=[],a=o.daemonId&&i[o.daemonId]||void 0,c=o.daemonId||((x=o.id)==null?void 0:x.split(":")[0])||o.id,h=n?n[c]||"new":void 0,u=T3(o),d=Ur(o.type),f=o.agentStreams,m=Array.isArray(f)?f:[],g=E3(o);if(g){const N=Yh(o.type),k=(_=o.agents)==null?void 0:_[0],I=(v=o.activeChat)==null?void 0:v.activeModal,z=I&&Array.isArray(I.buttons)&&I.buttons.length>0,Z=(y=o.activeChat)==null?void 0:y.status,T=Z==="generating"||Z==="loading"||Z&&Z.toLowerCase()==="thinking",A=z||Z==="waiting_approval"?"waiting_approval":T?"working":(k==null?void 0:k.status)||"idle",D=o.activeChat||{title:"",messages:[]};let U=D.title&&String(D.title).trim()?String(D.title).trim():"";const M=(E=o.activeChat)==null?void 0:E.id,F=o.chats;if(M&&Array.isArray(F)&&F.length>0){const ne=F.find(oe=>oe.id===M||oe.id&&String(oe.id)===String(M));ne!=null&&ne.title&&String(ne.title).trim()&&(U=String(ne.title).trim())}const W=D.messages||[],L=t[o.id]||[],$=new Map;W.filter(ne=>ne.role==="user").forEach(ne=>{$.set(ne.content,($.get(ne.content)||0)+1)});const S=L.filter(ne=>{const oe=$.get(ne.content)||0;return oe>0?($.set(ne.content,oe-1),!1):!0});l.push({ideId:o.id,daemonId:o.daemonId||void 0,agentName:N,agentType:ar(o)||Dr(o)?o.type:(k==null?void 0:k.type)||"ide-native",status:A,title:U,messages:[...W,...S],ideType:o.type,workspaceName:u,displayPrimary:U||N||u,displaySecondary:d,cdpconnected:o.cdpconnected,modalButtons:z?I.buttons:void 0,modalMessage:z?I.message:void 0,streamSource:"native",tabKey:o.id,machineName:a,p2pState:h})}if(g&&(ar(o)||Dr(o)))return l;for(const N of m){const k=N.activeModal&&Array.isArray(N.activeModal.buttons)&&N.activeModal.buttons.length>0,I=k?"waiting_approval":N.status==="streaming"?"working":N.status,z=`${o.id}:${N.agentType}`,Z=N.messages||[],T=t[z]||[],R=new Map;Z.filter(D=>D.role==="user").forEach(D=>{R.set(D.content,(R.get(D.content)||0)+1)});const A=T.filter(D=>{const U=R.get(D.content)||0;return U>0?(R.set(D.content,U-1),!1):!0});l.push({ideId:o.id,daemonId:o.daemonId||void 0,agentName:N.agentName,agentType:N.agentType,status:I,title:"",messages:[...Z,...A],ideType:o.type,workspaceName:u,displayPrimary:N.agentName,displaySecondary:d,cdpconnected:o.cdpconnected,modalButtons:k?N.activeModal.buttons:void 0,modalMessage:k?N.activeModal.message:void 0,streamSource:"agent-stream",tabKey:z,machineName:a,p2pState:h})}return l.length===0&&l.push({ideId:o.id,daemonId:o.daemonId||void 0,agentName:Yh(o.type),agentType:"ide-native",status:"idle",title:"",messages:[],ideType:o.type,workspaceName:u,displayPrimary:u||d,displaySecondary:d,cdpconnected:o.cdpconnected,streamSource:"native",tabKey:o.id,p2pState:h}),l})}let P3=y0;function wf(){return P3()}class L3{constructor(){ps(this,"listeners",new Map)}send(t){}isConnected(){return!1}on(t,r){return this.listeners.has(t)||this.listeners.set(t,new Set),this.listeners.get(t).add(r),()=>{var n;(n=this.listeners.get(t))==null||n.delete(r)}}emit(t,...r){var n;(n=this.listeners.get(t))==null||n.forEach(i=>i(...r))}}let R3=new L3;class D3{constructor(){ps(this,"ptyCallbacks",new Set)}sendPtyInput(t,r,n){return!1}sendPtyResize(t,r,n,i){return!1}async requestChatHistory(t,r,n,i,s){return{messages:[],hasMore:!1}}retryConnection(t){}getState(t){return"disconnected"}sendData(t,r){return!1}get(t){}onScreenshot(t,r){return()=>{}}onStatusEvent(t){return()=>{}}onPtyOutput(t){return this.ptyCallbacks.add(t),()=>{this.ptyCallbacks.delete(t)}}emitPtyOutput(t,r){this.ptyCallbacks.forEach(n=>n(t,r))}}let ti=new D3,jg=ti;function M3(){const{sendCommand:e}=Si(),t=wf(),{updateIdeChats:r,screenshotMap:n,setScreenshotMap:i}=t,s=t.ides||[],o=t.toasts||[],l=t.setToasts||(()=>{}),a=t.wsStatus||"connected",c=t.isP2PActive||!1,h=t.p2pStates||{},u=t.retryP2P||(()=>{}),d=t.showReconnected||!1,[f,m]=w.useState(()=>{try{const j=new URLSearchParams(window.location.search).get("activeTab");return j||sessionStorage.getItem("adhdev_dashboard_activeTab")}catch{return null}}),g=w.useCallback(B=>{m(B);try{B?sessionStorage.setItem("adhdev_dashboard_activeTab",B):sessionStorage.removeItem("adhdev_dashboard_activeTab")}catch{}},[]),x=w.useRef([]),[_,v]=w.useState(""),[y,E]=w.useState({}),[N,k]=w.useState(!1),[I,z]=w.useState(!1),[Z,T]=w.useState(!1),[R,A]=w.useState([]),[D,U]=w.useState({}),[M,F]=w.useState({}),W=w.useRef(null),L=w.useRef(null),$=w.useRef(null),[S,ne]=w.useState(!1),oe=s.find(B=>B.type==="adhdev-daemon"),b=(oe==null?void 0:oe.detectedIdes)||[],me=!!oe,V=w.useMemo(()=>{var K,Y;const B=s.filter(ee=>ee.type!=="adhdev-daemon"),j=new Map;for(const ee of B){const se=j.get(ee.id);if(!se)j.set(ee.id,ee);else{const le=(((K=se.workspaceFolders)==null?void 0:K.length)||0)+(se.activeChat?1:0);((((Y=ee.workspaceFolders)==null?void 0:Y.length)||0)+(ee.activeChat?1:0)>le||(ee.timestamp||0)>(se.timestamp||0))&&j.set(ee.id,ee)}}return Array.from(j.values())},[s]),H=w.useMemo(()=>{const B=N3(V,D,s,h),j=Date.now();return B.map(K=>{const Y=M[K.tabKey];return Y&&j-Y<5e3?{...K,messages:[],title:""}:K})},[V,D,M,s]),[G,he]=w.useState(()=>{try{return JSON.parse(sessionStorage.getItem("adhdev_tabOrder")||"[]")}catch{return[]}}),ue=w.useMemo(()=>{if(G.length===0)return H;const B=new Map(G.map((j,K)=>[j,K]));return[...H].sort((j,K)=>{const Y=B.get(j.tabKey)??9999,ee=B.get(K.tabKey)??9999;return Y-ee})},[H,G]);w.useEffect(()=>{const B=$.current;if(!B)return;const j=()=>ne(B.scrollWidth>B.clientWidth+2);j();const K=new ResizeObserver(j);return K.observe(B),B.addEventListener("scroll",j),()=>{K.disconnect(),B.removeEventListener("scroll",j)}},[ue.length]);const ge=w.useCallback(B=>{he(B);try{sessionStorage.setItem("adhdev_tabOrder",JSON.stringify(B))}catch{}},[]);w.useEffect(()=>{if(Object.keys(M).length===0)return;const j=setTimeout(()=>{F(K=>{const Y=Date.now(),ee={};for(const[se,le]of Object.entries(K))Y-le<5e3&&(ee[se]=le);return Object.keys(ee).length===Object.keys(K).length?K:ee})},5500);return()=>clearTimeout(j)},[M]);const O=ue.find(B=>B.tabKey===f),Ue=ue.map(B=>B.tabKey).join(","),ve=w.useRef(!1);w.useEffect(()=>{if(ue.length===0||ve.current&&f&&ue.some(j=>j.tabKey===f))return;const B=ue.find(j=>j.cdpconnected===!0);B?g(B.tabKey):(!f||!ue.some(j=>j.tabKey===f))&&g(ue[0].tabKey)},[Ue]);const Ke=w.useCallback(()=>{x.current.forEach(B=>clearTimeout(B)),x.current=[]},[]),Ot=w.useCallback((B,j)=>{Ke();for(const K of j)x.current.push(setTimeout(()=>g(B),K))},[Ke]);w.useEffect(()=>{var K;if(!((K=O==null?void 0:O.messages)!=null&&K.length))return;const B=O.ideId,j=Date.now();E(Y=>{let ee=!1;const se={...Y};return O.messages.forEach((le,fe)=>{const ae=`${B}-${le.id??`i-${fe}`}`;se[ae]==null&&(se[ae]=j,ee=!0)}),ee?se:Y})},[O==null?void 0:O.ideId,O==null?void 0:O.messages]);const qt=w.useRef(!1);w.useEffect(()=>{if(!N){qt.current=!1;return}if(!O||qt.current||I)return;const B=s.find(j=>j.id===O.ideId);B&&(!B.chats||B.chats.length===0)&&(qt.current=!0,X())},[N,O==null?void 0:O.ideId]),w.useEffect(()=>{const B=setInterval(()=>{const j=Date.now()-3e5;A(K=>{const Y=K.filter(ee=>ee.timestamp>j).slice(-100);return Y.length===K.length?K:Y})},6e4);return()=>clearInterval(B)},[]);const De=w.useRef(new Map);w.useEffect(()=>{const B=(K,Y)=>{var fe,ae,xe;if(!Y)return;for(const we of H){if(!ar(we))continue;const nt=(fe=we.ideId)!=null&&fe.includes(":cli:")?we.ideId.split(":cli:")[1]:"";if(K===nt||K===we.agentType||K===we.ideType){const jt=De.current.get(we.tabKey)||[];jt.push(Y),jt.length>1e4&&jt.splice(0,jt.length-5e3),De.current.set(we.tabKey,jt)}}const ee=O&&ar(O),se=(ae=O==null?void 0:O.ideId)!=null&&ae.includes(":cli:")?O.ideId.split(":cli:")[1]:"",le=K===se||K===(O==null?void 0:O.agentType)||K===(O==null?void 0:O.ideType);ee&&le&&((xe=W.current)==null||xe.write(Y))},j=jg.onPtyOutput(B);return()=>{j()}},[O==null?void 0:O.agentType,O==null?void 0:O.ideType,O==null?void 0:O.tabKey,H]),w.useEffect(()=>{if(!O||!ar(O))return;const j=setTimeout(()=>{if(W.current){const K=De.current.get(O.tabKey);if(K&&K.length>0)for(const Y of K)W.current.write(Y);W.current.bumpResize()}},200);return()=>clearTimeout(j)},[O==null?void 0:O.tabKey]),w.useEffect(()=>{if(!O)return;const B=setTimeout(()=>{var j;(j=L.current)==null||j.focus()},150);return()=>clearTimeout(B)},[O==null?void 0:O.tabKey]),w.useEffect(()=>{const B=j=>{var le,fe,ae,xe,we,Ze;const K=parseInt(j.key);if(isNaN(K)||K<1||K>9)return;if(j.ctrlKey){j.preventDefault();const nt=ue[K-1];nt&&(Ke(),g(nt.tabKey));return}const Y=(le=document.activeElement)==null?void 0:le.tagName,ee=Y==="INPUT"||Y==="TEXTAREA"||((fe=document.activeElement)==null?void 0:fe.isContentEditable),se=((xe=(ae=document.activeElement)==null?void 0:ae.closest)==null?void 0:xe.call(ae,".xterm-helper-textarea"))!=null||((Ze=(we=document.activeElement)==null?void 0:we.classList)==null?void 0:Ze.contains("xterm-helper-textarea"));if(!ee&&!se){j.preventDefault();const nt=ue[K-1];nt&&(Ke(),g(nt.tabKey))}};return window.addEventListener("keydown",B),()=>window.removeEventListener("keydown",B)},[ue,Ke,g]),w.useEffect(()=>{const B=R3.on("status_event",j=>{var se;const K=Ur(j.ideType||"");let Y="",ee="info";if(j.event==="agent:generating_completed"){const le=j.duration?` (${j.duration}s)`:"";Y=`✅ ${K} agent task completed${le}`,ee="success";try{new Audio("data:audio/wav;base64,UklGRigAAABXQVZFZm10IBAAAAABAAEAQB8AAEAfAAABAAgAZGF0YQQAAAB/f39/").play().catch(()=>{})}catch{}if(j.ideId){const fe={role:"system",timestamp:Date.now(),content:`✅ Task completed${le}`,_localId:`sys_complete_${Date.now()}`};U(ae=>{for(const xe of Object.keys(ae))if(xe.includes(j.ideId))return{...ae,[xe]:[...ae[xe]||[],fe]};return ae})}}else if(j.event==="agent:generating_started")j.ideId&&U(le=>{const fe={...le};for(const ae of Object.keys(fe))ae.includes(j.ideId)&&(fe[ae]=(fe[ae]||[]).filter(xe=>{var we;return!(xe.role==="system"&&((we=xe._localId)!=null&&we.startsWith("sys_complete_")))}));return fe});else if((j.event==="agent:waiting_approval"||j.event==="agent:approval_needed")&&(Y=`⚡ ${K} approval needed`,ee="warning",j.ideId)){const le=j.modalMessage||"Approval requested",fe=(se=j.modalButtons)!=null&&se.length?j.modalButtons.map(xe=>`[${xe}]`).join(" "):"[Approve] [Reject]",ae={role:"system",timestamp:Date.now(),content:`⚡ Approval requested: ${le}
|
|
168
168
|
${fe}`,_localId:`sys_approval_${Date.now()}`};U(xe=>{for(const we of Object.keys(xe))if(we.includes(j.ideId))return{...xe,[we]:[...xe[we]||[],ae]};return xe})}if(Y){const le=Date.now();l(fe=>[...fe.slice(-4),{id:le,message:Y,type:ee,timestamp:le,ideId:j.ideId}]),setTimeout(()=>l(fe=>fe.filter(ae=>ae.id!==le)),5e3)}});return()=>B()},[]),w.useEffect(()=>{var j;const B=K=>{const Y=K.data;(Y==null?void 0:Y.type)==="notification_action"&&Y.action==="approve"&&Y.ideId&&e(Y.ideId,"resolve_action",{action:"approve",button:"Approve"}).catch(ee=>console.error("[SW Action] approve failed:",ee))};return(j=navigator.serviceWorker)==null||j.addEventListener("message",B),()=>{var K;return(K=navigator.serviceWorker)==null?void 0:K.removeEventListener("message",B)}},[]);const ke=async()=>{if(!O)return;const B=_.trim();if(!B)return;const j=O.ideId,K=O.tabKey;v(""),Ot(K,[100,500,1500,3e3]);const Y=`${Date.now()}-${Math.random().toString(36).slice(2,8)}`,ee={role:"user",content:B,timestamp:Date.now(),_localId:Y};U(se=>({...se,[K]:[...se[K]||[],ee]}));try{if(ar(O)&&!Dr(O)){const se=j||O.daemonId||"";if(!se)return;const le=O.ideType||O.agentType||"";await e(se,"agent_command",{agentType:le,cliType:le,action:"send_chat",message:B,text:B})}else if(Dr(O)){const se=j||O.daemonId||"";if(!se)return;await e(se,"send_chat",{message:B,text:B,agentType:O.agentType})}else{const se=j||O.daemonId||"";if(!se)return;await e(se,"send_chat",{message:B,text:B,...O.streamSource==="agent-stream"&&{agentType:O.agentType}})}setTimeout(()=>{const se=Date.now()-6e4;U(le=>{const fe=le[K];if(!fe)return le;const ae=fe.filter(xe=>xe.timestamp>se);return ae.length===fe.length?le:{...le,[K]:ae}})},6e4)}catch(se){console.error("Send failed",se),v(B),U(le=>({...le,[K]:(le[K]||[]).filter(fe=>fe._localId!==Y)}))}},Or=async()=>{if(O)try{me?await e(O.ideId,"launch_ide",{ideType:O.ideType,enableCdp:!0}):await e(O.ideId,"vscode_command_exec",{commandId:"adhdev.relaunchWithCdp",args:[{force:!0}]})}catch(B){console.error("Relaunch failed",B)}},Zr=async B=>{try{await e("standalone","launch_ide",{ideType:B,enableCdp:!0})}catch(j){console.error("Launch failed",j)}},Pt=async B=>{if(O){console.log("[ModalButton] ideId:",O.ideId,"button:",B,"agentType:",O.agentType,"source:",O.streamSource),A(j=>[...j,{ideId:O.tabKey,text:`🖱️ **${B}** clicked`,timestamp:Date.now()}]);try{let j;if(ar(O)&&!Dr(O)){const Y=(O.modalButtons||[]).indexOf(B),ee=B.replace(/[⌥⏎⇧⌫⌘⌃]/g,"").trim().toLowerCase();let se;Y>=0?se=`${Y+1}\r`:/^(deny|no|reject|cancel)/.test(ee)?se="3\r":/always/.test(ee)?se="2\r":se="1\r";const le=O.daemonId||O.ideId,fe=O.ideType||O.agentType||"";jg.sendPtyInput(le,fe,se)||await e(le,"pty_input",{cliType:fe,data:se}),j={success:!0}}else{const K=B.replace(/[⌥⏎⇧⌫⌘⌃]/g,"").trim().toLowerCase(),Y=/^(run|approve|accept|yes|allow|always|proceed|save)/.test(K),ee=O.ideId||O.daemonId||"";j=await e(ee,"resolve_action",{button:B,action:Y?"approve":"reject",...O.streamSource==="agent-stream"&&{agentType:O.agentType}})}console.log("[ModalButton] result:",j),j.success||A(K=>[...K,{ideId:O.tabKey,text:`⚠️ **${B}** failed — button not found`,timestamp:Date.now()}])}catch(j){console.error("[ModalButton] Error:",j),A(K=>[...K,{ideId:O.tabKey,text:`❌ **${B}** error`,timestamp:Date.now()}])}}},Yt=async(B,j)=>{try{const K=B||(O==null?void 0:O.daemonId)||"",Y=await e(K,"switch_chat",{id:j,sessionId:j,...(O==null?void 0:O.streamSource)==="agent-stream"&&{agentType:O==null?void 0:O.agentType}}),ee=Y==null?void 0:Y.result;(Y==null?void 0:Y.success)===!0||ee==="switched"||ee==="switched-by-title"||(ee===!1||ee==="not_found"?l(le=>[...le,{id:Date.now(),message:"⚠️ Session tab not found — try refreshing history",type:"warning",timestamp:Date.now()}]):typeof ee=="string"&&ee.startsWith("error:")?l(le=>[...le,{id:Date.now(),message:`⚠️ Switch error: ${ee}`,type:"warning",timestamp:Date.now()}]):l(le=>[...le,{id:Date.now(),message:"⚠️ Session switch failed",type:"warning",timestamp:Date.now()}]))}catch(K){console.error("Switch failed",K),l(Y=>[...Y,{id:Date.now(),message:`❌ Switch failed: ${K.message||"connection error"}`,type:"warning",timestamp:Date.now()}])}},Qe=async()=>{if(!(!O||Z)){T(!0);try{const B=O.ideId||O.daemonId||"";await e(B,"new_chat",{...O.streamSource==="agent-stream"&&{agentType:O.agentType}}),F(j=>({...j,[O.tabKey]:Date.now()})),U(j=>({...j,[O.tabKey]:[]}))}catch(B){console.error("New chat failed",B)}finally{T(!1)}}},[J,pe]=w.useState(!1),P=async()=>{if(!O||J)return;pe(!0);const B=O.tabKey;try{await e(O.ideId,"agent_stream_focus",{agentType:O.agentType}),Ot(B,[200,1500,3e3])}catch(j){console.error("Focus agent failed",j)}finally{pe(!1)}},X=async()=>{var B;if(!(!O||I)){z(!0);try{const j=O.ideId||O.daemonId||"",K=await e(j,"list_chats",{forceExpand:!0,...O.streamSource==="agent-stream"&&{agentType:O.agentType}}),Y=(K==null?void 0:K.chats)||((B=K==null?void 0:K.result)==null?void 0:B.chats);K!=null&&K.success&&Array.isArray(Y)&&r(O.ideId,Y)}catch(j){console.error("Refresh history failed",j)}finally{z(!1)}}};return p.jsxs("div",{className:"page-dashboard flex-1 min-h-0 bg-bg-primary text-text-primary flex flex-col overflow-hidden",children:[p.jsx(y3,{wsStatus:a,showReconnected:d}),p.jsx(x3,{activeConv:O,agentCount:V.length,wsStatus:a,isP2PActive:c,onOpenHistory:()=>k(!0)}),p.jsx(k3,{sortedConversations:ue,activeTabId:f,tabsOverflow:S,tabsContainerRef:$,terminalRef:W,onSelectTab:B=>{ve.current=!0,g(B)},onReorder:ge,pinTab:Ot,clearTabPinTimers:Ke,retryP2P:u}),p.jsx("div",{className:"flex-1 min-h-0 flex flex-col overflow-hidden relative",children:O?p.jsxs(p.Fragment,{children:[p.jsx(y1,{activeConv:O,onModalButton:Pt}),p.jsx("div",{className:"desktop-only px-3 pt-1 pb-2",children:!ar(O)&&!Dr(O)&&n[O.ideId]?p.jsx(g3,{screenshotUrl:n[O.ideId],mode:"preview",onDismiss:()=>{const B={...n};delete B[O.ideId],i(B)}}):!ar(O)&&!Dr(O)&&O.cdpconnected===!1?p.jsxs("div",{className:"flex items-center gap-2.5 px-3.5 py-2 bg-yellow-500/[0.08] border border-yellow-500/20 rounded-lg text-xs text-text-secondary",children:[p.jsx("span",{className:"text-sm",children:"⚠️"}),p.jsx("span",{className:"flex-1",children:"CDP not connected — chat history & screenshots unavailable for this IDE."}),p.jsx("button",{className:"btn btn-sm bg-yellow-500/15 text-yellow-500 border border-yellow-500/30 text-[10px] whitespace-nowrap shrink-0",onClick:Or,children:"Relaunch with CDP"})]}):null}),ar(O)&&!Dr(O)?p.jsx(v3,{activeConv:O,ptyBuffers:De,terminalRef:W,agentInput:_,setAgentInput:v,handleSendChat:ke,handleModalButton:Pt}):p.jsx(x1,{activeConv:O,ides:s,agentInput:_,setAgentInput:v,handleSendChat:ke,handleFocusAgent:P,isFocusingAgent:J,messageReceivedAt:y,actionLogs:R})]}):p.jsxs("div",{className:"empty-dashboard",children:[p.jsx("div",{className:"glow-orb",children:p.jsx("img",{src:"/otter-logo.png",alt:"",className:"w-12 h-12"})}),p.jsxs("div",{className:"text-center",children:[p.jsx("div",{className:"font-bold text-lg mb-1.5",children:"No IDE connected"}),p.jsx("div",{className:"text-[13px] text-text-muted",style:{marginBottom:me&&b.length>0?16:0},children:me?"Launch an IDE with CDP to start monitoring":"Launch your IDE with the ADHDev extension to start"}),me&&b.length>0&&p.jsx("div",{className:"flex flex-wrap gap-2 justify-center",children:b.filter(B=>B.running||!0).map(B=>p.jsxs("button",{className:"btn btn-sm bg-violet-500/10 border border-violet-500/25 text-violet-400 text-xs font-semibold px-4 py-2 rounded-lg cursor-pointer flex items-center gap-1.5 transition-all",onClick:()=>Zr(B.type),onMouseEnter:j=>j.currentTarget.style.background="rgba(139,92,246,0.2)",onMouseLeave:j=>j.currentTarget.style.background="rgba(139,92,246,0.1)",children:["🚀 Launch ",B.name]},B.type))})]})]})}),N&&O&&p.jsx(b3,{activeConv:O,ides:s,isCreatingChat:Z,isRefreshingHistory:I,onClose:()=>k(!1),onNewChat:Qe,onSwitchSession:Yt,onRefreshHistory:X}),p.jsx("style",{children:`
|
|
169
169
|
body { overflow: hidden; overscroll - behavior: none; }
|
|
170
170
|
.btn { cursor: pointer; border - radius: 8px; font - weight: 600; font - size: 14px; transition: all 0.2s; }
|
|
@@ -183,4 +183,4 @@ ${fe}`,_localId:`sys_approval_${Date.now()}`};U(xe=>{for(const we of Object.keys
|
|
|
183
183
|
to { opacity: 1; transform: translateX(0); }
|
|
184
184
|
}
|
|
185
185
|
`})]})}function I3(e){return e.split(":")[0]||""}function A3({renderHeaderActions:e}={}){var b,me,V;const{id:t}=f0(),r=cs(),n=wf(),i=n.ides||[],s=n.connectionStates||n.p2pStates||{},{sendCommand:o}=Si(),l=w.useMemo(()=>I3(t||""),[t]),a=w.useMemo(()=>i.find(H=>H.id===t),[i,t]),c=(a==null?void 0:a.type)||void 0,h=c?c.charAt(0).toUpperCase()+c.slice(1):"IDE",u=(a==null?void 0:a.activeChat)||null,d=(a==null?void 0:a.agentStreams)||[],f=s[l]||"new",m=w.useMemo(()=>i.find(H=>H.id===l||H.daemonId===l),[i,l]),g=(m==null?void 0:m.machineNickname)||((b=m==null?void 0:m.machine)==null?void 0:b.hostname)||"",x=((V=(me=a==null?void 0:a.workspaceFolders)==null?void 0:me[0])==null?void 0:V.name)||"",[_]=qw(),v=typeof window<"u"&&window.innerWidth<=768,y=_.get("view")||(v?"chat":"split"),[E,N]=w.useState(y),[k,I]=w.useState("ide"),[z,Z]=w.useState(""),[T,R]=w.useState(!1),[A,D]=w.useState(null),[U,M]=w.useState(null),[F,W]=w.useState([]),L=w.useMemo(()=>{var H,G;return{ideId:t||"",daemonId:l,agentName:Yh(c||""),agentType:c||"",status:(u==null?void 0:u.status)||"idle",title:(u==null?void 0:u.title)||"",messages:(u==null?void 0:u.messages)||[],ideType:c||"",workspaceName:(a==null?void 0:a.workspaceName)||"",displayPrimary:h,displaySecondary:(a==null?void 0:a.workspaceName)||"",cdpConnected:!0,modalButtons:(H=u==null?void 0:u.activeModal)==null?void 0:H.buttons,modalMessage:(G=u==null?void 0:u.activeModal)==null?void 0:G.message,streamSource:"native",tabKey:`ide-${t}`}},[t,l,c,u,a,h]);w.useEffect(()=>l?ti.onScreenshot("ide-page",(G,he)=>{if(G!==l)return;const ue=new FileReader;ue.onload=()=>D(ue.result),ue.readAsDataURL(he)}):void 0,[l]),w.useEffect(()=>l?ti.onStatusEvent((G,he)=>{if(G!==l)return;let ue="",ge="info";if(he.event==="agent:generating_completed"?(ue=`✅ Task completed${he.duration?` (${he.duration}s)`:""}`,ge="success"):(he.event==="agent:waiting_approval"||he.event==="agent:approval_requested")&&(ue="⚡ Approval needed",ge="warning"),ue){const O=Date.now();W(ve=>[...ve.slice(-4),{id:O,message:ue,type:ge}]),setTimeout(()=>W(ve=>ve.filter(Ke=>Ke.id!==O)),ge==="warning"?1e4:5e3)}}):void 0,[l]),w.useEffect(()=>{const H=l?ti.get(l):null;!H||!(f==="connected")||(E!=="chat"?H.startScreenshots(c):H.stopScreenshots(c))},[E,f,c,l]);const $=w.useCallback(async(H,G={})=>{if(!t)throw new Error("No IDE ID");const he={...G};if(!he._targetInstance&&t){const ge=t.split(":");ge.length>=3&&(ge[1]==="ide"||ge[1]==="cli")&&(he._targetInstance=ge.slice(2).join(":"),he._targetType=ge[1])}const ue=l?ti.get(l):null;return ue!=null&&ue.hasCommandChannel?await ue.sendCommand(H,he):ue&&ue.connectionState!=="failed"&&ue.connectionState!=="closed"&&await new Promise(O=>{const Ue=Date.now(),ve=()=>{if(ue.hasCommandChannel)return O(!0);if(Date.now()-Ue>3e3)return O(!1);setTimeout(ve,200)};ve()})&&ue.hasCommandChannel?await ue.sendCommand(H,he):await o(t,H,he)},[t,l]),S=async()=>{const H=z.trim();if(!(!H||!t||T)){Z(""),R(!0);try{await $("send_chat",{message:H,waitForResponse:!0})}catch(G){console.error("[IDE] Send failed:",G)}finally{R(!1)}}},ne=async H=>{if(t)try{const G=await o(t,"screenshot",{width:H?Math.min(H,1280):1280});G!=null&&G.success&&(G!=null&&G.base64)&&M(`data:image/jpeg;base64,${G.base64}`)}catch(G){console.error("[IDE] Screenshot failed:",G)}},oe=d.length>0;return t?p.jsxs("div",{className:"ide-page",children:[p.jsxs("header",{className:"ide-header",children:[p.jsxs("div",{className:"ide-header-left",children:[p.jsxs("div",{className:"ide-title",children:[p.jsx("span",{className:"ide-name",children:h}),x&&p.jsx("span",{className:"ide-workspace",children:x}),p.jsx("span",{className:"ide-badge",children:"REMOTE"})]}),p.jsxs("div",{className:"ide-status-pill",children:[p.jsx("span",{className:`ide-dot ${f==="connected"?"online":"connecting"}`}),p.jsx("span",{className:"ide-status-text",children:f==="connected"?"Connected":f==="connecting"?"Connecting":"WS"})]}),g&&p.jsx("span",{className:"ide-machine-label",children:g})]}),p.jsxs("div",{className:"ide-header-right",children:[["chat","split","remote"].map(H=>p.jsx("button",{className:"btn btn-secondary btn-sm",style:{border:E===H?"1px solid var(--accent-primary)":"none",background:E===H?"rgba(99,102,241,0.12)":"var(--bg-secondary)",padding:"6px 10px",color:E===H?"var(--accent-primary)":void 0},onClick:()=>N(H),children:H==="chat"?"💬":H==="split"?"⊞":"🖥"},H)),e&&e({daemonId:l,ideInstanceId:t||""}),p.jsx("button",{className:"btn btn-primary btn-sm border-none px-3 py-1.5 text-xs",onClick:()=>r("/dashboard"),children:"← Back"})]})]}),p.jsxs("div",{className:"ide-content",children:[p.jsxs("div",{className:`ide-chat-panel ${E==="chat"?"full":""} ${E==="remote"?"hidden":""}`,children:[oe&&p.jsxs("div",{className:"ide-chat-tabs",children:[p.jsx("button",{className:`ide-chat-tab ${k==="ide"?"active":""}`,onClick:()=>I("ide"),children:h}),p.jsxs("button",{className:`ide-chat-tab ext ${k==="extensions"?"active":""}`,onClick:()=>I("extensions"),children:["Extensions ",p.jsx("span",{className:"ide-ext-badge",children:d.length})]})]}),k==="extensions"&&oe?p.jsx(GT,{ideId:t,agentStreams:d,sendCommand:async(H,G)=>{try{const he=l?ti.get(l):null;if(he&&f==="connected"){await Promise.race([he.sendCommand(H,G),new Promise((ue,ge)=>setTimeout(()=>ge(new Error("connection timeout")),3e3))]);return}}catch{}await o(t,H,G)}}):p.jsx(x1,{activeConv:L,ides:i,agentInput:z,setAgentInput:Z,handleSendChat:S,handleFocusAgent:()=>{},isFocusingAgent:!1,messageReceivedAt:{},actionLogs:[]})]}),p.jsx("div",{className:`ide-remote-panel ${E==="remote"?"full":""} ${E==="chat"?"hidden":""}`,children:p.jsx(m3,{screenshot:U,isCapturing:!1,onRefresh:ne,addLog:()=>{},connState:f,connScreenshot:A,onAction:async(H,G)=>{const he=l?ti.get(l):null;if(he&&f==="connected")try{return await he.sendInput(H,G)}catch(ue){console.error("[Connection Input] Failed:",ue)}return await o(t,"cdp_remote_action",{action:H,params:G})}})})]}),F.length>0&&p.jsx("div",{className:"ide-toasts",children:F.map(H=>p.jsx("div",{className:`ide-toast ${H.type}`,onClick:()=>W(G=>G.filter(he=>he.id!==H.id)),children:H.message},H.id))})]}):p.jsx("div",{className:"ide-empty",children:"No IDE selected"})}function B3(){var Ze,nt,Xt,jt,$o,Ho,Wo,Uo,Vn;const{id:e}=f0(),t=cs(),{sendCommand:r}=Si(),n=r,i=wf(),s=i.ides||[],o=i.initialLoaded??!0,[l,a]=w.useState([]),[c,h]=w.useState([]),[u,d]=w.useState(0),[f,m]=w.useState(!0),[g,x]=w.useState("debug"),[_,v]=w.useState(null),[y,E]=w.useState([]),[N,k]=w.useState(!1),[I,z]=w.useState(""),[Z,T]=w.useState(""),[R,A]=w.useState(""),[D,U]=w.useState(""),[M,F]=w.useState("overview"),[W,L]=w.useState([]),[$,S]=w.useState(!1),[ne,oe]=w.useState(!1),[b,me]=w.useState(""),[V,H]=w.useState([]),[G,he]=w.useState(!1),[ue,ge]=w.useState(null),[O,Ue]=w.useState("all"),ve=w.useRef(null),Ke=w.useRef(!1);w.useEffect(()=>{if(!e||M!=="logs"||!f)return;const C=async()=>{try{const ye=await r(e,"get_logs",{count:200,minLevel:g,since:u}),Te=(ye==null?void 0:ye.result)||ye;if(ye!=null&&ye.success&&Array.isArray(Te==null?void 0:Te.logs)&&Te.logs.length>0){h(Je=>[...Je,...Te.logs.map(ki=>({timestamp:ki.ts,level:ki.level,message:`[${ki.category}] ${ki.message}`}))].slice(-300));const je=Math.max(...Te.logs.map(Je=>Je.ts));d(je)}}catch{}};C();const Q=setInterval(C,3e3);return()=>clearInterval(Q)},[e,M,f,u,g]),w.useEffect(()=>{if(f&&c.length>0){const C=Ke.current?"smooth":"instant";setTimeout(()=>{var Q;(Q=ve.current)==null||Q.scrollIntoView({behavior:C}),Ke.current=!0},50)}},[c.length,l.length,f]),w.useEffect(()=>{M!=="logs"&&(Ke.current=!1)},[M]);const Ot=async()=>{var C;if(e){he(!0);try{const Q=await r(e,"get_provider_settings",{}),ye=(Q==null?void 0:Q.result)||Q;if(Q!=null&&Q.success&&(ye!=null&&ye.settings)){const Te=[];for(const[je,Je]of Object.entries(ye.settings)){const gt=Or.find(ki=>ki.type===je);Te.push({type:je,displayName:(gt==null?void 0:gt.displayName)||je,icon:(gt==null?void 0:gt.icon)||"🔧",category:(gt==null?void 0:gt.category)||"unknown",schema:Je,values:((C=ye.values)==null?void 0:C[je])||{}})}Te.sort((je,Je)=>je.category.localeCompare(Je.category)||je.displayName.localeCompare(Je.displayName)),H(Te)}}catch{}he(!1)}};w.useEffect(()=>{M==="providers"&&V.length===0&&Ot()},[M]);const qt=async(C,Q,ye)=>{ge(`${C}.${Q}`),H(Te=>Te.map(je=>je.type===C?{...je,values:{...je.values,[Q]:ye}}:je));try{const Te=await r(e,"set_provider_setting",{providerType:C,key:Q,value:ye});Te!=null&&Te.success||Ot()}catch{Ot()}ge(null)},De=s.find(C=>C.id===e&&C.daemonMode),ke=De?{id:De.id,hostname:((Ze=De.machine)==null?void 0:Ze.hostname)||De.id,platform:((nt=De.machine)==null?void 0:nt.platform)||"unknown",arch:((Xt=De.machine)==null?void 0:Xt.arch)||"",cpus:((jt=De.machine)==null?void 0:jt.cpus)||0,totalMem:(($o=De.machine)==null?void 0:$o.totalMem)||0,freeMem:((Ho=De.machine)==null?void 0:Ho.freeMem)||0,loadavg:((Wo=De.machine)==null?void 0:Wo.loadavg)||[],uptime:((Uo=De.machine)==null?void 0:Uo.uptime)||0,release:((Vn=De.machine)==null?void 0:Vn.release)||"",cdpconnected:De.cdpconnected||!1,machineNickname:De.machineNickname||null,p2p:De.p2p||{available:!1,state:"unavailable",peers:0},detectedIdes:De.detectedIdes||[],managedIdeIds:De.managedIdeIds||[],managedCliIds:De.managedCliIds||[]}:null,Or=(De==null?void 0:De.availableProviders)||[],Zr={};for(const C of Or)Zr[C.type]=C.icon;const Pt=C=>Zr[C]||"💻",Yt=Or.filter(C=>C.category==="cli"||C.category==="acp");w.useEffect(()=>{!R&&Yt.length>0&&A(Yt[0].type)},[R,Yt.length]);const Qe=s.filter(C=>C.daemonId===e&&!C.daemonMode).filter(C=>!Bg(C)).map(C=>({id:C.id,type:C.type,version:C.version||"",instanceId:C.instanceId||"",status:C.status,workspaceFolders:C.workspaceFolders||[],activeFile:C.activeFile||null,terminals:C.terminals||0,aiAgents:w3(C.aiAgents||C.agents||[]),activeChat:C.activeChat||null,chats:C.chats||[],agentStreams:C.agentStreams||[],cdpconnected:C.cdpconnected||!1,daemonId:e})),J=s.filter(C=>C.daemonId===e&&Bg(C)).map(C=>{var Q,ye;return{id:C.id,type:C.type,cliName:C.cliName||C.type,status:C.status,workingDir:C.workingDir||((ye=(Q=C.workspaceFolders)==null?void 0:Q[0])==null?void 0:ye.path)||"",activeChat:C.activeChat||null,daemonId:e}}),pe=((ke==null?void 0:ke.detectedIdes)||[]).filter(C=>!C.running&&!Qe.some(Q=>(Q.type||"").toLowerCase()===(C.type||"").toLowerCase())),P=(C,Q)=>{a(ye=>[...ye.slice(-100),{timestamp:Date.now(),level:C,message:Q}]),setTimeout(()=>{var ye;return(ye=ve.current)==null?void 0:ye.scrollIntoView({behavior:"smooth"})},100)},X=async C=>{if(!(!e||_)){v(C),P("info",`Launching ${Ur(C)}...`);try{const Q=await r(e,"launch_ide",{ideType:C,enableCdp:!0});P(Q!=null&&Q.success?"info":"error",Q!=null&&Q.success?`${Ur(C)} launched`:`Failed: ${Q==null?void 0:Q.error}`)}catch(Q){P("error",`Launch error: ${Q.message}`)}finally{v(null)}}},B=async(C,Q,ye,Te)=>{if(e){P("info",`Launching ${C}${Q?` in ${Q}`:""}${Te?` (model: ${Te})`:""}...`);try{const je=ye?ye.split(/\s+/).filter(Boolean):void 0,Je=await r(e,"launch_cli",{cliType:C,dir:Q||void 0,cliArgs:je,initialModel:Te||void 0}),gt=(Je==null?void 0:Je.result)||Je;Je!=null&&Je.success?(P("info",`${C} launched`),gt!=null&>.defaultedToHome&&P("info",`📂 No directory specified — running in home directory (${gt.dir||"~"})`)):P("error",`Failed: ${(Je==null?void 0:Je.error)||(gt==null?void 0:gt.error)}`)}catch(je){P("error",`Launch error: ${je.message}`)}}},j=async(C,Q)=>{if(e&&window.confirm(`Stop ${C}?
|
|
186
|
-
This will terminate the CLI process.`))try{await r(e,"stop_cli",{cliType:C,dir:Q}),P("info",`${C} stopped`)}catch(ye){P("error",`Stop failed: ${ye.message}`)}},K=async C=>{try{await r(C.id,"restart_session",{ideType:C.type}),P("info",`${Ur(C.type)} restart initiated`)}catch(Q){P("error",`Restart failed: ${Q.message}`)}},Y=async()=>{if(e)try{const C=await r(e,"detect_ides",{});P("info",`Found ${((C==null?void 0:C.result)||[]).length} IDE(s)`)}catch(C){P("error",`Detection failed: ${C.message}`)}},ee=async()=>{if(e){k(!0);try{const C=await r(e,"get_recent_workspaces",{});C!=null&&C.success&&Array.isArray(C==null?void 0:C.result)&&E(C.result)}catch(C){P("error",`Failed: ${C.message}`)}finally{k(!1)}}},se=async()=>{var C;if(e){S(!0);try{const Q=await n(e,"get_cli_history");Q.success&&((C=Q.result)!=null&&C.history)&&L(Q.result.history)}catch{}S(!1)}},le=async()=>{if(e)try{await n(e,"set_machine_nickname",{nickname:b}),P("info",`Nickname set to "${b||"(cleared)"}"`),oe(!1)}catch(C){P("error",`Failed: ${C.message}`)}};if(!ke)return o?p.jsxs("div",{className:"p-10 text-center text-slate-500",children:[p.jsx("h2",{className:"text-slate-100",children:"Machine not found"}),p.jsx("p",{className:"mt-3",children:"The machine may be offline or not yet connected."}),p.jsx("button",{onClick:()=>t("/machines"),className:"machine-btn-back",children:"← Back to Burrows"})]}):p.jsx("div",{className:"p-10 text-center text-slate-500",children:p.jsx("p",{children:"⏳ Loading machine..."})});const fe=ke.totalMem>0?Math.round((ke.totalMem-ke.freeMem)/ke.totalMem*100):0,ae=ke.loadavg[0]||0,xe=ke.machineNickname||ke.hostname,we=[{id:"overview",label:"📊 Overview"},{id:"ides",label:"💻 IDEs",count:Qe.length},{id:"clis",label:"🔌 CLIs",count:J.length},{id:"providers",label:"⚙️ Providers",count:V.length>0?V.length:void 0},{id:"logs",label:"📋 Logs",count:l.length>0?l.length:void 0}];return p.jsxs("div",{className:"flex flex-col h-full",children:[p.jsxs("div",{className:"px-6 py-4 border-b border-white/[0.06] bg-surface-primary",children:[p.jsxs("div",{className:"flex items-center justify-between",children:[p.jsxs("div",{className:"flex items-center gap-3.5",children:[p.jsx("button",{onClick:()=>t("/machines"),className:"machine-btn-back",children:"←"}),p.jsxs("div",{children:[p.jsxs("div",{className:"flex items-center gap-2",children:[ne?p.jsxs("div",{className:"flex gap-1.5 items-center",children:[p.jsx("input",{autoFocus:!0,value:b,onChange:C=>me(C.target.value),onKeyDown:C=>{C.key==="Enter"&&le(),C.key==="Escape"&&oe(!1)},placeholder:"Machine nickname...",className:"px-2.5 py-1 rounded-md border border-violet-500/30 bg-slate-950/80 text-slate-100 text-sm font-semibold w-[200px]"}),p.jsx("button",{onClick:le,className:"machine-btn text-green-500 border-green-500/30",children:"✓"}),p.jsx("button",{onClick:()=>oe(!1),className:"machine-btn",children:"✕"})]}):p.jsx("h1",{className:"text-lg font-bold text-slate-100 m-0 cursor-pointer",onClick:()=>{oe(!0),me(ke.machineNickname||"")},title:"Click to set nickname",children:xe}),p.jsx("span",{className:"status-dot-md online"})]}),p.jsxs("div",{className:"text-[11px] text-slate-500 mt-0.5 flex gap-2 items-center",children:[p.jsxs("span",{children:[ke.platform," · ",ke.arch," · ",ke.cpus," cores"]}),ke.p2p.available&&p.jsxs("span",{className:"px-1.5 py-px rounded text-[9px] font-semibold",style:{background:ke.p2p.state==="connected"?"rgba(34,197,94,0.08)":"rgba(234,179,8,0.08)",color:ke.p2p.state==="connected"?"#22c55e":"#eab308"},children:["P2P ",ke.p2p.state==="connected"?`● ${ke.p2p.peers}`:"○"]}),ke.cdpconnected&&p.jsx("span",{className:"px-1.5 py-px rounded text-[9px] font-semibold bg-green-500/[0.08] text-green-500",children:"CDP ●"}),ke.machineNickname&&p.jsxs("span",{className:"text-slate-600",children:["(",ke.hostname,")"]})]})]})]}),p.jsx("button",{onClick:Y,className:"machine-btn-primary",title:"Re-detect installed IDEs",children:"🔍 Scan IDEs"})]}),p.jsx("div",{className:"machine-tabs",children:we.map(C=>p.jsxs("button",{onClick:()=>F(C.id),className:`machine-tab${M===C.id?" active":""}`,children:[C.label,C.count!==void 0&&p.jsx("span",{className:"tab-count",children:C.count})]},C.id))})]}),p.jsxs("div",{className:"page-content",children:[M==="overview"&&p.jsxs("div",{children:[p.jsxs("div",{className:"grid grid-cols-[repeat(auto-fit,minmax(140px,1fr))] gap-2.5 mb-5",children:[p.jsx(Mg,{icon:"⏱",label:"Uptime",value:S3(ke.uptime)}),p.jsx(Mg,{icon:"💻",label:"IDEs",value:`${Qe.length}`,sub:`${J.length} CLIs`})]}),p.jsxs("div",{className:"px-5 py-4 rounded-xl mb-5 bg-slate-950/50 border border-white/[0.06]",children:[p.jsx("div",{className:"text-[11px] text-slate-500 font-semibold uppercase tracking-wider mb-3",children:"Resource Usage"}),p.jsxs("div",{className:"flex gap-6",children:[p.jsx(Ig,{value:Math.min(Math.round(ae/ke.cpus*100),100),max:100,label:"CPU Load",color:"#8b5cf6",detail:`${ae.toFixed(2)} avg / ${ke.cpus} cores`}),p.jsx(Ig,{value:fe,max:100,label:"Memory",color:"#3b82f6",detail:`${Ag(ke.totalMem-ke.freeMem)} / ${Ag(ke.totalMem)}`})]})]}),p.jsxs("div",{className:"grid grid-cols-[repeat(auto-fit,minmax(200px,1fr))] gap-3",children:[p.jsxs("div",{className:"px-5 py-4 rounded-xl bg-slate-950/50 border border-white/[0.06]",children:[p.jsxs("div",{className:"flex justify-between items-center mb-2.5",children:[p.jsx("span",{className:"text-[11px] text-slate-500 font-semibold uppercase tracking-wider",children:"IDEs"}),p.jsx("button",{onClick:()=>F("ides"),className:"machine-btn text-[10px]",children:"View All →"})]}),Qe.length===0?p.jsx("div",{className:"text-xs text-slate-600 italic",children:"No IDEs running"}):p.jsx("div",{className:"flex flex-col gap-1.5",children:Qe.map(C=>{var ye,Te,je;const Q=(C.agentStreams||[]).some(Je=>Je.status==="generating"||Je.status==="streaming")||((ye=C.activeChat)==null?void 0:ye.status)==="generating";return p.jsxs("div",{onClick:()=>t(`/ide/${C.id}`),className:`flex items-center gap-2 px-2.5 py-1.5 rounded-lg cursor-pointer transition-[background] duration-150 ${Q?"bg-orange-500/[0.04] border border-orange-500/10":"bg-white/[0.02] border border-transparent"}`,children:[p.jsx("span",{children:Pt(C.type)}),p.jsx("span",{className:"text-xs text-slate-200 font-medium",children:Ur(C.type)}),p.jsx("span",{className:"text-[10px] text-slate-600 overflow-hidden text-ellipsis whitespace-nowrap",children:((je=(Te=C.workspaceFolders)==null?void 0:Te[0])==null?void 0:je.name)||""}),Q&&p.jsx("span",{className:"text-[10px] text-orange-400 font-semibold ml-auto",children:"⚡ Working"}),p.jsx("span",{className:`${Q?"ml-1.5":"ml-auto"} w-1.5 h-1.5 rounded-full`,style:{background:Q?"#fb923c":"#22c55e",boxShadow:Q?"0 0 8px rgba(249,115,22,0.4)":"none",animation:Q?"pulse-dot 1.5s infinite":"none"}})]},C.id)})})]}),p.jsxs("div",{className:"px-5 py-4 rounded-xl bg-slate-950/50 border border-white/[0.06]",children:[p.jsxs("div",{className:"flex justify-between items-center mb-2.5",children:[p.jsx("span",{className:"text-[11px] text-slate-500 font-semibold uppercase tracking-wider",children:"CLIs"}),p.jsx("button",{onClick:()=>F("clis"),className:"machine-btn text-[10px]",children:"View All →"})]}),J.length===0?p.jsx("div",{className:"text-xs text-slate-600 italic",children:"No CLIs running"}):p.jsx("div",{className:"flex flex-col gap-1.5",children:J.map(C=>p.jsxs("div",{className:"flex items-center gap-2 px-2.5 py-1.5 rounded-lg bg-white/[0.02]",children:[p.jsx("span",{children:Pt(C.type)}),p.jsx("span",{className:"text-xs text-slate-200 font-medium",children:C.cliName}),p.jsx("span",{className:"text-[10px] text-slate-600 overflow-hidden text-ellipsis whitespace-nowrap",children:C.workingDir.split("/").pop()}),p.jsx("span",{className:"ml-auto w-1.5 h-1.5 rounded-full",style:{background:C.status==="stopped"?"#ef4444":"#22c55e"}})]},C.id))})]})]}),ke.detectedIdes.length>0&&p.jsxs("div",{className:"mt-4 px-4.5 py-3.5 rounded-xl bg-slate-950/50 border border-white/[0.06]",children:[p.jsx("div",{className:"text-[11px] text-slate-500 font-semibold uppercase tracking-wider mb-2",children:"Detected on this machine"}),p.jsx("div",{className:"flex flex-wrap gap-1.5",children:ke.detectedIdes.map(C=>p.jsxs("div",{className:`px-2.5 py-1 rounded-md text-[11px] flex items-center gap-1 ${C.running?"bg-green-500/[0.06] border border-green-500/[0.12] text-green-300":"bg-white/[0.02] border border-white/[0.04] text-slate-500"}`,children:[p.jsx("span",{children:Pt(C.type)}),C.name||C.type,p.jsx("span",{className:"w-1 h-1 rounded-full",style:{background:C.running?"#22c55e":"#475569"}})]},C.type))})]})]}),M==="ides"&&p.jsxs("div",{children:[p.jsxs("div",{className:"text-[11px] text-slate-500 font-semibold uppercase tracking-wider mb-2.5",children:["Running (",Qe.length,")"]}),Qe.length===0?p.jsx("div",{className:"py-10 px-5 text-center rounded-xl bg-slate-950/40 border border-dashed border-white/[0.06] text-slate-600 text-[13px] mb-5",children:"No IDEs currently running. Launch one below."}):p.jsx("div",{className:"flex flex-col gap-2.5 mb-5",children:Qe.map(C=>{var Q,ye;return p.jsxs("div",{className:"px-4.5 py-3.5 rounded-xl bg-slate-950/50 border border-white/[0.06]",children:[p.jsxs("div",{className:"flex justify-between items-center mb-2.5",children:[p.jsxs("div",{className:"flex items-center gap-2",children:[p.jsx("span",{className:"text-lg",children:Pt(C.type)}),p.jsx("span",{className:"font-semibold text-sm text-slate-100",children:Ur(C.type)}),C.version&&p.jsxs("span",{className:"text-[10px] text-slate-600",children:["v",C.version]}),p.jsx("span",{className:"w-1.5 h-1.5 rounded-full bg-green-500 shadow-[0_0_6px_rgba(34,197,94,0.3)]"})]}),p.jsxs("div",{className:"flex gap-1.5",children:[p.jsx("button",{onClick:()=>t(`/ide/${C.id}`),className:"machine-btn",children:"🖥 Control"}),p.jsx("button",{onClick:()=>K(C),className:"machine-btn text-amber-500 border-amber-500/30",children:"↻ Restart"})]})]}),p.jsxs("div",{className:"grid grid-cols-[repeat(auto-fit,minmax(130px,1fr))] gap-1.5 text-xs text-slate-400",children:[p.jsxs("div",{children:[p.jsx("span",{className:"text-slate-500",children:"Workspace:"})," ",((Q=C.workspaceFolders)==null?void 0:Q.map(Te=>Te.name).join(", "))||"—"]}),p.jsxs("div",{children:[p.jsx("span",{className:"text-slate-500",children:"File:"})," ",((ye=C.activeFile)==null?void 0:ye.split("/").pop())||"—"]}),p.jsxs("div",{children:[p.jsx("span",{className:"text-slate-500",children:"Terminals:"})," ",C.terminals]}),p.jsxs("div",{children:[p.jsx("span",{className:"text-slate-500",children:"CDP:"})," ",C.cdpconnected?"● connected":"○ Off"]})]}),C.aiAgents.length>0&&p.jsx("div",{className:"flex gap-1 mt-2 flex-wrap",children:C.aiAgents.map(Te=>p.jsxs("span",{className:`px-2 py-0.5 rounded-md text-[10px] ${Te.status==="generating"||Te.status==="streaming"?"bg-orange-500/[0.08] text-orange-400":"bg-indigo-500/[0.06] text-indigo-400"}`,children:[Te.name," · ",Te.status]},Te.id))})]},C.id)})}),p.jsxs("div",{className:"text-[11px] text-slate-500 font-semibold uppercase tracking-wider mb-2.5",children:["Available to Launch (",pe.length,")"]}),p.jsxs("div",{className:"flex flex-wrap gap-2",children:[pe.map(C=>p.jsxs("button",{onClick:()=>X(C.type||C.id||""),disabled:!!_,className:"machine-btn-primary flex items-center gap-1.5",style:{opacity:_&&_!==C.type?.4:1},children:[p.jsx("span",{children:Pt(C.type)}),_===C.type?"⏳ Launching...":`▶ ${C.name||Ur(C.type)}`]},C.type)),pe.length===0&&p.jsxs("div",{className:"text-xs text-slate-600 italic",children:["All detected IDEs are running, or none detected.",p.jsx("button",{onClick:Y,className:"machine-btn ml-2",children:"🔍 Scan"})]})]})]}),M==="clis"&&p.jsxs("div",{children:[p.jsxs("div",{className:"px-5 py-4 rounded-xl mb-5 bg-slate-950/50 border border-violet-500/[0.12]",children:[p.jsx("div",{className:"text-[11px] text-slate-500 font-semibold uppercase tracking-wider mb-2.5",children:"Launch New CLI"}),p.jsxs("div",{className:"flex gap-2 items-center flex-wrap",children:[p.jsx("select",{value:R,onChange:C=>A(C.target.value),className:"machine-input",children:Yt.length>0?Yt.map(C=>p.jsxs("option",{value:C.type,children:[C.icon," ",C.displayName]},C.type)):p.jsx("option",{value:"",disabled:!0,children:"No providers available"})}),p.jsx("input",{type:"text",placeholder:"Working directory...",value:I,onChange:C=>z(C.target.value),className:"machine-input flex-1 min-w-[200px]"}),p.jsx("input",{type:"text",placeholder:"Args (optional)",value:Z,onChange:C=>T(C.target.value),className:"machine-input min-w-[150px]"}),(()=>{const C=Yt.find(Q=>Q.type===R);return(C==null?void 0:C.category)==="acp"?p.jsx("input",{type:"text",placeholder:"Model (default)",value:D,onChange:Q=>U(Q.target.value),className:"machine-input min-w-[120px]"}):null})(),p.jsx("button",{onClick:()=>B(R,I,Z||void 0,D||void 0),className:"machine-btn-primary",children:"▶ Launch"})]})]}),p.jsxs("div",{className:"text-[11px] text-slate-500 font-semibold uppercase tracking-wider mb-2.5",children:["Running (",J.length,")"]}),J.length===0?p.jsx("div",{className:"py-7.5 px-5 text-center rounded-xl bg-slate-950/40 border border-dashed border-white/[0.06] text-slate-600 text-[13px] mb-5",children:"No CLIs running"}):p.jsx("div",{className:"flex flex-col gap-2 mb-5",children:J.map(C=>p.jsxs("div",{className:"px-4 py-3 rounded-[10px] bg-slate-950/50 border border-white/[0.06] flex items-center justify-between",children:[p.jsxs("div",{className:"flex items-center gap-2.5",children:[p.jsx("span",{className:"text-lg",children:Pt(C.type)}),p.jsxs("div",{children:[p.jsx("div",{className:"font-semibold text-[13px] text-slate-100",children:C.cliName}),p.jsx("div",{className:"text-[11px] text-slate-500",children:C.workingDir})]})]}),p.jsxs("div",{className:"flex items-center gap-2",children:[p.jsx("span",{className:`px-2 py-0.5 rounded-md text-[10px] font-semibold ${C.status==="stopped"?"bg-red-500/[0.08] text-red-500":"bg-green-500/[0.08] text-green-500"}`,children:C.status}),C.status==="stopped"?p.jsx("button",{onClick:()=>B(C.type,C.workingDir),className:"machine-btn text-green-500 border-green-500/30",children:"▶"}):p.jsx("button",{onClick:()=>j(C.type,C.workingDir),className:"machine-btn text-red-500 border-red-500/30",children:"■"})]})]},C.id))}),p.jsxs("div",{className:"flex items-center gap-2 mb-2.5",children:[p.jsx("span",{className:"text-[11px] text-slate-500 font-semibold uppercase tracking-wider",children:"History"}),p.jsx("button",{onClick:se,disabled:$,className:"machine-btn",children:$?"⏳":"↻ Load"})]}),W.length>0&&p.jsx("div",{className:"flex flex-col gap-1 max-h-[200px] overflow-y-auto",children:W.map((C,Q)=>{var ye,Te;return p.jsxs("div",{onClick:()=>{A(C.cliType),z(C.dir),T((C.cliArgs||[]).join(" "))},className:"flex justify-between items-center px-2.5 py-1.5 rounded-md cursor-pointer bg-white/[0.02] border border-white/[0.04] text-xs transition-[background] duration-150",onMouseEnter:je=>je.currentTarget.style.background="rgba(255,255,255,0.06)",onMouseLeave:je=>je.currentTarget.style.background="rgba(255,255,255,0.02)",children:[p.jsxs("div",{className:"flex gap-1.5 items-center text-slate-400",children:[p.jsx("span",{children:Pt(C.cliType)}),p.jsx("span",{children:((ye=C.dir)==null?void 0:ye.split("/").filter(Boolean).pop())||"root"}),((Te=C.cliArgs)==null?void 0:Te.length)>0&&p.jsx("span",{className:"text-slate-600 text-[10px]",children:C.cliArgs.join(" ")})]}),p.jsx("span",{className:"text-slate-600 text-[10px]",children:C.timestamp?new Date(C.timestamp).toLocaleDateString():""})]},Q)})}),p.jsxs("div",{className:"mt-5",children:[p.jsxs("div",{className:"flex items-center gap-2 mb-2.5",children:[p.jsx("span",{className:"text-[11px] text-slate-500 font-semibold uppercase tracking-wider",children:"Recent Workspaces"}),p.jsx("button",{onClick:ee,disabled:N,className:"machine-btn",children:N?"⏳":"↻ Load"})]}),y.length>0&&p.jsx("div",{className:"flex flex-wrap gap-1.5",children:y.map((C,Q)=>p.jsxs("button",{onClick:()=>z(C),className:"machine-btn max-w-[200px] overflow-hidden text-ellipsis whitespace-nowrap",title:C,children:["📂 ",C.split("/").filter(Boolean).pop()||C]},Q))})]})]}),M==="providers"&&p.jsxs("div",{children:[p.jsxs("div",{className:"flex justify-between items-center mb-4",children:[p.jsxs("div",{className:"flex gap-1 items-center",children:[p.jsx("span",{className:"text-[11px] text-slate-500 font-semibold uppercase tracking-wider mr-2",children:"Filter"}),["all","acp","cli","ide","extension"].map(C=>p.jsx("button",{onClick:()=>Ue(C),className:`machine-btn text-[10px] px-2 py-0.5 ${O===C?"bg-violet-500/15 border-violet-500/40 text-violet-400":""}`,children:C.toUpperCase()},C))]}),p.jsx("button",{onClick:Ot,disabled:G,className:"machine-btn",children:G?"⏳ Loading...":"↻ Refresh"})]}),G&&V.length===0?p.jsx("div",{className:"p-10 text-center text-slate-600",children:"Loading provider settings..."}):p.jsx("div",{className:"flex flex-col gap-2",children:V.filter(C=>O==="all"||C.category===O).map(C=>p.jsxs("div",{className:"px-4.5 py-3.5 rounded-xl bg-slate-950/50 border border-white/[0.06]",children:[p.jsxs("div",{className:"flex items-center gap-2 mb-2.5",children:[p.jsx("span",{className:"text-lg",children:C.icon}),p.jsx("span",{className:"font-semibold text-[13px] text-slate-100",children:C.displayName}),p.jsx("span",{className:"px-1.5 py-px rounded text-[9px] font-semibold",style:{background:C.category==="acp"?"rgba(139,92,246,0.08)":C.category==="cli"?"rgba(59,130,246,0.08)":C.category==="ide"?"rgba(34,197,94,0.08)":"rgba(245,158,11,0.08)",color:C.category==="acp"?"#a78bfa":C.category==="cli"?"#60a5fa":C.category==="ide"?"#86efac":"#fbbf24"},children:C.category})]}),p.jsx("div",{className:"flex flex-col gap-2",children:C.schema.map(Q=>p.jsxs("div",{className:"flex items-center justify-between gap-3",children:[p.jsxs("div",{className:"flex-1 min-w-0",children:[p.jsxs("div",{className:"text-xs font-medium text-slate-200",children:[Q.label||Q.key,ue===`${C.type}.${Q.key}`&&p.jsx("span",{className:"ml-1.5 text-[9px] text-violet-500",children:"saving..."})]}),Q.description&&p.jsx("div",{className:"text-[10px] text-slate-500 mt-px",children:Q.description})]}),p.jsx("div",{className:"shrink-0",children:Q.type==="boolean"?p.jsx("button",{onClick:()=>qt(C.type,Q.key,!(C.values[Q.key]??Q.default)),className:"w-10 h-[22px] rounded-[11px] border-none relative cursor-pointer transition-colors duration-200",style:{background:C.values[Q.key]??Q.default?"#8b5cf6":"rgba(255,255,255,0.08)"},children:p.jsx("div",{className:"w-4 h-4 rounded-full bg-white absolute top-[3px] transition-[left] duration-200 shadow-[0_1px_3px_rgba(0,0,0,0.3)]",style:{left:C.values[Q.key]??Q.default?21:3}})}):Q.type==="number"?p.jsx("input",{type:"number",value:C.values[Q.key]??Q.default??0,min:Q.min,max:Q.max,onChange:ye=>{const Te=parseInt(ye.target.value)||0;Q.min!==void 0&&Te<Q.min||Q.max!==void 0&&Te>Q.max||qt(C.type,Q.key,Te)},className:"machine-input w-20 text-center text-[11px]"}):Q.type==="select"&&Q.options?p.jsx("select",{value:C.values[Q.key]??Q.default??"",onChange:ye=>qt(C.type,Q.key,ye.target.value),className:"machine-input text-[11px]",children:Q.options.map(ye=>p.jsx("option",{value:ye,children:ye},ye))}):p.jsx("input",{type:"text",value:C.values[Q.key]??Q.default??"",onBlur:ye=>qt(C.type,Q.key,ye.target.value),className:"machine-input w-[120px] text-[11px]"})})]},Q.key))})]},C.type))})]}),M==="logs"&&p.jsxs("div",{children:[p.jsxs("div",{className:"flex justify-between items-center mb-3",children:[p.jsxs("div",{className:"flex gap-1 items-center",children:[p.jsx("span",{className:"text-[11px] text-slate-500 font-semibold uppercase tracking-wider mr-2",children:"Level"}),["debug","info","warn","error"].map(C=>p.jsx("button",{onClick:()=>{x(C),h([]),d(0)},className:`machine-btn text-[10px] px-2 py-0.5 ${g===C?"bg-violet-500/15 border-violet-500/40 text-violet-400":""}`,children:C.toUpperCase()},C))]}),p.jsxs("div",{className:"flex gap-1.5 items-center",children:[p.jsxs("span",{className:"text-[10px] text-slate-600",children:[c.length," entries"]}),p.jsx("button",{onClick:()=>m(!f),className:`machine-btn ${f?"text-green-500 border-green-500/30":""}`,children:f?"⏸ Pause":"▶ Resume"}),p.jsx("button",{onClick:()=>{h([]),d(0)},className:"machine-btn",children:"Clear"})]})]}),p.jsxs("div",{className:"bg-slate-950/60 border border-white/[0.06] rounded-xl p-3 min-h-[200px] max-h-[500px] overflow-y-auto font-mono text-[11px] leading-relaxed",children:[c.length===0&&p.jsx("div",{className:"p-10 text-center text-slate-600",children:"Loading daemon logs..."}),c.map((C,Q)=>p.jsxs("div",{className:"flex gap-2 py-px",style:{color:C.level==="error"?"#ef4444":C.level==="warn"?"#f59e0b":C.level==="debug"?"#64748b":"#94a3b8"},children:[p.jsx("span",{className:"text-slate-600 min-w-[75px] shrink-0",children:new Date(C.timestamp).toLocaleTimeString()}),p.jsx("span",{className:"font-semibold min-w-[32px] shrink-0 text-[9px]",style:{color:C.level==="error"?"#ef4444":C.level==="warn"?"#f59e0b":C.level==="debug"?"#475569":"#8b5cf6"},children:C.level==="error"?"ERR":C.level==="warn"?"WRN":C.level==="debug"?"DBG":"INF"}),p.jsx("span",{children:C.message})]},Q)),p.jsx("div",{ref:ve})]})]})]})]})}function O3(){if(typeof window>"u")return"ws://localhost:3847/ws";const t=`${window.location.protocol==="https:"?"wss":"ws"}://${window.location.host}/ws`,n=new URLSearchParams(window.location.search).get("token");return n?`${t}?token=${encodeURIComponent(n)}`:t}const zg=O3(),Fg=3e3,j3=3e4;let rn=null,z3=0;const wa=new Map,Xh=new Set;let Ds=null;async function Fl(e,t,r){const n=rn;if(n&&n.readyState===WebSocket.OPEN){const s=`req_${++z3}_${Date.now()}`;return new Promise((o,l)=>{const a=setTimeout(()=>{wa.delete(s),l(new Error(`WS command timeout: ${t}`))},3e4);wa.set(s,{resolve:c=>{clearTimeout(a),o(c)},reject:c=>{clearTimeout(a),l(c)}}),n.send(JSON.stringify({type:"command",requestId:s,data:{type:t,payload:r||{},target:e}}))})}const i=await fetch("/api/v1/command",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({type:t,payload:r||{},target:e})});if(!i.ok)throw new Error(`HTTP ${i.status}`);return i.json()}class F3{constructor(t){ps(this,"daemonId");ps(this,"screenshotIdeType",null);this.daemonId=t}get hasCommandChannel(){return(rn==null?void 0:rn.readyState)===WebSocket.OPEN}get connectionState(){return(rn==null?void 0:rn.readyState)===WebSocket.OPEN?"connected":"disconnected"}async sendCommand(t,r){return Fl(this.daemonId,t,r)}async sendInput(t,r){return Fl(this.daemonId,"cdp_remote_action",{action:t,params:r})}startScreenshots(t){if(this.screenshotIdeType=t||null,Ds)return;const r=async()=>{if(this.hasCommandChannel)try{const n=await Fl(this.daemonId,"screenshot",{width:1280});if(n!=null&&n.success&&(n!=null&&n.base64)){const i=await fetch(`data:image/jpeg;base64,${n.base64}`).then(s=>s.blob());Xh.forEach(s=>s(this.daemonId,i))}}catch{}};r(),Ds=setInterval(r,2e3)}stopScreenshots(t){Ds&&(clearInterval(Ds),Ds=null)}}let Xn=null;function $3(e){(!Xn||Xn.daemonId!==e)&&(Xn=new F3(e));try{const{connectionManager:t}=require("@adhdev/web-core"),r=t.get.bind(t);t.get=n=>n===e?Xn:r(n),t.getState=n=>n===e&&(Xn==null?void 0:Xn.connectionState)||"disconnected",t.onScreenshot=n=>(Xh.add(n),()=>{Xh.delete(n)})}catch{}}function H3({children:e}){const t=w.useRef($p()),r=$p();t.current=r;const[,n]=w.useState("disconnected"),i=w.useRef(null),s=w.useRef(),o=w.useRef(Fg),l=w.useRef(!0);return w.useEffect(()=>{l.current=!0;function a(){var u,d;if(!l.current||((u=i.current)==null?void 0:u.readyState)===WebSocket.OPEN||((d=i.current)==null?void 0:d.readyState)===WebSocket.CONNECTING)return;n("connecting"),console.log(`[Standalone WS] Connecting to ${zg}...`);let h;try{h=new WebSocket(zg)}catch(f){console.error("[Standalone WS] Failed to create WebSocket:",f),c();return}i.current=h,h.onopen=()=>{if(!l.current){h.close();return}n("connected"),o.current=Fg,console.log("[Standalone WS] Connected")},rn=h,h.onmessage=f=>{var m;try{const g=JSON.parse(f.data);if((g.type==="command_result"||g.type==="error")&&g.requestId){const x=wa.get(g.requestId);x&&(wa.delete(g.requestId),g.type==="error"?x.reject(new Error(((m=g.data)==null?void 0:m.message)||"Command failed")):x.resolve(g.data));return}if(g.type==="status"||g.type==="initial_state"){const x=g.data;if(!x)return;const{injectEntries:_,markLoaded:v}=t.current,y=[],E=x.id||"standalone";$3(E),y.push({id:E,type:"adhdev-daemon",status:"online",daemonMode:!0,machine:{hostname:x.hostname,platform:x.platform,...x.system||{}},system:x.system||null,timestamp:x.timestamp,cdpConnected:x.cdpConnected,detectedIdes:x.detectedIdes||[],availableProviders:x.availableProviders||[],managedIdeIds:(x.ides||[]).map(N=>N.id),managedCliIds:(x.clis||[]).map(N=>N.id)});for(const N of x.ides||[])y.push({...N,daemonId:x.id||"standalone",status:N.cdpConnected?"online":"detected"});for(const N of x.clis||[])y.push({...N,daemonId:x.id||"standalone",status:N.isRunning?"running":"stopped"});y.length>0&&_(y),v()}}catch(g){console.error("[Standalone WS] Parse error:",g)}},h.onclose=()=>{l.current&&(n("disconnected"),i.current=null,c())},h.onerror=f=>{console.warn("[Standalone WS] Error, will reconnect:",f)}}function c(){if(!l.current)return;clearTimeout(s.current);const h=o.current;console.log(`[Standalone WS] Reconnecting in ${h}ms...`),s.current=setTimeout(()=>{o.current=Math.min(o.current*1.5,j3),a()},h)}return a(),()=>{l.current=!1,clearTimeout(s.current),i.current&&(i.current.onclose=null,i.current.close(),i.current=null,rn=null)}},[]),p.jsx(p.Fragment,{children:e})}function W3({children:e}){return p.jsx(Xw,{children:p.jsx(H3,{children:e})})}const U3=[{id:"dashboard",path:"/dashboard",icon:"🌊",label:"Dashboard"},{id:"machine",path:"/machine",icon:"🐇",label:"Burrow"}];function K3({children:e}){const t=cs(),r=Mo(),[n,i]=w.useState(!1),[s,o]=w.useState(()=>{try{return localStorage.getItem("sidebar-collapsed")==="1"}catch{return!1}}),l=c=>{t(c),i(!1)},a=()=>{o(c=>{const h=!c;try{localStorage.setItem("sidebar-collapsed",h?"1":"0")}catch{}return h})};return p.jsxs("div",{className:`app-layout${n?" mobile-menu-open":""}${s?" sidebar-collapsed":""}`,children:[p.jsxs("button",{type:"button",className:"mobile-menu-btn","aria-label":"Open menu",onClick:()=>i(!0),children:[p.jsx("span",{className:"mobile-menu-icon"}),p.jsx("span",{className:"mobile-menu-icon"}),p.jsx("span",{className:"mobile-menu-icon"})]}),n&&p.jsx("div",{className:"sidebar-overlay",role:"button",tabIndex:0,"aria-label":"Close menu",onClick:()=>i(!1),onKeyDown:c=>c.key==="Escape"&&i(!1)}),p.jsxs("aside",{className:`sidebar ${n?"sidebar-open":""}`,children:[p.jsxs("div",{className:"sidebar-header",children:[p.jsxs("div",{className:"sidebar-logo",style:{justifyContent:s?"center":void 0,gap:s?0:void 0},children:[p.jsx("img",{src:"/otter-logo.png",alt:"ADHDev",style:{width:28,height:28}}),!s&&p.jsx("span",{children:"ADHDev"})]}),p.jsx("button",{type:"button",className:"sidebar-close-btn","aria-label":"Close menu",onClick:()=>i(!1),children:"✕"})]}),p.jsx("nav",{className:"sidebar-nav",children:U3.map(c=>p.jsxs("div",{className:`nav-item${r.pathname===c.path?" active":""}`,id:`nav-${c.id}`,onClick:()=>l(c.path),title:s?c.label:void 0,style:{cursor:"pointer",justifyContent:s?"center":void 0,padding:s?"10px 0":void 0},children:[p.jsx("span",{className:"nav-icon",children:c.icon}),!s&&c.label]},c.id))}),p.jsxs("div",{style:{borderTop:"1px solid var(--border-subtle)",paddingTop:16,marginTop:"auto"},children:[!s&&p.jsxs("div",{style:{padding:"8px 12px",fontSize:12,color:"var(--text-muted)"},children:["Selfhost v","0.5.2"]}),p.jsxs("div",{className:"nav-item",onClick:a,title:s?"Expand sidebar":"Collapse sidebar",style:{cursor:"pointer",justifyContent:s?"center":void 0,padding:s?"10px 0":void 0},children:[p.jsx("span",{className:"nav-icon",style:{fontSize:16},children:s?"›":"‹"}),!s&&p.jsx("span",{style:{fontSize:12},children:"Collapse"})]})]})]}),p.jsx("main",{className:"main-content",style:{position:"relative"},children:p.jsx("div",{className:"main-content-inner",children:e})})]})}function $g(){const{ides:e}=y0(),t=e.find(r=>{var n;return r.daemonMode||((n=r.id)==null?void 0:n.startsWith("standalone"))});return t?p.jsx(Ll,{to:`/machines/${t.id}`,replace:!0}):e.length>0?p.jsx(Ll,{to:`/machines/${e[0].id}`,replace:!0}):p.jsx(Ll,{to:"/dashboard",replace:!0})}function V3(){return p.jsx(Vw,{children:p.jsx(W3,{children:p.jsx(Jw,{value:{sendCommand:Fl,sendData:()=>!1},children:p.jsx(K3,{children:p.jsxs(Hw,{children:[p.jsx(Zn,{path:"/dashboard",element:p.jsx(M3,{})}),p.jsx(Zn,{path:"/ide/:id",element:p.jsx(A3,{})}),p.jsx(Zn,{path:"/machine",element:p.jsx($g,{})}),p.jsx(Zn,{path:"/machines/:id",element:p.jsx(B3,{})}),p.jsx(Zn,{path:"/machines",element:p.jsx($g,{})}),p.jsx(Zn,{path:"*",element:p.jsx(Ll,{to:"/dashboard",replace:!0})})]})})})})})}n0(document.getElementById("root")).render(p.jsx(w.StrictMode,{children:p.jsx(V3,{})}));
|
|
186
|
+
This will terminate the CLI process.`))try{await r(e,"stop_cli",{cliType:C,dir:Q}),P("info",`${C} stopped`)}catch(ye){P("error",`Stop failed: ${ye.message}`)}},K=async C=>{try{await r(C.id,"restart_session",{ideType:C.type}),P("info",`${Ur(C.type)} restart initiated`)}catch(Q){P("error",`Restart failed: ${Q.message}`)}},Y=async()=>{if(e)try{const C=await r(e,"detect_ides",{});P("info",`Found ${((C==null?void 0:C.result)||[]).length} IDE(s)`)}catch(C){P("error",`Detection failed: ${C.message}`)}},ee=async()=>{if(e){k(!0);try{const C=await r(e,"get_recent_workspaces",{});C!=null&&C.success&&Array.isArray(C==null?void 0:C.result)&&E(C.result)}catch(C){P("error",`Failed: ${C.message}`)}finally{k(!1)}}},se=async()=>{var C;if(e){S(!0);try{const Q=await n(e,"get_cli_history");Q.success&&((C=Q.result)!=null&&C.history)&&L(Q.result.history)}catch{}S(!1)}},le=async()=>{if(e)try{await n(e,"set_machine_nickname",{nickname:b}),P("info",`Nickname set to "${b||"(cleared)"}"`),oe(!1)}catch(C){P("error",`Failed: ${C.message}`)}};if(!ke)return o?p.jsxs("div",{className:"p-10 text-center text-slate-500",children:[p.jsx("h2",{className:"text-slate-100",children:"Machine not found"}),p.jsx("p",{className:"mt-3",children:"The machine may be offline or not yet connected."}),p.jsx("button",{onClick:()=>t("/machines"),className:"machine-btn-back",children:"← Back to Burrows"})]}):p.jsx("div",{className:"p-10 text-center text-slate-500",children:p.jsx("p",{children:"⏳ Loading machine..."})});const fe=ke.totalMem>0?Math.round((ke.totalMem-ke.freeMem)/ke.totalMem*100):0,ae=ke.loadavg[0]||0,xe=ke.machineNickname||ke.hostname,we=[{id:"overview",label:"📊 Overview"},{id:"ides",label:"💻 IDEs",count:Qe.length},{id:"clis",label:"🔌 CLIs",count:J.length},{id:"providers",label:"⚙️ Providers",count:V.length>0?V.length:void 0},{id:"logs",label:"📋 Logs",count:l.length>0?l.length:void 0}];return p.jsxs("div",{className:"flex flex-col h-full",children:[p.jsxs("div",{className:"px-6 py-4 border-b border-white/[0.06] bg-surface-primary",children:[p.jsxs("div",{className:"flex items-center justify-between",children:[p.jsxs("div",{className:"flex items-center gap-3.5",children:[p.jsx("button",{onClick:()=>t("/machines"),className:"machine-btn-back",children:"←"}),p.jsxs("div",{children:[p.jsxs("div",{className:"flex items-center gap-2",children:[ne?p.jsxs("div",{className:"flex gap-1.5 items-center",children:[p.jsx("input",{autoFocus:!0,value:b,onChange:C=>me(C.target.value),onKeyDown:C=>{C.key==="Enter"&&le(),C.key==="Escape"&&oe(!1)},placeholder:"Machine nickname...",className:"px-2.5 py-1 rounded-md border border-violet-500/30 bg-slate-950/80 text-slate-100 text-sm font-semibold w-[200px]"}),p.jsx("button",{onClick:le,className:"machine-btn text-green-500 border-green-500/30",children:"✓"}),p.jsx("button",{onClick:()=>oe(!1),className:"machine-btn",children:"✕"})]}):p.jsx("h1",{className:"text-lg font-bold text-slate-100 m-0 cursor-pointer",onClick:()=>{oe(!0),me(ke.machineNickname||"")},title:"Click to set nickname",children:xe}),p.jsx("span",{className:"status-dot-md online"})]}),p.jsxs("div",{className:"text-[11px] text-slate-500 mt-0.5 flex gap-2 items-center",children:[p.jsxs("span",{children:[ke.platform," · ",ke.arch," · ",ke.cpus," cores"]}),ke.p2p.available&&p.jsxs("span",{className:"px-1.5 py-px rounded text-[9px] font-semibold",style:{background:ke.p2p.state==="connected"?"rgba(34,197,94,0.08)":"rgba(234,179,8,0.08)",color:ke.p2p.state==="connected"?"#22c55e":"#eab308"},children:["P2P ",ke.p2p.state==="connected"?`● ${ke.p2p.peers}`:"○"]}),ke.cdpconnected&&p.jsx("span",{className:"px-1.5 py-px rounded text-[9px] font-semibold bg-green-500/[0.08] text-green-500",children:"CDP ●"}),ke.machineNickname&&p.jsxs("span",{className:"text-slate-600",children:["(",ke.hostname,")"]})]})]})]}),p.jsx("button",{onClick:Y,className:"machine-btn-primary",title:"Re-detect installed IDEs",children:"🔍 Scan IDEs"})]}),p.jsx("div",{className:"machine-tabs",children:we.map(C=>p.jsxs("button",{onClick:()=>F(C.id),className:`machine-tab${M===C.id?" active":""}`,children:[C.label,C.count!==void 0&&p.jsx("span",{className:"tab-count",children:C.count})]},C.id))})]}),p.jsxs("div",{className:"page-content",children:[M==="overview"&&p.jsxs("div",{children:[p.jsxs("div",{className:"grid grid-cols-[repeat(auto-fit,minmax(140px,1fr))] gap-2.5 mb-5",children:[p.jsx(Mg,{icon:"⏱",label:"Uptime",value:S3(ke.uptime)}),p.jsx(Mg,{icon:"💻",label:"IDEs",value:`${Qe.length}`,sub:`${J.length} CLIs`})]}),p.jsxs("div",{className:"px-5 py-4 rounded-xl mb-5 bg-slate-950/50 border border-white/[0.06]",children:[p.jsx("div",{className:"text-[11px] text-slate-500 font-semibold uppercase tracking-wider mb-3",children:"Resource Usage"}),p.jsxs("div",{className:"flex gap-6",children:[p.jsx(Ig,{value:Math.min(Math.round(ae/ke.cpus*100),100),max:100,label:"CPU Load",color:"#8b5cf6",detail:`${ae.toFixed(2)} avg / ${ke.cpus} cores`}),p.jsx(Ig,{value:fe,max:100,label:"Memory",color:"#3b82f6",detail:`${Ag(ke.totalMem-ke.freeMem)} / ${Ag(ke.totalMem)}`})]})]}),p.jsxs("div",{className:"grid grid-cols-[repeat(auto-fit,minmax(200px,1fr))] gap-3",children:[p.jsxs("div",{className:"px-5 py-4 rounded-xl bg-slate-950/50 border border-white/[0.06]",children:[p.jsxs("div",{className:"flex justify-between items-center mb-2.5",children:[p.jsx("span",{className:"text-[11px] text-slate-500 font-semibold uppercase tracking-wider",children:"IDEs"}),p.jsx("button",{onClick:()=>F("ides"),className:"machine-btn text-[10px]",children:"View All →"})]}),Qe.length===0?p.jsx("div",{className:"text-xs text-slate-600 italic",children:"No IDEs running"}):p.jsx("div",{className:"flex flex-col gap-1.5",children:Qe.map(C=>{var ye,Te,je;const Q=(C.agentStreams||[]).some(Je=>Je.status==="generating"||Je.status==="streaming")||((ye=C.activeChat)==null?void 0:ye.status)==="generating";return p.jsxs("div",{onClick:()=>t(`/ide/${C.id}`),className:`flex items-center gap-2 px-2.5 py-1.5 rounded-lg cursor-pointer transition-[background] duration-150 ${Q?"bg-orange-500/[0.04] border border-orange-500/10":"bg-white/[0.02] border border-transparent"}`,children:[p.jsx("span",{children:Pt(C.type)}),p.jsx("span",{className:"text-xs text-slate-200 font-medium",children:Ur(C.type)}),p.jsx("span",{className:"text-[10px] text-slate-600 overflow-hidden text-ellipsis whitespace-nowrap",children:((je=(Te=C.workspaceFolders)==null?void 0:Te[0])==null?void 0:je.name)||""}),Q&&p.jsx("span",{className:"text-[10px] text-orange-400 font-semibold ml-auto",children:"⚡ Working"}),p.jsx("span",{className:`${Q?"ml-1.5":"ml-auto"} w-1.5 h-1.5 rounded-full`,style:{background:Q?"#fb923c":"#22c55e",boxShadow:Q?"0 0 8px rgba(249,115,22,0.4)":"none",animation:Q?"pulse-dot 1.5s infinite":"none"}})]},C.id)})})]}),p.jsxs("div",{className:"px-5 py-4 rounded-xl bg-slate-950/50 border border-white/[0.06]",children:[p.jsxs("div",{className:"flex justify-between items-center mb-2.5",children:[p.jsx("span",{className:"text-[11px] text-slate-500 font-semibold uppercase tracking-wider",children:"CLIs"}),p.jsx("button",{onClick:()=>F("clis"),className:"machine-btn text-[10px]",children:"View All →"})]}),J.length===0?p.jsx("div",{className:"text-xs text-slate-600 italic",children:"No CLIs running"}):p.jsx("div",{className:"flex flex-col gap-1.5",children:J.map(C=>p.jsxs("div",{className:"flex items-center gap-2 px-2.5 py-1.5 rounded-lg bg-white/[0.02]",children:[p.jsx("span",{children:Pt(C.type)}),p.jsx("span",{className:"text-xs text-slate-200 font-medium",children:C.cliName}),p.jsx("span",{className:"text-[10px] text-slate-600 overflow-hidden text-ellipsis whitespace-nowrap",children:C.workingDir.split("/").pop()}),p.jsx("span",{className:"ml-auto w-1.5 h-1.5 rounded-full",style:{background:C.status==="stopped"?"#ef4444":"#22c55e"}})]},C.id))})]})]}),ke.detectedIdes.length>0&&p.jsxs("div",{className:"mt-4 px-4.5 py-3.5 rounded-xl bg-slate-950/50 border border-white/[0.06]",children:[p.jsx("div",{className:"text-[11px] text-slate-500 font-semibold uppercase tracking-wider mb-2",children:"Detected on this machine"}),p.jsx("div",{className:"flex flex-wrap gap-1.5",children:ke.detectedIdes.map(C=>p.jsxs("div",{className:`px-2.5 py-1 rounded-md text-[11px] flex items-center gap-1 ${C.running?"bg-green-500/[0.06] border border-green-500/[0.12] text-green-300":"bg-white/[0.02] border border-white/[0.04] text-slate-500"}`,children:[p.jsx("span",{children:Pt(C.type)}),C.name||C.type,p.jsx("span",{className:"w-1 h-1 rounded-full",style:{background:C.running?"#22c55e":"#475569"}})]},C.type))})]})]}),M==="ides"&&p.jsxs("div",{children:[p.jsxs("div",{className:"text-[11px] text-slate-500 font-semibold uppercase tracking-wider mb-2.5",children:["Running (",Qe.length,")"]}),Qe.length===0?p.jsx("div",{className:"py-10 px-5 text-center rounded-xl bg-slate-950/40 border border-dashed border-white/[0.06] text-slate-600 text-[13px] mb-5",children:"No IDEs currently running. Launch one below."}):p.jsx("div",{className:"flex flex-col gap-2.5 mb-5",children:Qe.map(C=>{var Q,ye;return p.jsxs("div",{className:"px-4.5 py-3.5 rounded-xl bg-slate-950/50 border border-white/[0.06]",children:[p.jsxs("div",{className:"flex justify-between items-center mb-2.5",children:[p.jsxs("div",{className:"flex items-center gap-2",children:[p.jsx("span",{className:"text-lg",children:Pt(C.type)}),p.jsx("span",{className:"font-semibold text-sm text-slate-100",children:Ur(C.type)}),C.version&&p.jsxs("span",{className:"text-[10px] text-slate-600",children:["v",C.version]}),p.jsx("span",{className:"w-1.5 h-1.5 rounded-full bg-green-500 shadow-[0_0_6px_rgba(34,197,94,0.3)]"})]}),p.jsxs("div",{className:"flex gap-1.5",children:[p.jsx("button",{onClick:()=>t(`/ide/${C.id}`),className:"machine-btn",children:"🖥 Control"}),p.jsx("button",{onClick:()=>K(C),className:"machine-btn text-amber-500 border-amber-500/30",children:"↻ Restart"})]})]}),p.jsxs("div",{className:"grid grid-cols-[repeat(auto-fit,minmax(130px,1fr))] gap-1.5 text-xs text-slate-400",children:[p.jsxs("div",{children:[p.jsx("span",{className:"text-slate-500",children:"Workspace:"})," ",((Q=C.workspaceFolders)==null?void 0:Q.map(Te=>Te.name).join(", "))||"—"]}),p.jsxs("div",{children:[p.jsx("span",{className:"text-slate-500",children:"File:"})," ",((ye=C.activeFile)==null?void 0:ye.split("/").pop())||"—"]}),p.jsxs("div",{children:[p.jsx("span",{className:"text-slate-500",children:"Terminals:"})," ",C.terminals]}),p.jsxs("div",{children:[p.jsx("span",{className:"text-slate-500",children:"CDP:"})," ",C.cdpconnected?"● connected":"○ Off"]})]}),C.aiAgents.length>0&&p.jsx("div",{className:"flex gap-1 mt-2 flex-wrap",children:C.aiAgents.map(Te=>p.jsxs("span",{className:`px-2 py-0.5 rounded-md text-[10px] ${Te.status==="generating"||Te.status==="streaming"?"bg-orange-500/[0.08] text-orange-400":"bg-indigo-500/[0.06] text-indigo-400"}`,children:[Te.name," · ",Te.status]},Te.id))})]},C.id)})}),p.jsxs("div",{className:"text-[11px] text-slate-500 font-semibold uppercase tracking-wider mb-2.5",children:["Available to Launch (",pe.length,")"]}),p.jsxs("div",{className:"flex flex-wrap gap-2",children:[pe.map(C=>p.jsxs("button",{onClick:()=>X(C.type||C.id||""),disabled:!!_,className:"machine-btn-primary flex items-center gap-1.5",style:{opacity:_&&_!==C.type?.4:1},children:[p.jsx("span",{children:Pt(C.type)}),_===C.type?"⏳ Launching...":`▶ ${C.name||Ur(C.type)}`]},C.type)),pe.length===0&&p.jsxs("div",{className:"text-xs text-slate-600 italic",children:["All detected IDEs are running, or none detected.",p.jsx("button",{onClick:Y,className:"machine-btn ml-2",children:"🔍 Scan"})]})]})]}),M==="clis"&&p.jsxs("div",{children:[p.jsxs("div",{className:"px-5 py-4 rounded-xl mb-5 bg-slate-950/50 border border-violet-500/[0.12]",children:[p.jsx("div",{className:"text-[11px] text-slate-500 font-semibold uppercase tracking-wider mb-2.5",children:"Launch New CLI"}),p.jsxs("div",{className:"flex gap-2 items-center flex-wrap",children:[p.jsx("select",{value:R,onChange:C=>A(C.target.value),className:"machine-input",children:Yt.length>0?Yt.map(C=>p.jsxs("option",{value:C.type,children:[C.icon," ",C.displayName]},C.type)):p.jsx("option",{value:"",disabled:!0,children:"No providers available"})}),p.jsx("input",{type:"text",placeholder:"Working directory...",value:I,onChange:C=>z(C.target.value),className:"machine-input flex-1 min-w-[200px]"}),p.jsx("input",{type:"text",placeholder:"Args (optional)",value:Z,onChange:C=>T(C.target.value),className:"machine-input min-w-[150px]"}),(()=>{const C=Yt.find(Q=>Q.type===R);return(C==null?void 0:C.category)==="acp"?p.jsx("input",{type:"text",placeholder:"Model (default)",value:D,onChange:Q=>U(Q.target.value),className:"machine-input min-w-[120px]"}):null})(),p.jsx("button",{onClick:()=>B(R,I,Z||void 0,D||void 0),className:"machine-btn-primary",children:"▶ Launch"})]})]}),p.jsxs("div",{className:"text-[11px] text-slate-500 font-semibold uppercase tracking-wider mb-2.5",children:["Running (",J.length,")"]}),J.length===0?p.jsx("div",{className:"py-7.5 px-5 text-center rounded-xl bg-slate-950/40 border border-dashed border-white/[0.06] text-slate-600 text-[13px] mb-5",children:"No CLIs running"}):p.jsx("div",{className:"flex flex-col gap-2 mb-5",children:J.map(C=>p.jsxs("div",{className:"px-4 py-3 rounded-[10px] bg-slate-950/50 border border-white/[0.06] flex items-center justify-between",children:[p.jsxs("div",{className:"flex items-center gap-2.5",children:[p.jsx("span",{className:"text-lg",children:Pt(C.type)}),p.jsxs("div",{children:[p.jsx("div",{className:"font-semibold text-[13px] text-slate-100",children:C.cliName}),p.jsx("div",{className:"text-[11px] text-slate-500",children:C.workingDir})]})]}),p.jsxs("div",{className:"flex items-center gap-2",children:[p.jsx("span",{className:`px-2 py-0.5 rounded-md text-[10px] font-semibold ${C.status==="stopped"?"bg-red-500/[0.08] text-red-500":"bg-green-500/[0.08] text-green-500"}`,children:C.status}),C.status==="stopped"?p.jsx("button",{onClick:()=>B(C.type,C.workingDir),className:"machine-btn text-green-500 border-green-500/30",children:"▶"}):p.jsx("button",{onClick:()=>j(C.type,C.workingDir),className:"machine-btn text-red-500 border-red-500/30",children:"■"})]})]},C.id))}),p.jsxs("div",{className:"flex items-center gap-2 mb-2.5",children:[p.jsx("span",{className:"text-[11px] text-slate-500 font-semibold uppercase tracking-wider",children:"History"}),p.jsx("button",{onClick:se,disabled:$,className:"machine-btn",children:$?"⏳":"↻ Load"})]}),W.length>0&&p.jsx("div",{className:"flex flex-col gap-1 max-h-[200px] overflow-y-auto",children:W.map((C,Q)=>{var ye,Te;return p.jsxs("div",{onClick:()=>{A(C.cliType),z(C.dir),T((C.cliArgs||[]).join(" "))},className:"flex justify-between items-center px-2.5 py-1.5 rounded-md cursor-pointer bg-white/[0.02] border border-white/[0.04] text-xs transition-[background] duration-150",onMouseEnter:je=>je.currentTarget.style.background="rgba(255,255,255,0.06)",onMouseLeave:je=>je.currentTarget.style.background="rgba(255,255,255,0.02)",children:[p.jsxs("div",{className:"flex gap-1.5 items-center text-slate-400",children:[p.jsx("span",{children:Pt(C.cliType)}),p.jsx("span",{children:((ye=C.dir)==null?void 0:ye.split("/").filter(Boolean).pop())||"root"}),((Te=C.cliArgs)==null?void 0:Te.length)>0&&p.jsx("span",{className:"text-slate-600 text-[10px]",children:C.cliArgs.join(" ")})]}),p.jsx("span",{className:"text-slate-600 text-[10px]",children:C.timestamp?new Date(C.timestamp).toLocaleDateString():""})]},Q)})}),p.jsxs("div",{className:"mt-5",children:[p.jsxs("div",{className:"flex items-center gap-2 mb-2.5",children:[p.jsx("span",{className:"text-[11px] text-slate-500 font-semibold uppercase tracking-wider",children:"Recent Workspaces"}),p.jsx("button",{onClick:ee,disabled:N,className:"machine-btn",children:N?"⏳":"↻ Load"})]}),y.length>0&&p.jsx("div",{className:"flex flex-wrap gap-1.5",children:y.map((C,Q)=>p.jsxs("button",{onClick:()=>z(C),className:"machine-btn max-w-[200px] overflow-hidden text-ellipsis whitespace-nowrap",title:C,children:["📂 ",C.split("/").filter(Boolean).pop()||C]},Q))})]})]}),M==="providers"&&p.jsxs("div",{children:[p.jsxs("div",{className:"flex justify-between items-center mb-4",children:[p.jsxs("div",{className:"flex gap-1 items-center",children:[p.jsx("span",{className:"text-[11px] text-slate-500 font-semibold uppercase tracking-wider mr-2",children:"Filter"}),["all","acp","cli","ide","extension"].map(C=>p.jsx("button",{onClick:()=>Ue(C),className:`machine-btn text-[10px] px-2 py-0.5 ${O===C?"bg-violet-500/15 border-violet-500/40 text-violet-400":""}`,children:C.toUpperCase()},C))]}),p.jsx("button",{onClick:Ot,disabled:G,className:"machine-btn",children:G?"⏳ Loading...":"↻ Refresh"})]}),G&&V.length===0?p.jsx("div",{className:"p-10 text-center text-slate-600",children:"Loading provider settings..."}):p.jsx("div",{className:"flex flex-col gap-2",children:V.filter(C=>O==="all"||C.category===O).map(C=>p.jsxs("div",{className:"px-4.5 py-3.5 rounded-xl bg-slate-950/50 border border-white/[0.06]",children:[p.jsxs("div",{className:"flex items-center gap-2 mb-2.5",children:[p.jsx("span",{className:"text-lg",children:C.icon}),p.jsx("span",{className:"font-semibold text-[13px] text-slate-100",children:C.displayName}),p.jsx("span",{className:"px-1.5 py-px rounded text-[9px] font-semibold",style:{background:C.category==="acp"?"rgba(139,92,246,0.08)":C.category==="cli"?"rgba(59,130,246,0.08)":C.category==="ide"?"rgba(34,197,94,0.08)":"rgba(245,158,11,0.08)",color:C.category==="acp"?"#a78bfa":C.category==="cli"?"#60a5fa":C.category==="ide"?"#86efac":"#fbbf24"},children:C.category})]}),p.jsx("div",{className:"flex flex-col gap-2",children:C.schema.map(Q=>p.jsxs("div",{className:"flex items-center justify-between gap-3",children:[p.jsxs("div",{className:"flex-1 min-w-0",children:[p.jsxs("div",{className:"text-xs font-medium text-slate-200",children:[Q.label||Q.key,ue===`${C.type}.${Q.key}`&&p.jsx("span",{className:"ml-1.5 text-[9px] text-violet-500",children:"saving..."})]}),Q.description&&p.jsx("div",{className:"text-[10px] text-slate-500 mt-px",children:Q.description})]}),p.jsx("div",{className:"shrink-0",children:Q.type==="boolean"?p.jsx("button",{onClick:()=>qt(C.type,Q.key,!(C.values[Q.key]??Q.default)),className:"w-10 h-[22px] rounded-[11px] border-none relative cursor-pointer transition-colors duration-200",style:{background:C.values[Q.key]??Q.default?"#8b5cf6":"rgba(255,255,255,0.08)"},children:p.jsx("div",{className:"w-4 h-4 rounded-full bg-white absolute top-[3px] transition-[left] duration-200 shadow-[0_1px_3px_rgba(0,0,0,0.3)]",style:{left:C.values[Q.key]??Q.default?21:3}})}):Q.type==="number"?p.jsx("input",{type:"number",value:C.values[Q.key]??Q.default??0,min:Q.min,max:Q.max,onChange:ye=>{const Te=parseInt(ye.target.value)||0;Q.min!==void 0&&Te<Q.min||Q.max!==void 0&&Te>Q.max||qt(C.type,Q.key,Te)},className:"machine-input w-20 text-center text-[11px]"}):Q.type==="select"&&Q.options?p.jsx("select",{value:C.values[Q.key]??Q.default??"",onChange:ye=>qt(C.type,Q.key,ye.target.value),className:"machine-input text-[11px]",children:Q.options.map(ye=>p.jsx("option",{value:ye,children:ye},ye))}):p.jsx("input",{type:"text",value:C.values[Q.key]??Q.default??"",onBlur:ye=>qt(C.type,Q.key,ye.target.value),className:"machine-input w-[120px] text-[11px]"})})]},Q.key))})]},C.type))})]}),M==="logs"&&p.jsxs("div",{children:[p.jsxs("div",{className:"flex justify-between items-center mb-3",children:[p.jsxs("div",{className:"flex gap-1 items-center",children:[p.jsx("span",{className:"text-[11px] text-slate-500 font-semibold uppercase tracking-wider mr-2",children:"Level"}),["debug","info","warn","error"].map(C=>p.jsx("button",{onClick:()=>{x(C),h([]),d(0)},className:`machine-btn text-[10px] px-2 py-0.5 ${g===C?"bg-violet-500/15 border-violet-500/40 text-violet-400":""}`,children:C.toUpperCase()},C))]}),p.jsxs("div",{className:"flex gap-1.5 items-center",children:[p.jsxs("span",{className:"text-[10px] text-slate-600",children:[c.length," entries"]}),p.jsx("button",{onClick:()=>m(!f),className:`machine-btn ${f?"text-green-500 border-green-500/30":""}`,children:f?"⏸ Pause":"▶ Resume"}),p.jsx("button",{onClick:()=>{h([]),d(0)},className:"machine-btn",children:"Clear"})]})]}),p.jsxs("div",{className:"bg-slate-950/60 border border-white/[0.06] rounded-xl p-3 min-h-[200px] max-h-[500px] overflow-y-auto font-mono text-[11px] leading-relaxed",children:[c.length===0&&p.jsx("div",{className:"p-10 text-center text-slate-600",children:"Loading daemon logs..."}),c.map((C,Q)=>p.jsxs("div",{className:"flex gap-2 py-px",style:{color:C.level==="error"?"#ef4444":C.level==="warn"?"#f59e0b":C.level==="debug"?"#64748b":"#94a3b8"},children:[p.jsx("span",{className:"text-slate-600 min-w-[75px] shrink-0",children:new Date(C.timestamp).toLocaleTimeString()}),p.jsx("span",{className:"font-semibold min-w-[32px] shrink-0 text-[9px]",style:{color:C.level==="error"?"#ef4444":C.level==="warn"?"#f59e0b":C.level==="debug"?"#475569":"#8b5cf6"},children:C.level==="error"?"ERR":C.level==="warn"?"WRN":C.level==="debug"?"DBG":"INF"}),p.jsx("span",{children:C.message})]},Q)),p.jsx("div",{ref:ve})]})]})]})]})}function O3(){if(typeof window>"u")return"ws://localhost:3847/ws";const t=`${window.location.protocol==="https:"?"wss":"ws"}://${window.location.host}/ws`,n=new URLSearchParams(window.location.search).get("token");return n?`${t}?token=${encodeURIComponent(n)}`:t}const zg=O3(),Fg=3e3,j3=3e4;let rn=null,z3=0;const wa=new Map,Xh=new Set;let Ds=null;async function Fl(e,t,r){const n=rn;if(n&&n.readyState===WebSocket.OPEN){const s=`req_${++z3}_${Date.now()}`;return new Promise((o,l)=>{const a=setTimeout(()=>{wa.delete(s),l(new Error(`WS command timeout: ${t}`))},3e4);wa.set(s,{resolve:c=>{clearTimeout(a),o(c)},reject:c=>{clearTimeout(a),l(c)}}),n.send(JSON.stringify({type:"command",requestId:s,data:{type:t,payload:r||{},target:e}}))})}const i=await fetch("/api/v1/command",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({type:t,payload:r||{},target:e})});if(!i.ok)throw new Error(`HTTP ${i.status}`);return i.json()}class F3{constructor(t){ps(this,"daemonId");ps(this,"screenshotIdeType",null);this.daemonId=t}get hasCommandChannel(){return(rn==null?void 0:rn.readyState)===WebSocket.OPEN}get connectionState(){return(rn==null?void 0:rn.readyState)===WebSocket.OPEN?"connected":"disconnected"}async sendCommand(t,r){return Fl(this.daemonId,t,r)}async sendInput(t,r){return Fl(this.daemonId,"cdp_remote_action",{action:t,params:r})}startScreenshots(t){if(this.screenshotIdeType=t||null,Ds)return;const r=async()=>{if(this.hasCommandChannel)try{const n=await Fl(this.daemonId,"screenshot",{width:1280});if(n!=null&&n.success&&(n!=null&&n.base64)){const i=await fetch(`data:image/jpeg;base64,${n.base64}`).then(s=>s.blob());Xh.forEach(s=>s(this.daemonId,i))}}catch{}};r(),Ds=setInterval(r,2e3)}stopScreenshots(t){Ds&&(clearInterval(Ds),Ds=null)}}let Xn=null;function $3(e){(!Xn||Xn.daemonId!==e)&&(Xn=new F3(e));try{const{connectionManager:t}=require("@adhdev/web-core"),r=t.get.bind(t);t.get=n=>n===e?Xn:r(n),t.getState=n=>n===e&&(Xn==null?void 0:Xn.connectionState)||"disconnected",t.onScreenshot=n=>(Xh.add(n),()=>{Xh.delete(n)})}catch{}}function H3({children:e}){const t=w.useRef($p()),r=$p();t.current=r;const[,n]=w.useState("disconnected"),i=w.useRef(null),s=w.useRef(),o=w.useRef(Fg),l=w.useRef(!0);return w.useEffect(()=>{l.current=!0;function a(){var u,d;if(!l.current||((u=i.current)==null?void 0:u.readyState)===WebSocket.OPEN||((d=i.current)==null?void 0:d.readyState)===WebSocket.CONNECTING)return;n("connecting"),console.log(`[Standalone WS] Connecting to ${zg}...`);let h;try{h=new WebSocket(zg)}catch(f){console.error("[Standalone WS] Failed to create WebSocket:",f),c();return}i.current=h,h.onopen=()=>{if(!l.current){h.close();return}n("connected"),o.current=Fg,console.log("[Standalone WS] Connected")},rn=h,h.onmessage=f=>{var m;try{const g=JSON.parse(f.data);if((g.type==="command_result"||g.type==="error")&&g.requestId){const x=wa.get(g.requestId);x&&(wa.delete(g.requestId),g.type==="error"?x.reject(new Error(((m=g.data)==null?void 0:m.message)||"Command failed")):x.resolve(g.data));return}if(g.type==="status"||g.type==="initial_state"){const x=g.data;if(!x)return;const{injectEntries:_,markLoaded:v}=t.current,y=[],E=x.id||"standalone";$3(E),y.push({id:E,type:"adhdev-daemon",status:"online",daemonMode:!0,machine:{hostname:x.hostname,platform:x.platform,...x.system||{}},system:x.system||null,timestamp:x.timestamp,cdpConnected:x.cdpConnected,detectedIdes:x.detectedIdes||[],availableProviders:x.availableProviders||[],managedIdeIds:(x.ides||[]).map(N=>N.id),managedCliIds:(x.clis||[]).map(N=>N.id)});for(const N of x.ides||[])y.push({...N,daemonId:x.id||"standalone",status:N.cdpConnected?"online":"detected"});for(const N of x.clis||[])y.push({...N,daemonId:x.id||"standalone",status:N.isRunning?"running":"stopped"});y.length>0&&_(y),v()}}catch(g){console.error("[Standalone WS] Parse error:",g)}},h.onclose=()=>{l.current&&(n("disconnected"),i.current=null,c())},h.onerror=f=>{console.warn("[Standalone WS] Error, will reconnect:",f)}}function c(){if(!l.current)return;clearTimeout(s.current);const h=o.current;console.log(`[Standalone WS] Reconnecting in ${h}ms...`),s.current=setTimeout(()=>{o.current=Math.min(o.current*1.5,j3),a()},h)}return a(),()=>{l.current=!1,clearTimeout(s.current),i.current&&(i.current.onclose=null,i.current.close(),i.current=null,rn=null)}},[]),p.jsx(p.Fragment,{children:e})}function W3({children:e}){return p.jsx(Xw,{children:p.jsx(H3,{children:e})})}const U3=[{id:"dashboard",path:"/dashboard",icon:"🌊",label:"Dashboard"},{id:"machine",path:"/machine",icon:"🐇",label:"Burrow"}];function K3({children:e}){const t=cs(),r=Mo(),[n,i]=w.useState(!1),[s,o]=w.useState(()=>{try{return localStorage.getItem("sidebar-collapsed")==="1"}catch{return!1}}),l=c=>{t(c),i(!1)},a=()=>{o(c=>{const h=!c;try{localStorage.setItem("sidebar-collapsed",h?"1":"0")}catch{}return h})};return p.jsxs("div",{className:`app-layout${n?" mobile-menu-open":""}${s?" sidebar-collapsed":""}`,children:[p.jsxs("button",{type:"button",className:"mobile-menu-btn","aria-label":"Open menu",onClick:()=>i(!0),children:[p.jsx("span",{className:"mobile-menu-icon"}),p.jsx("span",{className:"mobile-menu-icon"}),p.jsx("span",{className:"mobile-menu-icon"})]}),n&&p.jsx("div",{className:"sidebar-overlay",role:"button",tabIndex:0,"aria-label":"Close menu",onClick:()=>i(!1),onKeyDown:c=>c.key==="Escape"&&i(!1)}),p.jsxs("aside",{className:`sidebar ${n?"sidebar-open":""}`,children:[p.jsxs("div",{className:"sidebar-header",children:[p.jsxs("div",{className:"sidebar-logo",style:{justifyContent:s?"center":void 0,gap:s?0:void 0},children:[p.jsx("img",{src:"/otter-logo.png",alt:"ADHDev",style:{width:28,height:28}}),!s&&p.jsx("span",{children:"ADHDev"})]}),p.jsx("button",{type:"button",className:"sidebar-close-btn","aria-label":"Close menu",onClick:()=>i(!1),children:"✕"})]}),p.jsx("nav",{className:"sidebar-nav",children:U3.map(c=>p.jsxs("div",{className:`nav-item${r.pathname===c.path?" active":""}`,id:`nav-${c.id}`,onClick:()=>l(c.path),title:s?c.label:void 0,style:{cursor:"pointer",justifyContent:s?"center":void 0,padding:s?"10px 0":void 0},children:[p.jsx("span",{className:"nav-icon",children:c.icon}),!s&&c.label]},c.id))}),p.jsxs("div",{style:{borderTop:"1px solid var(--border-subtle)",paddingTop:16,marginTop:"auto"},children:[!s&&p.jsxs("div",{style:{padding:"8px 12px",fontSize:12,color:"var(--text-muted)"},children:["Selfhost v","0.5.3"]}),p.jsxs("div",{className:"nav-item",onClick:a,title:s?"Expand sidebar":"Collapse sidebar",style:{cursor:"pointer",justifyContent:s?"center":void 0,padding:s?"10px 0":void 0},children:[p.jsx("span",{className:"nav-icon",style:{fontSize:16},children:s?"›":"‹"}),!s&&p.jsx("span",{style:{fontSize:12},children:"Collapse"})]})]})]}),p.jsx("main",{className:"main-content",style:{position:"relative"},children:p.jsx("div",{className:"main-content-inner",children:e})})]})}function $g(){const{ides:e}=y0(),t=e.find(r=>{var n;return r.daemonMode||((n=r.id)==null?void 0:n.startsWith("standalone"))});return t?p.jsx(Ll,{to:`/machines/${t.id}`,replace:!0}):e.length>0?p.jsx(Ll,{to:`/machines/${e[0].id}`,replace:!0}):p.jsx(Ll,{to:"/dashboard",replace:!0})}function V3(){return p.jsx(Vw,{children:p.jsx(W3,{children:p.jsx(Jw,{value:{sendCommand:Fl,sendData:()=>!1},children:p.jsx(K3,{children:p.jsxs(Hw,{children:[p.jsx(Zn,{path:"/dashboard",element:p.jsx(M3,{})}),p.jsx(Zn,{path:"/ide/:id",element:p.jsx(A3,{})}),p.jsx(Zn,{path:"/machine",element:p.jsx($g,{})}),p.jsx(Zn,{path:"/machines/:id",element:p.jsx(B3,{})}),p.jsx(Zn,{path:"/machines",element:p.jsx($g,{})}),p.jsx(Zn,{path:"*",element:p.jsx(Ll,{to:"/dashboard",replace:!0})})]})})})})})}n0(document.getElementById("root")).render(p.jsx(w.StrictMode,{children:p.jsx(V3,{})}));
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2014 The xterm.js authors. All rights reserved.
|
|
3
|
+
* Copyright (c) 2012-2013, Christopher Jeffrey (MIT License)
|
|
4
|
+
* https://github.com/chjj/term.js
|
|
5
|
+
* @license MIT
|
|
6
|
+
*
|
|
7
|
+
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
8
|
+
* of this software and associated documentation files (the "Software"), to deal
|
|
9
|
+
* in the Software without restriction, including without limitation the rights
|
|
10
|
+
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
11
|
+
* copies of the Software, and to permit persons to whom the Software is
|
|
12
|
+
* furnished to do so, subject to the following conditions:
|
|
13
|
+
*
|
|
14
|
+
* The above copyright notice and this permission notice shall be included in
|
|
15
|
+
* all copies or substantial portions of the Software.
|
|
16
|
+
*
|
|
17
|
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
18
|
+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
19
|
+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
20
|
+
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
21
|
+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
22
|
+
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
23
|
+
* THE SOFTWARE.
|
|
24
|
+
*
|
|
25
|
+
* Originally forked from (with the author's permission):
|
|
26
|
+
* Fabrice Bellard's javascript vt100 for jslinux:
|
|
27
|
+
* http://bellard.org/jslinux/
|
|
28
|
+
* Copyright (c) 2011 Fabrice Bellard
|
|
29
|
+
* The original design remains. The terminal itself
|
|
30
|
+
* has been extended to include xterm CSI codes, among
|
|
31
|
+
* other features.
|
|
32
|
+
*/.xterm{cursor:text;position:relative;user-select:none;-ms-user-select:none;-webkit-user-select:none}.xterm.focus,.xterm:focus{outline:none}.xterm .xterm-helpers{position:absolute;top:0;z-index:5}.xterm .xterm-helper-textarea{padding:0;border:0;margin:0;position:absolute;opacity:0;left:-9999em;top:0;width:0;height:0;z-index:-5;white-space:nowrap;overflow:hidden;resize:none}.xterm .composition-view{background:#000;color:#fff;display:none;position:absolute;white-space:nowrap;z-index:1}.xterm .composition-view.active{display:block}.xterm .xterm-viewport{background-color:#000;overflow-y:scroll;cursor:default;position:absolute;right:0;left:0;top:0;bottom:0}.xterm .xterm-screen{position:relative}.xterm .xterm-screen canvas{position:absolute;left:0;top:0}.xterm-char-measure-element{display:inline-block;visibility:hidden;position:absolute;top:0;left:-9999em;line-height:normal}.xterm.enable-mouse-events{cursor:default}.xterm.xterm-cursor-pointer,.xterm .xterm-cursor-pointer{cursor:pointer}.xterm.column-select.focus{cursor:crosshair}.xterm .xterm-accessibility:not(.debug),.xterm .xterm-message{position:absolute;left:0;top:0;bottom:0;right:0;z-index:10;color:transparent;pointer-events:none}.xterm .xterm-accessibility-tree:not(.debug) *::selection{color:transparent}.xterm .xterm-accessibility-tree{font-family:monospace;-webkit-user-select:text;user-select:text;white-space:pre}.xterm .xterm-accessibility-tree>div{transform-origin:left;width:fit-content}.xterm .live-region{position:absolute;left:-9999px;width:1px;height:1px;overflow:hidden}.xterm-dim{opacity:1!important}.xterm-underline-1{text-decoration:underline}.xterm-underline-2{text-decoration:double underline}.xterm-underline-3{text-decoration:wavy underline}.xterm-underline-4{text-decoration:dotted underline}.xterm-underline-5{text-decoration:dashed underline}.xterm-overline{text-decoration:overline}.xterm-overline.xterm-underline-1{text-decoration:overline underline}.xterm-overline.xterm-underline-2{text-decoration:overline double underline}.xterm-overline.xterm-underline-3{text-decoration:overline wavy underline}.xterm-overline.xterm-underline-4{text-decoration:overline dotted underline}.xterm-overline.xterm-underline-5{text-decoration:overline dashed underline}.xterm-strikethrough{text-decoration:line-through}.xterm-screen .xterm-decoration-container .xterm-decoration{z-index:6;position:absolute}.xterm-screen .xterm-decoration-container .xterm-decoration.xterm-decoration-top-layer{z-index:7}.xterm-decoration-overview-ruler{z-index:8;position:absolute;top:0;right:0;pointer-events:none}.xterm-decoration-top{z-index:2;position:relative}.xterm .xterm-scrollable-element>.scrollbar{cursor:default}.xterm .xterm-scrollable-element>.scrollbar>.scra{cursor:pointer;font-size:11px!important}.xterm .xterm-scrollable-element>.visible{opacity:1;background:#0000;transition:opacity .1s linear;z-index:11}.xterm .xterm-scrollable-element>.invisible{opacity:0;pointer-events:none}.xterm .xterm-scrollable-element>.invisible.fade{transition:opacity .8s linear}.xterm .xterm-scrollable-element>.shadow{position:absolute;display:none}.xterm .xterm-scrollable-element>.shadow.top{display:block;top:0;left:3px;height:3px;width:100%;box-shadow:var(--vscode-scrollbar-shadow, #000) 0 6px 6px -6px inset}.xterm .xterm-scrollable-element>.shadow.left{display:block;top:3px;left:0;height:100%;width:3px;box-shadow:var(--vscode-scrollbar-shadow, #000) 6px 0 6px -6px inset}.xterm .xterm-scrollable-element>.shadow.top-left-corner{display:block;top:0;left:0;height:3px;width:3px}.xterm .xterm-scrollable-element>.shadow.top.left{box-shadow:var(--vscode-scrollbar-shadow, #000) 6px 0 6px -6px inset}.ide-page{display:flex;flex-direction:column;height:100%;min-height:0;background:var(--bg-primary);color:var(--text-primary);overflow:hidden}.ide-empty{display:flex;align-items:center;justify-content:center;height:100%;color:var(--text-muted);font-size:14px}.ide-header{display:flex;align-items:center;justify-content:space-between;padding:10px 20px;border-bottom:1px solid var(--border-subtle);background:var(--surface-primary);flex-shrink:0;z-index:10}.ide-header-left{display:flex;align-items:center;gap:12px}.ide-header-right{display:flex;align-items:center;gap:10px}.ide-title{display:flex;align-items:baseline;gap:8px}.ide-name{font-weight:800;font-size:15px;letter-spacing:.02em}.ide-workspace{font-size:12px;font-weight:500;color:var(--text-secondary);opacity:.7;max-width:160px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ide-machine-label{font-size:9px;font-weight:600;color:var(--text-muted);background:var(--bg-secondary);padding:2px 8px;border-radius:10px;letter-spacing:.03em;white-space:nowrap}.ide-badge{font-size:9px;font-weight:800;letter-spacing:.08em;color:var(--accent-primary);background:#6366f11a;padding:2px 8px;border-radius:6px}.ide-status-pill{display:flex;align-items:center;gap:5px;padding:3px 10px;background:var(--bg-secondary);border-radius:20px;border:1px solid var(--border-subtle)}.ide-dot{width:6px;height:6px;border-radius:50%;transition:background .3s}.ide-dot.online{background:var(--status-online);box-shadow:0 0 8px var(--status-online)}.ide-dot.connecting{background:#fbbf24;animation:pulse-dot 1.5s ease-in-out infinite}.ide-status-text{font-size:9px;font-weight:700;letter-spacing:.05em;text-transform:uppercase}.ide-view-toggle{display:flex;background:var(--bg-secondary);border-radius:10px;border:1px solid var(--border-subtle);overflow:hidden}.ide-view-btn{padding:6px 12px;background:transparent;border:none;color:var(--text-muted);font-size:14px;cursor:pointer;transition:all .15s}.ide-view-btn.active{background:var(--surface-primary);color:var(--accent-primary);box-shadow:0 0 0 1px var(--accent-primary)}.ide-view-btn:hover:not(.active){background:var(--bg-glass-hover)}.ide-back-btn{padding:6px 14px;font-size:12px;font-weight:700;background:var(--accent-primary);color:#fff;border:none;border-radius:8px;cursor:pointer;transition:opacity .15s}.ide-back-btn:hover{opacity:.85}.ide-content{flex:1;display:flex;min-height:0;overflow:hidden}.ide-chat-panel{width:420px;min-width:0;display:flex;flex-direction:column;border-right:1px solid var(--border-subtle);background:var(--surface-secondary);transition:flex .3s ease,width .3s ease,opacity .25s ease,min-width .3s ease;opacity:1;overflow:hidden}.ide-chat-panel.hidden{flex:0!important;width:0!important;min-width:0!important;opacity:0;border-right:none;pointer-events:none;overflow:hidden}.ide-chat-panel.full{width:100%;max-width:720px;margin:0 auto;border-right:none}.ide-chat-tabs{display:flex;border-bottom:1px solid var(--border-subtle);background:var(--bg-secondary);flex-shrink:0}.ide-chat-tab{flex:1;padding:10px 16px;border:none;border-bottom:2px solid transparent;background:transparent;color:var(--text-muted);font-size:11px;font-weight:700;cursor:pointer;letter-spacing:.04em;transition:all .15s}.ide-chat-tab.active{color:var(--text-primary);border-bottom-color:var(--accent-primary);background:var(--surface-primary)}.ide-chat-tab.ext.active{border-bottom-color:#22d3ee}.ide-ext-badge{display:inline-flex;align-items:center;justify-content:center;min-width:18px;height:18px;padding:0 5px;border-radius:9px;background:#22d3ee26;color:#22d3ee;font-size:10px;font-weight:700;margin-left:6px}.ide-chat-header{padding:14px 18px 10px;border-bottom:1px solid var(--border-subtle);background:var(--surface-primary);flex-shrink:0}.ide-chat-header-top{display:flex;justify-content:space-between;align-items:center;margin-bottom:4px}.ide-chat-header-info{display:flex;align-items:center;gap:10px}.ide-chat-label{font-size:10px;font-weight:800;letter-spacing:.06em;color:var(--text-muted)}.ide-chat-status{font-size:10px;font-weight:600;color:var(--status-online)}.ide-chat-header-actions{display:flex;gap:6px;align-items:center}.ide-btn-icon{width:28px;height:28px;display:flex;align-items:center;justify-content:center;background:var(--bg-secondary);border:1px solid var(--border-subtle);border-radius:8px;font-size:12px;cursor:pointer;transition:background .15s}.ide-btn-icon:hover{background:var(--bg-glass-hover)}.ide-btn-primary-sm{padding:4px 10px;font-size:11px;font-weight:700;background:var(--accent-primary);color:#fff;border:none;border-radius:8px;cursor:pointer;transition:opacity .15s}.ide-btn-primary-sm:disabled{opacity:.5;cursor:not-allowed}.ide-chat-title{font-size:13px;font-weight:700;color:var(--text-primary);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ide-history{border-bottom:1px solid var(--border-subtle);flex-shrink:0}.ide-history-header{display:flex;justify-content:space-between;align-items:center;padding:8px 18px;font-size:10px;font-weight:700;color:var(--text-muted);cursor:pointer;background:var(--surface-tertiary);transition:background .15s}.ide-history-header:hover{background:var(--bg-glass-hover)}.ide-history-toggle{font-size:8px;opacity:.6}.ide-history-list{max-height:120px;overflow:hidden;transition:max-height .25s ease}.ide-history-list.expanded{max-height:300px;overflow-y:auto}.ide-history-item{padding:8px 18px;font-size:12px;font-weight:500;cursor:pointer;border-bottom:1px solid var(--border-subtle);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;transition:background .1s}.ide-history-item:hover{background:var(--bg-glass-hover)}.ide-history-item.active{color:var(--accent-primary-light);border-left:3px solid var(--accent-primary);background:#6366f10f}.ide-approval{padding:14px 18px;background:linear-gradient(135deg,#f59e0b1f,#d9770614);border-bottom:1px solid rgba(245,158,11,.2);flex-shrink:0;animation:slide-down .2s ease-out}.ide-approval-label{font-size:11px;font-weight:800;color:#f59e0b;margin-bottom:8px;letter-spacing:.03em}.ide-approval-msg{font-size:12px;line-height:1.5;color:var(--text-primary);margin-bottom:10px;white-space:pre-wrap;word-break:break-word;max-height:80px;overflow:hidden}.ide-approval-buttons{display:flex;gap:8px;flex-wrap:wrap}.ide-approval-btn{flex:1;min-width:80px;padding:8px 14px;border:none;border-radius:8px;font-weight:700;font-size:12px;cursor:pointer;background:var(--surface-tertiary);color:var(--text-primary);transition:all .15s}.ide-approval-btn:hover{filter:brightness(1.1)}.ide-approval-btn.primary{background:var(--status-online);color:#fff}.ide-chat-messages{flex:1;display:flex;flex-direction:column;min-height:0;overflow:hidden}.ide-chat-empty{text-align:center;margin-top:80px;display:flex;flex-direction:column;align-items:center;gap:12px}.ide-chat-empty-icon{font-size:36px;opacity:.12}.ide-chat-empty-text{opacity:.2;font-size:12px;font-weight:600}.ide-chat-empty-bar{width:32px;height:3px;border-radius:2px;background:linear-gradient(90deg,transparent,var(--accent-primary),transparent);animation:shimmer 2s ease-in-out infinite}.ide-chat-input-wrap{border-top:1px solid var(--border-subtle);background:var(--surface-primary);flex-shrink:0}.ide-chat-input-row{display:flex;gap:10px;align-items:center;padding:10px 18px 16px}.ide-chat-input{flex:1;height:40px;padding:0 16px;background:var(--bg-secondary);border:1px solid var(--border-subtle);border-radius:20px;color:var(--text-primary);font-size:14px;outline:none;transition:border-color .2s}.ide-chat-input:focus{border-color:var(--accent-primary)}.ide-btn-send{width:40px;height:40px;border-radius:50%;background:var(--bg-secondary);color:var(--text-muted);border:none;cursor:default;display:flex;align-items:center;justify-content:center;flex-shrink:0;transition:all .3s ease}.ide-btn-send:not(:disabled){background:var(--accent-primary);color:#fff;cursor:pointer}.ide-btn-send:disabled{opacity:1}.ide-btn-send:hover:not(:disabled){opacity:.9}.ide-model-bar{display:flex;align-items:center;gap:6px;padding:8px 18px 0;flex-wrap:wrap}.ide-model-agent{font-size:9px;font-weight:700;text-transform:uppercase;color:var(--accent-primary);opacity:.7;letter-spacing:.03em}.ide-model-sep{color:var(--border-subtle);font-size:10px}.ide-chip-wrap{position:relative}.ide-chip{display:inline-flex;align-items:center;gap:4px;padding:3px 10px;border-radius:12px;font-size:10px;font-weight:500;cursor:pointer;border:1px solid transparent;background:var(--surface-tertiary);color:var(--text-secondary);white-space:nowrap;max-width:160px;overflow:hidden;text-overflow:ellipsis;transition:all .15s}.ide-chip.open{border-color:#6366f159}.ide-chip:hover{background:var(--bg-glass-hover)}.ide-chip-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:59}.ide-chip-dropdown{position:absolute;bottom:100%;left:0;z-index:60;background:var(--surface-primary);border:1px solid var(--border-subtle);border-radius:10px;margin-bottom:4px;max-height:220px;overflow-y:auto;min-width:160px;box-shadow:0 -4px 20px #00000059;animation:slide-up .12s ease-out}.ide-chip-dropdown-title{padding:6px 12px;font-size:9px;font-weight:700;color:var(--text-muted);letter-spacing:.05em;border-bottom:1px solid var(--border-subtle)}.ide-chip-option{padding:7px 12px;font-size:11px;cursor:pointer;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:var(--text-secondary);border-left:2px solid transparent;transition:background .1s}.ide-chip-option:hover{background:#6366f114}.ide-chip-option.selected{color:var(--accent-primary);font-weight:600;background:#6366f11a;border-left-color:var(--accent-primary)}.ide-remote-panel{flex:1;display:flex;flex-direction:column;background:#000;min-width:0;transition:flex .3s ease,opacity .25s ease;opacity:1;overflow:hidden}.ide-remote-panel.hidden{flex:0!important;opacity:0;pointer-events:none;overflow:hidden}.ide-remote-panel.full{flex:1}.ide-toasts{position:fixed;top:16px;right:16px;z-index:9999;display:flex;flex-direction:column;gap:8px;pointer-events:none}.ide-toast{padding:10px 18px;border-radius:12px;font-size:13px;font-weight:600;-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);box-shadow:0 8px 32px #0000004d;pointer-events:auto;cursor:pointer;animation:toast-in .25s ease-out;max-width:360px}.ide-toast.success{background:#10b981eb;color:#fff}.ide-toast.warning{background:#f59e0beb;color:#fff}.ide-toast.info{background:#6366f1eb;color:#fff}@keyframes shimmer{0%,to{opacity:.2}50%{opacity:.6}}@keyframes pulse-dot{0%,to{opacity:.6}50%{opacity:1}}@keyframes toast-in{0%{opacity:0;transform:translate(40px)}to{opacity:1;transform:translate(0)}}@keyframes slide-up{0%{opacity:0;transform:translateY(6px)}to{opacity:1;transform:translateY(0)}}@keyframes slide-down{0%{opacity:0;transform:translateY(-8px)}to{opacity:1;transform:translateY(0)}}@media (max-width: 768px){.ide-page{height:100%;height:100dvh}.ide-header{padding:8px 12px 8px 56px;min-height:48px;gap:8px}.ide-header-left{gap:8px;min-width:0;flex:1}.ide-name{font-size:13px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:100px}.ide-workspace,.ide-machine-label,.ide-badge{display:none}.ide-status-pill{padding:2px 8px}.ide-header-right{gap:6px;flex-shrink:0}.ide-view-btn{padding:5px 10px;font-size:13px}.ide-back-btn{padding:5px 10px;font-size:11px}.ide-content{flex-direction:column}.ide-chat-panel{width:100%;border-right:none;flex:1;min-height:0;order:2}.ide-chat-panel.full{max-width:100%}.ide-remote-panel{flex:1;min-height:0;order:1}.ide-remote-panel.full{flex:1}.ide-chat-input-row{padding:8px 12px 12px}.ide-chat-input{height:36px;font-size:13px}.ide-toasts{top:auto;bottom:16px;right:12px;left:12px}.ide-toast{max-width:100%}}@media (min-width: 769px){.ide-content{flex-direction:row}}/*! tailwindcss v4.2.2 | MIT License | https://tailwindcss.com */@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-border-style:solid;--tw-gradient-position:initial;--tw-gradient-from:#0000;--tw-gradient-via:#0000;--tw-gradient-to:#0000;--tw-gradient-stops:initial;--tw-gradient-via-stops:initial;--tw-gradient-from-position:0%;--tw-gradient-via-position:50%;--tw-gradient-to-position:100%;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-duration:initial;--tw-ease:initial}}}@layer theme{:root,:host{--font-sans:"Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;--font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--color-red-400:oklch(70.4% .191 22.216);--color-red-500:oklch(63.7% .237 25.331);--color-orange-400:oklch(75% .183 55.934);--color-orange-500:oklch(70.5% .213 47.604);--color-orange-600:oklch(64.6% .222 41.116);--color-amber-500:oklch(76.9% .188 70.08);--color-amber-600:oklch(66.6% .179 58.318);--color-amber-700:oklch(55.5% .163 48.998);--color-yellow-300:oklch(90.5% .182 98.111);--color-yellow-400:oklch(85.2% .199 91.936);--color-yellow-500:oklch(79.5% .184 86.047);--color-green-300:oklch(87.1% .15 154.449);--color-green-400:oklch(79.2% .209 151.711);--color-green-500:oklch(72.3% .219 149.579);--color-emerald-500:oklch(69.6% .17 162.48);--color-blue-400:oklch(70.7% .165 254.624);--color-blue-500:oklch(62.3% .214 259.815);--color-indigo-400:oklch(67.3% .182 276.935);--color-indigo-500:oklch(58.5% .233 277.117);--color-violet-400:oklch(70.2% .183 293.541);--color-violet-500:oklch(60.6% .25 292.717);--color-violet-600:oklch(54.1% .281 293.009);--color-slate-100:oklch(96.8% .007 247.896);--color-slate-200:oklch(92.9% .013 255.508);--color-slate-400:oklch(70.4% .04 256.788);--color-slate-500:oklch(55.4% .046 257.417);--color-slate-600:oklch(44.6% .043 257.281);--color-slate-700:oklch(37.2% .044 257.287);--color-slate-800:oklch(27.9% .041 260.031);--color-slate-900:oklch(20.8% .042 265.755);--color-slate-950:oklch(12.9% .042 264.695);--color-neutral-500:oklch(55.6% 0 0);--color-neutral-950:oklch(14.5% 0 0);--color-black:#000;--color-white:#fff;--spacing:.25rem;--container-sm:24rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--text-base:1rem;--text-base--line-height: 1.5 ;--text-lg:1.125rem;--text-lg--line-height:calc(1.75 / 1.125);--text-xl:1.25rem;--text-xl--line-height:calc(1.75 / 1.25);--text-3xl:1.875rem;--text-3xl--line-height: 1.2 ;--text-5xl:3rem;--text-5xl--line-height:1;--font-weight-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--font-weight-extrabold:800;--font-weight-black:900;--tracking-tight:-.025em;--tracking-wide:.025em;--tracking-wider:.05em;--leading-tight:1.25;--leading-snug:1.375;--leading-relaxed:1.625;--radius-sm:6px;--radius-md:10px;--radius-lg:16px;--radius-xl:24px;--radius-2xl:1rem;--shadow-sm:0 1px 3px #0006;--shadow-md:0 4px 16px #00000073;--shadow-lg:0 8px 32px #0000008c;--ease-out:cubic-bezier(0, 0, .2, 1);--ease-in-out:cubic-bezier(.4, 0, .2, 1);--blur-sm:8px;--blur-lg:16px;--blur-xl:24px;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--color-bg-primary:#0a0e1a;--color-bg-secondary:#111827;--color-bg-card:#111827d9;--color-bg-glass:#ffffff0a;--color-bg-glass-hover:#ffffff14;--color-surface-primary:#0f1419;--color-surface-secondary:#151b24;--color-border-subtle:#ffffff14;--color-border-default:#ffffff1f;--color-border-accent:#6366f166;--color-text-primary:#f1f5f9;--color-text-secondary:#94a3b8;--color-text-muted:#64748b;--color-accent:#6366f1;--color-accent-light:#818cf8;--color-accent-secondary:#06b6d4;--color-status-online:#22c55e;--color-status-idle:#eab308;--color-status-busy:#f97316;--color-status-error:#ef4444;--color-status-offline:#64748b;--shadow-glow:0 0 24px #6366f12e, 0 0 48px #6366f10f;--transition-base:.2s cubic-bezier(.4, 0, .2, 1)}}@layer base{:root{--bg-primary:var(--color-bg-primary);--bg-secondary:var(--color-bg-secondary);--bg-card:var(--color-bg-card);--bg-glass:var(--color-bg-glass);--bg-glass-hover:var(--color-bg-glass-hover);--surface-primary:var(--color-surface-primary);--surface-secondary:var(--color-surface-secondary);--border-subtle:var(--color-border-subtle);--border-default:var(--color-border-default);--border-accent:var(--color-border-accent);--text-primary:var(--color-text-primary);--text-secondary:var(--color-text-secondary);--text-muted:var(--color-text-muted);--accent-primary:var(--color-accent);--accent-primary-light:var(--color-accent-light);--accent-secondary:var(--color-accent-secondary);--accent-gradient:linear-gradient(135deg, var(--color-accent), var(--color-accent-secondary));--status-online:var(--color-status-online);--status-idle:var(--color-status-idle);--status-busy:var(--color-status-busy);--status-error:var(--color-status-error);--status-offline:var(--color-status-offline);--font:var(--font-sans);--transition:var(--transition-base)}*,:before,:after{box-sizing:border-box;margin:0;padding:0}html,body,#root{height:100%;margin:0;padding:0;overflow:hidden}body{font-family:var(--font);background:var(--bg-primary);color:var(--text-primary);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;overscroll-behavior:none;line-height:1.6}a{color:var(--accent-primary-light);transition:color var(--transition);text-decoration:none}a:hover{color:var(--accent-secondary)}.chat-markdown{font-size:inherit;white-space:normal;word-break:break-word;overflow-wrap:anywhere;min-width:0;line-height:1.6}.chat-markdown p{margin:0 0 .6em}.chat-markdown p:first-child{margin-top:0}.chat-markdown p:last-child{margin-bottom:0}.chat-markdown strong{font-weight:700}.chat-markdown em{font-style:italic}.chat-markdown code{color:var(--accent-primary-light);background:#ffffff14;border:1px solid #ffffff0f;border-radius:5px;padding:.15em .4em;font-family:ui-monospace,Cascadia Code,Source Code Pro,Menlo,monospace;font-size:.88em}.chat-markdown pre{white-space:pre;word-break:normal;overflow-wrap:normal;background:#0006;border:1px solid #ffffff0f;border-radius:10px;margin:.6em 0;padding:14px 16px;font-size:.86em;line-height:1.65;overflow-x:auto;box-shadow:inset 0 1px #ffffff08}.chat-markdown pre code{color:inherit;background:0 0;border:none;padding:0}.chat-markdown ul,.chat-markdown ol{margin:.4em 0;padding-left:1.4em}.chat-markdown li{margin:.25em 0}.chat-markdown h1,.chat-markdown h2,.chat-markdown h3{letter-spacing:-.02em;margin:.75em 0 .35em;font-weight:700}.chat-markdown h1{font-size:1.25em}.chat-markdown h2{font-size:1.1em}.chat-markdown h3{font-size:1em}.chat-markdown blockquote{border-left:3px solid var(--border-default);color:var(--text-secondary);margin:.5em 0;padding-left:1em}.chat-markdown .markdown-alert{border-left:.25em solid var(--color-border-default,var(--border-default));color:inherit;margin:.5em 0 1em;padding:.5rem 1em}.chat-markdown .markdown-alert>:last-child{margin-bottom:0!important}.chat-markdown .markdown-alert .markdown-alert-title{align-items:center;font-size:14px;font-weight:500;line-height:1;display:flex}.chat-markdown .markdown-alert .markdown-alert-title svg.octicon{fill:currentColor;margin-right:8px}.chat-markdown .markdown-alert-note{border-left-color:var(--accent-primary)}.chat-markdown .markdown-alert-note .markdown-alert-title{color:var(--accent-primary-light)}.chat-markdown .markdown-alert-tip{border-left-color:var(--status-online)}.chat-markdown .markdown-alert-tip .markdown-alert-title{color:var(--status-online)}.chat-markdown .markdown-alert-important{border-left-color:#a371f7}.chat-markdown .markdown-alert-important .markdown-alert-title{color:#a371f7}.chat-markdown .markdown-alert-warning{border-left-color:var(--status-idle)}.chat-markdown .markdown-alert-warning .markdown-alert-title{color:var(--status-idle)}.chat-markdown .markdown-alert-caution{border-left-color:var(--status-error)}.chat-markdown .markdown-alert-caution .markdown-alert-title{color:var(--status-error)}.chat-markdown table{border-collapse:separate;border-spacing:0;border:1px solid var(--border-subtle);border-radius:8px;width:100%;margin:.6em 0;font-size:.92em;overflow:hidden}.chat-markdown th,.chat-markdown td{border-bottom:1px solid var(--border-subtle);text-align:left;border-right:1px solid #ffffff0a;padding:.5em .75em}.chat-markdown th{text-transform:uppercase;letter-spacing:.04em;color:var(--text-secondary);background:#ffffff0f;font-size:.88em;font-weight:600}.chat-markdown tr:last-child td{border-bottom:none}.chat-markdown th:last-child,.chat-markdown td:last-child{border-right:none}.chat-markdown tbody tr:hover{background:#ffffff05}.app-layout{height:100%;min-height:0;display:flex;overflow:hidden}.sidebar{background:var(--bg-secondary);border-right:1px solid var(--border-subtle);z-index:30;flex-direction:column;width:260px;padding:24px 16px;display:flex;position:fixed;top:0;bottom:0;left:0;overflow:hidden auto}.sidebar-logo{border-bottom:1px solid var(--border-subtle);align-items:center;gap:10px;margin-bottom:24px;padding:0 8px 24px;display:flex}.sidebar-logo span{background:var(--accent-gradient);-webkit-text-fill-color:transparent;-webkit-background-clip:text;background-clip:text;font-size:20px;font-weight:700}.sidebar-nav{flex-direction:column;flex:1;gap:4px;display:flex}.nav-item{border-radius:var(--radius-md);color:var(--text-secondary);cursor:pointer;transition:all var(--transition);border:1px solid #0000;align-items:center;gap:10px;padding:10px 12px;font-size:14px;font-weight:500;display:flex}.nav-item:hover{background:var(--bg-glass-hover);color:var(--text-primary)}.nav-item.active{color:var(--accent-primary-light);border-color:var(--border-accent);box-shadow:inset 3px 0 0 var(--accent-primary),0 0 12px #6366f10f;background:#6366f11a}.nav-icon{text-align:center;width:22px;font-size:18px}.sidebar{transition:width .2s,padding .2s}.main-content{transition:margin-left .2s}.sidebar-collapsed .sidebar{overflow:hidden;width:56px!important;padding:16px 8px!important}.sidebar-collapsed .main-content{margin-left:56px}@media (max-width:768px){.sidebar-collapsed .main-content{margin-left:0}}.dashboard-header{box-sizing:border-box;border-bottom:1px solid var(--border-subtle);background:var(--surface-primary);justify-content:space-between;align-items:center;padding:16px 24px;animation:.3s ease-out forwards fadeIn;display:flex}.header-title{color:var(--text-primary);letter-spacing:-.02em;align-items:center;gap:10px;margin:0;font-size:18px;font-weight:700;display:flex}.header-count-mobile{display:none}.header-subtitle{color:var(--text-muted);margin:4px 0 0;font-size:13px;display:flex}.page-content{flex:1;padding:20px 24px;animation:.4s ease-out forwards fadeIn;overflow-y:auto}.main-content{flex-direction:column;flex:1;min-height:0;margin-left:260px;padding:0;display:flex;overflow:hidden}.main-content:has(.page-dashboard) .main-content-inner,.main-content:has(.page-ide) .main-content-inner{overflow:hidden}.main-content-inner{flex-direction:column;flex:1;min-height:0;display:flex;overflow:auto}.page-header{margin-bottom:32px}.page-header h1{letter-spacing:-.02em;margin-bottom:6px;font-size:28px;font-weight:700}.page-header p{color:var(--text-secondary);font-size:15px}.card{background:var(--bg-card);border:1px solid var(--border-subtle);border-radius:var(--radius-lg);-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);transition:all var(--transition);padding:24px;box-shadow:0 2px 8px #0003,inset 0 1px #ffffff0a}.card:hover{border-color:var(--border-default);box-shadow:var(--shadow-glow),0 4px 16px #0000004d,inset 0 1px #ffffff0a;transform:translateY(-1px)}.card-header{justify-content:space-between;align-items:center;margin-bottom:20px;display:flex}.card-title{letter-spacing:-.01em;font-size:16px;font-weight:600}.btn{border-radius:var(--radius-md);font-size:14px;font-weight:600;font-family:var(--font);cursor:pointer;transition:all var(--transition);letter-spacing:-.01em;border:1px solid #0000;align-items:center;gap:8px;padding:10px 20px;display:inline-flex}.btn-primary{background:var(--accent-gradient);color:#fff;border:none;box-shadow:0 2px 8px #6366f14d}.btn-primary:hover{transform:translateY(-1px);box-shadow:0 4px 16px #6366f166}.btn-secondary{background:var(--bg-glass);color:var(--text-primary);border:1px solid var(--border-default)}.btn-secondary:hover{background:var(--bg-glass-hover);border-color:var(--border-accent)}.btn-sm{padding:6px 14px;font-size:13px}.empty-state{text-align:center;color:var(--text-muted);padding:60px 20px}.login-page{background:var(--bg-primary);justify-content:center;align-items:center;min-height:100vh;display:flex;position:relative;overflow:hidden}.login-page:before{content:"";pointer-events:none;background:radial-gradient(circle,#6366f126,#0000 60%);width:600px;height:600px;position:absolute;top:-200px;right:-100px}.login-page:after{content:"";pointer-events:none;background:radial-gradient(circle,#06b6d41a,#0000 60%);width:500px;height:500px;position:absolute;bottom:-150px;left:-100px}.login-card{background:var(--bg-card);border:1px solid var(--border-subtle);border-radius:var(--radius-xl);-webkit-backdrop-filter:blur(16px);backdrop-filter:blur(16px);width:100%;max-width:420px;box-shadow:var(--shadow-lg);z-index:1;padding:48px;position:relative}.login-card h1{text-align:center;background:var(--accent-gradient);-webkit-text-fill-color:transparent;-webkit-background-clip:text;background-clip:text;margin-bottom:8px;font-size:28px;font-weight:800}.login-card p{text-align:center;color:var(--text-secondary);margin-bottom:32px;font-size:15px}.login-btn{border-radius:var(--radius-md);width:100%;font-size:15px;font-weight:600;font-family:var(--font);cursor:pointer;transition:all var(--transition);border:1px solid var(--border-default);background:var(--bg-glass);color:var(--text-primary);justify-content:center;align-items:center;gap:10px;margin-bottom:12px;padding:14px;display:flex}.login-btn:hover{background:var(--bg-glass-hover);border-color:var(--border-accent);box-shadow:var(--shadow-md);transform:translateY(-1px)}.login-btn svg{width:20px;height:20px}@keyframes pulse-dot{0%,to{opacity:1}50%{opacity:.4}}@keyframes pulse{0%,to{opacity:1}50%{opacity:.3}}@keyframes fadeIn{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}.fade-in{animation:.3s ease-out fadeIn}.mobile-menu-btn{z-index:100;border-radius:var(--radius-sm);background:var(--bg-secondary);border:1px solid var(--border-subtle);width:36px;height:36px;color:var(--text-primary);cursor:pointer;box-shadow:var(--shadow-sm);flex-direction:column;justify-content:center;align-items:center;gap:4px;display:none;position:fixed;top:6px;left:12px}.sidebar-overlay{z-index:25;background:#00000080;display:none;position:fixed;top:0;right:0;bottom:0;left:0}.sidebar-header{border-bottom:1px solid var(--border-subtle);justify-content:space-between;align-items:center;margin-bottom:24px;padding:0 8px 24px;display:flex}.sidebar .sidebar-logo{border-bottom:none;margin-bottom:0;padding:0}.sidebar-close-btn{border-radius:var(--radius-sm);background:var(--bg-glass);border:1px solid var(--border-subtle);width:36px;height:36px;color:var(--text-primary);cursor:pointer;justify-content:center;align-items:center;font-size:18px;display:none}.mobile-menu-icon{background:currentColor;border-radius:1px;width:20px;height:2px;display:block}@media (max-width:768px){.mobile-menu-btn{display:flex}.sidebar{transition:transform .25s ease-out;transform:translate(-100%)}.sidebar.sidebar-open{transform:translate(0)}.sidebar-close-btn{display:flex}.sidebar-collapsed .sidebar-close-btn{display:none}.sidebar-overlay{display:block}.app-layout.mobile-menu-open .mobile-menu-btn{visibility:hidden}.main-content{margin-left:0;padding:0}.desktop-only{display:none!important}.page-dashboard{padding-top:0}.dashboard-header{box-sizing:border-box;min-height:48px;padding:8px 12px 8px 56px}.header-title{margin:0;font-size:14px}.header-subtitle{display:none!important}.header-count-mobile{display:inline!important}.dashboard-header .btn-sm{min-width:32px!important;min-height:32px!important;padding:4px 8px!important;font-size:11px!important}.page-content{padding:16px 12px}.page-header{margin-bottom:16px;padding-left:44px}.page-header h1{font-size:20px}.page-header p{font-size:13px}}.dashboard-agent-tabs{flex-shrink:0;min-height:72px}.dashboard-agent-tabs::-webkit-scrollbar{height:4px}.dashboard-agent-tabs::-webkit-scrollbar-thumb{background:var(--border-default);border-radius:4px}::-webkit-scrollbar{width:6px;height:6px}::-webkit-scrollbar-track{background:0 0}::-webkit-scrollbar-thumb{background:var(--border-default);border-radius:10px}::-webkit-scrollbar-thumb:hover{background:var(--text-muted)}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.agent-tab-working{animation:2s ease-in-out infinite tab-pulse;border-image:linear-gradient(135deg,#10b981,#06b6d4) 1!important}@keyframes tab-pulse{0%,to{box-shadow:0 0 #10b9814d}50%{box-shadow:0 0 20px 2px #10b98126}}.agent-tab-waiting{animation:1.5s ease-in-out infinite tab-pulse-warn;border-image:linear-gradient(135deg,#f59e0b,#ef4444) 1!important}@keyframes tab-pulse-warn{0%,to{box-shadow:0 0 #f59e0b4d}50%{box-shadow:0 0 20px 2px #f59e0b26}}.typing-indicator{align-items:center;gap:6px;padding:14px 20px;display:flex}.typing-indicator .dot{background:var(--accent-primary-light);border-radius:50%;width:8px;height:8px;animation:1.4s ease-in-out infinite typing-bounce}.typing-indicator .dot:nth-child(2){animation-delay:.2s}.typing-indicator .dot:nth-child(3){animation-delay:.4s}@keyframes typing-bounce{0%,80%,to{opacity:.4;transform:translateY(0)}40%{opacity:1;transform:translateY(-8px)}}.status-pill{letter-spacing:.04em;text-transform:uppercase;border-radius:10px;align-items:center;gap:4px;padding:2px 8px;font-size:9px;font-weight:700;display:inline-flex}.status-pill.idle{color:#94a3b8;background:#94a3b81a}.status-pill.working{color:#10b981;background:#10b98126}.tab-spinner{border:2px solid #10b98133;border-top-color:#10b981;border-radius:50%;flex-shrink:0;width:12px;height:12px;animation:.8s linear infinite spin}.status-pill.waiting{color:#f59e0b;background:#f59e0b26}.status-bar{border-top:1px solid var(--border-subtle);background:var(--bg-secondary);align-items:center;gap:8px;padding:6px 20px;font-size:11px;font-weight:600;transition:all .3s;display:flex}.status-bar.generating{color:#10b981;background:#10b9810f;border-top-color:#10b98133}.status-bar.waiting_approval{color:#f59e0b;background:#f59e0b0f;border-top-color:#f59e0b33}.status-bar.idle{color:var(--text-muted)}.status-bar .status-dot{border-radius:50%;flex-shrink:0;width:6px;height:6px}.status-bar.generating .status-dot{background:#10b981;animation:1.5s ease-in-out infinite pulse-dot}.status-bar.waiting_approval .status-dot{background:#f59e0b;animation:1s ease-in-out infinite pulse-dot}.status-bar.idle .status-dot{background:#64748b}.desktop-only{display:none}@media (min-width:769px){.desktop-only{display:inline}}.empty-dashboard{opacity:.6;flex-direction:column;flex:1;justify-content:center;align-items:center;gap:24px;padding:40px;display:flex}.empty-dashboard .glow-orb{background:radial-gradient(circle,#6366f133,#0000 70%);border-radius:50%;justify-content:center;align-items:center;width:120px;height:120px;font-size:48px;animation:3s ease-in-out infinite orb-float;display:flex}@keyframes orb-float{0%,to{transform:translateY(0)}50%{transform:translateY(-10px)}}@media (max-width:768px){.page-dashboard{flex:1;min-height:0}.dashboard-header{min-height:48px;padding:8px 12px 8px 56px}.dashboard-agent-tabs{scroll-snap-type:x mandatory;-webkit-overflow-scrolling:touch;gap:6px;min-height:60px;padding:8px}.dashboard-agent-tabs>div{scroll-snap-align:start;min-width:140px;max-width:180px;padding:10px 12px}.page-dashboard .chat-markdown{font-size:13px}.dashboard-input-area{padding-bottom:calc(12px + env(safe-area-inset-bottom,0px))}.status-bar{padding:4px 12px;font-size:10px}.page-dashboard .card.fade-in{border-radius:0;width:100%;max-width:100%;height:100%;max-height:100%}.page-dashboard [style*=aspectRatio]{max-height:100px;aspect-ratio:3!important}.dashboard-header button,.dashboard-header a{justify-content:center;align-items:center;min-width:32px;min-height:32px;display:flex}}@media (max-width:375px){.dashboard-header{padding:8px 8px 8px 52px}.dashboard-agent-tabs>div{min-width:120px;max-width:150px}}@media (display-mode:standalone){.landing-nav{display:none}body{-webkit-user-select:none;user-select:none;padding-top:env(safe-area-inset-top,0px)}.sidebar{padding-top:calc(24px + env(safe-area-inset-top,0px))}.mobile-menu-btn{top:calc(6px + env(safe-area-inset-top,0px))}.chat-markdown,.agent-chat-bubble{-webkit-user-select:text;user-select:text}}@media (hover:none){.feature-card:hover,.step:hover,.pricing-card:hover,.supported-item:hover{box-shadow:none!important;transform:none!important}.agent-chat-bubble:hover{transform:none!important}}@media (max-height:500px) and (max-width:900px){.dashboard-agent-tabs{min-height:52px!important}.status-bar{padding:2px 12px!important}}.machine-card{-webkit-backdrop-filter:blur(16px);backdrop-filter:blur(16px);background:#0f172a99;border:1px solid #8b5cf61f;border-radius:14px;transition:all .25s cubic-bezier(.4,0,.2,1);position:relative;overflow:hidden}.machine-card.offline{border-color:#ffffff0a}.machine-card:hover{border-color:#8b5cf640;box-shadow:0 4px 20px #8b5cf614}.machine-accent{background:linear-gradient(90deg,#8b5cf6,#6366f1 40%,#3b82f6);height:2px}.machine-accent.offline{background:#64748b33}.machine-btn{color:#94a3b8;cursor:pointer;font-size:11px;font-family:var(--font);background:#ffffff0a;border:1px solid #ffffff14;border-radius:6px;padding:4px 10px;transition:all .2s}.machine-btn:hover{background:#ffffff14;border-color:#ffffff26}.machine-btn-primary{color:#fff;cursor:pointer;font-size:12px;font-weight:600;font-family:var(--font);background:linear-gradient(135deg,#7c3aed,#6366f1);border:none;border-radius:8px;padding:8px 16px;transition:all .2s;box-shadow:0 2px 8px #7c3aed33}.machine-btn-primary:hover{transform:translateY(-1px);box-shadow:0 4px 16px #7c3aed4d}.machine-btn-back{color:#94a3b8;cursor:pointer;font-size:14px;font-family:var(--font);background:#ffffff0a;border:1px solid #ffffff14;border-radius:8px;padding:6px 12px;transition:all .2s}.machine-btn-back:hover{background:#ffffff14}.machine-input{color:#e2e8f0;font-size:12px;font-family:var(--font);background:#0f172a99;border:1px solid #ffffff14;border-radius:8px;outline:none;padding:8px 12px;transition:border-color .2s}.machine-input:focus{border-color:#8b5cf666}.p2p-overlay{z-index:10;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);background:#080c16d1;border-radius:14px;flex-direction:column;justify-content:center;align-items:center;gap:10px;animation:.3s ease-out fadeIn;display:flex;position:absolute;top:0;right:0;bottom:0;left:0}.machine-tabs{gap:2px;margin-top:14px;display:flex}.machine-tab{cursor:pointer;color:#64748b;font-size:13px;font-weight:500;font-family:var(--font);background:0 0;border:none;border-bottom:2px solid #0000;border-radius:8px 8px 0 0;padding:8px 16px;transition:all .2s}.machine-tab.active{color:#a78bfa;background:#8b5cf61f;border-bottom-color:#8b5cf6}.machine-tab:hover:not(.active){color:#94a3b8;background:#ffffff08}.machine-tab .tab-count{border-radius:10px;margin-left:6px;padding:1px 6px;font-size:10px}.machine-tab.active .tab-count{color:#c4b5fd;background:#8b5cf633}.machine-tab:not(.active) .tab-count{color:#64748b;background:#ffffff0a}@media (max-width:768px){.machine-card{border-radius:10px}.section-panel{padding:12px 14px}.machine-tabs{-webkit-overflow-scrolling:touch;overflow-x:auto}.machine-tab{white-space:nowrap;padding:6px 12px;font-size:12px}.machine-empty{padding:40px 20px}}.playground-panel{background:var(--bg-card);border:1px solid var(--border-accent);border-radius:var(--radius-lg);animation:.3s ease-out fadeIn;overflow:hidden}.playground-header{border-bottom:1px solid var(--border-subtle);background:#6366f10a;justify-content:space-between;align-items:center;padding:16px 20px;display:flex}.playground-header h3{align-items:center;gap:8px;margin:0;font-size:15px;font-weight:700;display:flex}.playground-body{padding:20px}.playground-presets{flex-wrap:wrap;gap:6px;margin-bottom:16px;display:flex}.preset-btn{cursor:pointer;border:1px solid var(--border-subtle);color:var(--text-secondary);font-size:12px;font-weight:500;font-family:var(--font);background:#ffffff08;border-radius:6px;padding:5px 12px;transition:all .15s}.preset-btn:hover{border-color:var(--accent-primary);color:var(--accent-primary);background:#6366f10f}.preset-btn.active{border-color:var(--accent-primary);color:var(--accent-primary);background:#6366f11a}.preset-method{opacity:.7;margin-right:4px;font-size:10px;font-weight:700}.playground-url-bar{gap:8px;margin-bottom:12px;display:flex}.playground-method-select{border:1px solid var(--border-subtle);cursor:pointer;width:100px;font-size:13px;font-weight:700;font-family:var(--font);background:#0000004d;border-radius:8px;outline:none;padding:10px 12px;transition:border-color .2s}.playground-method-select:focus{border-color:var(--accent-primary)}.playground-method-select.method-get{color:#22c55e}.playground-method-select.method-post{color:#3b82f6}.playground-method-select.method-patch{color:#f59e0b}.playground-method-select.method-delete{color:#ef4444}.playground-path-input{border:1px solid var(--border-subtle);color:var(--text-primary);box-sizing:border-box;background:#0000004d;border-radius:8px;outline:none;flex:1;padding:10px 14px;font-family:ui-monospace,monospace;font-size:13px;transition:border-color .2s}.playground-path-input:focus{border-color:var(--accent-primary)}.playground-send-btn{cursor:pointer;background:var(--accent-gradient);color:#fff;min-width:80px;font-size:13px;font-weight:700;font-family:var(--font);border:none;border-radius:8px;padding:10px 20px;transition:all .2s}.playground-send-btn:hover:not(:disabled){transform:translateY(-1px);box-shadow:0 4px 16px #6366f166}.playground-send-btn:disabled{color:var(--text-muted);cursor:wait;background:#64748b33}.playground-body-editor{border:1px solid var(--border-subtle);width:100%;color:var(--text-primary);resize:vertical;box-sizing:border-box;background:#0000004d;border-radius:8px;outline:none;min-height:100px;padding:12px 14px;font-family:ui-monospace,monospace;font-size:13px;line-height:1.5;transition:border-color .2s}.playground-body-editor:focus{border-color:var(--accent-primary)}.playground-response{border:1px solid var(--border-subtle);border-radius:10px;margin-top:16px;animation:.25s ease-out fadeIn;overflow:hidden}.playground-response-bar{border-bottom:1px solid var(--border-subtle);background:#0003;justify-content:space-between;align-items:center;padding:10px 14px;display:flex}.playground-response-status{align-items:center;gap:10px;display:flex}.status-dot{border-radius:50%;width:8px;height:8px;display:inline-block}.playground-response-body{color:var(--text-secondary);white-space:pre-wrap;word-break:break-all;background:#00000026;max-height:400px;margin:0;padding:14px;font-family:ui-monospace,monospace;font-size:12px;line-height:1.6;overflow:auto}.json-key{color:#818cf8}.json-string{color:#22c55e}.json-number{color:#f59e0b}.json-bool{color:#06b6d4}.json-null{color:#64748b;font-style:italic}.playground-toolbar{gap:6px;margin-top:8px;display:flex}.playground-tool-btn{cursor:pointer;border:1px solid var(--border-subtle);color:var(--text-muted);font-size:11px;font-family:var(--font);background:0 0;border-radius:6px;padding:4px 10px;transition:all .15s}.playground-tool-btn:hover{border-color:var(--accent-primary);color:var(--accent-primary-light);background:#6366f10f}.apikey-card{background:var(--bg-glass);border:1px solid var(--border-subtle);border-radius:14px;padding:18px 20px;transition:all .2s}.apikey-card:hover{border-color:var(--border-default);background:var(--bg-glass-hover)}.apikey-scope-tag{border-radius:6px;padding:3px 10px;font-size:11px;font-weight:500;display:inline-block}.apikey-created-banner{background:#22c55e14;border:1px solid #22c55e4d;border-radius:14px;margin-bottom:20px;padding:20px;animation:.3s ease-out fadeIn}.history-panel{border-top:1px solid var(--border-subtle);margin-top:16px;padding-top:12px}.history-item{cursor:pointer;color:var(--text-muted);border-radius:6px;align-items:center;gap:8px;padding:6px 10px;font-size:12px;transition:all .15s;display:flex}.history-item:hover{background:var(--bg-glass-hover);color:var(--text-secondary)}.history-method{text-align:center;border-radius:4px;min-width:36px;padding:2px 6px;font-size:10px;font-weight:700}.history-method.get{color:#22c55e;background:#22c55e26}.history-method.post{color:#3b82f6;background:#3b82f626}.history-method.patch{color:#f59e0b;background:#f59e0b26}.history-method.delete{color:#ef4444;background:#ef444426}@media (max-width:768px){.playground-url-bar{flex-direction:column}.playground-method-select{width:100%}.playground-presets{flex-wrap:nowrap;padding-bottom:4px;overflow-x:auto}}.admin-select{background:var(--bg-secondary);border:1px solid var(--border-subtle);color:var(--text-primary);border-radius:6px;padding:6px 10px;font-size:13px}}@layer components;@layer utilities{.pointer-events-auto{pointer-events:auto}.pointer-events-none{pointer-events:none}.visible{visibility:visible}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.inset-0{inset:calc(var(--spacing) * 0)}.start{inset-inline-start:var(--spacing)}.end{inset-inline-end:var(--spacing)}.top-0{top:calc(var(--spacing) * 0)}.top-2\.5{top:calc(var(--spacing) * 2.5)}.top-4{top:calc(var(--spacing) * 4)}.top-\[3px\]{top:3px}.right-0{right:calc(var(--spacing) * 0)}.right-2\.5{right:calc(var(--spacing) * 2.5)}.right-4{right:calc(var(--spacing) * 4)}.bottom-0{bottom:calc(var(--spacing) * 0)}.bottom-4{bottom:calc(var(--spacing) * 4)}.bottom-10{bottom:calc(var(--spacing) * 10)}.bottom-full{bottom:100%}.left-0{left:calc(var(--spacing) * 0)}.left-1\/2{left:50%}.z-10{z-index:10}.z-\[5\]{z-index:5}.z-\[59\]{z-index:59}.z-\[60\]{z-index:60}.z-\[1000\]{z-index:1000}.z-\[2000\]{z-index:2000}.z-\[9999\]{z-index:9999}.col-span-full{grid-column:1/-1}.container{width:100%}@media (min-width:40rem){.container{max-width:40rem}}@media (min-width:48rem){.container{max-width:48rem}}@media (min-width:64rem){.container{max-width:64rem}}@media (min-width:80rem){.container{max-width:80rem}}@media (min-width:96rem){.container{max-width:96rem}}.m-0{margin:calc(var(--spacing) * 0)}.mx-auto{margin-inline:auto}.mt-0\.5{margin-top:calc(var(--spacing) * .5)}.mt-1{margin-top:calc(var(--spacing) * 1)}.mt-1\.5{margin-top:calc(var(--spacing) * 1.5)}.mt-2{margin-top:calc(var(--spacing) * 2)}.mt-2\.5{margin-top:calc(var(--spacing) * 2.5)}.mt-3{margin-top:calc(var(--spacing) * 3)}.mt-4{margin-top:calc(var(--spacing) * 4)}.mt-5{margin-top:calc(var(--spacing) * 5)}.mt-16{margin-top:calc(var(--spacing) * 16)}.mt-px{margin-top:1px}.mr-1\.5{margin-right:calc(var(--spacing) * 1.5)}.mr-2{margin-right:calc(var(--spacing) * 2)}.mb-0{margin-bottom:calc(var(--spacing) * 0)}.mb-0\.5{margin-bottom:calc(var(--spacing) * .5)}.mb-1{margin-bottom:calc(var(--spacing) * 1)}.mb-1\.5{margin-bottom:calc(var(--spacing) * 1.5)}.mb-2{margin-bottom:calc(var(--spacing) * 2)}.mb-2\.5{margin-bottom:calc(var(--spacing) * 2.5)}.mb-3{margin-bottom:calc(var(--spacing) * 3)}.mb-3\.5{margin-bottom:calc(var(--spacing) * 3.5)}.mb-4{margin-bottom:calc(var(--spacing) * 4)}.mb-5{margin-bottom:calc(var(--spacing) * 5)}.ml-0\.5{margin-left:calc(var(--spacing) * .5)}.ml-1{margin-left:calc(var(--spacing) * 1)}.ml-1\.5{margin-left:calc(var(--spacing) * 1.5)}.ml-2{margin-left:calc(var(--spacing) * 2)}.ml-auto{margin-left:auto}.block{display:block}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.h-1{height:calc(var(--spacing) * 1)}.h-1\.5{height:calc(var(--spacing) * 1.5)}.h-2{height:calc(var(--spacing) * 2)}.h-4{height:calc(var(--spacing) * 4)}.h-5{height:calc(var(--spacing) * 5)}.h-7{height:calc(var(--spacing) * 7)}.h-8{height:calc(var(--spacing) * 8)}.h-9{height:calc(var(--spacing) * 9)}.h-10{height:calc(var(--spacing) * 10)}.h-12{height:calc(var(--spacing) * 12)}.h-\[5px\]{height:5px}.h-\[18px\]{height:18px}.h-\[22px\]{height:22px}.h-full{height:100%}.max-h-\[80vh\]{max-height:80vh}.max-h-\[200px\]{max-height:200px}.max-h-\[220px\]{max-height:220px}.max-h-\[500px\]{max-height:500px}.max-h-full{max-height:100%}.min-h-0{min-height:calc(var(--spacing) * 0)}.min-h-10{min-height:calc(var(--spacing) * 10)}.min-h-\[200px\]{min-height:200px}.w-1{width:calc(var(--spacing) * 1)}.w-1\.5{width:calc(var(--spacing) * 1.5)}.w-2{width:calc(var(--spacing) * 2)}.w-4{width:calc(var(--spacing) * 4)}.w-5{width:calc(var(--spacing) * 5)}.w-7{width:calc(var(--spacing) * 7)}.w-8{width:calc(var(--spacing) * 8)}.w-9{width:calc(var(--spacing) * 9)}.w-10{width:calc(var(--spacing) * 10)}.w-12{width:calc(var(--spacing) * 12)}.w-20{width:calc(var(--spacing) * 20)}.w-\[5px\]{width:5px}.w-\[90\%\]{width:90%}.w-\[120px\]{width:120px}.w-\[200px\]{width:200px}.w-\[220px\]{width:220px}.w-full{width:100%}.w-px{width:1px}.max-w-20{max-width:calc(var(--spacing) * 20)}.max-w-40{max-width:calc(var(--spacing) * 40)}.max-w-\[80\%\]{max-width:80%}.max-w-\[88\%\]{max-width:88%}.max-w-\[90\%\]{max-width:90%}.max-w-\[100px\]{max-width:100px}.max-w-\[200px\]{max-width:200px}.max-w-\[280px\]{max-width:280px}.max-w-\[360px\]{max-width:360px}.max-w-\[380px\]{max-width:380px}.max-w-\[500px\]{max-width:500px}.max-w-full{max-width:100%}.max-w-sm{max-width:var(--container-sm)}.min-w-0{min-width:calc(var(--spacing) * 0)}.min-w-7{min-width:calc(var(--spacing) * 7)}.min-w-9{min-width:calc(var(--spacing) * 9)}.min-w-40{min-width:calc(var(--spacing) * 40)}.min-w-\[32px\]{min-width:32px}.min-w-\[75px\]{min-width:75px}.min-w-\[120px\]{min-width:120px}.min-w-\[150px\]{min-width:150px}.min-w-\[200px\]{min-width:200px}.flex-1{flex:1}.shrink-0{flex-shrink:0}.border-collapse{border-collapse:collapse}.-translate-x-1\/2{--tw-translate-x: -50% ;translate:var(--tw-translate-x) var(--tw-translate-y)}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.animate-\[fadeIn_0\.3s_ease-out_forwards\]{animation:.3s ease-out forwards fadeIn}.animate-\[fadeIn_0\.3s_ease\]{animation:.3s fadeIn}.animate-\[p2p-pulse_1\.5s_ease-in-out_infinite\]{animation:1.5s ease-in-out infinite p2p-pulse}.animate-\[pulse-dot_2s_ease-in-out_infinite\]{animation:2s ease-in-out infinite pulse-dot}.animate-\[toast-in_0\.3s_ease-out\]{animation:.3s ease-out toast-in}.cursor-default{cursor:default}.cursor-grab{cursor:grab}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.touch-none{touch-action:none}.resize{resize:both}.resize-y{resize:vertical}.grid-cols-\[repeat\(auto-fit\,minmax\(130px\,1fr\)\)\]{grid-template-columns:repeat(auto-fit,minmax(130px,1fr))}.grid-cols-\[repeat\(auto-fit\,minmax\(140px\,1fr\)\)\]{grid-template-columns:repeat(auto-fit,minmax(140px,1fr))}.grid-cols-\[repeat\(auto-fit\,minmax\(200px\,1fr\)\)\]{grid-template-columns:repeat(auto-fit,minmax(200px,1fr))}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-baseline{align-items:baseline}.items-center{align-items:center}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.gap-0\.5{gap:calc(var(--spacing) * .5)}.gap-1{gap:calc(var(--spacing) * 1)}.gap-1\.5{gap:calc(var(--spacing) * 1.5)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-2\.5{gap:calc(var(--spacing) * 2.5)}.gap-3{gap:calc(var(--spacing) * 3)}.gap-3\.5{gap:calc(var(--spacing) * 3.5)}.gap-4{gap:calc(var(--spacing) * 4)}.gap-6{gap:calc(var(--spacing) * 6)}.gap-\[5px\]{gap:5px}.self-center{align-self:center}.self-end{align-self:flex-end}.self-start{align-self:flex-start}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.overflow-y-visible{overflow-y:visible}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:var(--radius-2xl)}.rounded-\[5px\]{border-radius:5px}.rounded-\[10px\]{border-radius:10px}.rounded-\[11px\]{border-radius:11px}.rounded-\[16px_16px_16px_4px\]{border-radius:16px 16px 16px 4px}.rounded-\[18px\]{border-radius:18px}.rounded-\[20px\]{border-radius:20px}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.rounded-sm{border-radius:var(--radius-sm)}.rounded-xl{border-radius:var(--radius-xl)}.rounded-t-lg{border-top-left-radius:var(--radius-lg);border-top-right-radius:var(--radius-lg)}.border{border-style:var(--tw-border-style);border-width:1px}.border-2{border-style:var(--tw-border-style);border-width:2px}.border-\[2\.5px\]{border-style:var(--tw-border-style);border-width:2.5px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-b-0{border-bottom-style:var(--tw-border-style);border-bottom-width:0}.border-l-2{border-left-style:var(--tw-border-style);border-left-width:2px}.border-l-\[3px\]{border-left-style:var(--tw-border-style);border-left-width:3px}.border-dashed{--tw-border-style:dashed;border-style:dashed}.border-none{--tw-border-style:none;border-style:none}.border-accent{border-color:var(--color-accent)}.border-amber-500\/30{border-color:#f99c004d}@supports (color:color-mix(in lab,red,red)){.border-amber-500\/30{border-color:color-mix(in oklab,var(--color-amber-500) 30%,transparent)}}.border-blue-500\/40{border-color:#3080ff66}@supports (color:color-mix(in lab,red,red)){.border-blue-500\/40{border-color:color-mix(in oklab,var(--color-blue-500) 40%,transparent)}}.border-blue-500\/\[0\.12\]{border-color:#3080ff1f}@supports (color:color-mix(in lab,red,red)){.border-blue-500\/\[0\.12\]{border-color:color-mix(in oklab,var(--color-blue-500) 12%,transparent)}}.border-border-subtle{border-color:var(--color-border-subtle)}.border-border-subtle\/50{border-color:#ffffff0a}@supports (color:color-mix(in lab,red,red)){.border-border-subtle\/50{border-color:color-mix(in oklab,var(--color-border-subtle) 50%,transparent)}}.border-emerald-500\/40{border-color:#00bb7f66}@supports (color:color-mix(in lab,red,red)){.border-emerald-500\/40{border-color:color-mix(in oklab,var(--color-emerald-500) 40%,transparent)}}.border-emerald-500\/\[0\.12\]{border-color:#00bb7f1f}@supports (color:color-mix(in lab,red,red)){.border-emerald-500\/\[0\.12\]{border-color:color-mix(in oklab,var(--color-emerald-500) 12%,transparent)}}.border-emerald-500\/\[0\.18\]{border-color:#00bb7f2e}@supports (color:color-mix(in lab,red,red)){.border-emerald-500\/\[0\.18\]{border-color:color-mix(in oklab,var(--color-emerald-500) 18%,transparent)}}.border-green-500\/15{border-color:#00c75826}@supports (color:color-mix(in lab,red,red)){.border-green-500\/15{border-color:color-mix(in oklab,var(--color-green-500) 15%,transparent)}}.border-green-500\/20{border-color:#00c75833}@supports (color:color-mix(in lab,red,red)){.border-green-500\/20{border-color:color-mix(in oklab,var(--color-green-500) 20%,transparent)}}.border-green-500\/30{border-color:#00c7584d}@supports (color:color-mix(in lab,red,red)){.border-green-500\/30{border-color:color-mix(in oklab,var(--color-green-500) 30%,transparent)}}.border-green-500\/\[0\.12\]{border-color:#00c7581f}@supports (color:color-mix(in lab,red,red)){.border-green-500\/\[0\.12\]{border-color:color-mix(in oklab,var(--color-green-500) 12%,transparent)}}.border-indigo-500\/15{border-color:#625fff26}@supports (color:color-mix(in lab,red,red)){.border-indigo-500\/15{border-color:color-mix(in oklab,var(--color-indigo-500) 15%,transparent)}}.border-indigo-500\/30{border-color:#625fff4d}@supports (color:color-mix(in lab,red,red)){.border-indigo-500\/30{border-color:color-mix(in oklab,var(--color-indigo-500) 30%,transparent)}}.border-indigo-500\/35{border-color:#625fff59}@supports (color:color-mix(in lab,red,red)){.border-indigo-500\/35{border-color:color-mix(in oklab,var(--color-indigo-500) 35%,transparent)}}.border-orange-500\/10{border-color:#fe6e001a}@supports (color:color-mix(in lab,red,red)){.border-orange-500\/10{border-color:color-mix(in oklab,var(--color-orange-500) 10%,transparent)}}.border-orange-500\/20{border-color:#fe6e0033}@supports (color:color-mix(in lab,red,red)){.border-orange-500\/20{border-color:color-mix(in oklab,var(--color-orange-500) 20%,transparent)}}.border-orange-500\/30{border-color:#fe6e004d}@supports (color:color-mix(in lab,red,red)){.border-orange-500\/30{border-color:color-mix(in oklab,var(--color-orange-500) 30%,transparent)}}.border-red-500\/30{border-color:#fb2c364d}@supports (color:color-mix(in lab,red,red)){.border-red-500\/30{border-color:color-mix(in oklab,var(--color-red-500) 30%,transparent)}}.border-slate-500\/10{border-color:#62748e1a}@supports (color:color-mix(in lab,red,red)){.border-slate-500\/10{border-color:color-mix(in oklab,var(--color-slate-500) 10%,transparent)}}.border-slate-500\/30{border-color:#62748e4d}@supports (color:color-mix(in lab,red,red)){.border-slate-500\/30{border-color:color-mix(in oklab,var(--color-slate-500) 30%,transparent)}}.border-transparent{border-color:#0000}.border-violet-500\/15{border-color:#8d54ff26}@supports (color:color-mix(in lab,red,red)){.border-violet-500\/15{border-color:color-mix(in oklab,var(--color-violet-500) 15%,transparent)}}.border-violet-500\/25{border-color:#8d54ff40}@supports (color:color-mix(in lab,red,red)){.border-violet-500\/25{border-color:color-mix(in oklab,var(--color-violet-500) 25%,transparent)}}.border-violet-500\/30{border-color:#8d54ff4d}@supports (color:color-mix(in lab,red,red)){.border-violet-500\/30{border-color:color-mix(in oklab,var(--color-violet-500) 30%,transparent)}}.border-violet-500\/40{border-color:#8d54ff66}@supports (color:color-mix(in lab,red,red)){.border-violet-500\/40{border-color:color-mix(in oklab,var(--color-violet-500) 40%,transparent)}}.border-violet-500\/\[0\.12\]{border-color:#8d54ff1f}@supports (color:color-mix(in lab,red,red)){.border-violet-500\/\[0\.12\]{border-color:color-mix(in oklab,var(--color-violet-500) 12%,transparent)}}.border-white\/10{border-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.border-white\/10{border-color:color-mix(in oklab,var(--color-white) 10%,transparent)}}.border-white\/15{border-color:#ffffff26}@supports (color:color-mix(in lab,red,red)){.border-white\/15{border-color:color-mix(in oklab,var(--color-white) 15%,transparent)}}.border-white\/20{border-color:#fff3}@supports (color:color-mix(in lab,red,red)){.border-white\/20{border-color:color-mix(in oklab,var(--color-white) 20%,transparent)}}.border-white\/\[0\.04\]{border-color:#ffffff0a}@supports (color:color-mix(in lab,red,red)){.border-white\/\[0\.04\]{border-color:color-mix(in oklab,var(--color-white) 4%,transparent)}}.border-white\/\[0\.06\]{border-color:#ffffff0f}@supports (color:color-mix(in lab,red,red)){.border-white\/\[0\.06\]{border-color:color-mix(in oklab,var(--color-white) 6%,transparent)}}.border-white\/\[0\.08\]{border-color:#ffffff14}@supports (color:color-mix(in lab,red,red)){.border-white\/\[0\.08\]{border-color:color-mix(in oklab,var(--color-white) 8%,transparent)}}.border-white\/\[0\.12\]{border-color:#ffffff1f}@supports (color:color-mix(in lab,red,red)){.border-white\/\[0\.12\]{border-color:color-mix(in oklab,var(--color-white) 12%,transparent)}}.border-yellow-500\/20{border-color:#edb20033}@supports (color:color-mix(in lab,red,red)){.border-yellow-500\/20{border-color:color-mix(in oklab,var(--color-yellow-500) 20%,transparent)}}.border-yellow-500\/30{border-color:#edb2004d}@supports (color:color-mix(in lab,red,red)){.border-yellow-500\/30{border-color:color-mix(in oklab,var(--color-yellow-500) 30%,transparent)}}.bg-\[\#0c0e14\]{background-color:#0c0e14}.bg-\[\#0f1117\]{background-color:#0f1117}.bg-\[var\(--bg-glass-hover\)\]{background-color:var(--bg-glass-hover)}.bg-\[var\(--surface-primary\)\]{background-color:var(--surface-primary)}.bg-\[var\(--surface-secondary\)\]{background-color:var(--surface-secondary)}.bg-\[var\(--surface-tertiary\)\]{background-color:var(--surface-tertiary)}.bg-accent{background-color:var(--color-accent)}.bg-accent\/10{background-color:#6366f11a}@supports (color:color-mix(in lab,red,red)){.bg-accent\/10{background-color:color-mix(in oklab,var(--color-accent) 10%,transparent)}}.bg-bg-card{background-color:var(--color-bg-card)}.bg-bg-glass{background-color:var(--color-bg-glass)}.bg-bg-primary{background-color:var(--color-bg-primary)}.bg-bg-secondary{background-color:var(--color-bg-secondary)}.bg-black{background-color:var(--color-black)}.bg-black\/30{background-color:#0000004d}@supports (color:color-mix(in lab,red,red)){.bg-black\/30{background-color:color-mix(in oklab,var(--color-black) 30%,transparent)}}.bg-black\/50{background-color:#00000080}@supports (color:color-mix(in lab,red,red)){.bg-black\/50{background-color:color-mix(in oklab,var(--color-black) 50%,transparent)}}.bg-black\/60{background-color:#0009}@supports (color:color-mix(in lab,red,red)){.bg-black\/60{background-color:color-mix(in oklab,var(--color-black) 60%,transparent)}}.bg-black\/70{background-color:#000000b3}@supports (color:color-mix(in lab,red,red)){.bg-black\/70{background-color:color-mix(in oklab,var(--color-black) 70%,transparent)}}.bg-black\/75{background-color:#000000bf}@supports (color:color-mix(in lab,red,red)){.bg-black\/75{background-color:color-mix(in oklab,var(--color-black) 75%,transparent)}}.bg-blue-500\/25{background-color:#3080ff40}@supports (color:color-mix(in lab,red,red)){.bg-blue-500\/25{background-color:color-mix(in oklab,var(--color-blue-500) 25%,transparent)}}.bg-blue-500\/\[0\.06\]{background-color:#3080ff0f}@supports (color:color-mix(in lab,red,red)){.bg-blue-500\/\[0\.06\]{background-color:color-mix(in oklab,var(--color-blue-500) 6%,transparent)}}.bg-emerald-500\/25{background-color:#00bb7f40}@supports (color:color-mix(in lab,red,red)){.bg-emerald-500\/25{background-color:color-mix(in oklab,var(--color-emerald-500) 25%,transparent)}}.bg-emerald-500\/\[0\.05\]{background-color:#00bb7f0d}@supports (color:color-mix(in lab,red,red)){.bg-emerald-500\/\[0\.05\]{background-color:color-mix(in oklab,var(--color-emerald-500) 5%,transparent)}}.bg-emerald-500\/\[0\.07\]{background-color:#00bb7f12}@supports (color:color-mix(in lab,red,red)){.bg-emerald-500\/\[0\.07\]{background-color:color-mix(in oklab,var(--color-emerald-500) 7%,transparent)}}.bg-green-500{background-color:var(--color-green-500)}.bg-green-500\/10{background-color:#00c7581a}@supports (color:color-mix(in lab,red,red)){.bg-green-500\/10{background-color:color-mix(in oklab,var(--color-green-500) 10%,transparent)}}.bg-green-500\/\[0\.06\]{background-color:#00c7580f}@supports (color:color-mix(in lab,red,red)){.bg-green-500\/\[0\.06\]{background-color:color-mix(in oklab,var(--color-green-500) 6%,transparent)}}.bg-green-500\/\[0\.08\]{background-color:#00c75814}@supports (color:color-mix(in lab,red,red)){.bg-green-500\/\[0\.08\]{background-color:color-mix(in oklab,var(--color-green-500) 8%,transparent)}}.bg-indigo-500\/10{background-color:#625fff1a}@supports (color:color-mix(in lab,red,red)){.bg-indigo-500\/10{background-color:color-mix(in oklab,var(--color-indigo-500) 10%,transparent)}}.bg-indigo-500\/\[0\.06\]{background-color:#625fff0f}@supports (color:color-mix(in lab,red,red)){.bg-indigo-500\/\[0\.06\]{background-color:color-mix(in oklab,var(--color-indigo-500) 6%,transparent)}}.bg-indigo-500\/\[0\.08\]{background-color:#625fff14}@supports (color:color-mix(in lab,red,red)){.bg-indigo-500\/\[0\.08\]{background-color:color-mix(in oklab,var(--color-indigo-500) 8%,transparent)}}.bg-neutral-950\/\[0\.98\]{background-color:#0a0a0afa}@supports (color:color-mix(in lab,red,red)){.bg-neutral-950\/\[0\.98\]{background-color:color-mix(in oklab,var(--color-neutral-950) 98%,transparent)}}.bg-orange-500{background-color:var(--color-orange-500)}.bg-orange-500\/10{background-color:#fe6e001a}@supports (color:color-mix(in lab,red,red)){.bg-orange-500\/10{background-color:color-mix(in oklab,var(--color-orange-500) 10%,transparent)}}.bg-orange-500\/\[0\.04\]{background-color:#fe6e000a}@supports (color:color-mix(in lab,red,red)){.bg-orange-500\/\[0\.04\]{background-color:color-mix(in oklab,var(--color-orange-500) 4%,transparent)}}.bg-orange-500\/\[0\.08\]{background-color:#fe6e0014}@supports (color:color-mix(in lab,red,red)){.bg-orange-500\/\[0\.08\]{background-color:color-mix(in oklab,var(--color-orange-500) 8%,transparent)}}.bg-red-500{background-color:var(--color-red-500)}.bg-red-500\/10{background-color:#fb2c361a}@supports (color:color-mix(in lab,red,red)){.bg-red-500\/10{background-color:color-mix(in oklab,var(--color-red-500) 10%,transparent)}}.bg-red-500\/20{background-color:#fb2c3633}@supports (color:color-mix(in lab,red,red)){.bg-red-500\/20{background-color:color-mix(in oklab,var(--color-red-500) 20%,transparent)}}.bg-red-500\/30{background-color:#fb2c364d}@supports (color:color-mix(in lab,red,red)){.bg-red-500\/30{background-color:color-mix(in oklab,var(--color-red-500) 30%,transparent)}}.bg-red-500\/\[0\.08\]{background-color:#fb2c3614}@supports (color:color-mix(in lab,red,red)){.bg-red-500\/\[0\.08\]{background-color:color-mix(in oklab,var(--color-red-500) 8%,transparent)}}.bg-slate-500{background-color:var(--color-slate-500)}.bg-slate-500\/10{background-color:#62748e1a}@supports (color:color-mix(in lab,red,red)){.bg-slate-500\/10{background-color:color-mix(in oklab,var(--color-slate-500) 10%,transparent)}}.bg-slate-500\/\[0\.06\]{background-color:#62748e0f}@supports (color:color-mix(in lab,red,red)){.bg-slate-500\/\[0\.06\]{background-color:color-mix(in oklab,var(--color-slate-500) 6%,transparent)}}.bg-slate-900\/40{background-color:#0f172b66}@supports (color:color-mix(in lab,red,red)){.bg-slate-900\/40{background-color:color-mix(in oklab,var(--color-slate-900) 40%,transparent)}}.bg-slate-900\/50{background-color:#0f172b80}@supports (color:color-mix(in lab,red,red)){.bg-slate-900\/50{background-color:color-mix(in oklab,var(--color-slate-900) 50%,transparent)}}.bg-slate-900\/80{background-color:#0f172bcc}@supports (color:color-mix(in lab,red,red)){.bg-slate-900\/80{background-color:color-mix(in oklab,var(--color-slate-900) 80%,transparent)}}.bg-slate-950\/40{background-color:#02061866}@supports (color:color-mix(in lab,red,red)){.bg-slate-950\/40{background-color:color-mix(in oklab,var(--color-slate-950) 40%,transparent)}}.bg-slate-950\/50{background-color:#02061880}@supports (color:color-mix(in lab,red,red)){.bg-slate-950\/50{background-color:color-mix(in oklab,var(--color-slate-950) 50%,transparent)}}.bg-slate-950\/60{background-color:#02061899}@supports (color:color-mix(in lab,red,red)){.bg-slate-950\/60{background-color:color-mix(in oklab,var(--color-slate-950) 60%,transparent)}}.bg-slate-950\/80{background-color:#020618cc}@supports (color:color-mix(in lab,red,red)){.bg-slate-950\/80{background-color:color-mix(in oklab,var(--color-slate-950) 80%,transparent)}}.bg-surface-primary{background-color:var(--color-surface-primary)}.bg-transparent{background-color:#0000}.bg-violet-500\/10{background-color:#8d54ff1a}@supports (color:color-mix(in lab,red,red)){.bg-violet-500\/10{background-color:color-mix(in oklab,var(--color-violet-500) 10%,transparent)}}.bg-violet-500\/15{background-color:#8d54ff26}@supports (color:color-mix(in lab,red,red)){.bg-violet-500\/15{background-color:color-mix(in oklab,var(--color-violet-500) 15%,transparent)}}.bg-violet-500\/\[0\.06\]{background-color:#8d54ff0f}@supports (color:color-mix(in lab,red,red)){.bg-violet-500\/\[0\.06\]{background-color:color-mix(in oklab,var(--color-violet-500) 6%,transparent)}}.bg-violet-500\/\[0\.08\]{background-color:#8d54ff14}@supports (color:color-mix(in lab,red,red)){.bg-violet-500\/\[0\.08\]{background-color:color-mix(in oklab,var(--color-violet-500) 8%,transparent)}}.bg-white{background-color:var(--color-white)}.bg-white\/10{background-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.bg-white\/10{background-color:color-mix(in oklab,var(--color-white) 10%,transparent)}}.bg-white\/15{background-color:#ffffff26}@supports (color:color-mix(in lab,red,red)){.bg-white\/15{background-color:color-mix(in oklab,var(--color-white) 15%,transparent)}}.bg-white\/\[0\.02\]{background-color:#ffffff05}@supports (color:color-mix(in lab,red,red)){.bg-white\/\[0\.02\]{background-color:color-mix(in oklab,var(--color-white) 2%,transparent)}}.bg-white\/\[0\.03\]{background-color:#ffffff08}@supports (color:color-mix(in lab,red,red)){.bg-white\/\[0\.03\]{background-color:color-mix(in oklab,var(--color-white) 3%,transparent)}}.bg-white\/\[0\.04\]{background-color:#ffffff0a}@supports (color:color-mix(in lab,red,red)){.bg-white\/\[0\.04\]{background-color:color-mix(in oklab,var(--color-white) 4%,transparent)}}.bg-white\/\[0\.05\]{background-color:#ffffff0d}@supports (color:color-mix(in lab,red,red)){.bg-white\/\[0\.05\]{background-color:color-mix(in oklab,var(--color-white) 5%,transparent)}}.bg-white\/\[0\.06\]{background-color:#ffffff0f}@supports (color:color-mix(in lab,red,red)){.bg-white\/\[0\.06\]{background-color:color-mix(in oklab,var(--color-white) 6%,transparent)}}.bg-white\/\[0\.08\]{background-color:#ffffff14}@supports (color:color-mix(in lab,red,red)){.bg-white\/\[0\.08\]{background-color:color-mix(in oklab,var(--color-white) 8%,transparent)}}.bg-yellow-500{background-color:var(--color-yellow-500)}.bg-yellow-500\/10{background-color:#edb2001a}@supports (color:color-mix(in lab,red,red)){.bg-yellow-500\/10{background-color:color-mix(in oklab,var(--color-yellow-500) 10%,transparent)}}.bg-yellow-500\/15{background-color:#edb20026}@supports (color:color-mix(in lab,red,red)){.bg-yellow-500\/15{background-color:color-mix(in oklab,var(--color-yellow-500) 15%,transparent)}}.bg-yellow-500\/20{background-color:#edb20033}@supports (color:color-mix(in lab,red,red)){.bg-yellow-500\/20{background-color:color-mix(in oklab,var(--color-yellow-500) 20%,transparent)}}.bg-yellow-500\/\[0\.08\]{background-color:#edb20014}@supports (color:color-mix(in lab,red,red)){.bg-yellow-500\/\[0\.08\]{background-color:color-mix(in oklab,var(--color-yellow-500) 8%,transparent)}}.bg-gradient-to-br{--tw-gradient-position:to bottom right in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.bg-gradient-to-r{--tw-gradient-position:to right in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.from-amber-600{--tw-gradient-from:var(--color-amber-600);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.from-green-500\/\[0\.12\]{--tw-gradient-from:#00c7581f}@supports (color:color-mix(in lab,red,red)){.from-green-500\/\[0\.12\]{--tw-gradient-from:color-mix(in oklab, var(--color-green-500) 12%, transparent)}}.from-green-500\/\[0\.12\]{--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.from-yellow-500\/10{--tw-gradient-from:#edb2001a}@supports (color:color-mix(in lab,red,red)){.from-yellow-500\/10{--tw-gradient-from:color-mix(in oklab, var(--color-yellow-500) 10%, transparent)}}.from-yellow-500\/10{--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.to-amber-700{--tw-gradient-to:var(--color-amber-700);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.to-green-500\/\[0\.04\]{--tw-gradient-to:#00c7580a}@supports (color:color-mix(in lab,red,red)){.to-green-500\/\[0\.04\]{--tw-gradient-to:color-mix(in oklab, var(--color-green-500) 4%, transparent)}}.to-green-500\/\[0\.04\]{--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.to-orange-600\/\[0\.08\]{--tw-gradient-to:#f0510014}@supports (color:color-mix(in lab,red,red)){.to-orange-600\/\[0\.08\]{--tw-gradient-to:color-mix(in oklab, var(--color-orange-600) 8%, transparent)}}.to-orange-600\/\[0\.08\]{--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.object-contain{object-fit:contain}.object-cover{object-fit:cover}.p-0{padding:calc(var(--spacing) * 0)}.p-2{padding:calc(var(--spacing) * 2)}.p-3{padding:calc(var(--spacing) * 3)}.p-3\.5{padding:calc(var(--spacing) * 3.5)}.p-4{padding:calc(var(--spacing) * 4)}.p-5{padding:calc(var(--spacing) * 5)}.p-10{padding:calc(var(--spacing) * 10)}.p-\[10px_12px\]{padding:10px 12px}.px-1{padding-inline:calc(var(--spacing) * 1)}.px-1\.5{padding-inline:calc(var(--spacing) * 1.5)}.px-2{padding-inline:calc(var(--spacing) * 2)}.px-2\.5{padding-inline:calc(var(--spacing) * 2.5)}.px-3{padding-inline:calc(var(--spacing) * 3)}.px-3\.5{padding-inline:calc(var(--spacing) * 3.5)}.px-4{padding-inline:calc(var(--spacing) * 4)}.px-4\.5{padding-inline:calc(var(--spacing) * 4.5)}.px-5{padding-inline:calc(var(--spacing) * 5)}.px-6{padding-inline:calc(var(--spacing) * 6)}.px-10{padding-inline:calc(var(--spacing) * 10)}.px-\[5px\]{padding-inline:5px}.px-\[7px\]{padding-inline:7px}.py-0\.5{padding-block:calc(var(--spacing) * .5)}.py-1{padding-block:calc(var(--spacing) * 1)}.py-1\.5{padding-block:calc(var(--spacing) * 1.5)}.py-2{padding-block:calc(var(--spacing) * 2)}.py-2\.5{padding-block:calc(var(--spacing) * 2.5)}.py-3{padding-block:calc(var(--spacing) * 3)}.py-3\.5{padding-block:calc(var(--spacing) * 3.5)}.py-4{padding-block:calc(var(--spacing) * 4)}.py-5{padding-block:calc(var(--spacing) * 5)}.py-6{padding-block:calc(var(--spacing) * 6)}.py-7\.5{padding-block:calc(var(--spacing) * 7.5)}.py-10{padding-block:calc(var(--spacing) * 10)}.py-12{padding-block:calc(var(--spacing) * 12)}.py-16{padding-block:calc(var(--spacing) * 16)}.py-20{padding-block:calc(var(--spacing) * 20)}.py-\[5px\]{padding-block:5px}.py-\[7px\]{padding-block:7px}.py-px{padding-block:1px}.pt-1{padding-top:calc(var(--spacing) * 1)}.pt-1\.5{padding-top:calc(var(--spacing) * 1.5)}.pt-2{padding-top:calc(var(--spacing) * 2)}.pt-2\.5{padding-top:calc(var(--spacing) * 2.5)}.pb-0{padding-bottom:calc(var(--spacing) * 0)}.pb-2{padding-bottom:calc(var(--spacing) * 2)}.pl-2{padding-left:calc(var(--spacing) * 2)}.pl-3{padding-left:calc(var(--spacing) * 3)}.text-center{text-align:center}.text-left{text-align:left}.text-right{text-align:right}.align-middle{vertical-align:middle}.font-mono{font-family:var(--font-mono)}.text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.text-5xl{font-size:var(--text-5xl);line-height:var(--tw-leading,var(--text-5xl--line-height))}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\[7px\]{font-size:7px}.text-\[8px\]{font-size:8px}.text-\[9px\]{font-size:9px}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.text-\[13px\]{font-size:13px}.text-\[22px\]{font-size:22px}.text-\[56px\]{font-size:56px}.leading-none{--tw-leading:1;line-height:1}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.leading-snug{--tw-leading:var(--leading-snug);line-height:var(--leading-snug)}.leading-tight{--tw-leading:var(--leading-tight);line-height:var(--leading-tight)}.font-black{--tw-font-weight:var(--font-weight-black);font-weight:var(--font-weight-black)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-extrabold{--tw-font-weight:var(--font-weight-extrabold);font-weight:var(--font-weight-extrabold)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-normal{--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-tight{--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.tracking-wide{--tw-tracking:var(--tracking-wide);letter-spacing:var(--tracking-wide)}.tracking-wider{--tw-tracking:var(--tracking-wider);letter-spacing:var(--tracking-wider)}.text-ellipsis{text-overflow:ellipsis}.whitespace-nowrap{white-space:nowrap}.text-\[var\(--accent-primary\)\]{color:var(--accent-primary)}.text-\[var\(--accent-primary-light\)\]{color:var(--accent-primary-light)}.text-accent{color:var(--color-accent)}.text-accent-light{color:var(--color-accent-light)}.text-amber-500{color:var(--color-amber-500)}.text-amber-700{color:var(--color-amber-700)}.text-blue-400{color:var(--color-blue-400)}.text-border-subtle{color:var(--color-border-subtle)}.text-current{color:currentColor}.text-emerald-500{color:var(--color-emerald-500)}.text-green-300{color:var(--color-green-300)}.text-green-400{color:var(--color-green-400)}.text-green-500{color:var(--color-green-500)}.text-indigo-400{color:var(--color-indigo-400)}.text-inherit{color:inherit}.text-neutral-500{color:var(--color-neutral-500)}.text-orange-400{color:var(--color-orange-400)}.text-orange-500{color:var(--color-orange-500)}.text-red-400{color:var(--color-red-400)}.text-red-500{color:var(--color-red-500)}.text-slate-100{color:var(--color-slate-100)}.text-slate-200{color:var(--color-slate-200)}.text-slate-400{color:var(--color-slate-400)}.text-slate-500{color:var(--color-slate-500)}.text-slate-600{color:var(--color-slate-600)}.text-slate-700{color:var(--color-slate-700)}.text-slate-800{color:var(--color-slate-800)}.text-text-muted{color:var(--color-text-muted)}.text-text-primary{color:var(--color-text-primary)}.text-text-secondary{color:var(--color-text-secondary)}.text-violet-400{color:var(--color-violet-400)}.text-violet-500{color:var(--color-violet-500)}.text-violet-600{color:var(--color-violet-600)}.text-white{color:var(--color-white)}.text-yellow-300{color:var(--color-yellow-300)}.text-yellow-400{color:var(--color-yellow-400)}.text-yellow-500{color:var(--color-yellow-500)}.uppercase{text-transform:uppercase}.italic{font-style:italic}.not-italic{font-style:normal}.underline{text-decoration-line:underline}.opacity-20{opacity:.2}.opacity-30{opacity:.3}.opacity-35{opacity:.35}.opacity-40{opacity:.4}.opacity-45{opacity:.45}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.opacity-70{opacity:.7}.opacity-75{opacity:.75}.opacity-80{opacity:.8}.opacity-85{opacity:.85}.opacity-100{opacity:1}.shadow{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_-4px_16px_rgba\(0\,0\,0\,0\.3\)\]{--tw-shadow:0 -4px 16px var(--tw-shadow-color,#0000004d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_0_6px_rgba\(34\,197\,94\,0\.3\)\]{--tw-shadow:0 0 6px var(--tw-shadow-color,#22c55e4d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_1px_3px_rgba\(0\,0\,0\,0\.3\)\]{--tw-shadow:0 1px 3px var(--tw-shadow-color,#0000004d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_8px_32px_rgba\(0\,0\,0\,0\.3\)\]{--tw-shadow:0 8px 32px var(--tw-shadow-color,#0000004d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_10px_30px_rgba\(0\,0\,0\,0\.8\)\]{--tw-shadow:0 10px 30px var(--tw-shadow-color,#000c);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_20px_40px_rgba\(0\,0\,0\,0\.4\)\]{--tw-shadow:0 20px 40px var(--tw-shadow-color,#0006);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.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-\[30px\]{--tw-backdrop-blur:blur(30px);-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.backdrop-blur-lg{--tw-backdrop-blur:blur(var(--blur-lg));-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(var(--blur-sm));-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(var(--blur-xl));-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,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[background\]{transition-property:background;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[left\]{transition-property:left;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[width\]{transition-property:width;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.duration-150{--tw-duration:.15s;transition-duration:.15s}.duration-200{--tw-duration:.2s;transition-duration:.2s}.duration-300{--tw-duration:.3s;transition-duration:.3s}.duration-500{--tw-duration:.5s;transition-duration:.5s}.duration-\[600ms\]{--tw-duration:.6s;transition-duration:.6s}.ease-in-out{--tw-ease:var(--ease-in-out);transition-timing-function:var(--ease-in-out)}.ease-out{--tw-ease:var(--ease-out);transition-timing-function:var(--ease-out)}.outline-none{--tw-outline-style:none;outline-style:none}.select-none{-webkit-user-select:none;user-select:none}@media (hover:hover){.hover\:border-border-default:hover{border-color:var(--color-border-default)}.hover\:bg-bg-glass-hover:hover{background-color:var(--color-bg-glass-hover)}.hover\:bg-white\/\[0\.15\]:hover{background-color:#ffffff26}@supports (color:color-mix(in lab,red,red)){.hover\:bg-white\/\[0\.15\]:hover{background-color:color-mix(in oklab,var(--color-white) 15%,transparent)}}.hover\:opacity-100:hover{opacity:1}.hover\:shadow-glow:hover{--tw-shadow:0 0 24px var(--tw-shadow-color,#6366f12e), 0 0 48px var(--tw-shadow-color,#6366f10f);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}}.focus\:border-accent:focus{border-color:var(--color-accent)}}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-gradient-position{syntax:"*";inherits:false}@property --tw-gradient-from{syntax:"<color>";inherits:false;initial-value:#0000}@property --tw-gradient-via{syntax:"<color>";inherits:false;initial-value:#0000}@property --tw-gradient-to{syntax:"<color>";inherits:false;initial-value:#0000}@property --tw-gradient-stops{syntax:"*";inherits:false}@property --tw-gradient-via-stops{syntax:"*";inherits:false}@property --tw-gradient-from-position{syntax:"<length-percentage>";inherits:false;initial-value:0%}@property --tw-gradient-via-position{syntax:"<length-percentage>";inherits:false;initial-value:50%}@property --tw-gradient-to-position{syntax:"<length-percentage>";inherits:false;initial-value:100%}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@keyframes spin{to{transform:rotate(360deg)}}
|
package/public/index.html
CHANGED
|
@@ -7,8 +7,8 @@
|
|
|
7
7
|
<meta name="description" content="ADHDev self-hosted dashboard for controlling AI agents" />
|
|
8
8
|
<link rel="icon" href="/otter-logo.png" />
|
|
9
9
|
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700;800&display=swap" rel="stylesheet" />
|
|
10
|
-
<script type="module" crossorigin src="/assets/index-
|
|
11
|
-
<link rel="stylesheet" crossorigin href="/assets/index-
|
|
10
|
+
<script type="module" crossorigin src="/assets/index-68ueYWEL.js"></script>
|
|
11
|
+
<link rel="stylesheet" crossorigin href="/assets/index-ChXBX3No.css">
|
|
12
12
|
</head>
|
|
13
13
|
<body>
|
|
14
14
|
<div id="root"></div>
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Copyright (c) 2014 The xterm.js authors. All rights reserved.
|
|
3
|
-
* Copyright (c) 2012-2013, Christopher Jeffrey (MIT License)
|
|
4
|
-
* https://github.com/chjj/term.js
|
|
5
|
-
* @license MIT
|
|
6
|
-
*
|
|
7
|
-
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
8
|
-
* of this software and associated documentation files (the "Software"), to deal
|
|
9
|
-
* in the Software without restriction, including without limitation the rights
|
|
10
|
-
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
11
|
-
* copies of the Software, and to permit persons to whom the Software is
|
|
12
|
-
* furnished to do so, subject to the following conditions:
|
|
13
|
-
*
|
|
14
|
-
* The above copyright notice and this permission notice shall be included in
|
|
15
|
-
* all copies or substantial portions of the Software.
|
|
16
|
-
*
|
|
17
|
-
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
18
|
-
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
19
|
-
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
20
|
-
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
21
|
-
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
22
|
-
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
23
|
-
* THE SOFTWARE.
|
|
24
|
-
*
|
|
25
|
-
* Originally forked from (with the author's permission):
|
|
26
|
-
* Fabrice Bellard's javascript vt100 for jslinux:
|
|
27
|
-
* http://bellard.org/jslinux/
|
|
28
|
-
* Copyright (c) 2011 Fabrice Bellard
|
|
29
|
-
* The original design remains. The terminal itself
|
|
30
|
-
* has been extended to include xterm CSI codes, among
|
|
31
|
-
* other features.
|
|
32
|
-
*/.xterm{cursor:text;position:relative;user-select:none;-ms-user-select:none;-webkit-user-select:none}.xterm.focus,.xterm:focus{outline:none}.xterm .xterm-helpers{position:absolute;top:0;z-index:5}.xterm .xterm-helper-textarea{padding:0;border:0;margin:0;position:absolute;opacity:0;left:-9999em;top:0;width:0;height:0;z-index:-5;white-space:nowrap;overflow:hidden;resize:none}.xterm .composition-view{background:#000;color:#fff;display:none;position:absolute;white-space:nowrap;z-index:1}.xterm .composition-view.active{display:block}.xterm .xterm-viewport{background-color:#000;overflow-y:scroll;cursor:default;position:absolute;right:0;left:0;top:0;bottom:0}.xterm .xterm-screen{position:relative}.xterm .xterm-screen canvas{position:absolute;left:0;top:0}.xterm-char-measure-element{display:inline-block;visibility:hidden;position:absolute;top:0;left:-9999em;line-height:normal}.xterm.enable-mouse-events{cursor:default}.xterm.xterm-cursor-pointer,.xterm .xterm-cursor-pointer{cursor:pointer}.xterm.column-select.focus{cursor:crosshair}.xterm .xterm-accessibility:not(.debug),.xterm .xterm-message{position:absolute;left:0;top:0;bottom:0;right:0;z-index:10;color:transparent;pointer-events:none}.xterm .xterm-accessibility-tree:not(.debug) *::selection{color:transparent}.xterm .xterm-accessibility-tree{font-family:monospace;-webkit-user-select:text;user-select:text;white-space:pre}.xterm .xterm-accessibility-tree>div{transform-origin:left;width:fit-content}.xterm .live-region{position:absolute;left:-9999px;width:1px;height:1px;overflow:hidden}.xterm-dim{opacity:1!important}.xterm-underline-1{text-decoration:underline}.xterm-underline-2{text-decoration:double underline}.xterm-underline-3{text-decoration:wavy underline}.xterm-underline-4{text-decoration:dotted underline}.xterm-underline-5{text-decoration:dashed underline}.xterm-overline{text-decoration:overline}.xterm-overline.xterm-underline-1{text-decoration:overline underline}.xterm-overline.xterm-underline-2{text-decoration:overline double underline}.xterm-overline.xterm-underline-3{text-decoration:overline wavy underline}.xterm-overline.xterm-underline-4{text-decoration:overline dotted underline}.xterm-overline.xterm-underline-5{text-decoration:overline dashed underline}.xterm-strikethrough{text-decoration:line-through}.xterm-screen .xterm-decoration-container .xterm-decoration{z-index:6;position:absolute}.xterm-screen .xterm-decoration-container .xterm-decoration.xterm-decoration-top-layer{z-index:7}.xterm-decoration-overview-ruler{z-index:8;position:absolute;top:0;right:0;pointer-events:none}.xterm-decoration-top{z-index:2;position:relative}.xterm .xterm-scrollable-element>.scrollbar{cursor:default}.xterm .xterm-scrollable-element>.scrollbar>.scra{cursor:pointer;font-size:11px!important}.xterm .xterm-scrollable-element>.visible{opacity:1;background:#0000;transition:opacity .1s linear;z-index:11}.xterm .xterm-scrollable-element>.invisible{opacity:0;pointer-events:none}.xterm .xterm-scrollable-element>.invisible.fade{transition:opacity .8s linear}.xterm .xterm-scrollable-element>.shadow{position:absolute;display:none}.xterm .xterm-scrollable-element>.shadow.top{display:block;top:0;left:3px;height:3px;width:100%;box-shadow:var(--vscode-scrollbar-shadow, #000) 0 6px 6px -6px inset}.xterm .xterm-scrollable-element>.shadow.left{display:block;top:3px;left:0;height:100%;width:3px;box-shadow:var(--vscode-scrollbar-shadow, #000) 6px 0 6px -6px inset}.xterm .xterm-scrollable-element>.shadow.top-left-corner{display:block;top:0;left:0;height:3px;width:3px}.xterm .xterm-scrollable-element>.shadow.top.left{box-shadow:var(--vscode-scrollbar-shadow, #000) 6px 0 6px -6px inset}.ide-page{display:flex;flex-direction:column;height:100%;min-height:0;background:var(--bg-primary);color:var(--text-primary);overflow:hidden}.ide-empty{display:flex;align-items:center;justify-content:center;height:100%;color:var(--text-muted);font-size:14px}.ide-header{display:flex;align-items:center;justify-content:space-between;padding:10px 20px;border-bottom:1px solid var(--border-subtle);background:var(--surface-primary);flex-shrink:0;z-index:10}.ide-header-left{display:flex;align-items:center;gap:12px}.ide-header-right{display:flex;align-items:center;gap:10px}.ide-title{display:flex;align-items:baseline;gap:8px}.ide-name{font-weight:800;font-size:15px;letter-spacing:.02em}.ide-workspace{font-size:12px;font-weight:500;color:var(--text-secondary);opacity:.7;max-width:160px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ide-machine-label{font-size:9px;font-weight:600;color:var(--text-muted);background:var(--bg-secondary);padding:2px 8px;border-radius:10px;letter-spacing:.03em;white-space:nowrap}.ide-badge{font-size:9px;font-weight:800;letter-spacing:.08em;color:var(--accent-primary);background:#6366f11a;padding:2px 8px;border-radius:6px}.ide-status-pill{display:flex;align-items:center;gap:5px;padding:3px 10px;background:var(--bg-secondary);border-radius:20px;border:1px solid var(--border-subtle)}.ide-dot{width:6px;height:6px;border-radius:50%;transition:background .3s}.ide-dot.online{background:var(--status-online);box-shadow:0 0 8px var(--status-online)}.ide-dot.connecting{background:#fbbf24;animation:pulse-dot 1.5s ease-in-out infinite}.ide-status-text{font-size:9px;font-weight:700;letter-spacing:.05em;text-transform:uppercase}.ide-view-toggle{display:flex;background:var(--bg-secondary);border-radius:10px;border:1px solid var(--border-subtle);overflow:hidden}.ide-view-btn{padding:6px 12px;background:transparent;border:none;color:var(--text-muted);font-size:14px;cursor:pointer;transition:all .15s}.ide-view-btn.active{background:var(--surface-primary);color:var(--accent-primary);box-shadow:0 0 0 1px var(--accent-primary)}.ide-view-btn:hover:not(.active){background:var(--bg-glass-hover)}.ide-back-btn{padding:6px 14px;font-size:12px;font-weight:700;background:var(--accent-primary);color:#fff;border:none;border-radius:8px;cursor:pointer;transition:opacity .15s}.ide-back-btn:hover{opacity:.85}.ide-content{flex:1;display:flex;min-height:0;overflow:hidden}.ide-chat-panel{width:420px;min-width:0;display:flex;flex-direction:column;border-right:1px solid var(--border-subtle);background:var(--surface-secondary);transition:flex .3s ease,width .3s ease,opacity .25s ease,min-width .3s ease;opacity:1;overflow:hidden}.ide-chat-panel.hidden{flex:0!important;width:0!important;min-width:0!important;opacity:0;border-right:none;pointer-events:none;overflow:hidden}.ide-chat-panel.full{width:100%;max-width:720px;margin:0 auto;border-right:none}.ide-chat-tabs{display:flex;border-bottom:1px solid var(--border-subtle);background:var(--bg-secondary);flex-shrink:0}.ide-chat-tab{flex:1;padding:10px 16px;border:none;border-bottom:2px solid transparent;background:transparent;color:var(--text-muted);font-size:11px;font-weight:700;cursor:pointer;letter-spacing:.04em;transition:all .15s}.ide-chat-tab.active{color:var(--text-primary);border-bottom-color:var(--accent-primary);background:var(--surface-primary)}.ide-chat-tab.ext.active{border-bottom-color:#22d3ee}.ide-ext-badge{display:inline-flex;align-items:center;justify-content:center;min-width:18px;height:18px;padding:0 5px;border-radius:9px;background:#22d3ee26;color:#22d3ee;font-size:10px;font-weight:700;margin-left:6px}.ide-chat-header{padding:14px 18px 10px;border-bottom:1px solid var(--border-subtle);background:var(--surface-primary);flex-shrink:0}.ide-chat-header-top{display:flex;justify-content:space-between;align-items:center;margin-bottom:4px}.ide-chat-header-info{display:flex;align-items:center;gap:10px}.ide-chat-label{font-size:10px;font-weight:800;letter-spacing:.06em;color:var(--text-muted)}.ide-chat-status{font-size:10px;font-weight:600;color:var(--status-online)}.ide-chat-header-actions{display:flex;gap:6px;align-items:center}.ide-btn-icon{width:28px;height:28px;display:flex;align-items:center;justify-content:center;background:var(--bg-secondary);border:1px solid var(--border-subtle);border-radius:8px;font-size:12px;cursor:pointer;transition:background .15s}.ide-btn-icon:hover{background:var(--bg-glass-hover)}.ide-btn-primary-sm{padding:4px 10px;font-size:11px;font-weight:700;background:var(--accent-primary);color:#fff;border:none;border-radius:8px;cursor:pointer;transition:opacity .15s}.ide-btn-primary-sm:disabled{opacity:.5;cursor:not-allowed}.ide-chat-title{font-size:13px;font-weight:700;color:var(--text-primary);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ide-history{border-bottom:1px solid var(--border-subtle);flex-shrink:0}.ide-history-header{display:flex;justify-content:space-between;align-items:center;padding:8px 18px;font-size:10px;font-weight:700;color:var(--text-muted);cursor:pointer;background:var(--surface-tertiary);transition:background .15s}.ide-history-header:hover{background:var(--bg-glass-hover)}.ide-history-toggle{font-size:8px;opacity:.6}.ide-history-list{max-height:120px;overflow:hidden;transition:max-height .25s ease}.ide-history-list.expanded{max-height:300px;overflow-y:auto}.ide-history-item{padding:8px 18px;font-size:12px;font-weight:500;cursor:pointer;border-bottom:1px solid var(--border-subtle);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;transition:background .1s}.ide-history-item:hover{background:var(--bg-glass-hover)}.ide-history-item.active{color:var(--accent-primary-light);border-left:3px solid var(--accent-primary);background:#6366f10f}.ide-approval{padding:14px 18px;background:linear-gradient(135deg,#f59e0b1f,#d9770614);border-bottom:1px solid rgba(245,158,11,.2);flex-shrink:0;animation:slide-down .2s ease-out}.ide-approval-label{font-size:11px;font-weight:800;color:#f59e0b;margin-bottom:8px;letter-spacing:.03em}.ide-approval-msg{font-size:12px;line-height:1.5;color:var(--text-primary);margin-bottom:10px;white-space:pre-wrap;word-break:break-word;max-height:80px;overflow:hidden}.ide-approval-buttons{display:flex;gap:8px;flex-wrap:wrap}.ide-approval-btn{flex:1;min-width:80px;padding:8px 14px;border:none;border-radius:8px;font-weight:700;font-size:12px;cursor:pointer;background:var(--surface-tertiary);color:var(--text-primary);transition:all .15s}.ide-approval-btn:hover{filter:brightness(1.1)}.ide-approval-btn.primary{background:var(--status-online);color:#fff}.ide-chat-messages{flex:1;display:flex;flex-direction:column;min-height:0;overflow:hidden}.ide-chat-empty{text-align:center;margin-top:80px;display:flex;flex-direction:column;align-items:center;gap:12px}.ide-chat-empty-icon{font-size:36px;opacity:.12}.ide-chat-empty-text{opacity:.2;font-size:12px;font-weight:600}.ide-chat-empty-bar{width:32px;height:3px;border-radius:2px;background:linear-gradient(90deg,transparent,var(--accent-primary),transparent);animation:shimmer 2s ease-in-out infinite}.ide-chat-input-wrap{border-top:1px solid var(--border-subtle);background:var(--surface-primary);flex-shrink:0}.ide-chat-input-row{display:flex;gap:10px;align-items:center;padding:10px 18px 16px}.ide-chat-input{flex:1;height:40px;padding:0 16px;background:var(--bg-secondary);border:1px solid var(--border-subtle);border-radius:20px;color:var(--text-primary);font-size:14px;outline:none;transition:border-color .2s}.ide-chat-input:focus{border-color:var(--accent-primary)}.ide-btn-send{width:40px;height:40px;border-radius:50%;background:var(--bg-secondary);color:var(--text-muted);border:none;cursor:default;display:flex;align-items:center;justify-content:center;flex-shrink:0;transition:all .3s ease}.ide-btn-send:not(:disabled){background:var(--accent-primary);color:#fff;cursor:pointer}.ide-btn-send:disabled{opacity:1}.ide-btn-send:hover:not(:disabled){opacity:.9}.ide-model-bar{display:flex;align-items:center;gap:6px;padding:8px 18px 0;flex-wrap:wrap}.ide-model-agent{font-size:9px;font-weight:700;text-transform:uppercase;color:var(--accent-primary);opacity:.7;letter-spacing:.03em}.ide-model-sep{color:var(--border-subtle);font-size:10px}.ide-chip-wrap{position:relative}.ide-chip{display:inline-flex;align-items:center;gap:4px;padding:3px 10px;border-radius:12px;font-size:10px;font-weight:500;cursor:pointer;border:1px solid transparent;background:var(--surface-tertiary);color:var(--text-secondary);white-space:nowrap;max-width:160px;overflow:hidden;text-overflow:ellipsis;transition:all .15s}.ide-chip.open{border-color:#6366f159}.ide-chip:hover{background:var(--bg-glass-hover)}.ide-chip-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:59}.ide-chip-dropdown{position:absolute;bottom:100%;left:0;z-index:60;background:var(--surface-primary);border:1px solid var(--border-subtle);border-radius:10px;margin-bottom:4px;max-height:220px;overflow-y:auto;min-width:160px;box-shadow:0 -4px 20px #00000059;animation:slide-up .12s ease-out}.ide-chip-dropdown-title{padding:6px 12px;font-size:9px;font-weight:700;color:var(--text-muted);letter-spacing:.05em;border-bottom:1px solid var(--border-subtle)}.ide-chip-option{padding:7px 12px;font-size:11px;cursor:pointer;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:var(--text-secondary);border-left:2px solid transparent;transition:background .1s}.ide-chip-option:hover{background:#6366f114}.ide-chip-option.selected{color:var(--accent-primary);font-weight:600;background:#6366f11a;border-left-color:var(--accent-primary)}.ide-remote-panel{flex:1;display:flex;flex-direction:column;background:#000;min-width:0;transition:flex .3s ease,opacity .25s ease;opacity:1;overflow:hidden}.ide-remote-panel.hidden{flex:0!important;opacity:0;pointer-events:none;overflow:hidden}.ide-remote-panel.full{flex:1}.ide-toasts{position:fixed;top:16px;right:16px;z-index:9999;display:flex;flex-direction:column;gap:8px;pointer-events:none}.ide-toast{padding:10px 18px;border-radius:12px;font-size:13px;font-weight:600;-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);box-shadow:0 8px 32px #0000004d;pointer-events:auto;cursor:pointer;animation:toast-in .25s ease-out;max-width:360px}.ide-toast.success{background:#10b981eb;color:#fff}.ide-toast.warning{background:#f59e0beb;color:#fff}.ide-toast.info{background:#6366f1eb;color:#fff}@keyframes shimmer{0%,to{opacity:.2}50%{opacity:.6}}@keyframes pulse-dot{0%,to{opacity:.6}50%{opacity:1}}@keyframes toast-in{0%{opacity:0;transform:translate(40px)}to{opacity:1;transform:translate(0)}}@keyframes slide-up{0%{opacity:0;transform:translateY(6px)}to{opacity:1;transform:translateY(0)}}@keyframes slide-down{0%{opacity:0;transform:translateY(-8px)}to{opacity:1;transform:translateY(0)}}@media (max-width: 768px){.ide-page{height:100%;height:100dvh}.ide-header{padding:8px 12px 8px 56px;min-height:48px;gap:8px}.ide-header-left{gap:8px;min-width:0;flex:1}.ide-name{font-size:13px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:100px}.ide-workspace,.ide-machine-label,.ide-badge{display:none}.ide-status-pill{padding:2px 8px}.ide-header-right{gap:6px;flex-shrink:0}.ide-view-btn{padding:5px 10px;font-size:13px}.ide-back-btn{padding:5px 10px;font-size:11px}.ide-content{flex-direction:column}.ide-chat-panel{width:100%;border-right:none;flex:1;min-height:0;order:2}.ide-chat-panel.full{max-width:100%}.ide-remote-panel{flex:1;min-height:0;order:1}.ide-remote-panel.full{flex:1}.ide-chat-input-row{padding:8px 12px 12px}.ide-chat-input{height:36px;font-size:13px}.ide-toasts{top:auto;bottom:16px;right:12px;left:12px}.ide-toast{max-width:100%}}@media (min-width: 769px){.ide-content{flex-direction:row}}/*! tailwindcss v4.2.2 | MIT License | https://tailwindcss.com */@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-border-style:solid;--tw-gradient-position:initial;--tw-gradient-from:#0000;--tw-gradient-via:#0000;--tw-gradient-to:#0000;--tw-gradient-stops:initial;--tw-gradient-via-stops:initial;--tw-gradient-from-position:0%;--tw-gradient-via-position:50%;--tw-gradient-to-position:100%;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-duration:initial;--tw-ease:initial}}}@layer theme{:root,:host{--font-sans:"Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;--font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--color-red-400:oklch(70.4% .191 22.216);--color-red-500:oklch(63.7% .237 25.331);--color-orange-400:oklch(75% .183 55.934);--color-orange-500:oklch(70.5% .213 47.604);--color-orange-600:oklch(64.6% .222 41.116);--color-amber-500:oklch(76.9% .188 70.08);--color-amber-600:oklch(66.6% .179 58.318);--color-amber-700:oklch(55.5% .163 48.998);--color-yellow-300:oklch(90.5% .182 98.111);--color-yellow-400:oklch(85.2% .199 91.936);--color-yellow-500:oklch(79.5% .184 86.047);--color-green-300:oklch(87.1% .15 154.449);--color-green-400:oklch(79.2% .209 151.711);--color-green-500:oklch(72.3% .219 149.579);--color-emerald-500:oklch(69.6% .17 162.48);--color-blue-400:oklch(70.7% .165 254.624);--color-blue-500:oklch(62.3% .214 259.815);--color-indigo-400:oklch(67.3% .182 276.935);--color-indigo-500:oklch(58.5% .233 277.117);--color-violet-400:oklch(70.2% .183 293.541);--color-violet-500:oklch(60.6% .25 292.717);--color-violet-600:oklch(54.1% .281 293.009);--color-slate-100:oklch(96.8% .007 247.896);--color-slate-200:oklch(92.9% .013 255.508);--color-slate-400:oklch(70.4% .04 256.788);--color-slate-500:oklch(55.4% .046 257.417);--color-slate-600:oklch(44.6% .043 257.281);--color-slate-700:oklch(37.2% .044 257.287);--color-slate-800:oklch(27.9% .041 260.031);--color-slate-900:oklch(20.8% .042 265.755);--color-slate-950:oklch(12.9% .042 264.695);--color-neutral-500:oklch(55.6% 0 0);--color-neutral-950:oklch(14.5% 0 0);--color-black:#000;--color-white:#fff;--spacing:.25rem;--container-sm:24rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--text-base:1rem;--text-base--line-height: 1.5 ;--text-lg:1.125rem;--text-lg--line-height:calc(1.75 / 1.125);--text-xl:1.25rem;--text-xl--line-height:calc(1.75 / 1.25);--text-3xl:1.875rem;--text-3xl--line-height: 1.2 ;--text-5xl:3rem;--text-5xl--line-height:1;--font-weight-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--font-weight-extrabold:800;--font-weight-black:900;--tracking-tight:-.025em;--tracking-wide:.025em;--tracking-wider:.05em;--leading-tight:1.25;--leading-snug:1.375;--leading-relaxed:1.625;--radius-sm:6px;--radius-md:10px;--radius-lg:16px;--radius-xl:24px;--radius-2xl:1rem;--shadow-sm:0 1px 2px #0000004d;--shadow-md:0 4px 12px #0006;--shadow-lg:0 8px 32px #00000080;--ease-out:cubic-bezier(0, 0, .2, 1);--ease-in-out:cubic-bezier(.4, 0, .2, 1);--blur-sm:8px;--blur-lg:16px;--blur-xl:24px;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono);--color-bg-primary:#0a0e1a;--color-bg-secondary:#111827;--color-bg-card:#111827b3;--color-bg-glass:#ffffff0a;--color-bg-glass-hover:#ffffff14;--color-surface-primary:#0f1419;--color-border-subtle:#ffffff0f;--color-border-default:#ffffff1a;--color-text-primary:#f1f5f9;--color-text-secondary:#94a3b8;--color-text-muted:#64748b;--color-accent:#6366f1;--color-accent-light:#818cf8;--shadow-glow:0 0 24px #6366f126}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;-moz-tab-size:4;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}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;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){-webkit-appearance:button;-moz-appearance:button;appearance:button}::file-selector-button{-webkit-appearance:button;-moz-appearance:button;appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.pointer-events-auto{pointer-events:auto}.pointer-events-none{pointer-events:none}.visible{visibility:visible}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.inset-0{inset:calc(var(--spacing) * 0)}.start{inset-inline-start:var(--spacing)}.end{inset-inline-end:var(--spacing)}.top-0{top:calc(var(--spacing) * 0)}.top-2\.5{top:calc(var(--spacing) * 2.5)}.top-4{top:calc(var(--spacing) * 4)}.top-\[3px\]{top:3px}.right-0{right:calc(var(--spacing) * 0)}.right-2\.5{right:calc(var(--spacing) * 2.5)}.right-4{right:calc(var(--spacing) * 4)}.bottom-0{bottom:calc(var(--spacing) * 0)}.bottom-4{bottom:calc(var(--spacing) * 4)}.bottom-10{bottom:calc(var(--spacing) * 10)}.bottom-full{bottom:100%}.left-0{left:calc(var(--spacing) * 0)}.left-1\/2{left:50%}.z-10{z-index:10}.z-\[5\]{z-index:5}.z-\[59\]{z-index:59}.z-\[60\]{z-index:60}.z-\[1000\]{z-index:1000}.z-\[2000\]{z-index:2000}.z-\[9999\]{z-index:9999}.col-span-full{grid-column:1/-1}.container{width:100%}@media (min-width:40rem){.container{max-width:40rem}}@media (min-width:48rem){.container{max-width:48rem}}@media (min-width:64rem){.container{max-width:64rem}}@media (min-width:80rem){.container{max-width:80rem}}@media (min-width:96rem){.container{max-width:96rem}}.m-0{margin:calc(var(--spacing) * 0)}.mx-auto{margin-inline:auto}.mt-0\.5{margin-top:calc(var(--spacing) * .5)}.mt-1{margin-top:calc(var(--spacing) * 1)}.mt-1\.5{margin-top:calc(var(--spacing) * 1.5)}.mt-2{margin-top:calc(var(--spacing) * 2)}.mt-2\.5{margin-top:calc(var(--spacing) * 2.5)}.mt-3{margin-top:calc(var(--spacing) * 3)}.mt-4{margin-top:calc(var(--spacing) * 4)}.mt-5{margin-top:calc(var(--spacing) * 5)}.mt-16{margin-top:calc(var(--spacing) * 16)}.mt-px{margin-top:1px}.mr-1\.5{margin-right:calc(var(--spacing) * 1.5)}.mr-2{margin-right:calc(var(--spacing) * 2)}.mb-0{margin-bottom:calc(var(--spacing) * 0)}.mb-0\.5{margin-bottom:calc(var(--spacing) * .5)}.mb-1{margin-bottom:calc(var(--spacing) * 1)}.mb-1\.5{margin-bottom:calc(var(--spacing) * 1.5)}.mb-2{margin-bottom:calc(var(--spacing) * 2)}.mb-2\.5{margin-bottom:calc(var(--spacing) * 2.5)}.mb-3{margin-bottom:calc(var(--spacing) * 3)}.mb-3\.5{margin-bottom:calc(var(--spacing) * 3.5)}.mb-4{margin-bottom:calc(var(--spacing) * 4)}.mb-5{margin-bottom:calc(var(--spacing) * 5)}.ml-0\.5{margin-left:calc(var(--spacing) * .5)}.ml-1{margin-left:calc(var(--spacing) * 1)}.ml-1\.5{margin-left:calc(var(--spacing) * 1.5)}.ml-2{margin-left:calc(var(--spacing) * 2)}.ml-auto{margin-left:auto}.block{display:block}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.h-1{height:calc(var(--spacing) * 1)}.h-1\.5{height:calc(var(--spacing) * 1.5)}.h-2{height:calc(var(--spacing) * 2)}.h-4{height:calc(var(--spacing) * 4)}.h-5{height:calc(var(--spacing) * 5)}.h-7{height:calc(var(--spacing) * 7)}.h-8{height:calc(var(--spacing) * 8)}.h-9{height:calc(var(--spacing) * 9)}.h-10{height:calc(var(--spacing) * 10)}.h-12{height:calc(var(--spacing) * 12)}.h-\[5px\]{height:5px}.h-\[18px\]{height:18px}.h-\[22px\]{height:22px}.h-full{height:100%}.max-h-\[80vh\]{max-height:80vh}.max-h-\[200px\]{max-height:200px}.max-h-\[220px\]{max-height:220px}.max-h-\[500px\]{max-height:500px}.max-h-full{max-height:100%}.min-h-0{min-height:calc(var(--spacing) * 0)}.min-h-10{min-height:calc(var(--spacing) * 10)}.min-h-\[200px\]{min-height:200px}.w-1{width:calc(var(--spacing) * 1)}.w-1\.5{width:calc(var(--spacing) * 1.5)}.w-2{width:calc(var(--spacing) * 2)}.w-4{width:calc(var(--spacing) * 4)}.w-5{width:calc(var(--spacing) * 5)}.w-7{width:calc(var(--spacing) * 7)}.w-8{width:calc(var(--spacing) * 8)}.w-9{width:calc(var(--spacing) * 9)}.w-10{width:calc(var(--spacing) * 10)}.w-12{width:calc(var(--spacing) * 12)}.w-20{width:calc(var(--spacing) * 20)}.w-\[5px\]{width:5px}.w-\[90\%\]{width:90%}.w-\[120px\]{width:120px}.w-\[200px\]{width:200px}.w-\[220px\]{width:220px}.w-full{width:100%}.w-px{width:1px}.max-w-20{max-width:calc(var(--spacing) * 20)}.max-w-40{max-width:calc(var(--spacing) * 40)}.max-w-\[80\%\]{max-width:80%}.max-w-\[88\%\]{max-width:88%}.max-w-\[90\%\]{max-width:90%}.max-w-\[100px\]{max-width:100px}.max-w-\[200px\]{max-width:200px}.max-w-\[280px\]{max-width:280px}.max-w-\[360px\]{max-width:360px}.max-w-\[380px\]{max-width:380px}.max-w-\[500px\]{max-width:500px}.max-w-full{max-width:100%}.max-w-sm{max-width:var(--container-sm)}.min-w-0{min-width:calc(var(--spacing) * 0)}.min-w-7{min-width:calc(var(--spacing) * 7)}.min-w-9{min-width:calc(var(--spacing) * 9)}.min-w-40{min-width:calc(var(--spacing) * 40)}.min-w-\[32px\]{min-width:32px}.min-w-\[75px\]{min-width:75px}.min-w-\[120px\]{min-width:120px}.min-w-\[150px\]{min-width:150px}.min-w-\[200px\]{min-width:200px}.flex-1{flex:1}.shrink-0{flex-shrink:0}.border-collapse{border-collapse:collapse}.-translate-x-1\/2{--tw-translate-x: -50% ;translate:var(--tw-translate-x) var(--tw-translate-y)}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.animate-\[fadeIn_0\.3s_ease-out_forwards\]{animation:.3s ease-out forwards fadeIn}.animate-\[fadeIn_0\.3s_ease\]{animation:.3s fadeIn}.animate-\[p2p-pulse_1\.5s_ease-in-out_infinite\]{animation:1.5s ease-in-out infinite p2p-pulse}.animate-\[pulse-dot_2s_ease-in-out_infinite\]{animation:2s ease-in-out infinite pulse-dot}.animate-\[toast-in_0\.3s_ease-out\]{animation:.3s ease-out toast-in}.cursor-default{cursor:default}.cursor-grab{cursor:grab}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.touch-none{touch-action:none}.resize{resize:both}.resize-y{resize:vertical}.grid-cols-\[repeat\(auto-fit\,minmax\(130px\,1fr\)\)\]{grid-template-columns:repeat(auto-fit,minmax(130px,1fr))}.grid-cols-\[repeat\(auto-fit\,minmax\(140px\,1fr\)\)\]{grid-template-columns:repeat(auto-fit,minmax(140px,1fr))}.grid-cols-\[repeat\(auto-fit\,minmax\(200px\,1fr\)\)\]{grid-template-columns:repeat(auto-fit,minmax(200px,1fr))}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-baseline{align-items:baseline}.items-center{align-items:center}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.gap-0\.5{gap:calc(var(--spacing) * .5)}.gap-1{gap:calc(var(--spacing) * 1)}.gap-1\.5{gap:calc(var(--spacing) * 1.5)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-2\.5{gap:calc(var(--spacing) * 2.5)}.gap-3{gap:calc(var(--spacing) * 3)}.gap-3\.5{gap:calc(var(--spacing) * 3.5)}.gap-4{gap:calc(var(--spacing) * 4)}.gap-6{gap:calc(var(--spacing) * 6)}.gap-\[5px\]{gap:5px}.self-center{align-self:center}.self-end{align-self:flex-end}.self-start{align-self:flex-start}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.overflow-y-visible{overflow-y:visible}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:var(--radius-2xl)}.rounded-\[5px\]{border-radius:5px}.rounded-\[10px\]{border-radius:10px}.rounded-\[11px\]{border-radius:11px}.rounded-\[16px_16px_16px_4px\]{border-radius:16px 16px 16px 4px}.rounded-\[18px\]{border-radius:18px}.rounded-\[20px\]{border-radius:20px}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.rounded-sm{border-radius:var(--radius-sm)}.rounded-xl{border-radius:var(--radius-xl)}.rounded-t-lg{border-top-left-radius:var(--radius-lg);border-top-right-radius:var(--radius-lg)}.border{border-style:var(--tw-border-style);border-width:1px}.border-2{border-style:var(--tw-border-style);border-width:2px}.border-\[2\.5px\]{border-style:var(--tw-border-style);border-width:2.5px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-b-0{border-bottom-style:var(--tw-border-style);border-bottom-width:0}.border-l-2{border-left-style:var(--tw-border-style);border-left-width:2px}.border-l-\[3px\]{border-left-style:var(--tw-border-style);border-left-width:3px}.border-dashed{--tw-border-style:dashed;border-style:dashed}.border-none{--tw-border-style:none;border-style:none}.border-accent{border-color:var(--color-accent)}.border-amber-500\/30{border-color:#f99c004d}@supports (color:color-mix(in lab,red,red)){.border-amber-500\/30{border-color:color-mix(in oklab,var(--color-amber-500) 30%,transparent)}}.border-blue-500\/40{border-color:#3080ff66}@supports (color:color-mix(in lab,red,red)){.border-blue-500\/40{border-color:color-mix(in oklab,var(--color-blue-500) 40%,transparent)}}.border-blue-500\/\[0\.12\]{border-color:#3080ff1f}@supports (color:color-mix(in lab,red,red)){.border-blue-500\/\[0\.12\]{border-color:color-mix(in oklab,var(--color-blue-500) 12%,transparent)}}.border-border-subtle{border-color:var(--color-border-subtle)}.border-border-subtle\/50{border-color:#ffffff08}@supports (color:color-mix(in lab,red,red)){.border-border-subtle\/50{border-color:color-mix(in oklab,var(--color-border-subtle) 50%,transparent)}}.border-emerald-500\/40{border-color:#00bb7f66}@supports (color:color-mix(in lab,red,red)){.border-emerald-500\/40{border-color:color-mix(in oklab,var(--color-emerald-500) 40%,transparent)}}.border-emerald-500\/\[0\.12\]{border-color:#00bb7f1f}@supports (color:color-mix(in lab,red,red)){.border-emerald-500\/\[0\.12\]{border-color:color-mix(in oklab,var(--color-emerald-500) 12%,transparent)}}.border-emerald-500\/\[0\.18\]{border-color:#00bb7f2e}@supports (color:color-mix(in lab,red,red)){.border-emerald-500\/\[0\.18\]{border-color:color-mix(in oklab,var(--color-emerald-500) 18%,transparent)}}.border-green-500\/15{border-color:#00c75826}@supports (color:color-mix(in lab,red,red)){.border-green-500\/15{border-color:color-mix(in oklab,var(--color-green-500) 15%,transparent)}}.border-green-500\/20{border-color:#00c75833}@supports (color:color-mix(in lab,red,red)){.border-green-500\/20{border-color:color-mix(in oklab,var(--color-green-500) 20%,transparent)}}.border-green-500\/30{border-color:#00c7584d}@supports (color:color-mix(in lab,red,red)){.border-green-500\/30{border-color:color-mix(in oklab,var(--color-green-500) 30%,transparent)}}.border-green-500\/\[0\.12\]{border-color:#00c7581f}@supports (color:color-mix(in lab,red,red)){.border-green-500\/\[0\.12\]{border-color:color-mix(in oklab,var(--color-green-500) 12%,transparent)}}.border-indigo-500\/15{border-color:#625fff26}@supports (color:color-mix(in lab,red,red)){.border-indigo-500\/15{border-color:color-mix(in oklab,var(--color-indigo-500) 15%,transparent)}}.border-indigo-500\/30{border-color:#625fff4d}@supports (color:color-mix(in lab,red,red)){.border-indigo-500\/30{border-color:color-mix(in oklab,var(--color-indigo-500) 30%,transparent)}}.border-indigo-500\/35{border-color:#625fff59}@supports (color:color-mix(in lab,red,red)){.border-indigo-500\/35{border-color:color-mix(in oklab,var(--color-indigo-500) 35%,transparent)}}.border-orange-500\/10{border-color:#fe6e001a}@supports (color:color-mix(in lab,red,red)){.border-orange-500\/10{border-color:color-mix(in oklab,var(--color-orange-500) 10%,transparent)}}.border-orange-500\/20{border-color:#fe6e0033}@supports (color:color-mix(in lab,red,red)){.border-orange-500\/20{border-color:color-mix(in oklab,var(--color-orange-500) 20%,transparent)}}.border-orange-500\/30{border-color:#fe6e004d}@supports (color:color-mix(in lab,red,red)){.border-orange-500\/30{border-color:color-mix(in oklab,var(--color-orange-500) 30%,transparent)}}.border-red-500\/30{border-color:#fb2c364d}@supports (color:color-mix(in lab,red,red)){.border-red-500\/30{border-color:color-mix(in oklab,var(--color-red-500) 30%,transparent)}}.border-slate-500\/10{border-color:#62748e1a}@supports (color:color-mix(in lab,red,red)){.border-slate-500\/10{border-color:color-mix(in oklab,var(--color-slate-500) 10%,transparent)}}.border-slate-500\/30{border-color:#62748e4d}@supports (color:color-mix(in lab,red,red)){.border-slate-500\/30{border-color:color-mix(in oklab,var(--color-slate-500) 30%,transparent)}}.border-transparent{border-color:#0000}.border-violet-500\/15{border-color:#8d54ff26}@supports (color:color-mix(in lab,red,red)){.border-violet-500\/15{border-color:color-mix(in oklab,var(--color-violet-500) 15%,transparent)}}.border-violet-500\/25{border-color:#8d54ff40}@supports (color:color-mix(in lab,red,red)){.border-violet-500\/25{border-color:color-mix(in oklab,var(--color-violet-500) 25%,transparent)}}.border-violet-500\/30{border-color:#8d54ff4d}@supports (color:color-mix(in lab,red,red)){.border-violet-500\/30{border-color:color-mix(in oklab,var(--color-violet-500) 30%,transparent)}}.border-violet-500\/40{border-color:#8d54ff66}@supports (color:color-mix(in lab,red,red)){.border-violet-500\/40{border-color:color-mix(in oklab,var(--color-violet-500) 40%,transparent)}}.border-violet-500\/\[0\.12\]{border-color:#8d54ff1f}@supports (color:color-mix(in lab,red,red)){.border-violet-500\/\[0\.12\]{border-color:color-mix(in oklab,var(--color-violet-500) 12%,transparent)}}.border-white\/10{border-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.border-white\/10{border-color:color-mix(in oklab,var(--color-white) 10%,transparent)}}.border-white\/15{border-color:#ffffff26}@supports (color:color-mix(in lab,red,red)){.border-white\/15{border-color:color-mix(in oklab,var(--color-white) 15%,transparent)}}.border-white\/20{border-color:#fff3}@supports (color:color-mix(in lab,red,red)){.border-white\/20{border-color:color-mix(in oklab,var(--color-white) 20%,transparent)}}.border-white\/\[0\.04\]{border-color:#ffffff0a}@supports (color:color-mix(in lab,red,red)){.border-white\/\[0\.04\]{border-color:color-mix(in oklab,var(--color-white) 4%,transparent)}}.border-white\/\[0\.06\]{border-color:#ffffff0f}@supports (color:color-mix(in lab,red,red)){.border-white\/\[0\.06\]{border-color:color-mix(in oklab,var(--color-white) 6%,transparent)}}.border-white\/\[0\.08\]{border-color:#ffffff14}@supports (color:color-mix(in lab,red,red)){.border-white\/\[0\.08\]{border-color:color-mix(in oklab,var(--color-white) 8%,transparent)}}.border-white\/\[0\.12\]{border-color:#ffffff1f}@supports (color:color-mix(in lab,red,red)){.border-white\/\[0\.12\]{border-color:color-mix(in oklab,var(--color-white) 12%,transparent)}}.border-yellow-500\/20{border-color:#edb20033}@supports (color:color-mix(in lab,red,red)){.border-yellow-500\/20{border-color:color-mix(in oklab,var(--color-yellow-500) 20%,transparent)}}.border-yellow-500\/30{border-color:#edb2004d}@supports (color:color-mix(in lab,red,red)){.border-yellow-500\/30{border-color:color-mix(in oklab,var(--color-yellow-500) 30%,transparent)}}.bg-\[\#0c0e14\]{background-color:#0c0e14}.bg-\[\#0f1117\]{background-color:#0f1117}.bg-\[var\(--bg-glass-hover\)\]{background-color:var(--bg-glass-hover)}.bg-\[var\(--surface-primary\)\]{background-color:var(--surface-primary)}.bg-\[var\(--surface-secondary\)\]{background-color:var(--surface-secondary)}.bg-\[var\(--surface-tertiary\)\]{background-color:var(--surface-tertiary)}.bg-accent{background-color:var(--color-accent)}.bg-accent\/10{background-color:#6366f11a}@supports (color:color-mix(in lab,red,red)){.bg-accent\/10{background-color:color-mix(in oklab,var(--color-accent) 10%,transparent)}}.bg-bg-card{background-color:var(--color-bg-card)}.bg-bg-glass{background-color:var(--color-bg-glass)}.bg-bg-primary{background-color:var(--color-bg-primary)}.bg-bg-secondary{background-color:var(--color-bg-secondary)}.bg-black{background-color:var(--color-black)}.bg-black\/30{background-color:#0000004d}@supports (color:color-mix(in lab,red,red)){.bg-black\/30{background-color:color-mix(in oklab,var(--color-black) 30%,transparent)}}.bg-black\/50{background-color:#00000080}@supports (color:color-mix(in lab,red,red)){.bg-black\/50{background-color:color-mix(in oklab,var(--color-black) 50%,transparent)}}.bg-black\/60{background-color:#0009}@supports (color:color-mix(in lab,red,red)){.bg-black\/60{background-color:color-mix(in oklab,var(--color-black) 60%,transparent)}}.bg-black\/70{background-color:#000000b3}@supports (color:color-mix(in lab,red,red)){.bg-black\/70{background-color:color-mix(in oklab,var(--color-black) 70%,transparent)}}.bg-black\/75{background-color:#000000bf}@supports (color:color-mix(in lab,red,red)){.bg-black\/75{background-color:color-mix(in oklab,var(--color-black) 75%,transparent)}}.bg-blue-500\/25{background-color:#3080ff40}@supports (color:color-mix(in lab,red,red)){.bg-blue-500\/25{background-color:color-mix(in oklab,var(--color-blue-500) 25%,transparent)}}.bg-blue-500\/\[0\.06\]{background-color:#3080ff0f}@supports (color:color-mix(in lab,red,red)){.bg-blue-500\/\[0\.06\]{background-color:color-mix(in oklab,var(--color-blue-500) 6%,transparent)}}.bg-emerald-500\/25{background-color:#00bb7f40}@supports (color:color-mix(in lab,red,red)){.bg-emerald-500\/25{background-color:color-mix(in oklab,var(--color-emerald-500) 25%,transparent)}}.bg-emerald-500\/\[0\.05\]{background-color:#00bb7f0d}@supports (color:color-mix(in lab,red,red)){.bg-emerald-500\/\[0\.05\]{background-color:color-mix(in oklab,var(--color-emerald-500) 5%,transparent)}}.bg-emerald-500\/\[0\.07\]{background-color:#00bb7f12}@supports (color:color-mix(in lab,red,red)){.bg-emerald-500\/\[0\.07\]{background-color:color-mix(in oklab,var(--color-emerald-500) 7%,transparent)}}.bg-green-500{background-color:var(--color-green-500)}.bg-green-500\/10{background-color:#00c7581a}@supports (color:color-mix(in lab,red,red)){.bg-green-500\/10{background-color:color-mix(in oklab,var(--color-green-500) 10%,transparent)}}.bg-green-500\/\[0\.06\]{background-color:#00c7580f}@supports (color:color-mix(in lab,red,red)){.bg-green-500\/\[0\.06\]{background-color:color-mix(in oklab,var(--color-green-500) 6%,transparent)}}.bg-green-500\/\[0\.08\]{background-color:#00c75814}@supports (color:color-mix(in lab,red,red)){.bg-green-500\/\[0\.08\]{background-color:color-mix(in oklab,var(--color-green-500) 8%,transparent)}}.bg-indigo-500\/10{background-color:#625fff1a}@supports (color:color-mix(in lab,red,red)){.bg-indigo-500\/10{background-color:color-mix(in oklab,var(--color-indigo-500) 10%,transparent)}}.bg-indigo-500\/\[0\.06\]{background-color:#625fff0f}@supports (color:color-mix(in lab,red,red)){.bg-indigo-500\/\[0\.06\]{background-color:color-mix(in oklab,var(--color-indigo-500) 6%,transparent)}}.bg-indigo-500\/\[0\.08\]{background-color:#625fff14}@supports (color:color-mix(in lab,red,red)){.bg-indigo-500\/\[0\.08\]{background-color:color-mix(in oklab,var(--color-indigo-500) 8%,transparent)}}.bg-neutral-950\/\[0\.98\]{background-color:#0a0a0afa}@supports (color:color-mix(in lab,red,red)){.bg-neutral-950\/\[0\.98\]{background-color:color-mix(in oklab,var(--color-neutral-950) 98%,transparent)}}.bg-orange-500{background-color:var(--color-orange-500)}.bg-orange-500\/10{background-color:#fe6e001a}@supports (color:color-mix(in lab,red,red)){.bg-orange-500\/10{background-color:color-mix(in oklab,var(--color-orange-500) 10%,transparent)}}.bg-orange-500\/\[0\.04\]{background-color:#fe6e000a}@supports (color:color-mix(in lab,red,red)){.bg-orange-500\/\[0\.04\]{background-color:color-mix(in oklab,var(--color-orange-500) 4%,transparent)}}.bg-orange-500\/\[0\.08\]{background-color:#fe6e0014}@supports (color:color-mix(in lab,red,red)){.bg-orange-500\/\[0\.08\]{background-color:color-mix(in oklab,var(--color-orange-500) 8%,transparent)}}.bg-red-500{background-color:var(--color-red-500)}.bg-red-500\/10{background-color:#fb2c361a}@supports (color:color-mix(in lab,red,red)){.bg-red-500\/10{background-color:color-mix(in oklab,var(--color-red-500) 10%,transparent)}}.bg-red-500\/20{background-color:#fb2c3633}@supports (color:color-mix(in lab,red,red)){.bg-red-500\/20{background-color:color-mix(in oklab,var(--color-red-500) 20%,transparent)}}.bg-red-500\/30{background-color:#fb2c364d}@supports (color:color-mix(in lab,red,red)){.bg-red-500\/30{background-color:color-mix(in oklab,var(--color-red-500) 30%,transparent)}}.bg-red-500\/\[0\.08\]{background-color:#fb2c3614}@supports (color:color-mix(in lab,red,red)){.bg-red-500\/\[0\.08\]{background-color:color-mix(in oklab,var(--color-red-500) 8%,transparent)}}.bg-slate-500{background-color:var(--color-slate-500)}.bg-slate-500\/10{background-color:#62748e1a}@supports (color:color-mix(in lab,red,red)){.bg-slate-500\/10{background-color:color-mix(in oklab,var(--color-slate-500) 10%,transparent)}}.bg-slate-500\/\[0\.06\]{background-color:#62748e0f}@supports (color:color-mix(in lab,red,red)){.bg-slate-500\/\[0\.06\]{background-color:color-mix(in oklab,var(--color-slate-500) 6%,transparent)}}.bg-slate-900\/40{background-color:#0f172b66}@supports (color:color-mix(in lab,red,red)){.bg-slate-900\/40{background-color:color-mix(in oklab,var(--color-slate-900) 40%,transparent)}}.bg-slate-900\/50{background-color:#0f172b80}@supports (color:color-mix(in lab,red,red)){.bg-slate-900\/50{background-color:color-mix(in oklab,var(--color-slate-900) 50%,transparent)}}.bg-slate-900\/80{background-color:#0f172bcc}@supports (color:color-mix(in lab,red,red)){.bg-slate-900\/80{background-color:color-mix(in oklab,var(--color-slate-900) 80%,transparent)}}.bg-slate-950\/40{background-color:#02061866}@supports (color:color-mix(in lab,red,red)){.bg-slate-950\/40{background-color:color-mix(in oklab,var(--color-slate-950) 40%,transparent)}}.bg-slate-950\/50{background-color:#02061880}@supports (color:color-mix(in lab,red,red)){.bg-slate-950\/50{background-color:color-mix(in oklab,var(--color-slate-950) 50%,transparent)}}.bg-slate-950\/60{background-color:#02061899}@supports (color:color-mix(in lab,red,red)){.bg-slate-950\/60{background-color:color-mix(in oklab,var(--color-slate-950) 60%,transparent)}}.bg-slate-950\/80{background-color:#020618cc}@supports (color:color-mix(in lab,red,red)){.bg-slate-950\/80{background-color:color-mix(in oklab,var(--color-slate-950) 80%,transparent)}}.bg-surface-primary{background-color:var(--color-surface-primary)}.bg-transparent{background-color:#0000}.bg-violet-500\/10{background-color:#8d54ff1a}@supports (color:color-mix(in lab,red,red)){.bg-violet-500\/10{background-color:color-mix(in oklab,var(--color-violet-500) 10%,transparent)}}.bg-violet-500\/15{background-color:#8d54ff26}@supports (color:color-mix(in lab,red,red)){.bg-violet-500\/15{background-color:color-mix(in oklab,var(--color-violet-500) 15%,transparent)}}.bg-violet-500\/\[0\.06\]{background-color:#8d54ff0f}@supports (color:color-mix(in lab,red,red)){.bg-violet-500\/\[0\.06\]{background-color:color-mix(in oklab,var(--color-violet-500) 6%,transparent)}}.bg-violet-500\/\[0\.08\]{background-color:#8d54ff14}@supports (color:color-mix(in lab,red,red)){.bg-violet-500\/\[0\.08\]{background-color:color-mix(in oklab,var(--color-violet-500) 8%,transparent)}}.bg-white{background-color:var(--color-white)}.bg-white\/10{background-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.bg-white\/10{background-color:color-mix(in oklab,var(--color-white) 10%,transparent)}}.bg-white\/15{background-color:#ffffff26}@supports (color:color-mix(in lab,red,red)){.bg-white\/15{background-color:color-mix(in oklab,var(--color-white) 15%,transparent)}}.bg-white\/\[0\.02\]{background-color:#ffffff05}@supports (color:color-mix(in lab,red,red)){.bg-white\/\[0\.02\]{background-color:color-mix(in oklab,var(--color-white) 2%,transparent)}}.bg-white\/\[0\.03\]{background-color:#ffffff08}@supports (color:color-mix(in lab,red,red)){.bg-white\/\[0\.03\]{background-color:color-mix(in oklab,var(--color-white) 3%,transparent)}}.bg-white\/\[0\.04\]{background-color:#ffffff0a}@supports (color:color-mix(in lab,red,red)){.bg-white\/\[0\.04\]{background-color:color-mix(in oklab,var(--color-white) 4%,transparent)}}.bg-white\/\[0\.05\]{background-color:#ffffff0d}@supports (color:color-mix(in lab,red,red)){.bg-white\/\[0\.05\]{background-color:color-mix(in oklab,var(--color-white) 5%,transparent)}}.bg-white\/\[0\.06\]{background-color:#ffffff0f}@supports (color:color-mix(in lab,red,red)){.bg-white\/\[0\.06\]{background-color:color-mix(in oklab,var(--color-white) 6%,transparent)}}.bg-white\/\[0\.08\]{background-color:#ffffff14}@supports (color:color-mix(in lab,red,red)){.bg-white\/\[0\.08\]{background-color:color-mix(in oklab,var(--color-white) 8%,transparent)}}.bg-yellow-500{background-color:var(--color-yellow-500)}.bg-yellow-500\/10{background-color:#edb2001a}@supports (color:color-mix(in lab,red,red)){.bg-yellow-500\/10{background-color:color-mix(in oklab,var(--color-yellow-500) 10%,transparent)}}.bg-yellow-500\/15{background-color:#edb20026}@supports (color:color-mix(in lab,red,red)){.bg-yellow-500\/15{background-color:color-mix(in oklab,var(--color-yellow-500) 15%,transparent)}}.bg-yellow-500\/20{background-color:#edb20033}@supports (color:color-mix(in lab,red,red)){.bg-yellow-500\/20{background-color:color-mix(in oklab,var(--color-yellow-500) 20%,transparent)}}.bg-yellow-500\/\[0\.08\]{background-color:#edb20014}@supports (color:color-mix(in lab,red,red)){.bg-yellow-500\/\[0\.08\]{background-color:color-mix(in oklab,var(--color-yellow-500) 8%,transparent)}}.bg-gradient-to-br{--tw-gradient-position:to bottom right in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.bg-gradient-to-r{--tw-gradient-position:to right in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.from-amber-600{--tw-gradient-from:var(--color-amber-600);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.from-green-500\/\[0\.12\]{--tw-gradient-from:#00c7581f}@supports (color:color-mix(in lab,red,red)){.from-green-500\/\[0\.12\]{--tw-gradient-from:color-mix(in oklab, var(--color-green-500) 12%, transparent)}}.from-green-500\/\[0\.12\]{--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.from-yellow-500\/10{--tw-gradient-from:#edb2001a}@supports (color:color-mix(in lab,red,red)){.from-yellow-500\/10{--tw-gradient-from:color-mix(in oklab, var(--color-yellow-500) 10%, transparent)}}.from-yellow-500\/10{--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.to-amber-700{--tw-gradient-to:var(--color-amber-700);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.to-green-500\/\[0\.04\]{--tw-gradient-to:#00c7580a}@supports (color:color-mix(in lab,red,red)){.to-green-500\/\[0\.04\]{--tw-gradient-to:color-mix(in oklab, var(--color-green-500) 4%, transparent)}}.to-green-500\/\[0\.04\]{--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.to-orange-600\/\[0\.08\]{--tw-gradient-to:#f0510014}@supports (color:color-mix(in lab,red,red)){.to-orange-600\/\[0\.08\]{--tw-gradient-to:color-mix(in oklab, var(--color-orange-600) 8%, transparent)}}.to-orange-600\/\[0\.08\]{--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.object-contain{object-fit:contain}.object-cover{object-fit:cover}.p-0{padding:calc(var(--spacing) * 0)}.p-2{padding:calc(var(--spacing) * 2)}.p-3{padding:calc(var(--spacing) * 3)}.p-3\.5{padding:calc(var(--spacing) * 3.5)}.p-4{padding:calc(var(--spacing) * 4)}.p-5{padding:calc(var(--spacing) * 5)}.p-10{padding:calc(var(--spacing) * 10)}.p-\[10px_12px\]{padding:10px 12px}.px-1{padding-inline:calc(var(--spacing) * 1)}.px-1\.5{padding-inline:calc(var(--spacing) * 1.5)}.px-2{padding-inline:calc(var(--spacing) * 2)}.px-2\.5{padding-inline:calc(var(--spacing) * 2.5)}.px-3{padding-inline:calc(var(--spacing) * 3)}.px-3\.5{padding-inline:calc(var(--spacing) * 3.5)}.px-4{padding-inline:calc(var(--spacing) * 4)}.px-4\.5{padding-inline:calc(var(--spacing) * 4.5)}.px-5{padding-inline:calc(var(--spacing) * 5)}.px-6{padding-inline:calc(var(--spacing) * 6)}.px-10{padding-inline:calc(var(--spacing) * 10)}.px-\[5px\]{padding-inline:5px}.px-\[7px\]{padding-inline:7px}.py-0\.5{padding-block:calc(var(--spacing) * .5)}.py-1{padding-block:calc(var(--spacing) * 1)}.py-1\.5{padding-block:calc(var(--spacing) * 1.5)}.py-2{padding-block:calc(var(--spacing) * 2)}.py-2\.5{padding-block:calc(var(--spacing) * 2.5)}.py-3{padding-block:calc(var(--spacing) * 3)}.py-3\.5{padding-block:calc(var(--spacing) * 3.5)}.py-4{padding-block:calc(var(--spacing) * 4)}.py-5{padding-block:calc(var(--spacing) * 5)}.py-6{padding-block:calc(var(--spacing) * 6)}.py-7\.5{padding-block:calc(var(--spacing) * 7.5)}.py-10{padding-block:calc(var(--spacing) * 10)}.py-12{padding-block:calc(var(--spacing) * 12)}.py-16{padding-block:calc(var(--spacing) * 16)}.py-20{padding-block:calc(var(--spacing) * 20)}.py-\[5px\]{padding-block:5px}.py-\[7px\]{padding-block:7px}.py-px{padding-block:1px}.pt-1{padding-top:calc(var(--spacing) * 1)}.pt-1\.5{padding-top:calc(var(--spacing) * 1.5)}.pt-2{padding-top:calc(var(--spacing) * 2)}.pt-2\.5{padding-top:calc(var(--spacing) * 2.5)}.pb-0{padding-bottom:calc(var(--spacing) * 0)}.pb-2{padding-bottom:calc(var(--spacing) * 2)}.pl-2{padding-left:calc(var(--spacing) * 2)}.pl-3{padding-left:calc(var(--spacing) * 3)}.text-center{text-align:center}.text-left{text-align:left}.text-right{text-align:right}.align-middle{vertical-align:middle}.font-mono{font-family:var(--font-mono)}.text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.text-5xl{font-size:var(--text-5xl);line-height:var(--tw-leading,var(--text-5xl--line-height))}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\[7px\]{font-size:7px}.text-\[8px\]{font-size:8px}.text-\[9px\]{font-size:9px}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.text-\[13px\]{font-size:13px}.text-\[22px\]{font-size:22px}.text-\[56px\]{font-size:56px}.leading-none{--tw-leading:1;line-height:1}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.leading-snug{--tw-leading:var(--leading-snug);line-height:var(--leading-snug)}.leading-tight{--tw-leading:var(--leading-tight);line-height:var(--leading-tight)}.font-black{--tw-font-weight:var(--font-weight-black);font-weight:var(--font-weight-black)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-extrabold{--tw-font-weight:var(--font-weight-extrabold);font-weight:var(--font-weight-extrabold)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-normal{--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-tight{--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.tracking-wide{--tw-tracking:var(--tracking-wide);letter-spacing:var(--tracking-wide)}.tracking-wider{--tw-tracking:var(--tracking-wider);letter-spacing:var(--tracking-wider)}.text-ellipsis{text-overflow:ellipsis}.whitespace-nowrap{white-space:nowrap}.text-\[var\(--accent-primary\)\]{color:var(--accent-primary)}.text-\[var\(--accent-primary-light\)\]{color:var(--accent-primary-light)}.text-accent{color:var(--color-accent)}.text-accent-light{color:var(--color-accent-light)}.text-amber-500{color:var(--color-amber-500)}.text-amber-700{color:var(--color-amber-700)}.text-blue-400{color:var(--color-blue-400)}.text-border-subtle{color:var(--color-border-subtle)}.text-current{color:currentColor}.text-emerald-500{color:var(--color-emerald-500)}.text-green-300{color:var(--color-green-300)}.text-green-400{color:var(--color-green-400)}.text-green-500{color:var(--color-green-500)}.text-indigo-400{color:var(--color-indigo-400)}.text-inherit{color:inherit}.text-neutral-500{color:var(--color-neutral-500)}.text-orange-400{color:var(--color-orange-400)}.text-orange-500{color:var(--color-orange-500)}.text-red-400{color:var(--color-red-400)}.text-red-500{color:var(--color-red-500)}.text-slate-100{color:var(--color-slate-100)}.text-slate-200{color:var(--color-slate-200)}.text-slate-400{color:var(--color-slate-400)}.text-slate-500{color:var(--color-slate-500)}.text-slate-600{color:var(--color-slate-600)}.text-slate-700{color:var(--color-slate-700)}.text-slate-800{color:var(--color-slate-800)}.text-text-muted{color:var(--color-text-muted)}.text-text-primary{color:var(--color-text-primary)}.text-text-secondary{color:var(--color-text-secondary)}.text-violet-400{color:var(--color-violet-400)}.text-violet-500{color:var(--color-violet-500)}.text-violet-600{color:var(--color-violet-600)}.text-white{color:var(--color-white)}.text-yellow-300{color:var(--color-yellow-300)}.text-yellow-400{color:var(--color-yellow-400)}.text-yellow-500{color:var(--color-yellow-500)}.uppercase{text-transform:uppercase}.italic{font-style:italic}.not-italic{font-style:normal}.underline{text-decoration-line:underline}.opacity-20{opacity:.2}.opacity-30{opacity:.3}.opacity-35{opacity:.35}.opacity-40{opacity:.4}.opacity-45{opacity:.45}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.opacity-70{opacity:.7}.opacity-75{opacity:.75}.opacity-80{opacity:.8}.opacity-85{opacity:.85}.opacity-100{opacity:1}.shadow{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_-4px_16px_rgba\(0\,0\,0\,0\.3\)\]{--tw-shadow:0 -4px 16px var(--tw-shadow-color,#0000004d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_0_6px_rgba\(34\,197\,94\,0\.3\)\]{--tw-shadow:0 0 6px var(--tw-shadow-color,#22c55e4d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_1px_3px_rgba\(0\,0\,0\,0\.3\)\]{--tw-shadow:0 1px 3px var(--tw-shadow-color,#0000004d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_8px_32px_rgba\(0\,0\,0\,0\.3\)\]{--tw-shadow:0 8px 32px var(--tw-shadow-color,#0000004d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_10px_30px_rgba\(0\,0\,0\,0\.8\)\]{--tw-shadow:0 10px 30px var(--tw-shadow-color,#000c);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_20px_40px_rgba\(0\,0\,0\,0\.4\)\]{--tw-shadow:0 20px 40px var(--tw-shadow-color,#0006);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.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-\[30px\]{--tw-backdrop-blur:blur(30px);-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.backdrop-blur-lg{--tw-backdrop-blur:blur(var(--blur-lg));-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(var(--blur-sm));-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(var(--blur-xl));-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,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[background\]{transition-property:background;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[left\]{transition-property:left;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[width\]{transition-property:width;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.duration-150{--tw-duration:.15s;transition-duration:.15s}.duration-200{--tw-duration:.2s;transition-duration:.2s}.duration-300{--tw-duration:.3s;transition-duration:.3s}.duration-500{--tw-duration:.5s;transition-duration:.5s}.duration-\[600ms\]{--tw-duration:.6s;transition-duration:.6s}.ease-in-out{--tw-ease:var(--ease-in-out);transition-timing-function:var(--ease-in-out)}.ease-out{--tw-ease:var(--ease-out);transition-timing-function:var(--ease-out)}.outline-none{--tw-outline-style:none;outline-style:none}.select-none{-webkit-user-select:none;user-select:none}@media (hover:hover){.hover\:border-border-default:hover{border-color:var(--color-border-default)}.hover\:bg-bg-glass-hover:hover{background-color:var(--color-bg-glass-hover)}.hover\:bg-white\/\[0\.15\]:hover{background-color:#ffffff26}@supports (color:color-mix(in lab,red,red)){.hover\:bg-white\/\[0\.15\]:hover{background-color:color-mix(in oklab,var(--color-white) 15%,transparent)}}.hover\:opacity-100:hover{opacity:1}.hover\:shadow-glow:hover{--tw-shadow:0 0 24px var(--tw-shadow-color,#6366f126);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}}.focus\:border-accent:focus{border-color:var(--color-accent)}}:root{--bg-primary:#0a0e1a;--bg-secondary:#111827;--bg-card:#111827b3;--bg-glass:#ffffff0a;--bg-glass-hover:#ffffff14;--surface-primary:#0f1419;--surface-secondary:#151b24;--border-subtle:#ffffff0f;--border-default:#ffffff1a;--border-accent:#6366f166;--text-primary:#f1f5f9;--text-secondary:#94a3b8;--text-muted:#64748b;--accent-primary:#6366f1;--accent-primary-light:#818cf8;--accent-secondary:#06b6d4;--accent-gradient:linear-gradient(135deg, #6366f1, #06b6d4);--status-online:#22c55e;--status-idle:#eab308;--status-busy:#f97316;--status-error:#ef4444;--status-offline:#64748b;--shadow-sm:0 1px 2px #0000004d;--shadow-md:0 4px 12px #0006;--shadow-lg:0 8px 32px #00000080;--shadow-glow:0 0 24px #6366f126;--radius-sm:6px;--radius-md:10px;--radius-lg:16px;--radius-xl:24px;--font:"Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;--transition:.2s cubic-bezier(.4, 0, .2, 1)}*,:before,:after{box-sizing:border-box;margin:0;padding:0}html,body,#root{height:100%;margin:0;padding:0;overflow:hidden}body{font-family:var(--font);background:var(--bg-primary);color:var(--text-primary);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;overscroll-behavior:none;line-height:1.6}a{color:var(--accent-primary-light);transition:color var(--transition);text-decoration:none}a:hover{color:var(--accent-secondary)}.chat-markdown{font-size:inherit;white-space:normal;word-break:break-word;overflow-wrap:anywhere;min-width:0;line-height:1.6}.chat-markdown p{margin:0 0 .6em}.chat-markdown p:first-child{margin-top:0}.chat-markdown p:last-child{margin-bottom:0}.chat-markdown strong{font-weight:700}.chat-markdown em{font-style:italic}.chat-markdown code{color:var(--accent-primary-light);background:#ffffff14;border-radius:4px;padding:.15em .35em;font-family:ui-monospace,Cascadia Code,Source Code Pro,Menlo,monospace;font-size:.9em}.chat-markdown pre{background:#00000059;border-radius:8px;margin:.5em 0;padding:12px 14px;font-size:.88em;overflow-x:auto}.chat-markdown pre code{color:inherit;background:0 0;padding:0}.chat-markdown ul,.chat-markdown ol{margin:.4em 0;padding-left:1.4em}.chat-markdown li{margin:.2em 0}.chat-markdown h1,.chat-markdown h2,.chat-markdown h3{margin:.75em 0 .35em;font-weight:700}.chat-markdown h1{font-size:1.25em}.chat-markdown h2{font-size:1.1em}.chat-markdown h3{font-size:1em}.chat-markdown blockquote{border-left:3px solid var(--border-default);color:var(--text-secondary);margin:.5em 0;padding-left:1em}.chat-markdown .markdown-alert{border-left:.25em solid var(--color-border-default,var(--border-default));color:inherit;margin:.5em 0 1em;padding:.5rem 1em}.chat-markdown .markdown-alert>:last-child{margin-bottom:0!important}.chat-markdown .markdown-alert .markdown-alert-title{align-items:center;font-size:14px;font-weight:500;line-height:1;display:flex}.chat-markdown .markdown-alert .markdown-alert-title svg.octicon{fill:currentColor;margin-right:8px}.chat-markdown .markdown-alert-note{border-left-color:var(--accent-primary)}.chat-markdown .markdown-alert-note .markdown-alert-title{color:var(--accent-primary-light)}.chat-markdown .markdown-alert-tip{border-left-color:var(--status-online)}.chat-markdown .markdown-alert-tip .markdown-alert-title{color:var(--status-online)}.chat-markdown .markdown-alert-important{border-left-color:#a371f7}.chat-markdown .markdown-alert-important .markdown-alert-title{color:#a371f7}.chat-markdown .markdown-alert-warning{border-left-color:var(--status-idle)}.chat-markdown .markdown-alert-warning .markdown-alert-title{color:var(--status-idle)}.chat-markdown .markdown-alert-caution{border-left-color:var(--status-error)}.chat-markdown .markdown-alert-caution .markdown-alert-title{color:var(--status-error)}.chat-markdown table{border-collapse:collapse;width:100%;margin:.5em 0;font-size:.95em}.chat-markdown th,.chat-markdown td{border:1px solid var(--border-subtle);text-align:left;padding:.35em .6em}.chat-markdown th{background:#ffffff0f;font-weight:600}.app-layout{height:100%;min-height:0;display:flex;overflow:hidden}.sidebar{background:var(--bg-secondary);border-right:1px solid var(--border-subtle);z-index:30;flex-direction:column;width:260px;padding:24px 16px;display:flex;position:fixed;top:0;bottom:0;left:0;overflow:hidden auto}.sidebar-logo{border-bottom:1px solid var(--border-subtle);align-items:center;gap:10px;margin-bottom:24px;padding:0 8px 24px;display:flex}.sidebar-logo span{background:var(--accent-gradient);-webkit-text-fill-color:transparent;-webkit-background-clip:text;background-clip:text;font-size:20px;font-weight:700}.sidebar-nav{flex-direction:column;flex:1;gap:4px;display:flex}.nav-item{border-radius:var(--radius-md);color:var(--text-secondary);cursor:pointer;transition:all var(--transition);border:1px solid #0000;align-items:center;gap:10px;padding:10px 12px;font-size:14px;font-weight:500;display:flex}.nav-item:hover{background:var(--bg-glass-hover);color:var(--text-primary)}.nav-item.active{color:var(--accent-primary-light);border-color:var(--border-accent);background:#6366f11a}.nav-icon{text-align:center;width:22px;font-size:18px}.sidebar{transition:width .2s,padding .2s}.main-content{transition:margin-left .2s}.sidebar-collapsed .sidebar{overflow:hidden;width:56px!important;padding:16px 8px!important}.sidebar-collapsed .main-content{margin-left:56px}@media (max-width:768px){.sidebar-collapsed .main-content{margin-left:0}}.dashboard-header{box-sizing:border-box;border-bottom:1px solid var(--border-subtle);background:var(--surface-primary);justify-content:space-between;align-items:center;padding:16px 24px;animation:.3s ease-out forwards fadeIn;display:flex}.header-title{color:var(--text-primary);letter-spacing:-.02em;align-items:center;gap:10px;margin:0;font-size:18px;font-weight:700;display:flex}.header-count-mobile{display:none}.header-subtitle{color:var(--text-muted);margin:4px 0 0;font-size:13px;display:flex}.page-content{flex:1;padding:20px 24px;animation:.4s ease-out forwards fadeIn;overflow-y:auto}.main-content{flex-direction:column;flex:1;min-height:0;margin-left:260px;padding:0;display:flex;overflow:hidden}.main-content:has(.page-dashboard) .main-content-inner,.main-content:has(.page-ide) .main-content-inner{overflow:hidden}.main-content-inner{flex-direction:column;flex:1;min-height:0;display:flex;overflow:auto}.page-header{margin-bottom:32px}.page-header h1{letter-spacing:-.02em;margin-bottom:6px;font-size:28px;font-weight:700}.page-header p{color:var(--text-secondary);font-size:15px}.card{background:var(--bg-card);border:1px solid var(--border-subtle);border-radius:var(--radius-lg);-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);transition:all var(--transition);padding:24px}.card:hover{border-color:var(--border-default);box-shadow:var(--shadow-glow)}.card-header{justify-content:space-between;align-items:center;margin-bottom:20px;display:flex}.card-title{letter-spacing:-.01em;font-size:16px;font-weight:600}.btn{border-radius:var(--radius-md);font-size:14px;font-weight:600;font-family:var(--font);cursor:pointer;transition:all var(--transition);letter-spacing:-.01em;border:1px solid #0000;align-items:center;gap:8px;padding:10px 20px;display:inline-flex}.btn-primary{background:var(--accent-gradient);color:#fff;border:none;box-shadow:0 2px 8px #6366f14d}.btn-primary:hover{transform:translateY(-1px);box-shadow:0 4px 16px #6366f166}.btn-secondary{background:var(--bg-glass);color:var(--text-primary);border:1px solid var(--border-default)}.btn-secondary:hover{background:var(--bg-glass-hover);border-color:var(--border-accent)}.btn-sm{padding:6px 14px;font-size:13px}.empty-state{text-align:center;color:var(--text-muted);padding:60px 20px}.login-page{background:var(--bg-primary);justify-content:center;align-items:center;min-height:100vh;display:flex;position:relative;overflow:hidden}.login-page:before{content:"";pointer-events:none;background:radial-gradient(circle,#6366f126,#0000 60%);width:600px;height:600px;position:absolute;top:-200px;right:-100px}.login-page:after{content:"";pointer-events:none;background:radial-gradient(circle,#06b6d41a,#0000 60%);width:500px;height:500px;position:absolute;bottom:-150px;left:-100px}.login-card{background:var(--bg-card);border:1px solid var(--border-subtle);border-radius:var(--radius-xl);-webkit-backdrop-filter:blur(16px);backdrop-filter:blur(16px);width:100%;max-width:420px;box-shadow:var(--shadow-lg);z-index:1;padding:48px;position:relative}.login-card h1{text-align:center;background:var(--accent-gradient);-webkit-text-fill-color:transparent;-webkit-background-clip:text;background-clip:text;margin-bottom:8px;font-size:28px;font-weight:800}.login-card p{text-align:center;color:var(--text-secondary);margin-bottom:32px;font-size:15px}.login-btn{border-radius:var(--radius-md);width:100%;font-size:15px;font-weight:600;font-family:var(--font);cursor:pointer;transition:all var(--transition);border:1px solid var(--border-default);background:var(--bg-glass);color:var(--text-primary);justify-content:center;align-items:center;gap:10px;margin-bottom:12px;padding:14px;display:flex}.login-btn:hover{background:var(--bg-glass-hover);border-color:var(--border-accent);box-shadow:var(--shadow-md);transform:translateY(-1px)}.login-btn svg{width:20px;height:20px}@keyframes pulse-dot{0%,to{opacity:1}50%{opacity:.4}}@keyframes pulse{0%,to{opacity:1}50%{opacity:.3}}@keyframes fadeIn{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}.fade-in{animation:.3s ease-out fadeIn}.mobile-menu-btn{z-index:100;border-radius:var(--radius-sm);background:var(--bg-secondary);border:1px solid var(--border-subtle);width:36px;height:36px;color:var(--text-primary);cursor:pointer;box-shadow:var(--shadow-sm);flex-direction:column;justify-content:center;align-items:center;gap:4px;display:none;position:fixed;top:6px;left:12px}.sidebar-overlay{z-index:25;background:#00000080;display:none;position:fixed;top:0;right:0;bottom:0;left:0}.sidebar-header{border-bottom:1px solid var(--border-subtle);justify-content:space-between;align-items:center;margin-bottom:24px;padding:0 8px 24px;display:flex}.sidebar .sidebar-logo{border-bottom:none;margin-bottom:0;padding:0}.sidebar-close-btn{border-radius:var(--radius-sm);background:var(--bg-glass);border:1px solid var(--border-subtle);width:36px;height:36px;color:var(--text-primary);cursor:pointer;justify-content:center;align-items:center;font-size:18px;display:none}.mobile-menu-icon{background:currentColor;border-radius:1px;width:20px;height:2px;display:block}@media (max-width:768px){.mobile-menu-btn{display:flex}.sidebar{transition:transform .25s ease-out;transform:translate(-100%)}.sidebar.sidebar-open{transform:translate(0)}.sidebar-close-btn{display:flex}.sidebar-collapsed .sidebar-close-btn{display:none}.sidebar-overlay{display:block}.app-layout.mobile-menu-open .mobile-menu-btn{visibility:hidden}.main-content{margin-left:0;padding:0}.desktop-only{display:none!important}.page-dashboard{padding-top:0}.dashboard-header{box-sizing:border-box;min-height:48px;padding:8px 12px 8px 56px}.header-title{margin:0;font-size:14px}.header-subtitle{display:none!important}.header-count-mobile{display:inline!important}.dashboard-header .btn-sm{min-width:32px!important;min-height:32px!important;padding:4px 8px!important;font-size:11px!important}.page-content{padding:16px 12px}.page-header{margin-bottom:16px;padding-left:44px}.page-header h1{font-size:20px}.page-header p{font-size:13px}}.dashboard-agent-tabs{flex-shrink:0;min-height:72px}.dashboard-agent-tabs::-webkit-scrollbar{height:4px}.dashboard-agent-tabs::-webkit-scrollbar-thumb{background:var(--border-default);border-radius:4px}::-webkit-scrollbar{width:6px;height:6px}::-webkit-scrollbar-track{background:0 0}::-webkit-scrollbar-thumb{background:var(--border-default);border-radius:10px}::-webkit-scrollbar-thumb:hover{background:var(--text-muted)}@keyframes spin{to{transform:rotate(360deg)}}.agent-tab-working{animation:2s ease-in-out infinite tab-pulse;border-image:linear-gradient(135deg,#10b981,#06b6d4) 1!important}@keyframes tab-pulse{0%,to{box-shadow:0 0 #10b9814d}50%{box-shadow:0 0 20px 2px #10b98126}}.agent-tab-waiting{animation:1.5s ease-in-out infinite tab-pulse-warn;border-image:linear-gradient(135deg,#f59e0b,#ef4444) 1!important}@keyframes tab-pulse-warn{0%,to{box-shadow:0 0 #f59e0b4d}50%{box-shadow:0 0 20px 2px #f59e0b26}}.typing-indicator{align-items:center;gap:6px;padding:14px 20px;display:flex}.typing-indicator .dot{background:var(--accent-primary-light);border-radius:50%;width:8px;height:8px;animation:1.4s ease-in-out infinite typing-bounce}.typing-indicator .dot:nth-child(2){animation-delay:.2s}.typing-indicator .dot:nth-child(3){animation-delay:.4s}@keyframes typing-bounce{0%,80%,to{opacity:.4;transform:translateY(0)}40%{opacity:1;transform:translateY(-8px)}}.status-pill{letter-spacing:.04em;text-transform:uppercase;border-radius:10px;align-items:center;gap:4px;padding:2px 8px;font-size:9px;font-weight:700;display:inline-flex}.status-pill.idle{color:#94a3b8;background:#94a3b81a}.status-pill.working{color:#10b981;background:#10b98126}.tab-spinner{border:2px solid #10b98133;border-top-color:#10b981;border-radius:50%;flex-shrink:0;width:12px;height:12px;animation:.8s linear infinite spin}.status-pill.waiting{color:#f59e0b;background:#f59e0b26}.status-bar{border-top:1px solid var(--border-subtle);background:var(--bg-secondary);align-items:center;gap:8px;padding:6px 20px;font-size:11px;font-weight:600;transition:all .3s;display:flex}.status-bar.generating{color:#10b981;background:#10b9810f;border-top-color:#10b98133}.status-bar.waiting_approval{color:#f59e0b;background:#f59e0b0f;border-top-color:#f59e0b33}.status-bar.idle{color:var(--text-muted)}.status-bar .status-dot{border-radius:50%;flex-shrink:0;width:6px;height:6px}.status-bar.generating .status-dot{background:#10b981;animation:1.5s ease-in-out infinite pulse-dot}.status-bar.waiting_approval .status-dot{background:#f59e0b;animation:1s ease-in-out infinite pulse-dot}.status-bar.idle .status-dot{background:#64748b}.desktop-only{display:none}@media (min-width:769px){.desktop-only{display:inline}}.empty-dashboard{opacity:.6;flex-direction:column;flex:1;justify-content:center;align-items:center;gap:24px;padding:40px;display:flex}.empty-dashboard .glow-orb{background:radial-gradient(circle,#6366f133,#0000 70%);border-radius:50%;justify-content:center;align-items:center;width:120px;height:120px;font-size:48px;animation:3s ease-in-out infinite orb-float;display:flex}@keyframes orb-float{0%,to{transform:translateY(0)}50%{transform:translateY(-10px)}}@media (max-width:768px){.page-dashboard{flex:1;min-height:0}.dashboard-header{min-height:48px;padding:8px 12px 8px 56px}.dashboard-agent-tabs{scroll-snap-type:x mandatory;-webkit-overflow-scrolling:touch;gap:6px;min-height:60px;padding:8px}.dashboard-agent-tabs>div{scroll-snap-align:start;min-width:140px;max-width:180px;padding:10px 12px}.page-dashboard .chat-markdown{font-size:13px}.dashboard-input-area{padding-bottom:calc(12px + env(safe-area-inset-bottom,0px))}.status-bar{padding:4px 12px;font-size:10px}.page-dashboard .card.fade-in{border-radius:0;width:100%;max-width:100%;height:100%;max-height:100%}.page-dashboard [style*=aspectRatio]{max-height:100px;aspect-ratio:3!important}.dashboard-header button,.dashboard-header a{justify-content:center;align-items:center;min-width:32px;min-height:32px;display:flex}}@media (max-width:375px){.dashboard-header{padding:8px 8px 8px 52px}.dashboard-agent-tabs>div{min-width:120px;max-width:150px}}@media (display-mode:standalone){.landing-nav{display:none}body{-webkit-user-select:none;user-select:none;padding-top:env(safe-area-inset-top,0px)}.sidebar{padding-top:calc(24px + env(safe-area-inset-top,0px))}.mobile-menu-btn{top:calc(6px + env(safe-area-inset-top,0px))}.chat-markdown,.agent-chat-bubble{-webkit-user-select:text;user-select:text}}@media (hover:none){.feature-card:hover,.step:hover,.pricing-card:hover,.supported-item:hover{box-shadow:none!important;transform:none!important}.agent-chat-bubble:hover{transform:none!important}}@media (max-height:500px) and (max-width:900px){.dashboard-agent-tabs{min-height:52px!important}.status-bar{padding:2px 12px!important}}.machine-card{-webkit-backdrop-filter:blur(16px);backdrop-filter:blur(16px);background:#0f172a99;border:1px solid #8b5cf61f;border-radius:14px;transition:all .25s cubic-bezier(.4,0,.2,1);position:relative;overflow:hidden}.machine-card.offline{border-color:#ffffff0a}.machine-card:hover{border-color:#8b5cf640;box-shadow:0 4px 20px #8b5cf614}.machine-accent{background:linear-gradient(90deg,#8b5cf6,#6366f1 40%,#3b82f6);height:2px}.machine-accent.offline{background:#64748b33}.machine-btn{color:#94a3b8;cursor:pointer;font-size:11px;font-family:var(--font);background:#ffffff0a;border:1px solid #ffffff14;border-radius:6px;padding:4px 10px;transition:all .2s}.machine-btn:hover{background:#ffffff14;border-color:#ffffff26}.machine-btn-primary{color:#fff;cursor:pointer;font-size:12px;font-weight:600;font-family:var(--font);background:linear-gradient(135deg,#7c3aed,#6366f1);border:none;border-radius:8px;padding:8px 16px;transition:all .2s;box-shadow:0 2px 8px #7c3aed33}.machine-btn-primary:hover{transform:translateY(-1px);box-shadow:0 4px 16px #7c3aed4d}.machine-btn-back{color:#94a3b8;cursor:pointer;font-size:14px;font-family:var(--font);background:#ffffff0a;border:1px solid #ffffff14;border-radius:8px;padding:6px 12px;transition:all .2s}.machine-btn-back:hover{background:#ffffff14}.machine-input{color:#e2e8f0;font-size:12px;font-family:var(--font);background:#0f172a99;border:1px solid #ffffff14;border-radius:8px;outline:none;padding:8px 12px;transition:border-color .2s}.machine-input:focus{border-color:#8b5cf666}.p2p-overlay{z-index:10;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);background:#080c16d1;border-radius:14px;flex-direction:column;justify-content:center;align-items:center;gap:10px;animation:.3s ease-out fadeIn;display:flex;position:absolute;top:0;right:0;bottom:0;left:0}.machine-tabs{gap:2px;margin-top:14px;display:flex}.machine-tab{cursor:pointer;color:#64748b;font-size:13px;font-weight:500;font-family:var(--font);background:0 0;border:none;border-bottom:2px solid #0000;border-radius:8px 8px 0 0;padding:8px 16px;transition:all .2s}.machine-tab.active{color:#a78bfa;background:#8b5cf61f;border-bottom-color:#8b5cf6}.machine-tab:hover:not(.active){color:#94a3b8;background:#ffffff08}.machine-tab .tab-count{border-radius:10px;margin-left:6px;padding:1px 6px;font-size:10px}.machine-tab.active .tab-count{color:#c4b5fd;background:#8b5cf633}.machine-tab:not(.active) .tab-count{color:#64748b;background:#ffffff0a}@media (max-width:768px){.machine-card{border-radius:10px}.section-panel{padding:12px 14px}.machine-tabs{-webkit-overflow-scrolling:touch;overflow-x:auto}.machine-tab{white-space:nowrap;padding:6px 12px;font-size:12px}.machine-empty{padding:40px 20px}}.playground-panel{background:var(--bg-card);border:1px solid var(--border-accent);border-radius:var(--radius-lg);animation:.3s ease-out fadeIn;overflow:hidden}.playground-header{border-bottom:1px solid var(--border-subtle);background:#6366f10a;justify-content:space-between;align-items:center;padding:16px 20px;display:flex}.playground-header h3{align-items:center;gap:8px;margin:0;font-size:15px;font-weight:700;display:flex}.playground-body{padding:20px}.playground-presets{flex-wrap:wrap;gap:6px;margin-bottom:16px;display:flex}.preset-btn{cursor:pointer;border:1px solid var(--border-subtle);color:var(--text-secondary);font-size:12px;font-weight:500;font-family:var(--font);background:#ffffff08;border-radius:6px;padding:5px 12px;transition:all .15s}.preset-btn:hover{border-color:var(--accent-primary);color:var(--accent-primary);background:#6366f10f}.preset-btn.active{border-color:var(--accent-primary);color:var(--accent-primary);background:#6366f11a}.preset-method{opacity:.7;margin-right:4px;font-size:10px;font-weight:700}.playground-url-bar{gap:8px;margin-bottom:12px;display:flex}.playground-method-select{border:1px solid var(--border-subtle);cursor:pointer;width:100px;font-size:13px;font-weight:700;font-family:var(--font);background:#0000004d;border-radius:8px;outline:none;padding:10px 12px;transition:border-color .2s}.playground-method-select:focus{border-color:var(--accent-primary)}.playground-method-select.method-get{color:#22c55e}.playground-method-select.method-post{color:#3b82f6}.playground-method-select.method-patch{color:#f59e0b}.playground-method-select.method-delete{color:#ef4444}.playground-path-input{border:1px solid var(--border-subtle);color:var(--text-primary);box-sizing:border-box;background:#0000004d;border-radius:8px;outline:none;flex:1;padding:10px 14px;font-family:ui-monospace,monospace;font-size:13px;transition:border-color .2s}.playground-path-input:focus{border-color:var(--accent-primary)}.playground-send-btn{cursor:pointer;background:var(--accent-gradient);color:#fff;min-width:80px;font-size:13px;font-weight:700;font-family:var(--font);border:none;border-radius:8px;padding:10px 20px;transition:all .2s}.playground-send-btn:hover:not(:disabled){transform:translateY(-1px);box-shadow:0 4px 16px #6366f166}.playground-send-btn:disabled{color:var(--text-muted);cursor:wait;background:#64748b33}.playground-body-editor{border:1px solid var(--border-subtle);width:100%;color:var(--text-primary);resize:vertical;box-sizing:border-box;background:#0000004d;border-radius:8px;outline:none;min-height:100px;padding:12px 14px;font-family:ui-monospace,monospace;font-size:13px;line-height:1.5;transition:border-color .2s}.playground-body-editor:focus{border-color:var(--accent-primary)}.playground-response{border:1px solid var(--border-subtle);border-radius:10px;margin-top:16px;animation:.25s ease-out fadeIn;overflow:hidden}.playground-response-bar{border-bottom:1px solid var(--border-subtle);background:#0003;justify-content:space-between;align-items:center;padding:10px 14px;display:flex}.playground-response-status{align-items:center;gap:10px;display:flex}.status-dot{border-radius:50%;width:8px;height:8px;display:inline-block}.playground-response-body{color:var(--text-secondary);white-space:pre-wrap;word-break:break-all;background:#00000026;max-height:400px;margin:0;padding:14px;font-family:ui-monospace,monospace;font-size:12px;line-height:1.6;overflow:auto}.json-key{color:#818cf8}.json-string{color:#22c55e}.json-number{color:#f59e0b}.json-bool{color:#06b6d4}.json-null{color:#64748b;font-style:italic}.playground-toolbar{gap:6px;margin-top:8px;display:flex}.playground-tool-btn{cursor:pointer;border:1px solid var(--border-subtle);color:var(--text-muted);font-size:11px;font-family:var(--font);background:0 0;border-radius:6px;padding:4px 10px;transition:all .15s}.playground-tool-btn:hover{border-color:var(--accent-primary);color:var(--accent-primary-light);background:#6366f10f}.apikey-card{background:var(--bg-glass);border:1px solid var(--border-subtle);border-radius:14px;padding:18px 20px;transition:all .2s}.apikey-card:hover{border-color:var(--border-default);background:var(--bg-glass-hover)}.apikey-scope-tag{border-radius:6px;padding:3px 10px;font-size:11px;font-weight:500;display:inline-block}.apikey-created-banner{background:#22c55e14;border:1px solid #22c55e4d;border-radius:14px;margin-bottom:20px;padding:20px;animation:.3s ease-out fadeIn}.history-panel{border-top:1px solid var(--border-subtle);margin-top:16px;padding-top:12px}.history-item{cursor:pointer;color:var(--text-muted);border-radius:6px;align-items:center;gap:8px;padding:6px 10px;font-size:12px;transition:all .15s;display:flex}.history-item:hover{background:var(--bg-glass-hover);color:var(--text-secondary)}.history-method{text-align:center;border-radius:4px;min-width:36px;padding:2px 6px;font-size:10px;font-weight:700}.history-method.get{color:#22c55e;background:#22c55e26}.history-method.post{color:#3b82f6;background:#3b82f626}.history-method.patch{color:#f59e0b;background:#f59e0b26}.history-method.delete{color:#ef4444;background:#ef444426}@media (max-width:768px){.playground-url-bar{flex-direction:column}.playground-method-select{width:100%}.playground-presets{flex-wrap:nowrap;padding-bottom:4px;overflow-x:auto}}.admin-select{background:var(--bg-secondary);border:1px solid var(--border-subtle);color:var(--text-primary);border-radius:6px;padding:6px 10px;font-size:13px}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-gradient-position{syntax:"*";inherits:false}@property --tw-gradient-from{syntax:"<color>";inherits:false;initial-value:#0000}@property --tw-gradient-via{syntax:"<color>";inherits:false;initial-value:#0000}@property --tw-gradient-to{syntax:"<color>";inherits:false;initial-value:#0000}@property --tw-gradient-stops{syntax:"*";inherits:false}@property --tw-gradient-via-stops{syntax:"*";inherits:false}@property --tw-gradient-from-position{syntax:"<length-percentage>";inherits:false;initial-value:0%}@property --tw-gradient-via-position{syntax:"<length-percentage>";inherits:false;initial-value:50%}@property --tw-gradient-to-position{syntax:"<length-percentage>";inherits:false;initial-value:100%}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}
|