heyio 1.0.2 → 1.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (25) hide show
  1. package/dist/api/auth.js +6 -1
  2. package/dist/api/server.js +51 -0
  3. package/dist/copilot/system-message.js +1 -0
  4. package/dist/copilot/tools.js +1 -1
  5. package/dist/store/db.js +13 -0
  6. package/dist/store/squads.js +2 -1
  7. package/package.json +1 -1
  8. package/web-dist/assets/{ChatView-B9Jmzdk2.js → ChatView-BOjkWMyQ.js} +3 -3
  9. package/web-dist/assets/{FeedView-CrQePc7Q.js → FeedView-uKWKdQwv.js} +2 -2
  10. package/web-dist/assets/{LoginView-CRhhWTr8.js → LoginView-pYVaehEw.js} +1 -1
  11. package/web-dist/assets/{McpView-D4mCIH7x.js → McpView-nPxZGBX0.js} +1 -1
  12. package/web-dist/assets/{SchedulesView-4HPWN6_Z.js → SchedulesView-Dt7PEahE.js} +1 -1
  13. package/web-dist/assets/SettingsView-COTKGS-8.js +1 -0
  14. package/web-dist/assets/{SkillsView-DCixj2zS.js → SkillsView-DpdWP3V0.js} +1 -1
  15. package/web-dist/assets/{SquadDetailView-DfHZ-uwX.js → SquadDetailView-Dhq2NWpc.js} +2 -2
  16. package/web-dist/assets/{SquadsView-CNMI4rBM.js → SquadsView-DivyUzcx.js} +2 -2
  17. package/web-dist/assets/WikiView-CZSOKD5n.js +21 -0
  18. package/web-dist/assets/{api-Bzs62QeP.js → api-D2ouPK2m.js} +1 -1
  19. package/web-dist/assets/{index-D7M5O-_l.css → index-3PY8rYhY.css} +1 -1
  20. package/web-dist/assets/{index-BxzKpjKp.js → index-C7ISENGx.js} +30 -30
  21. package/web-dist/assets/{plus-C7dsO8j7.js → plus-BWRiMNg8.js} +1 -1
  22. package/web-dist/assets/{trash-2-C15lVsPO.js → trash-2-1wwkdg0F.js} +1 -1
  23. package/web-dist/index.html +2 -2
  24. package/web-dist/assets/SettingsView-DGNy9gZw.js +0 -1
  25. package/web-dist/assets/WikiView-DvoG-Zm8.js +0 -21
package/dist/api/auth.js CHANGED
@@ -1,6 +1,11 @@
1
1
  export function createAuthMiddleware(config) {
2
2
  return async (req, res, next) => {
3
- // All API routes require authentication
3
+ // Public endpoints that don't require auth
4
+ if (req.path === "/auth/config") {
5
+ next();
6
+ return;
7
+ }
8
+ // All other API routes require authentication
4
9
  const authHeader = req.headers.authorization;
5
10
  if (!authHeader?.startsWith("Bearer ")) {
6
11
  res.status(401).json({ error: "Missing or invalid authorization header" });
@@ -2,6 +2,7 @@ import express from "express";
2
2
  import { join } from "node:path";
3
3
  import { fileURLToPath } from "node:url";
4
4
  import { dirname, resolve } from "node:path";
5
+ import { loadConfig, saveConfig } from "../config.js";
5
6
  import { createAuthMiddleware } from "./auth.js";
6
7
  import { sendToOrchestrator } from "../copilot/orchestrator.js";
7
8
  import { listSquads, getSquad, getAgentsForSquad } from "../store/squads.js";
@@ -211,6 +212,56 @@ export async function startApiServer(config) {
211
212
  deleteSchedule(req.params.id);
212
213
  res.json({ ok: true });
213
214
  });
215
+ // --- Settings ---
216
+ app.get("/api/settings", (_req, res) => {
217
+ const current = loadConfig();
218
+ // Don't expose full Supabase key — mask it
219
+ res.json({
220
+ defaultModel: current.defaultModel,
221
+ port: current.port,
222
+ telegramEnabled: current.telegramEnabled,
223
+ telegramBotToken: current.telegramBotToken ? "••••••••" : "",
224
+ authorizedUserId: current.authorizedUserId ?? null,
225
+ supabaseUrl: current.supabaseUrl ?? "",
226
+ supabaseAnonKey: current.supabaseAnonKey ? "••••••••" : "",
227
+ authorizedEmail: current.authorizedEmail ?? "",
228
+ backgroundNotifyMode: current.backgroundNotifyMode,
229
+ backgroundNotifyTelegram: current.backgroundNotifyTelegram,
230
+ selfEditEnabled: current.selfEditEnabled,
231
+ watchdogEnabled: current.watchdogEnabled,
232
+ });
233
+ });
234
+ app.put("/api/settings", (req, res) => {
235
+ const updates = {};
236
+ const body = req.body;
237
+ // Only apply fields that are explicitly provided and not masked
238
+ if (body.defaultModel !== undefined)
239
+ updates.defaultModel = body.defaultModel;
240
+ if (body.port !== undefined)
241
+ updates.port = body.port;
242
+ if (body.telegramEnabled !== undefined)
243
+ updates.telegramEnabled = body.telegramEnabled;
244
+ if (body.telegramBotToken && body.telegramBotToken !== "••••••••")
245
+ updates.telegramBotToken = body.telegramBotToken;
246
+ if (body.authorizedUserId !== undefined)
247
+ updates.authorizedUserId = body.authorizedUserId;
248
+ if (body.supabaseUrl !== undefined)
249
+ updates.supabaseUrl = body.supabaseUrl;
250
+ if (body.supabaseAnonKey && body.supabaseAnonKey !== "••••••••")
251
+ updates.supabaseAnonKey = body.supabaseAnonKey;
252
+ if (body.authorizedEmail !== undefined)
253
+ updates.authorizedEmail = body.authorizedEmail;
254
+ if (body.backgroundNotifyMode !== undefined)
255
+ updates.backgroundNotifyMode = body.backgroundNotifyMode;
256
+ if (body.backgroundNotifyTelegram !== undefined)
257
+ updates.backgroundNotifyTelegram = body.backgroundNotifyTelegram;
258
+ if (body.selfEditEnabled !== undefined)
259
+ updates.selfEditEnabled = body.selfEditEnabled;
260
+ if (body.watchdogEnabled !== undefined)
261
+ updates.watchdogEnabled = body.watchdogEnabled;
262
+ saveConfig(updates);
263
+ res.json({ ok: true });
264
+ });
214
265
  // --- Health (unauthenticated) ---
215
266
  app.get("/health", (_req, res) => {
216
267
  res.json({ status: "ok", version: process.env.npm_package_version ?? "unknown" });
@@ -13,6 +13,7 @@ You are IO, a personal AI assistant daemon. You run 24/7 on the user's machine,
13
13
  ## Core Capabilities
14
14
  - Manage project squads (teams of AI agents themed after pop culture universes)
15
15
  - Read and write to a persistent wiki knowledge base at ~/.io/wiki/
16
+ - Each squad has its own wiki at ~/.io/wiki/squads/{squad-slug}/ (use the slug, never the UUID)
16
17
  - Delegate complex tasks to squad team leads
17
18
  - Track deliverables in a unified feed
18
19
  - Schedule recurring tasks and stand-ups
@@ -67,7 +67,7 @@ export function createTools() {
67
67
  handler: async ({ name, universe, repo_url }) => {
68
68
  const { createSquad } = await import("../store/squads.js");
69
69
  const squad = createSquad(name, universe, repo_url);
70
- return `Squad "${name}" created with universe "${universe}". ID: ${squad.id}`;
70
+ return `Squad "${name}" created with universe "${universe}". ID: ${squad.id}, Slug: ${squad.slug}. Wiki path: ~/.io/wiki/squads/${squad.slug}/`;
71
71
  },
72
72
  }),
73
73
  defineTool("squad_add_agent", {
package/dist/store/db.js CHANGED
@@ -115,6 +115,19 @@ function runMigrations(db) {
115
115
  `);
116
116
  setSchemaVersion(db, 1);
117
117
  }
118
+ if (version < 2) {
119
+ db.exec(`
120
+ ALTER TABLE squads ADD COLUMN slug TEXT;
121
+ `);
122
+ // Backfill slugs for existing squads
123
+ const squads = db.prepare("SELECT id, name FROM squads WHERE slug IS NULL").all();
124
+ const update = db.prepare("UPDATE squads SET slug = ? WHERE id = ?");
125
+ for (const s of squads) {
126
+ const slug = s.name.toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/^-|-$/g, "");
127
+ update.run(slug || s.id, s.id);
128
+ }
129
+ setSchemaVersion(db, 2);
130
+ }
118
131
  }
119
132
  function getSchemaVersion(db) {
120
133
  const row = db.prepare("SELECT value FROM meta WHERE key = 'schema_version'").get();
@@ -3,7 +3,8 @@ import { getDb } from "./db.js";
3
3
  export function createSquad(name, universe, repoUrl) {
4
4
  const db = getDb();
5
5
  const id = randomUUID();
6
- db.prepare("INSERT INTO squads (id, name, universe, repo_url) VALUES (?, ?, ?, ?)").run(id, name, universe, repoUrl ?? null);
6
+ const slug = name.toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/^-|-$/g, "");
7
+ db.prepare("INSERT INTO squads (id, name, slug, universe, repo_url) VALUES (?, ?, ?, ?, ?)").run(id, name, slug, universe, repoUrl ?? null);
7
8
  return db.prepare("SELECT * FROM squads WHERE id = ?").get(id);
8
9
  }
9
10
  export function getSquad(id) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "heyio",
3
- "version": "1.0.2",
3
+ "version": "1.0.4",
4
4
  "description": "IO — a personal AI assistant daemon built on the GitHub Copilot SDK",
5
5
  "bin": {
6
6
  "io": "dist/index.js"
@@ -1,11 +1,11 @@
1
- import{e as v,j as h,r as u,i as b,o as k,l as i,d,c as a,u as c,b as g,F as w,m as _,z as S,x as M,a as x,n as C,k as y}from"./index-BxzKpjKp.js";import{c as D}from"./api-Bzs62QeP.js";/**
1
+ import{e as h,i as v,r as u,h as b,o as k,k as i,d,c as a,u as c,b as g,F as w,l as _,z as S,x as M,a as x,n as C,j as y}from"./index-C7ISENGx.js";import{c as D}from"./api-D2ouPK2m.js";/**
2
2
  * @license lucide-vue-next v0.474.0 - ISC
3
3
  *
4
4
  * This source code is licensed under the ISC license.
5
5
  * See the LICENSE file in the root directory of this source tree.
6
- */const I=v("SendIcon",[["path",{d:"M14.536 21.686a.5.5 0 0 0 .937-.024l6.5-19a.496.496 0 0 0-.635-.635l-19 6.5a.5.5 0 0 0-.024.937l7.93 3.18a2 2 0 0 1 1.112 1.11z",key:"1ffxy3"}],["path",{d:"m21.854 2.147-10.94 10.939",key:"12cjpa"}]]);/**
6
+ */const I=h("SendIcon",[["path",{d:"M14.536 21.686a.5.5 0 0 0 .937-.024l6.5-19a.496.496 0 0 0-.635-.635l-19 6.5a.5.5 0 0 0-.024.937l7.93 3.18a2 2 0 0 1 1.112 1.11z",key:"1ffxy3"}],["path",{d:"m21.854 2.147-10.94 10.939",key:"12cjpa"}]]);/**
7
7
  * @license lucide-vue-next v0.474.0 - ISC
8
8
  *
9
9
  * This source code is licensed under the ISC license.
10
10
  * See the LICENSE file in the root directory of this source tree.
11
- */const T=v("SquareIcon",[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}]]),U=h("chat",()=>{const r=u([]),n=u(!1),o=u(null);function l(t){const e={id:crypto.randomUUID(),role:"user",content:t,timestamp:new Date};return r.value.push(e),e}async function m(t){l(t),n.value=!0;const e={id:crypto.randomUUID(),role:"assistant",content:"",timestamp:new Date,streaming:!0};r.value.push(e);try{const s=await D("/message",{prompt:t});e.content=s.content,e.streaming=!1}catch(s){e.content=`Error: ${s.message}`,e.streaming=!1}finally{n.value=!1}}function f(t){const e=r.value[r.value.length-1];e!=null&&e.streaming&&(e.content=t)}function p(){r.value=[]}return{messages:r,isStreaming:n,eventSource:o,sendMessage:m,updateStreamingMessage:f,clearMessages:p}}),j={class:"flex flex-col h-full"},B={key:0,class:"flex items-center justify-center h-full"},z=["innerHTML"],L={key:0,class:"inline-block w-2 h-4 bg-current animate-pulse ml-1"},V={class:"border-t border-border p-4"},E={class:"flex gap-2 items-end"},H=["disabled"],F=b({__name:"ChatView",setup(r){const n=U(),o=u(""),l=u();async function m(){const t=o.value.trim();!t||n.isStreaming||(o.value="",await n.sendMessage(t),await C(),f())}function f(){l.value&&(l.value.scrollTop=l.value.scrollHeight)}function p(t){t.key==="Enter"&&!t.shiftKey&&(t.preventDefault(),m())}return k(()=>f()),(t,e)=>(i(),d("div",j,[a("div",{ref_key:"messagesContainer",ref:l,class:"flex-1 overflow-y-auto p-4 space-y-4"},[c(n).messages.length===0?(i(),d("div",B,[...e[1]||(e[1]=[a("div",{class:"text-center text-muted-foreground"},[a("div",{class:"text-4xl mb-3"},"🤖"),a("p",{class:"text-lg font-medium"},"Welcome to IO"),a("p",{class:"text-sm mt-1"},"Send a message to get started.")],-1)])])):g("",!0),(i(!0),d(w,null,_(c(n).messages,s=>(i(),d("div",{key:s.id,class:y(["flex",s.role==="user"?"justify-end":"justify-start"])},[a("div",{class:y(["max-w-[75%] rounded-lg px-4 py-2 text-sm",s.role==="user"?"bg-primary text-primary-foreground":"bg-muted text-foreground"])},[a("div",{class:"whitespace-pre-wrap break-words",innerHTML:s.content||"..."},null,8,z),s.streaming?(i(),d("div",L)):g("",!0)],2)],2))),128))],512),a("div",V,[a("div",E,[S(a("textarea",{"onUpdate:modelValue":e[0]||(e[0]=s=>o.value=s),onKeydown:p,placeholder:"Send a message...",rows:"1",class:"flex-1 resize-none rounded-md border border-input bg-background px-3 py-2 text-sm focus:outline-none focus:ring-2 focus:ring-ring min-h-[40px] max-h-[120px]"},null,544),[[M,o.value]]),a("button",{onClick:m,disabled:!o.value.trim()||c(n).isStreaming,class:"rounded-md bg-primary text-primary-foreground p-2 hover:bg-primary/90 disabled:opacity-50 transition-colors"},[c(n).isStreaming?(i(),x(c(T),{key:1,class:"w-4 h-4"})):(i(),x(c(I),{key:0,class:"w-4 h-4"}))],8,H)])])]))}});export{F as default};
11
+ */const T=h("SquareIcon",[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}]]),U=v("chat",()=>{const r=u([]),n=u(!1),o=u(null);function l(t){const e={id:crypto.randomUUID(),role:"user",content:t,timestamp:new Date};return r.value.push(e),e}async function m(t){l(t),n.value=!0;const e={id:crypto.randomUUID(),role:"assistant",content:"",timestamp:new Date,streaming:!0};r.value.push(e);try{const s=await D("/message",{prompt:t});e.content=s.content,e.streaming=!1}catch(s){e.content=`Error: ${s.message}`,e.streaming=!1}finally{n.value=!1}}function f(t){const e=r.value[r.value.length-1];e!=null&&e.streaming&&(e.content=t)}function p(){r.value=[]}return{messages:r,isStreaming:n,eventSource:o,sendMessage:m,updateStreamingMessage:f,clearMessages:p}}),j={class:"flex flex-col h-full"},B={key:0,class:"flex items-center justify-center h-full"},z=["innerHTML"],L={key:0,class:"inline-block w-2 h-4 bg-current animate-pulse ml-1"},V={class:"border-t border-border p-4"},E={class:"flex gap-2 items-end"},H=["disabled"],F=b({__name:"ChatView",setup(r){const n=U(),o=u(""),l=u();async function m(){const t=o.value.trim();!t||n.isStreaming||(o.value="",await n.sendMessage(t),await C(),f())}function f(){l.value&&(l.value.scrollTop=l.value.scrollHeight)}function p(t){t.key==="Enter"&&!t.shiftKey&&(t.preventDefault(),m())}return k(()=>f()),(t,e)=>(i(),d("div",j,[a("div",{ref_key:"messagesContainer",ref:l,class:"flex-1 overflow-y-auto p-4 space-y-4"},[c(n).messages.length===0?(i(),d("div",B,[...e[1]||(e[1]=[a("div",{class:"text-center text-muted-foreground"},[a("div",{class:"text-4xl mb-3"},"🤖"),a("p",{class:"text-lg font-medium"},"Welcome to IO"),a("p",{class:"text-sm mt-1"},"Send a message to get started.")],-1)])])):g("",!0),(i(!0),d(w,null,_(c(n).messages,s=>(i(),d("div",{key:s.id,class:y(["flex",s.role==="user"?"justify-end":"justify-start"])},[a("div",{class:y(["max-w-[75%] rounded-lg px-4 py-2 text-sm",s.role==="user"?"bg-primary text-primary-foreground":"bg-muted text-foreground"])},[a("div",{class:"whitespace-pre-wrap break-words",innerHTML:s.content||"..."},null,8,z),s.streaming?(i(),d("div",L)):g("",!0)],2)],2))),128))],512),a("div",V,[a("div",E,[S(a("textarea",{"onUpdate:modelValue":e[0]||(e[0]=s=>o.value=s),onKeydown:p,placeholder:"Send a message...",rows:"1",class:"flex-1 resize-none rounded-md border border-input bg-background px-3 py-2 text-sm focus:outline-none focus:ring-2 focus:ring-ring min-h-[40px] max-h-[120px]"},null,544),[[M,o.value]]),a("button",{onClick:m,disabled:!o.value.trim()||c(n).isStreaming,class:"rounded-md bg-primary text-primary-foreground p-2 hover:bg-primary/90 disabled:opacity-50 transition-colors"},[c(n).isStreaming?(i(),x(c(T),{key:1,class:"w-4 h-4"})):(i(),x(c(I),{key:0,class:"w-4 h-4"}))],8,H)])])]))}});export{F as default};
@@ -1,6 +1,6 @@
1
- import{e as $,i as I,o as F,l as a,d as r,c as o,F as b,m as g,h as f,u as _,I as M,r as d,k as m,t as l,D as y,b as k}from"./index-BxzKpjKp.js";import{b as D,c as N,a as V}from"./api-Bzs62QeP.js";import{T as B}from"./trash-2-C15lVsPO.js";/**
1
+ import{e as $,h as I,o as F,k as a,d as r,c as o,F as b,l as g,g as f,u as _,I as M,r as d,j as x,t as l,D as y,b as k}from"./index-C7ISENGx.js";import{b as D,c as N,a as V}from"./api-D2ouPK2m.js";import{T as B}from"./trash-2-1wwkdg0F.js";/**
2
2
  * @license lucide-vue-next v0.474.0 - ISC
3
3
  *
4
4
  * This source code is licensed under the ISC license.
5
5
  * See the LICENSE file in the root directory of this source tree.
6
- */const L=$("CheckIcon",[["path",{d:"M20 6 9 17l-5-5",key:"1gmf2c"}]]),T={class:"p-6"},j={class:"flex items-center justify-between mb-6"},z={class:"flex gap-2"},A=["onClick"],E={key:0,class:"text-muted-foreground"},G={key:1,class:"text-center py-12 text-muted-foreground"},P={key:2,class:"space-y-2"},R=["onClick"],S={class:"flex-1 min-w-0"},U={class:"flex items-center gap-2"},q={class:"text-xs bg-secondary text-secondary-foreground px-2 py-0.5 rounded-full"},H={class:"text-xs text-muted-foreground mt-0.5"},J={class:"flex gap-1"},K=["onClick"],O=["onClick"],Q={key:0,class:"px-4 pb-3 border-t border-border pt-3"},W={class:"prose prose-sm dark:prose-invert max-w-none text-sm whitespace-pre-wrap"},te=I({__name:"FeedView",setup(X){const n=d([]),c=d(0),u=d("all"),p=d(!0),i=d(null);async function x(){p.value=!0;try{const t=await D(`/feed?unread=${u.value==="unread"}`);n.value=t.items,c.value=t.unreadCount}finally{p.value=!1}}async function h(t){await N(`/feed/${t}/read`);const s=n.value.find(e=>e.id===t);s&&(s.read=1,c.value=Math.max(0,c.value-1))}async function C(t){await V(`/feed/${t}`),n.value=n.value.filter(s=>s.id!==t)}function w(t){i.value=i.value===t?null:t,i.value===t&&h(t)}return F(x),(t,s)=>(a(),r("div",T,[o("div",j,[s[0]||(s[0]=o("h1",{class:"text-2xl font-bold"},"Feed",-1)),o("div",z,[(a(),r(b,null,g(["all","unread"],e=>o("button",{key:e,onClick:v=>{u.value=e,x()},class:m(["px-3 py-1.5 text-xs rounded-md border transition-colors",u.value===e?"bg-primary text-primary-foreground border-primary":"border-border text-muted-foreground hover:text-foreground"])},l(e==="all"?"All":`Unread (${c.value})`),11,A)),64))])]),p.value?(a(),r("div",E,"Loading...")):n.value.length===0?(a(),r("div",G,[f(_(M),{class:"w-12 h-12 mx-auto mb-3 opacity-50"}),s[1]||(s[1]=o("p",null,"No feed items.",-1))])):(a(),r("div",P,[(a(!0),r(b,null,g(n.value,e=>(a(),r("div",{key:e.id,class:m(["border border-border rounded-lg overflow-hidden",{"border-l-2 border-l-primary":!e.read}])},[o("div",{onClick:v=>w(e.id),class:"flex items-center gap-3 px-4 py-3 cursor-pointer hover:bg-muted/50 transition-colors"},[o("div",S,[o("div",U,[o("span",q,l(e.source),1),o("span",{class:m(["text-sm font-medium truncate",{"font-bold":!e.read}])},l(e.title),3)]),o("p",H,l(e.created_at),1)]),o("div",J,[e.read?k("",!0):(a(),r("button",{key:0,onClick:y(v=>h(e.id),["stop"]),class:"p-1.5 rounded hover:bg-accent text-muted-foreground",title:"Mark as read"},[f(_(L),{class:"w-3.5 h-3.5"})],8,K)),o("button",{onClick:y(v=>C(e.id),["stop"]),class:"p-1.5 rounded hover:bg-destructive/10 text-muted-foreground hover:text-destructive",title:"Delete"},[f(_(B),{class:"w-3.5 h-3.5"})],8,O)])],8,R),i.value===e.id?(a(),r("div",Q,[o("div",W,l(e.content),1)])):k("",!0)],2))),128))]))]))}});export{te as default};
6
+ */const L=$("CheckIcon",[["path",{d:"M20 6 9 17l-5-5",key:"1gmf2c"}]]),j={class:"p-6"},T={class:"flex items-center justify-between mb-6"},z={class:"flex gap-2"},A=["onClick"],E={key:0,class:"text-muted-foreground"},G={key:1,class:"text-center py-12 text-muted-foreground"},P={key:2,class:"space-y-2"},R=["onClick"],S={class:"flex-1 min-w-0"},U={class:"flex items-center gap-2"},q={class:"text-xs bg-secondary text-secondary-foreground px-2 py-0.5 rounded-full"},H={class:"text-xs text-muted-foreground mt-0.5"},J={class:"flex gap-1"},K=["onClick"],O=["onClick"],Q={key:0,class:"px-4 pb-3 border-t border-border pt-3"},W={class:"prose prose-sm dark:prose-invert max-w-none text-sm whitespace-pre-wrap"},te=I({__name:"FeedView",setup(X){const n=d([]),c=d(0),u=d("all"),p=d(!0),i=d(null);async function m(){p.value=!0;try{const t=await D(`/feed?unread=${u.value==="unread"}`);n.value=t.items,c.value=t.unreadCount}finally{p.value=!1}}async function h(t){await N(`/feed/${t}/read`);const s=n.value.find(e=>e.id===t);s&&(s.read=1,c.value=Math.max(0,c.value-1))}async function C(t){await V(`/feed/${t}`),n.value=n.value.filter(s=>s.id!==t)}function w(t){i.value=i.value===t?null:t,i.value===t&&h(t)}return F(m),(t,s)=>(a(),r("div",j,[o("div",T,[s[0]||(s[0]=o("h1",{class:"text-2xl font-bold"},"Feed",-1)),o("div",z,[(a(),r(b,null,g(["all","unread"],e=>o("button",{key:e,onClick:v=>{u.value=e,m()},class:x(["px-3 py-1.5 text-xs rounded-md border transition-colors",u.value===e?"bg-primary text-primary-foreground border-primary":"border-border text-muted-foreground hover:text-foreground"])},l(e==="all"?"All":`Unread (${c.value})`),11,A)),64))])]),p.value?(a(),r("div",E,"Loading...")):n.value.length===0?(a(),r("div",G,[f(_(M),{class:"w-12 h-12 mx-auto mb-3 opacity-50"}),s[1]||(s[1]=o("p",null,"No feed items.",-1))])):(a(),r("div",P,[(a(!0),r(b,null,g(n.value,e=>(a(),r("div",{key:e.id,class:x(["border border-border rounded-lg overflow-hidden",{"border-l-2 border-l-primary":!e.read}])},[o("div",{onClick:v=>w(e.id),class:"flex items-center gap-3 px-4 py-3 cursor-pointer hover:bg-muted/50 transition-colors"},[o("div",S,[o("div",U,[o("span",q,l(e.source),1),o("span",{class:x(["text-sm font-medium truncate",{"font-bold":!e.read}])},l(e.title),3)]),o("p",H,l(e.created_at),1)]),o("div",J,[e.read?k("",!0):(a(),r("button",{key:0,onClick:y(v=>h(e.id),["stop"]),class:"p-1.5 rounded hover:bg-accent text-muted-foreground",title:"Mark as read"},[f(_(L),{class:"w-3.5 h-3.5"})],8,K)),o("button",{onClick:y(v=>C(e.id),["stop"]),class:"p-1.5 rounded hover:bg-destructive/10 text-muted-foreground hover:text-destructive",title:"Delete"},[f(_(B),{class:"w-3.5 h-3.5"})],8,O)])],8,R),i.value===e.id?(a(),r("div",Q,[o("div",W,l(e.content),1)])):k("",!0)],2))),128))]))]))}});export{te as default};
@@ -1 +1 @@
1
- import{i as b,q as v,l as d,d as u,c as e,D as y,z as m,x as p,t as c,b as w,u as f,r as l,v as h}from"./index-BxzKpjKp.js";const k={class:"min-h-screen flex items-center justify-center bg-background p-4"},S={class:"w-full max-w-sm space-y-6"},_={key:0,class:"text-sm text-destructive"},V=["disabled"],D=b({__name:"LoginView",setup(q){const o=v(),g=h(),n=l(""),r=l(""),s=l("");async function x(){s.value="";try{await o.login(n.value,r.value),g.push("/")}catch(i){s.value=i.message??"Login failed"}}return(i,t)=>(d(),u("div",k,[e("div",S,[t[4]||(t[4]=e("div",{class:"text-center"},[e("div",{class:"text-4xl mb-2"},"🤖"),e("h1",{class:"text-2xl font-bold"},"IO"),e("p",{class:"text-sm text-muted-foreground mt-1"},"Sign in to your dashboard")],-1)),e("form",{onSubmit:y(x,["prevent"]),class:"space-y-4"},[e("div",null,[t[2]||(t[2]=e("label",{class:"text-sm font-medium",for:"email"},"Email",-1)),m(e("input",{id:"email","onUpdate:modelValue":t[0]||(t[0]=a=>n.value=a),type:"email",required:"",class:"mt-1 w-full rounded-md border border-input bg-background px-3 py-2 text-sm focus:outline-none focus:ring-2 focus:ring-ring",placeholder:"you@example.com"},null,512),[[p,n.value]])]),e("div",null,[t[3]||(t[3]=e("label",{class:"text-sm font-medium",for:"password"},"Password",-1)),m(e("input",{id:"password","onUpdate:modelValue":t[1]||(t[1]=a=>r.value=a),type:"password",required:"",class:"mt-1 w-full rounded-md border border-input bg-background px-3 py-2 text-sm focus:outline-none focus:ring-2 focus:ring-ring",placeholder:"••••••••"},null,512),[[p,r.value]])]),s.value?(d(),u("div",_,c(s.value),1)):w("",!0),e("button",{type:"submit",disabled:f(o).loading,class:"w-full rounded-md bg-primary text-primary-foreground px-4 py-2 text-sm font-medium hover:bg-primary/90 disabled:opacity-50 transition-colors"},c(f(o).loading?"Signing in...":"Sign In"),9,V)],32)])]))}});export{D as default};
1
+ import{h as b,p as v,k as d,d as u,c as e,D as y,z as m,x as p,t as c,b as w,u as f,r as l,s as h}from"./index-C7ISENGx.js";const k={class:"min-h-screen flex items-center justify-center bg-background p-4"},S={class:"w-full max-w-sm space-y-6"},_={key:0,class:"text-sm text-destructive"},V=["disabled"],L=b({__name:"LoginView",setup(B){const o=v(),g=h(),n=l(""),r=l(""),t=l("");async function x(){t.value="";try{await o.login(n.value,r.value),g.push("/")}catch(i){t.value=i.message??"Login failed"}}return(i,s)=>(d(),u("div",k,[e("div",S,[s[4]||(s[4]=e("div",{class:"text-center"},[e("div",{class:"text-4xl mb-2"},"🤖"),e("h1",{class:"text-2xl font-bold"},"IO"),e("p",{class:"text-sm text-muted-foreground mt-1"},"Sign in to your dashboard")],-1)),e("form",{onSubmit:y(x,["prevent"]),class:"space-y-4"},[e("div",null,[s[2]||(s[2]=e("label",{class:"text-sm font-medium",for:"email"},"Email",-1)),m(e("input",{id:"email","onUpdate:modelValue":s[0]||(s[0]=a=>n.value=a),type:"email",required:"",class:"mt-1 w-full rounded-md border border-input bg-background px-3 py-2 text-sm focus:outline-none focus:ring-2 focus:ring-ring",placeholder:"you@example.com"},null,512),[[p,n.value]])]),e("div",null,[s[3]||(s[3]=e("label",{class:"text-sm font-medium",for:"password"},"Password",-1)),m(e("input",{id:"password","onUpdate:modelValue":s[1]||(s[1]=a=>r.value=a),type:"password",required:"",class:"mt-1 w-full rounded-md border border-input bg-background px-3 py-2 text-sm focus:outline-none focus:ring-2 focus:ring-ring",placeholder:"••••••••"},null,512),[[p,r.value]])]),t.value?(d(),u("div",_,c(t.value),1)):w("",!0),e("button",{type:"submit",disabled:f(o).loading,class:"w-full rounded-md bg-primary text-primary-foreground px-4 py-2 text-sm font-medium hover:bg-primary/90 disabled:opacity-50 transition-colors"},c(f(o).loading?"Signing in...":"Sign In"),9,V)],32)])]))}});export{L as default};
@@ -1 +1 @@
1
- import{i as k,o as C,l as a,d as n,c as t,h as m,u as p,g as h,z as u,x as c,w as S,b as _,S as V,F as M,m as N,r as i,t as b,k as y}from"./index-BxzKpjKp.js";import{b as P,c as T,d as U,a as $}from"./api-Bzs62QeP.js";import{P as B}from"./plus-C7dsO8j7.js";import{T as D}from"./trash-2-C15lVsPO.js";const L={class:"p-6"},j={class:"flex items-center justify-between mb-6"},z={key:0,class:"border border-border rounded-lg p-4 mb-6 space-y-3"},A={class:"grid grid-cols-2 gap-3"},F={key:0},E={key:1},G={key:1,class:"text-muted-foreground"},R={key:2,class:"text-center py-12 text-muted-foreground"},q={key:3,class:"space-y-2"},H={class:"font-medium text-sm"},I={class:"ml-2 text-xs text-muted-foreground bg-secondary px-1.5 py-0.5 rounded"},J={class:"flex items-center gap-3"},K=["onClick"],O=["onClick"],ee=k({__name:"McpView",setup(Q){const d=i([]),v=i(!0),r=i(!1),o=i({name:"",type:"stdio",command:"",url:""});C(async()=>{try{d.value=await P("/mcp")}finally{v.value=!1}});async function f(l){await U(`/mcp/${l.id}`,{enabled:!l.enabled}),l.enabled=!l.enabled}async function x(l){await $(`/mcp/${l}`),d.value=d.value.filter(e=>e.id!==l)}async function g(){const l={name:o.value.name,type:o.value.type};o.value.type==="stdio"?l.command=o.value.command:l.url=o.value.url;const e=await T("/mcp",l);d.value.push(e),r.value=!1,o.value={name:"",type:"stdio",command:"",url:""}}return(l,e)=>(a(),n("div",L,[t("div",j,[e[6]||(e[6]=t("h1",{class:"text-2xl font-bold"},"MCP Servers",-1)),t("button",{onClick:e[0]||(e[0]=s=>r.value=!r.value),class:"inline-flex items-center gap-1 px-3 py-1.5 text-sm rounded-md bg-primary text-primary-foreground hover:bg-primary/90 transition-colors"},[m(p(B),{class:"w-4 h-4"}),e[5]||(e[5]=h(" Add Server ",-1))])]),r.value?(a(),n("div",z,[t("div",A,[t("div",null,[e[7]||(e[7]=t("label",{class:"text-sm font-medium"},"Name",-1)),u(t("input",{"onUpdate:modelValue":e[1]||(e[1]=s=>o.value.name=s),class:"mt-1 w-full rounded-md border border-input bg-background px-3 py-2 text-sm"},null,512),[[c,o.value.name]])]),t("div",null,[e[9]||(e[9]=t("label",{class:"text-sm font-medium"},"Type",-1)),u(t("select",{"onUpdate:modelValue":e[2]||(e[2]=s=>o.value.type=s),class:"mt-1 w-full rounded-md border border-input bg-background px-3 py-2 text-sm"},[...e[8]||(e[8]=[t("option",{value:"stdio"},"stdio",-1),t("option",{value:"http"},"http",-1)])],512),[[S,o.value.type]])])]),o.value.type==="stdio"?(a(),n("div",F,[e[10]||(e[10]=t("label",{class:"text-sm font-medium"},"Command",-1)),u(t("input",{"onUpdate:modelValue":e[3]||(e[3]=s=>o.value.command=s),placeholder:"npx @my/mcp-server",class:"mt-1 w-full rounded-md border border-input bg-background px-3 py-2 text-sm"},null,512),[[c,o.value.command]])])):(a(),n("div",E,[e[11]||(e[11]=t("label",{class:"text-sm font-medium"},"URL",-1)),u(t("input",{"onUpdate:modelValue":e[4]||(e[4]=s=>o.value.url=s),placeholder:"https://...",class:"mt-1 w-full rounded-md border border-input bg-background px-3 py-2 text-sm"},null,512),[[c,o.value.url]])])),t("button",{onClick:g,class:"px-4 py-2 text-sm rounded-md bg-primary text-primary-foreground hover:bg-primary/90"},"Save")])):_("",!0),v.value?(a(),n("div",G,"Loading...")):d.value.length===0?(a(),n("div",R,[m(p(V),{class:"w-12 h-12 mx-auto mb-3 opacity-50"}),e[12]||(e[12]=t("p",null,"No MCP servers configured.",-1))])):(a(),n("div",q,[(a(!0),n(M,null,N(d.value,s=>(a(),n("div",{key:s.id,class:"flex items-center justify-between border border-border rounded-lg px-4 py-3"},[t("div",null,[t("span",H,b(s.name),1),t("span",I,b(s.type),1)]),t("div",J,[t("button",{onClick:w=>f(s),class:y(["relative w-10 h-5 rounded-full transition-colors",s.enabled?"bg-primary":"bg-muted"])},[t("span",{class:y(["absolute top-0.5 w-4 h-4 rounded-full bg-white transition-transform",s.enabled?"translate-x-5":"translate-x-0.5"])},null,2)],10,K),t("button",{onClick:w=>x(s.id),class:"p-1.5 rounded hover:bg-destructive/10 text-muted-foreground hover:text-destructive"},[m(p(D),{class:"w-4 h-4"})],8,O)])]))),128))]))]))}});export{ee as default};
1
+ import{h as k,o as C,k as a,d as n,c as t,g as m,u as p,f as h,z as u,x as c,w as S,b as _,S as V,F as M,l as N,r as i,t as b,j as y}from"./index-C7ISENGx.js";import{b as P,c as T,d as U,a as $}from"./api-D2ouPK2m.js";import{P as j}from"./plus-BWRiMNg8.js";import{T as B}from"./trash-2-1wwkdg0F.js";const D={class:"p-6"},L={class:"flex items-center justify-between mb-6"},z={key:0,class:"border border-border rounded-lg p-4 mb-6 space-y-3"},A={class:"grid grid-cols-2 gap-3"},F={key:0},E={key:1},G={key:1,class:"text-muted-foreground"},R={key:2,class:"text-center py-12 text-muted-foreground"},q={key:3,class:"space-y-2"},H={class:"font-medium text-sm"},I={class:"ml-2 text-xs text-muted-foreground bg-secondary px-1.5 py-0.5 rounded"},J={class:"flex items-center gap-3"},K=["onClick"],O=["onClick"],ee=k({__name:"McpView",setup(Q){const d=i([]),v=i(!0),r=i(!1),o=i({name:"",type:"stdio",command:"",url:""});C(async()=>{try{d.value=await P("/mcp")}finally{v.value=!1}});async function f(l){await U(`/mcp/${l.id}`,{enabled:!l.enabled}),l.enabled=!l.enabled}async function x(l){await $(`/mcp/${l}`),d.value=d.value.filter(e=>e.id!==l)}async function g(){const l={name:o.value.name,type:o.value.type};o.value.type==="stdio"?l.command=o.value.command:l.url=o.value.url;const e=await T("/mcp",l);d.value.push(e),r.value=!1,o.value={name:"",type:"stdio",command:"",url:""}}return(l,e)=>(a(),n("div",D,[t("div",L,[e[6]||(e[6]=t("h1",{class:"text-2xl font-bold"},"MCP Servers",-1)),t("button",{onClick:e[0]||(e[0]=s=>r.value=!r.value),class:"inline-flex items-center gap-1 px-3 py-1.5 text-sm rounded-md bg-primary text-primary-foreground hover:bg-primary/90 transition-colors"},[m(p(j),{class:"w-4 h-4"}),e[5]||(e[5]=h(" Add Server ",-1))])]),r.value?(a(),n("div",z,[t("div",A,[t("div",null,[e[7]||(e[7]=t("label",{class:"text-sm font-medium"},"Name",-1)),u(t("input",{"onUpdate:modelValue":e[1]||(e[1]=s=>o.value.name=s),class:"mt-1 w-full rounded-md border border-input bg-background px-3 py-2 text-sm"},null,512),[[c,o.value.name]])]),t("div",null,[e[9]||(e[9]=t("label",{class:"text-sm font-medium"},"Type",-1)),u(t("select",{"onUpdate:modelValue":e[2]||(e[2]=s=>o.value.type=s),class:"mt-1 w-full rounded-md border border-input bg-background px-3 py-2 text-sm"},[...e[8]||(e[8]=[t("option",{value:"stdio"},"stdio",-1),t("option",{value:"http"},"http",-1)])],512),[[S,o.value.type]])])]),o.value.type==="stdio"?(a(),n("div",F,[e[10]||(e[10]=t("label",{class:"text-sm font-medium"},"Command",-1)),u(t("input",{"onUpdate:modelValue":e[3]||(e[3]=s=>o.value.command=s),placeholder:"npx @my/mcp-server",class:"mt-1 w-full rounded-md border border-input bg-background px-3 py-2 text-sm"},null,512),[[c,o.value.command]])])):(a(),n("div",E,[e[11]||(e[11]=t("label",{class:"text-sm font-medium"},"URL",-1)),u(t("input",{"onUpdate:modelValue":e[4]||(e[4]=s=>o.value.url=s),placeholder:"https://...",class:"mt-1 w-full rounded-md border border-input bg-background px-3 py-2 text-sm"},null,512),[[c,o.value.url]])])),t("button",{onClick:g,class:"px-4 py-2 text-sm rounded-md bg-primary text-primary-foreground hover:bg-primary/90"},"Save")])):_("",!0),v.value?(a(),n("div",G,"Loading...")):d.value.length===0?(a(),n("div",R,[m(p(V),{class:"w-12 h-12 mx-auto mb-3 opacity-50"}),e[12]||(e[12]=t("p",null,"No MCP servers configured.",-1))])):(a(),n("div",q,[(a(!0),n(M,null,N(d.value,s=>(a(),n("div",{key:s.id,class:"flex items-center justify-between border border-border rounded-lg px-4 py-3"},[t("div",null,[t("span",H,b(s.name),1),t("span",I,b(s.type),1)]),t("div",J,[t("button",{onClick:w=>f(s),class:y(["relative w-10 h-5 rounded-full transition-colors",s.enabled?"bg-primary":"bg-muted"])},[t("span",{class:y(["absolute top-0.5 w-4 h-4 rounded-full bg-white transition-transform",s.enabled?"translate-x-5":"translate-x-0.5"])},null,2)],10,K),t("button",{onClick:w=>x(s.id),class:"p-1.5 rounded hover:bg-destructive/10 text-muted-foreground hover:text-destructive"},[m(p(B),{class:"w-4 h-4"})],8,O)])]))),128))]))]))}});export{ee as default};
@@ -1 +1 @@
1
- import{i as q,o as V,l as d,d as r,c as t,h as c,u as v,g as $,F as y,m as k,z as p,w,x as h,b as P,C as T,t as m,r as n,k as b}from"./index-BxzKpjKp.js";import{b as N,c as z,d as A,a as U}from"./api-Bzs62QeP.js";import{P as B}from"./plus-C7dsO8j7.js";import{T as D}from"./trash-2-C15lVsPO.js";const I={class:"p-6"},M={class:"flex items-center justify-between mb-6"},j={class:"flex gap-1 border-b border-border mb-4"},E=["onClick"],F={key:0,class:"border border-border rounded-lg p-4 mb-4 space-y-3"},L={class:"grid grid-cols-2 gap-3"},O={key:0},G={key:1},H={key:1,class:"text-muted-foreground"},J={key:2,class:"text-center py-12 text-muted-foreground"},K={key:3,class:"space-y-2"},Q={class:"text-sm font-medium font-mono"},R={class:"text-xs text-muted-foreground mt-0.5"},W={class:"flex items-center gap-3"},X=["onClick"],Y=["onClick"],ae=q({__name:"SchedulesView",setup(Z){const l=n([]),g=n(!0),u=n("squad"),i=n(!1),s=n({type:"squad",cron:"",squad_id:"",agenda:"triage",prompt:""});V(async()=>{try{l.value=await N("/schedules")}finally{g.value=!1}});const f=()=>l.value.filter(a=>a.type===u.value);async function _(){const a={type:s.value.type,cron:s.value.cron};s.value.type==="squad"?(a.squad_id=s.value.squad_id,a.agenda=s.value.agenda):a.prompt=s.value.prompt;const e=await z("/schedules",a);l.value.push(e),i.value=!1}async function S(a){const e=!a.enabled;await A(`/schedules/${a.id}`,{enabled:e}),a.enabled=e?1:0}async function C(a){await U(`/schedules/${a}`),l.value=l.value.filter(e=>e.id!==a)}return(a,e)=>(d(),r("div",I,[t("div",M,[e[6]||(e[6]=t("h1",{class:"text-2xl font-bold"},"Schedules",-1)),t("button",{onClick:e[0]||(e[0]=o=>i.value=!i.value),class:"inline-flex items-center gap-1 px-3 py-1.5 text-sm rounded-md bg-primary text-primary-foreground hover:bg-primary/90 transition-colors"},[c(v(B),{class:"w-4 h-4"}),e[5]||(e[5]=$(" Add Schedule ",-1))])]),t("div",j,[(d(),r(y,null,k(["squad","io"],o=>t("button",{key:o,onClick:x=>u.value=o,class:b(["px-4 py-2 text-sm font-medium border-b-2 transition-colors",u.value===o?"border-primary text-foreground":"border-transparent text-muted-foreground hover:text-foreground"])},m(o==="squad"?"Squad Schedules":"IO Schedules"),11,E)),64))]),i.value?(d(),r("div",F,[t("div",L,[t("div",null,[e[8]||(e[8]=t("label",{class:"text-sm font-medium"},"Type",-1)),p(t("select",{"onUpdate:modelValue":e[1]||(e[1]=o=>s.value.type=o),class:"mt-1 w-full rounded-md border border-input bg-background px-3 py-2 text-sm"},[...e[7]||(e[7]=[t("option",{value:"squad"},"Squad",-1),t("option",{value:"io"},"IO",-1)])],512),[[w,s.value.type]])]),t("div",null,[e[9]||(e[9]=t("label",{class:"text-sm font-medium"},"Cron Expression",-1)),p(t("input",{"onUpdate:modelValue":e[2]||(e[2]=o=>s.value.cron=o),placeholder:"0 9 * * 1-5",class:"mt-1 w-full rounded-md border border-input bg-background px-3 py-2 text-sm"},null,512),[[h,s.value.cron]])])]),s.value.type==="squad"?(d(),r("div",O,[e[11]||(e[11]=t("label",{class:"text-sm font-medium"},"Agenda",-1)),p(t("select",{"onUpdate:modelValue":e[3]||(e[3]=o=>s.value.agenda=o),class:"mt-1 w-full rounded-md border border-input bg-background px-3 py-2 text-sm"},[...e[10]||(e[10]=[t("option",{value:"triage"},"Triage",-1),t("option",{value:"prioritize"},"Prioritize",-1),t("option",{value:"ideation"},"Ideation",-1)])],512),[[w,s.value.agenda]])])):(d(),r("div",G,[e[12]||(e[12]=t("label",{class:"text-sm font-medium"},"Prompt",-1)),p(t("textarea",{"onUpdate:modelValue":e[4]||(e[4]=o=>s.value.prompt=o),rows:"2",class:"mt-1 w-full rounded-md border border-input bg-background px-3 py-2 text-sm"},null,512),[[h,s.value.prompt]])])),t("button",{onClick:_,class:"px-4 py-2 text-sm rounded-md bg-primary text-primary-foreground hover:bg-primary/90"},"Save")])):P("",!0),g.value?(d(),r("div",H,"Loading...")):f().length===0?(d(),r("div",J,[c(v(T),{class:"w-12 h-12 mx-auto mb-3 opacity-50"}),t("p",null,"No "+m(u.value)+" schedules configured.",1)])):(d(),r("div",K,[(d(!0),r(y,null,k(f(),o=>(d(),r("div",{key:o.id,class:"flex items-center justify-between border border-border rounded-lg px-4 py-3"},[t("div",null,[t("div",Q,m(o.cron),1),t("div",R,m(o.type==="squad"?`Agenda: ${o.agenda}`:o.prompt.slice(0,60)),1)]),t("div",W,[t("button",{onClick:x=>S(o),class:b(["relative w-10 h-5 rounded-full transition-colors",o.enabled?"bg-primary":"bg-muted"])},[t("span",{class:b(["absolute top-0.5 w-4 h-4 rounded-full bg-white transition-transform",o.enabled?"translate-x-5":"translate-x-0.5"])},null,2)],10,X),t("button",{onClick:x=>C(o.id),class:"p-1.5 rounded hover:bg-destructive/10 text-muted-foreground hover:text-destructive"},[c(v(D),{class:"w-4 h-4"})],8,Y)])]))),128))]))]))}});export{ae as default};
1
+ import{h as q,o as V,k as d,d as r,c as t,g as c,u as v,f as $,F as y,l as k,z as p,w,x as h,b as P,C as T,t as m,r as n,j as b}from"./index-C7ISENGx.js";import{b as N,c as z,d as A,a as U}from"./api-D2ouPK2m.js";import{P as j}from"./plus-BWRiMNg8.js";import{T as B}from"./trash-2-1wwkdg0F.js";const D={class:"p-6"},I={class:"flex items-center justify-between mb-6"},M={class:"flex gap-1 border-b border-border mb-4"},E=["onClick"],F={key:0,class:"border border-border rounded-lg p-4 mb-4 space-y-3"},L={class:"grid grid-cols-2 gap-3"},O={key:0},G={key:1},H={key:1,class:"text-muted-foreground"},J={key:2,class:"text-center py-12 text-muted-foreground"},K={key:3,class:"space-y-2"},Q={class:"text-sm font-medium font-mono"},R={class:"text-xs text-muted-foreground mt-0.5"},W={class:"flex items-center gap-3"},X=["onClick"],Y=["onClick"],ae=q({__name:"SchedulesView",setup(Z){const l=n([]),f=n(!0),u=n("squad"),i=n(!1),s=n({type:"squad",cron:"",squad_id:"",agenda:"triage",prompt:""});V(async()=>{try{l.value=await N("/schedules")}finally{f.value=!1}});const g=()=>l.value.filter(a=>a.type===u.value);async function _(){const a={type:s.value.type,cron:s.value.cron};s.value.type==="squad"?(a.squad_id=s.value.squad_id,a.agenda=s.value.agenda):a.prompt=s.value.prompt;const e=await z("/schedules",a);l.value.push(e),i.value=!1}async function S(a){const e=!a.enabled;await A(`/schedules/${a.id}`,{enabled:e}),a.enabled=e?1:0}async function C(a){await U(`/schedules/${a}`),l.value=l.value.filter(e=>e.id!==a)}return(a,e)=>(d(),r("div",D,[t("div",I,[e[6]||(e[6]=t("h1",{class:"text-2xl font-bold"},"Schedules",-1)),t("button",{onClick:e[0]||(e[0]=o=>i.value=!i.value),class:"inline-flex items-center gap-1 px-3 py-1.5 text-sm rounded-md bg-primary text-primary-foreground hover:bg-primary/90 transition-colors"},[c(v(j),{class:"w-4 h-4"}),e[5]||(e[5]=$(" Add Schedule ",-1))])]),t("div",M,[(d(),r(y,null,k(["squad","io"],o=>t("button",{key:o,onClick:x=>u.value=o,class:b(["px-4 py-2 text-sm font-medium border-b-2 transition-colors",u.value===o?"border-primary text-foreground":"border-transparent text-muted-foreground hover:text-foreground"])},m(o==="squad"?"Squad Schedules":"IO Schedules"),11,E)),64))]),i.value?(d(),r("div",F,[t("div",L,[t("div",null,[e[8]||(e[8]=t("label",{class:"text-sm font-medium"},"Type",-1)),p(t("select",{"onUpdate:modelValue":e[1]||(e[1]=o=>s.value.type=o),class:"mt-1 w-full rounded-md border border-input bg-background px-3 py-2 text-sm"},[...e[7]||(e[7]=[t("option",{value:"squad"},"Squad",-1),t("option",{value:"io"},"IO",-1)])],512),[[w,s.value.type]])]),t("div",null,[e[9]||(e[9]=t("label",{class:"text-sm font-medium"},"Cron Expression",-1)),p(t("input",{"onUpdate:modelValue":e[2]||(e[2]=o=>s.value.cron=o),placeholder:"0 9 * * 1-5",class:"mt-1 w-full rounded-md border border-input bg-background px-3 py-2 text-sm"},null,512),[[h,s.value.cron]])])]),s.value.type==="squad"?(d(),r("div",O,[e[11]||(e[11]=t("label",{class:"text-sm font-medium"},"Agenda",-1)),p(t("select",{"onUpdate:modelValue":e[3]||(e[3]=o=>s.value.agenda=o),class:"mt-1 w-full rounded-md border border-input bg-background px-3 py-2 text-sm"},[...e[10]||(e[10]=[t("option",{value:"triage"},"Triage",-1),t("option",{value:"prioritize"},"Prioritize",-1),t("option",{value:"ideation"},"Ideation",-1)])],512),[[w,s.value.agenda]])])):(d(),r("div",G,[e[12]||(e[12]=t("label",{class:"text-sm font-medium"},"Prompt",-1)),p(t("textarea",{"onUpdate:modelValue":e[4]||(e[4]=o=>s.value.prompt=o),rows:"2",class:"mt-1 w-full rounded-md border border-input bg-background px-3 py-2 text-sm"},null,512),[[h,s.value.prompt]])])),t("button",{onClick:_,class:"px-4 py-2 text-sm rounded-md bg-primary text-primary-foreground hover:bg-primary/90"},"Save")])):P("",!0),f.value?(d(),r("div",H,"Loading...")):g().length===0?(d(),r("div",J,[c(v(T),{class:"w-12 h-12 mx-auto mb-3 opacity-50"}),t("p",null,"No "+m(u.value)+" schedules configured.",1)])):(d(),r("div",K,[(d(!0),r(y,null,k(g(),o=>(d(),r("div",{key:o.id,class:"flex items-center justify-between border border-border rounded-lg px-4 py-3"},[t("div",null,[t("div",Q,m(o.cron),1),t("div",R,m(o.type==="squad"?`Agenda: ${o.agenda}`:o.prompt.slice(0,60)),1)]),t("div",W,[t("button",{onClick:x=>S(o),class:b(["relative w-10 h-5 rounded-full transition-colors",o.enabled?"bg-primary":"bg-muted"])},[t("span",{class:b(["absolute top-0.5 w-4 h-4 rounded-full bg-white transition-transform",o.enabled?"translate-x-5":"translate-x-0.5"])},null,2)],10,X),t("button",{onClick:x=>C(o.id),class:"p-1.5 rounded hover:bg-destructive/10 text-muted-foreground hover:text-destructive"},[c(v(B),{class:"w-4 h-4"})],8,Y)])]))),128))]))]))}});export{ae as default};
@@ -0,0 +1 @@
1
+ import{h as w,o as E,k as d,d as s,c as t,t as g,F as x,l as U,z as a,x as n,w as M,v as p,b,r,j as T}from"./index-C7ISENGx.js";import{b as V,d as S}from"./api-D2ouPK2m.js";const z={class:"p-6"},A={class:"flex items-center justify-between mb-6"},B=["disabled"],N={key:0,class:"text-muted-foreground"},C={class:"flex gap-1 border-b border-border mb-6"},I=["onClick"],D={key:0,class:"space-y-4 max-w-lg"},K={class:"flex items-center gap-3"},j={key:1,class:"space-y-4 max-w-lg"},L={class:"flex items-center gap-3"},F={key:2,class:"space-y-4 max-w-lg"},G={key:3,class:"space-y-4 max-w-lg"},O={class:"flex items-center gap-3"},P={class:"flex items-center gap-3"},H=w({__name:"SettingsView",setup(R){const f=r(!0),i=r(!1),m=r(!1),u=r("general"),y=[{id:"general",label:"General"},{id:"telegram",label:"Telegram"},{id:"auth",label:"Auth"},{id:"advanced",label:"Advanced"}],o=r({defaultModel:"",port:3170,telegramEnabled:!1,telegramBotToken:"",authorizedUserId:null,supabaseUrl:"",supabaseAnonKey:"",authorizedEmail:"",backgroundNotifyMode:"meaningful",backgroundNotifyTelegram:!0,selfEditEnabled:!1,watchdogEnabled:!0});async function k(){f.value=!0;try{const v=await V("/settings");o.value=v}finally{f.value=!1}}async function c(){i.value=!0,m.value=!1;try{await S("/settings",o.value),m.value=!0,setTimeout(()=>m.value=!1,2e3)}finally{i.value=!1}}return E(k),(v,e)=>(d(),s("div",z,[t("div",A,[e[12]||(e[12]=t("h1",{class:"text-2xl font-bold"},"Settings",-1)),t("button",{onClick:c,disabled:i.value,class:"px-4 py-2 rounded-md bg-primary text-primary-foreground text-sm hover:bg-primary/90 disabled:opacity-50"},g(i.value?"Saving...":m.value?"Saved ✓":"Save"),9,B)]),f.value?(d(),s("div",N,"Loading...")):(d(),s(x,{key:1},[t("div",C,[(d(),s(x,null,U(y,l=>t("button",{key:l.id,onClick:q=>u.value=l.id,class:T(["px-4 py-2 text-sm font-medium border-b-2 transition-colors",u.value===l.id?"border-primary text-foreground":"border-transparent text-muted-foreground hover:text-foreground"])},g(l.label),11,I)),64))]),u.value==="general"?(d(),s("div",D,[t("div",null,[e[13]||(e[13]=t("label",{class:"text-sm font-medium"},"Default Model",-1)),a(t("input",{"onUpdate:modelValue":e[0]||(e[0]=l=>o.value.defaultModel=l),class:"mt-1 w-full rounded-md border border-input bg-background px-3 py-2 text-sm"},null,512),[[n,o.value.defaultModel]])]),t("div",null,[e[14]||(e[14]=t("label",{class:"text-sm font-medium"},"Port",-1)),a(t("input",{"onUpdate:modelValue":e[1]||(e[1]=l=>o.value.port=l),type:"number",class:"mt-1 w-full rounded-md border border-input bg-background px-3 py-2 text-sm"},null,512),[[n,o.value.port,void 0,{number:!0}]]),e[15]||(e[15]=t("p",{class:"text-xs text-muted-foreground mt-1"},"Requires restart to take effect",-1))]),t("div",null,[e[17]||(e[17]=t("label",{class:"text-sm font-medium"},"Background Notify Mode",-1)),a(t("select",{"onUpdate:modelValue":e[2]||(e[2]=l=>o.value.backgroundNotifyMode=l),class:"mt-1 w-full rounded-md border border-input bg-background px-3 py-2 text-sm"},[...e[16]||(e[16]=[t("option",{value:"all"},"All",-1),t("option",{value:"meaningful"},"Meaningful",-1),t("option",{value:"off"},"Off",-1)])],512),[[M,o.value.backgroundNotifyMode]])]),t("div",K,[a(t("input",{"onUpdate:modelValue":e[3]||(e[3]=l=>o.value.backgroundNotifyTelegram=l),type:"checkbox",id:"notifyTelegram",class:"rounded"},null,512),[[p,o.value.backgroundNotifyTelegram]]),e[18]||(e[18]=t("label",{for:"notifyTelegram",class:"text-sm font-medium"},"Send notifications via Telegram",-1))])])):b("",!0),u.value==="telegram"?(d(),s("div",j,[t("div",null,[e[19]||(e[19]=t("label",{class:"text-sm font-medium"},"Bot Token",-1)),a(t("input",{"onUpdate:modelValue":e[4]||(e[4]=l=>o.value.telegramBotToken=l),type:"password",placeholder:"Enter new token to update",class:"mt-1 w-full rounded-md border border-input bg-background px-3 py-2 text-sm"},null,512),[[n,o.value.telegramBotToken]])]),t("div",null,[e[20]||(e[20]=t("label",{class:"text-sm font-medium"},"Authorized User ID",-1)),a(t("input",{"onUpdate:modelValue":e[5]||(e[5]=l=>o.value.authorizedUserId=l),type:"number",placeholder:"123456789",class:"mt-1 w-full rounded-md border border-input bg-background px-3 py-2 text-sm"},null,512),[[n,o.value.authorizedUserId,void 0,{number:!0}]])]),t("div",L,[a(t("input",{"onUpdate:modelValue":e[6]||(e[6]=l=>o.value.telegramEnabled=l),type:"checkbox",id:"telegramEnabled",class:"rounded"},null,512),[[p,o.value.telegramEnabled]]),e[21]||(e[21]=t("label",{for:"telegramEnabled",class:"text-sm font-medium"},"Enable Telegram Bot",-1))])])):b("",!0),u.value==="auth"?(d(),s("div",F,[t("div",null,[e[22]||(e[22]=t("label",{class:"text-sm font-medium"},"Supabase URL",-1)),a(t("input",{"onUpdate:modelValue":e[7]||(e[7]=l=>o.value.supabaseUrl=l),placeholder:"https://your-project.supabase.co",class:"mt-1 w-full rounded-md border border-input bg-background px-3 py-2 text-sm"},null,512),[[n,o.value.supabaseUrl]])]),t("div",null,[e[23]||(e[23]=t("label",{class:"text-sm font-medium"},"Supabase Anon Key",-1)),a(t("input",{"onUpdate:modelValue":e[8]||(e[8]=l=>o.value.supabaseAnonKey=l),type:"password",placeholder:"Enter new key to update",class:"mt-1 w-full rounded-md border border-input bg-background px-3 py-2 text-sm"},null,512),[[n,o.value.supabaseAnonKey]])]),t("div",null,[e[24]||(e[24]=t("label",{class:"text-sm font-medium"},"Authorized Email",-1)),a(t("input",{"onUpdate:modelValue":e[9]||(e[9]=l=>o.value.authorizedEmail=l),type:"email",placeholder:"you@example.com",class:"mt-1 w-full rounded-md border border-input bg-background px-3 py-2 text-sm"},null,512),[[n,o.value.authorizedEmail]])])])):b("",!0),u.value==="advanced"?(d(),s("div",G,[t("div",O,[a(t("input",{"onUpdate:modelValue":e[10]||(e[10]=l=>o.value.selfEditEnabled=l),type:"checkbox",id:"selfEdit",class:"rounded"},null,512),[[p,o.value.selfEditEnabled]]),e[25]||(e[25]=t("div",null,[t("label",{for:"selfEdit",class:"text-sm font-medium"},"Self-Edit Mode"),t("p",{class:"text-xs text-muted-foreground"},"Allow IO to modify its own source code")],-1))]),t("div",P,[a(t("input",{"onUpdate:modelValue":e[11]||(e[11]=l=>o.value.watchdogEnabled=l),type:"checkbox",id:"watchdog",class:"rounded"},null,512),[[p,o.value.watchdogEnabled]]),e[26]||(e[26]=t("div",null,[t("label",{for:"watchdog",class:"text-sm font-medium"},"Watchdog"),t("p",{class:"text-xs text-muted-foreground"},"Monitor event loop and zombie instances")],-1))])])):b("",!0)],64))]))}});export{H as default};
@@ -1 +1 @@
1
- import{i as k,o as h,l,d as o,c as t,h as g,u as f,g as _,z as w,x as S,A as C,t as n,b as x,P as V,F,m as N,r}from"./index-BxzKpjKp.js";import{b as P,c as A,a as T}from"./api-Bzs62QeP.js";import{P as z}from"./plus-C7dsO8j7.js";import{T as B}from"./trash-2-C15lVsPO.js";const D={class:"p-6"},L={class:"flex items-center justify-between mb-6"},R={key:0,class:"mb-6 p-4 border border-border rounded-lg"},U={class:"flex gap-2"},$=["disabled"],j={key:0,class:"text-sm text-destructive mt-2"},G={key:1,class:"text-muted-foreground"},I={key:2,class:"text-center py-12 text-muted-foreground"},K={key:3,class:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4"},M={class:"flex items-start justify-between"},E={class:"font-semibold"},q=["onClick"],H={class:"text-sm text-muted-foreground mt-1"},J={class:"text-xs text-muted-foreground mt-2 font-mono"},ee=k({__name:"SkillsView",setup(O){const c=r([]),p=r(!0),d=r(!1),a=r(""),u=r(!1),i=r("");async function v(){p.value=!0;try{c.value=await P("/skills")}finally{p.value=!1}}async function y(){if(a.value.trim()){u.value=!0,i.value="";try{await A("/skills",{url:a.value.trim()}),a.value="",d.value=!1,await v()}catch(m){i.value=m.message||"Failed to install skill"}finally{u.value=!1}}}async function b(m){try{await T(`/skills/${m}`),await v()}catch(e){i.value=e.message||"Failed to remove skill"}}return h(v),(m,e)=>(l(),o("div",D,[t("div",L,[e[3]||(e[3]=t("h1",{class:"text-2xl font-bold"},"Skills",-1)),t("button",{onClick:e[0]||(e[0]=s=>d.value=!d.value),class:"inline-flex items-center gap-2 px-3 py-2 rounded-md bg-primary text-primary-foreground text-sm hover:bg-primary/90"},[g(f(z),{class:"w-4 h-4"}),e[2]||(e[2]=_(" Add Skill ",-1))])]),d.value?(l(),o("div",R,[e[4]||(e[4]=t("label",{class:"block text-sm font-medium mb-2"},"Git Repository URL",-1)),t("div",U,[w(t("input",{"onUpdate:modelValue":e[1]||(e[1]=s=>a.value=s),type:"text",placeholder:"https://github.com/user/skill-repo.git",class:"flex-1 px-3 py-2 rounded-md border border-input bg-background text-sm",onKeyup:C(y,["enter"])},null,544),[[S,a.value]]),t("button",{onClick:y,disabled:u.value||!a.value.trim(),class:"px-4 py-2 rounded-md bg-primary text-primary-foreground text-sm hover:bg-primary/90 disabled:opacity-50"},n(u.value?"Installing...":"Install"),9,$)]),i.value?(l(),o("p",j,n(i.value),1)):x("",!0)])):x("",!0),p.value?(l(),o("div",G,"Loading...")):c.value.length===0?(l(),o("div",I,[g(f(V),{class:"w-12 h-12 mx-auto mb-3 opacity-50"}),e[5]||(e[5]=t("p",null,"No skills installed.",-1)),e[6]||(e[6]=t("p",{class:"text-sm mt-1"},'Click "Add Skill" to install from a git repository.',-1))])):(l(),o("div",K,[(l(!0),o(F,null,N(c.value,s=>(l(),o("div",{key:s.slug,class:"border border-border rounded-lg p-4 group"},[t("div",M,[t("h3",E,n(s.name),1),t("button",{onClick:Q=>b(s.slug),class:"opacity-0 group-hover:opacity-100 p-1 rounded hover:bg-destructive/10 text-destructive transition-opacity",title:"Remove skill"},[g(f(B),{class:"w-4 h-4"})],8,q)]),t("p",H,n(s.description),1),t("div",J,n(s.slug),1)]))),128))]))]))}});export{ee as default};
1
+ import{h as k,o as h,k as l,d as o,c as t,g,u as f,f as _,z as w,x as S,A as C,t as n,b as x,P as V,F,l as N,r}from"./index-C7ISENGx.js";import{b as P,c as A,a as T}from"./api-D2ouPK2m.js";import{P as z}from"./plus-BWRiMNg8.js";import{T as B}from"./trash-2-1wwkdg0F.js";const D={class:"p-6"},L={class:"flex items-center justify-between mb-6"},R={key:0,class:"mb-6 p-4 border border-border rounded-lg"},U={class:"flex gap-2"},$=["disabled"],j={key:0,class:"text-sm text-destructive mt-2"},G={key:1,class:"text-muted-foreground"},I={key:2,class:"text-center py-12 text-muted-foreground"},K={key:3,class:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4"},M={class:"flex items-start justify-between"},E={class:"font-semibold"},q=["onClick"],H={class:"text-sm text-muted-foreground mt-1"},J={class:"text-xs text-muted-foreground mt-2 font-mono"},ee=k({__name:"SkillsView",setup(O){const m=r([]),p=r(!0),d=r(!1),a=r(""),u=r(!1),i=r("");async function v(){p.value=!0;try{m.value=await P("/skills")}finally{p.value=!1}}async function y(){if(a.value.trim()){u.value=!0,i.value="";try{await A("/skills",{url:a.value.trim()}),a.value="",d.value=!1,await v()}catch(c){i.value=c.message||"Failed to install skill"}finally{u.value=!1}}}async function b(c){try{await T(`/skills/${c}`),await v()}catch(e){i.value=e.message||"Failed to remove skill"}}return h(v),(c,e)=>(l(),o("div",D,[t("div",L,[e[3]||(e[3]=t("h1",{class:"text-2xl font-bold"},"Skills",-1)),t("button",{onClick:e[0]||(e[0]=s=>d.value=!d.value),class:"inline-flex items-center gap-2 px-3 py-2 rounded-md bg-primary text-primary-foreground text-sm hover:bg-primary/90"},[g(f(z),{class:"w-4 h-4"}),e[2]||(e[2]=_(" Add Skill ",-1))])]),d.value?(l(),o("div",R,[e[4]||(e[4]=t("label",{class:"block text-sm font-medium mb-2"},"Git Repository URL",-1)),t("div",U,[w(t("input",{"onUpdate:modelValue":e[1]||(e[1]=s=>a.value=s),type:"text",placeholder:"https://github.com/user/skill-repo.git",class:"flex-1 px-3 py-2 rounded-md border border-input bg-background text-sm",onKeyup:C(y,["enter"])},null,544),[[S,a.value]]),t("button",{onClick:y,disabled:u.value||!a.value.trim(),class:"px-4 py-2 rounded-md bg-primary text-primary-foreground text-sm hover:bg-primary/90 disabled:opacity-50"},n(u.value?"Installing...":"Install"),9,$)]),i.value?(l(),o("p",j,n(i.value),1)):x("",!0)])):x("",!0),p.value?(l(),o("div",G,"Loading...")):m.value.length===0?(l(),o("div",I,[g(f(V),{class:"w-12 h-12 mx-auto mb-3 opacity-50"}),e[5]||(e[5]=t("p",null,"No skills installed.",-1)),e[6]||(e[6]=t("p",{class:"text-sm mt-1"},'Click "Add Skill" to install from a git repository.',-1))])):(l(),o("div",K,[(l(!0),o(F,null,N(m.value,s=>(l(),o("div",{key:s.slug,class:"border border-border rounded-lg p-4 group"},[t("div",M,[t("h3",E,n(s.name),1),t("button",{onClick:Q=>b(s.slug),class:"opacity-0 group-hover:opacity-100 p-1 rounded hover:bg-destructive/10 text-destructive transition-opacity",title:"Remove skill"},[g(f(B),{class:"w-4 h-4"})],8,q)]),t("p",H,n(s.description),1),t("div",J,n(s.slug),1)]))),128))]))]))}});export{ee as default};
@@ -1,4 +1,4 @@
1
- import{e as m,i as w,o as C,l as o,d as l,h as d,y as q,F as c,c as e,t as a,m as b,b as r,s as A,r as i,p as L,k as g,u as p,g as x}from"./index-BxzKpjKp.js";import{b as M}from"./api-Bzs62QeP.js";/**
1
+ import{e as m,h as w,o as C,k as o,d as l,g as d,y as q,F as c,c as e,t as a,l as b,b as r,q as A,r as i,m as L,j as g,u as x,f as p}from"./index-C7ISENGx.js";import{b as M}from"./api-D2ouPK2m.js";/**
2
2
  * @license lucide-vue-next v0.474.0 - ISC
3
3
  *
4
4
  * This source code is licensed under the ISC license.
@@ -18,4 +18,4 @@ import{e as m,i as w,o as C,l as o,d as l,h as d,y as q,F as c,c as e,t as a,m a
18
18
  *
19
19
  * This source code is licensed under the ISC license.
20
20
  * See the LICENSE file in the root directory of this source tree.
21
- */const F=m("UserIcon",[["path",{d:"M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2",key:"975kel"}],["circle",{cx:"12",cy:"7",r:"4",key:"17ys0d"}]]),N={class:"p-6"},z={key:0,class:"text-muted-foreground"},B={class:"mb-6"},R={class:"text-2xl font-bold"},H={class:"text-muted-foreground"},T={class:"mb-8"},D={class:"border border-border rounded-lg overflow-hidden"},U={class:"w-full text-sm"},j={class:"px-4 py-2 font-medium"},E={class:"px-4 py-2 text-muted-foreground"},G={class:"px-4 py-2"},Q={class:"px-4 py-2 flex gap-1"},$={key:0,class:"text-xs bg-primary/10 text-primary px-1.5 py-0.5 rounded"},J={key:1,class:"text-xs bg-blue-500/10 text-blue-500 px-1.5 py-0.5 rounded"},K={key:2,class:"text-xs bg-purple-500/10 text-purple-500 px-1.5 py-0.5 rounded"},O={key:0,class:"mb-8"},P={class:"grid grid-cols-1 md:grid-cols-3 gap-3"},W={class:"font-mono text-xs text-muted-foreground"},X={class:"text-sm font-medium mt-1"},Y={class:"text-xs text-muted-foreground mt-1"},Z={key:0,class:"text-sm text-muted-foreground"},ee={key:1,class:"space-y-2"},te={class:"flex items-center justify-between"},se={class:"text-sm"},ne=w({__name:"SquadDetailView",setup(oe){const v=A(),u=i(null),f=i([]),y=i([]),_=i([]),h=i(!0);return C(async()=>{try{const n=await M(`/squads/${v.params.id}`);u.value=n.squad,f.value=n.agents,y.value=n.tasks,_.value=n.instances}finally{h.value=!1}}),(n,s)=>{const k=L("router-link");return o(),l("div",N,[d(k,{to:"/squads",class:"inline-flex items-center gap-1 text-sm text-muted-foreground hover:text-foreground mb-4"},{default:q(()=>[d(p(V),{class:"w-4 h-4"}),s[0]||(s[0]=x(" Back to Squads ",-1))]),_:1}),h.value?(o(),l("div",z,"Loading...")):u.value?(o(),l(c,{key:1},[e("div",B,[e("h1",R,a(u.value.name),1),e("p",H,a(u.value.universe),1)]),e("section",T,[s[5]||(s[5]=e("h2",{class:"text-lg font-semibold mb-3"},"Agent Roster",-1)),e("div",D,[e("table",U,[s[4]||(s[4]=e("thead",{class:"bg-muted"},[e("tr",null,[e("th",{class:"text-left px-4 py-2 font-medium"},"Character"),e("th",{class:"text-left px-4 py-2 font-medium"},"Role"),e("th",{class:"text-left px-4 py-2 font-medium"},"Status"),e("th",{class:"text-left px-4 py-2 font-medium"},"Flags")])],-1)),e("tbody",null,[(o(!0),l(c,null,b(f.value,t=>(o(),l("tr",{key:t.id,class:"border-t border-border"},[e("td",j,a(t.character_name),1),e("td",E,a(t.role_title),1),e("td",G,[e("span",{class:g(["inline-flex items-center gap-1 text-xs px-2 py-0.5 rounded-full",{"bg-green-500/10 text-green-500":t.status==="idle","bg-yellow-500/10 text-yellow-500":t.status==="working","bg-blue-500/10 text-blue-500":t.status==="reviewing"}])},a(t.status),3)]),e("td",Q,[t.is_lead?(o(),l("span",$,[d(p(F),{class:"w-3 h-3 inline"}),s[1]||(s[1]=x(" Lead ",-1))])):r("",!0),t.is_qa?(o(),l("span",J,[d(p(S),{class:"w-3 h-3 inline"}),s[2]||(s[2]=x(" QA ",-1))])):r("",!0),t.is_test?(o(),l("span",K,[d(p(I),{class:"w-3 h-3 inline"}),s[3]||(s[3]=x(" Test ",-1))])):r("",!0)])]))),128))])])])]),_.value.length>0?(o(),l("section",O,[s[6]||(s[6]=e("h2",{class:"text-lg font-semibold mb-3"},"Active Instances",-1)),e("div",P,[(o(!0),l(c,null,b(_.value,t=>(o(),l("div",{key:t.id,class:"border border-border rounded-lg p-3"},[e("div",W,a(t.id.slice(0,8)),1),e("div",X,a(t.branch),1),e("div",Y,"Last activity: "+a(t.last_activity),1)]))),128))])])):r("",!0),e("section",null,[s[7]||(s[7]=e("h2",{class:"text-lg font-semibold mb-3"},"Recent Tasks",-1)),y.value.length===0?(o(),l("div",Z,"No tasks yet.")):(o(),l("div",ee,[(o(!0),l(c,null,b(y.value,t=>(o(),l("div",{key:t.id,class:"border border-border rounded-lg p-3"},[e("div",te,[e("span",se,a(t.description),1),e("span",{class:g(["text-xs px-2 py-0.5 rounded-full",{"bg-yellow-500/10 text-yellow-500":t.status==="pending","bg-blue-500/10 text-blue-500":t.status==="in_progress","bg-green-500/10 text-green-500":t.status==="done","bg-red-500/10 text-red-500":t.status==="failed"}])},a(t.status),3)])]))),128))]))])],64)):r("",!0)])}}});export{ne as default};
21
+ */const F=m("UserIcon",[["path",{d:"M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2",key:"975kel"}],["circle",{cx:"12",cy:"7",r:"4",key:"17ys0d"}]]),N={class:"p-6"},z={key:0,class:"text-muted-foreground"},B={class:"mb-6"},R={class:"text-2xl font-bold"},H={class:"text-muted-foreground"},T={class:"mb-8"},j={class:"border border-border rounded-lg overflow-hidden"},D={class:"w-full text-sm"},U={class:"px-4 py-2 font-medium"},E={class:"px-4 py-2 text-muted-foreground"},G={class:"px-4 py-2"},Q={class:"px-4 py-2 flex gap-1"},$={key:0,class:"text-xs bg-primary/10 text-primary px-1.5 py-0.5 rounded"},J={key:1,class:"text-xs bg-blue-500/10 text-blue-500 px-1.5 py-0.5 rounded"},K={key:2,class:"text-xs bg-purple-500/10 text-purple-500 px-1.5 py-0.5 rounded"},O={key:0,class:"mb-8"},P={class:"grid grid-cols-1 md:grid-cols-3 gap-3"},W={class:"font-mono text-xs text-muted-foreground"},X={class:"text-sm font-medium mt-1"},Y={class:"text-xs text-muted-foreground mt-1"},Z={key:0,class:"text-sm text-muted-foreground"},ee={key:1,class:"space-y-2"},te={class:"flex items-center justify-between"},se={class:"text-sm"},ne=w({__name:"SquadDetailView",setup(oe){const v=A(),u=i(null),f=i([]),y=i([]),_=i([]),h=i(!0);return C(async()=>{try{const n=await M(`/squads/${v.params.id}`);u.value=n.squad,f.value=n.agents,y.value=n.tasks,_.value=n.instances}finally{h.value=!1}}),(n,s)=>{const k=L("router-link");return o(),l("div",N,[d(k,{to:"/squads",class:"inline-flex items-center gap-1 text-sm text-muted-foreground hover:text-foreground mb-4"},{default:q(()=>[d(x(V),{class:"w-4 h-4"}),s[0]||(s[0]=p(" Back to Squads ",-1))]),_:1}),h.value?(o(),l("div",z,"Loading...")):u.value?(o(),l(c,{key:1},[e("div",B,[e("h1",R,a(u.value.name),1),e("p",H,a(u.value.universe),1)]),e("section",T,[s[5]||(s[5]=e("h2",{class:"text-lg font-semibold mb-3"},"Agent Roster",-1)),e("div",j,[e("table",D,[s[4]||(s[4]=e("thead",{class:"bg-muted"},[e("tr",null,[e("th",{class:"text-left px-4 py-2 font-medium"},"Character"),e("th",{class:"text-left px-4 py-2 font-medium"},"Role"),e("th",{class:"text-left px-4 py-2 font-medium"},"Status"),e("th",{class:"text-left px-4 py-2 font-medium"},"Flags")])],-1)),e("tbody",null,[(o(!0),l(c,null,b(f.value,t=>(o(),l("tr",{key:t.id,class:"border-t border-border"},[e("td",U,a(t.character_name),1),e("td",E,a(t.role_title),1),e("td",G,[e("span",{class:g(["inline-flex items-center gap-1 text-xs px-2 py-0.5 rounded-full",{"bg-green-500/10 text-green-500":t.status==="idle","bg-yellow-500/10 text-yellow-500":t.status==="working","bg-blue-500/10 text-blue-500":t.status==="reviewing"}])},a(t.status),3)]),e("td",Q,[t.is_lead?(o(),l("span",$,[d(x(F),{class:"w-3 h-3 inline"}),s[1]||(s[1]=p(" Lead ",-1))])):r("",!0),t.is_qa?(o(),l("span",J,[d(x(S),{class:"w-3 h-3 inline"}),s[2]||(s[2]=p(" QA ",-1))])):r("",!0),t.is_test?(o(),l("span",K,[d(x(I),{class:"w-3 h-3 inline"}),s[3]||(s[3]=p(" Test ",-1))])):r("",!0)])]))),128))])])])]),_.value.length>0?(o(),l("section",O,[s[6]||(s[6]=e("h2",{class:"text-lg font-semibold mb-3"},"Active Instances",-1)),e("div",P,[(o(!0),l(c,null,b(_.value,t=>(o(),l("div",{key:t.id,class:"border border-border rounded-lg p-3"},[e("div",W,a(t.id.slice(0,8)),1),e("div",X,a(t.branch),1),e("div",Y,"Last activity: "+a(t.last_activity),1)]))),128))])])):r("",!0),e("section",null,[s[7]||(s[7]=e("h2",{class:"text-lg font-semibold mb-3"},"Recent Tasks",-1)),y.value.length===0?(o(),l("div",Z,"No tasks yet.")):(o(),l("div",ee,[(o(!0),l(c,null,b(y.value,t=>(o(),l("div",{key:t.id,class:"border border-border rounded-lg p-3"},[e("div",te,[e("span",se,a(t.description),1),e("span",{class:g(["text-xs px-2 py-0.5 rounded-full",{"bg-yellow-500/10 text-yellow-500":t.status==="pending","bg-blue-500/10 text-blue-500":t.status==="in_progress","bg-green-500/10 text-green-500":t.status==="done","bg-red-500/10 text-red-500":t.status==="failed"}])},a(t.status),3)])]))),128))]))])],64)):r("",!0)])}}});export{ne as default};
@@ -1,6 +1,6 @@
1
- import{b as _}from"./api-Bzs62QeP.js";import{e as y,i as x,o as f,l as o,d as r,c as e,h as u,u as m,U as h,F as v,m as k,r as d,a as b,y as q,p as w,t as n,g as B,b as N}from"./index-BxzKpjKp.js";/**
1
+ import{b as _}from"./api-D2ouPK2m.js";import{e as y,h as f,o as x,k as o,d as r,c as e,g as u,u as m,U as h,F as k,l as v,r as d,a as b,y as q,m as w,t as n,f as B,b as N}from"./index-C7ISENGx.js";/**
2
2
  * @license lucide-vue-next v0.474.0 - ISC
3
3
  *
4
4
  * This source code is licensed under the ISC license.
5
5
  * See the LICENSE file in the root directory of this source tree.
6
- */const V=y("GitBranchIcon",[["line",{x1:"6",x2:"6",y1:"3",y2:"15",key:"17qcm7"}],["circle",{cx:"18",cy:"6",r:"3",key:"1h7g24"}],["circle",{cx:"6",cy:"18",r:"3",key:"fqmcym"}],["path",{d:"M18 9a9 9 0 0 1-9 9",key:"n2h4wq"}]]),C={class:"p-6"},S={key:0,class:"text-muted-foreground"},F={key:1,class:"text-center py-12 text-muted-foreground"},G={key:2,class:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4"},I={class:"flex items-start justify-between"},L={class:"font-semibold"},j={class:"text-sm text-muted-foreground mt-0.5"},A={class:"text-xs bg-secondary text-secondary-foreground px-2 py-0.5 rounded-full"},M={class:"mt-3 flex items-center gap-4 text-xs text-muted-foreground"},U={key:0,class:"flex items-center gap-1"},T=x({__name:"SquadsView",setup(D){const c=d([]),l=d([]),i=d(!0);f(async()=>{try{const a=await _("/squads");c.value=a.squads,l.value=a.agents}finally{i.value=!1}});function p(a){return l.value.filter(t=>t.squad_id===a)}return(a,t)=>{const g=w("router-link");return o(),r("div",C,[t[2]||(t[2]=e("h1",{class:"text-2xl font-bold mb-6"},"Squads",-1)),i.value?(o(),r("div",S,"Loading...")):c.value.length===0?(o(),r("div",F,[u(m(h),{class:"w-12 h-12 mx-auto mb-3 opacity-50"}),t[0]||(t[0]=e("p",null,"No squads yet.",-1)),t[1]||(t[1]=e("p",{class:"text-sm mt-1"},"Ask IO to create a squad for your project.",-1))])):(o(),r("div",G,[(o(!0),r(v,null,k(c.value,s=>(o(),b(g,{key:s.id,to:`/squads/${s.id}`,class:"block rounded-lg border border-border bg-card p-4 hover:border-primary/50 transition-colors"},{default:q(()=>[e("div",I,[e("div",null,[e("h3",L,n(s.name),1),e("p",j,n(s.universe),1)]),e("span",A,n(p(s.id).length)+" agents ",1)]),e("div",M,[s.repo_url?(o(),r("span",U,[u(m(V),{class:"w-3 h-3"}),B(" "+n(s.repo_url),1)])):N("",!0)])]),_:2},1032,["to"]))),128))]))])}}});export{T as default};
6
+ */const V=y("GitBranchIcon",[["line",{x1:"6",x2:"6",y1:"3",y2:"15",key:"17qcm7"}],["circle",{cx:"18",cy:"6",r:"3",key:"1h7g24"}],["circle",{cx:"6",cy:"18",r:"3",key:"fqmcym"}],["path",{d:"M18 9a9 9 0 0 1-9 9",key:"n2h4wq"}]]),C={class:"p-6"},S={key:0,class:"text-muted-foreground"},F={key:1,class:"text-center py-12 text-muted-foreground"},G={key:2,class:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4"},I={class:"flex items-start justify-between"},L={class:"font-semibold"},j={class:"text-sm text-muted-foreground mt-0.5"},A={class:"text-xs bg-secondary text-secondary-foreground px-2 py-0.5 rounded-full"},M={class:"mt-3 flex items-center gap-4 text-xs text-muted-foreground"},U={key:0,class:"flex items-center gap-1"},T=f({__name:"SquadsView",setup(D){const c=d([]),l=d([]),i=d(!0);x(async()=>{try{const a=await _("/squads");c.value=a.squads,l.value=a.agents}finally{i.value=!1}});function p(a){return l.value.filter(t=>t.squad_id===a)}return(a,t)=>{const g=w("router-link");return o(),r("div",C,[t[2]||(t[2]=e("h1",{class:"text-2xl font-bold mb-6"},"Squads",-1)),i.value?(o(),r("div",S,"Loading...")):c.value.length===0?(o(),r("div",F,[u(m(h),{class:"w-12 h-12 mx-auto mb-3 opacity-50"}),t[0]||(t[0]=e("p",null,"No squads yet.",-1)),t[1]||(t[1]=e("p",{class:"text-sm mt-1"},"Ask IO to create a squad for your project.",-1))])):(o(),r("div",G,[(o(!0),r(k,null,v(c.value,s=>(o(),b(g,{key:s.id,to:`/squads/${s.id}`,class:"block rounded-lg border border-border bg-card p-4 hover:border-primary/50 transition-colors"},{default:q(()=>[e("div",I,[e("div",null,[e("h3",L,n(s.name),1),e("p",j,n(s.universe),1)]),e("span",A,n(p(s.id).length)+" agents ",1)]),e("div",M,[s.repo_url?(o(),r("span",U,[u(m(V),{class:"w-3 h-3"}),B(" "+n(s.repo_url),1)])):N("",!0)])]),_:2},1032,["to"]))),128))]))])}}});export{T as default};
@@ -0,0 +1,21 @@
1
+ import{e as b,h as N,o as j,k as l,d as n,c as t,g as d,u as c,z as y,x as h,f as B,A as D,b as C,F as x,l as I,B as T,t as k,r,j as q}from"./index-C7ISENGx.js";import{b as P,d as V,a as E}from"./api-D2ouPK2m.js";import{P as F}from"./plus-BWRiMNg8.js";import{T as U}from"./trash-2-1wwkdg0F.js";/**
2
+ * @license lucide-vue-next v0.474.0 - ISC
3
+ *
4
+ * This source code is licensed under the ISC license.
5
+ * See the LICENSE file in the root directory of this source tree.
6
+ */const H=b("PencilIcon",[["path",{d:"M21.174 6.812a1 1 0 0 0-3.986-3.987L3.842 16.174a2 2 0 0 0-.5.83l-1.321 4.352a.5.5 0 0 0 .623.622l4.353-1.32a2 2 0 0 0 .83-.497z",key:"1a8usu"}],["path",{d:"m15 5 4 4",key:"1mk7zo"}]]);/**
7
+ * @license lucide-vue-next v0.474.0 - ISC
8
+ *
9
+ * This source code is licensed under the ISC license.
10
+ * See the LICENSE file in the root directory of this source tree.
11
+ */const K=b("SaveIcon",[["path",{d:"M15.2 3a2 2 0 0 1 1.4.6l3.8 3.8a2 2 0 0 1 .6 1.4V19a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2z",key:"1c8476"}],["path",{d:"M17 21v-7a1 1 0 0 0-1-1H8a1 1 0 0 0-1 1v7",key:"1ydtos"}],["path",{d:"M7 3v4a1 1 0 0 0 1 1h7",key:"t51u73"}]]);/**
12
+ * @license lucide-vue-next v0.474.0 - ISC
13
+ *
14
+ * This source code is licensed under the ISC license.
15
+ * See the LICENSE file in the root directory of this source tree.
16
+ */const W=b("SearchIcon",[["circle",{cx:"11",cy:"11",r:"8",key:"4ej97u"}],["path",{d:"m21 21-4.3-4.3",key:"1qie3q"}]]);/**
17
+ * @license lucide-vue-next v0.474.0 - ISC
18
+ *
19
+ * This source code is licensed under the ISC license.
20
+ * See the LICENSE file in the root directory of this source tree.
21
+ */const X=b("XIcon",[["path",{d:"M18 6 6 18",key:"1bl5f8"}],["path",{d:"m6 6 12 12",key:"d8bk6v"}]]),A={class:"flex h-full"},G={class:"w-64 border-r border-border flex flex-col shrink-0"},O={class:"p-3 border-b border-border space-y-2"},Q={class:"relative"},J={key:0,class:"space-y-1.5"},R={class:"flex gap-1"},Y=["disabled"],Z={class:"flex-1 overflow-y-auto p-2"},ee={key:0,class:"text-xs text-muted-foreground p-2"},te=["onClick"],ae={class:"flex-1 flex flex-col"},oe={key:0,class:"flex items-center justify-center h-full text-muted-foreground"},se={class:"text-center"},le={class:"flex items-center justify-between px-4 py-2 border-b border-border"},ne={class:"text-sm font-medium font-mono"},re={class:"flex gap-1"},ue={class:"flex-1 overflow-y-auto p-4"},ie={key:1,class:"prose prose-sm dark:prose-invert max-w-none whitespace-pre-wrap"},ge=N({__name:"WikiView",setup(de){const u=r([]),o=r(null),v=r(""),i=r(!1),p=r(""),g=r(""),w=r(!0),m=r(!1),f=r("");j(async()=>{try{u.value=await P("/wiki/pages")}finally{w.value=!1}});async function $(s){o.value=s,i.value=!1;const e=await P(`/wiki/page/${s}`);v.value=e.content}function M(){p.value=v.value,i.value=!0}async function S(){o.value&&(await V(`/wiki/page/${o.value}`,{content:p.value}),v.value=p.value,i.value=!1)}async function z(){o.value&&confirm(`Delete "${o.value}"?`)&&(await E(`/wiki/page/${o.value}`),u.value=u.value.filter(s=>s!==o.value),o.value=null,v.value="")}async function _(){const s=f.value.trim();if(!s)return;const e=s.endsWith(".md")?s:`${s}.md`;await V(`/wiki/page/${e}`,{content:""}),u.value.includes(e)||(u.value.push(e),u.value.sort()),m.value=!1,f.value="",o.value=e,v.value="",p.value="",i.value=!0}const L=()=>{if(!g.value)return u.value;const s=g.value.toLowerCase();return u.value.filter(e=>e.toLowerCase().includes(s))};return(s,e)=>(l(),n("div",A,[t("div",G,[t("div",O,[t("div",Q,[d(c(W),{class:"absolute left-2.5 top-2.5 w-3.5 h-3.5 text-muted-foreground"}),y(t("input",{"onUpdate:modelValue":e[0]||(e[0]=a=>g.value=a),placeholder:"Search pages...",class:"w-full rounded-md border border-input bg-background pl-8 pr-3 py-2 text-xs focus:outline-none focus:ring-1 focus:ring-ring"},null,512),[[h,g.value]])]),t("button",{onClick:e[1]||(e[1]=a=>m.value=!m.value),class:"w-full flex items-center justify-center gap-1.5 px-2 py-1.5 text-xs rounded-md bg-primary text-primary-foreground hover:bg-primary/90"},[d(c(F),{class:"w-3.5 h-3.5"}),e[6]||(e[6]=B(" New Page ",-1))]),m.value?(l(),n("div",J,[y(t("input",{"onUpdate:modelValue":e[2]||(e[2]=a=>f.value=a),placeholder:"path/to/page.md",class:"w-full rounded-md border border-input bg-background px-2 py-1.5 text-xs focus:outline-none focus:ring-1 focus:ring-ring",onKeyup:D(_,["enter"])},null,544),[[h,f.value]]),t("div",R,[t("button",{onClick:_,disabled:!f.value.trim(),class:"flex-1 px-2 py-1 text-xs rounded bg-primary text-primary-foreground hover:bg-primary/90 disabled:opacity-50"}," Create ",8,Y),t("button",{onClick:e[3]||(e[3]=a=>{m.value=!1,f.value=""}),class:"px-2 py-1 text-xs rounded border border-border hover:bg-accent"}," Cancel ")])])):C("",!0)]),t("div",Z,[w.value?(l(),n("div",ee,"Loading...")):C("",!0),(l(!0),n(x,null,I(L(),a=>(l(),n("button",{key:a,onClick:ce=>$(a),class:q(["w-full text-left px-2 py-1.5 text-xs rounded hover:bg-accent truncate transition-colors",{"bg-accent font-medium":o.value===a}])}," 📄 "+k(a),11,te))),128))])]),t("div",ae,[o.value?(l(),n(x,{key:1},[t("div",le,[t("span",ne,k(o.value),1),t("div",re,[i.value?(l(),n(x,{key:1},[t("button",{onClick:S,class:"p-1.5 rounded hover:bg-accent text-green-500",title:"Save"},[d(c(K),{class:"w-4 h-4"})]),t("button",{onClick:e[4]||(e[4]=a=>i.value=!1),class:"p-1.5 rounded hover:bg-accent text-muted-foreground",title:"Cancel"},[d(c(X),{class:"w-4 h-4"})])],64)):(l(),n(x,{key:0},[t("button",{onClick:M,class:"p-1.5 rounded hover:bg-accent text-muted-foreground",title:"Edit"},[d(c(H),{class:"w-4 h-4"})]),t("button",{onClick:z,class:"p-1.5 rounded hover:bg-destructive/10 text-muted-foreground hover:text-destructive",title:"Delete"},[d(c(U),{class:"w-4 h-4"})])],64))])]),t("div",ue,[i.value?y((l(),n("textarea",{key:0,"onUpdate:modelValue":e[5]||(e[5]=a=>p.value=a),class:"w-full h-full min-h-[400px] font-mono text-sm bg-background border border-input rounded-md p-3 focus:outline-none focus:ring-1 focus:ring-ring resize-none"},null,512)),[[h,p.value]]):(l(),n("div",ie,k(v.value),1))])],64)):(l(),n("div",oe,[t("div",se,[d(c(T),{class:"w-12 h-12 mx-auto mb-3 opacity-50"}),e[7]||(e[7]=t("p",null,"Select a page to view",-1))])]))])]))}});export{ge as default};
@@ -1 +1 @@
1
- import{q as n}from"./index-BxzKpjKp.js";const o="/api";async function a(){const r=n(),t={"Content-Type":"application/json"};return r.token&&(t.Authorization=`Bearer ${r.token}`),t}async function i(r){const t=await fetch(`${o}${r}`,{headers:await a()});if(!t.ok)throw new Error(`API error: ${t.status}`);return t.json()}async function c(r,t){const e=await fetch(`${o}${r}`,{method:"POST",headers:await a(),body:t?JSON.stringify(t):void 0});if(!e.ok)throw new Error(`API error: ${e.status}`);return e.json()}async function h(r,t){const e=await fetch(`${o}${r}`,{method:"PUT",headers:await a(),body:t?JSON.stringify(t):void 0});if(!e.ok)throw new Error(`API error: ${e.status}`);return e.json()}async function u(r){const t=await fetch(`${o}${r}`,{method:"DELETE",headers:await a()});if(!t.ok)throw new Error(`API error: ${t.status}`);return t.json()}export{u as a,i as b,c,h as d};
1
+ import{p as n}from"./index-C7ISENGx.js";const o="/api";async function a(){const r=n(),t={"Content-Type":"application/json"};return r.token&&(t.Authorization=`Bearer ${r.token}`),t}async function i(r){const t=await fetch(`${o}${r}`,{headers:await a()});if(!t.ok)throw new Error(`API error: ${t.status}`);return t.json()}async function c(r,t){const e=await fetch(`${o}${r}`,{method:"POST",headers:await a(),body:t?JSON.stringify(t):void 0});if(!e.ok)throw new Error(`API error: ${e.status}`);return e.json()}async function h(r,t){const e=await fetch(`${o}${r}`,{method:"PUT",headers:await a(),body:t?JSON.stringify(t):void 0});if(!e.ok)throw new Error(`API error: ${e.status}`);return e.json()}async function u(r){const t=await fetch(`${o}${r}`,{method:"DELETE",headers:await a()});if(!t.ok)throw new Error(`API error: ${t.status}`);return t.json()}export{u as a,i as b,c,h as d};
@@ -1 +1 @@
1
- *,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before,:after{--tw-content: ""}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji";font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}:root{--background: 0 0% 100%;--foreground: 240 10% 3.9%;--card: 0 0% 100%;--card-foreground: 240 10% 3.9%;--primary: 240 5.9% 10%;--primary-foreground: 0 0% 98%;--secondary: 240 4.8% 95.9%;--secondary-foreground: 240 5.9% 10%;--muted: 240 4.8% 95.9%;--muted-foreground: 240 3.8% 46.1%;--accent: 240 4.8% 95.9%;--accent-foreground: 240 5.9% 10%;--destructive: 0 84.2% 60.2%;--destructive-foreground: 0 0% 98%;--border: 240 5.9% 90%;--input: 240 5.9% 90%;--ring: 240 5.9% 10%;--radius: .5rem}.dark{--background: 240 10% 3.9%;--foreground: 0 0% 98%;--card: 240 10% 3.9%;--card-foreground: 0 0% 98%;--primary: 0 0% 98%;--primary-foreground: 240 5.9% 10%;--secondary: 240 3.7% 15.9%;--secondary-foreground: 0 0% 98%;--muted: 240 3.7% 15.9%;--muted-foreground: 240 5% 64.9%;--accent: 240 3.7% 15.9%;--accent-foreground: 0 0% 98%;--destructive: 0 62.8% 30.6%;--destructive-foreground: 0 0% 98%;--border: 240 3.7% 15.9%;--input: 240 3.7% 15.9%;--ring: 240 4.9% 83.9%;--radius: .5rem}*{border-color:hsl(var(--border))}body{background-color:hsl(var(--background));color:hsl(var(--foreground));font-family:Inter,system-ui,-apple-system,sans-serif}.prose{color:var(--tw-prose-body);max-width:65ch}.prose :where(p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em;margin-bottom:1.25em}.prose :where([class~=lead]):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-lead);font-size:1.25em;line-height:1.6;margin-top:1.2em;margin-bottom:1.2em}.prose :where(a):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-links);text-decoration:underline;font-weight:500}.prose :where(strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-bold);font-weight:600}.prose :where(a strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(blockquote strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(thead th strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(ol):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:decimal;margin-top:1.25em;margin-bottom:1.25em;padding-inline-start:1.625em}.prose :where(ol[type=A]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-alpha}.prose :where(ol[type=a]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-alpha}.prose :where(ol[type=A s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-alpha}.prose :where(ol[type=a s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-alpha}.prose :where(ol[type=I]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-roman}.prose :where(ol[type=i]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-roman}.prose :where(ol[type=I s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-roman}.prose :where(ol[type=i s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-roman}.prose :where(ol[type="1"]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:decimal}.prose :where(ul):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:disc;margin-top:1.25em;margin-bottom:1.25em;padding-inline-start:1.625em}.prose :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *))::marker{font-weight:400;color:var(--tw-prose-counters)}.prose :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *))::marker{color:var(--tw-prose-bullets)}.prose :where(dt):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;margin-top:1.25em}.prose :where(hr):not(:where([class~=not-prose],[class~=not-prose] *)){border-color:var(--tw-prose-hr);border-top-width:1px;margin-top:3em;margin-bottom:3em}.prose :where(blockquote):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:500;font-style:italic;color:var(--tw-prose-quotes);border-inline-start-width:.25rem;border-inline-start-color:var(--tw-prose-quote-borders);quotes:"“""”""‘""’";margin-top:1.6em;margin-bottom:1.6em;padding-inline-start:1em}.prose :where(blockquote p:first-of-type):not(:where([class~=not-prose],[class~=not-prose] *)):before{content:open-quote}.prose :where(blockquote p:last-of-type):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:close-quote}.prose :where(h1):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:800;font-size:2.25em;margin-top:0;margin-bottom:.8888889em;line-height:1.1111111}.prose :where(h1 strong):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:900;color:inherit}.prose :where(h2):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:700;font-size:1.5em;margin-top:2em;margin-bottom:1em;line-height:1.3333333}.prose :where(h2 strong):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:800;color:inherit}.prose :where(h3):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;font-size:1.25em;margin-top:1.6em;margin-bottom:.6em;line-height:1.6}.prose :where(h3 strong):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:700;color:inherit}.prose :where(h4):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;margin-top:1.5em;margin-bottom:.5em;line-height:1.5}.prose :where(h4 strong):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:700;color:inherit}.prose :where(img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose :where(picture):not(:where([class~=not-prose],[class~=not-prose] *)){display:block;margin-top:2em;margin-bottom:2em}.prose :where(video):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose :where(kbd):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:500;font-family:inherit;color:var(--tw-prose-kbd);box-shadow:0 0 0 1px var(--tw-prose-kbd-shadows),0 3px 0 var(--tw-prose-kbd-shadows);font-size:.875em;border-radius:.3125rem;padding-top:.1875em;padding-inline-end:.375em;padding-bottom:.1875em;padding-inline-start:.375em}.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-code);font-weight:600;font-size:.875em}.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)):before{content:"`"}.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:"`"}.prose :where(a code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(h1 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(h2 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-size:.875em}.prose :where(h3 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-size:.9em}.prose :where(h4 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(blockquote code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(thead th code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(pre):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-pre-code);background-color:var(--tw-prose-pre-bg);overflow-x:auto;font-weight:400;font-size:.875em;line-height:1.7142857;margin-top:1.7142857em;margin-bottom:1.7142857em;border-radius:.375rem;padding-top:.8571429em;padding-inline-end:1.1428571em;padding-bottom:.8571429em;padding-inline-start:1.1428571em}.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)){background-color:transparent;border-width:0;border-radius:0;padding:0;font-weight:inherit;color:inherit;font-size:inherit;font-family:inherit;line-height:inherit}.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)):before{content:none}.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:none}.prose :where(table):not(:where([class~=not-prose],[class~=not-prose] *)){width:100%;table-layout:auto;margin-top:2em;margin-bottom:2em;font-size:.875em;line-height:1.7142857}.prose :where(thead):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:1px;border-bottom-color:var(--tw-prose-th-borders)}.prose :where(thead th):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;vertical-align:bottom;padding-inline-end:.5714286em;padding-bottom:.5714286em;padding-inline-start:.5714286em}.prose :where(tbody tr):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:1px;border-bottom-color:var(--tw-prose-td-borders)}.prose :where(tbody tr:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:0}.prose :where(tbody td):not(:where([class~=not-prose],[class~=not-prose] *)){vertical-align:baseline}.prose :where(tfoot):not(:where([class~=not-prose],[class~=not-prose] *)){border-top-width:1px;border-top-color:var(--tw-prose-th-borders)}.prose :where(tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){vertical-align:top}.prose :where(th,td):not(:where([class~=not-prose],[class~=not-prose] *)){text-align:start}.prose :where(figure>*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0;margin-bottom:0}.prose :where(figcaption):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-captions);font-size:.875em;line-height:1.4285714;margin-top:.8571429em}.prose{--tw-prose-body: #374151;--tw-prose-headings: #111827;--tw-prose-lead: #4b5563;--tw-prose-links: #111827;--tw-prose-bold: #111827;--tw-prose-counters: #6b7280;--tw-prose-bullets: #d1d5db;--tw-prose-hr: #e5e7eb;--tw-prose-quotes: #111827;--tw-prose-quote-borders: #e5e7eb;--tw-prose-captions: #6b7280;--tw-prose-kbd: #111827;--tw-prose-kbd-shadows: rgb(17 24 39 / 10%);--tw-prose-code: #111827;--tw-prose-pre-code: #e5e7eb;--tw-prose-pre-bg: #1f2937;--tw-prose-th-borders: #d1d5db;--tw-prose-td-borders: #e5e7eb;--tw-prose-invert-body: #d1d5db;--tw-prose-invert-headings: #fff;--tw-prose-invert-lead: #9ca3af;--tw-prose-invert-links: #fff;--tw-prose-invert-bold: #fff;--tw-prose-invert-counters: #9ca3af;--tw-prose-invert-bullets: #4b5563;--tw-prose-invert-hr: #374151;--tw-prose-invert-quotes: #f3f4f6;--tw-prose-invert-quote-borders: #374151;--tw-prose-invert-captions: #9ca3af;--tw-prose-invert-kbd: #fff;--tw-prose-invert-kbd-shadows: rgb(255 255 255 / 10%);--tw-prose-invert-code: #fff;--tw-prose-invert-pre-code: #d1d5db;--tw-prose-invert-pre-bg: rgb(0 0 0 / 50%);--tw-prose-invert-th-borders: #4b5563;--tw-prose-invert-td-borders: #374151;font-size:1rem;line-height:1.75}.prose :where(picture>img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0;margin-bottom:0}.prose :where(li):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.5em;margin-bottom:.5em}.prose :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:.375em}.prose :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:.375em}.prose :where(.prose>ul>li p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.75em;margin-bottom:.75em}.prose :where(.prose>ul>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em}.prose :where(.prose>ul>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em}.prose :where(.prose>ol>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em}.prose :where(.prose>ol>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em}.prose :where(ul ul,ul ol,ol ul,ol ol):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.75em;margin-bottom:.75em}.prose :where(dl):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em;margin-bottom:1.25em}.prose :where(dd):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.5em;padding-inline-start:1.625em}.prose :where(hr+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(h2+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(h3+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(h4+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(thead th:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.prose :where(thead th:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.prose :where(tbody td,tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){padding-top:.5714286em;padding-inline-end:.5714286em;padding-bottom:.5714286em;padding-inline-start:.5714286em}.prose :where(tbody td:first-child,tfoot td:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.prose :where(tbody td:last-child,tfoot td:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.prose :where(figure):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose :where(.prose>:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(.prose>:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:0}.prose-sm{font-size:.875rem;line-height:1.7142857}.prose-sm :where(p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.1428571em;margin-bottom:1.1428571em}.prose-sm :where([class~=lead]):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:1.2857143em;line-height:1.5555556;margin-top:.8888889em;margin-bottom:.8888889em}.prose-sm :where(blockquote):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.3333333em;margin-bottom:1.3333333em;padding-inline-start:1.1111111em}.prose-sm :where(h1):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:2.1428571em;margin-top:0;margin-bottom:.8em;line-height:1.2}.prose-sm :where(h2):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:1.4285714em;margin-top:1.6em;margin-bottom:.8em;line-height:1.4}.prose-sm :where(h3):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:1.2857143em;margin-top:1.5555556em;margin-bottom:.4444444em;line-height:1.5555556}.prose-sm :where(h4):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.4285714em;margin-bottom:.5714286em;line-height:1.4285714}.prose-sm :where(img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.7142857em;margin-bottom:1.7142857em}.prose-sm :where(picture):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.7142857em;margin-bottom:1.7142857em}.prose-sm :where(picture>img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0;margin-bottom:0}.prose-sm :where(video):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.7142857em;margin-bottom:1.7142857em}.prose-sm :where(kbd):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.8571429em;border-radius:.3125rem;padding-top:.1428571em;padding-inline-end:.3571429em;padding-bottom:.1428571em;padding-inline-start:.3571429em}.prose-sm :where(code):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.8571429em}.prose-sm :where(h2 code):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.9em}.prose-sm :where(h3 code):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.8888889em}.prose-sm :where(pre):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.8571429em;line-height:1.6666667;margin-top:1.6666667em;margin-bottom:1.6666667em;border-radius:.25rem;padding-top:.6666667em;padding-inline-end:1em;padding-bottom:.6666667em;padding-inline-start:1em}.prose-sm :where(ol):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.1428571em;margin-bottom:1.1428571em;padding-inline-start:1.5714286em}.prose-sm :where(ul):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.1428571em;margin-bottom:1.1428571em;padding-inline-start:1.5714286em}.prose-sm :where(li):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.2857143em;margin-bottom:.2857143em}.prose-sm :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:.4285714em}.prose-sm :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:.4285714em}.prose-sm :where(.prose-sm>ul>li p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.5714286em;margin-bottom:.5714286em}.prose-sm :where(.prose-sm>ul>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.1428571em}.prose-sm :where(.prose-sm>ul>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.1428571em}.prose-sm :where(.prose-sm>ol>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.1428571em}.prose-sm :where(.prose-sm>ol>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.1428571em}.prose-sm :where(ul ul,ul ol,ol ul,ol ol):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.5714286em;margin-bottom:.5714286em}.prose-sm :where(dl):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.1428571em;margin-bottom:1.1428571em}.prose-sm :where(dt):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.1428571em}.prose-sm :where(dd):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.2857143em;padding-inline-start:1.5714286em}.prose-sm :where(hr):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2.8571429em;margin-bottom:2.8571429em}.prose-sm :where(hr+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose-sm :where(h2+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose-sm :where(h3+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose-sm :where(h4+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose-sm :where(table):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.8571429em;line-height:1.5}.prose-sm :where(thead th):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:1em;padding-bottom:.6666667em;padding-inline-start:1em}.prose-sm :where(thead th:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.prose-sm :where(thead th:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.prose-sm :where(tbody td,tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){padding-top:.6666667em;padding-inline-end:1em;padding-bottom:.6666667em;padding-inline-start:1em}.prose-sm :where(tbody td:first-child,tfoot td:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.prose-sm :where(tbody td:last-child,tfoot td:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.prose-sm :where(figure):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.7142857em;margin-bottom:1.7142857em}.prose-sm :where(figure>*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0;margin-bottom:0}.prose-sm :where(figcaption):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.8571429em;line-height:1.3333333;margin-top:.6666667em}.prose-sm :where(.prose-sm>:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose-sm :where(.prose-sm>:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:0}.absolute{position:absolute}.relative{position:relative}.left-0\.5{left:.125rem}.left-2\.5{left:.625rem}.top-0\.5{top:.125rem}.top-2\.5{top:.625rem}.mx-auto{margin-left:auto;margin-right:auto}.mb-1{margin-bottom:.25rem}.mb-2{margin-bottom:.5rem}.mb-3{margin-bottom:.75rem}.mb-4{margin-bottom:1rem}.mb-6{margin-bottom:1.5rem}.mb-8{margin-bottom:2rem}.ml-1{margin-left:.25rem}.ml-2{margin-left:.5rem}.mt-0\.5{margin-top:.125rem}.mt-1{margin-top:.25rem}.mt-2{margin-top:.5rem}.mt-3{margin-top:.75rem}.block{display:block}.inline-block{display:inline-block}.inline{display:inline}.flex{display:flex}.inline-flex{display:inline-flex}.table{display:table}.grid{display:grid}.h-12{height:3rem}.h-3{height:.75rem}.h-3\.5{height:.875rem}.h-4{height:1rem}.h-5{height:1.25rem}.h-full{height:100%}.h-screen{height:100vh}.max-h-\[120px\]{max-height:120px}.min-h-\[400px\]{min-height:400px}.min-h-\[40px\]{min-height:40px}.min-h-screen{min-height:100vh}.w-10{width:2.5rem}.w-12{width:3rem}.w-2{width:.5rem}.w-3{width:.75rem}.w-3\.5{width:.875rem}.w-4{width:1rem}.w-64{width:16rem}.w-full{width:100%}.min-w-0{min-width:0px}.max-w-\[75\%\]{max-width:75%}.max-w-lg{max-width:32rem}.max-w-none{max-width:none}.max-w-sm{max-width:24rem}.flex-1{flex:1 1 0%}.shrink-0{flex-shrink:0}.translate-x-0\.5{--tw-translate-x: .125rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-5{--tw-translate-x: 1.25rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes pulse{50%{opacity:.5}}.animate-pulse{animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite}.cursor-pointer{cursor:pointer}.resize-none{resize: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}.items-start{align-items:flex-start}.items-end{align-items:flex-end}.items-center{align-items:center}.justify-start{justify-content:flex-start}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-1{gap:.25rem}.gap-2{gap:.5rem}.gap-3{gap:.75rem}.gap-4{gap:1rem}.space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.25rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.25rem * var(--tw-space-y-reverse))}.space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.5rem * var(--tw-space-y-reverse))}.space-y-3>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.75rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.75rem * var(--tw-space-y-reverse))}.space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem * var(--tw-space-y-reverse))}.space-y-6>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.5rem * var(--tw-space-y-reverse))}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-y-auto{overflow-y:auto}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.break-words{overflow-wrap:break-word}.rounded{border-radius:.25rem}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:var(--radius)}.rounded-md{border-radius:calc(var(--radius) - 2px)}.border{border-width:1px}.border-b{border-bottom-width:1px}.border-b-2{border-bottom-width:2px}.border-l-2{border-left-width:2px}.border-r{border-right-width:1px}.border-t{border-top-width:1px}.border-border{border-color:hsl(var(--border))}.border-input{border-color:hsl(var(--input))}.border-primary{border-color:hsl(var(--primary))}.border-transparent{border-color:transparent}.border-l-primary{border-left-color:hsl(var(--primary))}.bg-accent{background-color:hsl(var(--accent))}.bg-background{background-color:hsl(var(--background))}.bg-blue-500\/10{background-color:#3b82f61a}.bg-card{background-color:hsl(var(--card))}.bg-current{background-color:currentColor}.bg-green-500\/10{background-color:#22c55e1a}.bg-muted{background-color:hsl(var(--muted))}.bg-primary{background-color:hsl(var(--primary))}.bg-primary\/10{background-color:hsl(var(--primary) / .1)}.bg-purple-500\/10{background-color:#a855f71a}.bg-red-500\/10{background-color:#ef44441a}.bg-secondary{background-color:hsl(var(--secondary))}.bg-white{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1))}.bg-yellow-500\/10{background-color:#eab3081a}.p-1{padding:.25rem}.p-1\.5{padding:.375rem}.p-2{padding:.5rem}.p-3{padding:.75rem}.p-4{padding:1rem}.p-6{padding:1.5rem}.px-1\.5{padding-left:.375rem;padding-right:.375rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.py-0\.5{padding-top:.125rem;padding-bottom:.125rem}.py-1\.5{padding-top:.375rem;padding-bottom:.375rem}.py-12{padding-top:3rem;padding-bottom:3rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.pb-3{padding-bottom:.75rem}.pl-8{padding-left:2rem}.pr-3{padding-right:.75rem}.pt-3{padding-top:.75rem}.text-left{text-align:left}.text-center{text-align:center}.font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.text-2xl{font-size:1.5rem;line-height:2rem}.text-4xl{font-size:2.25rem;line-height:2.5rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-xs{font-size:.75rem;line-height:1rem}.font-bold{font-weight:700}.font-medium{font-weight:500}.font-semibold{font-weight:600}.tracking-tight{letter-spacing:-.025em}.text-accent-foreground{color:hsl(var(--accent-foreground))}.text-blue-500{--tw-text-opacity: 1;color:rgb(59 130 246 / var(--tw-text-opacity, 1))}.text-destructive{color:hsl(var(--destructive))}.text-foreground{color:hsl(var(--foreground))}.text-green-500{--tw-text-opacity: 1;color:rgb(34 197 94 / var(--tw-text-opacity, 1))}.text-muted-foreground{color:hsl(var(--muted-foreground))}.text-primary{color:hsl(var(--primary))}.text-primary-foreground{color:hsl(var(--primary-foreground))}.text-purple-500{--tw-text-opacity: 1;color:rgb(168 85 247 / var(--tw-text-opacity, 1))}.text-red-500{--tw-text-opacity: 1;color:rgb(239 68 68 / var(--tw-text-opacity, 1))}.text-secondary-foreground{color:hsl(var(--secondary-foreground))}.text-yellow-500{--tw-text-opacity: 1;color:rgb(234 179 8 / var(--tw-text-opacity, 1))}.opacity-0{opacity:0}.opacity-50{opacity:.5}.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)}.transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-opacity{transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-transform{transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.dark\:prose-invert:is(.dark *){--tw-prose-body: var(--tw-prose-invert-body);--tw-prose-headings: var(--tw-prose-invert-headings);--tw-prose-lead: var(--tw-prose-invert-lead);--tw-prose-links: var(--tw-prose-invert-links);--tw-prose-bold: var(--tw-prose-invert-bold);--tw-prose-counters: var(--tw-prose-invert-counters);--tw-prose-bullets: var(--tw-prose-invert-bullets);--tw-prose-hr: var(--tw-prose-invert-hr);--tw-prose-quotes: var(--tw-prose-invert-quotes);--tw-prose-quote-borders: var(--tw-prose-invert-quote-borders);--tw-prose-captions: var(--tw-prose-invert-captions);--tw-prose-kbd: var(--tw-prose-invert-kbd);--tw-prose-kbd-shadows: var(--tw-prose-invert-kbd-shadows);--tw-prose-code: var(--tw-prose-invert-code);--tw-prose-pre-code: var(--tw-prose-invert-pre-code);--tw-prose-pre-bg: var(--tw-prose-invert-pre-bg);--tw-prose-th-borders: var(--tw-prose-invert-th-borders);--tw-prose-td-borders: var(--tw-prose-invert-td-borders)}.hover\:border-primary\/50:hover{border-color:hsl(var(--primary) / .5)}.hover\:bg-accent:hover{background-color:hsl(var(--accent))}.hover\:bg-accent\/50:hover{background-color:hsl(var(--accent) / .5)}.hover\:bg-destructive\/10:hover{background-color:hsl(var(--destructive) / .1)}.hover\:bg-muted\/50:hover{background-color:hsl(var(--muted) / .5)}.hover\:bg-primary\/90:hover{background-color:hsl(var(--primary) / .9)}.hover\:text-accent-foreground:hover{color:hsl(var(--accent-foreground))}.hover\:text-destructive:hover{color:hsl(var(--destructive))}.hover\:text-foreground:hover{color:hsl(var(--foreground))}.focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus\:ring-1:focus{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus\:ring-2:focus{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus\:ring-ring:focus{--tw-ring-color: hsl(var(--ring))}.disabled\:opacity-50:disabled{opacity:.5}.group:hover .group-hover\:opacity-100{opacity:1}@media(min-width:768px){.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}}@media(min-width:1024px){.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}}
1
+ *,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before,:after{--tw-content: ""}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji";font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}:root{--background: 0 0% 100%;--foreground: 240 10% 3.9%;--card: 0 0% 100%;--card-foreground: 240 10% 3.9%;--primary: 240 5.9% 10%;--primary-foreground: 0 0% 98%;--secondary: 240 4.8% 95.9%;--secondary-foreground: 240 5.9% 10%;--muted: 240 4.8% 95.9%;--muted-foreground: 240 3.8% 46.1%;--accent: 240 4.8% 95.9%;--accent-foreground: 240 5.9% 10%;--destructive: 0 84.2% 60.2%;--destructive-foreground: 0 0% 98%;--border: 240 5.9% 90%;--input: 240 5.9% 90%;--ring: 240 5.9% 10%;--radius: .5rem}.dark{--background: 240 10% 3.9%;--foreground: 0 0% 98%;--card: 240 10% 3.9%;--card-foreground: 0 0% 98%;--primary: 0 0% 98%;--primary-foreground: 240 5.9% 10%;--secondary: 240 3.7% 15.9%;--secondary-foreground: 0 0% 98%;--muted: 240 3.7% 15.9%;--muted-foreground: 240 5% 64.9%;--accent: 240 3.7% 15.9%;--accent-foreground: 0 0% 98%;--destructive: 0 62.8% 30.6%;--destructive-foreground: 0 0% 98%;--border: 240 3.7% 15.9%;--input: 240 3.7% 15.9%;--ring: 240 4.9% 83.9%;--radius: .5rem}*{border-color:hsl(var(--border))}body{background-color:hsl(var(--background));color:hsl(var(--foreground));font-family:Inter,system-ui,-apple-system,sans-serif}.prose{color:var(--tw-prose-body);max-width:65ch}.prose :where(p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em;margin-bottom:1.25em}.prose :where([class~=lead]):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-lead);font-size:1.25em;line-height:1.6;margin-top:1.2em;margin-bottom:1.2em}.prose :where(a):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-links);text-decoration:underline;font-weight:500}.prose :where(strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-bold);font-weight:600}.prose :where(a strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(blockquote strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(thead th strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(ol):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:decimal;margin-top:1.25em;margin-bottom:1.25em;padding-inline-start:1.625em}.prose :where(ol[type=A]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-alpha}.prose :where(ol[type=a]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-alpha}.prose :where(ol[type=A s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-alpha}.prose :where(ol[type=a s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-alpha}.prose :where(ol[type=I]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-roman}.prose :where(ol[type=i]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-roman}.prose :where(ol[type=I s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-roman}.prose :where(ol[type=i s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-roman}.prose :where(ol[type="1"]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:decimal}.prose :where(ul):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:disc;margin-top:1.25em;margin-bottom:1.25em;padding-inline-start:1.625em}.prose :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *))::marker{font-weight:400;color:var(--tw-prose-counters)}.prose :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *))::marker{color:var(--tw-prose-bullets)}.prose :where(dt):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;margin-top:1.25em}.prose :where(hr):not(:where([class~=not-prose],[class~=not-prose] *)){border-color:var(--tw-prose-hr);border-top-width:1px;margin-top:3em;margin-bottom:3em}.prose :where(blockquote):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:500;font-style:italic;color:var(--tw-prose-quotes);border-inline-start-width:.25rem;border-inline-start-color:var(--tw-prose-quote-borders);quotes:"“""”""‘""’";margin-top:1.6em;margin-bottom:1.6em;padding-inline-start:1em}.prose :where(blockquote p:first-of-type):not(:where([class~=not-prose],[class~=not-prose] *)):before{content:open-quote}.prose :where(blockquote p:last-of-type):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:close-quote}.prose :where(h1):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:800;font-size:2.25em;margin-top:0;margin-bottom:.8888889em;line-height:1.1111111}.prose :where(h1 strong):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:900;color:inherit}.prose :where(h2):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:700;font-size:1.5em;margin-top:2em;margin-bottom:1em;line-height:1.3333333}.prose :where(h2 strong):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:800;color:inherit}.prose :where(h3):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;font-size:1.25em;margin-top:1.6em;margin-bottom:.6em;line-height:1.6}.prose :where(h3 strong):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:700;color:inherit}.prose :where(h4):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;margin-top:1.5em;margin-bottom:.5em;line-height:1.5}.prose :where(h4 strong):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:700;color:inherit}.prose :where(img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose :where(picture):not(:where([class~=not-prose],[class~=not-prose] *)){display:block;margin-top:2em;margin-bottom:2em}.prose :where(video):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose :where(kbd):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:500;font-family:inherit;color:var(--tw-prose-kbd);box-shadow:0 0 0 1px var(--tw-prose-kbd-shadows),0 3px 0 var(--tw-prose-kbd-shadows);font-size:.875em;border-radius:.3125rem;padding-top:.1875em;padding-inline-end:.375em;padding-bottom:.1875em;padding-inline-start:.375em}.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-code);font-weight:600;font-size:.875em}.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)):before{content:"`"}.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:"`"}.prose :where(a code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(h1 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(h2 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-size:.875em}.prose :where(h3 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-size:.9em}.prose :where(h4 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(blockquote code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(thead th code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(pre):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-pre-code);background-color:var(--tw-prose-pre-bg);overflow-x:auto;font-weight:400;font-size:.875em;line-height:1.7142857;margin-top:1.7142857em;margin-bottom:1.7142857em;border-radius:.375rem;padding-top:.8571429em;padding-inline-end:1.1428571em;padding-bottom:.8571429em;padding-inline-start:1.1428571em}.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)){background-color:transparent;border-width:0;border-radius:0;padding:0;font-weight:inherit;color:inherit;font-size:inherit;font-family:inherit;line-height:inherit}.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)):before{content:none}.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:none}.prose :where(table):not(:where([class~=not-prose],[class~=not-prose] *)){width:100%;table-layout:auto;margin-top:2em;margin-bottom:2em;font-size:.875em;line-height:1.7142857}.prose :where(thead):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:1px;border-bottom-color:var(--tw-prose-th-borders)}.prose :where(thead th):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;vertical-align:bottom;padding-inline-end:.5714286em;padding-bottom:.5714286em;padding-inline-start:.5714286em}.prose :where(tbody tr):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:1px;border-bottom-color:var(--tw-prose-td-borders)}.prose :where(tbody tr:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:0}.prose :where(tbody td):not(:where([class~=not-prose],[class~=not-prose] *)){vertical-align:baseline}.prose :where(tfoot):not(:where([class~=not-prose],[class~=not-prose] *)){border-top-width:1px;border-top-color:var(--tw-prose-th-borders)}.prose :where(tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){vertical-align:top}.prose :where(th,td):not(:where([class~=not-prose],[class~=not-prose] *)){text-align:start}.prose :where(figure>*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0;margin-bottom:0}.prose :where(figcaption):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-captions);font-size:.875em;line-height:1.4285714;margin-top:.8571429em}.prose{--tw-prose-body: #374151;--tw-prose-headings: #111827;--tw-prose-lead: #4b5563;--tw-prose-links: #111827;--tw-prose-bold: #111827;--tw-prose-counters: #6b7280;--tw-prose-bullets: #d1d5db;--tw-prose-hr: #e5e7eb;--tw-prose-quotes: #111827;--tw-prose-quote-borders: #e5e7eb;--tw-prose-captions: #6b7280;--tw-prose-kbd: #111827;--tw-prose-kbd-shadows: rgb(17 24 39 / 10%);--tw-prose-code: #111827;--tw-prose-pre-code: #e5e7eb;--tw-prose-pre-bg: #1f2937;--tw-prose-th-borders: #d1d5db;--tw-prose-td-borders: #e5e7eb;--tw-prose-invert-body: #d1d5db;--tw-prose-invert-headings: #fff;--tw-prose-invert-lead: #9ca3af;--tw-prose-invert-links: #fff;--tw-prose-invert-bold: #fff;--tw-prose-invert-counters: #9ca3af;--tw-prose-invert-bullets: #4b5563;--tw-prose-invert-hr: #374151;--tw-prose-invert-quotes: #f3f4f6;--tw-prose-invert-quote-borders: #374151;--tw-prose-invert-captions: #9ca3af;--tw-prose-invert-kbd: #fff;--tw-prose-invert-kbd-shadows: rgb(255 255 255 / 10%);--tw-prose-invert-code: #fff;--tw-prose-invert-pre-code: #d1d5db;--tw-prose-invert-pre-bg: rgb(0 0 0 / 50%);--tw-prose-invert-th-borders: #4b5563;--tw-prose-invert-td-borders: #374151;font-size:1rem;line-height:1.75}.prose :where(picture>img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0;margin-bottom:0}.prose :where(li):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.5em;margin-bottom:.5em}.prose :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:.375em}.prose :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:.375em}.prose :where(.prose>ul>li p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.75em;margin-bottom:.75em}.prose :where(.prose>ul>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em}.prose :where(.prose>ul>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em}.prose :where(.prose>ol>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em}.prose :where(.prose>ol>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em}.prose :where(ul ul,ul ol,ol ul,ol ol):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.75em;margin-bottom:.75em}.prose :where(dl):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em;margin-bottom:1.25em}.prose :where(dd):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.5em;padding-inline-start:1.625em}.prose :where(hr+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(h2+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(h3+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(h4+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(thead th:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.prose :where(thead th:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.prose :where(tbody td,tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){padding-top:.5714286em;padding-inline-end:.5714286em;padding-bottom:.5714286em;padding-inline-start:.5714286em}.prose :where(tbody td:first-child,tfoot td:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.prose :where(tbody td:last-child,tfoot td:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.prose :where(figure):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose :where(.prose>:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(.prose>:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:0}.prose-sm{font-size:.875rem;line-height:1.7142857}.prose-sm :where(p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.1428571em;margin-bottom:1.1428571em}.prose-sm :where([class~=lead]):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:1.2857143em;line-height:1.5555556;margin-top:.8888889em;margin-bottom:.8888889em}.prose-sm :where(blockquote):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.3333333em;margin-bottom:1.3333333em;padding-inline-start:1.1111111em}.prose-sm :where(h1):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:2.1428571em;margin-top:0;margin-bottom:.8em;line-height:1.2}.prose-sm :where(h2):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:1.4285714em;margin-top:1.6em;margin-bottom:.8em;line-height:1.4}.prose-sm :where(h3):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:1.2857143em;margin-top:1.5555556em;margin-bottom:.4444444em;line-height:1.5555556}.prose-sm :where(h4):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.4285714em;margin-bottom:.5714286em;line-height:1.4285714}.prose-sm :where(img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.7142857em;margin-bottom:1.7142857em}.prose-sm :where(picture):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.7142857em;margin-bottom:1.7142857em}.prose-sm :where(picture>img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0;margin-bottom:0}.prose-sm :where(video):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.7142857em;margin-bottom:1.7142857em}.prose-sm :where(kbd):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.8571429em;border-radius:.3125rem;padding-top:.1428571em;padding-inline-end:.3571429em;padding-bottom:.1428571em;padding-inline-start:.3571429em}.prose-sm :where(code):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.8571429em}.prose-sm :where(h2 code):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.9em}.prose-sm :where(h3 code):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.8888889em}.prose-sm :where(pre):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.8571429em;line-height:1.6666667;margin-top:1.6666667em;margin-bottom:1.6666667em;border-radius:.25rem;padding-top:.6666667em;padding-inline-end:1em;padding-bottom:.6666667em;padding-inline-start:1em}.prose-sm :where(ol):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.1428571em;margin-bottom:1.1428571em;padding-inline-start:1.5714286em}.prose-sm :where(ul):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.1428571em;margin-bottom:1.1428571em;padding-inline-start:1.5714286em}.prose-sm :where(li):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.2857143em;margin-bottom:.2857143em}.prose-sm :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:.4285714em}.prose-sm :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:.4285714em}.prose-sm :where(.prose-sm>ul>li p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.5714286em;margin-bottom:.5714286em}.prose-sm :where(.prose-sm>ul>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.1428571em}.prose-sm :where(.prose-sm>ul>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.1428571em}.prose-sm :where(.prose-sm>ol>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.1428571em}.prose-sm :where(.prose-sm>ol>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.1428571em}.prose-sm :where(ul ul,ul ol,ol ul,ol ol):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.5714286em;margin-bottom:.5714286em}.prose-sm :where(dl):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.1428571em;margin-bottom:1.1428571em}.prose-sm :where(dt):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.1428571em}.prose-sm :where(dd):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.2857143em;padding-inline-start:1.5714286em}.prose-sm :where(hr):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2.8571429em;margin-bottom:2.8571429em}.prose-sm :where(hr+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose-sm :where(h2+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose-sm :where(h3+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose-sm :where(h4+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose-sm :where(table):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.8571429em;line-height:1.5}.prose-sm :where(thead th):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:1em;padding-bottom:.6666667em;padding-inline-start:1em}.prose-sm :where(thead th:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.prose-sm :where(thead th:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.prose-sm :where(tbody td,tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){padding-top:.6666667em;padding-inline-end:1em;padding-bottom:.6666667em;padding-inline-start:1em}.prose-sm :where(tbody td:first-child,tfoot td:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.prose-sm :where(tbody td:last-child,tfoot td:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.prose-sm :where(figure):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.7142857em;margin-bottom:1.7142857em}.prose-sm :where(figure>*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0;margin-bottom:0}.prose-sm :where(figcaption):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.8571429em;line-height:1.3333333;margin-top:.6666667em}.prose-sm :where(.prose-sm>:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose-sm :where(.prose-sm>:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:0}.absolute{position:absolute}.relative{position:relative}.left-2\.5{left:.625rem}.top-0\.5{top:.125rem}.top-2\.5{top:.625rem}.mx-auto{margin-left:auto;margin-right:auto}.mb-2{margin-bottom:.5rem}.mb-3{margin-bottom:.75rem}.mb-4{margin-bottom:1rem}.mb-6{margin-bottom:1.5rem}.mb-8{margin-bottom:2rem}.ml-1{margin-left:.25rem}.ml-2{margin-left:.5rem}.mt-0\.5{margin-top:.125rem}.mt-1{margin-top:.25rem}.mt-2{margin-top:.5rem}.mt-3{margin-top:.75rem}.block{display:block}.inline-block{display:inline-block}.inline{display:inline}.flex{display:flex}.inline-flex{display:inline-flex}.table{display:table}.grid{display:grid}.h-12{height:3rem}.h-3{height:.75rem}.h-3\.5{height:.875rem}.h-4{height:1rem}.h-5{height:1.25rem}.h-full{height:100%}.h-screen{height:100vh}.max-h-\[120px\]{max-height:120px}.min-h-\[400px\]{min-height:400px}.min-h-\[40px\]{min-height:40px}.min-h-screen{min-height:100vh}.w-10{width:2.5rem}.w-12{width:3rem}.w-2{width:.5rem}.w-3{width:.75rem}.w-3\.5{width:.875rem}.w-4{width:1rem}.w-64{width:16rem}.w-full{width:100%}.min-w-0{min-width:0px}.max-w-\[75\%\]{max-width:75%}.max-w-lg{max-width:32rem}.max-w-none{max-width:none}.max-w-sm{max-width:24rem}.flex-1{flex:1 1 0%}.shrink-0{flex-shrink:0}.translate-x-0\.5{--tw-translate-x: .125rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-5{--tw-translate-x: 1.25rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes pulse{50%{opacity:.5}}.animate-pulse{animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite}.cursor-pointer{cursor:pointer}.resize-none{resize: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}.items-start{align-items:flex-start}.items-end{align-items:flex-end}.items-center{align-items:center}.justify-start{justify-content:flex-start}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-1{gap:.25rem}.gap-1\.5{gap:.375rem}.gap-2{gap:.5rem}.gap-3{gap:.75rem}.gap-4{gap:1rem}.space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.25rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.25rem * var(--tw-space-y-reverse))}.space-y-1\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.375rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.375rem * var(--tw-space-y-reverse))}.space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.5rem * var(--tw-space-y-reverse))}.space-y-3>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.75rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.75rem * var(--tw-space-y-reverse))}.space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem * var(--tw-space-y-reverse))}.space-y-6>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.5rem * var(--tw-space-y-reverse))}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-y-auto{overflow-y:auto}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.break-words{overflow-wrap:break-word}.rounded{border-radius:.25rem}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:var(--radius)}.rounded-md{border-radius:calc(var(--radius) - 2px)}.border{border-width:1px}.border-b{border-bottom-width:1px}.border-b-2{border-bottom-width:2px}.border-l-2{border-left-width:2px}.border-r{border-right-width:1px}.border-t{border-top-width:1px}.border-border{border-color:hsl(var(--border))}.border-input{border-color:hsl(var(--input))}.border-primary{border-color:hsl(var(--primary))}.border-transparent{border-color:transparent}.border-l-primary{border-left-color:hsl(var(--primary))}.bg-accent{background-color:hsl(var(--accent))}.bg-background{background-color:hsl(var(--background))}.bg-blue-500\/10{background-color:#3b82f61a}.bg-card{background-color:hsl(var(--card))}.bg-current{background-color:currentColor}.bg-green-500\/10{background-color:#22c55e1a}.bg-muted{background-color:hsl(var(--muted))}.bg-primary{background-color:hsl(var(--primary))}.bg-primary\/10{background-color:hsl(var(--primary) / .1)}.bg-purple-500\/10{background-color:#a855f71a}.bg-red-500\/10{background-color:#ef44441a}.bg-secondary{background-color:hsl(var(--secondary))}.bg-white{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1))}.bg-yellow-500\/10{background-color:#eab3081a}.p-1{padding:.25rem}.p-1\.5{padding:.375rem}.p-2{padding:.5rem}.p-3{padding:.75rem}.p-4{padding:1rem}.p-6{padding:1.5rem}.px-1\.5{padding-left:.375rem;padding-right:.375rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.py-0\.5{padding-top:.125rem;padding-bottom:.125rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-1\.5{padding-top:.375rem;padding-bottom:.375rem}.py-12{padding-top:3rem;padding-bottom:3rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.pb-3{padding-bottom:.75rem}.pl-8{padding-left:2rem}.pr-3{padding-right:.75rem}.pt-3{padding-top:.75rem}.text-left{text-align:left}.text-center{text-align:center}.font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.text-2xl{font-size:1.5rem;line-height:2rem}.text-4xl{font-size:2.25rem;line-height:2.5rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-xs{font-size:.75rem;line-height:1rem}.font-bold{font-weight:700}.font-medium{font-weight:500}.font-semibold{font-weight:600}.tracking-tight{letter-spacing:-.025em}.text-accent-foreground{color:hsl(var(--accent-foreground))}.text-blue-500{--tw-text-opacity: 1;color:rgb(59 130 246 / var(--tw-text-opacity, 1))}.text-destructive{color:hsl(var(--destructive))}.text-foreground{color:hsl(var(--foreground))}.text-green-500{--tw-text-opacity: 1;color:rgb(34 197 94 / var(--tw-text-opacity, 1))}.text-muted-foreground{color:hsl(var(--muted-foreground))}.text-primary{color:hsl(var(--primary))}.text-primary-foreground{color:hsl(var(--primary-foreground))}.text-purple-500{--tw-text-opacity: 1;color:rgb(168 85 247 / var(--tw-text-opacity, 1))}.text-red-500{--tw-text-opacity: 1;color:rgb(239 68 68 / var(--tw-text-opacity, 1))}.text-secondary-foreground{color:hsl(var(--secondary-foreground))}.text-yellow-500{--tw-text-opacity: 1;color:rgb(234 179 8 / var(--tw-text-opacity, 1))}.opacity-0{opacity:0}.opacity-50{opacity:.5}.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)}.transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-opacity{transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-transform{transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.dark\:prose-invert:is(.dark *){--tw-prose-body: var(--tw-prose-invert-body);--tw-prose-headings: var(--tw-prose-invert-headings);--tw-prose-lead: var(--tw-prose-invert-lead);--tw-prose-links: var(--tw-prose-invert-links);--tw-prose-bold: var(--tw-prose-invert-bold);--tw-prose-counters: var(--tw-prose-invert-counters);--tw-prose-bullets: var(--tw-prose-invert-bullets);--tw-prose-hr: var(--tw-prose-invert-hr);--tw-prose-quotes: var(--tw-prose-invert-quotes);--tw-prose-quote-borders: var(--tw-prose-invert-quote-borders);--tw-prose-captions: var(--tw-prose-invert-captions);--tw-prose-kbd: var(--tw-prose-invert-kbd);--tw-prose-kbd-shadows: var(--tw-prose-invert-kbd-shadows);--tw-prose-code: var(--tw-prose-invert-code);--tw-prose-pre-code: var(--tw-prose-invert-pre-code);--tw-prose-pre-bg: var(--tw-prose-invert-pre-bg);--tw-prose-th-borders: var(--tw-prose-invert-th-borders);--tw-prose-td-borders: var(--tw-prose-invert-td-borders)}.hover\:border-primary\/50:hover{border-color:hsl(var(--primary) / .5)}.hover\:bg-accent:hover{background-color:hsl(var(--accent))}.hover\:bg-accent\/50:hover{background-color:hsl(var(--accent) / .5)}.hover\:bg-destructive\/10:hover{background-color:hsl(var(--destructive) / .1)}.hover\:bg-muted\/50:hover{background-color:hsl(var(--muted) / .5)}.hover\:bg-primary\/90:hover{background-color:hsl(var(--primary) / .9)}.hover\:text-accent-foreground:hover{color:hsl(var(--accent-foreground))}.hover\:text-destructive:hover{color:hsl(var(--destructive))}.hover\:text-foreground:hover{color:hsl(var(--foreground))}.focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus\:ring-1:focus{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus\:ring-2:focus{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus\:ring-ring:focus{--tw-ring-color: hsl(var(--ring))}.disabled\:opacity-50:disabled{opacity:.5}.group:hover .group-hover\:opacity-100{opacity:1}@media(min-width:768px){.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}}@media(min-width:1024px){.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}}