@thangnm.nip/arouter 0.1.19 → 0.1.21

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (136) hide show
  1. package/.next/standalone/.next/BUILD_ID +1 -1
  2. package/.next/standalone/.next/app-path-routes-manifest.json +4 -3
  3. package/.next/standalone/.next/build-manifest.json +2 -2
  4. package/.next/standalone/.next/routes-manifest.json +6 -0
  5. package/.next/standalone/.next/server/app/(dashboard)/mitm/page.js +1 -1
  6. package/.next/standalone/.next/server/app/(dashboard)/mitm/page_client-reference-manifest.js +1 -1
  7. package/.next/standalone/.next/server/app/(dashboard)/page_client-reference-manifest.js +1 -1
  8. package/.next/standalone/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  9. package/.next/standalone/.next/server/app/_global-error.html +2 -2
  10. package/.next/standalone/.next/server/app/_global-error.rsc +1 -1
  11. package/.next/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  12. package/.next/standalone/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  13. package/.next/standalone/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  14. package/.next/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  15. package/.next/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  16. package/.next/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  17. package/.next/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  18. package/.next/standalone/.next/server/app/_not-found.html +1 -1
  19. package/.next/standalone/.next/server/app/_not-found.rsc +5 -5
  20. package/.next/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +5 -5
  21. package/.next/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  22. package/.next/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +5 -5
  23. package/.next/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  24. package/.next/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  25. package/.next/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  26. package/.next/standalone/.next/server/app/api/cli-tools/antigravity-mitm/alias/route_client-reference-manifest.js +1 -1
  27. package/.next/standalone/.next/server/app/api/cli-tools/antigravity-mitm/console-logs/route_client-reference-manifest.js +1 -1
  28. package/.next/standalone/.next/server/app/api/cli-tools/antigravity-mitm/health/route.js +1 -0
  29. package/.next/standalone/.next/server/app/api/cli-tools/antigravity-mitm/health/route.js.nft.json +1 -0
  30. package/.next/standalone/.next/server/app/api/cli-tools/antigravity-mitm/health/route_client-reference-manifest.js +1 -0
  31. package/.next/standalone/.next/server/app/api/cli-tools/antigravity-mitm/logs/route_client-reference-manifest.js +1 -1
  32. package/.next/standalone/.next/server/app/api/cli-tools/antigravity-mitm/route_client-reference-manifest.js +1 -1
  33. package/.next/standalone/.next/server/app/api/cli-tools/antigravity-mitm/settings/route_client-reference-manifest.js +1 -1
  34. package/.next/standalone/.next/server/app/api/cli-tools/claude-settings/route_client-reference-manifest.js +1 -1
  35. package/.next/standalone/.next/server/app/api/cli-tools/codex-settings/route_client-reference-manifest.js +1 -1
  36. package/.next/standalone/.next/server/app/api/cli-tools/copilot-settings/route_client-reference-manifest.js +1 -1
  37. package/.next/standalone/.next/server/app/api/cli-tools/droid-settings/route_client-reference-manifest.js +1 -1
  38. package/.next/standalone/.next/server/app/api/cli-tools/openclaw-settings/route_client-reference-manifest.js +1 -1
  39. package/.next/standalone/.next/server/app/api/cli-tools/opencode-settings/route_client-reference-manifest.js +1 -1
  40. package/.next/standalone/.next/server/app/api/keys/[id]/route_client-reference-manifest.js +1 -1
  41. package/.next/standalone/.next/server/app/api/keys/route_client-reference-manifest.js +1 -1
  42. package/.next/standalone/.next/server/app/api/locale/route_client-reference-manifest.js +1 -1
  43. package/.next/standalone/.next/server/app/api/models/alias/route_client-reference-manifest.js +1 -1
  44. package/.next/standalone/.next/server/app/api/models/route_client-reference-manifest.js +1 -1
  45. package/.next/standalone/.next/server/app/api/providers/client/route_client-reference-manifest.js +1 -1
  46. package/.next/standalone/.next/server/app/api/providers/route_client-reference-manifest.js +1 -1
  47. package/.next/standalone/.next/server/app/api/settings/route_client-reference-manifest.js +1 -1
  48. package/.next/standalone/.next/server/app/api/usage/[id]/route_client-reference-manifest.js +1 -1
  49. package/.next/standalone/.next/server/app/api/version/route_client-reference-manifest.js +1 -1
  50. package/.next/standalone/.next/server/app/index.html +1 -1
  51. package/.next/standalone/.next/server/app/index.rsc +6 -6
  52. package/.next/standalone/.next/server/app/index.segments/!KGRhc2hib2FyZCk/__PAGE__.segment.rsc +1 -1
  53. package/.next/standalone/.next/server/app/index.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  54. package/.next/standalone/.next/server/app/index.segments/_full.segment.rsc +6 -6
  55. package/.next/standalone/.next/server/app/index.segments/_head.segment.rsc +1 -1
  56. package/.next/standalone/.next/server/app/index.segments/_index.segment.rsc +5 -5
  57. package/.next/standalone/.next/server/app/index.segments/_tree.segment.rsc +2 -2
  58. package/.next/standalone/.next/server/app/mitm.html +1 -1
  59. package/.next/standalone/.next/server/app/mitm.rsc +7 -7
  60. package/.next/standalone/.next/server/app/mitm.segments/!KGRhc2hib2FyZCk/mitm/__PAGE__.segment.rsc +2 -2
  61. package/.next/standalone/.next/server/app/mitm.segments/!KGRhc2hib2FyZCk/mitm.segment.rsc +1 -1
  62. package/.next/standalone/.next/server/app/mitm.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  63. package/.next/standalone/.next/server/app/mitm.segments/_full.segment.rsc +7 -7
  64. package/.next/standalone/.next/server/app/mitm.segments/_head.segment.rsc +1 -1
  65. package/.next/standalone/.next/server/app/mitm.segments/_index.segment.rsc +5 -5
  66. package/.next/standalone/.next/server/app/mitm.segments/_tree.segment.rsc +2 -2
  67. package/.next/standalone/.next/server/app-paths-manifest.json +4 -3
  68. package/.next/standalone/.next/server/chunks/17.js +1 -1
  69. package/.next/standalone/.next/server/pages/404.html +1 -1
  70. package/.next/standalone/.next/server/pages/500.html +2 -2
  71. package/.next/standalone/.next/static/OKSiWxQ9khnSQGLqD-kxU/_buildManifest.js +1 -0
  72. package/.next/standalone/.next/static/chunks/{702-ca3a08e8b35a9ba5.js → 702-5d6a1589c36e347d.js} +1 -1
  73. package/.next/standalone/.next/static/chunks/app/(dashboard)/mitm/page-73f3cb4c6b54b42e.js +7 -0
  74. package/.next/standalone/.next/static/chunks/app/(dashboard)/page-ac9d56490d935e42.js +1 -0
  75. package/.next/standalone/.next/static/chunks/app/_global-error/page-ac9d56490d935e42.js +1 -0
  76. package/.next/standalone/.next/static/chunks/app/api/cli-tools/antigravity-mitm/alias/route-ac9d56490d935e42.js +1 -0
  77. package/.next/standalone/.next/static/chunks/app/api/cli-tools/antigravity-mitm/console-logs/route-ac9d56490d935e42.js +1 -0
  78. package/.next/standalone/.next/static/chunks/app/api/cli-tools/antigravity-mitm/health/route-ac9d56490d935e42.js +1 -0
  79. package/.next/standalone/.next/static/chunks/app/api/cli-tools/antigravity-mitm/logs/route-ac9d56490d935e42.js +1 -0
  80. package/.next/standalone/.next/static/chunks/app/api/cli-tools/antigravity-mitm/route-ac9d56490d935e42.js +1 -0
  81. package/.next/standalone/.next/static/chunks/app/api/cli-tools/antigravity-mitm/settings/route-ac9d56490d935e42.js +1 -0
  82. package/.next/standalone/.next/static/chunks/app/api/cli-tools/claude-settings/route-ac9d56490d935e42.js +1 -0
  83. package/.next/standalone/.next/static/chunks/app/api/cli-tools/codex-settings/route-ac9d56490d935e42.js +1 -0
  84. package/.next/standalone/.next/static/chunks/app/api/cli-tools/copilot-settings/route-ac9d56490d935e42.js +1 -0
  85. package/.next/standalone/.next/static/chunks/app/api/cli-tools/droid-settings/route-ac9d56490d935e42.js +1 -0
  86. package/.next/standalone/.next/static/chunks/app/api/cli-tools/openclaw-settings/route-ac9d56490d935e42.js +1 -0
  87. package/.next/standalone/.next/static/chunks/app/api/cli-tools/opencode-settings/route-ac9d56490d935e42.js +1 -0
  88. package/.next/standalone/.next/static/chunks/app/api/keys/[id]/route-ac9d56490d935e42.js +1 -0
  89. package/.next/standalone/.next/static/chunks/app/api/keys/route-ac9d56490d935e42.js +1 -0
  90. package/.next/standalone/.next/static/chunks/app/api/locale/route-ac9d56490d935e42.js +1 -0
  91. package/.next/standalone/.next/static/chunks/app/api/models/alias/route-ac9d56490d935e42.js +1 -0
  92. package/.next/standalone/.next/static/chunks/app/api/models/route-ac9d56490d935e42.js +1 -0
  93. package/.next/standalone/.next/static/chunks/app/api/providers/client/route-ac9d56490d935e42.js +1 -0
  94. package/.next/standalone/.next/static/chunks/app/api/providers/route-ac9d56490d935e42.js +1 -0
  95. package/.next/standalone/.next/static/chunks/app/api/settings/route-ac9d56490d935e42.js +1 -0
  96. package/.next/standalone/.next/static/chunks/app/api/usage/[id]/route-ac9d56490d935e42.js +1 -0
  97. package/.next/standalone/.next/static/chunks/app/api/version/route-ac9d56490d935e42.js +1 -0
  98. package/.next/standalone/.next/static/chunks/next/dist/client/components/builtin/app-error-ac9d56490d935e42.js +1 -0
  99. package/.next/standalone/.next/static/chunks/next/dist/client/components/builtin/forbidden-ac9d56490d935e42.js +1 -0
  100. package/.next/standalone/.next/static/chunks/next/dist/client/components/builtin/not-found-ac9d56490d935e42.js +1 -0
  101. package/.next/standalone/.next/static/chunks/next/dist/client/components/builtin/unauthorized-ac9d56490d935e42.js +1 -0
  102. package/.next/standalone/.next/static/css/a5a3e88cad1bfc66.css +3 -0
  103. package/.next/standalone/package.json +1 -1
  104. package/bin/arouter.mjs +9 -3
  105. package/package.json +1 -1
  106. package/.next/standalone/.next/static/chunks/app/(dashboard)/mitm/page-92d8f757eb03c60d.js +0 -7
  107. package/.next/standalone/.next/static/chunks/app/(dashboard)/page-419c1820686842ea.js +0 -1
  108. package/.next/standalone/.next/static/chunks/app/_global-error/page-419c1820686842ea.js +0 -1
  109. package/.next/standalone/.next/static/chunks/app/api/cli-tools/antigravity-mitm/alias/route-419c1820686842ea.js +0 -1
  110. package/.next/standalone/.next/static/chunks/app/api/cli-tools/antigravity-mitm/console-logs/route-419c1820686842ea.js +0 -1
  111. package/.next/standalone/.next/static/chunks/app/api/cli-tools/antigravity-mitm/logs/route-419c1820686842ea.js +0 -1
  112. package/.next/standalone/.next/static/chunks/app/api/cli-tools/antigravity-mitm/route-419c1820686842ea.js +0 -1
  113. package/.next/standalone/.next/static/chunks/app/api/cli-tools/antigravity-mitm/settings/route-419c1820686842ea.js +0 -1
  114. package/.next/standalone/.next/static/chunks/app/api/cli-tools/claude-settings/route-419c1820686842ea.js +0 -1
  115. package/.next/standalone/.next/static/chunks/app/api/cli-tools/codex-settings/route-419c1820686842ea.js +0 -1
  116. package/.next/standalone/.next/static/chunks/app/api/cli-tools/copilot-settings/route-419c1820686842ea.js +0 -1
  117. package/.next/standalone/.next/static/chunks/app/api/cli-tools/droid-settings/route-419c1820686842ea.js +0 -1
  118. package/.next/standalone/.next/static/chunks/app/api/cli-tools/openclaw-settings/route-419c1820686842ea.js +0 -1
  119. package/.next/standalone/.next/static/chunks/app/api/cli-tools/opencode-settings/route-419c1820686842ea.js +0 -1
  120. package/.next/standalone/.next/static/chunks/app/api/keys/[id]/route-419c1820686842ea.js +0 -1
  121. package/.next/standalone/.next/static/chunks/app/api/keys/route-419c1820686842ea.js +0 -1
  122. package/.next/standalone/.next/static/chunks/app/api/locale/route-419c1820686842ea.js +0 -1
  123. package/.next/standalone/.next/static/chunks/app/api/models/alias/route-419c1820686842ea.js +0 -1
  124. package/.next/standalone/.next/static/chunks/app/api/models/route-419c1820686842ea.js +0 -1
  125. package/.next/standalone/.next/static/chunks/app/api/providers/client/route-419c1820686842ea.js +0 -1
  126. package/.next/standalone/.next/static/chunks/app/api/providers/route-419c1820686842ea.js +0 -1
  127. package/.next/standalone/.next/static/chunks/app/api/settings/route-419c1820686842ea.js +0 -1
  128. package/.next/standalone/.next/static/chunks/app/api/usage/[id]/route-419c1820686842ea.js +0 -1
  129. package/.next/standalone/.next/static/chunks/app/api/version/route-419c1820686842ea.js +0 -1
  130. package/.next/standalone/.next/static/chunks/next/dist/client/components/builtin/app-error-419c1820686842ea.js +0 -1
  131. package/.next/standalone/.next/static/chunks/next/dist/client/components/builtin/forbidden-419c1820686842ea.js +0 -1
  132. package/.next/standalone/.next/static/chunks/next/dist/client/components/builtin/not-found-419c1820686842ea.js +0 -1
  133. package/.next/standalone/.next/static/chunks/next/dist/client/components/builtin/unauthorized-419c1820686842ea.js +0 -1
  134. package/.next/standalone/.next/static/css/73a57e9fc54d09c4.css +0 -3
  135. package/.next/standalone/.next/static/tDhO-4JppMRLEHylnvHdH/_buildManifest.js +0 -1
  136. /package/.next/standalone/.next/static/{tDhO-4JppMRLEHylnvHdH → OKSiWxQ9khnSQGLqD-kxU}/_ssgManifest.js +0 -0
@@ -0,0 +1,7 @@
1
+ (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[46],{1872:(e,t,s)=>{Promise.resolve().then(s.bind(s,4507))},4507:(e,t,s)=>{"use strict";s.d(t,{default:()=>g});var a=s(5155),r=s(2115);let i={claude:{id:"claude",name:"Claude Code",icon:"terminal",color:"#D97757",description:"Anthropic Claude Code CLI",configType:"env",envVars:{baseUrl:"ANTHROPIC_BASE_URL",model:"ANTHROPIC_MODEL",opusModel:"ANTHROPIC_DEFAULT_OPUS_MODEL",sonnetModel:"ANTHROPIC_DEFAULT_SONNET_MODEL",haikuModel:"ANTHROPIC_DEFAULT_HAIKU_MODEL"},modelAliases:["default","sonnet","opus","haiku","opusplan"],settingsFile:"~/.claude/settings.json",defaultModels:[{id:"opus",name:"Claude Opus",alias:"opus",envKey:"ANTHROPIC_DEFAULT_OPUS_MODEL",defaultValue:"cc/claude-opus-4-6"},{id:"sonnet",name:"Claude Sonnet",alias:"sonnet",envKey:"ANTHROPIC_DEFAULT_SONNET_MODEL",defaultValue:"cc/claude-sonnet-4-6"},{id:"haiku",name:"Claude Haiku",alias:"haiku",envKey:"ANTHROPIC_DEFAULT_HAIKU_MODEL",defaultValue:"cc/claude-haiku-4-5-20251001"}]},openclaw:{id:"openclaw",name:"Open Claw",image:"/providers/openclaw.png",color:"#FF6B35",description:"Open Claw AI Assistant",configType:"custom"},codex:{id:"codex",name:"OpenAI Codex CLI",image:"/providers/codex.png",color:"#10A37F",description:"OpenAI Codex CLI",configType:"custom"},opencode:{id:"opencode",name:"OpenCode",image:"/providers/opencode.png",color:"#E87040",description:"OpenCode AI Terminal Assistant",configType:"custom"},antigravity:{id:"antigravity",name:"Antigravity",image:"/providers/antigravity.png",color:"#4285F4",description:"Google Antigravity IDE with MITM",configType:"mitm",mitmDomain:"daily-cloudcode-pa.googleapis.com",modelAliases:["claude-opus-4-6-thinking","claude-sonnet-4-6","gemini-3-flash","gpt-oss-120b-medium","gemini-3-pro-high","gemini-3-pro-low"],defaultModels:[{id:"gemini-3.1-pro-high",name:"Gemini 3.1 Pro High",alias:"gemini-3.1-pro-high"},{id:"gemini-3.1-pro-low",name:"Gemini 3.1 Pro Low",alias:"gemini-3.1-pro-low"},{id:"gemini-3-flash",name:"Gemini 3 Flash",alias:"gemini-3-flash"},{id:"claude-sonnet-4-6",name:"Claude Sonnet 4.6",alias:"claude-sonnet-4-6"},{id:"claude-opus-4-6-thinking",name:"Claude Opus 4.6 Thinking",alias:"claude-opus-4-6-thinking"},{id:"gpt-oss-120b-medium",name:"GPT OSS 120B Medium",alias:"gpt-oss-120b-medium"}]},copilot:{id:"copilot",name:"GitHub Copilot",image:"/providers/copilot.png",color:"#1F6FEB",description:"GitHub Copilot IDE with MITM",configType:"mitm",mitmDomain:"api.individual.githubcopilot.com",modelAliases:["gpt-4o-mini","claude-haiku-4.5","gpt-4o","gpt-5-mini"],defaultModels:[{id:"gpt-4o",name:"GPT-4o",alias:"gpt-4o"},{id:"gpt-4.1",name:"GPT-4.1",alias:"gpt-4.1"},{id:"gpt-5-mini",name:"GPT-5 Mini",alias:"gpt-5-mini"},{id:"claude-haiku-4.5",name:"Claude Haiku 4.5",alias:"claude-haiku-4.5"}]},droid:{id:"droid",name:"Factory Droid",image:"/providers/droid.png",color:"#00D4FF",description:"Factory Droid AI Assistant",configType:"custom"},cursor:{id:"cursor",name:"Cursor",image:"/providers/cursor.png",color:"#000000",description:"Cursor AI Code Editor",configType:"guide",requiresExternalUrl:!0,notes:[{type:"warning",text:"Requires Cursor Pro account to use this feature."},{type:"cloudCheck",text:"Cursor routes requests through its own server, so local endpoint is not supported. Please enable Tunnel or Cloud Endpoint in Settings."}],guideSteps:[{step:1,title:"Open Settings",desc:"Go to Settings → Models"},{step:2,title:"Enable OpenAI API",desc:'Enable "OpenAI API key" option'},{step:3,title:"Base URL",value:"{{baseUrl}}",copyable:!0},{step:4,title:"API Key",type:"apiKeySelector"},{step:5,title:"Add Custom Model",desc:'Click "View All Model" → "Add Custom Model"'},{step:6,title:"Select Model",type:"modelSelector"}]},cline:{id:"cline",name:"Cline",image:"/providers/cline.png",color:"#00D1B2",description:"Cline AI Coding Assistant",configType:"guide",guideSteps:[{step:1,title:"Open Settings",desc:"Go to Cline Settings panel"},{step:2,title:"Select Provider",desc:"Choose API Provider → OpenAI Compatible"},{step:3,title:"Base URL",value:"{{baseUrl}}/v1",copyable:!0},{step:4,title:"API Key",type:"apiKeySelector"},{step:5,title:"Select Model",type:"modelSelector"}]},kilo:{id:"kilo",name:"Kilo Code",image:"/providers/kilocode.png",color:"#FF6B6B",description:"Kilo Code AI Assistant",configType:"guide",guideSteps:[{step:1,title:"Open Settings",desc:"Go to Kilo Code Settings panel"},{step:2,title:"Select Provider",desc:"Choose API Provider → OpenAI Compatible"},{step:3,title:"Base URL",value:"{{baseUrl}}/v1",copyable:!0},{step:4,title:"API Key",type:"apiKeySelector"},{step:5,title:"Select Model",type:"modelSelector"}]},roo:{id:"roo",name:"Roo",image:"/providers/roo.png",color:"#FF6B6B",description:"Roo AI Assistant",configType:"guide",guideSteps:[{step:1,title:"Open Settings",desc:"Go to Roo Settings panel"},{step:2,title:"Select Provider",desc:"Choose API Provider → Ollama"},{step:3,title:"Base URL",value:"{{baseUrl}}",copyable:!0},{step:4,title:"API Key",type:"apiKeySelector"},{step:5,title:"Select Model",type:"modelSelector"}]},continue:{id:"continue",name:"Continue",image:"/providers/continue.png",color:"#7C3AED",description:"Continue AI Assistant",configType:"guide",guideSteps:[{step:1,title:"Open Config",desc:"Open Continue configuration file"},{step:2,title:"API Key",type:"apiKeySelector"},{step:3,title:"Select Model",type:"modelSelector"},{step:4,title:"Add Model Config",desc:"Add the following configuration to your models array:"}],codeBlock:{language:"json",code:`{
2
+ "apiBase": "{{baseUrl}}",
3
+ "title": "{{model}}",
4
+ "model": "{{model}}",
5
+ "provider": "openai",
6
+ "apiKey": "{{apiKey}}"
7
+ }`}}};var l=s(7202),n=s(2679),o=s(5497);function d({apiKeys:e,cloudEnabled:t,onStatusChange:s,onModelsLoaded:i}){let[l,n]=(0,r.useState)(null),[d,c]=(0,r.useState)(!1),[x,m]=(0,r.useState)(!1),[p,u]=(0,r.useState)(""),[g,h]=(0,r.useState)(null),[f,y]=(0,r.useState)(null),[b,v]=(0,r.useState)("http://localhost:20128/v1/chat/completions"),[j,N]=(0,r.useState)(""),[w,S]=(0,r.useState)(!1),[C,k]=(0,r.useState)(!1),[A,E]=(0,r.useState)(null),[T,P]=(0,r.useState)(!1),[I,M]=(0,r.useState)(!1),[O,_]=(0,r.useState)(null),D="u">typeof navigator&&navigator.userAgent?.includes("Windows"),R=l?.isAdmin!==!1;(0,r.useEffect)(()=>{(async()=>{try{let e=await fetch("/api/cli-tools/antigravity-mitm/settings");if(e.ok){let t=await e.json();t.endpoint&&v(t.endpoint),t.apiKey&&N(t.apiKey),S(!0)}}catch{}})()},[]),(0,r.useEffect)(()=>{$()},[]),(0,r.useEffect)(()=>{if(!l?.running)return;let e=async()=>{try{let e=await fetch("/api/cli-tools/antigravity-mitm/settings?status=true");e.ok&&_(await e.json())}catch{}};e();let t=setInterval(e,5e3);return()=>clearInterval(t)},[l?.running]);let $=async()=>{try{let e=await fetch("/api/cli-tools/antigravity-mitm");if(e.ok){let t=await e.json();if(n(t),s?.(t),t.running)try{let e=await fetch("/api/cli-tools/antigravity-mitm/settings");if(e.ok){let t=await e.json(),s=t.endpoint||b,a=t.apiKey||j,r=await fetch("/api/cli-tools/antigravity-mitm/settings",{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({endpoint:s,apiKey:a})}),l=await r.json();l.models?.length>0&&(i?.(l.models),E(l))}}catch{}}}catch{n({running:!1,certExists:!1,dnsStatus:{}})}},L=async()=>{M(!0);try{let e=await fetch("/api/cli-tools/antigravity-mitm/settings",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({endpoint:b,apiKey:j})});if(e.ok)S(!0),h({type:"success",text:"Configuration saved"});else{let t=await e.json();h({type:"error",text:t.error||"Failed to save"})}}catch(e){h({type:"error",text:e.message})}finally{M(!1)}},F=async()=>{P(!0),E(null);try{let e=await fetch("/api/cli-tools/antigravity-mitm/settings",{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({endpoint:b,apiKey:j})}),t=await e.json();E(t),t.models?.length>0&&i?.(t.models)}catch(e){E({success:!1,reachable:!1,message:e.message})}finally{P(!1)}},K=e=>{D||l?.hasCachedPassword?q(e,""):(y(e),m(!0),h(null))},q=async(e,t)=>{c(!0),h(null);try{if("trust-cert"===e){let e=await fetch("/api/cli-tools/antigravity-mitm",{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"trust-cert",sudoPassword:t})}),s=await e.json();e.ok?h({type:"success",text:"Certificate trusted successfully"}):h({type:"error",text:s.error||"Failed to trust certificate"})}else if("start"===e){E(null),_(null),await L(),h({type:"info",text:"Validating endpoint..."});let e=0;try{let t=await fetch("/api/cli-tools/antigravity-mitm/settings",{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({endpoint:b,apiKey:j})}),s=await t.json();if(!t.ok||!s.reachable||!s.models||0===s.models.length){h({type:"error",text:`Endpoint invalid: ${s.message||s.error||"cannot load models"}`}),c(!1),await $();return}e=s.models.length,i&&i(s.models),E(s)}catch(e){h({type:"error",text:`Endpoint invalid: ${e.message}`}),c(!1),await $();return}let s=await fetch("/api/cli-tools/antigravity-mitm",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({apiKey:j||"sk_default",sudoPassword:t})}),a=await s.json();s.ok?h({type:"success",text:`Server started (${e} models loaded)`}):h({type:"error",text:a.error||"Failed to start server"})}else{let e=await fetch("/api/cli-tools/antigravity-mitm",{method:"DELETE",headers:{"Content-Type":"application/json"},body:JSON.stringify({sudoPassword:t})}),s=await e.json();console.log("STOP SERVER REPONSE:",e.status,s),e.ok?h({type:"success",text:"Server stopped — all DNS cleared"}):h({type:"error",text:s.error||"Failed to stop server"})}m(!1),u(""),await $()}catch(e){h({type:"error",text:e.message})}finally{c(!1),y(null)}},H=()=>{p.trim()?q(f,p):h({type:"error",text:"Sudo password is required"})},U=l?.running;return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(o.Zp,{padding:"sm",className:"border-primary/20 bg-primary/5",children:(0,a.jsxs)("div",{className:"flex flex-col gap-3",children:[(0,a.jsxs)("div",{className:"flex items-center justify-between",children:[(0,a.jsxs)("div",{className:"flex items-center gap-2",children:[(0,a.jsx)("span",{className:"material-symbols-outlined text-primary text-[20px]",children:"security"}),(0,a.jsx)("span",{className:"font-semibold text-sm text-text-main",children:"MITM Server"}),U?(0,a.jsx)(o.Ex,{variant:"success",size:"sm",children:"Running"}):(0,a.jsx)(o.Ex,{variant:"error",size:"sm",children:"Stopped"})]}),(0,a.jsx)("div",{className:"flex items-center gap-1 text-xs text-text-muted","data-i18n-skip":"true",children:[{label:"Cert",ok:l?.certExists},{label:"Trusted",ok:l?.certTrusted},{label:"Server",ok:U}].map(({label:e,ok:t})=>(0,a.jsxs)("span",{className:`flex items-center gap-0.5 px-1.5 py-0.5 rounded ${t?"text-green-600":"text-text-muted"}`,children:[(0,a.jsx)("span",{className:"material-symbols-outlined text-[12px]",children:t?"check_circle":"cancel"}),e]},e))})]}),(0,a.jsxs)("div",{className:"px-2 py-2 rounded-lg bg-surface/50 border border-border/50 flex flex-col gap-2",children:[(0,a.jsxs)("p",{className:"text-[11px] text-text-muted leading-relaxed",children:[(0,a.jsx)("span",{className:"font-medium text-text-main",children:"Purpose:"})," Use Antigravity IDE & GitHub Copilot → with ANY provider/model from Router"]}),(0,a.jsxs)("p",{className:"text-[11px] text-text-muted leading-relaxed",children:[(0,a.jsx)("span",{className:"font-medium text-text-main",children:"How it works:"})," IDE request → DNS redirect to localhost:443 → MITM proxy intercepts → Router endpoint → response back to IDE"]})]}),(0,a.jsxs)("div",{className:"flex flex-col gap-2 px-2 py-2 rounded-lg bg-surface/30 border border-border/30",children:[(0,a.jsxs)("div",{className:"flex items-center justify-between",children:[(0,a.jsx)("p",{className:"text-[11px] font-medium text-text-main uppercase tracking-wider",children:"Router Configuration"}),O&&null!==O.ok&&(0,a.jsxs)("div",{className:`flex items-center gap-1 px-2 py-0.5 rounded-full text-[10px] font-medium ${O.ok?"bg-green-500/15 text-green-600":"bg-red-500/15 text-red-500"}`,children:[(0,a.jsx)("span",{className:`w-1.5 h-1.5 rounded-full ${O.ok?"bg-green-500":"bg-red-500"}`}),O.ok?"Valid":"Invalid"]})]}),O&&!1===O.ok&&(0,a.jsxs)("div",{className:"flex items-center gap-2 px-2 py-1.5 rounded text-[11px] bg-red-500/10 text-red-500 border border-red-500/20",children:[(0,a.jsx)("span",{className:"material-symbols-outlined text-[14px]",children:"error"}),(0,a.jsx)("span",{className:"break-all",children:O.detail})]}),(0,a.jsxs)("div",{className:"flex flex-col gap-1.5",children:[(0,a.jsx)("label",{className:"text-[11px] text-text-muted",children:"Endpoint URL"}),(0,a.jsx)("input",{type:"text",value:b,onChange:e=>{v(e.target.value),S(!1),E(null)},placeholder:"http://localhost:20128/v1/chat/completions",disabled:U,className:`w-full px-2.5 py-1.5 bg-surface rounded-md text-xs border border-border focus:outline-none focus:ring-1 focus:ring-primary/50 text-text-main placeholder-text-muted/50 ${U?"opacity-50 cursor-not-allowed":""}`})]}),(0,a.jsxs)("div",{className:"flex flex-col gap-1.5",children:[(0,a.jsx)("label",{className:"text-[11px] text-text-muted",children:"API Key"}),(0,a.jsxs)("div",{className:"relative",children:[(0,a.jsx)("input",{type:C?"text":"password",value:j,onChange:e=>{N(e.target.value),S(!1),E(null)},placeholder:"Enter API key",disabled:U,className:`w-full px-2.5 py-1.5 pr-8 bg-surface rounded-md text-xs border border-border focus:outline-none focus:ring-1 focus:ring-primary/50 text-text-main placeholder-text-muted/50 ${U?"opacity-50 cursor-not-allowed":""}`}),(0,a.jsx)("button",{type:"button",onClick:()=>k(e=>!e),className:"absolute right-1.5 top-1/2 -translate-y-1/2 flex items-center justify-center w-5 h-5 rounded text-text-muted hover:text-text-main transition-colors",title:C?"Hide API Key":"Show API Key",children:(0,a.jsx)("span",{className:"material-symbols-outlined",style:{fontSize:"18px"},children:C?"visibility":"visibility_off"})})]})]}),(0,a.jsxs)("div",{className:"flex items-center gap-2 mt-1",children:[(0,a.jsxs)("button",{onClick:F,disabled:T||!b||U,className:"px-3 py-1 rounded-md bg-blue-500/10 border border-blue-500/30 text-blue-500 font-medium text-[11px] flex items-center gap-1 hover:bg-blue-500/20 transition-colors disabled:opacity-50",children:[(0,a.jsx)("span",{className:"material-symbols-outlined text-[14px]",children:T?"hourglass_empty":"sync"}),T?"Loading...":"Load Models"]}),(0,a.jsxs)("button",{onClick:L,disabled:I||w||!b||U,className:"px-3 py-1 rounded-md bg-green-500/10 border border-green-500/30 text-green-600 font-medium text-[11px] flex items-center gap-1 hover:bg-green-500/20 transition-colors disabled:opacity-50",children:[(0,a.jsx)("span",{className:"material-symbols-outlined text-[14px]",children:"save"}),I?"Saving...":w?"Saved ✓":"Save"]})]}),A&&(0,a.jsxs)("div",{className:`flex flex-col gap-1.5 px-2 py-1.5 rounded text-[11px] ${A.reachable?A.status>=200&&A.status<300?"bg-green-500/10 text-green-600":"bg-yellow-500/10 text-yellow-600":"bg-red-500/10 text-red-600"}`,children:[(0,a.jsxs)("div",{className:"flex items-center gap-2",children:[(0,a.jsx)("span",{className:"material-symbols-outlined text-[14px]",children:A.reachable?A.status>=200&&A.status<300?"check_circle":"warning":"error"}),(0,a.jsx)("span",{children:A.message})]}),A.models?.length>0&&(0,a.jsx)("div",{className:"flex flex-wrap gap-1 mt-1 max-h-[120px] overflow-y-auto",children:A.models.map(e=>(0,a.jsx)("span",{className:"px-1.5 py-0.5 rounded bg-green-500/15 text-green-700 text-[10px] font-mono",children:e},e))})]})]}),g&&(0,a.jsxs)("div",{className:`flex items-center gap-2 px-2 py-1.5 rounded text-xs ${"success"===g.type?"bg-green-500/10 text-green-600":"info"===g.type?"bg-amber-500/10 text-amber-600":"bg-red-500/10 text-red-600"}`,children:[(0,a.jsx)("span",{className:"material-symbols-outlined text-[14px]",children:"success"===g.type?"check_circle":"info"===g.type?"hourglass_top":"error"}),(0,a.jsx)("span",{children:g.text})]}),(0,a.jsxs)("div",{className:"flex items-center gap-2 flex-wrap","data-i18n-skip":"true",children:[l?.certExists&&!l?.certTrusted&&(0,a.jsxs)("button",{onClick:()=>K("trust-cert"),disabled:d,className:"px-4 py-1.5 rounded-lg bg-yellow-500/10 border border-yellow-500/30 text-yellow-600 font-medium text-xs flex items-center gap-1.5 hover:bg-yellow-500/20 transition-colors disabled:opacity-50",children:[(0,a.jsx)("span",{className:"material-symbols-outlined text-[16px]",children:"verified_user"}),"Trust Cert"]}),U?(0,a.jsxs)(a.Fragment,{children:[(0,a.jsxs)("button",{onClick:()=>K("stop"),disabled:d,className:"px-4 py-1.5 rounded-lg bg-red-500/10 border border-red-500/30 text-red-500 font-medium text-xs flex items-center gap-1.5 hover:bg-red-500/20 transition-colors disabled:opacity-50",children:[(0,a.jsx)("span",{className:"material-symbols-outlined text-[16px]",children:"stop_circle"}),"Stop Server"]}),(0,a.jsxs)("button",{onClick:async()=>{try{let e=await fetch("/api/cli-tools/antigravity-mitm/health"),t=new Date().toLocaleTimeString("en-GB",{hour12:!1});e.ok?(await e.json(),console.log(`[${t}] [MITM] check health ok`)):console.log(`[${t}] [MITM] check health error:`,await e.text())}catch(t){let e=new Date().toLocaleTimeString("en-GB",{hour12:!1});console.log(`[${e}] [MITM] check health error:`,t)}},disabled:d,className:"px-4 py-1.5 rounded-lg bg-blue-500/10 border border-blue-500/30 text-blue-500 font-medium text-xs flex items-center gap-1.5 hover:bg-blue-500/20 transition-colors disabled:opacity-50",children:[(0,a.jsx)("span",{className:"material-symbols-outlined text-[16px]",children:"health_and_safety"}),"Check Health"]})]}):(0,a.jsxs)("button",{onClick:()=>K("start"),disabled:d||!b||D&&!R,className:"px-4 py-1.5 rounded-lg bg-primary/10 border border-primary/30 text-primary font-medium text-xs flex items-center gap-1.5 hover:bg-primary/20 transition-colors disabled:opacity-50",children:[(0,a.jsx)("span",{className:"material-symbols-outlined text-[16px]",children:"play_circle"}),"Start Server"]}),U&&(0,a.jsx)("p",{className:"text-xs text-text-muted",children:"Enable DNS per tool below to activate interception"})]}),D&&!R&&(0,a.jsxs)("div",{className:"flex items-center gap-2 px-2 py-1.5 rounded text-xs bg-red-500/10 text-red-600 border border-red-500/20",children:[(0,a.jsx)("span",{className:"material-symbols-outlined text-[14px]",children:"shield_lock"}),(0,a.jsx)("span",{children:"Administrator required — restart as Administrator to use MITM"})]})]})}),x&&(0,a.jsx)("div",{className:"fixed inset-0 z-50 flex items-center justify-center bg-black/50 backdrop-blur-sm",children:(0,a.jsxs)("div",{className:"bg-surface border border-border rounded-xl p-6 w-full max-w-sm flex flex-col gap-4 shadow-xl",children:[(0,a.jsx)("h3",{className:"font-semibold text-text-main",children:"Sudo Password Required"}),(0,a.jsxs)("div",{className:"flex items-start gap-3 p-3 bg-yellow-500/10 border border-yellow-500/30 rounded-lg",children:[(0,a.jsx)("span",{className:"material-symbols-outlined text-yellow-500 text-[20px]",children:"warning"}),(0,a.jsx)("p",{className:"text-xs text-text-muted",children:"Required for SSL certificate and server startup"})]}),(0,a.jsx)(o.pd,{type:"password",placeholder:"Enter sudo password",value:p,onChange:e=>u(e.target.value),onKeyDown:e=>{"Enter"!==e.key||d||H()}}),g&&(0,a.jsxs)("div",{className:"flex items-center gap-2 px-2 py-1.5 rounded text-xs bg-red-500/10 text-red-600",children:[(0,a.jsx)("span",{className:"material-symbols-outlined text-[14px]",children:"error"}),(0,a.jsx)("span",{children:g.text})]}),(0,a.jsxs)("div",{className:"flex items-center justify-end gap-2",children:[(0,a.jsx)(o.$n,{variant:"ghost",size:"sm",onClick:()=>{m(!1),u(""),h(null)},disabled:d,children:"Cancel"}),(0,a.jsx)(o.$n,{variant:"primary",size:"sm",onClick:H,loading:d,children:"Confirm"})]})]})})]})}var c=s(5772);function x({tool:e,isExpanded:t,onToggle:s,serverRunning:i,dnsActive:l,hasCachedPassword:n,apiKeys:d,activeProviders:x,hasActiveProviders:m,modelAliases:p={},cloudEnabled:u,loadedModels:g=[],onDnsChange:h}){let[f,y]=(0,r.useState)(!1),[b,v]=(0,r.useState)(null),[j,N]=(0,r.useState)(!1),[w,S]=(0,r.useState)(""),[C,k]=(0,r.useState)(null),[A,E]=(0,r.useState)({}),[T,P]=(0,r.useState)(null),[I,M]=(0,r.useState)({top:0,right:0}),[O,_]=(0,r.useState)(""),D="u">typeof navigator&&navigator.userAgent?.includes("Windows");(0,r.useEffect)(()=>{t&&R()},[t]),(0,r.useEffect)(()=>{if(!T)return;let e=e=>{e.target.closest("[data-model-dropdown]")||P(null)};return document.addEventListener("click",e),()=>document.removeEventListener("click",e)},[T]);let R=async()=>{try{let t=await fetch(`/api/cli-tools/antigravity-mitm/alias?tool=${e.id}`);if(t.ok){let e=await t.json();Object.keys(e.aliases||{}).length>0&&E(e.aliases)}}catch{}},$=(0,r.useCallback)(async t=>{try{await fetch("/api/cli-tools/antigravity-mitm/alias",{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({tool:e.id,mappings:t})})}catch{}},[e.id]),L=(e,t)=>{E(s=>({...s,[e]:t}))},F=()=>{if(!i)return;let e=l?"disable":"enable";D||n?K(e,""):(k(e),N(!0),v(null))},K=async(t,s)=>{y(!0),v(null);try{let a=await fetch("/api/cli-tools/antigravity-mitm",{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({tool:e.id,action:t,sudoPassword:s})}),r=await a.json();if(!a.ok)throw Error(r.error||"Failed to toggle DNS");"enable"===t?v({type:"success",text:"DNS enabled successfully.",warning:`Please restart ${e.name} to apply changes.`}):v({type:"success",text:"DNS disabled — traffic restored"}),N(!1),S(""),h?.(r)}catch(e){v({type:"error",text:e.message})}finally{y(!1),k(null)}},q=()=>{w.trim()?K(C,w):v({type:"error",text:"Sudo password is required"})};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsxs)(o.Zp,{padding:"xs",className:"overflow-hidden",children:[(0,a.jsxs)("div",{className:"flex items-center justify-between hover:cursor-pointer",onClick:s,children:[(0,a.jsxs)("div",{className:"flex items-center gap-3",children:[(0,a.jsx)("div",{className:"size-8 flex items-center justify-center shrink-0",children:(0,a.jsx)(c.default,{src:e.image,alt:e.name,width:32,height:32,className:"size-8 object-contain rounded-lg",sizes:"32px",onError:e=>{e.target.style.display="none"}})}),(0,a.jsxs)("div",{className:"min-w-0",children:[(0,a.jsxs)("div",{className:"flex items-center gap-2",children:[(0,a.jsx)("h3",{className:"font-medium text-sm",children:e.name}),i?l?(0,a.jsx)(o.Ex,{variant:"success",size:"sm",children:"Active"}):(0,a.jsx)(o.Ex,{variant:"warning",size:"sm",children:"DNS off"}):(0,a.jsx)(o.Ex,{variant:"error",size:"sm",children:"Server off"})]}),(0,a.jsxs)("p",{className:"text-xs text-text-muted",children:["Intercept ",e.name," requests via MITM proxy"]})]})]}),(0,a.jsx)("span",{className:`material-symbols-outlined text-text-muted text-[20px] transition-transform${t?" rotate-180":""}`,children:"expand_more"})]}),t&&(0,a.jsxs)("div",{className:"mt-4 pt-4 border-t border-border flex flex-col gap-4",children:[(0,a.jsxs)("div",{className:"flex flex-col gap-0.5 text-[11px] text-text-muted px-1",children:[(0,a.jsxs)("p",{children:["Toggle DNS to redirect ",e.name," traffic through Router via MITM."]}),!l&&(0,a.jsx)("p",{className:"text-amber-600 text-[10px] mt-1",children:"⚠️ Enable DNS to edit model mappings"})]}),b&&(0,a.jsxs)("div",{className:"flex flex-col gap-1",children:[(0,a.jsxs)("div",{className:`flex items-center gap-2 px-2 py-1.5 rounded text-xs ${"success"===b.type?"bg-green-500/10 text-green-600":"bg-red-500/10 text-red-600"}`,children:[(0,a.jsx)("span",{className:"material-symbols-outlined text-[14px]",children:"success"===b.type?"check_circle":"error"}),(0,a.jsx)("span",{children:b.text})]}),b.warning&&(0,a.jsxs)("div",{className:"flex items-center gap-2 px-2 py-1.5 rounded text-xs bg-amber-500/10 text-amber-600 border border-amber-500/20",children:[(0,a.jsx)("span",{className:"material-symbols-outlined text-[14px]",children:"warning"}),(0,a.jsx)("span",{className:"font-medium",children:b.warning})]})]}),e.defaultModels?.length>0&&(0,a.jsx)("div",{className:"flex flex-col gap-2",children:e.defaultModels.map(e=>(0,a.jsxs)("div",{className:"flex items-center gap-2 relative",children:[(0,a.jsx)("span",{className:"w-36 shrink-0 text-xs font-semibold text-text-main text-right",children:e.name}),(0,a.jsx)("span",{className:"material-symbols-outlined text-text-muted text-[14px]",children:"arrow_forward"}),(0,a.jsx)("input",{type:"text",value:A[e.alias]||"",onChange:t=>L(e.alias,t.target.value),onBlur:t=>{var s,a;return s=e.alias,a=t.target.value,void $({...A,[s]:a})},placeholder:"provider/model-id",disabled:!l,className:`flex-1 px-2 py-1.5 bg-surface rounded border border-border text-xs focus:outline-none focus:ring-1 focus:ring-primary/50 ${!l?"opacity-50 cursor-not-allowed":""}`}),(0,a.jsx)("div",{className:"relative","data-model-dropdown":!0,children:(0,a.jsx)("button",{ref:t=>{t&&(t._alias=e.alias)},onClick:t=>{if(T===e.alias)P(null);else{_("");let s=t.currentTarget.getBoundingClientRect(),a=Math.min(32*g.length,280);M({top:window.innerHeight-s.bottom<a+8?Math.max(8,s.top-a-4):s.bottom+4,right:window.innerWidth-s.right}),P(e.alias)}},disabled:!l||0===g.length,className:`px-2 py-1.5 rounded border text-xs transition-colors shrink-0 ${l&&g.length>0?"bg-surface border-border hover:border-primary cursor-pointer":"opacity-50 cursor-not-allowed border-border"}`,title:0===g.length?"Load Models first (from server card above)":"Select model",children:"Select"})}),A[e.alias]&&(0,a.jsx)("button",{onClick:()=>{L(e.alias,""),$({...A,[e.alias]:""})},className:"p-1 text-text-muted hover:text-red-500 rounded transition-colors",title:"Clear",children:(0,a.jsx)("span",{className:"material-symbols-outlined text-[14px]",children:"close"})})]},e.alias))}),e.defaultModels?.length===0&&(0,a.jsx)("p",{className:"text-xs text-text-muted px-1",children:"Model mappings will be available soon."}),(0,a.jsx)("div",{children:l?(0,a.jsxs)("button",{onClick:F,disabled:!i||f,className:"px-4 py-1.5 rounded-lg bg-red-500/10 border border-red-500/30 text-red-500 font-medium text-xs flex items-center gap-1.5 hover:bg-red-500/20 transition-colors disabled:opacity-50 disabled:cursor-not-allowed",children:[(0,a.jsx)("span",{className:"material-symbols-outlined text-[16px]",children:"stop_circle"}),"Stop DNS"]}):(0,a.jsxs)(o.$n,{variant:"primary",size:"sm",onClick:F,loading:f,disabled:!i||f,children:[(0,a.jsx)("span",{className:"material-symbols-outlined text-[14px] mr-1",children:"play_circle"}),"Start DNS"]})})]})]}),T&&g.length>0&&(0,a.jsxs)("div",{"data-model-dropdown":!0,className:"fixed z-[999] bg-surface border border-border rounded-lg shadow-xl max-h-[280px] w-[340px] overflow-hidden flex flex-col",style:{top:I.top,right:I.right},children:[(0,a.jsx)("div",{className:"sticky top-0 p-1.5 border-b border-border bg-surface",children:(0,a.jsx)("input",{type:"text",value:O,onChange:e=>_(e.target.value),placeholder:"Search models...",className:"w-full px-2 py-1 bg-background rounded border border-border text-xs focus:outline-none focus:ring-1 focus:ring-primary/50",autoFocus:!0})}),(0,a.jsx)("div",{className:"overflow-y-auto flex-1",children:g.filter(e=>!O||e.toLowerCase().includes(O.toLowerCase())).map(e=>(0,a.jsx)("button",{onClick:()=>{let t;E(t={...A,[T]:e}),$(t),P(null)},className:`w-full text-left px-3 py-2 text-xs font-mono hover:bg-primary/10 transition-colors border-b border-border/30 last:border-0 ${A[T]===e?"bg-primary/15 text-primary font-semibold":"text-text-main"}`,children:e},e))})]}),j&&(0,a.jsx)("div",{className:"fixed inset-0 z-50 flex items-center justify-center bg-black/50 backdrop-blur-sm",children:(0,a.jsxs)("div",{className:"bg-surface border border-border rounded-xl p-6 w-full max-w-sm flex flex-col gap-4 shadow-xl",children:[(0,a.jsx)("h3",{className:"font-semibold text-text-main",children:"Sudo Password Required"}),(0,a.jsxs)("div",{className:"flex items-start gap-3 p-3 bg-yellow-500/10 border border-yellow-500/30 rounded-lg",children:[(0,a.jsx)("span",{className:"material-symbols-outlined text-yellow-500 text-[20px]",children:"warning"}),(0,a.jsx)("p",{className:"text-xs text-text-muted",children:"Required to modify /etc/hosts and flush DNS cache"})]}),(0,a.jsx)(o.pd,{type:"password",placeholder:"Enter sudo password",value:w,onChange:e=>S(e.target.value),onKeyDown:e=>{"Enter"!==e.key||f||q()}}),b&&(0,a.jsxs)("div",{className:"flex items-center gap-2 px-2 py-1.5 rounded text-xs bg-red-500/10 text-red-600",children:[(0,a.jsx)("span",{className:"material-symbols-outlined text-[14px]",children:"error"}),(0,a.jsx)("span",{children:b.text})]}),(0,a.jsxs)("div",{className:"flex items-center justify-end gap-2",children:[(0,a.jsx)(o.$n,{variant:"ghost",size:"sm",onClick:()=>{N(!1),S(""),v(null)},disabled:f,children:"Cancel"}),(0,a.jsx)(o.$n,{variant:"primary",size:"sm",onClick:q,loading:f,children:"Confirm"})]})]})})]})}function m(){let[e,t]=(0,r.useState)([]),[s,i]=(0,r.useState)(!0),[l,n]=(0,r.useState)("mitm"),[o,d]=(0,r.useState)(!0),[c,x]=(0,r.useState)(!1),[m,p]=(0,r.useState)(0),u=(0,r.useRef)(null),g=(0,r.useRef)(null),h=(0,r.useRef)(null),f=(0,r.useCallback)(()=>{h.current&&(h.current.close(),h.current=null),x(!1),t([]),p(e=>e+1)},[]);return(0,r.useEffect)(()=>{if(!o){h.current&&(h.current.close(),h.current=null),x(!1);return}let e=new EventSource(`/api/cli-tools/antigravity-mitm/console-logs?stream=true&filter=${l}`);return h.current=e,e.onopen=()=>x(!0),e.onmessage=e=>{try{let s=JSON.parse(e.data);s.clear?t([]):s.line&&t(e=>{let t=[...e,s.line];return t.length>500?t.slice(-500):t})}catch{}},e.onerror=()=>{e.close(),h.current=null,x(!1)},()=>{e.close(),h.current=null,x(!1)}},[o,l,m]),(0,r.useEffect)(()=>{s&&u.current&&u.current.scrollIntoView({behavior:"smooth"})},[e,s]),(0,a.jsxs)("div",{className:"rounded-xl border border-border bg-card p-4",children:[(0,a.jsxs)("div",{className:"flex items-center justify-between pb-2",children:[(0,a.jsxs)("div",{className:"text-sm font-semibold flex items-center gap-2 cursor-pointer select-none",onClick:()=>d(!o),children:[(0,a.jsx)("span",{className:"material-symbols-outlined text-[16px] text-primary",children:"terminal"}),"Console Logs",(0,a.jsx)("span",{className:`material-symbols-outlined text-[14px] transition-transform ${o?"rotate-180":""}`,children:"expand_more"})]}),o&&(0,a.jsxs)("div",{className:"flex items-center gap-1.5",children:[(0,a.jsxs)("select",{value:l,onChange:e=>{n(e.target.value),t([])},className:"px-1.5 py-0.5 rounded border border-border bg-surface text-[10px] cursor-pointer",children:[(0,a.jsx)("option",{value:"mitm",children:"MITM Only"}),(0,a.jsx)("option",{value:"all",children:"All Logs"})]}),(0,a.jsx)("button",{onClick:()=>{i(!s),!s&&u.current&&u.current.scrollIntoView({behavior:"smooth"})},className:`p-0.5 rounded transition-colors ${s?"text-primary":"text-muted hover:text-foreground"}`,title:s?"Auto-scroll ON":"Auto-scroll OFF",children:(0,a.jsx)("span",{className:"material-symbols-outlined text-[14px]",children:s?"vertical_align_bottom":"pause"})}),(0,a.jsx)("button",{onClick:()=>t([]),className:"p-0.5 rounded text-muted hover:text-foreground transition-colors",title:"Clear logs",children:(0,a.jsx)("span",{className:"material-symbols-outlined text-[14px]",children:"delete_sweep"})})]})]}),o&&(0,a.jsxs)(a.Fragment,{children:[(0,a.jsxs)("div",{ref:g,onScroll:()=>{if(!g.current)return;let{scrollTop:e,scrollHeight:t,clientHeight:s}=g.current;i(t-e-s<40)},className:"bg-zinc-950 rounded-lg p-3 font-mono text-[11px] leading-[1.6] overflow-auto border border-zinc-800",style:{maxHeight:"280px",minHeight:"120px"},children:[0===e.length?(0,a.jsx)("div",{className:`italic text-center py-4 ${c?"text-zinc-600":"text-red-500 font-semibold"}`,children:c?"Waiting for logs...":"Vui l\xf2ng Stop > Start lại MITM Server để kết nối lại logs hệ thống"}):e.map((e,t)=>(0,a.jsx)("div",{className:`whitespace-pre-wrap break-all ${e.includes("❌")||e.includes("[ERROR]")||e.includes("error")?"text-red-400":e.includes("⚡")||e.includes("intercept")?"text-emerald-400":e.includes("⏩")||e.includes("passthrough")?"text-amber-400":e.includes("\uD83D\uDE80")||e.includes("✅")||e.includes("check health ok")?"text-green-400":e.includes("\uD83D\uDD10")?"text-blue-400":e.includes("\uD83C\uDF10")?"text-cyan-400":e.includes("\uD83D\uDD0D")?"text-purple-400":e.includes("⏹")?"text-orange-400":e.includes("WARNING")||e.includes("warn")?"text-yellow-400":"text-zinc-300"}`,children:e},t)),(0,a.jsx)("div",{ref:u})]}),(0,a.jsxs)("div",{className:"flex items-center justify-between mt-1.5",children:[(0,a.jsxs)("span",{className:"text-[10px] text-muted",children:[e.length," lines"]}),(0,a.jsxs)("div",{className:"flex items-center gap-1.5",children:[!c&&(0,a.jsx)("button",{onClick:f,className:"flex items-center justify-center rounded p-2 text-primary hover:bg-primary/20 transition-colors",title:"Reconnect to console logs",children:(0,a.jsx)("span",{className:"material-symbols-outlined text-[12px]",style:{fontSize:"18px"},children:"sync"})}),(0,a.jsx)("span",{className:`w-1.5 h-1.5 rounded-full ${c?"bg-green-500 animate-pulse":"bg-red-500"}`}),(0,a.jsx)("span",{className:`text-[10px] ${c?"text-muted":"text-red-400"}`,children:c?"Connected":"Disconnected"})]})]})]})]})}function p({serverRunning:e}){let[t,s]=(0,r.useState)(!1),[i,l]=(0,r.useState)(!1),[n,d]=(0,r.useState)([]),[x,m]=(0,r.useState)([]),[p,u]=(0,r.useState)(null);(0,r.useEffect)(()=>{e&&g()},[]),(0,r.useEffect)(()=>{e?g():(d([]),m([]))},[e]),(0,r.useEffect)(()=>{e&&t&&h()},[t]);let g=async()=>{try{let e=await fetch("/api/providers/client");if(!e.ok)return void console.warn("[QuotaChecker] fetchConnections failed:",e.status);let t=await e.json();console.log("[QuotaChecker] connections data:",t);let s=(t.connections||[]).filter(e=>"antigravity"===e.provider);console.log("[QuotaChecker] antigravity connections:",s.length),d(s)}catch(e){console.error("[QuotaChecker] fetchConnections error:",e)}},h=async()=>{l(!0),u(null);try{let e=await fetch("/api/providers/client");if(!e.ok)throw Error("Failed to fetch providers");let t=((await e.json()).connections||[]).filter(e=>"antigravity"===e.provider);d(t);let s=await Promise.all(t.map(async e=>{try{let t=await fetch(`/api/usage/${e.id}`);if(t.ok){let s=await t.json();return{...e,quota:s}}return{...e,quota:null,quotaError:"Failed to fetch quota"}}catch(t){return{...e,quota:null,quotaError:t.message}}}));m(s)}catch(e){u(e.message)}finally{l(!1)}},f=e=>e>80?"bg-green-500":e>50?"bg-yellow-500":"bg-orange-500",y=n.length>0;return(0,a.jsxs)(o.Zp,{padding:"xs",className:`overflow-hidden ${!e?"opacity-60":""}`,children:[(0,a.jsxs)("div",{className:`flex items-center justify-between ${e?"hover:cursor-pointer hover:bg-primary/5":"cursor-not-allowed"} transition-colors rounded px-2`,onClick:()=>e&&s(!t),children:[(0,a.jsxs)("div",{className:"flex items-center gap-3",children:[(0,a.jsx)("div",{className:"size-8 flex items-center justify-center shrink-0 rounded-lg bg-gradient-to-br from-blue-500 to-purple-600 text-white",children:(0,a.jsx)("span",{className:"material-symbols-outlined text-[18px]",children:"speed"})}),(0,a.jsxs)("div",{className:"min-w-0",children:[(0,a.jsxs)("div",{className:"flex items-center gap-2",children:[(0,a.jsx)("h3",{className:"font-medium text-sm",children:"Quota Checker"}),e?y?(0,a.jsxs)(o.Ex,{variant:"success",size:"sm",children:[n.length," account",n.length>1?"s":""]}):(0,a.jsx)(o.Ex,{variant:"warning",size:"sm",children:"No accounts"}):(0,a.jsx)(o.Ex,{variant:"error",size:"sm",children:"Server off"})]}),(0,a.jsx)("p",{className:"text-xs text-text-muted",children:"Check antigravity provider quota usage"})]})]}),(0,a.jsx)("span",{className:`material-symbols-outlined text-text-muted text-[20px] transition-transform${t?" rotate-180":""}`,children:"expand_more"})]}),t&&e&&(0,a.jsxs)("div",{className:"mt-4 pt-4 border-t border-border flex flex-col gap-4",children:[(0,a.jsxs)("div",{className:"flex items-center justify-between",children:[(0,a.jsx)("span",{className:"text-xs text-text-muted",children:"Antigravity Client Quotas"}),(0,a.jsxs)("button",{onClick:e=>{e.stopPropagation(),h()},disabled:i,className:"flex items-center gap-1 px-2 py-1 rounded-md bg-primary/10 text-primary text-[11px] font-medium hover:bg-primary/20 transition-colors disabled:opacity-50",children:[(0,a.jsx)("span",{className:"material-symbols-outlined text-[14px]",children:i?"hourglass_empty":"refresh"}),i?"Refreshing...":"Refresh"]})]}),p&&!i&&(0,a.jsxs)("div",{className:"flex items-center gap-2 px-3 py-2 rounded text-xs bg-red-500/10 text-red-600 border border-red-500/20",children:[(0,a.jsx)("span",{className:"material-symbols-outlined text-[14px]",children:"error"}),(0,a.jsx)("span",{children:p})]}),i&&(0,a.jsxs)("div",{className:"py-6 text-center",children:[(0,a.jsx)("span",{className:"material-symbols-outlined text-text-muted text-2xl animate-spin",children:"progress_activity"}),(0,a.jsx)("p",{className:"text-sm text-text-muted mt-2",children:"Loading quota data..."})]}),!i&&!p&&0===x.length&&(0,a.jsxs)("div",{className:"py-6 text-center",children:[(0,a.jsx)("span",{className:"material-symbols-outlined text-text-muted text-2xl",children:"cloud_off"}),(0,a.jsx)("p",{className:"text-sm text-text-muted mt-2",children:"No antigravity connections found"}),(0,a.jsx)("p",{className:"text-xs text-text-muted mt-1",children:"Add an antigravity provider to see quota info"})]}),!i&&!p&&x.length>0&&(0,a.jsx)("div",{className:"flex flex-col gap-3 max-h-[400px] overflow-y-auto",children:x.map(e=>(0,a.jsxs)("div",{className:"p-3 rounded-lg border border-border/50 bg-surface",children:[(0,a.jsxs)("div",{className:"flex items-center gap-2 mb-3 pb-2 border-b border-border/30",children:[(0,a.jsx)("div",{className:"w-7 h-7 rounded-full overflow-hidden flex items-center justify-center bg-surface",children:(0,a.jsx)(c.default,{src:"/providers/antigravity.png",alt:"Antigravity",width:28,height:28,className:"w-7 h-7 object-contain"})}),(0,a.jsxs)("div",{className:"flex-1 min-w-0",children:[(0,a.jsx)("p",{className:"text-sm font-medium text-text-main truncate",children:e.name||e.email||"Unknown Account"}),(0,a.jsx)("p",{className:"text-[10px] text-text-muted",children:e.quota?.plan||"Free Tier"})]})]}),e.quota?.quotas&&Object.keys(e.quota.quotas).length>0?(0,a.jsx)("div",{className:"grid grid-cols-2 gap-x-4 gap-y-3",children:Object.entries(e.quota.quotas).map(([e,t])=>(0,a.jsxs)("div",{className:"space-y-1.5 min-w-0",children:[(0,a.jsxs)("div",{className:"flex items-center justify-between",children:[(0,a.jsxs)("div",{className:"flex items-center gap-1.5 min-w-0",children:[(0,a.jsx)("span",{className:`w-2 h-2 shrink-0 rounded-full ${f(t.remainingPercentage)}`}),(0,a.jsx)("span",{className:"text-xs font-medium text-text-main truncate",children:t.displayName||e})]}),(0,a.jsxs)("div",{className:"flex items-center gap-2",children:[(0,a.jsxs)("span",{className:"text-[10px] text-text-muted",children:[t.used.toLocaleString()," / ",t.total.toLocaleString()]}),(0,a.jsxs)("span",{className:`text-[10px] font-medium ${t.remainingPercentage>80?"text-green-500":t.remainingPercentage>50?"text-yellow-500":"text-orange-500"}`,children:[t.remainingPercentage,"%"]})]})]}),(0,a.jsx)("div",{className:"relative h-1.5 bg-black/5 dark:bg-white/5 rounded-full overflow-hidden",children:(0,a.jsx)("div",{className:`absolute left-0 top-0 h-full rounded-full transition-all duration-500 ${f(t.remainingPercentage)}`,style:{width:`${t.remainingPercentage}%`}})}),t.resetAt&&(0,a.jsxs)("div",{className:"flex items-center justify-between text-[10px] text-text-muted",children:[(0,a.jsxs)("span",{children:["Resets ",(e=>{if(!e)return"";let t=new Date(e)-new Date;if(t<=0)return"Resetting soon";let s=Math.floor(t/36e5),a=Math.floor(s/24);return a>0?`in ${a}d ${s%24}h`:`in ${s}h ${Math.floor(t%36e5/6e4)}m`})(t.resetAt)]}),(0,a.jsx)("span",{className:"text-[10px] text-text-muted",children:new Date(t.resetAt).toLocaleString("en-US",{month:"short",day:"numeric",hour:"2-digit",minute:"2-digit"})})]})]},e))}):(0,a.jsx)("div",{className:"py-2 text-center",children:(0,a.jsx)("p",{className:"text-xs text-text-muted",children:"No quota data available"})}),e.quotaError&&(0,a.jsxs)("div",{className:"flex items-center gap-2 px-2 py-1.5 rounded text-xs bg-yellow-500/10 text-yellow-600 mt-2",children:[(0,a.jsx)("span",{className:"material-symbols-outlined text-[12px]",children:"warning"}),(0,a.jsx)("span",{children:e.quotaError})]})]},e.id))})]}),t&&!e&&(0,a.jsx)("div",{className:"mt-4 pt-4 border-t border-border",children:(0,a.jsxs)("div",{className:"flex items-center gap-2 px-3 py-2 rounded text-xs bg-text-muted/10 text-text-muted",children:[(0,a.jsx)("span",{className:"material-symbols-outlined text-[14px]",children:"info"}),(0,a.jsx)("span",{children:"Start MITM Server to check quota information"})]})})]})}let u=["antigravity","copilot"];function g(){let[e,t]=(0,r.useState)([]),[s,o]=(0,r.useState)([]),[c,g]=(0,r.useState)({}),[h,f]=(0,r.useState)(!1),[y,b]=(0,r.useState)(null),[v,j]=(0,r.useState)({running:!1,certExists:!1,dnsStatus:{},hasCachedPassword:!1}),[N,w]=(0,r.useState)([]);(0,r.useEffect)(()=>{S(),C(),k(),A()},[]);let S=async()=>{try{let e=await fetch("/api/providers");if(e.ok){let s=await e.json();t(s.connections||[])}}catch{}},C=async()=>{try{let e=await fetch("/api/keys");if(e.ok){let t=await e.json();o(t.keys||[])}}catch{}},k=async()=>{try{let e=await fetch("/api/models/alias");if(e.ok){let t=await e.json();g(t.aliases||{})}}catch{}},A=async()=>{try{let e=await fetch("/api/settings");if(e.ok){let t=await e.json();f(t.cloudEnabled||!1)}}catch{}},E=()=>e.filter(e=>!1!==e.isActive),T=Object.entries(i).filter(([e])=>u.includes(e));return(0,a.jsxs)("div",{className:"grid grid-cols-1 lg:grid-cols-2 gap-6",children:[(0,a.jsxs)("div",{children:[(0,a.jsx)(d,{apiKeys:s,cloudEnabled:h,onStatusChange:j,onModelsLoaded:w}),(0,a.jsx)("div",{className:"mt-6",children:(0,a.jsx)(p,{serverRunning:v.running})})]}),(0,a.jsxs)("div",{className:"flex flex-col gap-4",children:[T.map(([e,t])=>(0,a.jsx)(x,{tool:t,isExpanded:y===e,onToggle:()=>b(y===e?null:e),serverRunning:v.running,dnsActive:v.dnsStatus?.[e]||!1,hasCachedPassword:v.hasCachedPassword||!1,apiKeys:s,activeProviders:E(),hasActiveProviders:E().some(e=>(0,l.KC)(e.provider).length>0||(0,n.mq)(e.provider)||(0,n.gb)(e.provider)),modelAliases:c,cloudEnabled:h,loadedModels:N,onDnsChange:e=>j(t=>({...t,dnsStatus:e.dnsStatus??t.dnsStatus}))},e)),(0,a.jsx)(m,{})]})]})}}},e=>{e.O(0,[852,702,497,441,794,358],()=>e(e.s=1872)),_N_E=e.O()}]);
@@ -0,0 +1 @@
1
+ (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[110,139,141,143,167,177,253,286,296,321,462,472,508,543,552,568,573,580,648,666,747,805,819,851,896,922,966,988],{4441:()=>{}},_=>{_.O(0,[441,794,358],()=>_(_.s=4441)),_N_E=_.O()}]);
@@ -0,0 +1 @@
1
+ (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[110,139,141,143,167,177,253,286,296,321,462,472,508,543,552,568,573,580,648,666,747,805,819,851,896,922,966,988],{4441:()=>{}},_=>{_.O(0,[441,794,358],()=>_(_.s=4441)),_N_E=_.O()}]);
@@ -0,0 +1 @@
1
+ (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[110,139,141,143,167,177,253,286,296,321,462,472,508,543,552,568,573,580,648,666,747,805,819,851,896,922,966,988],{4441:()=>{}},_=>{_.O(0,[441,794,358],()=>_(_.s=4441)),_N_E=_.O()}]);
@@ -0,0 +1 @@
1
+ (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[110,139,141,143,167,177,253,286,296,321,462,472,508,543,552,568,573,580,648,666,747,805,819,851,896,922,966,988],{4441:()=>{}},_=>{_.O(0,[441,794,358],()=>_(_.s=4441)),_N_E=_.O()}]);
@@ -0,0 +1 @@
1
+ (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[110,139,141,143,167,177,253,286,296,321,462,472,508,543,552,568,573,580,648,666,747,805,819,851,896,922,966,988],{4441:()=>{}},_=>{_.O(0,[441,794,358],()=>_(_.s=4441)),_N_E=_.O()}]);
@@ -0,0 +1 @@
1
+ (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[110,139,141,143,167,177,253,286,296,321,462,472,508,543,552,568,573,580,648,666,747,805,819,851,896,922,966,988],{4441:()=>{}},_=>{_.O(0,[441,794,358],()=>_(_.s=4441)),_N_E=_.O()}]);
@@ -0,0 +1 @@
1
+ (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[110,139,141,143,167,177,253,286,296,321,462,472,508,543,552,568,573,580,648,666,747,805,819,851,896,922,966,988],{4441:()=>{}},_=>{_.O(0,[441,794,358],()=>_(_.s=4441)),_N_E=_.O()}]);
@@ -0,0 +1 @@
1
+ (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[110,139,141,143,167,177,253,286,296,321,462,472,508,543,552,568,573,580,648,666,747,805,819,851,896,922,966,988],{4441:()=>{}},_=>{_.O(0,[441,794,358],()=>_(_.s=4441)),_N_E=_.O()}]);
@@ -0,0 +1 @@
1
+ (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[110,139,141,143,167,177,253,286,296,321,462,472,508,543,552,568,573,580,648,666,747,805,819,851,896,922,966,988],{4441:()=>{}},_=>{_.O(0,[441,794,358],()=>_(_.s=4441)),_N_E=_.O()}]);
@@ -0,0 +1 @@
1
+ (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[110,139,141,143,167,177,253,286,296,321,462,472,508,543,552,568,573,580,648,666,747,805,819,851,896,922,966,988],{4441:()=>{}},_=>{_.O(0,[441,794,358],()=>_(_.s=4441)),_N_E=_.O()}]);
@@ -0,0 +1 @@
1
+ (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[110,139,141,143,167,177,253,286,296,321,462,472,508,543,552,568,573,580,648,666,747,805,819,851,896,922,966,988],{4441:()=>{}},_=>{_.O(0,[441,794,358],()=>_(_.s=4441)),_N_E=_.O()}]);
@@ -0,0 +1 @@
1
+ (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[110,139,141,143,167,177,253,286,296,321,462,472,508,543,552,568,573,580,648,666,747,805,819,851,896,922,966,988],{4441:()=>{}},_=>{_.O(0,[441,794,358],()=>_(_.s=4441)),_N_E=_.O()}]);
@@ -0,0 +1 @@
1
+ (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[110,139,141,143,167,177,253,286,296,321,462,472,508,543,552,568,573,580,648,666,747,805,819,851,896,922,966,988],{4441:()=>{}},_=>{_.O(0,[441,794,358],()=>_(_.s=4441)),_N_E=_.O()}]);
@@ -0,0 +1 @@
1
+ (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[110,139,141,143,167,177,253,286,296,321,462,472,508,543,552,568,573,580,648,666,747,805,819,851,896,922,966,988],{4441:()=>{}},_=>{_.O(0,[441,794,358],()=>_(_.s=4441)),_N_E=_.O()}]);
@@ -0,0 +1 @@
1
+ (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[110,139,141,143,167,177,253,286,296,321,462,472,508,543,552,568,573,580,648,666,747,805,819,851,896,922,966,988],{4441:()=>{}},_=>{_.O(0,[441,794,358],()=>_(_.s=4441)),_N_E=_.O()}]);
@@ -0,0 +1 @@
1
+ (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[110,139,141,143,167,177,253,286,296,321,462,472,508,543,552,568,573,580,648,666,747,805,819,851,896,922,966,988],{4441:()=>{}},_=>{_.O(0,[441,794,358],()=>_(_.s=4441)),_N_E=_.O()}]);
@@ -0,0 +1 @@
1
+ (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[110,139,141,143,167,177,253,286,296,321,462,472,508,543,552,568,573,580,648,666,747,805,819,851,896,922,966,988],{4441:()=>{}},_=>{_.O(0,[441,794,358],()=>_(_.s=4441)),_N_E=_.O()}]);
@@ -0,0 +1 @@
1
+ (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[110,139,141,143,167,177,253,286,296,321,462,472,508,543,552,568,573,580,648,666,747,805,819,851,896,922,966,988],{4441:()=>{}},_=>{_.O(0,[441,794,358],()=>_(_.s=4441)),_N_E=_.O()}]);
@@ -0,0 +1 @@
1
+ (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[110,139,141,143,167,177,253,286,296,321,462,472,508,543,552,568,573,580,648,666,747,805,819,851,896,922,966,988],{4441:()=>{}},_=>{_.O(0,[441,794,358],()=>_(_.s=4441)),_N_E=_.O()}]);
@@ -0,0 +1 @@
1
+ (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[110,139,141,143,167,177,253,286,296,321,462,472,508,543,552,568,573,580,648,666,747,805,819,851,896,922,966,988],{4441:()=>{}},_=>{_.O(0,[441,794,358],()=>_(_.s=4441)),_N_E=_.O()}]);
@@ -0,0 +1 @@
1
+ (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[110,139,141,143,167,177,253,286,296,321,462,472,508,543,552,568,573,580,648,666,747,805,819,851,896,922,966,988],{4441:()=>{}},_=>{_.O(0,[441,794,358],()=>_(_.s=4441)),_N_E=_.O()}]);
@@ -0,0 +1 @@
1
+ (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[110,139,141,143,167,177,253,286,296,321,462,472,508,543,552,568,573,580,648,666,747,805,819,851,896,922,966,988],{4441:()=>{}},_=>{_.O(0,[441,794,358],()=>_(_.s=4441)),_N_E=_.O()}]);
@@ -0,0 +1 @@
1
+ (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[110,139,141,143,167,177,253,286,296,321,462,472,508,543,552,568,573,580,648,666,747,805,819,851,896,922,966,988],{4441:()=>{}},_=>{_.O(0,[441,794,358],()=>_(_.s=4441)),_N_E=_.O()}]);
@@ -0,0 +1 @@
1
+ (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[110,139,141,143,167,177,253,286,296,321,462,472,508,543,552,568,573,580,648,666,747,805,819,851,896,922,966,988],{4441:()=>{}},_=>{_.O(0,[441,794,358],()=>_(_.s=4441)),_N_E=_.O()}]);
@@ -0,0 +1 @@
1
+ (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[110,139,141,143,167,177,253,286,296,321,462,472,508,543,552,568,573,580,648,666,747,805,819,851,896,922,966,988],{4441:()=>{}},_=>{_.O(0,[441,794,358],()=>_(_.s=4441)),_N_E=_.O()}]);
@@ -0,0 +1 @@
1
+ (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[110,139,141,143,167,177,253,286,296,321,462,472,508,543,552,568,573,580,648,666,747,805,819,851,896,922,966,988],{4441:()=>{}},_=>{_.O(0,[441,794,358],()=>_(_.s=4441)),_N_E=_.O()}]);
@@ -0,0 +1 @@
1
+ (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[110,139,141,143,167,177,253,286,296,321,462,472,508,543,552,568,573,580,648,666,747,805,819,851,896,922,966,988],{4441:()=>{}},_=>{_.O(0,[441,794,358],()=>_(_.s=4441)),_N_E=_.O()}]);
@@ -0,0 +1 @@
1
+ (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[110,139,141,143,167,177,253,286,296,321,462,472,508,543,552,568,573,580,648,666,747,805,819,851,896,922,966,988],{4441:()=>{}},_=>{_.O(0,[441,794,358],()=>_(_.s=4441)),_N_E=_.O()}]);
@@ -0,0 +1,3 @@
1
+ @font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/_next/static/media/ba9851c3c22cd980-s.woff2) format("woff2");unicode-range:u+0460-052f,u+1c80-1c8a,u+20b4,u+2de0-2dff,u+a640-a69f,u+fe2e-fe2f}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/_next/static/media/21350d82a1f187e9-s.woff2) format("woff2");unicode-range:u+0301,u+0400-045f,u+0490-0491,u+04b0-04b1,u+2116}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/_next/static/media/c5fe6dc8356a8c31-s.woff2) format("woff2");unicode-range:u+1f??}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/_next/static/media/19cfc7226ec3afaa-s.woff2) format("woff2");unicode-range:u+0370-0377,u+037a-037f,u+0384-038a,u+038c,u+038e-03a1,u+03a3-03ff}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/_next/static/media/df0a9ae256c0569c-s.woff2) format("woff2");unicode-range:u+0102-0103,u+0110-0111,u+0128-0129,u+0168-0169,u+01a0-01a1,u+01af-01b0,u+0300-0301,u+0303-0304,u+0308-0309,u+0323,u+0329,u+1ea0-1ef9,u+20ab}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/_next/static/media/8e9860b6e62d6359-s.woff2) format("woff2");unicode-range:u+0100-02ba,u+02bd-02c5,u+02c7-02cc,u+02ce-02d7,u+02dd-02ff,u+0304,u+0308,u+0329,u+1d00-1dbf,u+1e00-1e9f,u+1ef2-1eff,u+2020,u+20a0-20ab,u+20ad-20c0,u+2113,u+2c60-2c7f,u+a720-a7ff}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/_next/static/media/e4af272ccee01ff0-s.p.woff2) format("woff2");unicode-range:u+00??,u+0131,u+0152-0153,u+02bb-02bc,u+02c6,u+02da,u+02dc,u+0304,u+0308,u+0329,u+2000-206f,u+20ac,u+2122,u+2191,u+2193,u+2212,u+2215,u+feff,u+fffd}@font-face{font-family:Inter Fallback;src:local("Arial");ascent-override:90.44%;descent-override:22.52%;line-gap-override:0.00%;size-adjust:107.12%}.__className_f367f3{font-family:Inter,Inter Fallback;font-style:normal}.__variable_f367f3{--font-inter:"Inter","Inter Fallback"}
2
+
3
+ /*! tailwindcss v4.2.1 | MIT License | https://tailwindcss.com */@import "https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:wght,FILL@100..700,0..1&display=swap";@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,::backdrop,:after,:before{--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-space-y-reverse:0;--tw-divide-y-reverse:0;--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;--tw-scale-x:1;--tw-scale-y:1;--tw-scale-z:1}}}@layer theme{:host,:root{--font-sans:-apple-system,BlinkMacSystemFont,"SF Pro Text","SF Pro Display",system-ui,sans-serif;--font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--color-red-50:oklch(97.1% .013 17.38);--color-red-100:oklch(93.6% .032 17.717);--color-red-200:oklch(88.5% .062 18.334);--color-red-300:oklch(80.8% .114 19.571);--color-red-400:oklch(70.4% .191 22.216);--color-red-500:oklch(63.7% .237 25.331);--color-red-600:oklch(57.7% .245 27.325);--color-red-800:oklch(44.4% .177 26.899);--color-red-900:oklch(39.6% .141 25.723);--color-orange-200:oklch(90.1% .076 70.697);--color-orange-400:oklch(75% .183 55.934);--color-orange-500:oklch(70.5% .213 47.604);--color-orange-900:oklch(40.8% .123 38.172);--color-amber-50:oklch(98.7% .022 95.277);--color-amber-100:oklch(96.2% .059 95.617);--color-amber-200:oklch(92.4% .12 95.746);--color-amber-300:oklch(87.9% .169 91.605);--color-amber-400:oklch(82.8% .189 84.429);--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-amber-800:oklch(47.3% .137 46.201);--color-amber-900:oklch(41.4% .112 45.904);--color-yellow-400:oklch(85.2% .199 91.936);--color-yellow-500:oklch(79.5% .184 86.047);--color-yellow-600:oklch(68.1% .162 75.834);--color-lime-500:oklch(76.8% .233 130.85);--color-green-50:oklch(98.2% .018 155.826);--color-green-100:oklch(96.2% .044 156.743);--color-green-200:oklch(92.5% .084 155.995);--color-green-400:oklch(79.2% .209 151.711);--color-green-500:oklch(72.3% .219 149.579);--color-green-600:oklch(62.7% .194 149.214);--color-green-700:oklch(52.7% .154 150.069);--color-green-800:oklch(44.8% .119 151.328);--color-green-900:oklch(39.3% .095 152.535);--color-emerald-400:oklch(76.5% .177 163.223);--color-emerald-500:oklch(69.6% .17 162.48);--color-teal-500:oklch(70.4% .14 182.503);--color-cyan-400:oklch(78.9% .154 211.53);--color-cyan-500:oklch(71.5% .143 215.221);--color-sky-500:oklch(68.5% .169 237.323);--color-blue-50:oklch(97% .014 254.604);--color-blue-200:oklch(88.2% .059 254.128);--color-blue-400:oklch(70.7% .165 254.624);--color-blue-500:oklch(62.3% .214 259.815);--color-blue-600:oklch(54.6% .245 262.881);--color-blue-800:oklch(42.4% .199 265.638);--color-blue-900:oklch(37.9% .146 265.522);--color-indigo-500:oklch(58.5% .233 277.117);--color-violet-500:oklch(60.6% .25 292.717);--color-purple-400:oklch(71.4% .203 305.504);--color-purple-500:oklch(62.7% .265 303.9);--color-purple-600:oklch(55.8% .288 302.321);--color-fuchsia-500:oklch(66.7% .295 322.15);--color-pink-500:oklch(65.6% .241 354.308);--color-rose-500:oklch(64.5% .246 16.439);--color-gray-400:oklch(70.7% .022 261.325);--color-gray-500:oklch(55.1% .027 264.364);--color-gray-900:oklch(21% .034 264.665);--color-zinc-300:oklch(87.1% .006 286.286);--color-zinc-600:oklch(44.2% .017 285.786);--color-zinc-800:oklch(27.4% .006 286.033);--color-zinc-950:oklch(14.1% .005 285.823);--color-black:#000;--color-white:#fff;--spacing:.25rem;--container-sm:24rem;--container-md:28rem;--container-lg:32rem;--container-xl:36rem;--container-4xl:56rem;--container-6xl:72rem;--container-7xl:80rem;--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:calc(1.5 / 1);--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-2xl:1.5rem;--text-2xl--line-height:calc(2 / 1.5);--text-3xl:1.875rem;--text-3xl--line-height:calc(2.25 / 1.875);--text-6xl:3.75rem;--text-6xl--line-height:1;--font-weight-light:300;--font-weight-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--tracking-tight:-.025em;--tracking-wider:.05em;--leading-snug:1.375;--leading-relaxed:1.625;--radius-md:.375rem;--radius-lg:.5rem;--radius-xl:.75rem;--ease-in-out:cubic-bezier(.4,0,.2,1);--animate-spin:spin 1s linear infinite;--animate-pulse:pulse 2s cubic-bezier(.4,0,.6,1) infinite;--blur-sm:8px;--blur-md:12px;--blur-xl:24px;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4,0,.2,1);--default-font-family:-apple-system,BlinkMacSystemFont,"SF Pro Text","SF Pro Display",system-ui,sans-serif;--default-mono-font-family:var(--font-mono);--color-primary:var(--color-primary);--color-primary-hover:var(--color-primary-hover);--color-bg:var(--color-bg);--color-surface:var(--color-surface);--color-sidebar:var(--color-sidebar);--color-border:var(--color-border);--color-text-main:var(--color-text-main);--color-text-muted:var(--color-text-muted);--shadow-soft:var(--shadow-soft);--shadow-warm:var(--shadow-warm);--shadow-elevated:var(--shadow-elevated)}}@layer base{*,::backdrop,:after,:before{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}:host,html{-webkit-text-size-adjust:100%;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,pre,samp{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}menu,ol,ul{list-style:none}audio,canvas,embed,iframe,img,object,svg,video{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,optgroup,select,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,::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-millisecond-field,::-webkit-datetime-edit-second-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]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.pointer-events-none{pointer-events:none}.visible{visibility:visible}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.sticky{position:sticky}.inset-0{inset:calc(var(--spacing) * 0)}.inset-y-0{inset-block:calc(var(--spacing) * 0)}.start{inset-inline-start:var(--spacing)}.end{inset-inline-end:var(--spacing)}.top-0{top:calc(var(--spacing) * 0)}.top-1\/2{top:50%}.top-4{top:calc(var(--spacing) * 4)}.top-6{top:calc(var(--spacing) * 6)}.top-full{top:100%}.right-0{right:calc(var(--spacing) * 0)}.right-1\.5{right:calc(var(--spacing) * 1.5)}.right-4{right:calc(var(--spacing) * 4)}.right-6{right:calc(var(--spacing) * 6)}.right-full{right:100%}.bottom-0{bottom:calc(var(--spacing) * 0)}.bottom-full{bottom:100%}.left-0{left:calc(var(--spacing) * 0)}.left-1\/2{left:50%}.left-2\.5{left:calc(var(--spacing) * 2.5)}.left-full{left:100%}.z-0{z-index:0}.z-10{z-index:10}.z-20{z-index:20}.z-40{z-index:40}.z-50{z-index:50}.z-\[80\]{z-index:80}.z-\[999\]{z-index:999}.col-span-2{grid-column:span 2/span 2}.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}}.-mx-3{margin-inline:calc(var(--spacing) * -3)}.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-4{margin-top:calc(var(--spacing) * 4)}.mt-6{margin-top:calc(var(--spacing) * 6)}.mr-1{margin-right:calc(var(--spacing) * 1)}.mr-1\.5{margin-right:calc(var(--spacing) * 1.5)}.mr-4{margin-right:calc(var(--spacing) * 4)}.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-3{margin-bottom:calc(var(--spacing) * 3)}.mb-4{margin-bottom:calc(var(--spacing) * 4)}.mb-6{margin-bottom:calc(var(--spacing) * 6)}.mb-12{margin-bottom:calc(var(--spacing) * 12)}.ml-1{margin-left:calc(var(--spacing) * 1)}.ml-1\.5{margin-left:calc(var(--spacing) * 1.5)}.ml-auto{margin-left:auto}.block{display:block}.contents{display:contents}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.table{display:table}.size-1\.5{width:calc(var(--spacing) * 1.5);height:calc(var(--spacing) * 1.5)}.size-3{width:calc(var(--spacing) * 3);height:calc(var(--spacing) * 3)}.size-4{width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}.size-5{width:calc(var(--spacing) * 5);height:calc(var(--spacing) * 5)}.size-6{width:calc(var(--spacing) * 6);height:calc(var(--spacing) * 6)}.size-7{width:calc(var(--spacing) * 7);height:calc(var(--spacing) * 7)}.size-8{width:calc(var(--spacing) * 8);height:calc(var(--spacing) * 8)}.size-10{width:calc(var(--spacing) * 10);height:calc(var(--spacing) * 10)}.size-11{width:calc(var(--spacing) * 11);height:calc(var(--spacing) * 11)}.size-12{width:calc(var(--spacing) * 12);height:calc(var(--spacing) * 12)}.size-16{width:calc(var(--spacing) * 16);height:calc(var(--spacing) * 16)}.h-1\.5{height:calc(var(--spacing) * 1.5)}.h-2{height:calc(var(--spacing) * 2)}.h-3{height:calc(var(--spacing) * 3)}.h-4{height:calc(var(--spacing) * 4)}.h-5{height:calc(var(--spacing) * 5)}.h-6{height:calc(var(--spacing) * 6)}.h-7{height:calc(var(--spacing) * 7)}.h-8{height:calc(var(--spacing) * 8)}.h-9{height:calc(var(--spacing) * 9)}.h-11{height:calc(var(--spacing) * 11)}.h-\[600px\]{height:600px}.h-\[800px\]{height:800px}.h-full{height:100%}.h-screen{height:100vh}.max-h-60{max-height:calc(var(--spacing) * 60)}.max-h-\[28px\]{max-height:28px}.max-h-\[90vh\]{max-height:90vh}.max-h-\[120px\]{max-height:120px}.max-h-\[280px\]{max-height:280px}.max-h-\[300px\]{max-height:300px}.max-h-\[400px\]{max-height:400px}.max-h-\[600px\]{max-height:600px}.max-h-\[calc\(80vh-140px\)\]{max-height:calc(80vh - 140px)}.min-h-screen{min-height:100vh}.w-1\.5{width:calc(var(--spacing) * 1.5)}.w-2{width:calc(var(--spacing) * 2)}.w-3{width:calc(var(--spacing) * 3)}.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-11{width:calc(var(--spacing) * 11)}.w-14{width:calc(var(--spacing) * 14)}.w-16{width:calc(var(--spacing) * 16)}.w-20{width:calc(var(--spacing) * 20)}.w-24{width:calc(var(--spacing) * 24)}.w-36{width:calc(var(--spacing) * 36)}.w-48{width:calc(var(--spacing) * 48)}.w-72{width:calc(var(--spacing) * 72)}.w-\[68px\]{width:68px}.w-\[340px\]{width:340px}.w-\[400px\]{width:400px}.w-\[500px\]{width:500px}.w-\[600px\]{width:600px}.w-\[800px\]{width:800px}.w-\[min\(92vw\,380px\)\]{width:min(92vw,380px)}.w-full{width:100%}.w-max{width:max-content}.max-w-4xl{max-width:var(--container-4xl)}.max-w-6xl{max-width:var(--container-6xl)}.max-w-7xl{max-width:var(--container-7xl)}.max-w-56{max-width:calc(var(--spacing) * 56)}.max-w-\[28px\]{max-width:28px}.max-w-\[150px\]{max-width:150px}.max-w-lg{max-width:var(--container-lg)}.max-w-md{max-width:var(--container-md)}.max-w-sm{max-width:var(--container-sm)}.max-w-xl{max-width:var(--container-xl)}.min-w-0{min-width:calc(var(--spacing) * 0)}.flex-1{flex:1}.flex-shrink-0,.shrink-0{flex-shrink:0}.border-collapse{border-collapse:collapse}.-translate-x-1\/2{--tw-translate-x:calc(calc(1 / 2 * 100%) * -1)}.-translate-x-1\/2,.-translate-x-full{translate:var(--tw-translate-x) var(--tw-translate-y)}.-translate-x-full{--tw-translate-x:-100%}.translate-x-0{--tw-translate-x:calc(var(--spacing) * 0)}.translate-x-0,.translate-x-0\.5{translate:var(--tw-translate-x) var(--tw-translate-y)}.translate-x-0\.5{--tw-translate-x:calc(var(--spacing) * .5)}.translate-x-1{--tw-translate-x:calc(var(--spacing) * 1)}.translate-x-1,.translate-x-1\/3{translate:var(--tw-translate-x) var(--tw-translate-y)}.translate-x-1\/3{--tw-translate-x:calc(1 / 3 * 100%)}.translate-x-4{--tw-translate-x:calc(var(--spacing) * 4)}.translate-x-4,.translate-x-5{translate:var(--tw-translate-x) var(--tw-translate-y)}.translate-x-5{--tw-translate-x:calc(var(--spacing) * 5)}.translate-x-7{--tw-translate-x:calc(var(--spacing) * 7)}.-translate-y-1\/2,.translate-x-7{translate:var(--tw-translate-x) var(--tw-translate-y)}.-translate-y-1\/2{--tw-translate-y:calc(calc(1 / 2 * 100%) * -1)}.translate-y-1\/3{--tw-translate-y:calc(1 / 3 * 100%);translate:var(--tw-translate-x) var(--tw-translate-y)}.rotate-0{rotate:none}.rotate-180{rotate:180deg}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.animate-pulse{animation:var(--animate-pulse)}.animate-spin{animation:var(--animate-spin)}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.cursor-wait{cursor:wait}.resize-none{resize:none}.list-inside{list-style-position:inside}.list-decimal{list-style-type:decimal}.appearance-none{appearance:none}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.items-start{align-items:flex-start}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.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-3{gap:calc(var(--spacing) * 3)}.gap-4{gap:calc(var(--spacing) * 4)}.gap-6{gap:calc(var(--spacing) * 6)}.gap-10{gap:calc(var(--spacing) * 10)}:where(.space-y-1>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 1) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 1) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-1\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 1.5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 1.5) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-2>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 2) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 2) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-3>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 3) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 3) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-4>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 4) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 4) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-6>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 6) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 6) * calc(1 - var(--tw-space-y-reverse)))}.gap-x-4{column-gap:calc(var(--spacing) * 4)}.gap-y-3{row-gap:calc(var(--spacing) * 3)}:where(.divide-y>:not(:last-child)){--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(1px * var(--tw-divide-y-reverse));border-bottom-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)))}:where(.divide-border>:not(:last-child)),:where(.divide-border\/50>:not(:last-child)){border-color:var(--color-border)}@supports (color:color-mix(in lab,red,red)){:where(.divide-border\/50>:not(:last-child)){border-color:color-mix(in oklab,var(--color-border) 50%,transparent)}}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-x-hidden{overflow-x:hidden}.overflow-y-auto{overflow-y:auto}.rounded{border-radius:.25rem}.rounded-full{border-radius:3.40282e+38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.rounded-xl{border-radius:var(--radius-xl)}.border{border-style:var(--tw-border-style);border-width:1px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-l{border-left-style:var(--tw-border-style);border-left-width:1px}.border-dashed{--tw-border-style:dashed;border-style:dashed}.border-amber-200{border-color:var(--color-amber-200)}.border-amber-500\/20{border-color:#f99c0033}@supports (color:color-mix(in lab,red,red)){.border-amber-500\/20{border-color:color-mix(in oklab,var(--color-amber-500) 20%,transparent)}}.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-black\/5{border-color:#0000000d}@supports (color:color-mix(in lab,red,red)){.border-black\/5{border-color:color-mix(in oklab,var(--color-black) 5%,transparent)}}.border-black\/10{border-color:#0000001a}@supports (color:color-mix(in lab,red,red)){.border-black\/10{border-color:color-mix(in oklab,var(--color-black) 10%,transparent)}}.border-black\/15{border-color:#00000026}@supports (color:color-mix(in lab,red,red)){.border-black\/15{border-color:color-mix(in oklab,var(--color-black) 15%,transparent)}}.border-black\/\[0\.03\]{border-color:#00000008}@supports (color:color-mix(in lab,red,red)){.border-black\/\[0\.03\]{border-color:color-mix(in oklab,var(--color-black) 3%,transparent)}}.border-blue-200{border-color:var(--color-blue-200)}.border-blue-500\/30{border-color:#3080ff4d}@supports (color:color-mix(in lab,red,red)){.border-blue-500\/30{border-color:color-mix(in oklab,var(--color-blue-500) 30%,transparent)}}.border-border,.border-border\/30{border-color:var(--color-border)}@supports (color:color-mix(in lab,red,red)){.border-border\/30{border-color:color-mix(in oklab,var(--color-border) 30%,transparent)}}.border-border\/50{border-color:var(--color-border)}@supports (color:color-mix(in lab,red,red)){.border-border\/50{border-color:color-mix(in oklab,var(--color-border) 50%,transparent)}}.border-green-200{border-color:var(--color-green-200)}.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-primary,.border-primary\/20{border-color:var(--color-primary)}@supports (color:color-mix(in lab,red,red)){.border-primary\/20{border-color:color-mix(in oklab,var(--color-primary) 20%,transparent)}}.border-primary\/30{border-color:var(--color-primary)}@supports (color:color-mix(in lab,red,red)){.border-primary\/30{border-color:color-mix(in oklab,var(--color-primary) 30%,transparent)}}.border-red-200{border-color:var(--color-red-200)}.border-red-500{border-color:var(--color-red-500)}.border-red-500\/20{border-color:#fb2c3633}@supports (color:color-mix(in lab,red,red)){.border-red-500\/20{border-color:color-mix(in oklab,var(--color-red-500) 20%,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-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)}}.border-zinc-800{border-color:var(--color-zinc-800)}.bg-\[\#27C93F\]{background-color:#27c93f}.bg-\[\#FF5F56\]{background-color:#ff5f56}.bg-\[\#FFBD2E\]{background-color:#ffbd2e}.bg-amber-50{background-color:var(--color-amber-50)}.bg-amber-500{background-color:var(--color-amber-500)}.bg-amber-500\/10{background-color:#f99c001a}@supports (color:color-mix(in lab,red,red)){.bg-amber-500\/10{background-color:color-mix(in oklab,var(--color-amber-500) 10%,transparent)}}.bg-bg,.bg-bg\/80{background-color:var(--color-bg)}@supports (color:color-mix(in lab,red,red)){.bg-bg\/80{background-color:color-mix(in oklab,var(--color-bg) 80%,transparent)}}.bg-black\/5{background-color:#0000000d}@supports (color:color-mix(in lab,red,red)){.bg-black\/5{background-color:color-mix(in oklab,var(--color-black) 5%,transparent)}}.bg-black\/10{background-color:#0000001a}@supports (color:color-mix(in lab,red,red)){.bg-black\/10{background-color:color-mix(in oklab,var(--color-black) 10%,transparent)}}.bg-black\/20{background-color:#0003}@supports (color:color-mix(in lab,red,red)){.bg-black\/20{background-color:color-mix(in oklab,var(--color-black) 20%,transparent)}}.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\/80{background-color:#000c}@supports (color:color-mix(in lab,red,red)){.bg-black\/80{background-color:color-mix(in oklab,var(--color-black) 80%,transparent)}}.bg-black\/\[0\.02\]{background-color:#00000005}@supports (color:color-mix(in lab,red,red)){.bg-black\/\[0\.02\]{background-color:color-mix(in oklab,var(--color-black) 2%,transparent)}}.bg-blue-50{background-color:var(--color-blue-50)}.bg-blue-500{background-color:var(--color-blue-500)}.bg-blue-500\/10{background-color:#3080ff1a}@supports (color:color-mix(in lab,red,red)){.bg-blue-500\/10{background-color:color-mix(in oklab,var(--color-blue-500) 10%,transparent)}}.bg-border{background-color:var(--color-border)}.bg-cyan-500{background-color:var(--color-cyan-500)}.bg-emerald-500{background-color:var(--color-emerald-500)}.bg-fuchsia-500{background-color:var(--color-fuchsia-500)}.bg-gray-500{background-color:var(--color-gray-500)}.bg-gray-900{background-color:var(--color-gray-900)}.bg-green-50{background-color:var(--color-green-50)}.bg-green-100{background-color:var(--color-green-100)}.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\/15{background-color:#00c75826}@supports (color:color-mix(in lab,red,red)){.bg-green-500\/15{background-color:color-mix(in oklab,var(--color-green-500) 15%,transparent)}}.bg-indigo-500{background-color:var(--color-indigo-500)}.bg-lime-500{background-color:var(--color-lime-500)}.bg-orange-200\/20{background-color:#ffd7a833}@supports (color:color-mix(in lab,red,red)){.bg-orange-200\/20{background-color:color-mix(in oklab,var(--color-orange-200) 20%,transparent)}}.bg-orange-500{background-color:var(--color-orange-500)}.bg-pink-500{background-color:var(--color-pink-500)}.bg-primary,.bg-primary\/5{background-color:var(--color-primary)}@supports (color:color-mix(in lab,red,red)){.bg-primary\/5{background-color:color-mix(in oklab,var(--color-primary) 5%,transparent)}}.bg-primary\/10{background-color:var(--color-primary)}@supports (color:color-mix(in lab,red,red)){.bg-primary\/10{background-color:color-mix(in oklab,var(--color-primary) 10%,transparent)}}.bg-primary\/15{background-color:var(--color-primary)}@supports (color:color-mix(in lab,red,red)){.bg-primary\/15{background-color:color-mix(in oklab,var(--color-primary) 15%,transparent)}}.bg-purple-500{background-color:var(--color-purple-500)}.bg-red-50{background-color:var(--color-red-50)}.bg-red-100{background-color:var(--color-red-100)}.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\/15{background-color:#fb2c3626}@supports (color:color-mix(in lab,red,red)){.bg-red-500\/15{background-color:color-mix(in oklab,var(--color-red-500) 15%,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-rose-500{background-color:var(--color-rose-500)}.bg-sidebar{background-color:var(--color-sidebar)}.bg-sky-500{background-color:var(--color-sky-500)}.bg-surface,.bg-surface\/30{background-color:var(--color-surface)}@supports (color:color-mix(in lab,red,red)){.bg-surface\/30{background-color:color-mix(in oklab,var(--color-surface) 30%,transparent)}}.bg-surface\/50{background-color:var(--color-surface)}@supports (color:color-mix(in lab,red,red)){.bg-surface\/50{background-color:color-mix(in oklab,var(--color-surface) 50%,transparent)}}.bg-surface\/60{background-color:var(--color-surface)}@supports (color:color-mix(in lab,red,red)){.bg-surface\/60{background-color:color-mix(in oklab,var(--color-surface) 60%,transparent)}}.bg-teal-500{background-color:var(--color-teal-500)}.bg-text-muted\/10{background-color:var(--color-text-muted)}@supports (color:color-mix(in lab,red,red)){.bg-text-muted\/10{background-color:color-mix(in oklab,var(--color-text-muted) 10%,transparent)}}.bg-violet-500{background-color:var(--color-violet-500)}.bg-white{background-color:var(--color-white)}.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-zinc-950{background-color:var(--color-zinc-950)}.bg-gradient-to-b{--tw-gradient-position:to bottom in oklab}.bg-gradient-to-b,.bg-gradient-to-br{background-image:linear-gradient(var(--tw-gradient-stops))}.bg-gradient-to-br{--tw-gradient-position:to bottom right in oklab}.from-blue-500{--tw-gradient-from:var(--color-blue-500);--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-primary{--tw-gradient-from:var(--color-primary);--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-primary-hover{--tw-gradient-to:var(--color-primary-hover);--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-purple-600{--tw-gradient-to:var(--color-purple-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))}.bg-cover{background-size:cover}.bg-center{background-position:50%}.bg-no-repeat{background-repeat:no-repeat}.object-contain{object-fit:contain}.p-0{padding:calc(var(--spacing) * 0)}.p-0\.5{padding:calc(var(--spacing) * .5)}.p-1{padding:calc(var(--spacing) * 1)}.p-1\.5{padding:calc(var(--spacing) * 1.5)}.p-2{padding:calc(var(--spacing) * 2)}.p-3{padding:calc(var(--spacing) * 3)}.p-4{padding:calc(var(--spacing) * 4)}.p-4\!{padding:calc(var(--spacing) * 4)!important}.p-6{padding:calc(var(--spacing) * 6)}.p-8{padding:calc(var(--spacing) * 8)}.px-0{padding-inline:calc(var(--spacing) * 0)}.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-4{padding-inline:calc(var(--spacing) * 4)}.px-6{padding-inline:calc(var(--spacing) * 6)}.px-8{padding-inline:calc(var(--spacing) * 8)}.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-4{padding-block:calc(var(--spacing) * 4)}.py-5{padding-block:calc(var(--spacing) * 5)}.py-6{padding-block:calc(var(--spacing) * 6)}.py-8{padding-block:calc(var(--spacing) * 8)}.pt-2{padding-top:calc(var(--spacing) * 2)}.pt-4{padding-top:calc(var(--spacing) * 4)}.pt-8{padding-top:calc(var(--spacing) * 8)}.pt-16{padding-top:calc(var(--spacing) * 16)}.pr-3{padding-right:calc(var(--spacing) * 3)}.pr-8{padding-right:calc(var(--spacing) * 8)}.pr-10{padding-right:calc(var(--spacing) * 10)}.pb-1{padding-bottom:calc(var(--spacing) * 1)}.pb-2{padding-bottom:calc(var(--spacing) * 2)}.pb-12{padding-bottom:calc(var(--spacing) * 12)}.pl-3{padding-left:calc(var(--spacing) * 3)}.pl-8{padding-left:calc(var(--spacing) * 8)}.pl-10{padding-left:calc(var(--spacing) * 10)}.text-center{text-align:center}.text-left{text-align:left}.text-right{text-align:right}.font-mono{font-family:var(--font-mono)}.font-sans{font-family:-apple-system,BlinkMacSystemFont,SF Pro Text,SF Pro Display,system-ui,sans-serif}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.text-6xl{font-size:var(--text-6xl);line-height:var(--tw-leading,var(--text-6xl--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-\[9px\]{font-size:9px}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.text-\[12px\]{font-size:12px}.text-\[14px\]{font-size:14px}.text-\[16px\]{font-size:16px}.text-\[18px\]{font-size:18px}.text-\[20px\]{font-size:20px}.text-\[22px\]{font-size:22px}.text-\[32px\]{font-size:32px}.leading-5{--tw-leading:calc(var(--spacing) * 5);line-height:calc(var(--spacing) * 5)}.leading-\[1\.6\]{--tw-leading:1.6;line-height:1.6}.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)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-light{--tw-font-weight:var(--font-weight-light);font-weight:var(--font-weight-light)}.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-wider{--tw-tracking:var(--tracking-wider);letter-spacing:var(--tracking-wider)}.break-words{overflow-wrap:break-word}.break-all{word-break:break-all}.whitespace-normal{white-space:normal}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.text-amber-400{color:var(--color-amber-400)}.text-amber-600{color:var(--color-amber-600)}.text-amber-700{color:var(--color-amber-700)}.text-amber-800{color:var(--color-amber-800)}.text-amber-900{color:var(--color-amber-900)}.text-blue-400{color:var(--color-blue-400)}.text-blue-500{color:var(--color-blue-500)}.text-blue-600{color:var(--color-blue-600)}.text-blue-800{color:var(--color-blue-800)}.text-current\/70{color:currentColor}@supports (color:color-mix(in lab,red,red)){.text-current\/70{color:color-mix(in oklab,currentcolor 70%,transparent)}}.text-cyan-400{color:var(--color-cyan-400)}.text-emerald-400{color:var(--color-emerald-400)}.text-gray-400{color:var(--color-gray-400)}.text-green-400{color:var(--color-green-400)}.text-green-500{color:var(--color-green-500)}.text-green-600{color:var(--color-green-600)}.text-green-600\/80{color:#00a544cc}@supports (color:color-mix(in lab,red,red)){.text-green-600\/80{color:color-mix(in oklab,var(--color-green-600) 80%,transparent)}}.text-green-700{color:var(--color-green-700)}.text-green-800{color:var(--color-green-800)}.text-orange-400{color:var(--color-orange-400)}.text-orange-500{color:var(--color-orange-500)}.text-primary{color:var(--color-primary)}.text-purple-400{color:var(--color-purple-400)}.text-red-400{color:var(--color-red-400)}.text-red-500{color:var(--color-red-500)}.text-red-600{color:var(--color-red-600)}.text-text-main{color:var(--color-text-main)}.text-text-muted{color:var(--color-text-muted)}.text-text-muted-light{color:#75736e}.text-white{color:var(--color-white)}.text-yellow-400{color:var(--color-yellow-400)}.text-yellow-500{color:var(--color-yellow-500)}.text-yellow-600{color:var(--color-yellow-600)}.text-zinc-300{color:var(--color-zinc-300)}.text-zinc-600{color:var(--color-zinc-600)}.lowercase{text-transform:lowercase}.uppercase{text-transform:uppercase}.italic{font-style:italic}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.placeholder-text-muted::placeholder,.placeholder-text-muted\/50::placeholder{color:var(--color-text-muted)}@supports (color:color-mix(in lab,red,red)){.placeholder-text-muted\/50::placeholder{color:color-mix(in oklab,var(--color-text-muted) 50%,transparent)}}.placeholder-text-muted\/60::placeholder{color:var(--color-text-muted)}@supports (color:color-mix(in lab,red,red)){.placeholder-text-muted\/60::placeholder{color:color-mix(in oklab,var(--color-text-muted) 60%,transparent)}}.opacity-0{opacity:0}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.opacity-70{opacity:.7}.shadow-2xl{--tw-shadow:0 25px 50px -12px var(--tw-shadow-color,#00000040)}.shadow-2xl,.shadow-inner{box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-inner{--tw-shadow:inset 0 2px 4px 0 var(--tw-shadow-color,#0000000d)}.shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a),0 4px 6px -4px var(--tw-shadow-color,#0000001a)}.shadow-lg,.shadow-sm{box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-sm{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a)}.shadow-xl{--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000001a),0 8px 10px -6px var(--tw-shadow-color,#0000001a)}.ring-2,.shadow-xl{box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-2{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor)}.ring-white{--tw-ring-color:var(--color-white)}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.blur-\[100px\]{--tw-blur:blur(100px)}.blur-\[100px\],.blur-\[120px\]{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.blur-\[120px\]{--tw-blur:blur(120px)}.filter{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.backdrop-blur-md{--tw-backdrop-blur:blur(var(--blur-md))}.backdrop-blur-md,.backdrop-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-sm{--tw-backdrop-blur:blur(var(--blur-sm))}.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-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))}.transition-transform{transition-property:transform,translate,scale,rotate;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}.ease-in-out{--tw-ease:var(--ease-in-out);transition-timing-function:var(--ease-in-out)}.select-all{-webkit-user-select:all;user-select:all}.select-none{-webkit-user-select:none;user-select:none}@media (hover:hover){.group-hover\:rotate-12:is(:where(.group):hover *){rotate:12deg}.group-hover\:text-primary:is(:where(.group):hover *){color:var(--color-primary)}.group-hover\:opacity-100:is(:where(.group):hover *){opacity:1}}.selection\:bg-primary\/20 ::selection{background-color:var(--color-primary)}@supports (color:color-mix(in lab,red,red)){.selection\:bg-primary\/20 ::selection{background-color:color-mix(in oklab,var(--color-primary) 20%,transparent)}}.selection\:bg-primary\/20::selection{background-color:var(--color-primary)}@supports (color:color-mix(in lab,red,red)){.selection\:bg-primary\/20::selection{background-color:color-mix(in oklab,var(--color-primary) 20%,transparent)}}.selection\:text-primary ::selection{color:var(--color-primary)}.selection\:text-primary::selection{color:var(--color-primary)}.last\:border-0:last-child{border-style:var(--tw-border-style);border-width:0}.last\:border-b-0:last-child{border-bottom-style:var(--tw-border-style);border-bottom-width:0}@media (hover:hover){.hover\:cursor-pointer:hover{cursor:pointer}.hover\:border-primary:hover,.hover\:border-primary\/30:hover{border-color:var(--color-primary)}@supports (color:color-mix(in lab,red,red)){.hover\:border-primary\/30:hover{border-color:color-mix(in oklab,var(--color-primary) 30%,transparent)}}.hover\:border-primary\/50:hover{border-color:var(--color-primary)}@supports (color:color-mix(in lab,red,red)){.hover\:border-primary\/50:hover{border-color:color-mix(in oklab,var(--color-primary) 50%,transparent)}}.hover\:border-red-300:hover{border-color:var(--color-red-300)}.hover\:bg-black\/5:hover{background-color:#0000000d}@supports (color:color-mix(in lab,red,red)){.hover\:bg-black\/5:hover{background-color:color-mix(in oklab,var(--color-black) 5%,transparent)}}.hover\:bg-black\/\[0\.02\]:hover{background-color:#00000005}@supports (color:color-mix(in lab,red,red)){.hover\:bg-black\/\[0\.02\]:hover{background-color:color-mix(in oklab,var(--color-black) 2%,transparent)}}.hover\:bg-blue-500\/20:hover{background-color:#3080ff33}@supports (color:color-mix(in lab,red,red)){.hover\:bg-blue-500\/20:hover{background-color:color-mix(in oklab,var(--color-blue-500) 20%,transparent)}}.hover\:bg-green-500\/20:hover{background-color:#00c75833}@supports (color:color-mix(in lab,red,red)){.hover\:bg-green-500\/20:hover{background-color:color-mix(in oklab,var(--color-green-500) 20%,transparent)}}.hover\:bg-primary\/5:hover{background-color:var(--color-primary)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-primary\/5:hover{background-color:color-mix(in oklab,var(--color-primary) 5%,transparent)}}.hover\:bg-primary\/10:hover{background-color:var(--color-primary)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-primary\/10:hover{background-color:color-mix(in oklab,var(--color-primary) 10%,transparent)}}.hover\:bg-primary\/20:hover{background-color:var(--color-primary)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-primary\/20:hover{background-color:color-mix(in oklab,var(--color-primary) 20%,transparent)}}.hover\:bg-primary\/90:hover{background-color:var(--color-primary)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-primary\/90:hover{background-color:color-mix(in oklab,var(--color-primary) 90%,transparent)}}.hover\:bg-red-50:hover{background-color:var(--color-red-50)}.hover\:bg-red-500\/10:hover{background-color:#fb2c361a}@supports (color:color-mix(in lab,red,red)){.hover\:bg-red-500\/10:hover{background-color:color-mix(in oklab,var(--color-red-500) 10%,transparent)}}.hover\:bg-red-500\/20:hover{background-color:#fb2c3633}@supports (color:color-mix(in lab,red,red)){.hover\:bg-red-500\/20:hover{background-color:color-mix(in oklab,var(--color-red-500) 20%,transparent)}}.hover\:bg-red-600:hover{background-color:var(--color-red-600)}.hover\:bg-sidebar:hover{background-color:var(--color-sidebar)}.hover\:bg-surface:hover,.hover\:bg-surface\/50:hover{background-color:var(--color-surface)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-surface\/50:hover{background-color:color-mix(in oklab,var(--color-surface) 50%,transparent)}}.hover\:bg-surface\/60:hover{background-color:var(--color-surface)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-surface\/60:hover{background-color:color-mix(in oklab,var(--color-surface) 60%,transparent)}}.hover\:bg-yellow-500\/20:hover{background-color:#edb20033}@supports (color:color-mix(in lab,red,red)){.hover\:bg-yellow-500\/20:hover{background-color:color-mix(in oklab,var(--color-yellow-500) 20%,transparent)}}.hover\:text-current:hover{color:currentColor}.hover\:text-primary:hover{color:var(--color-primary)}.hover\:text-red-500:hover{color:var(--color-red-500)}.hover\:text-text-main:hover{color:var(--color-text-main)}.hover\:underline:hover{text-decoration-line:underline}.hover\:shadow-md:hover{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a),0 2px 4px -2px 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)}}.focus\:border-primary:focus,.focus\:border-primary\/50:focus{border-color:var(--color-primary)}@supports (color:color-mix(in lab,red,red)){.focus\:border-primary\/50:focus{border-color:color-mix(in oklab,var(--color-primary) 50%,transparent)}}.focus\:border-red-500:focus{border-color:var(--color-red-500)}.focus\:ring-1:focus{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor)}.focus\:ring-1:focus,.focus\:ring-2:focus{box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus\:ring-2:focus{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor)}.focus\:ring-primary:focus,.focus\:ring-primary\/20:focus{--tw-ring-color:var(--color-primary)}@supports (color:color-mix(in lab,red,red)){.focus\:ring-primary\/20:focus{--tw-ring-color:color-mix(in oklab,var(--color-primary) 20%,transparent)}}.focus\:ring-primary\/30:focus{--tw-ring-color:var(--color-primary)}@supports (color:color-mix(in lab,red,red)){.focus\:ring-primary\/30:focus{--tw-ring-color:color-mix(in oklab,var(--color-primary) 30%,transparent)}}.focus\:ring-primary\/50:focus{--tw-ring-color:var(--color-primary)}@supports (color:color-mix(in lab,red,red)){.focus\:ring-primary\/50:focus{--tw-ring-color:color-mix(in oklab,var(--color-primary) 50%,transparent)}}.focus\:ring-red-500\/20:focus{--tw-ring-color:#fb2c3633}@supports (color:color-mix(in lab,red,red)){.focus\:ring-red-500\/20:focus{--tw-ring-color:color-mix(in oklab,var(--color-red-500) 20%,transparent)}}.focus\:outline-none:focus{--tw-outline-style:none;outline-style:none}.active\:scale-\[0\.99\]:active{scale:.99}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-50:disabled{opacity:.5}.disabled\:active\:scale-100:disabled:active{--tw-scale-x:100%;--tw-scale-y:100%;--tw-scale-z:100%;scale:var(--tw-scale-x) var(--tw-scale-y)}@media (min-width:40rem){.sm\:flex-row{flex-direction:row}.sm\:p-6{padding:calc(var(--spacing) * 6)}.sm\:px-6{padding-inline:calc(var(--spacing) * 6)}.sm\:text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}}@media (min-width:48rem){.md\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.md\:flex-row{flex-direction:row}}@media (min-width:64rem){.lg\:col-span-2{grid-column:span 2/span 2}.lg\:flex{display:flex}.lg\:hidden{display:none}.lg\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.lg\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.lg\:p-10{padding:calc(var(--spacing) * 10)}.lg\:px-8{padding-inline:calc(var(--spacing) * 8)}}.dark\:border-amber-800:where(.dark,.dark *){border-color:var(--color-amber-800)}.dark\:border-blue-800:where(.dark,.dark *){border-color:var(--color-blue-800)}.dark\:border-green-800:where(.dark,.dark *){border-color:var(--color-green-800)}.dark\:border-red-800:where(.dark,.dark *){border-color:var(--color-red-800)}.dark\:border-white\/5:where(.dark,.dark *){border-color:#ffffff0d}@supports (color:color-mix(in lab,red,red)){.dark\:border-white\/5:where(.dark,.dark *){border-color:color-mix(in oklab,var(--color-white) 5%,transparent)}}.dark\:border-white\/10:where(.dark,.dark *){border-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.dark\:border-white\/10:where(.dark,.dark *){border-color:color-mix(in oklab,var(--color-white) 10%,transparent)}}.dark\:border-white\/15:where(.dark,.dark *){border-color:#ffffff26}@supports (color:color-mix(in lab,red,red)){.dark\:border-white\/15:where(.dark,.dark *){border-color:color-mix(in oklab,var(--color-white) 15%,transparent)}}.dark\:border-white\/\[0\.03\]:where(.dark,.dark *){border-color:#ffffff08}@supports (color:color-mix(in lab,red,red)){.dark\:border-white\/\[0\.03\]:where(.dark,.dark *){border-color:color-mix(in oklab,var(--color-white) 3%,transparent)}}.dark\:bg-amber-900\/20:where(.dark,.dark *){background-color:#7b330633}@supports (color:color-mix(in lab,red,red)){.dark\:bg-amber-900\/20:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-amber-900) 20%,transparent)}}.dark\:bg-black\/20:where(.dark,.dark *){background-color:#0003}@supports (color:color-mix(in lab,red,red)){.dark\:bg-black\/20:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-black) 20%,transparent)}}.dark\:bg-blue-900\/20:where(.dark,.dark *){background-color:#1c398e33}@supports (color:color-mix(in lab,red,red)){.dark\:bg-blue-900\/20:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-blue-900) 20%,transparent)}}.dark\:bg-green-900\/20:where(.dark,.dark *){background-color:#0d542b33}@supports (color:color-mix(in lab,red,red)){.dark\:bg-green-900\/20:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-green-900) 20%,transparent)}}.dark\:bg-green-900\/30:where(.dark,.dark *){background-color:#0d542b4d}@supports (color:color-mix(in lab,red,red)){.dark\:bg-green-900\/30:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-green-900) 30%,transparent)}}.dark\:bg-orange-900\/10:where(.dark,.dark *){background-color:#7e2a0c1a}@supports (color:color-mix(in lab,red,red)){.dark\:bg-orange-900\/10:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-orange-900) 10%,transparent)}}.dark\:bg-primary\/5:where(.dark,.dark *){background-color:var(--color-primary)}@supports (color:color-mix(in lab,red,red)){.dark\:bg-primary\/5:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-primary) 5%,transparent)}}.dark\:bg-red-900\/20:where(.dark,.dark *){background-color:#82181a33}@supports (color:color-mix(in lab,red,red)){.dark\:bg-red-900\/20:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-red-900) 20%,transparent)}}.dark\:bg-red-900\/30:where(.dark,.dark *){background-color:#82181a4d}@supports (color:color-mix(in lab,red,red)){.dark\:bg-red-900\/30:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-red-900) 30%,transparent)}}.dark\:bg-white\/5:where(.dark,.dark *){background-color:#ffffff0d}@supports (color:color-mix(in lab,red,red)){.dark\:bg-white\/5:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-white) 5%,transparent)}}.dark\:bg-white\/10:where(.dark,.dark *){background-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.dark\:bg-white\/10:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-white) 10%,transparent)}}.dark\:bg-white\/20:where(.dark,.dark *){background-color:#fff3}@supports (color:color-mix(in lab,red,red)){.dark\:bg-white\/20:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-white) 20%,transparent)}}.dark\:bg-white\/\[0\.02\]:where(.dark,.dark *){background-color:#ffffff05}@supports (color:color-mix(in lab,red,red)){.dark\:bg-white\/\[0\.02\]:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-white) 2%,transparent)}}.dark\:text-amber-100:where(.dark,.dark *){color:var(--color-amber-100)}.dark\:text-amber-200:where(.dark,.dark *){color:var(--color-amber-200)}.dark\:text-amber-300:where(.dark,.dark *){color:var(--color-amber-300)}.dark\:text-amber-400:where(.dark,.dark *){color:var(--color-amber-400)}.dark\:text-amber-400\/70:where(.dark,.dark *){color:#fcbb00b3}@supports (color:color-mix(in lab,red,red)){.dark\:text-amber-400\/70:where(.dark,.dark *){color:color-mix(in oklab,var(--color-amber-400) 70%,transparent)}}.dark\:text-amber-500:where(.dark,.dark *){color:var(--color-amber-500)}.dark\:text-blue-200:where(.dark,.dark *){color:var(--color-blue-200)}.dark\:text-blue-400:where(.dark,.dark *){color:var(--color-blue-400)}.dark\:text-green-200:where(.dark,.dark *){color:var(--color-green-200)}.dark\:text-green-400:where(.dark,.dark *){color:var(--color-green-400)}.dark\:text-red-400:where(.dark,.dark *){color:var(--color-red-400)}.dark\:text-yellow-400:where(.dark,.dark *){color:var(--color-yellow-400)}.dark\:ring-surface-dark:where(.dark,.dark *){--tw-ring-color:#242423}@media (hover:hover){.dark\:hover\:bg-red-500\/10:where(.dark,.dark *):hover{background-color:#fb2c361a}@supports (color:color-mix(in lab,red,red)){.dark\:hover\:bg-red-500\/10:where(.dark,.dark *):hover{background-color:color-mix(in oklab,var(--color-red-500) 10%,transparent)}}.dark\:hover\:bg-white\/5:where(.dark,.dark *):hover{background-color:#ffffff0d}@supports (color:color-mix(in lab,red,red)){.dark\:hover\:bg-white\/5:where(.dark,.dark *):hover{background-color:color-mix(in oklab,var(--color-white) 5%,transparent)}}.dark\:hover\:bg-white\/\[0\.02\]:where(.dark,.dark *):hover{background-color:#ffffff05}@supports (color:color-mix(in lab,red,red)){.dark\:hover\:bg-white\/\[0\.02\]:where(.dark,.dark *):hover{background-color:color-mix(in oklab,var(--color-white) 2%,transparent)}}}}:root{--color-primary:#61ce70;--color-primary-hover:#4db85c;--color-bg:#fbf9f6;--color-bg-alt:#f5f1ed;--color-surface:#fff;--color-sidebar:#f6f6f6cc;--color-border:#0000001a;--color-text-main:#383733;--color-text-muted:#75736e;--shadow-soft:0 1px 3px #00000005,0 4px 12px #00000004;--shadow-warm:0 2px 12px -2px #d977571f;--shadow-elevated:0 12px 28px -4px #3c322d0f}.dark{--color-bg:#191918;--color-bg-alt:#1f1f1e;--color-surface:#242423;--color-sidebar:#1e1e1ecc;--color-border:#ffffff1a;--color-text-main:#ecebe8;--color-text-muted:#9e9d99;--shadow-soft:0 1px 3px #00000026,0 4px 12px #0000001a;--shadow-warm:0 2px 12px -2px #d9775726;--shadow-elevated:0 12px 28px -4px #0000004d}body{background-color:var(--color-bg);color:var(--color-text-main);font-family:var(--font-sans);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}::selection{color:var(--color-primary);background-color:#d9775733}.custom-scrollbar::-webkit-scrollbar{width:6px}.custom-scrollbar::-webkit-scrollbar-track{background:0 0}.custom-scrollbar::-webkit-scrollbar-thumb{background-color:#9ca3af4d;border-radius:20px}.custom-scrollbar::-webkit-scrollbar-thumb:hover{background-color:#9ca3af80}.bg-hero-gradient{background:linear-gradient(#f5f1ed,#fefcfb)}.dark .bg-hero-gradient{background:linear-gradient(#1f1f1e,#191918)}.material-symbols-outlined{letter-spacing:normal;text-transform:none;white-space:nowrap;word-wrap:normal;font-feature-settings:"liga";-webkit-font-feature-settings:"liga";-webkit-font-smoothing:antialiased;font-variation-settings:"FILL" 0,"wght" 400,"GRAD" 0,"opsz" 24;direction:ltr;font-family:Material Symbols Outlined,sans-serif;font-size:24px;font-style:normal;font-weight:400;line-height:1;display:inline-block}.material-symbols-outlined.fill-1{font-variation-settings:"FILL" 1,"wght" 400,"GRAD" 0,"opsz" 24}@keyframes spin{to{transform:rotate(1turn)}}.animate-spin{animation:spin 1s linear infinite}@keyframes pulse{50%{opacity:.5}}.animate-pulse{animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite}@keyframes border-glow{0%,to{border-color:#d9775780;box-shadow:0 0 5px #d977574d,0 0 10px #d9775733}50%{border-color:#d97757cc;box-shadow:0 0 10px #d9775780,0 0 20px #d977574d}}.animate-border-glow{animation:border-glow 2s ease-in-out infinite}.bg-vibrancy{-webkit-backdrop-filter:blur(20px);background:#ffffffb8}.dark .bg-vibrancy{background:#1e1e1eb8}.traffic-lights{gap:8px;display:flex}.traffic-light{border-radius:50%;width:12px;height:12px}.traffic-light.red{background:#ff5f56}.traffic-light.yellow{background:#ffbd2e}.traffic-light.green{background:#27c93f}@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-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-divide-y-reverse{syntax:"*";inherits:false;initial-value:0}@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}@property --tw-scale-x{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-y{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-z{syntax:"*";inherits:false;initial-value:1}
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@thangnm.nip/arouter",
3
- "version": "0.1.19",
3
+ "version": "0.1.21",
4
4
  "description": "aRouter",
5
5
  "bin": {
6
6
  "arouter": "./bin/arouter.mjs"
package/bin/arouter.mjs CHANGED
@@ -43,7 +43,13 @@ function getRunningPid() {
43
43
  const pid = parseInt(readFileSync(PID_FILE, "utf-8").trim(), 10);
44
44
  if (isNaN(pid)) return null;
45
45
  try {
46
- process.kill(pid, 0);
46
+ if (IS_WIN) {
47
+ // process.kill(pid, 0) is unreliable on Windows — use tasklist
48
+ const out = execSync(`tasklist /FI "PID eq ${pid}" /NH`, { encoding: "utf-8", stdio: ["pipe", "pipe", "ignore"] });
49
+ if (!out.includes(String(pid))) throw new Error("not found");
50
+ } else {
51
+ process.kill(pid, 0);
52
+ }
47
53
  return pid;
48
54
  } catch {
49
55
  try { unlinkSync(PID_FILE); } catch { /* ignore */ }
@@ -153,7 +159,7 @@ async function startServer() {
153
159
  const serverScript = resolve(PROJECT_ROOT, ".next/standalone/server.js");
154
160
  const child = spawn(process.execPath, [serverScript], {
155
161
  cwd: PROJECT_ROOT, // Important: CWD must be PROJECT_ROOT so MITM can find src/mitm/
156
- detached: !IS_WIN,
162
+ detached: true, // Must be true on ALL platforms so child survives parent exit
157
163
  stdio: ["ignore", logFd, logFd],
158
164
  env: {
159
165
  ...process.env,
@@ -167,7 +173,7 @@ async function startServer() {
167
173
  return existsSync(standalone) ? standalone : source;
168
174
  })(),
169
175
  },
170
- ...(IS_WIN ? { windowsHide: true } : {}),
176
+ ...(IS_WIN ? { windowsHide: true, shell: false } : {}),
171
177
  });
172
178
 
173
179
  writeFileSync(PID_FILE, String(child.pid));
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@thangnm.nip/arouter",
3
- "version": "0.1.19",
3
+ "version": "0.1.21",
4
4
  "description": "aRouter",
5
5
  "bin": {
6
6
  "arouter": "./bin/arouter.mjs"
@@ -1,7 +0,0 @@
1
- (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[46],{1872:(e,t,s)=>{Promise.resolve().then(s.bind(s,4507))},4507:(e,t,s)=>{"use strict";s.d(t,{default:()=>g});var a=s(5155),r=s(2115);let i={claude:{id:"claude",name:"Claude Code",icon:"terminal",color:"#D97757",description:"Anthropic Claude Code CLI",configType:"env",envVars:{baseUrl:"ANTHROPIC_BASE_URL",model:"ANTHROPIC_MODEL",opusModel:"ANTHROPIC_DEFAULT_OPUS_MODEL",sonnetModel:"ANTHROPIC_DEFAULT_SONNET_MODEL",haikuModel:"ANTHROPIC_DEFAULT_HAIKU_MODEL"},modelAliases:["default","sonnet","opus","haiku","opusplan"],settingsFile:"~/.claude/settings.json",defaultModels:[{id:"opus",name:"Claude Opus",alias:"opus",envKey:"ANTHROPIC_DEFAULT_OPUS_MODEL",defaultValue:"cc/claude-opus-4-6"},{id:"sonnet",name:"Claude Sonnet",alias:"sonnet",envKey:"ANTHROPIC_DEFAULT_SONNET_MODEL",defaultValue:"cc/claude-sonnet-4-6"},{id:"haiku",name:"Claude Haiku",alias:"haiku",envKey:"ANTHROPIC_DEFAULT_HAIKU_MODEL",defaultValue:"cc/claude-haiku-4-5-20251001"}]},openclaw:{id:"openclaw",name:"Open Claw",image:"/providers/openclaw.png",color:"#FF6B35",description:"Open Claw AI Assistant",configType:"custom"},codex:{id:"codex",name:"OpenAI Codex CLI",image:"/providers/codex.png",color:"#10A37F",description:"OpenAI Codex CLI",configType:"custom"},opencode:{id:"opencode",name:"OpenCode",image:"/providers/opencode.png",color:"#E87040",description:"OpenCode AI Terminal Assistant",configType:"custom"},antigravity:{id:"antigravity",name:"Antigravity",image:"/providers/antigravity.png",color:"#4285F4",description:"Google Antigravity IDE with MITM",configType:"mitm",mitmDomain:"daily-cloudcode-pa.googleapis.com",modelAliases:["claude-opus-4-6-thinking","claude-sonnet-4-6","gemini-3-flash","gpt-oss-120b-medium","gemini-3-pro-high","gemini-3-pro-low"],defaultModels:[{id:"gemini-3.1-pro-high",name:"Gemini 3.1 Pro High",alias:"gemini-3.1-pro-high"},{id:"gemini-3.1-pro-low",name:"Gemini 3.1 Pro Low",alias:"gemini-3.1-pro-low"},{id:"gemini-3-flash",name:"Gemini 3 Flash",alias:"gemini-3-flash"},{id:"claude-sonnet-4-6",name:"Claude Sonnet 4.6",alias:"claude-sonnet-4-6"},{id:"claude-opus-4-6-thinking",name:"Claude Opus 4.6 Thinking",alias:"claude-opus-4-6-thinking"},{id:"gpt-oss-120b-medium",name:"GPT OSS 120B Medium",alias:"gpt-oss-120b-medium"}]},copilot:{id:"copilot",name:"GitHub Copilot",image:"/providers/copilot.png",color:"#1F6FEB",description:"GitHub Copilot IDE with MITM",configType:"mitm",mitmDomain:"api.individual.githubcopilot.com",modelAliases:["gpt-4o-mini","claude-haiku-4.5","gpt-4o","gpt-5-mini"],defaultModels:[{id:"gpt-4o",name:"GPT-4o",alias:"gpt-4o"},{id:"gpt-4.1",name:"GPT-4.1",alias:"gpt-4.1"},{id:"gpt-5-mini",name:"GPT-5 Mini",alias:"gpt-5-mini"},{id:"claude-haiku-4.5",name:"Claude Haiku 4.5",alias:"claude-haiku-4.5"}]},droid:{id:"droid",name:"Factory Droid",image:"/providers/droid.png",color:"#00D4FF",description:"Factory Droid AI Assistant",configType:"custom"},cursor:{id:"cursor",name:"Cursor",image:"/providers/cursor.png",color:"#000000",description:"Cursor AI Code Editor",configType:"guide",requiresExternalUrl:!0,notes:[{type:"warning",text:"Requires Cursor Pro account to use this feature."},{type:"cloudCheck",text:"Cursor routes requests through its own server, so local endpoint is not supported. Please enable Tunnel or Cloud Endpoint in Settings."}],guideSteps:[{step:1,title:"Open Settings",desc:"Go to Settings → Models"},{step:2,title:"Enable OpenAI API",desc:'Enable "OpenAI API key" option'},{step:3,title:"Base URL",value:"{{baseUrl}}",copyable:!0},{step:4,title:"API Key",type:"apiKeySelector"},{step:5,title:"Add Custom Model",desc:'Click "View All Model" → "Add Custom Model"'},{step:6,title:"Select Model",type:"modelSelector"}]},cline:{id:"cline",name:"Cline",image:"/providers/cline.png",color:"#00D1B2",description:"Cline AI Coding Assistant",configType:"guide",guideSteps:[{step:1,title:"Open Settings",desc:"Go to Cline Settings panel"},{step:2,title:"Select Provider",desc:"Choose API Provider → OpenAI Compatible"},{step:3,title:"Base URL",value:"{{baseUrl}}/v1",copyable:!0},{step:4,title:"API Key",type:"apiKeySelector"},{step:5,title:"Select Model",type:"modelSelector"}]},kilo:{id:"kilo",name:"Kilo Code",image:"/providers/kilocode.png",color:"#FF6B6B",description:"Kilo Code AI Assistant",configType:"guide",guideSteps:[{step:1,title:"Open Settings",desc:"Go to Kilo Code Settings panel"},{step:2,title:"Select Provider",desc:"Choose API Provider → OpenAI Compatible"},{step:3,title:"Base URL",value:"{{baseUrl}}/v1",copyable:!0},{step:4,title:"API Key",type:"apiKeySelector"},{step:5,title:"Select Model",type:"modelSelector"}]},roo:{id:"roo",name:"Roo",image:"/providers/roo.png",color:"#FF6B6B",description:"Roo AI Assistant",configType:"guide",guideSteps:[{step:1,title:"Open Settings",desc:"Go to Roo Settings panel"},{step:2,title:"Select Provider",desc:"Choose API Provider → Ollama"},{step:3,title:"Base URL",value:"{{baseUrl}}",copyable:!0},{step:4,title:"API Key",type:"apiKeySelector"},{step:5,title:"Select Model",type:"modelSelector"}]},continue:{id:"continue",name:"Continue",image:"/providers/continue.png",color:"#7C3AED",description:"Continue AI Assistant",configType:"guide",guideSteps:[{step:1,title:"Open Config",desc:"Open Continue configuration file"},{step:2,title:"API Key",type:"apiKeySelector"},{step:3,title:"Select Model",type:"modelSelector"},{step:4,title:"Add Model Config",desc:"Add the following configuration to your models array:"}],codeBlock:{language:"json",code:`{
2
- "apiBase": "{{baseUrl}}",
3
- "title": "{{model}}",
4
- "model": "{{model}}",
5
- "provider": "openai",
6
- "apiKey": "{{apiKey}}"
7
- }`}}};var l=s(7202),n=s(2679),o=s(5497);function d({apiKeys:e,cloudEnabled:t,onStatusChange:s,onModelsLoaded:i}){let[l,n]=(0,r.useState)(null),[d,c]=(0,r.useState)(!1),[x,p]=(0,r.useState)(!1),[m,u]=(0,r.useState)(""),[g,h]=(0,r.useState)(null),[f,y]=(0,r.useState)(null),[b,v]=(0,r.useState)("http://localhost:20128/v1/chat/completions"),[j,N]=(0,r.useState)(""),[w,S]=(0,r.useState)(!1),[C,k]=(0,r.useState)(!1),[A,E]=(0,r.useState)(null),[T,P]=(0,r.useState)(!1),[I,O]=(0,r.useState)(!1),[M,_]=(0,r.useState)(null),D="u">typeof navigator&&navigator.userAgent?.includes("Windows"),R=l?.isAdmin!==!1;(0,r.useEffect)(()=>{(async()=>{try{let e=await fetch("/api/cli-tools/antigravity-mitm/settings");if(e.ok){let t=await e.json();t.endpoint&&v(t.endpoint),t.apiKey&&N(t.apiKey),S(!0)}}catch{}})()},[]),(0,r.useEffect)(()=>{$()},[]),(0,r.useEffect)(()=>{if(!l?.running)return;let e=async()=>{try{let e=await fetch("/api/cli-tools/antigravity-mitm/settings?status=true");e.ok&&_(await e.json())}catch{}};e();let t=setInterval(e,5e3);return()=>clearInterval(t)},[l?.running]);let $=async()=>{try{let e=await fetch("/api/cli-tools/antigravity-mitm");if(e.ok){let t=await e.json();if(n(t),s?.(t),t.running)try{let e=await fetch("/api/cli-tools/antigravity-mitm/settings");if(e.ok){let t=await e.json(),s=t.endpoint||b,a=t.apiKey||j,r=await fetch("/api/cli-tools/antigravity-mitm/settings",{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({endpoint:s,apiKey:a})}),l=await r.json();l.models?.length>0&&(i?.(l.models),E(l))}}catch{}}}catch{n({running:!1,certExists:!1,dnsStatus:{}})}},L=async()=>{O(!0);try{let e=await fetch("/api/cli-tools/antigravity-mitm/settings",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({endpoint:b,apiKey:j})});if(e.ok)S(!0),h({type:"success",text:"Configuration saved"});else{let t=await e.json();h({type:"error",text:t.error||"Failed to save"})}}catch(e){h({type:"error",text:e.message})}finally{O(!1)}},F=async()=>{P(!0),E(null);try{let e=await fetch("/api/cli-tools/antigravity-mitm/settings",{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({endpoint:b,apiKey:j})}),t=await e.json();E(t),t.models?.length>0&&i?.(t.models)}catch(e){E({success:!1,reachable:!1,message:e.message})}finally{P(!1)}},K=e=>{D||l?.hasCachedPassword?q(e,""):(y(e),p(!0),h(null))},q=async(e,t)=>{c(!0),h(null);try{if("trust-cert"===e){let e=await fetch("/api/cli-tools/antigravity-mitm",{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"trust-cert",sudoPassword:t})}),s=await e.json();e.ok?h({type:"success",text:"Certificate trusted successfully"}):h({type:"error",text:s.error||"Failed to trust certificate"})}else if("start"===e){E(null),_(null),await L(),h({type:"info",text:"Validating endpoint..."});let e=0;try{let t=await fetch("/api/cli-tools/antigravity-mitm/settings",{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({endpoint:b,apiKey:j})}),s=await t.json();if(!t.ok||!s.reachable||!s.models||0===s.models.length){h({type:"error",text:`Endpoint invalid: ${s.message||s.error||"cannot load models"}`}),c(!1),await $();return}e=s.models.length,i&&i(s.models),E(s)}catch(e){h({type:"error",text:`Endpoint invalid: ${e.message}`}),c(!1),await $();return}let s=await fetch("/api/cli-tools/antigravity-mitm",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({apiKey:j||"sk_default",sudoPassword:t})}),a=await s.json();s.ok?h({type:"success",text:`Server started (${e} models loaded)`}):h({type:"error",text:a.error||"Failed to start server"})}else{let e=await fetch("/api/cli-tools/antigravity-mitm",{method:"DELETE",headers:{"Content-Type":"application/json"},body:JSON.stringify({sudoPassword:t})}),s=await e.json();console.log("STOP SERVER REPONSE:",e.status,s),e.ok?h({type:"success",text:"Server stopped — all DNS cleared"}):h({type:"error",text:s.error||"Failed to stop server"})}p(!1),u(""),await $()}catch(e){h({type:"error",text:e.message})}finally{c(!1),y(null)}},U=()=>{m.trim()?q(f,m):h({type:"error",text:"Sudo password is required"})},z=l?.running;return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(o.Zp,{padding:"sm",className:"border-primary/20 bg-primary/5",children:(0,a.jsxs)("div",{className:"flex flex-col gap-3",children:[(0,a.jsxs)("div",{className:"flex items-center justify-between",children:[(0,a.jsxs)("div",{className:"flex items-center gap-2",children:[(0,a.jsx)("span",{className:"material-symbols-outlined text-primary text-[20px]",children:"security"}),(0,a.jsx)("span",{className:"font-semibold text-sm text-text-main",children:"MITM Server"}),z?(0,a.jsx)(o.Ex,{variant:"success",size:"sm",children:"Running"}):(0,a.jsx)(o.Ex,{variant:"error",size:"sm",children:"Stopped"})]}),(0,a.jsx)("div",{className:"flex items-center gap-1 text-xs text-text-muted","data-i18n-skip":"true",children:[{label:"Cert",ok:l?.certExists},{label:"Trusted",ok:l?.certTrusted},{label:"Server",ok:z}].map(({label:e,ok:t})=>(0,a.jsxs)("span",{className:`flex items-center gap-0.5 px-1.5 py-0.5 rounded ${t?"text-green-600":"text-text-muted"}`,children:[(0,a.jsx)("span",{className:"material-symbols-outlined text-[12px]",children:t?"check_circle":"cancel"}),e]},e))})]}),(0,a.jsxs)("div",{className:"px-2 py-2 rounded-lg bg-surface/50 border border-border/50 flex flex-col gap-2",children:[(0,a.jsxs)("p",{className:"text-[11px] text-text-muted leading-relaxed",children:[(0,a.jsx)("span",{className:"font-medium text-text-main",children:"Purpose:"})," Use Antigravity IDE & GitHub Copilot → with ANY provider/model from Router"]}),(0,a.jsxs)("p",{className:"text-[11px] text-text-muted leading-relaxed",children:[(0,a.jsx)("span",{className:"font-medium text-text-main",children:"How it works:"})," IDE request → DNS redirect to localhost:443 → MITM proxy intercepts → Router endpoint → response back to IDE"]})]}),(0,a.jsxs)("div",{className:"flex flex-col gap-2 px-2 py-2 rounded-lg bg-surface/30 border border-border/30",children:[(0,a.jsxs)("div",{className:"flex items-center justify-between",children:[(0,a.jsx)("p",{className:"text-[11px] font-medium text-text-main uppercase tracking-wider",children:"Router Configuration"}),M&&null!==M.ok&&(0,a.jsxs)("div",{className:`flex items-center gap-1 px-2 py-0.5 rounded-full text-[10px] font-medium ${M.ok?"bg-green-500/15 text-green-600":"bg-red-500/15 text-red-500"}`,children:[(0,a.jsx)("span",{className:`w-1.5 h-1.5 rounded-full ${M.ok?"bg-green-500":"bg-red-500"}`}),M.ok?"Valid":"Invalid"]})]}),M&&!1===M.ok&&(0,a.jsxs)("div",{className:"flex items-center gap-2 px-2 py-1.5 rounded text-[11px] bg-red-500/10 text-red-500 border border-red-500/20",children:[(0,a.jsx)("span",{className:"material-symbols-outlined text-[14px]",children:"error"}),(0,a.jsx)("span",{className:"break-all",children:M.detail})]}),(0,a.jsxs)("div",{className:"flex flex-col gap-1.5",children:[(0,a.jsx)("label",{className:"text-[11px] text-text-muted",children:"Endpoint URL"}),(0,a.jsx)("input",{type:"text",value:b,onChange:e=>{v(e.target.value),S(!1),E(null)},placeholder:"http://localhost:20128/v1/chat/completions",disabled:z,className:`w-full px-2.5 py-1.5 bg-surface rounded-md text-xs border border-border focus:outline-none focus:ring-1 focus:ring-primary/50 text-text-main placeholder-text-muted/50 ${z?"opacity-50 cursor-not-allowed":""}`})]}),(0,a.jsxs)("div",{className:"flex flex-col gap-1.5",children:[(0,a.jsx)("label",{className:"text-[11px] text-text-muted",children:"API Key"}),(0,a.jsxs)("div",{className:"relative",children:[(0,a.jsx)("input",{type:C?"text":"password",value:j,onChange:e=>{N(e.target.value),S(!1),E(null)},placeholder:"Enter API key",disabled:z,className:`w-full px-2.5 py-1.5 pr-8 bg-surface rounded-md text-xs border border-border focus:outline-none focus:ring-1 focus:ring-primary/50 text-text-main placeholder-text-muted/50 ${z?"opacity-50 cursor-not-allowed":""}`}),(0,a.jsx)("button",{type:"button",onClick:()=>k(e=>!e),className:"absolute right-1.5 top-1/2 -translate-y-1/2 flex items-center justify-center w-5 h-5 rounded text-text-muted hover:text-text-main transition-colors",title:C?"Hide API Key":"Show API Key",children:(0,a.jsx)("span",{className:"material-symbols-outlined",style:{fontSize:"18px"},children:C?"visibility":"visibility_off"})})]})]}),(0,a.jsxs)("div",{className:"flex items-center gap-2 mt-1",children:[(0,a.jsxs)("button",{onClick:F,disabled:T||!b||z,className:"px-3 py-1 rounded-md bg-blue-500/10 border border-blue-500/30 text-blue-500 font-medium text-[11px] flex items-center gap-1 hover:bg-blue-500/20 transition-colors disabled:opacity-50",children:[(0,a.jsx)("span",{className:"material-symbols-outlined text-[14px]",children:T?"hourglass_empty":"sync"}),T?"Loading...":"Load Models"]}),(0,a.jsxs)("button",{onClick:L,disabled:I||w||!b||z,className:"px-3 py-1 rounded-md bg-green-500/10 border border-green-500/30 text-green-600 font-medium text-[11px] flex items-center gap-1 hover:bg-green-500/20 transition-colors disabled:opacity-50",children:[(0,a.jsx)("span",{className:"material-symbols-outlined text-[14px]",children:"save"}),I?"Saving...":w?"Saved ✓":"Save"]})]}),A&&(0,a.jsxs)("div",{className:`flex flex-col gap-1.5 px-2 py-1.5 rounded text-[11px] ${A.reachable?A.status>=200&&A.status<300?"bg-green-500/10 text-green-600":"bg-yellow-500/10 text-yellow-600":"bg-red-500/10 text-red-600"}`,children:[(0,a.jsxs)("div",{className:"flex items-center gap-2",children:[(0,a.jsx)("span",{className:"material-symbols-outlined text-[14px]",children:A.reachable?A.status>=200&&A.status<300?"check_circle":"warning":"error"}),(0,a.jsx)("span",{children:A.message})]}),A.models?.length>0&&(0,a.jsx)("div",{className:"flex flex-wrap gap-1 mt-1 max-h-[120px] overflow-y-auto",children:A.models.map(e=>(0,a.jsx)("span",{className:"px-1.5 py-0.5 rounded bg-green-500/15 text-green-700 text-[10px] font-mono",children:e},e))})]})]}),g&&(0,a.jsxs)("div",{className:`flex items-center gap-2 px-2 py-1.5 rounded text-xs ${"success"===g.type?"bg-green-500/10 text-green-600":"info"===g.type?"bg-amber-500/10 text-amber-600":"bg-red-500/10 text-red-600"}`,children:[(0,a.jsx)("span",{className:"material-symbols-outlined text-[14px]",children:"success"===g.type?"check_circle":"info"===g.type?"hourglass_top":"error"}),(0,a.jsx)("span",{children:g.text})]}),(0,a.jsxs)("div",{className:"flex items-center gap-2 flex-wrap","data-i18n-skip":"true",children:[l?.certExists&&!l?.certTrusted&&(0,a.jsxs)("button",{onClick:()=>K("trust-cert"),disabled:d,className:"px-4 py-1.5 rounded-lg bg-yellow-500/10 border border-yellow-500/30 text-yellow-600 font-medium text-xs flex items-center gap-1.5 hover:bg-yellow-500/20 transition-colors disabled:opacity-50",children:[(0,a.jsx)("span",{className:"material-symbols-outlined text-[16px]",children:"verified_user"}),"Trust Cert"]}),z?(0,a.jsxs)("button",{onClick:()=>K("stop"),disabled:d,className:"px-4 py-1.5 rounded-lg bg-red-500/10 border border-red-500/30 text-red-500 font-medium text-xs flex items-center gap-1.5 hover:bg-red-500/20 transition-colors disabled:opacity-50",children:[(0,a.jsx)("span",{className:"material-symbols-outlined text-[16px]",children:"stop_circle"}),"Stop Server"]}):(0,a.jsxs)("button",{onClick:()=>K("start"),disabled:d||!b||D&&!R,className:"px-4 py-1.5 rounded-lg bg-primary/10 border border-primary/30 text-primary font-medium text-xs flex items-center gap-1.5 hover:bg-primary/20 transition-colors disabled:opacity-50",children:[(0,a.jsx)("span",{className:"material-symbols-outlined text-[16px]",children:"play_circle"}),"Start Server"]}),z&&(0,a.jsx)("p",{className:"text-xs text-text-muted",children:"Enable DNS per tool below to activate interception"})]}),D&&!R&&(0,a.jsxs)("div",{className:"flex items-center gap-2 px-2 py-1.5 rounded text-xs bg-red-500/10 text-red-600 border border-red-500/20",children:[(0,a.jsx)("span",{className:"material-symbols-outlined text-[14px]",children:"shield_lock"}),(0,a.jsx)("span",{children:"Administrator required — restart as Administrator to use MITM"})]})]})}),x&&(0,a.jsx)("div",{className:"fixed inset-0 z-50 flex items-center justify-center bg-black/50 backdrop-blur-sm",children:(0,a.jsxs)("div",{className:"bg-surface border border-border rounded-xl p-6 w-full max-w-sm flex flex-col gap-4 shadow-xl",children:[(0,a.jsx)("h3",{className:"font-semibold text-text-main",children:"Sudo Password Required"}),(0,a.jsxs)("div",{className:"flex items-start gap-3 p-3 bg-yellow-500/10 border border-yellow-500/30 rounded-lg",children:[(0,a.jsx)("span",{className:"material-symbols-outlined text-yellow-500 text-[20px]",children:"warning"}),(0,a.jsx)("p",{className:"text-xs text-text-muted",children:"Required for SSL certificate and server startup"})]}),(0,a.jsx)(o.pd,{type:"password",placeholder:"Enter sudo password",value:m,onChange:e=>u(e.target.value),onKeyDown:e=>{"Enter"!==e.key||d||U()}}),g&&(0,a.jsxs)("div",{className:"flex items-center gap-2 px-2 py-1.5 rounded text-xs bg-red-500/10 text-red-600",children:[(0,a.jsx)("span",{className:"material-symbols-outlined text-[14px]",children:"error"}),(0,a.jsx)("span",{children:g.text})]}),(0,a.jsxs)("div",{className:"flex items-center justify-end gap-2",children:[(0,a.jsx)(o.$n,{variant:"ghost",size:"sm",onClick:()=>{p(!1),u(""),h(null)},disabled:d,children:"Cancel"}),(0,a.jsx)(o.$n,{variant:"primary",size:"sm",onClick:U,loading:d,children:"Confirm"})]})]})})]})}var c=s(5772);function x({tool:e,isExpanded:t,onToggle:s,serverRunning:i,dnsActive:l,hasCachedPassword:n,apiKeys:d,activeProviders:x,hasActiveProviders:p,modelAliases:m={},cloudEnabled:u,loadedModels:g=[],onDnsChange:h}){let[f,y]=(0,r.useState)(!1),[b,v]=(0,r.useState)(null),[j,N]=(0,r.useState)(!1),[w,S]=(0,r.useState)(""),[C,k]=(0,r.useState)(null),[A,E]=(0,r.useState)({}),[T,P]=(0,r.useState)(null),[I,O]=(0,r.useState)({top:0,right:0}),[M,_]=(0,r.useState)(""),D="u">typeof navigator&&navigator.userAgent?.includes("Windows");(0,r.useEffect)(()=>{t&&R()},[t]),(0,r.useEffect)(()=>{if(!T)return;let e=e=>{e.target.closest("[data-model-dropdown]")||P(null)};return document.addEventListener("click",e),()=>document.removeEventListener("click",e)},[T]);let R=async()=>{try{let t=await fetch(`/api/cli-tools/antigravity-mitm/alias?tool=${e.id}`);if(t.ok){let e=await t.json();Object.keys(e.aliases||{}).length>0&&E(e.aliases)}}catch{}},$=(0,r.useCallback)(async t=>{try{await fetch("/api/cli-tools/antigravity-mitm/alias",{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({tool:e.id,mappings:t})})}catch{}},[e.id]),L=(e,t)=>{E(s=>({...s,[e]:t}))},F=()=>{if(!i)return;let e=l?"disable":"enable";D||n?K(e,""):(k(e),N(!0),v(null))},K=async(t,s)=>{y(!0),v(null);try{let a=await fetch("/api/cli-tools/antigravity-mitm",{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({tool:e.id,action:t,sudoPassword:s})}),r=await a.json();if(!a.ok)throw Error(r.error||"Failed to toggle DNS");"enable"===t?v({type:"success",text:"DNS enabled successfully.",warning:`Please restart ${e.name} to apply changes.`}):v({type:"success",text:"DNS disabled — traffic restored"}),N(!1),S(""),h?.(r)}catch(e){v({type:"error",text:e.message})}finally{y(!1),k(null)}},q=()=>{w.trim()?K(C,w):v({type:"error",text:"Sudo password is required"})};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsxs)(o.Zp,{padding:"xs",className:"overflow-hidden",children:[(0,a.jsxs)("div",{className:"flex items-center justify-between hover:cursor-pointer",onClick:s,children:[(0,a.jsxs)("div",{className:"flex items-center gap-3",children:[(0,a.jsx)("div",{className:"size-8 flex items-center justify-center shrink-0",children:(0,a.jsx)(c.default,{src:e.image,alt:e.name,width:32,height:32,className:"size-8 object-contain rounded-lg",sizes:"32px",onError:e=>{e.target.style.display="none"}})}),(0,a.jsxs)("div",{className:"min-w-0",children:[(0,a.jsxs)("div",{className:"flex items-center gap-2",children:[(0,a.jsx)("h3",{className:"font-medium text-sm",children:e.name}),i?l?(0,a.jsx)(o.Ex,{variant:"success",size:"sm",children:"Active"}):(0,a.jsx)(o.Ex,{variant:"warning",size:"sm",children:"DNS off"}):(0,a.jsx)(o.Ex,{variant:"error",size:"sm",children:"Server off"})]}),(0,a.jsxs)("p",{className:"text-xs text-text-muted",children:["Intercept ",e.name," requests via MITM proxy"]})]})]}),(0,a.jsx)("span",{className:`material-symbols-outlined text-text-muted text-[20px] transition-transform${t?" rotate-180":""}`,children:"expand_more"})]}),t&&(0,a.jsxs)("div",{className:"mt-4 pt-4 border-t border-border flex flex-col gap-4",children:[(0,a.jsxs)("div",{className:"flex flex-col gap-0.5 text-[11px] text-text-muted px-1",children:[(0,a.jsxs)("p",{children:["Toggle DNS to redirect ",e.name," traffic through Router via MITM."]}),!l&&(0,a.jsx)("p",{className:"text-amber-600 text-[10px] mt-1",children:"⚠️ Enable DNS to edit model mappings"})]}),b&&(0,a.jsxs)("div",{className:"flex flex-col gap-1",children:[(0,a.jsxs)("div",{className:`flex items-center gap-2 px-2 py-1.5 rounded text-xs ${"success"===b.type?"bg-green-500/10 text-green-600":"bg-red-500/10 text-red-600"}`,children:[(0,a.jsx)("span",{className:"material-symbols-outlined text-[14px]",children:"success"===b.type?"check_circle":"error"}),(0,a.jsx)("span",{children:b.text})]}),b.warning&&(0,a.jsxs)("div",{className:"flex items-center gap-2 px-2 py-1.5 rounded text-xs bg-amber-500/10 text-amber-600 border border-amber-500/20",children:[(0,a.jsx)("span",{className:"material-symbols-outlined text-[14px]",children:"warning"}),(0,a.jsx)("span",{className:"font-medium",children:b.warning})]})]}),e.defaultModels?.length>0&&(0,a.jsx)("div",{className:"flex flex-col gap-2",children:e.defaultModels.map(e=>(0,a.jsxs)("div",{className:"flex items-center gap-2 relative",children:[(0,a.jsx)("span",{className:"w-36 shrink-0 text-xs font-semibold text-text-main text-right",children:e.name}),(0,a.jsx)("span",{className:"material-symbols-outlined text-text-muted text-[14px]",children:"arrow_forward"}),(0,a.jsx)("input",{type:"text",value:A[e.alias]||"",onChange:t=>L(e.alias,t.target.value),onBlur:t=>{var s,a;return s=e.alias,a=t.target.value,void $({...A,[s]:a})},placeholder:"provider/model-id",disabled:!l,className:`flex-1 px-2 py-1.5 bg-surface rounded border border-border text-xs focus:outline-none focus:ring-1 focus:ring-primary/50 ${!l?"opacity-50 cursor-not-allowed":""}`}),(0,a.jsx)("div",{className:"relative","data-model-dropdown":!0,children:(0,a.jsx)("button",{ref:t=>{t&&(t._alias=e.alias)},onClick:t=>{if(T===e.alias)P(null);else{_("");let s=t.currentTarget.getBoundingClientRect(),a=Math.min(32*g.length,280);O({top:window.innerHeight-s.bottom<a+8?Math.max(8,s.top-a-4):s.bottom+4,right:window.innerWidth-s.right}),P(e.alias)}},disabled:!l||0===g.length,className:`px-2 py-1.5 rounded border text-xs transition-colors shrink-0 ${l&&g.length>0?"bg-surface border-border hover:border-primary cursor-pointer":"opacity-50 cursor-not-allowed border-border"}`,title:0===g.length?"Load Models first (from server card above)":"Select model",children:"Select"})}),A[e.alias]&&(0,a.jsx)("button",{onClick:()=>{L(e.alias,""),$({...A,[e.alias]:""})},className:"p-1 text-text-muted hover:text-red-500 rounded transition-colors",title:"Clear",children:(0,a.jsx)("span",{className:"material-symbols-outlined text-[14px]",children:"close"})})]},e.alias))}),e.defaultModels?.length===0&&(0,a.jsx)("p",{className:"text-xs text-text-muted px-1",children:"Model mappings will be available soon."}),(0,a.jsx)("div",{children:l?(0,a.jsxs)("button",{onClick:F,disabled:!i||f,className:"px-4 py-1.5 rounded-lg bg-red-500/10 border border-red-500/30 text-red-500 font-medium text-xs flex items-center gap-1.5 hover:bg-red-500/20 transition-colors disabled:opacity-50 disabled:cursor-not-allowed",children:[(0,a.jsx)("span",{className:"material-symbols-outlined text-[16px]",children:"stop_circle"}),"Stop DNS"]}):(0,a.jsxs)(o.$n,{variant:"primary",size:"sm",onClick:F,loading:f,disabled:!i||f,children:[(0,a.jsx)("span",{className:"material-symbols-outlined text-[14px] mr-1",children:"play_circle"}),"Start DNS"]})})]})]}),T&&g.length>0&&(0,a.jsxs)("div",{"data-model-dropdown":!0,className:"fixed z-[999] bg-surface border border-border rounded-lg shadow-xl max-h-[280px] w-[340px] overflow-hidden flex flex-col",style:{top:I.top,right:I.right},children:[(0,a.jsx)("div",{className:"sticky top-0 p-1.5 border-b border-border bg-surface",children:(0,a.jsx)("input",{type:"text",value:M,onChange:e=>_(e.target.value),placeholder:"Search models...",className:"w-full px-2 py-1 bg-background rounded border border-border text-xs focus:outline-none focus:ring-1 focus:ring-primary/50",autoFocus:!0})}),(0,a.jsx)("div",{className:"overflow-y-auto flex-1",children:g.filter(e=>!M||e.toLowerCase().includes(M.toLowerCase())).map(e=>(0,a.jsx)("button",{onClick:()=>{let t;E(t={...A,[T]:e}),$(t),P(null)},className:`w-full text-left px-3 py-2 text-xs font-mono hover:bg-primary/10 transition-colors border-b border-border/30 last:border-0 ${A[T]===e?"bg-primary/15 text-primary font-semibold":"text-text-main"}`,children:e},e))})]}),j&&(0,a.jsx)("div",{className:"fixed inset-0 z-50 flex items-center justify-center bg-black/50 backdrop-blur-sm",children:(0,a.jsxs)("div",{className:"bg-surface border border-border rounded-xl p-6 w-full max-w-sm flex flex-col gap-4 shadow-xl",children:[(0,a.jsx)("h3",{className:"font-semibold text-text-main",children:"Sudo Password Required"}),(0,a.jsxs)("div",{className:"flex items-start gap-3 p-3 bg-yellow-500/10 border border-yellow-500/30 rounded-lg",children:[(0,a.jsx)("span",{className:"material-symbols-outlined text-yellow-500 text-[20px]",children:"warning"}),(0,a.jsx)("p",{className:"text-xs text-text-muted",children:"Required to modify /etc/hosts and flush DNS cache"})]}),(0,a.jsx)(o.pd,{type:"password",placeholder:"Enter sudo password",value:w,onChange:e=>S(e.target.value),onKeyDown:e=>{"Enter"!==e.key||f||q()}}),b&&(0,a.jsxs)("div",{className:"flex items-center gap-2 px-2 py-1.5 rounded text-xs bg-red-500/10 text-red-600",children:[(0,a.jsx)("span",{className:"material-symbols-outlined text-[14px]",children:"error"}),(0,a.jsx)("span",{children:b.text})]}),(0,a.jsxs)("div",{className:"flex items-center justify-end gap-2",children:[(0,a.jsx)(o.$n,{variant:"ghost",size:"sm",onClick:()=>{N(!1),S(""),v(null)},disabled:f,children:"Cancel"}),(0,a.jsx)(o.$n,{variant:"primary",size:"sm",onClick:q,loading:f,children:"Confirm"})]})]})})]})}function p(){let[e,t]=(0,r.useState)([]),[s,i]=(0,r.useState)(!0),[l,n]=(0,r.useState)("mitm"),[o,d]=(0,r.useState)(!0),[c,x]=(0,r.useState)(!1),[p,m]=(0,r.useState)(0),u=(0,r.useRef)(null),g=(0,r.useRef)(null),h=(0,r.useRef)(null),f=(0,r.useCallback)(()=>{h.current&&(h.current.close(),h.current=null),x(!1),t([]),m(e=>e+1)},[]);return(0,r.useEffect)(()=>{if(!o){h.current&&(h.current.close(),h.current=null),x(!1);return}let e=new EventSource(`/api/cli-tools/antigravity-mitm/console-logs?stream=true&filter=${l}`);return h.current=e,e.onopen=()=>x(!0),e.onmessage=e=>{try{let s=JSON.parse(e.data);s.clear?t([]):s.line&&t(e=>{let t=[...e,s.line];return t.length>500?t.slice(-500):t})}catch{}},e.onerror=()=>{e.close(),h.current=null,x(!1)},()=>{e.close(),h.current=null,x(!1)}},[o,l,p]),(0,r.useEffect)(()=>{s&&u.current&&u.current.scrollIntoView({behavior:"smooth"})},[e,s]),(0,a.jsxs)("div",{className:"rounded-xl border border-border bg-card p-4",children:[(0,a.jsxs)("div",{className:"flex items-center justify-between pb-2",children:[(0,a.jsxs)("div",{className:"text-sm font-semibold flex items-center gap-2 cursor-pointer select-none",onClick:()=>d(!o),children:[(0,a.jsx)("span",{className:"material-symbols-outlined text-[16px] text-primary",children:"terminal"}),"Console Logs",(0,a.jsx)("span",{className:`material-symbols-outlined text-[14px] transition-transform ${o?"rotate-180":""}`,children:"expand_more"})]}),o&&(0,a.jsxs)("div",{className:"flex items-center gap-1.5",children:[(0,a.jsxs)("select",{value:l,onChange:e=>{n(e.target.value),t([])},className:"px-1.5 py-0.5 rounded border border-border bg-surface text-[10px] cursor-pointer",children:[(0,a.jsx)("option",{value:"mitm",children:"MITM Only"}),(0,a.jsx)("option",{value:"all",children:"All Logs"})]}),(0,a.jsx)("button",{onClick:()=>{i(!s),!s&&u.current&&u.current.scrollIntoView({behavior:"smooth"})},className:`p-0.5 rounded transition-colors ${s?"text-primary":"text-muted hover:text-foreground"}`,title:s?"Auto-scroll ON":"Auto-scroll OFF",children:(0,a.jsx)("span",{className:"material-symbols-outlined text-[14px]",children:s?"vertical_align_bottom":"pause"})}),(0,a.jsx)("button",{onClick:()=>t([]),className:"p-0.5 rounded text-muted hover:text-foreground transition-colors",title:"Clear logs",children:(0,a.jsx)("span",{className:"material-symbols-outlined text-[14px]",children:"delete_sweep"})})]})]}),o&&(0,a.jsxs)(a.Fragment,{children:[(0,a.jsxs)("div",{ref:g,onScroll:()=>{if(!g.current)return;let{scrollTop:e,scrollHeight:t,clientHeight:s}=g.current;i(t-e-s<40)},className:"bg-zinc-950 rounded-lg p-3 font-mono text-[11px] leading-[1.6] overflow-auto border border-zinc-800",style:{maxHeight:"280px",minHeight:"120px"},children:[0===e.length?(0,a.jsx)("div",{className:`italic text-center py-4 ${c?"text-zinc-600":"text-red-500 font-semibold"}`,children:c?"Waiting for logs...":"Vui l\xf2ng Stop > Start lại MITM Server để kết nối lại logs hệ thống"}):e.map((e,t)=>(0,a.jsx)("div",{className:`whitespace-pre-wrap break-all ${e.includes("❌")||e.includes("[ERROR]")||e.includes("error")?"text-red-400":e.includes("⚡")||e.includes("intercept")?"text-emerald-400":e.includes("⏩")||e.includes("passthrough")?"text-amber-400":e.includes("\uD83D\uDE80")||e.includes("✅")?"text-green-400":e.includes("\uD83D\uDD10")?"text-blue-400":e.includes("\uD83C\uDF10")?"text-cyan-400":e.includes("\uD83D\uDD0D")?"text-purple-400":e.includes("⏹")?"text-orange-400":e.includes("WARNING")||e.includes("warn")?"text-yellow-400":"text-zinc-300"}`,children:e},t)),(0,a.jsx)("div",{ref:u})]}),(0,a.jsxs)("div",{className:"flex items-center justify-between mt-1.5",children:[(0,a.jsxs)("span",{className:"text-[10px] text-muted",children:[e.length," lines"]}),(0,a.jsxs)("div",{className:"flex items-center gap-1.5",children:[!c&&(0,a.jsx)("button",{onClick:f,className:"flex items-center justify-center rounded p-2 text-primary hover:bg-primary/20 transition-colors",title:"Reconnect to console logs",children:(0,a.jsx)("span",{className:"material-symbols-outlined text-[12px]",style:{fontSize:"18px"},children:"sync"})}),(0,a.jsx)("span",{className:`w-1.5 h-1.5 rounded-full ${c?"bg-green-500 animate-pulse":"bg-red-500"}`}),(0,a.jsx)("span",{className:`text-[10px] ${c?"text-muted":"text-red-400"}`,children:c?"Connected":"Disconnected"})]})]})]})]})}function m({serverRunning:e}){let[t,s]=(0,r.useState)(!1),[i,l]=(0,r.useState)(!1),[n,d]=(0,r.useState)([]),[x,p]=(0,r.useState)([]),[m,u]=(0,r.useState)(null);(0,r.useEffect)(()=>{e&&g()},[]),(0,r.useEffect)(()=>{e?g():(d([]),p([]))},[e]),(0,r.useEffect)(()=>{e&&t&&h()},[t]);let g=async()=>{try{let e=await fetch("/api/providers/client");if(!e.ok)return void console.warn("[QuotaChecker] fetchConnections failed:",e.status);let t=await e.json();console.log("[QuotaChecker] connections data:",t);let s=(t.connections||[]).filter(e=>"antigravity"===e.provider);console.log("[QuotaChecker] antigravity connections:",s.length),d(s)}catch(e){console.error("[QuotaChecker] fetchConnections error:",e)}},h=async()=>{l(!0),u(null);try{let e=await fetch("/api/providers/client");if(!e.ok)throw Error("Failed to fetch providers");let t=((await e.json()).connections||[]).filter(e=>"antigravity"===e.provider);d(t);let s=await Promise.all(t.map(async e=>{try{let t=await fetch(`/api/usage/${e.id}`);if(t.ok){let s=await t.json();return{...e,quota:s}}return{...e,quota:null,quotaError:"Failed to fetch quota"}}catch(t){return{...e,quota:null,quotaError:t.message}}}));p(s)}catch(e){u(e.message)}finally{l(!1)}},f=e=>e>80?"bg-green-500":e>50?"bg-yellow-500":"bg-orange-500",y=n.length>0;return(0,a.jsxs)(o.Zp,{padding:"xs",className:`overflow-hidden ${!e?"opacity-60":""}`,children:[(0,a.jsxs)("div",{className:`flex items-center justify-between ${e?"hover:cursor-pointer hover:bg-primary/5":"cursor-not-allowed"} transition-colors rounded px-2`,onClick:()=>e&&s(!t),children:[(0,a.jsxs)("div",{className:"flex items-center gap-3",children:[(0,a.jsx)("div",{className:"size-8 flex items-center justify-center shrink-0 rounded-lg bg-gradient-to-br from-blue-500 to-purple-600 text-white",children:(0,a.jsx)("span",{className:"material-symbols-outlined text-[18px]",children:"speed"})}),(0,a.jsxs)("div",{className:"min-w-0",children:[(0,a.jsxs)("div",{className:"flex items-center gap-2",children:[(0,a.jsx)("h3",{className:"font-medium text-sm",children:"Quota Checker"}),e?y?(0,a.jsxs)(o.Ex,{variant:"success",size:"sm",children:[n.length," account",n.length>1?"s":""]}):(0,a.jsx)(o.Ex,{variant:"warning",size:"sm",children:"No accounts"}):(0,a.jsx)(o.Ex,{variant:"error",size:"sm",children:"Server off"})]}),(0,a.jsx)("p",{className:"text-xs text-text-muted",children:"Check antigravity provider quota usage"})]})]}),(0,a.jsx)("span",{className:`material-symbols-outlined text-text-muted text-[20px] transition-transform${t?" rotate-180":""}`,children:"expand_more"})]}),t&&e&&(0,a.jsxs)("div",{className:"mt-4 pt-4 border-t border-border flex flex-col gap-4",children:[(0,a.jsxs)("div",{className:"flex items-center justify-between",children:[(0,a.jsx)("span",{className:"text-xs text-text-muted",children:"Antigravity Client Quotas"}),(0,a.jsxs)("button",{onClick:e=>{e.stopPropagation(),h()},disabled:i,className:"flex items-center gap-1 px-2 py-1 rounded-md bg-primary/10 text-primary text-[11px] font-medium hover:bg-primary/20 transition-colors disabled:opacity-50",children:[(0,a.jsx)("span",{className:"material-symbols-outlined text-[14px]",children:i?"hourglass_empty":"refresh"}),i?"Refreshing...":"Refresh"]})]}),m&&!i&&(0,a.jsxs)("div",{className:"flex items-center gap-2 px-3 py-2 rounded text-xs bg-red-500/10 text-red-600 border border-red-500/20",children:[(0,a.jsx)("span",{className:"material-symbols-outlined text-[14px]",children:"error"}),(0,a.jsx)("span",{children:m})]}),i&&(0,a.jsxs)("div",{className:"py-6 text-center",children:[(0,a.jsx)("span",{className:"material-symbols-outlined text-text-muted text-2xl animate-spin",children:"progress_activity"}),(0,a.jsx)("p",{className:"text-sm text-text-muted mt-2",children:"Loading quota data..."})]}),!i&&!m&&0===x.length&&(0,a.jsxs)("div",{className:"py-6 text-center",children:[(0,a.jsx)("span",{className:"material-symbols-outlined text-text-muted text-2xl",children:"cloud_off"}),(0,a.jsx)("p",{className:"text-sm text-text-muted mt-2",children:"No antigravity connections found"}),(0,a.jsx)("p",{className:"text-xs text-text-muted mt-1",children:"Add an antigravity provider to see quota info"})]}),!i&&!m&&x.length>0&&(0,a.jsx)("div",{className:"flex flex-col gap-3 max-h-[400px] overflow-y-auto",children:x.map(e=>(0,a.jsxs)("div",{className:"p-3 rounded-lg border border-border/50 bg-surface",children:[(0,a.jsxs)("div",{className:"flex items-center gap-2 mb-3 pb-2 border-b border-border/30",children:[(0,a.jsx)("div",{className:"w-7 h-7 rounded-full overflow-hidden flex items-center justify-center bg-surface",children:(0,a.jsx)(c.default,{src:"/providers/antigravity.png",alt:"Antigravity",width:28,height:28,className:"w-7 h-7 object-contain"})}),(0,a.jsxs)("div",{className:"flex-1 min-w-0",children:[(0,a.jsx)("p",{className:"text-sm font-medium text-text-main truncate",children:e.name||e.email||"Unknown Account"}),(0,a.jsx)("p",{className:"text-[10px] text-text-muted",children:e.quota?.plan||"Free Tier"})]})]}),e.quota?.quotas&&Object.keys(e.quota.quotas).length>0?(0,a.jsx)("div",{className:"space-y-3",children:Object.entries(e.quota.quotas).map(([e,t])=>(0,a.jsxs)("div",{className:"space-y-1.5",children:[(0,a.jsxs)("div",{className:"flex items-center justify-between",children:[(0,a.jsxs)("div",{className:"flex items-center gap-1.5",children:[(0,a.jsx)("span",{className:`w-2 h-2 rounded-full ${f(t.remainingPercentage)}`}),(0,a.jsx)("span",{className:"text-xs font-medium text-text-main",children:t.displayName||e})]}),(0,a.jsxs)("div",{className:"flex items-center gap-2",children:[(0,a.jsxs)("span",{className:"text-[10px] text-text-muted",children:[t.used.toLocaleString()," / ",t.total.toLocaleString()]}),(0,a.jsxs)("span",{className:`text-[10px] font-medium ${t.remainingPercentage>80?"text-green-500":t.remainingPercentage>50?"text-yellow-500":"text-orange-500"}`,children:[t.remainingPercentage,"%"]})]})]}),(0,a.jsx)("div",{className:"relative h-1.5 bg-black/5 dark:bg-white/5 rounded-full overflow-hidden",children:(0,a.jsx)("div",{className:`absolute left-0 top-0 h-full rounded-full transition-all duration-500 ${f(t.remainingPercentage)}`,style:{width:`${t.remainingPercentage}%`}})}),t.resetAt&&(0,a.jsxs)("div",{className:"flex items-center justify-between text-[10px] text-text-muted",children:[(0,a.jsxs)("span",{children:["Resets ",(e=>{if(!e)return"";let t=new Date(e)-new Date;if(t<=0)return"Resetting soon";let s=Math.floor(t/36e5),a=Math.floor(s/24);return a>0?`in ${a}d ${s%24}h`:`in ${s}h ${Math.floor(t%36e5/6e4)}m`})(t.resetAt)]}),(0,a.jsx)("span",{className:"text-[10px] text-text-muted",children:new Date(t.resetAt).toLocaleString("en-US",{month:"short",day:"numeric",hour:"2-digit",minute:"2-digit"})})]})]},e))}):(0,a.jsx)("div",{className:"py-2 text-center",children:(0,a.jsx)("p",{className:"text-xs text-text-muted",children:"No quota data available"})}),e.quotaError&&(0,a.jsxs)("div",{className:"flex items-center gap-2 px-2 py-1.5 rounded text-xs bg-yellow-500/10 text-yellow-600 mt-2",children:[(0,a.jsx)("span",{className:"material-symbols-outlined text-[12px]",children:"warning"}),(0,a.jsx)("span",{children:e.quotaError})]})]},e.id))})]}),t&&!e&&(0,a.jsx)("div",{className:"mt-4 pt-4 border-t border-border",children:(0,a.jsxs)("div",{className:"flex items-center gap-2 px-3 py-2 rounded text-xs bg-text-muted/10 text-text-muted",children:[(0,a.jsx)("span",{className:"material-symbols-outlined text-[14px]",children:"info"}),(0,a.jsx)("span",{children:"Start MITM Server to check quota information"})]})})]})}let u=["antigravity","copilot"];function g(){let[e,t]=(0,r.useState)([]),[s,o]=(0,r.useState)([]),[c,g]=(0,r.useState)({}),[h,f]=(0,r.useState)(!1),[y,b]=(0,r.useState)(null),[v,j]=(0,r.useState)({running:!1,certExists:!1,dnsStatus:{},hasCachedPassword:!1}),[N,w]=(0,r.useState)([]);(0,r.useEffect)(()=>{S(),C(),k(),A()},[]);let S=async()=>{try{let e=await fetch("/api/providers");if(e.ok){let s=await e.json();t(s.connections||[])}}catch{}},C=async()=>{try{let e=await fetch("/api/keys");if(e.ok){let t=await e.json();o(t.keys||[])}}catch{}},k=async()=>{try{let e=await fetch("/api/models/alias");if(e.ok){let t=await e.json();g(t.aliases||{})}}catch{}},A=async()=>{try{let e=await fetch("/api/settings");if(e.ok){let t=await e.json();f(t.cloudEnabled||!1)}}catch{}},E=()=>e.filter(e=>!1!==e.isActive),T=Object.entries(i).filter(([e])=>u.includes(e));return(0,a.jsxs)("div",{className:"grid grid-cols-1 lg:grid-cols-2 gap-6",children:[(0,a.jsxs)("div",{children:[(0,a.jsx)(d,{apiKeys:s,cloudEnabled:h,onStatusChange:j,onModelsLoaded:w}),(0,a.jsx)("div",{className:"mt-6",children:(0,a.jsx)(m,{serverRunning:v.running})})]}),(0,a.jsxs)("div",{className:"flex flex-col gap-4",children:[T.map(([e,t])=>(0,a.jsx)(x,{tool:t,isExpanded:y===e,onToggle:()=>b(y===e?null:e),serverRunning:v.running,dnsActive:v.dnsStatus?.[e]||!1,hasCachedPassword:v.hasCachedPassword||!1,apiKeys:s,activeProviders:E(),hasActiveProviders:E().some(e=>(0,l.KC)(e.provider).length>0||(0,n.mq)(e.provider)||(0,n.gb)(e.provider)),modelAliases:c,cloudEnabled:h,loadedModels:N,onDnsChange:e=>j(t=>({...t,dnsStatus:e.dnsStatus??t.dnsStatus}))},e)),(0,a.jsx)(p,{})]})]})}}},e=>{e.O(0,[852,702,497,441,794,358],()=>e(e.s=1872)),_N_E=e.O()}]);
@@ -1 +0,0 @@
1
- (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[110,139,141,143,167,177,253,286,296,321,472,508,543,552,568,573,580,648,666,747,805,819,851,896,922,966,988],{4441:()=>{}},_=>{_.O(0,[441,794,358],()=>_(_.s=4441)),_N_E=_.O()}]);
@@ -1 +0,0 @@
1
- (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[110,139,141,143,167,177,253,286,296,321,472,508,543,552,568,573,580,648,666,747,805,819,851,896,922,966,988],{4441:()=>{}},_=>{_.O(0,[441,794,358],()=>_(_.s=4441)),_N_E=_.O()}]);
@@ -1 +0,0 @@
1
- (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[110,139,141,143,167,177,253,286,296,321,472,508,543,552,568,573,580,648,666,747,805,819,851,896,922,966,988],{4441:()=>{}},_=>{_.O(0,[441,794,358],()=>_(_.s=4441)),_N_E=_.O()}]);