heyio 1.12.0 → 1.12.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/api/server.js +4 -3
- package/dist/copilot/skills.js +50 -13
- package/package.json +1 -1
- package/web-dist/assets/{AuditLogView-C92eQY3G.js → AuditLogView-C5QtUQBq.js} +1 -1
- package/web-dist/assets/{ChatView-Dxk6eQl1.js → ChatView-DLu9BMg8.js} +1 -1
- package/web-dist/assets/{FeedView-CUuImaZo.js → FeedView-6OV-l6Gl.js} +1 -1
- package/web-dist/assets/{HistoryView-DXsZEMVH.js → HistoryView-DizPqv0y.js} +1 -1
- package/web-dist/assets/{LoginView-CNnHmWRL.js → LoginView-CG1O9fmR.js} +1 -1
- package/web-dist/assets/{McpView-zHTJmc0Y.js → McpView-TJN-fZvI.js} +1 -1
- package/web-dist/assets/SchedulesView-BDFpImX6.js +6 -0
- package/web-dist/assets/{SettingsView-ClF03x9D.js → SettingsView-D-K1iC1c.js} +1 -1
- package/web-dist/assets/{SkillsView-DoSq-jyC.js → SkillsView-DnNmO192.js} +1 -1
- package/web-dist/assets/{SquadDetailView-BOAi0Hgv.js → SquadDetailView-BBvrgHzn.js} +1 -1
- package/web-dist/assets/{SquadHealthView-CicAIjwi.js → SquadHealthView-DF2zF9D3.js} +1 -1
- package/web-dist/assets/{SquadsView-C6ikS5RW.js → SquadsView-CPVzko7k.js} +1 -1
- package/web-dist/assets/{ToggleSwitch.vue_vue_type_script_setup_true_lang-qVvadgnS.js → ToggleSwitch.vue_vue_type_script_setup_true_lang-Bk_t9_Rn.js} +1 -1
- package/web-dist/assets/{UsageView-Ar_4xZn1.js → UsageView-OcyM5k14.js} +1 -1
- package/web-dist/assets/{WikiView-CYSbQVLd.js → WikiView-KhFqBZI0.js} +1 -1
- package/web-dist/assets/{api-dXl4z_H9.js → api-BiDVwQrs.js} +1 -1
- package/web-dist/assets/{arrow-left-CiMmp6_a.js → arrow-left-DFbf2tii.js} +1 -1
- package/web-dist/assets/{git-branch-CJwD1kDF.js → git-branch-BLstr_Gr.js} +1 -1
- package/web-dist/assets/{index-HnxAWR4u.css → index-B-o45ao1.css} +1 -1
- package/web-dist/assets/{index-CVHn07Yu.js → index-DCJUYZtV.js} +3 -3
- package/web-dist/assets/{pencil-Bfw57NpW.js → pencil-D4Zz_t0y.js} +1 -1
- package/web-dist/assets/{plus-CZyw8CN2.js → plus-gmwiZVfr.js} +1 -1
- package/web-dist/assets/{save-CQd10OTY.js → save-BvtAs5WB.js} +1 -1
- package/web-dist/assets/{search-DOBptCtE.js → search-BabUvoGD.js} +1 -1
- package/web-dist/assets/{trash-2-BtBTSEpB.js → trash-2-C21cNLJl.js} +1 -1
- package/web-dist/assets/{triangle-alert-CaKwD4uJ.js → triangle-alert-BrzY_E1n.js} +1 -1
- package/web-dist/assets/{x-nFOviyPn.js → x-xgLSmc9e.js} +1 -1
- package/web-dist/index.html +2 -2
- package/web-dist/assets/SchedulesView-DAGAkVsM.js +0 -6
package/dist/api/server.js
CHANGED
|
@@ -326,7 +326,8 @@ export async function startApiServer(config) {
|
|
|
326
326
|
return;
|
|
327
327
|
}
|
|
328
328
|
try {
|
|
329
|
-
const
|
|
329
|
+
const sourceRepo = req.query.sourceRepo;
|
|
330
|
+
const content = await fetchRemoteSkillPreview(source, slug, sourceRepo);
|
|
330
331
|
res.json({ content });
|
|
331
332
|
}
|
|
332
333
|
catch (err) {
|
|
@@ -335,13 +336,13 @@ export async function startApiServer(config) {
|
|
|
335
336
|
});
|
|
336
337
|
app.post("/api/skills", async (req, res) => {
|
|
337
338
|
try {
|
|
338
|
-
const { url, source, slug, content } = req.body;
|
|
339
|
+
const { url, source, slug, content, sourceRepo } = req.body;
|
|
339
340
|
if (source && slug) {
|
|
340
341
|
if (source !== "awesome-copilot" && source !== "skillssh") {
|
|
341
342
|
res.status(400).json({ error: "source must be 'awesome-copilot' or 'skillssh'" });
|
|
342
343
|
return;
|
|
343
344
|
}
|
|
344
|
-
await installFromSource(source, slug);
|
|
345
|
+
await installFromSource(source, slug, sourceRepo);
|
|
345
346
|
}
|
|
346
347
|
else if (url && typeof url === "string") {
|
|
347
348
|
// Git-clone method
|
package/dist/copilot/skills.js
CHANGED
|
@@ -142,20 +142,24 @@ async function fetchAwesomeCopilotSkills() {
|
|
|
142
142
|
const text = await res.text();
|
|
143
143
|
return parseAwesomeCopilotTable(text);
|
|
144
144
|
}
|
|
145
|
-
async function fetchSkillsShSkills() {
|
|
145
|
+
async function fetchSkillsShSkills(query) {
|
|
146
146
|
try {
|
|
147
|
-
const
|
|
147
|
+
const searchQuery = query?.trim() || "";
|
|
148
|
+
const url = `https://skills.sh/api/search?q=${encodeURIComponent(searchQuery)}`;
|
|
149
|
+
const res = await fetch(url, {
|
|
148
150
|
headers: { Accept: "application/json" },
|
|
149
151
|
signal: AbortSignal.timeout(10_000),
|
|
150
152
|
});
|
|
151
153
|
if (!res.ok)
|
|
152
154
|
return [];
|
|
153
155
|
const data = (await res.json());
|
|
154
|
-
return data.map((item) => ({
|
|
155
|
-
slug: item.
|
|
156
|
-
name: item.name
|
|
157
|
-
description:
|
|
156
|
+
return data.skills.map((item) => ({
|
|
157
|
+
slug: item.skillId || item.name || "",
|
|
158
|
+
name: item.name || item.skillId || "",
|
|
159
|
+
description: "",
|
|
158
160
|
source: "skillssh",
|
|
161
|
+
sourceRepo: item.source,
|
|
162
|
+
installs: item.installs,
|
|
159
163
|
}));
|
|
160
164
|
}
|
|
161
165
|
catch {
|
|
@@ -163,16 +167,18 @@ async function fetchSkillsShSkills() {
|
|
|
163
167
|
}
|
|
164
168
|
}
|
|
165
169
|
export async function discoverSkills(source, query) {
|
|
170
|
+
// For skills.sh, use the search API directly with the query
|
|
171
|
+
if (source === "skillssh") {
|
|
172
|
+
return fetchSkillsShSkills(query);
|
|
173
|
+
}
|
|
174
|
+
// For awesome-copilot, use caching and client-side filtering
|
|
166
175
|
const cached = DISCOVERY_CACHE.get(source);
|
|
167
176
|
let skills;
|
|
168
177
|
if (cached && Date.now() - cached.fetchedAt < CACHE_TTL_MS) {
|
|
169
178
|
skills = cached.skills;
|
|
170
179
|
}
|
|
171
180
|
else {
|
|
172
|
-
skills =
|
|
173
|
-
source === "awesome-copilot"
|
|
174
|
-
? await fetchAwesomeCopilotSkills()
|
|
175
|
-
: await fetchSkillsShSkills();
|
|
181
|
+
skills = await fetchAwesomeCopilotSkills();
|
|
176
182
|
DISCOVERY_CACHE.set(source, { skills, fetchedAt: Date.now() });
|
|
177
183
|
}
|
|
178
184
|
if (query) {
|
|
@@ -181,28 +187,59 @@ export async function discoverSkills(source, query) {
|
|
|
181
187
|
}
|
|
182
188
|
return skills;
|
|
183
189
|
}
|
|
190
|
+
/**
|
|
191
|
+
* Find the path to SKILL.md in a GitHub repo by searching the repo tree.
|
|
192
|
+
* Returns the full path (e.g., "skills/features/clerk-testing/SKILL.md").
|
|
193
|
+
*/
|
|
194
|
+
async function findSkillPathInRepo(repoPath, skillId) {
|
|
195
|
+
const treeUrl = `https://api.github.com/repos/${repoPath}/git/trees/main?recursive=1`;
|
|
196
|
+
const res = await fetch(treeUrl, { signal: AbortSignal.timeout(10_000) });
|
|
197
|
+
if (!res.ok) {
|
|
198
|
+
throw new Error(`Failed to fetch repo tree for "${repoPath}": HTTP ${res.status}`);
|
|
199
|
+
}
|
|
200
|
+
const data = (await res.json());
|
|
201
|
+
// Look for a SKILL.md file in a folder named after the skillId
|
|
202
|
+
const targetSuffix = `${skillId}/SKILL.md`;
|
|
203
|
+
const match = data.tree.find((item) => item.type === "blob" && item.path.endsWith(targetSuffix));
|
|
204
|
+
if (!match) {
|
|
205
|
+
throw new Error(`Could not find SKILL.md for "${skillId}" in repo "${repoPath}"`);
|
|
206
|
+
}
|
|
207
|
+
return match.path;
|
|
208
|
+
}
|
|
184
209
|
function remoteSkillMdUrl(source, safeSlug) {
|
|
185
210
|
const encodedSlug = encodeURIComponent(safeSlug);
|
|
186
211
|
if (source === "awesome-copilot") {
|
|
187
212
|
return `https://raw.githubusercontent.com/github/awesome-copilot/main/skills/${encodedSlug}/SKILL.md`;
|
|
188
213
|
}
|
|
214
|
+
// Legacy fallback for skillssh without sourceRepo (shouldn't be used anymore)
|
|
189
215
|
return `https://skills.sh/skills/${encodedSlug}/SKILL.md`;
|
|
190
216
|
}
|
|
191
|
-
export async function fetchRemoteSkillPreview(source, slug) {
|
|
217
|
+
export async function fetchRemoteSkillPreview(source, slug, sourceRepo) {
|
|
192
218
|
const safeSlug = validateSlug(slug);
|
|
219
|
+
// For skillssh with a sourceRepo, use GitHub directly
|
|
220
|
+
if (source === "skillssh" && sourceRepo) {
|
|
221
|
+
const skillPath = await findSkillPathInRepo(sourceRepo, safeSlug);
|
|
222
|
+
const rawUrl = `https://raw.githubusercontent.com/${sourceRepo}/main/${skillPath}`;
|
|
223
|
+
const res = await fetch(rawUrl, { signal: AbortSignal.timeout(10_000) });
|
|
224
|
+
if (!res.ok) {
|
|
225
|
+
throw new Error(`Failed to fetch preview for "${safeSlug}": HTTP ${res.status}`);
|
|
226
|
+
}
|
|
227
|
+
return res.text();
|
|
228
|
+
}
|
|
229
|
+
// Fallback to legacy URL approach
|
|
193
230
|
const url = remoteSkillMdUrl(source, safeSlug);
|
|
194
231
|
const res = await fetch(url, { signal: AbortSignal.timeout(10_000) });
|
|
195
232
|
if (!res.ok)
|
|
196
233
|
throw new Error(`Failed to fetch preview for "${safeSlug}": HTTP ${res.status}`);
|
|
197
234
|
return res.text();
|
|
198
235
|
}
|
|
199
|
-
export async function installFromSource(source, slug) {
|
|
236
|
+
export async function installFromSource(source, slug, sourceRepo) {
|
|
200
237
|
const safeSlug = validateSlug(slug);
|
|
201
238
|
const dest = join(PATHS.skills, safeSlug);
|
|
202
239
|
if (existsSync(dest)) {
|
|
203
240
|
throw new Error(`Skill "${safeSlug}" is already installed.`);
|
|
204
241
|
}
|
|
205
|
-
const content = await fetchRemoteSkillPreview(source, safeSlug);
|
|
242
|
+
const content = await fetchRemoteSkillPreview(source, safeSlug, sourceRepo);
|
|
206
243
|
mkdirSync(dest, { recursive: true });
|
|
207
244
|
writeFileSync(join(dest, "SKILL.md"), content);
|
|
208
245
|
}
|
package/package.json
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{r as W,u as X,E as Z,J as a,q as d,n as o,t as A,T as N,b as V,s as S,R as l,a4 as f,$ as T,d as h,L as w,a0 as L,p as b,K as n,m as _,z as ee}from"./index-
|
|
1
|
+
import{r as W,u as X,E as Z,J as a,q as d,n as o,t as A,T as N,b as V,s as S,R as l,a4 as f,$ as T,d as h,L as w,a0 as L,p as b,K as n,m as _,z as ee}from"./index-DCJUYZtV.js";import{b as F}from"./api-BiDVwQrs.js";/**
|
|
2
2
|
* @license lucide-vue-next v0.474.0 - ISC
|
|
3
3
|
*
|
|
4
4
|
* This source code is licensed under the ISC license.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{u as R,W as U,a2 as T,E as X,J as a,q as r,n as o,T as s,t as A,p,d as C,L as S,R as d,w as x,M as W,f as Y,P as J,a4 as Q,a0 as G,o as m,S as Z,j as ee,z as k,K as v,m as I,v as te,a1 as se,_ as ae,x as D,Q as ne,I as j,F as H,l as oe,y as M}from"./index-
|
|
1
|
+
import{u as R,W as U,a2 as T,E as X,J as a,q as r,n as o,T as s,t as A,p,d as C,L as S,R as d,w as x,M as W,f as Y,P as J,a4 as Q,a0 as G,o as m,S as Z,j as ee,z as k,K as v,m as I,v as te,a1 as se,_ as ae,x as D,Q as ne,I as j,F as H,l as oe,y as M}from"./index-DCJUYZtV.js";import{X as re}from"./x-xgLSmc9e.js";const le={class:"flex flex-col h-full"},ie={key:0,class:"flex items-center justify-center h-full"},ce={class:"text-center text-muted-foreground"},ue={key:0,class:"mb-2 space-y-2"},de=["src","alt"],fe={class:"flex items-center gap-2 text-xs"},pe={class:"truncate"},me={class:"opacity-70"},ve={key:2,class:"text-muted-foreground"},he={key:3,class:"inline-block w-2 h-4 bg-current animate-pulse ml-1"},ge={key:0,class:"mb-2 space-y-2"},xe={class:"flex flex-wrap gap-2"},ye={class:"max-w-[170px] truncate"},_e={class:"opacity-70"},be=["onClick"],ke={class:"text-xs text-muted-foreground"},we={key:1,class:"text-xs text-destructive mb-2"},Te={class:"flex gap-2 items-end"},Ae=["disabled"],Ce=["disabled"],ze=R({__name:"ChatView",setup(Se){const c=U(),h=v(""),f=v(""),y=v(),_=v(),i=v([]),g=v(),b=v(!1),N=I(()=>i.value.reduce((e,n)=>e+n.size,0)),z=I(()=>!c.isStreaming&&(h.value.trim().length>0||i.value.length>0));async function B(e){if(!e||e.length===0)return;f.value="";const n=[];try{for(const u of Array.from(e))n.push(await te(u))}catch(u){f.value=(u==null?void 0:u.message)??"Unable to read one or more files.";return}const t=[...i.value,...n],l=se(t);if(!l.ok){f.value=l.error;return}i.value=t,_.value&&(_.value.value="")}function P(e){i.value.splice(e,1),f.value=""}function V(){var e;(e=_.value)==null||e.click()}function F(e){const n=e.target;B((n==null?void 0:n.files)??null)}async function E(){if(!z.value)return;const e=h.value.trim(),n=[...i.value],t=e||"Please review the attached file(s).";h.value="",i.value=[],f.value="",await c.sendMessage(t,n)}function w(){y.value&&(y.value.scrollTop=y.value.scrollHeight)}function $(){g.value&&(g.value.style.height="auto",g.value.style.height=`${Math.min(g.value.scrollHeight,120)}px`)}function K(e){e.key==="Enter"&&!e.shiftKey&&(e.preventDefault(),E())}function L(e){e.preventDefault(),b.value=!0}function q(e){e.preventDefault(),b.value=!1}async function O(e){var n;e.preventDefault(),b.value=!1,await B(((n=e.dataTransfer)==null?void 0:n.files)??null)}return T(()=>c.messages.map(e=>e.content),async()=>{await M(),w()},{deep:!0}),T(()=>c.messages.length,async()=>{await M(),w()}),T(()=>h.value,async()=>{await M(),$()}),X(()=>{$(),w()}),(e,n)=>(a(),r("div",le,[o("div",{ref_key:"messagesContainer",ref:y,class:"flex-1 overflow-y-auto p-4 space-y-4"},[s(c).messages.length===0?(a(),r("div",ie,[o("div",ce,[A(ae,{size:56,class:"mx-auto mb-4"}),n[1]||(n[1]=o("p",{class:"text-lg font-medium"},"Welcome to IO",-1)),n[2]||(n[2]=o("p",{class:"text-sm mt-1"},"Send a message to get started.",-1))])])):p("",!0),(a(!0),r(C,null,S(s(c).messages,t=>(a(),r("div",{key:t.id,class:k(["flex",t.role==="user"?"justify-end":"justify-start"])},[o("div",{class:k(["max-w-[75%] rounded-lg px-4 py-2 text-sm",t.role==="user"?"bg-primary text-primary-foreground":"bg-muted text-foreground"])},[t.attachments.length>0?(a(),r("div",ue,[(a(!0),r(C,null,S(t.attachments,(l,u)=>(a(),r("div",{key:`${t.id}-${u}`,class:"rounded border border-border/50 p-2 bg-background/70 text-foreground"},[s(D)(l)?(a(),r("img",{key:0,src:s(ne)(l),alt:l.name,class:"max-h-44 rounded mb-1 object-contain"},null,8,de)):p("",!0),o("div",fe,[s(D)(l)?(a(),m(s(j),{key:0,class:"w-3.5 h-3.5"})):(a(),m(s(H),{key:1,class:"w-3.5 h-3.5"})),o("span",pe,d(l.name),1),o("span",me,d(s(x)(l.size)),1)])]))),128))])):p("",!0),t.content?(a(),m(oe,{key:1,content:t.content,class:k(t.role==="user"?"prose-invert":"")},null,8,["content","class"])):t.streaming?p("",!0):(a(),r("span",ve,"...")),t.streaming?(a(),r("div",he)):p("",!0)],2)],2))),128))],512),o("div",{class:k(["border-t border-border p-4",b.value?"bg-accent/40":""]),onDragover:L,onDragleave:q,onDrop:O},[o("input",{ref_key:"fileInput",ref:_,type:"file",multiple:"",class:"hidden",onChange:F},null,544),i.value.length>0?(a(),r("div",ge,[o("div",xe,[(a(!0),r(C,null,S(i.value,(t,l)=>(a(),r("div",{key:`${t.name}-${l}`,class:"flex items-center gap-2 rounded border border-border px-2 py-1 text-xs bg-muted"},[s(D)(t)?(a(),m(s(j),{key:0,class:"w-3.5 h-3.5"})):(a(),m(s(H),{key:1,class:"w-3.5 h-3.5"})),o("span",ye,d(t.name),1),o("span",_e,d(s(x)(t.size)),1),o("button",{class:"hover:text-destructive",onClick:u=>P(l)},[A(s(re),{class:"w-3.5 h-3.5"})],8,be)]))),128))]),o("p",ke,d(s(x)(N.value))+" attached · Max per file "+d(s(x)(s(W)))+" · Max total "+d(s(x)(s(Y))),1)])):p("",!0),f.value?(a(),r("p",we,d(f.value),1)):p("",!0),o("div",Te,[o("button",{class:"rounded-md border border-input p-2 hover:bg-accent disabled:opacity-50",disabled:s(c).isStreaming,onClick:V,title:"Attach files"},[A(s(J),{class:"w-4 h-4"})],8,Ae),Q(o("textarea",{ref_key:"textareaRef",ref:g,"onUpdate:modelValue":n[0]||(n[0]=t=>h.value=t),onKeydown:K,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),[[G,h.value]]),o("button",{onClick:E,disabled:!z.value,class:"rounded-md bg-primary text-primary-foreground p-2 hover:bg-primary/90 disabled:opacity-50 transition-colors"},[s(c).isStreaming?(a(),m(s(ee),{key:1,class:"w-4 h-4"})):(a(),m(s(Z),{key:0,class:"w-4 h-4"}))],8,Ce)])],34)]))}});export{ze as default};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{r as M,u as D,E as N,J as o,q as n,n as a,d as h,L as b,t as c,T as i,e as V,K as d,m as z,z as f,R as p,D as B,a6 as k,p as q,l as T}from"./index-
|
|
1
|
+
import{r as M,u as D,E as N,J as o,q as n,n as a,d as h,L as b,t as c,T as i,e as V,K as d,m as z,z as f,R as p,D as B,a6 as k,p as q,l as T}from"./index-DCJUYZtV.js";import{b as C,c as E,a as P}from"./api-BiDVwQrs.js";import{g as R}from"./squad-colors-B8B_Y-lz.js";import{T as j}from"./trash-2-C21cNLJl.js";/**
|
|
2
2
|
* @license lucide-vue-next v0.474.0 - ISC
|
|
3
3
|
*
|
|
4
4
|
* This source code is licensed under the ISC license.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{u as q,a2 as F,E as z,J as r,q as n,n as t,t as d,T as c,H as M,a4 as T,a0 as L,g as E,p as x,d as $,L as A,z as p,R as g,K as l,m as P,o as R,l as G}from"./index-
|
|
1
|
+
import{u as q,a2 as F,E as z,J as r,q as n,n as t,t as d,T as c,H as M,a4 as T,a0 as L,g as E,p as x,d as $,L as A,z as p,R as g,K as l,m as P,o as R,l as G}from"./index-DCJUYZtV.js";import{b as B,a as J}from"./api-BiDVwQrs.js";import{S as K}from"./search-BabUvoGD.js";import{A as Q}from"./arrow-left-DFbf2tii.js";import{T as I}from"./trash-2-C21cNLJl.js";const O={class:"flex h-full"},W={class:"p-3 border-b border-border space-y-2"},X={class:"flex items-center gap-2"},Y={class:"relative"},Z={class:"flex gap-2"},ee={class:"flex-1"},te={class:"flex-1"},se={class:"flex-1 overflow-y-auto"},oe={key:0,class:"p-4 text-xs text-muted-foreground"},re={key:1,class:"flex flex-col items-center justify-center h-full p-6 text-center text-muted-foreground"},ne=["onClick"],ae={class:"flex-1 min-w-0"},le={class:"text-xs text-foreground line-clamp-2"},ie={class:"flex items-center gap-2 mt-1"},ue={class:"text-xs text-muted-foreground"},de={class:"text-xs text-muted-foreground"},ce=["onClick"],fe={key:2,class:"p-3 text-center"},ve={key:0,class:"flex-1 flex flex-col"},me={class:"flex items-center gap-2 px-4 py-2 border-b border-border"},xe={class:"text-sm font-medium text-muted-foreground"},pe={class:"flex-1 overflow-y-auto p-4 space-y-4"},ge={key:0,class:"text-center text-xs text-muted-foreground py-8"},he={class:"text-xs mt-1 opacity-60"},ye={key:1,class:"hidden md:flex flex-1 items-center justify-center text-muted-foreground"},be={class:"text-center"},_e=50,De=q({__name:"HistoryView",setup(we){const a=l([]),h=l(0),y=l(!0),f=l(""),v=l(""),m=l(""),u=l(null),b=l([]),_=l(!1),w=l(0);async function k(o=!0){y.value=!0;try{o&&(w.value=0,a.value=[]);const e=new URLSearchParams;f.value&&e.set("q",f.value),v.value&&e.set("from",v.value),m.value&&e.set("to",m.value+"T23:59:59"),e.set("limit",String(_e)),e.set("offset",String(w.value));const i=await B(`/history?${e.toString()}`);a.value=o?i.items:[...a.value,...i.items],h.value=i.total,w.value+=i.items.length}finally{y.value=!1}}async function j(o){u.value=o,_.value=!0;try{b.value=await B(`/history/${o}`)}finally{_.value=!1}}function D(){u.value=null,b.value=[]}async function H(o,e){e.stopPropagation(),confirm("Delete this conversation?")&&(await J(`/history/${o}`),a.value=a.value.filter(i=>i.id!==o),h.value=Math.max(0,h.value-1),u.value===o&&D())}function C(o){return new Date(o).toLocaleString(void 0,{year:"numeric",month:"short",day:"numeric",hour:"2-digit",minute:"2-digit"})}function N(o,e=100){return o.length>e?o.slice(0,e)+"…":o}const U=P(()=>a.value.length<h.value);let S=null;return F([f,v,m],()=>{S&&clearTimeout(S),S=setTimeout(()=>k(!0),300)}),z(()=>k(!0)),(o,e)=>{var i;return r(),n("div",O,[t("div",{class:p(["flex flex-col border-r border-border",u.value?"hidden md:flex w-80 shrink-0":"flex-1"])},[t("div",W,[t("div",X,[d(c(M),{class:"w-4 h-4 text-muted-foreground"}),e[4]||(e[4]=t("span",{class:"text-sm font-medium"},"Conversation History",-1))]),t("div",Y,[d(c(K),{class:"absolute left-2.5 top-2.5 w-3.5 h-3.5 text-muted-foreground"}),T(t("input",{"onUpdate:modelValue":e[0]||(e[0]=s=>f.value=s),placeholder:"Search conversations...",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),[[L,f.value]])]),t("div",Z,[t("div",ee,[e[5]||(e[5]=t("label",{class:"text-xs text-muted-foreground block mb-1"},"From",-1)),T(t("input",{"onUpdate:modelValue":e[1]||(e[1]=s=>v.value=s),type:"date",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"},null,512),[[L,v.value]])]),t("div",te,[e[6]||(e[6]=t("label",{class:"text-xs text-muted-foreground block mb-1"},"To",-1)),T(t("input",{"onUpdate:modelValue":e[2]||(e[2]=s=>m.value=s),type:"date",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"},null,512),[[L,m.value]])])])]),t("div",se,[y.value&&a.value.length===0?(r(),n("div",oe," Loading... ")):a.value.length===0?(r(),n("div",re,[d(c(E),{class:"w-10 h-10 mb-3 opacity-40"}),e[7]||(e[7]=t("p",{class:"text-sm"},"No conversations found.",-1)),e[8]||(e[8]=t("p",{class:"text-xs mt-1"},"Start chatting to build up your history.",-1))])):x("",!0),(r(!0),n($,null,A(a.value,s=>(r(),n("div",{key:s.id,class:p(["group flex items-start gap-2 px-3 py-3 border-b border-border cursor-pointer hover:bg-accent/50 transition-colors",u.value===s.id?"bg-accent":""]),onClick:V=>j(s.id)},[t("div",ae,[t("p",le,g(N(s.preview)),1),t("div",ie,[t("span",ue,g(C(s.updatedAt)),1),t("span",de,"· "+g(s.messageCount)+" msgs",1)])]),t("button",{class:"opacity-0 group-hover:opacity-100 p-1 rounded hover:bg-destructive/10 text-muted-foreground hover:text-destructive transition-all",title:"Delete",onClick:V=>H(s.id,V)},[d(c(I),{class:"w-3.5 h-3.5"})],8,ce)],10,ne))),128)),U.value?(r(),n("div",fe,[t("button",{class:"text-xs text-muted-foreground hover:text-foreground underline",onClick:e[3]||(e[3]=s=>k(!1))}," Load more ")])):x("",!0)])],2),u.value?(r(),n("div",ve,[t("div",me,[t("button",{class:"p-1.5 rounded hover:bg-accent text-muted-foreground",title:"Back",onClick:D},[d(c(Q),{class:"w-4 h-4"})]),t("span",xe,g(C(((i=a.value.find(s=>s.id===u.value))==null?void 0:i.startedAt)??"")),1)]),t("div",pe,[_.value?(r(),n("div",ge," Loading... ")):x("",!0),(r(!0),n($,null,A(b.value,s=>(r(),n("div",{key:s.id,class:p(["flex",s.role==="user"?"justify-end":"justify-start"])},[t("div",{class:p(["max-w-[75%] rounded-lg px-4 py-2 text-sm",s.role==="user"?"bg-blue-600 text-white":"bg-muted text-foreground"])},[s.content?(r(),R(G,{key:0,content:s.content,class:p(s.role==="user"?"prose-invert":"")},null,8,["content","class"])):x("",!0),t("p",he,g(C(s.createdAt)),1)],2)],2))),128))])])):u.value?x("",!0):(r(),n("div",ye,[t("div",be,[d(c(M),{class:"w-12 h-12 mx-auto mb-3 opacity-50"}),e[9]||(e[9]=t("p",null,"Select a conversation to view",-1))])]))])}}});export{De as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{u as b,V as v,J as u,q as i,n as t,t as y,a6 as w,a4 as m,a0 as p,R as c,p as V,T as f,K as d,_,Y as h}from"./index-
|
|
1
|
+
import{u as b,V as v,J as u,q as i,n as t,t as y,a6 as w,a4 as m,a0 as p,R as c,p as V,T as f,K as d,_,Y as h}from"./index-DCJUYZtV.js";const S={class:"min-h-screen flex items-center justify-center bg-background p-4"},k={class:"w-full max-w-sm space-y-8"},q={class:"text-center"},A={key:0,class:"text-sm text-destructive"},B=["disabled"],L=b({__name:"LoginView",setup(D){const o=v(),g=h(),r=d(""),n=d(""),s=d("");async function x(){s.value="";try{await o.login(r.value,n.value),g.push("/")}catch(l){s.value=l.message??"Login failed"}}return(l,e)=>(u(),i("div",S,[t("div",k,[t("div",q,[y(_,{size:56,class:"mx-auto mb-4"}),e[2]||(e[2]=t("h1",{class:"font-display text-4xl font-normal uppercase tracking-[0.18em] bg-gradient-brand bg-clip-text text-transparent"}," IO ",-1)),e[3]||(e[3]=t("p",{class:"text-sm text-muted-foreground mt-1"},"Sign in to your dashboard",-1))]),t("form",{onSubmit:w(x,["prevent"]),class:"space-y-4 bg-card border border-border rounded-lg p-6"},[t("div",null,[e[4]||(e[4]=t("label",{class:"text-sm font-medium text-muted-foreground",for:"email"},"Email",-1)),m(t("input",{id:"email","onUpdate:modelValue":e[0]||(e[0]=a=>r.value=a),type:"email",required:"",class:"mt-1 w-full rounded-md border border-border bg-input px-3 py-2 text-sm text-foreground placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring",placeholder:"you@example.com"},null,512),[[p,r.value]])]),t("div",null,[e[5]||(e[5]=t("label",{class:"text-sm font-medium text-muted-foreground",for:"password"},"Password",-1)),m(t("input",{id:"password","onUpdate:modelValue":e[1]||(e[1]=a=>n.value=a),type:"password",required:"",class:"mt-1 w-full rounded-md border border-border bg-input px-3 py-2 text-sm text-foreground placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring",placeholder:"••••••••"},null,512),[[p,n.value]])]),s.value?(u(),i("div",A,c(s.value),1)):V("",!0),t("button",{type:"submit",disabled:f(o).loading,class:"btn-gradient w-full py-2.5"},c(f(o).loading?"Signing in...":"Sign In"),9,B)],32),e[6]||(e[6]=t("p",{class:"text-center text-xs text-muted-foreground"}," Personal AI Assistant Daemon ",-1))])]))}});export{L as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{u as E,E as S,J as l,q as a,n as s,t as c,T as b,s as C,a4 as i,a0 as m,$ as M,p as x,i as P,d as $,L as j,K as f,R as p}from"./index-
|
|
1
|
+
import{u as E,E as S,J as l,q as a,n as s,t as c,T as b,s as C,a4 as i,a0 as m,$ as M,p as x,i as P,d as $,L as j,K as f,R as p}from"./index-DCJUYZtV.js";import{b as U,c as I,d as N,a as L}from"./api-BiDVwQrs.js";import{_ as O}from"./ToggleSwitch.vue_vue_type_script_setup_true_lang-Bk_t9_Rn.js";import{P as G}from"./plus-gmwiZVfr.js";import{T as K}from"./trash-2-C21cNLJl.js";const F={class:"p-6"},Y={class:"flex items-center justify-between mb-6"},B={key:0,class:"border border-border rounded-lg p-4 mb-6 space-y-3 bg-card"},h={class:"grid grid-cols-2 gap-3"},D={key:0},J={key:1},R={key:1,class:"text-muted-foreground"},q={key:2,class:"text-center py-12 text-muted-foreground"},W={key:3,class:"space-y-2"},z={class:"space-y-1"},H={class:"flex items-center gap-2"},Q={class:"font-medium text-sm"},X={class:"text-xs text-muted-foreground bg-secondary px-1.5 py-0.5 rounded"},Z={key:0,class:"text-xs text-muted-foreground"},ee={key:1,class:"text-xs text-muted-foreground"},te={key:2,class:"text-xs text-muted-foreground"},se={class:"flex items-center gap-3"},oe=["onClick"],ie=E({__name:"McpView",setup(ne){const u=f([]),g=f(!0),v=f(!1),o=f({name:"",type:"stdio",command:"",url:"",argsText:"",envText:""});S(async()=>{try{u.value=await U("/mcp")}finally{g.value=!1}});function k(n){return n.split(/\r?\n|,/).map(e=>e.trim()).filter(Boolean)}function w(n){const e={};try{const t=JSON.parse(n);if(t&&typeof t=="object"&&!Array.isArray(t)){for(const[d,r]of Object.entries(t))e[d]=String(r);return e}}catch{}for(const t of n.split(/\r?\n/)){const d=t.trim();if(!d||d.startsWith("#"))continue;const r=d.indexOf("=");if(r===-1)continue;const y=d.slice(0,r).trim(),A=d.slice(r+1).trim();y&&(e[y]=A)}return e}async function _(n){await N(`/mcp/${n.id}`,{enabled:!n.enabled}),n.enabled=!n.enabled}async function T(n){await L(`/mcp/${n}`),u.value=u.value.filter(e=>e.id!==n)}async function V(){const n={name:o.value.name,type:o.value.type,args:k(o.value.argsText),env:w(o.value.envText)};o.value.type==="stdio"?n.command=o.value.command:n.url=o.value.url;const e=await I("/mcp",n);u.value.push(e),v.value=!1,o.value={name:"",type:"stdio",command:"",url:"",argsText:"",envText:""}}return(n,e)=>(l(),a("div",F,[s("div",Y,[e[8]||(e[8]=s("div",null,[s("p",{class:"text-sm font-medium text-primary"},"MCP configuration"),s("h1",{class:"text-2xl font-bold"},"MCP Servers")],-1)),s("button",{onClick:e[0]||(e[0]=t=>v.value=!v.value),class:"btn-gradient inline-flex items-center gap-1"},[c(b(G),{class:"w-4 h-4"}),e[7]||(e[7]=C(" Add Server ",-1))])]),v.value?(l(),a("div",B,[s("div",h,[s("div",null,[e[9]||(e[9]=s("label",{class:"text-sm font-medium"},"Name",-1)),i(s("input",{"onUpdate:modelValue":e[1]||(e[1]=t=>o.value.name=t),class:"mt-1 w-full rounded-md border border-input bg-background px-3 py-2 text-sm"},null,512),[[m,o.value.name]])]),s("div",null,[e[11]||(e[11]=s("label",{class:"text-sm font-medium"},"Type",-1)),i(s("select",{"onUpdate:modelValue":e[2]||(e[2]=t=>o.value.type=t),class:"mt-1 w-full rounded-md border border-input bg-background px-3 py-2 text-sm"},[...e[10]||(e[10]=[s("option",{value:"stdio"},"stdio",-1),s("option",{value:"http"},"http",-1)])],512),[[M,o.value.type]])])]),o.value.type==="stdio"?(l(),a("div",D,[e[12]||(e[12]=s("label",{class:"text-sm font-medium"},"Command",-1)),i(s("input",{"onUpdate:modelValue":e[3]||(e[3]=t=>o.value.command=t),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),[[m,o.value.command]])])):(l(),a("div",J,[e[13]||(e[13]=s("label",{class:"text-sm font-medium"},"URL",-1)),i(s("input",{"onUpdate:modelValue":e[4]||(e[4]=t=>o.value.url=t),placeholder:"https://...",class:"mt-1 w-full rounded-md border border-input bg-background px-3 py-2 text-sm"},null,512),[[m,o.value.url]])])),s("div",null,[e[14]||(e[14]=s("label",{class:"text-sm font-medium"},"Command args",-1)),i(s("textarea",{"onUpdate:modelValue":e[5]||(e[5]=t=>o.value.argsText=t),rows:"3",placeholder:"--stdio\n--figma-api-key=${FIGMA_API_KEY}",class:"mt-1 w-full rounded-md border border-input bg-background px-3 py-2 text-sm"},null,512),[[m,o.value.argsText]]),e[15]||(e[15]=s("p",{class:"mt-1 text-xs text-muted-foreground"},"Enter one arg per line or comma-separated.",-1))]),s("div",null,[e[16]||(e[16]=s("label",{class:"text-sm font-medium"},"Environment variables",-1)),i(s("textarea",{"onUpdate:modelValue":e[6]||(e[6]=t=>o.value.envText=t),rows:"4",placeholder:"FIGMA_API_KEY=${FIGMA_API_KEY}\nLOG_LEVEL=debug",class:"mt-1 w-full rounded-md border border-input bg-background px-3 py-2 text-sm font-mono"},null,512),[[m,o.value.envText]]),e[17]||(e[17]=s("p",{class:"mt-1 text-xs text-muted-foreground"},"Use KEY=value lines, or paste JSON. Values like ${FIGMA_API_KEY} are preserved.",-1))]),s("div",{class:"flex justify-end"},[s("button",{onClick:V,class:"btn-gradient"},"Save")])])):x("",!0),g.value?(l(),a("div",R,"Loading...")):u.value.length===0?(l(),a("div",q,[c(b(P),{class:"w-12 h-12 mx-auto mb-3 opacity-50"}),e[18]||(e[18]=s("p",null,"No MCP servers configured.",-1))])):(l(),a("div",W,[(l(!0),a($,null,j(u.value,t=>{var d;return l(),a("div",{key:t.id,class:"flex items-center justify-between border border-border rounded-lg px-4 py-3 bg-card"},[s("div",z,[s("div",H,[s("span",Q,p(t.name),1),s("span",X,p(t.type),1)]),t.command||t.url?(l(),a("div",Z,p(t.command||t.url),1)):x("",!0),(d=t.args)!=null&&d.length?(l(),a("div",ee,"Args: "+p(t.args.join(", ")),1)):x("",!0),t.env&&Object.keys(t.env).length>0?(l(),a("div",te,"Env: "+p(Object.keys(t.env).join(", ")),1)):x("",!0)]),s("div",se,[c(O,{"model-value":t.enabled,"aria-label":`Toggle ${t.name}`,"onUpdate:modelValue":r=>_(t)},null,8,["model-value","aria-label","onUpdate:modelValue"]),s("button",{onClick:r=>T(t.id),class:"p-1.5 rounded hover:bg-destructive/10 text-muted-foreground hover:text-destructive"},[c(b(K),{class:"w-4 h-4"})],8,oe)])])}),128))]))]))}});export{ie as default};
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import{r as J,u as G,E as H,J as m,q as p,n as s,t as _,T as k,s as V,d as C,L as P,a4 as S,$ as A,a0 as M,p as T,c as K,R as h,K as b,m as D,z as Y,D as Q}from"./index-DCJUYZtV.js";import{b as I,c as O,d as E,a as X}from"./api-BiDVwQrs.js";import{g as Z}from"./squad-colors-B8B_Y-lz.js";import{_ as ee}from"./ToggleSwitch.vue_vue_type_script_setup_true_lang-Bk_t9_Rn.js";import{P as te}from"./plus-gmwiZVfr.js";import{P as ne}from"./pencil-D4Zz_t0y.js";import{T as re}from"./trash-2-C21cNLJl.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 oe=J("PlayIcon",[["polygon",{points:"6 3 20 12 6 21 6 3",key:"1oa8hb"}]]),se=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],ae=["January","February","March","April","May","June","July","August","September","October","November","December"];function $(l,r,o){const n=new Set;if(l==="*"){for(let u=r;u<=o;u+=1)n.add(u);return Array.from(n)}if(l.startsWith("*/")){const u=Number.parseInt(l.slice(2),10);if(Number.isNaN(u)||u<=0)return[];for(let d=r;d<=o;d+=u)n.add(d);return Array.from(n)}const i=l.split(",").map(u=>u.trim()).filter(Boolean);for(const u of i){if(u.includes("-")){const[f,c]=u.split("-"),v=Number.parseInt(f,10),g=Number.parseInt(c,10);if(Number.isNaN(v)||Number.isNaN(g))continue;for(let y=Math.min(v,g);y<=Math.max(v,g);y+=1)y>=r&&y<=o&&n.add(y);continue}const d=Number.parseInt(u,10);!Number.isNaN(d)&&d>=r&&d<=o&&n.add(d)}return Array.from(n)}function q(l,r){const o=(l+11)%12+1,n=l<12?"AM":"PM",i=r.toString().padStart(2,"0");return`${o}:${i} ${n}`}function j(l,r){if(l.length===0)return"";if(l.length===1)return r[l[0]];const o=l.map(n=>r[n]);return o.length===2?`${o[0]} and ${o[1]}`:`${o.slice(0,-1).join(", ")}, and ${o[o.length-1]}`}function de(l){const r=$(l,0,6);if(r.length===0)return"";const o=r.map(c=>c===7?0:c),n=Array.from(new Set(o)).sort((c,v)=>c-v);if(n.length===7)return"every day";const i=[1,2,3,4,5],u=[0,6],d=i.every(c=>n.includes(c))&&n.length===i.length,f=u.every(c=>n.includes(c))&&n.length===u.length;return d?"weekdays":f?"weekends":j(n,se)}function ie(l){const r=$(l,1,12);return r.length===0||r.length===12?"":j(r.map(o=>o-1),ae)}function le(l){const r=$(l,1,31);if(r.length===0||r.length===31)return"";const o=r.map(n=>{const i=[11,12,13].includes(n)?"th":[1,21,31].includes(n)?"st":[2,22].includes(n)?"nd":[3,23].includes(n)?"rd":"th";return`${n}${i}`});return o.length===1?`on the ${o[0]} of the month`:`on the ${o.join(", ")}`}function ue(l,r){const o=$(l,0,59),n=$(r,0,23);if(o.length===0||n.length===0)return"custom times";if(l==="*"&&r==="*")return"every minute";if(l==="*"&&r.startsWith("*/")){const i=Number.parseInt(r.slice(2),10);if(!Number.isNaN(i)&&i>0)return`every ${i} hours`}if(l.startsWith("*/")&&r==="*"){const i=Number.parseInt(l.slice(2),10);if(!Number.isNaN(i)&&i>0)return`every ${i} minutes`}return l==="*"&&n.length===24?"every hour":l==="*"&&n.length===1?`once each hour at ${q(n[0],0)}`:o.length===1&&n.length===1?`at ${q(n[0],o[0])}`:o.length>1&&n.length===1?`at ${o.map(i=>q(n[0],i)).join(", ")}`:n.length>1&&o.length===1?`at ${n.map(i=>q(i,o[0])).join(", ")}`:"at matching times"}function ce(l){const r=l.trim().split(/\s+/);if(r.length!==5)return"custom schedule";const[o,n,i,u,d]=r,f=ue(o,n),c=de(d),v=le(i),g=ie(u);if(f==="every minute")return"every minute";const y=d!=="*"&&i==="*"?`on ${c}`:i!=="*"&&d==="*"?v:d==="*"&&i==="*"?"each day":"on matching days",w=[f,y].filter(N=>N&&N!=="custom times"&&N!=="at matching times");return g&&w.push(`in ${g}`),w.length===0?"custom schedule":w.join(" ")}const me={class:"p-6"},pe={class:"flex items-center justify-between mb-6"},fe={class:"flex gap-1 border-b border-border mb-4"},ve=["onClick"],ge={key:0,class:"border border-border rounded-lg p-4 mb-4 space-y-3"},ye={class:"grid grid-cols-2 gap-3"},be=["value"],xe=["disabled"],he={key:1,class:"text-muted-foreground"},_e={key:2,class:"text-center py-12 text-muted-foreground"},ke={key:3,class:"space-y-2"},we={class:"text-sm font-medium font-mono"},Ne={class:"text-xs text-primary/90 mt-1 font-medium"},Se={key:0,class:"mt-1"},$e={class:"text-xs text-muted-foreground mt-0.5"},qe={key:0,class:"mt-2 space-y-2"},Ce={class:"flex gap-2"},Pe=["onClick"],Me={key:1,class:"mt-2 flex items-center justify-between gap-3"},Te=["onClick"],Ve={class:"text-xs text-muted-foreground mt-0.5"},Ae={class:"flex items-center gap-3"},De=["onClick"],Ie={key:0,class:"text-xs text-green-500 font-medium"},Oe=["onClick"],ze=G({__name:"SchedulesView",setup(l){const r=b([]),o=b([]),n=b(!0),i=b("squad"),u=b(!1),d=b({type:"squad",cron:"",squad_id:"",prompt:""}),f=b(null),c=b(""),v=b(null);H(async()=>{try{const a=await I("/squads");o.value=a.squads,o.value.length>0&&(d.value.squad_id=o.value[0].id),r.value=await I("/schedules")}finally{n.value=!1}});const g=D(()=>r.value.filter(a=>a.type===i.value));async function y(){const a={type:d.value.type,cron:d.value.cron,squad_id:d.value.squad_id};if(!d.value.squad_id||!d.value.prompt.trim())return;a.prompt=d.value.prompt;const e=await O("/schedules",a);r.value.push(e),u.value=!1}function w(a){if(a)return o.value.find(e=>e.id===a)}const N=D(()=>g.value.map(a=>({...a,squad:w(a.squad_id),description:ce(a.cron)})));async function U(a){const e=!a.enabled,t=await E(`/schedules/${a.id}`,{enabled:e});a.enabled=t.enabled}function W(a){f.value=a.id,c.value=a.prompt}async function B(a){const e=await E(`/schedules/${a.id}`,{prompt:c.value});a.prompt=e.prompt,f.value=null,c.value=""}function L(){f.value=null,c.value=""}async function R(a){await X(`/schedules/${a}`),r.value=r.value.filter(e=>e.id!==a)}async function z(a){await O(`/schedules/${a.id}/trigger`,{}),v.value=a.id;const e=r.value.findIndex(t=>t.id===a.id);e!==-1&&(r.value[e]={...r.value[e],last_run:new Date().toISOString()}),setTimeout(()=>{v.value=null},3e3)}function F(a){var e;return a?((e=o.value.find(t=>t.id===a))==null?void 0:e.name)??a:"Unknown squad"}return(a,e)=>(m(),p("div",me,[s("div",pe,[e[8]||(e[8]=s("h1",{class:"text-2xl font-bold"},"Schedules",-1)),s("button",{onClick:e[0]||(e[0]=t=>u.value=!u.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"},[_(k(te),{class:"w-4 h-4"}),e[7]||(e[7]=V(" Add Schedule ",-1))])]),s("div",fe,[(m(),p(C,null,P(["squad","io"],t=>s("button",{key:t,onClick:x=>i.value=t,class:Y(["px-4 py-2 text-sm font-medium border-b-2 transition-colors",i.value===t?"border-primary text-foreground":"border-transparent text-muted-foreground hover:text-foreground"])},h(t==="squad"?"Squad Schedules":"IO Schedules"),11,ve)),64))]),u.value?(m(),p("div",ge,[s("div",ye,[s("div",null,[e[10]||(e[10]=s("label",{class:"text-sm font-medium"},"Type",-1)),S(s("select",{"onUpdate:modelValue":e[1]||(e[1]=t=>d.value.type=t),class:"mt-1 w-full rounded-md border border-input bg-background px-3 py-2 text-sm"},[...e[9]||(e[9]=[s("option",{value:"squad"},"Squad",-1),s("option",{value:"io"},"IO",-1)])],512),[[A,d.value.type]])]),s("div",null,[e[11]||(e[11]=s("label",{class:"text-sm font-medium"},"Cron Expression",-1)),S(s("input",{"onUpdate:modelValue":e[2]||(e[2]=t=>d.value.cron=t),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),[[M,d.value.cron]])])]),s("div",null,[e[12]||(e[12]=s("label",{class:"text-sm font-medium"},"Target Squad",-1)),S(s("select",{"onUpdate:modelValue":e[3]||(e[3]=t=>d.value.squad_id=t),class:"mt-1 w-full rounded-md border border-input bg-background px-3 py-2 text-sm"},[(m(!0),p(C,null,P(o.value,t=>(m(),p("option",{key:t.id,value:t.id},h(t.name),9,be))),128))],512),[[A,d.value.squad_id]])]),s("div",null,[e[13]||(e[13]=s("label",{class:"text-sm font-medium"},"Prompt",-1)),S(s("textarea",{"onUpdate:modelValue":e[4]||(e[4]=t=>d.value.prompt=t),rows:"3",placeholder:"e.g. Triage issues, review PRs, ideate on features",class:"mt-1 w-full rounded-md border border-input bg-background px-3 py-2 text-sm"},null,512),[[M,d.value.prompt]])]),s("button",{onClick:y,disabled:!d.value.squad_id||!d.value.prompt.trim(),class:"px-4 py-2 text-sm rounded-md bg-primary text-primary-foreground hover:bg-primary/90 disabled:opacity-50 disabled:cursor-not-allowed"}," Save ",8,xe)])):T("",!0),n.value?(m(),p("div",he,"Loading...")):g.value.length===0?(m(),p("div",_e,[_(k(K),{class:"w-12 h-12 mx-auto mb-3 opacity-50"}),s("p",null,"No "+h(i.value)+" schedules configured.",1)])):(m(),p("div",ke,[(m(!0),p(C,null,P(N.value,t=>(m(),p("div",{key:t.id,class:"flex items-center justify-between border border-border rounded-lg px-4 py-3"},[s("div",null,[s("div",we,h(t.cron),1),s("div",Ne,"Runs "+h(t.description),1),t.squad?(m(),p("div",Se,[s("span",{class:"text-xs px-2 py-0.5 rounded-full",style:Q(k(Z)(t.squad.color))},h(t.squad.name),5)])):T("",!0),s("div",$e,[f.value===t.id?(m(),p("div",qe,[S(s("textarea",{"onUpdate:modelValue":e[5]||(e[5]=x=>c.value=x),rows:"3",class:"w-full rounded-md border border-input bg-background px-3 py-2 text-sm",placeholder:"Schedule prompt"},null,512),[[M,c.value]]),s("div",Ce,[s("button",{onClick:x=>B(t),class:"px-3 py-1.5 text-xs rounded-md bg-primary text-primary-foreground hover:bg-primary/90"}," Save ",8,Pe),s("button",{onClick:e[6]||(e[6]=x=>L()),class:"px-3 py-1.5 text-xs rounded-md border border-border hover:bg-muted/50"}," Cancel ")])])):(m(),p("div",Me,[s("span",null,h(t.prompt?t.prompt:"(no prompt)"),1),s("button",{onClick:x=>W(t),class:"inline-flex items-center gap-1 px-2 py-1 text-xs rounded-md border border-border hover:bg-muted/50"},[_(k(ne),{class:"w-3 h-3"}),e[14]||(e[14]=V(" Edit prompt ",-1))],8,Te)]))]),s("div",Ve," Squad: "+h(F(t.squad_id)),1)]),s("div",Ae,[s("button",{onClick:x=>z(t),class:"p-1.5 rounded hover:bg-primary/10 text-muted-foreground hover:text-primary",title:"Trigger now"},[_(k(oe),{class:"w-4 h-4"})],8,De),v.value===t.id?(m(),p("span",Ie,"Triggered!")):T("",!0),_(ee,{"model-value":!!t.enabled,"aria-label":`Toggle schedule ${t.cron}`,"onUpdate:modelValue":x=>U(t)},null,8,["model-value","aria-label","onUpdate:modelValue"]),s("button",{onClick:x=>R(t.id),class:"p-1.5 rounded hover:bg-destructive/10 text-muted-foreground hover:text-destructive"},[_(k(re),{class:"w-4 h-4"})],8,Oe)])]))),128))]))]))}});export{ze as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{u as w,E,J as d,q as s,n as t,R as g,d as x,L as U,a4 as o,a0 as n,$ as M,Z as p,p as b,K as r,z as T}from"./index-
|
|
1
|
+
import{u as w,E,J as d,q as s,n as t,R as g,d as x,L as U,a4 as o,a0 as n,$ as M,Z as p,p as b,K as r,z as T}from"./index-DCJUYZtV.js";import{b as V,d as S}from"./api-BiDVwQrs.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"],K={key:0,class:"space-y-4 max-w-lg"},D={class:"flex items-center gap-3"},L={key:1,class:"space-y-4 max-w-lg"},R={class:"flex items-center gap-3"},j={key:2,class:"space-y-4 max-w-lg"},q={key:3,class:"space-y-4 max-w-lg"},G={class:"flex items-center gap-3"},O={class:"flex items-center gap-3"},W=w({__name:"SettingsView",setup(P){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"}],a=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");a.value=v}finally{f.value=!1}}async function c(){i.value=!0,m.value=!1;try{await S("/settings",a.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:$=>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",K,[t("div",null,[e[13]||(e[13]=t("label",{class:"text-sm font-medium"},"Default Model",-1)),o(t("input",{"onUpdate:modelValue":e[0]||(e[0]=l=>a.value.defaultModel=l),class:"mt-1 w-full rounded-md border border-input bg-background px-3 py-2 text-sm"},null,512),[[n,a.value.defaultModel]])]),t("div",null,[e[14]||(e[14]=t("label",{class:"text-sm font-medium"},"Port",-1)),o(t("input",{"onUpdate:modelValue":e[1]||(e[1]=l=>a.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,a.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)),o(t("select",{"onUpdate:modelValue":e[2]||(e[2]=l=>a.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,a.value.backgroundNotifyMode]])]),t("div",D,[o(t("input",{"onUpdate:modelValue":e[3]||(e[3]=l=>a.value.backgroundNotifyTelegram=l),type:"checkbox",id:"notifyTelegram",class:"rounded"},null,512),[[p,a.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",L,[t("div",null,[e[19]||(e[19]=t("label",{class:"text-sm font-medium"},"Bot Token",-1)),o(t("input",{"onUpdate:modelValue":e[4]||(e[4]=l=>a.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,a.value.telegramBotToken]])]),t("div",null,[e[20]||(e[20]=t("label",{class:"text-sm font-medium"},"Authorized User ID",-1)),o(t("input",{"onUpdate:modelValue":e[5]||(e[5]=l=>a.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,a.value.authorizedUserId,void 0,{number:!0}]])]),t("div",R,[o(t("input",{"onUpdate:modelValue":e[6]||(e[6]=l=>a.value.telegramEnabled=l),type:"checkbox",id:"telegramEnabled",class:"rounded"},null,512),[[p,a.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",j,[t("div",null,[e[22]||(e[22]=t("label",{class:"text-sm font-medium"},"Supabase URL",-1)),o(t("input",{"onUpdate:modelValue":e[7]||(e[7]=l=>a.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,a.value.supabaseUrl]])]),t("div",null,[e[23]||(e[23]=t("label",{class:"text-sm font-medium"},"Supabase Anon Key",-1)),o(t("input",{"onUpdate:modelValue":e[8]||(e[8]=l=>a.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,a.value.supabaseAnonKey]])]),t("div",null,[e[24]||(e[24]=t("label",{class:"text-sm font-medium"},"Authorized Email",-1)),o(t("input",{"onUpdate:modelValue":e[9]||(e[9]=l=>a.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,a.value.authorizedEmail]])])])):b("",!0),u.value==="advanced"?(d(),s("div",q,[t("div",G,[o(t("input",{"onUpdate:modelValue":e[10]||(e[10]=l=>a.value.selfEditEnabled=l),type:"checkbox",id:"selfEdit",class:"rounded"},null,512),[[p,a.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",O,[o(t("input",{"onUpdate:modelValue":e[11]||(e[11]=l=>a.value.watchdogEnabled=l),type:"checkbox",id:"watchdog",class:"rounded"},null,512),[[p,a.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{W as default};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{r as me,u as fe,E as xe,J as o,q as a,n as t,z as j,t as u,T as d,s as q,d as p,a4 as C,a0 as M,a5 as ee,R as r,p as S,h as te,L as se,$ as ge,o as oe,l as le,K as n,m as ye,a6 as ae}from"./index-
|
|
1
|
+
import{r as me,u as fe,E as xe,J as o,q as a,n as t,z as j,t as u,T as d,s as q,d as p,a4 as C,a0 as M,a5 as ee,R as r,p as S,h as te,L as se,$ as ge,o as oe,l as le,K as n,m as ye,a6 as ae}from"./index-DCJUYZtV.js";import{b as z,c as J,d as be,a as ke}from"./api-BiDVwQrs.js";import{P as ne}from"./plus-gmwiZVfr.js";import{S as he}from"./search-BabUvoGD.js";import{P as _e}from"./pencil-D4Zz_t0y.js";import{S as we}from"./save-BvtAs5WB.js";import{X as Ce}from"./x-xgLSmc9e.js";import{T as Se}from"./trash-2-C21cNLJl.js";/**
|
|
2
2
|
* @license lucide-vue-next v0.474.0 - ISC
|
|
3
3
|
*
|
|
4
4
|
* This source code is licensed under the ISC license.
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{r as A,u as J,a2 as F,E as z,y as E,G,J as s,q as o,n as t,t as p,T as c,A as B,z as _,R as i,j as O,s as h,p as v,o as I,d as C,L as D,l as R,K as m,m as H,a3 as U,D as X,X as Z,N as K,U as Q}from"./index-
|
|
1
|
+
import{r as A,u as J,a2 as F,E as z,y as E,G,J as s,q as o,n as t,t as p,T as c,A as B,z as _,R as i,j as O,s as h,p as v,o as I,d as C,L as D,l as R,K as m,m as H,a3 as U,D as X,X as Z,N as K,U as Q}from"./index-DCJUYZtV.js";import{b as P,e as W,c as V,a as Y}from"./api-BiDVwQrs.js";import{g as ee}from"./squad-colors-B8B_Y-lz.js";import{X as te}from"./x-xgLSmc9e.js";import{G as se}from"./git-branch-BLstr_Gr.js";import{T as oe}from"./trash-2-C21cNLJl.js";import{A as re}from"./arrow-left-DFbf2tii.js";/**
|
|
2
2
|
* @license lucide-vue-next v0.474.0 - ISC
|
|
3
3
|
*
|
|
4
4
|
* This source code is licensed under the ISC license.
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{b as L}from"./api-
|
|
1
|
+
import{b as L}from"./api-BiDVwQrs.js";import{r as I,u as T,E as B,J as o,q as n,n as t,t as u,T as l,A as M,s as g,k as _,d as f,L as y,K as v,m as N,z as k,a3 as P,R as a,o as x,p,c as b,N as V}from"./index-DCJUYZtV.js";import{T as w}from"./triangle-alert-BrzY_E1n.js";import{G as $}from"./git-branch-BLstr_Gr.js";/**
|
|
2
2
|
* @license lucide-vue-next v0.474.0 - ISC
|
|
3
3
|
*
|
|
4
4
|
* This source code is licensed under the ISC license.
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{b as y}from"./api-
|
|
1
|
+
import{b as y}from"./api-BiDVwQrs.js";import{g as v}from"./squad-colors-B8B_Y-lz.js";import{r as h,u as k,E as b,J as o,q as r,n as t,t as i,T as l,k as w,d as L,L as C,K as d,o as S,a3 as N,D as f,N as q,R as n,s as _,p as B}from"./index-DCJUYZtV.js";import{G as V}from"./git-branch-BLstr_Gr.js";/**
|
|
2
2
|
* @license lucide-vue-next v0.474.0 - ISC
|
|
3
3
|
*
|
|
4
4
|
* This source code is licensed under the ISC license.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{u as t,J as s,q as r,z as l,n as d}from"./index-
|
|
1
|
+
import{u as t,J as s,q as r,z as l,n as d}from"./index-DCJUYZtV.js";const u=["aria-label","aria-checked","disabled"],m=t({__name:"ToggleSwitch",props:{modelValue:{type:Boolean},ariaLabel:{default:"Toggle"},disabled:{type:Boolean,default:!1}},emits:["update:modelValue"],setup(e,{emit:o}){const a=e,i=o;function n(){a.disabled||i("update:modelValue",!a.modelValue)}return(c,b)=>(s(),r("button",{type:"button",role:"switch","aria-label":e.ariaLabel,"aria-checked":e.modelValue,disabled:e.disabled,class:l(["inline-flex h-6 w-10 shrink-0 items-center rounded-full border border-border p-0.5 transition-all duration-200 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background disabled:cursor-not-allowed disabled:opacity-50",e.modelValue?"bg-gradient-brand shadow-[0_0_0_1px_rgba(228,58,156,0.35)]":"bg-muted"]),onClick:n},[d("span",{class:l(["pointer-events-none h-4 w-4 rounded-full bg-white shadow-sm ring-1 ring-black/10 transition-transform duration-200",e.modelValue?"translate-x-5":"translate-x-0"])},null,2)],10,u))}});export{m as _};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{r as L,u as j,E as Q,J as d,q as r,n as t,t as _,T as k,C as W,d as i,L as m,s as w,R as o,k as X,p as u,a4 as F,a0 as O,K as a,z as Y,D as Z,m as tt}from"./index-
|
|
1
|
+
import{r as L,u as j,E as Q,J as d,q as r,n as t,t as _,T as k,C as W,d as i,L as m,s as w,R as o,k as X,p as u,a4 as F,a0 as O,K as a,z as Y,D as Z,m as tt}from"./index-DCJUYZtV.js";import{b as T,d as q}from"./api-BiDVwQrs.js";import{T as et}from"./triangle-alert-BrzY_E1n.js";/**
|
|
2
2
|
* @license lucide-vue-next v0.474.0 - ISC
|
|
3
3
|
*
|
|
4
4
|
* This source code is licensed under the ISC license.
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{r as j,u as se,a2 as oe,J as o,q as a,d as b,L as K,m as A,n as t,o as I,T as d,a as ce,t as v,F as ve,R as N,D as pe,z,a6 as fe,p as B,K as c,E as me,B as H,s as S,a4 as V,a0 as L,a5 as R,l as Z}from"./index-
|
|
1
|
+
import{r as j,u as se,a2 as oe,J as o,q as a,d as b,L as K,m as A,n as t,o as I,T as d,a as ce,t as v,F as ve,R as N,D as pe,z,a6 as fe,p as B,K as c,E as me,B as H,s as S,a4 as V,a0 as L,a5 as R,l as Z}from"./index-DCJUYZtV.js";import{b as T,d as E,a as G}from"./api-BiDVwQrs.js";import{S as xe}from"./search-BabUvoGD.js";import{P as J}from"./plus-gmwiZVfr.js";import{P as O}from"./pencil-D4Zz_t0y.js";import{T as X}from"./trash-2-C21cNLJl.js";import{S as Y}from"./save-BvtAs5WB.js";import{X as ee}from"./x-xgLSmc9e.js";/**
|
|
2
2
|
* @license lucide-vue-next v0.474.0 - ISC
|
|
3
3
|
*
|
|
4
4
|
* This source code is licensed under the ISC license.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{V as i,O as c}from"./index-
|
|
1
|
+
import{V as i,O as c}from"./index-DCJUYZtV.js";const o="/api";function u(t){try{return JSON.parse(atob(t.split(".")[1])).exp*1e3<=Date.now()+6e4}catch{return!0}}async function n(){const t=i(),e={"Content-Type":"application/json"};return t.token&&u(t.token)&&await t.refreshToken(),t.token&&(e.Authorization=`Bearer ${t.token}`),e}async function s(t,e){if(t.status===401){const r=i();try{if(await r.refreshToken(),r.token){const a=await e();if(a.status===401)throw r.logout(),c.push("/login"),new Error("Session expired");return a}}catch{}throw r.logout(),c.push("/login"),new Error("Session expired")}return t}async function w(t){const e=await s(await fetch(`${o}${t}`,{headers:await n()}),async()=>fetch(`${o}${t}`,{headers:await n()}));if(!e.ok)throw new Error(`API error: ${e.status}`);return e.json()}async function f(t,e){const r={method:"POST",headers:await n(),body:e?JSON.stringify(e):void 0},a=await s(await fetch(`${o}${t}`,r),async()=>fetch(`${o}${t}`,{...r,headers:await n()}));if(!a.ok)throw new Error(`API error: ${a.status}`);return a.json()}async function $(t,e){const r={method:"PUT",headers:await n(),body:e?JSON.stringify(e):void 0},a=await s(await fetch(`${o}${t}`,r),async()=>fetch(`${o}${t}`,{...r,headers:await n()}));if(!a.ok)throw new Error(`API error: ${a.status}`);return a.json()}async function d(t){const e={method:"DELETE",headers:await n()},r=await s(await fetch(`${o}${t}`,e),async()=>fetch(`${o}${t}`,{...e,headers:await n()}));if(!r.ok)throw new Error(`API error: ${r.status}`);return r.json()}function p(){const t=i(),e=`${o}/stream?token=${t.token??""}`;return new EventSource(e)}export{d as a,w as b,f as c,$ as d,p as e};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
@import"https://fonts.googleapis.com/css2?family=Bebas+Neue&family=Inter:wght@400;500;600;700;800&family=JetBrains+Mono:wght@400;500;700&display=swap";.markdown-content :deep(h1),.markdown-content :deep(h2),.markdown-content :deep(h3),.markdown-content :deep(h4),.markdown-content :deep(h5),.markdown-content :deep(h6){background:linear-gradient(135deg,#d83333,#c0285e);-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent;color:transparent}.overlay-fab[data-v-0be88a62]{position:fixed;bottom:1rem;right:1rem;z-index:50;display:flex;height:2.75rem;width:2.75rem;align-items:center;justify-content:center;border-radius:1rem;--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1));--tw-shadow: 0 20px 25px -5px rgb(0 0 0 / .1), 0 8px 10px -6px rgb(0 0 0 / .1);--tw-shadow-colored: 0 20px 25px -5px var(--tw-shadow-color), 0 8px 10px -6px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow);transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}@media(min-width:640px){.overlay-fab[data-v-0be88a62]{bottom:1.5rem;right:1.5rem}}.overlay-fab[data-v-0be88a62]{background:linear-gradient(135deg,#d83333,#e43a9c 55%,#f041ff)}.overlay-fab[data-v-0be88a62]:hover{--tw-scale-x: 1.05;--tw-scale-y: 1.05;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))}.overlay-fab[data-v-0be88a62]:active{--tw-scale-x: .95;--tw-scale-y: .95;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.overlay-fab[data-v-0be88a62]:focus-visible{outline:2px solid transparent;outline-offset:2px;--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000);--tw-ring-opacity: 1;--tw-ring-color: rgb(228 58 156 / var(--tw-ring-opacity, 1));--tw-ring-offset-width: 2px;--tw-ring-offset-color: #1a1a1a}.overlay-panel[data-v-0be88a62]{position:fixed;bottom:1.25rem;right:1.25rem;z-index:50;display:flex;height:460px;width:340px;flex-direction:column;overflow:hidden;border-radius:1rem;border-width:1px;--tw-border-opacity: 1;border-color:rgb(42 42 42 / var(--tw-border-opacity, 1));--tw-shadow: 0 25px 50px -12px rgb(0 0 0 / .25);--tw-shadow-colored: 0 25px 50px -12px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow);background:#1c1c1c}.overlay-panel-dragging[data-v-0be88a62]{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000);--tw-ring-color: rgb(228 58 156 / .4)}.overlay-header[data-v-0be88a62]{display:flex;flex-shrink:0;align-items:center;justify-content:space-between;border-bottom-width:1px;--tw-border-opacity: 1;border-color:rgb(43 43 43 / var(--tw-border-opacity, 1));padding:.75rem 1rem}.overlay-brand-mark[data-v-0be88a62]{display:flex;height:1.25rem;width:1.25rem;align-items:center;justify-content:center}.overlay-title[data-v-0be88a62]{font-family:Bebas Neue,sans-serif;font-size:1.125rem;line-height:1.75rem;line-height:1;letter-spacing:.16em;--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.overlay-icon-btn[data-v-0be88a62]{border-radius:var(--radius);padding:.375rem;--tw-text-opacity: 1;color:rgb(113 113 122 / var(--tw-text-opacity, 1));transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.overlay-icon-btn[data-v-0be88a62]:hover{background-color:#ffffff12;--tw-text-opacity: 1;color:rgb(228 228 231 / var(--tw-text-opacity, 1))}.overlay-icon-btn[data-v-0be88a62]:focus-visible{outline:2px solid transparent;outline-offset:2px;--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000);--tw-ring-opacity: 1;--tw-ring-color: rgb(228 58 156 / var(--tw-ring-opacity, 1));--tw-ring-offset-width: 2px;--tw-ring-offset-color: #1c1c1c}.overlay-messages[data-v-0be88a62]{position:relative;flex:1 1 0%}.overlay-messages[data-v-0be88a62]>: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))}.overlay-messages[data-v-0be88a62]{overflow-y:auto;padding:.75rem;background:#1c1c1c}.overlay-empty-brand[data-v-0be88a62]{margin-left:auto;margin-right:auto;margin-bottom:.75rem;display:flex;height:2.5rem;width:2.5rem;align-items:center;justify-content:center;border-radius:9999px;border-width:1px;border-color:#ffffff1a;--tw-bg-opacity: 1;background-color:rgb(37 37 37 / var(--tw-bg-opacity, 1))}.overlay-empty-copy[data-v-0be88a62]{margin-top:0;font-size:.75rem;line-height:1rem;--tw-text-opacity: 1;color:rgb(113 113 122 / var(--tw-text-opacity, 1));font-family:Inter,sans-serif}.overlay-avatar[data-v-0be88a62]{margin-top:.125rem;display:flex;height:1.25rem;width:1.25rem;flex-shrink:0;align-items:center;justify-content:center;border-radius:var(--radius);border-width:1px;font-size:9px;font-weight:700}.overlay-avatar-assistant[data-v-0be88a62]{background:#282828;border-color:#ffffff0d}.overlay-avatar-user[data-v-0be88a62]{border-color:#ffffff14;background:linear-gradient(135deg,#d83333,#c0285e);color:#fff}.overlay-avatar-letter[data-v-0be88a62]{line-height:1}.overlay-bubble[data-v-0be88a62]{max-width:82%;border-radius:.75rem;padding:.5rem .75rem;font-size:9px;line-height:1.625}.overlay-bubble-assistant[data-v-0be88a62]{background:#282828;border:1px solid rgba(255,255,255,.05);color:#e4e4e7}.overlay-bubble-user[data-v-0be88a62]{background:linear-gradient(135deg,#d83333,#c0285e);color:#fff}.overlay-attachment[data-v-0be88a62]{border-radius:var(--radius);border-width:1px;--tw-border-opacity: 1;border-color:rgb(43 43 43 / var(--tw-border-opacity, 1));background-color:#252525e6;padding:.5rem;font-size:9px;--tw-text-opacity: 1;color:rgb(228 228 231 / var(--tw-text-opacity, 1))}.overlay-markdown[data-v-0be88a62] p:last-child{margin-bottom:0}.overlay-markdown[data-v-0be88a62] pre{border-radius:var(--radius);border-width:1px;--tw-border-opacity: 1;border-color:rgb(43 43 43 / var(--tw-border-opacity, 1));--tw-bg-opacity: 1;background-color:rgb(31 31 31 / var(--tw-bg-opacity, 1));padding:0}.overlay-markdown[data-v-0be88a62] pre code{display:block;overflow-x:auto;padding:.5rem .75rem;font-size:11px;font-family:JetBrains Mono,ui-monospace,SFMono-Regular,Menlo,monospace}.overlay-stream-indicator[data-v-0be88a62]{margin-top:.25rem;display:flex;width:-moz-fit-content;width:fit-content;align-items:center;gap:.25rem;border-radius:.75rem;border-top-left-radius:calc(var(--radius) - 4px);border-width:1px;--tw-border-opacity: 1;border-color:rgb(42 42 42 / var(--tw-border-opacity, 1));--tw-bg-opacity: 1;background-color:rgb(40 40 40 / var(--tw-bg-opacity, 1));padding:.625rem .75rem}.overlay-stream-dot[data-v-0be88a62]{height:.25rem;width:.25rem;border-radius:9999px;--tw-bg-opacity: 1;background-color:rgb(228 58 156 / var(--tw-bg-opacity, 1));animation:bounce-0be88a62 1s infinite}.overlay-scroll-hint[data-v-0be88a62]{position:absolute;bottom:6rem;left:50%;z-index:10;display:inline-flex;--tw-translate-x: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));align-items:center;gap:.25rem;border-radius:9999px;border-width:1px;--tw-border-opacity: 1;border-color:rgb(42 42 42 / var(--tw-border-opacity, 1));background-color:#252525f2;padding:.25rem .625rem;font-size:10px;--tw-text-opacity: 1;color:rgb(212 212 216 / var(--tw-text-opacity, 1));--tw-backdrop-blur: blur(8px);-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);font-family:JetBrains Mono,ui-monospace,SFMono-Regular,Menlo,monospace}.overlay-footer[data-v-0be88a62]{flex-shrink:0;border-top-width:1px;--tw-border-opacity: 1;border-color:rgb(42 42 42 / var(--tw-border-opacity, 1));--tw-bg-opacity: 1;background-color:rgb(28 28 28 / var(--tw-bg-opacity, 1));padding:.625rem}.overlay-chip[data-v-0be88a62]{display:flex;align-items:center;gap:.375rem;border-radius:calc(var(--radius) - 2px);border-width:1px;--tw-border-opacity: 1;border-color:rgb(45 45 45 / var(--tw-border-opacity, 1));--tw-bg-opacity: 1;background-color:rgb(44 44 44 / var(--tw-bg-opacity, 1));padding:.25rem .375rem;font-size:10px;--tw-text-opacity: 1;color:rgb(228 228 231 / var(--tw-text-opacity, 1));font-family:JetBrains Mono,ui-monospace,SFMono-Regular,Menlo,monospace}.overlay-attach-btn[data-v-0be88a62]{display:flex;height:2rem;width:2rem;flex-shrink:0;align-items:center;justify-content:center;border-radius:var(--radius);border-width:1px;--tw-border-opacity: 1;border-color:rgb(45 45 45 / var(--tw-border-opacity, 1));--tw-bg-opacity: 1;background-color:rgb(37 37 37 / var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(113 113 122 / var(--tw-text-opacity, 1));transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.overlay-attach-btn[data-v-0be88a62]:disabled{cursor:not-allowed;opacity:.45}.overlay-attach-btn[data-v-0be88a62]:hover:not(:disabled){--tw-border-opacity: 1;border-color:rgb(58 58 58 / var(--tw-border-opacity, 1));--tw-bg-opacity: 1;background-color:rgb(42 42 42 / var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(212 212 216 / var(--tw-text-opacity, 1))}.overlay-attach-btn[data-v-0be88a62]:focus-visible{outline:2px solid transparent;outline-offset:2px;--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000);--tw-ring-opacity: 1;--tw-ring-color: rgb(228 58 156 / var(--tw-ring-opacity, 1));--tw-ring-offset-width: 2px;--tw-ring-offset-color: #1c1c1c}.overlay-composer-field[data-v-0be88a62]{display:flex;align-items:center;gap:.5rem}.overlay-input[data-v-0be88a62]{min-height:36px;flex:1 1 0%;resize:none;border-radius:.75rem;border-width:1px;--tw-border-opacity: 1;border-color:rgb(45 45 45 / var(--tw-border-opacity, 1));--tw-bg-opacity: 1;background-color:rgb(37 37 37 / var(--tw-bg-opacity, 1));padding:.5rem .75rem;font-size:11px;line-height:1.625;--tw-text-opacity: 1;color:rgb(228 228 231 / var(--tw-text-opacity, 1));transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.overlay-input[data-v-0be88a62]::-moz-placeholder{--tw-text-opacity: 1;color:rgb(63 63 70 / var(--tw-text-opacity, 1))}.overlay-input[data-v-0be88a62]::placeholder{--tw-text-opacity: 1;color:rgb(63 63 70 / var(--tw-text-opacity, 1))}.overlay-input[data-v-0be88a62]:focus{outline:2px solid transparent;outline-offset:2px}.overlay-input[data-v-0be88a62]{max-height:100px;font-family:Inter,sans-serif}.overlay-input[data-v-0be88a62]:focus{border-color:#e43a9c4d}.overlay-send-btn[data-v-0be88a62]{display:flex;height:2rem;width:2rem;flex-shrink:0;align-items:center;justify-content:center;border-radius:var(--radius);--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1));transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.overlay-send-btn[data-v-0be88a62]:disabled{cursor:not-allowed;opacity:.3}.overlay-send-btn[data-v-0be88a62]{background:linear-gradient(135deg,#d83333,#e43a9c)}.overlay-send-btn[data-v-0be88a62]:hover:not(:disabled){--tw-brightness: brightness(1.1);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)}.overlay-send-btn[data-v-0be88a62]:active:not(:disabled){--tw-brightness: brightness(1);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)}.overlay-send-btn[data-v-0be88a62]:focus-visible{outline:2px solid transparent;outline-offset:2px;--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000);--tw-ring-opacity: 1;--tw-ring-color: rgb(228 58 156 / var(--tw-ring-opacity, 1));--tw-ring-offset-width: 2px;--tw-ring-offset-color: #252525}.overlay-meta[data-v-0be88a62]{font-family:JetBrains Mono,ui-monospace,SFMono-Regular,Menlo,monospace}@keyframes bounce-0be88a62{0%,80%,to{transform:translateY(0);opacity:.55}40%{transform:translateY(-3px);opacity: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% 10%;--foreground: 0 0% 96%;--card: 0 0% 13%;--card-foreground: 0 0% 96%;--popover: 0 0% 14%;--popover-foreground: 0 0% 96%;--primary: 323 78% 57%;--primary-foreground: 0 0% 100%;--secondary: 0 0% 18%;--secondary-foreground: 0 0% 94%;--muted: 0 0% 20%;--muted-foreground: 25 8% 64%;--accent: 320 34% 14%;--accent-foreground: 323 78% 62%;--destructive: 0 84% 60%;--destructive-foreground: 0 0% 98%;--border: 0 0% 100% / .08;--input: 0 0% 18%;--ring: 323 78% 57%;--radius: 1rem;--gradient-start: 0 69% 52%;--gradient-mid: 323 78% 57%;--gradient-end: 280 96% 66%;--sidebar: 0 0% 9%;--header: 0 0% 11%}.dark{--background: 0 0% 10%;--foreground: 0 0% 96%;--card: 0 0% 13%;--card-foreground: 0 0% 96%;--popover: 0 0% 14%;--popover-foreground: 0 0% 96%;--primary: 323 78% 57%;--primary-foreground: 0 0% 100%;--secondary: 0 0% 18%;--secondary-foreground: 0 0% 94%;--muted: 0 0% 20%;--muted-foreground: 25 8% 64%;--accent: 320 34% 14%;--accent-foreground: 323 78% 62%;--destructive: 0 84% 60%;--destructive-foreground: 0 0% 98%;--border: 0 0% 100% / .08;--input: 0 0% 18%;--ring: 323 78% 57%;--radius: 1rem;--gradient-start: 0 69% 52%;--gradient-mid: 323 78% 57%;--gradient-end: 280 96% 66%;--sidebar: 0 0% 9%;--header: 0 0% 11%}*{border-color:hsl(var(--border))}body{background-color:hsl(var(--background));color:hsl(var(--foreground));font-family:Inter,system-ui,-apple-system,sans-serif;letter-spacing:-.01em;background-image:radial-gradient(circle at top,rgba(228,58,156,.1),transparent 24%),radial-gradient(circle at bottom,rgba(255,255,255,.05),transparent 26%),linear-gradient(180deg,hsl(var(--background)),hsl(var(--background)));background-attachment:fixed}.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}.prose-invert{--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)}.font-display{font-family:Bebas Neue,Inter,sans-serif}.btn-gradient{position:relative;overflow:hidden;border-radius:.75rem;padding:.5rem .75rem;font-size:.875rem;line-height:1.25rem;font-weight:500;--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1));transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.2s;background-image:linear-gradient(135deg,hsl(var(--gradient-start)),hsl(var(--gradient-mid)),hsl(var(--gradient-end)));background-size:200% auto;background-position:center;animation:gradientShift 6s linear infinite;animation-play-state:paused;box-shadow:0 12px 30px -14px hsl(var(--gradient-mid) / .65)}.btn-gradient:hover{animation-play-state:running;transform:translateY(-1px);box-shadow:0 16px 34px -16px hsl(var(--gradient-mid) / .85)}.btn-gradient:active{transform:translateY(0)}.btn-gradient:disabled{opacity:.5;transform:none;box-shadow:none;cursor:not-allowed}.pointer-events-none{pointer-events:none}.visible{visibility:visible}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.bottom-24{bottom:6rem}.bottom-4{bottom:1rem}.bottom-5{bottom:1.25rem}.bottom-full{bottom:100%}.left-1\/2{left:50%}.left-2{left:.5rem}.left-2\.5{left:.625rem}.left-4{left:1rem}.right-1{right:.25rem}.right-4{right:1rem}.right-5{right:1.25rem}.top-1\/2{top:50%}.top-2\.5{top:.625rem}.z-10{z-index:10}.z-50{z-index:50}.mx-auto{margin-left:auto;margin-right:auto}.-mt-0\.5{margin-top:-.125rem}.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}.mr-1{margin-right:.25rem}.mr-1\.5{margin-right:.375rem}.mt-0{margin-top:0}.mt-0\.5{margin-top:.125rem}.mt-1{margin-top:.25rem}.mt-2{margin-top:.5rem}.mt-3{margin-top:.75rem}.mt-4{margin-top:1rem}.mt-8{margin-top:2rem}.line-clamp-2{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2}.block{display:block}.inline-block{display:inline-block}.inline{display:inline}.flex{display:flex}.inline-flex{display:inline-flex}.table{display:table}.grid{display:grid}.hidden{display:none}.h-1{height:.25rem}.h-10{height:2.5rem}.h-11{height:2.75rem}.h-12{height:3rem}.h-2{height:.5rem}.h-3{height:.75rem}.h-3\.5{height:.875rem}.h-32{height:8rem}.h-4{height:1rem}.h-5{height:1.25rem}.h-6{height:1.5rem}.h-7{height:1.75rem}.h-8{height:2rem}.h-96{height:24rem}.h-\[460px\]{height:460px}.h-full{height:100%}.h-screen{height:100vh}.max-h-44{max-height:11rem}.max-h-\[120px\]{max-height:120px}.min-h-\[36px\]{min-height:36px}.min-h-\[400px\]{min-height:400px}.min-h-\[40px\]{min-height:40px}.min-h-screen{min-height:100vh}.w-1{width:.25rem}.w-10{width:2.5rem}.w-11{width:2.75rem}.w-12{width:3rem}.w-16{width:4rem}.w-2{width:.5rem}.w-3{width:.75rem}.w-3\.5{width:.875rem}.w-4{width:1rem}.w-5{width:1.25rem}.w-56{width:14rem}.w-6{width:1.5rem}.w-64{width:16rem}.w-7{width:1.75rem}.w-72{width:18rem}.w-8{width:2rem}.w-80{width:20rem}.w-\[340px\]{width:340px}.w-fit{width:-moz-fit-content;width:fit-content}.w-full{width:100%}.min-w-0{min-width:0px}.min-w-\[4px\]{min-width:4px}.max-w-\[120px\]{max-width:120px}.max-w-\[170px\]{max-width:170px}.max-w-\[75\%\]{max-width:75%}.max-w-\[82\%\]{max-width:82%}.max-w-full{max-width:100%}.max-w-lg{max-width:32rem}.max-w-md{max-width:28rem}.max-w-none{max-width:none}.max-w-sm{max-width:24rem}.flex-1{flex:1 1 0%}.flex-shrink-0,.shrink-0{flex-shrink:0}.-translate-x-1\/2{--tw-translate-x: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-y-1\/2{--tw-translate-y: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-0{--tw-translate-x: 0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-5{--tw-translate-x: 1.25rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-y-0{--tw-translate-y: 0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-y-4{--tw-translate-y: 1rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.scale-100{--tw-scale-x: 1;--tw-scale-y: 1;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.scale-\[0\.98\]{--tw-scale-x: .98;--tw-scale-y: .98;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes ping{75%,to{transform:scale(2);opacity:0}}.animate-ping{animation:ping 1s cubic-bezier(0,0,.2,1) infinite}@keyframes pulse{50%{opacity:.5}}.animate-pulse{animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite}@keyframes spin{to{transform:rotate(360deg)}}.animate-spin{animation:spin 1s linear infinite}.cursor-pointer{cursor:pointer}.select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.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))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.flex-row-reverse{flex-direction:row-reverse}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.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-2\.5{gap:.625rem}.gap-3{gap:.75rem}.gap-4{gap:1rem}.space-y-0\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.125rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.125rem * var(--tw-space-y-reverse))}.space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.25rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.25rem * var(--tw-space-y-reverse))}.space-y-1\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.375rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.375rem * var(--tw-space-y-reverse))}.space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.5rem * var(--tw-space-y-reverse))}.space-y-3>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.75rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.75rem * var(--tw-space-y-reverse))}.space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem * var(--tw-space-y-reverse))}.space-y-6>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.5rem * var(--tw-space-y-reverse))}.space-y-8>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(2rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(2rem * var(--tw-space-y-reverse))}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.break-words{overflow-wrap:break-word}.break-all{word-break:break-all}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:1rem}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:var(--radius)}.rounded-md{border-radius:calc(var(--radius) - 2px)}.rounded-xl{border-radius:.75rem}.rounded-t{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.rounded-tl-sm{border-top-left-radius:calc(var(--radius) - 4px)}.rounded-tr-sm{border-top-right-radius:calc(var(--radius) - 4px)}.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-l-4{border-left-width:4px}.border-r{border-right-width:1px}.border-t{border-top-width:1px}.border-\[\#2a2a2a\]{--tw-border-opacity: 1;border-color:rgb(42 42 42 / var(--tw-border-opacity, 1))}.border-\[\#2b2b2b\]{--tw-border-opacity: 1;border-color:rgb(43 43 43 / var(--tw-border-opacity, 1))}.border-\[\#2d2d2d\]{--tw-border-opacity: 1;border-color:rgb(45 45 45 / var(--tw-border-opacity, 1))}.border-\[\#3a3a3a\]{--tw-border-opacity: 1;border-color:rgb(58 58 58 / var(--tw-border-opacity, 1))}.border-border{border-color:hsl(var(--border))}.border-border\/50{border-color:hsl(var(--border) / .5)}.border-destructive\/30{border-color:hsl(var(--destructive) / .3)}.border-green-500\/30{border-color:#22c55e4d}.border-input{border-color:hsl(var(--input))}.border-primary{border-color:hsl(var(--primary))}.border-red-500\/50{border-color:#ef444480}.border-transparent{border-color:transparent}.border-white\/10{border-color:#ffffff1a}.border-yellow-500\/20{border-color:#eab30833}.border-l-blue-500{--tw-border-opacity: 1;border-left-color:rgb(59 130 246 / var(--tw-border-opacity, 1))}.border-l-green-500{--tw-border-opacity: 1;border-left-color:rgb(34 197 94 / var(--tw-border-opacity, 1))}.border-l-primary{border-left-color:hsl(var(--primary))}.border-l-red-500{--tw-border-opacity: 1;border-left-color:rgb(239 68 68 / var(--tw-border-opacity, 1))}.border-l-yellow-500{--tw-border-opacity: 1;border-left-color:rgb(234 179 8 / var(--tw-border-opacity, 1))}.bg-\[\#1c1c1c\]{--tw-bg-opacity: 1;background-color:rgb(28 28 28 / var(--tw-bg-opacity, 1))}.bg-\[\#1f1f1f\]{--tw-bg-opacity: 1;background-color:rgb(31 31 31 / var(--tw-bg-opacity, 1))}.bg-\[\#252525\]{--tw-bg-opacity: 1;background-color:rgb(37 37 37 / var(--tw-bg-opacity, 1))}.bg-\[\#252525\]\/90{background-color:#252525e6}.bg-\[\#252525\]\/95{background-color:#252525f2}.bg-\[\#282828\]{--tw-bg-opacity: 1;background-color:rgb(40 40 40 / var(--tw-bg-opacity, 1))}.bg-\[\#2a2a2a\]{--tw-bg-opacity: 1;background-color:rgb(42 42 42 / var(--tw-bg-opacity, 1))}.bg-\[\#2c2c2c\]{--tw-bg-opacity: 1;background-color:rgb(44 44 44 / var(--tw-bg-opacity, 1))}.bg-\[\#E43A9C\]{--tw-bg-opacity: 1;background-color:rgb(228 58 156 / var(--tw-bg-opacity, 1))}.bg-accent{background-color:hsl(var(--accent))}.bg-accent\/40{background-color:hsl(var(--accent) / .4)}.bg-background{background-color:hsl(var(--background))}.bg-background\/70{background-color:hsl(var(--background) / .7)}.bg-blue-500\/10{background-color:#3b82f61a}.bg-blue-500\/20{background-color:#3b82f633}.bg-blue-600{--tw-bg-opacity: 1;background-color:rgb(37 99 235 / var(--tw-bg-opacity, 1))}.bg-card{background-color:hsl(var(--card))}.bg-current{background-color:currentColor}.bg-green-500\/10{background-color:#22c55e1a}.bg-green-500\/20{background-color:#22c55e33}.bg-header{background-color:hsl(var(--header))}.bg-indigo-500\/20{background-color:#6366f133}.bg-input{background-color:hsl(var(--input))}.bg-muted{background-color:hsl(var(--muted))}.bg-muted\/10{background-color:hsl(var(--muted) / .1)}.bg-muted\/20{background-color:hsl(var(--muted) / .2)}.bg-muted\/30{background-color:hsl(var(--muted) / .3)}.bg-orange-500\/10{background-color:#f973161a}.bg-primary{background-color:hsl(var(--primary))}.bg-primary\/10{background-color:hsl(var(--primary) / .1)}.bg-primary\/60{background-color:hsl(var(--primary) / .6)}.bg-purple-500\/10{background-color:#a855f71a}.bg-purple-500\/20{background-color:#a855f733}.bg-red-500\/10{background-color:#ef44441a}.bg-red-500\/20{background-color:#ef444433}.bg-secondary{background-color:hsl(var(--secondary))}.bg-sidebar{background-color:hsl(var(--sidebar))}.bg-teal-500\/20{background-color:#14b8a633}.bg-white{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1))}.bg-white\/\[0\.07\]{background-color:#ffffff12}.bg-yellow-500{--tw-bg-opacity: 1;background-color:rgb(234 179 8 / var(--tw-bg-opacity, 1))}.bg-yellow-500\/10{background-color:#eab3081a}.bg-yellow-500\/20{background-color:#eab30833}.bg-gradient-brand{background-image:linear-gradient(135deg,hsl(var(--gradient-start)),hsl(var(--gradient-mid)),hsl(var(--gradient-end)))}.bg-clip-text{-webkit-background-clip:text;background-clip:text}.object-contain{-o-object-fit:contain;object-fit:contain}.p-0\.5{padding:.125rem}.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{padding-left:.25rem;padding-right:.25rem}.px-1\.5{padding-left:.375rem;padding-right:.375rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-2\.5{padding-left:.625rem;padding-right:.625rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.px-5{padding-left:1.25rem;padding-right:1.25rem}.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-2\.5{padding-top:.625rem;padding-bottom:.625rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.py-8{padding-top:2rem;padding-bottom:2rem}.pb-3{padding-bottom:.75rem}.pl-6{padding-left:1.5rem}.pl-8{padding-left:2rem}.pr-2{padding-right:.5rem}.pr-3{padding-right:.75rem}.pt-1{padding-top:.25rem}.pt-2{padding-top:.5rem}.pt-3{padding-top:.75rem}.pt-4{padding-top:1rem}.text-left{text-align:left}.text-center{text-align:center}.text-right{text-align:right}.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-\[1\.1rem\]{font-size:1.1rem}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.text-\[9px\]{font-size:9px}.text-base{font-size:1rem;line-height:1.5rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xs{font-size:.75rem;line-height:1rem}.font-bold{font-weight:700}.font-medium{font-weight:500}.font-normal{font-weight:400}.font-semibold{font-weight:600}.uppercase{text-transform:uppercase}.leading-none{line-height:1}.leading-relaxed{line-height:1.625}.tracking-\[0\.16em\]{letter-spacing:.16em}.tracking-\[0\.18em\]{letter-spacing:.18em}.tracking-wide{letter-spacing:.025em}.text-\[\#ef4444\]{--tw-text-opacity: 1;color:rgb(239 68 68 / var(--tw-text-opacity, 1))}.text-accent-foreground{color:hsl(var(--accent-foreground))}.text-blue-400{--tw-text-opacity: 1;color:rgb(96 165 250 / var(--tw-text-opacity, 1))}.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-400{--tw-text-opacity: 1;color:rgb(74 222 128 / var(--tw-text-opacity, 1))}.text-green-500{--tw-text-opacity: 1;color:rgb(34 197 94 / var(--tw-text-opacity, 1))}.text-indigo-400{--tw-text-opacity: 1;color:rgb(129 140 248 / var(--tw-text-opacity, 1))}.text-muted-foreground{color:hsl(var(--muted-foreground))}.text-orange-500{--tw-text-opacity: 1;color:rgb(249 115 22 / var(--tw-text-opacity, 1))}.text-primary{color:hsl(var(--primary))}.text-primary-foreground{color:hsl(var(--primary-foreground))}.text-purple-400{--tw-text-opacity: 1;color:rgb(192 132 252 / var(--tw-text-opacity, 1))}.text-purple-500{--tw-text-opacity: 1;color:rgb(168 85 247 / var(--tw-text-opacity, 1))}.text-red-400{--tw-text-opacity: 1;color:rgb(248 113 113 / 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-teal-400{--tw-text-opacity: 1;color:rgb(45 212 191 / var(--tw-text-opacity, 1))}.text-transparent{color:transparent}.text-white{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.text-yellow-400{--tw-text-opacity: 1;color:rgb(250 204 21 / var(--tw-text-opacity, 1))}.text-yellow-500{--tw-text-opacity: 1;color:rgb(234 179 8 / var(--tw-text-opacity, 1))}.text-yellow-600{--tw-text-opacity: 1;color:rgb(202 138 4 / var(--tw-text-opacity, 1))}.text-zinc-200{--tw-text-opacity: 1;color:rgb(228 228 231 / var(--tw-text-opacity, 1))}.text-zinc-300{--tw-text-opacity: 1;color:rgb(212 212 216 / var(--tw-text-opacity, 1))}.text-zinc-500{--tw-text-opacity: 1;color:rgb(113 113 122 / var(--tw-text-opacity, 1))}.underline{text-decoration-line:underline}.opacity-0{opacity:0}.opacity-100{opacity:1}.opacity-40{opacity:.4}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.opacity-65{opacity:.65}.opacity-70{opacity:.7}.shadow-\[0_0_0_1px_rgba\(228\,58\,156\,0\.35\)\]{--tw-shadow: 0 0 0 1px rgba(228,58,156,.35);--tw-shadow-colored: 0 0 0 1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-sm{--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-xl{--tw-shadow: 0 20px 25px -5px rgb(0 0 0 / .1), 0 8px 10px -6px rgb(0 0 0 / .1);--tw-shadow-colored: 0 20px 25px -5px var(--tw-shadow-color), 0 8px 10px -6px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.outline-none{outline:2px solid transparent;outline-offset:2px}.ring-1{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.ring-2{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.ring-\[\#E43A9C\]{--tw-ring-opacity: 1;--tw-ring-color: rgb(228 58 156 / var(--tw-ring-opacity, 1))}.ring-black\/10{--tw-ring-color: rgb(0 0 0 / .1)}.ring-offset-2{--tw-ring-offset-width: 2px}.ring-offset-\[\#1a1a1a\]{--tw-ring-offset-color: #1a1a1a}.ring-offset-\[\#1c1c1c\]{--tw-ring-offset-color: #1c1c1c}.ring-offset-\[\#252525\]{--tw-ring-offset-color: #252525}.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-all{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-opacity{transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-transform{transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.duration-150{transition-duration:.15s}.duration-200{transition-duration:.2s}.ease-in{transition-timing-function:cubic-bezier(.4,0,1,1)}.ease-out{transition-timing-function:cubic-bezier(0,0,.2,1)}@keyframes gradientShift{0%,to{background-position:0% 50%}50%{background-position:100% 50%}}.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)}.placeholder\:text-muted-foreground::-moz-placeholder{color:hsl(var(--muted-foreground))}.placeholder\:text-muted-foreground::placeholder{color:hsl(var(--muted-foreground))}.placeholder\:text-zinc-700::-moz-placeholder{--tw-text-opacity: 1;color:rgb(63 63 70 / var(--tw-text-opacity, 1))}.placeholder\:text-zinc-700::placeholder{--tw-text-opacity: 1;color:rgb(63 63 70 / var(--tw-text-opacity, 1))}.hover\:border-foreground:hover{border-color:hsl(var(--foreground))}.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-accent\/70:hover{background-color:hsl(var(--accent) / .7)}.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\/10:hover{background-color:hsl(var(--primary) / .1)}.hover\:bg-primary\/90:hover{background-color:hsl(var(--primary) / .9)}.hover\:bg-red-500\/10:hover{background-color:#ef44441a}.hover\:bg-secondary\/80:hover{background-color:hsl(var(--secondary) / .8)}.hover\:bg-white\/5:hover{background-color:#ffffff0d}.hover\:text-destructive:hover{color:hsl(var(--destructive))}.hover\:text-foreground:hover{color:hsl(var(--foreground))}.hover\:text-primary:hover{color:hsl(var(--primary))}.hover\:text-red-400:hover{--tw-text-opacity: 1;color:rgb(248 113 113 / var(--tw-text-opacity, 1))}.hover\:underline:hover{text-decoration-line:underline}.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))}.focus-visible\:outline-none:focus-visible{outline:2px solid transparent;outline-offset:2px}.focus-visible\:ring-2:focus-visible{--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-visible\:ring-ring:focus-visible{--tw-ring-color: hsl(var(--ring))}.focus-visible\:ring-offset-2:focus-visible{--tw-ring-offset-width: 2px}.focus-visible\:ring-offset-background:focus-visible{--tw-ring-offset-color: hsl(var(--background))}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-40:disabled{opacity:.4}.disabled\:opacity-50:disabled{opacity:.5}.group:hover .group-hover\:block{display:block}.group:hover .group-hover\:opacity-100{opacity:1}@media(min-width:640px){.sm\:bottom-6{bottom:1.5rem}}@media(min-width:768px){.md\:flex{display:flex}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.md\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}}@media(min-width:1024px){.lg\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.lg\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}}@media(min-width:1280px){.xl\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}}
|
|
1
|
+
@import"https://fonts.googleapis.com/css2?family=Bebas+Neue&family=Inter:wght@400;500;600;700;800&family=JetBrains+Mono:wght@400;500;700&display=swap";.markdown-content :deep(h1),.markdown-content :deep(h2),.markdown-content :deep(h3),.markdown-content :deep(h4),.markdown-content :deep(h5),.markdown-content :deep(h6){background:linear-gradient(135deg,#d83333,#c0285e);-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent;color:transparent}.overlay-fab[data-v-0be88a62]{position:fixed;bottom:1rem;right:1rem;z-index:50;display:flex;height:2.75rem;width:2.75rem;align-items:center;justify-content:center;border-radius:1rem;--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1));--tw-shadow: 0 20px 25px -5px rgb(0 0 0 / .1), 0 8px 10px -6px rgb(0 0 0 / .1);--tw-shadow-colored: 0 20px 25px -5px var(--tw-shadow-color), 0 8px 10px -6px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow);transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}@media(min-width:640px){.overlay-fab[data-v-0be88a62]{bottom:1.5rem;right:1.5rem}}.overlay-fab[data-v-0be88a62]{background:linear-gradient(135deg,#d83333,#e43a9c 55%,#f041ff)}.overlay-fab[data-v-0be88a62]:hover{--tw-scale-x: 1.05;--tw-scale-y: 1.05;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))}.overlay-fab[data-v-0be88a62]:active{--tw-scale-x: .95;--tw-scale-y: .95;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.overlay-fab[data-v-0be88a62]:focus-visible{outline:2px solid transparent;outline-offset:2px;--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000);--tw-ring-opacity: 1;--tw-ring-color: rgb(228 58 156 / var(--tw-ring-opacity, 1));--tw-ring-offset-width: 2px;--tw-ring-offset-color: #1a1a1a}.overlay-panel[data-v-0be88a62]{position:fixed;bottom:1.25rem;right:1.25rem;z-index:50;display:flex;height:460px;width:340px;flex-direction:column;overflow:hidden;border-radius:1rem;border-width:1px;--tw-border-opacity: 1;border-color:rgb(42 42 42 / var(--tw-border-opacity, 1));--tw-shadow: 0 25px 50px -12px rgb(0 0 0 / .25);--tw-shadow-colored: 0 25px 50px -12px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow);background:#1c1c1c}.overlay-panel-dragging[data-v-0be88a62]{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000);--tw-ring-color: rgb(228 58 156 / .4)}.overlay-header[data-v-0be88a62]{display:flex;flex-shrink:0;align-items:center;justify-content:space-between;border-bottom-width:1px;--tw-border-opacity: 1;border-color:rgb(43 43 43 / var(--tw-border-opacity, 1));padding:.75rem 1rem}.overlay-brand-mark[data-v-0be88a62]{display:flex;height:1.25rem;width:1.25rem;align-items:center;justify-content:center}.overlay-title[data-v-0be88a62]{font-family:Bebas Neue,sans-serif;font-size:1.125rem;line-height:1.75rem;line-height:1;letter-spacing:.16em;--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.overlay-icon-btn[data-v-0be88a62]{border-radius:var(--radius);padding:.375rem;--tw-text-opacity: 1;color:rgb(113 113 122 / var(--tw-text-opacity, 1));transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.overlay-icon-btn[data-v-0be88a62]:hover{background-color:#ffffff12;--tw-text-opacity: 1;color:rgb(228 228 231 / var(--tw-text-opacity, 1))}.overlay-icon-btn[data-v-0be88a62]:focus-visible{outline:2px solid transparent;outline-offset:2px;--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000);--tw-ring-opacity: 1;--tw-ring-color: rgb(228 58 156 / var(--tw-ring-opacity, 1));--tw-ring-offset-width: 2px;--tw-ring-offset-color: #1c1c1c}.overlay-messages[data-v-0be88a62]{position:relative;flex:1 1 0%}.overlay-messages[data-v-0be88a62]>: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))}.overlay-messages[data-v-0be88a62]{overflow-y:auto;padding:.75rem;background:#1c1c1c}.overlay-empty-brand[data-v-0be88a62]{margin-left:auto;margin-right:auto;margin-bottom:.75rem;display:flex;height:2.5rem;width:2.5rem;align-items:center;justify-content:center;border-radius:9999px;border-width:1px;border-color:#ffffff1a;--tw-bg-opacity: 1;background-color:rgb(37 37 37 / var(--tw-bg-opacity, 1))}.overlay-empty-copy[data-v-0be88a62]{margin-top:0;font-size:.75rem;line-height:1rem;--tw-text-opacity: 1;color:rgb(113 113 122 / var(--tw-text-opacity, 1));font-family:Inter,sans-serif}.overlay-avatar[data-v-0be88a62]{margin-top:.125rem;display:flex;height:1.25rem;width:1.25rem;flex-shrink:0;align-items:center;justify-content:center;border-radius:var(--radius);border-width:1px;font-size:9px;font-weight:700}.overlay-avatar-assistant[data-v-0be88a62]{background:#282828;border-color:#ffffff0d}.overlay-avatar-user[data-v-0be88a62]{border-color:#ffffff14;background:linear-gradient(135deg,#d83333,#c0285e);color:#fff}.overlay-avatar-letter[data-v-0be88a62]{line-height:1}.overlay-bubble[data-v-0be88a62]{max-width:82%;border-radius:.75rem;padding:.5rem .75rem;font-size:9px;line-height:1.625}.overlay-bubble-assistant[data-v-0be88a62]{background:#282828;border:1px solid rgba(255,255,255,.05);color:#e4e4e7}.overlay-bubble-user[data-v-0be88a62]{background:linear-gradient(135deg,#d83333,#c0285e);color:#fff}.overlay-attachment[data-v-0be88a62]{border-radius:var(--radius);border-width:1px;--tw-border-opacity: 1;border-color:rgb(43 43 43 / var(--tw-border-opacity, 1));background-color:#252525e6;padding:.5rem;font-size:9px;--tw-text-opacity: 1;color:rgb(228 228 231 / var(--tw-text-opacity, 1))}.overlay-markdown[data-v-0be88a62] p:last-child{margin-bottom:0}.overlay-markdown[data-v-0be88a62] pre{border-radius:var(--radius);border-width:1px;--tw-border-opacity: 1;border-color:rgb(43 43 43 / var(--tw-border-opacity, 1));--tw-bg-opacity: 1;background-color:rgb(31 31 31 / var(--tw-bg-opacity, 1));padding:0}.overlay-markdown[data-v-0be88a62] pre code{display:block;overflow-x:auto;padding:.5rem .75rem;font-size:11px;font-family:JetBrains Mono,ui-monospace,SFMono-Regular,Menlo,monospace}.overlay-stream-indicator[data-v-0be88a62]{margin-top:.25rem;display:flex;width:-moz-fit-content;width:fit-content;align-items:center;gap:.25rem;border-radius:.75rem;border-top-left-radius:calc(var(--radius) - 4px);border-width:1px;--tw-border-opacity: 1;border-color:rgb(42 42 42 / var(--tw-border-opacity, 1));--tw-bg-opacity: 1;background-color:rgb(40 40 40 / var(--tw-bg-opacity, 1));padding:.625rem .75rem}.overlay-stream-dot[data-v-0be88a62]{height:.25rem;width:.25rem;border-radius:9999px;--tw-bg-opacity: 1;background-color:rgb(228 58 156 / var(--tw-bg-opacity, 1));animation:bounce-0be88a62 1s infinite}.overlay-scroll-hint[data-v-0be88a62]{position:absolute;bottom:6rem;left:50%;z-index:10;display:inline-flex;--tw-translate-x: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));align-items:center;gap:.25rem;border-radius:9999px;border-width:1px;--tw-border-opacity: 1;border-color:rgb(42 42 42 / var(--tw-border-opacity, 1));background-color:#252525f2;padding:.25rem .625rem;font-size:10px;--tw-text-opacity: 1;color:rgb(212 212 216 / var(--tw-text-opacity, 1));--tw-backdrop-blur: blur(8px);-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);font-family:JetBrains Mono,ui-monospace,SFMono-Regular,Menlo,monospace}.overlay-footer[data-v-0be88a62]{flex-shrink:0;border-top-width:1px;--tw-border-opacity: 1;border-color:rgb(42 42 42 / var(--tw-border-opacity, 1));--tw-bg-opacity: 1;background-color:rgb(28 28 28 / var(--tw-bg-opacity, 1));padding:.625rem}.overlay-chip[data-v-0be88a62]{display:flex;align-items:center;gap:.375rem;border-radius:calc(var(--radius) - 2px);border-width:1px;--tw-border-opacity: 1;border-color:rgb(45 45 45 / var(--tw-border-opacity, 1));--tw-bg-opacity: 1;background-color:rgb(44 44 44 / var(--tw-bg-opacity, 1));padding:.25rem .375rem;font-size:10px;--tw-text-opacity: 1;color:rgb(228 228 231 / var(--tw-text-opacity, 1));font-family:JetBrains Mono,ui-monospace,SFMono-Regular,Menlo,monospace}.overlay-attach-btn[data-v-0be88a62]{display:flex;height:2rem;width:2rem;flex-shrink:0;align-items:center;justify-content:center;border-radius:var(--radius);border-width:1px;--tw-border-opacity: 1;border-color:rgb(45 45 45 / var(--tw-border-opacity, 1));--tw-bg-opacity: 1;background-color:rgb(37 37 37 / var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(113 113 122 / var(--tw-text-opacity, 1));transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.overlay-attach-btn[data-v-0be88a62]:disabled{cursor:not-allowed;opacity:.45}.overlay-attach-btn[data-v-0be88a62]:hover:not(:disabled){--tw-border-opacity: 1;border-color:rgb(58 58 58 / var(--tw-border-opacity, 1));--tw-bg-opacity: 1;background-color:rgb(42 42 42 / var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(212 212 216 / var(--tw-text-opacity, 1))}.overlay-attach-btn[data-v-0be88a62]:focus-visible{outline:2px solid transparent;outline-offset:2px;--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000);--tw-ring-opacity: 1;--tw-ring-color: rgb(228 58 156 / var(--tw-ring-opacity, 1));--tw-ring-offset-width: 2px;--tw-ring-offset-color: #1c1c1c}.overlay-composer-field[data-v-0be88a62]{display:flex;align-items:center;gap:.5rem}.overlay-input[data-v-0be88a62]{min-height:36px;flex:1 1 0%;resize:none;border-radius:.75rem;border-width:1px;--tw-border-opacity: 1;border-color:rgb(45 45 45 / var(--tw-border-opacity, 1));--tw-bg-opacity: 1;background-color:rgb(37 37 37 / var(--tw-bg-opacity, 1));padding:.5rem .75rem;font-size:11px;line-height:1.625;--tw-text-opacity: 1;color:rgb(228 228 231 / var(--tw-text-opacity, 1));transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.overlay-input[data-v-0be88a62]::-moz-placeholder{--tw-text-opacity: 1;color:rgb(63 63 70 / var(--tw-text-opacity, 1))}.overlay-input[data-v-0be88a62]::placeholder{--tw-text-opacity: 1;color:rgb(63 63 70 / var(--tw-text-opacity, 1))}.overlay-input[data-v-0be88a62]:focus{outline:2px solid transparent;outline-offset:2px}.overlay-input[data-v-0be88a62]{max-height:100px;font-family:Inter,sans-serif}.overlay-input[data-v-0be88a62]:focus{border-color:#e43a9c4d}.overlay-send-btn[data-v-0be88a62]{display:flex;height:2rem;width:2rem;flex-shrink:0;align-items:center;justify-content:center;border-radius:var(--radius);--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1));transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.overlay-send-btn[data-v-0be88a62]:disabled{cursor:not-allowed;opacity:.3}.overlay-send-btn[data-v-0be88a62]{background:linear-gradient(135deg,#d83333,#e43a9c)}.overlay-send-btn[data-v-0be88a62]:hover:not(:disabled){--tw-brightness: brightness(1.1);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)}.overlay-send-btn[data-v-0be88a62]:active:not(:disabled){--tw-brightness: brightness(1);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)}.overlay-send-btn[data-v-0be88a62]:focus-visible{outline:2px solid transparent;outline-offset:2px;--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000);--tw-ring-opacity: 1;--tw-ring-color: rgb(228 58 156 / var(--tw-ring-opacity, 1));--tw-ring-offset-width: 2px;--tw-ring-offset-color: #252525}.overlay-meta[data-v-0be88a62]{font-family:JetBrains Mono,ui-monospace,SFMono-Regular,Menlo,monospace}@keyframes bounce-0be88a62{0%,80%,to{transform:translateY(0);opacity:.55}40%{transform:translateY(-3px);opacity: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% 10%;--foreground: 0 0% 96%;--card: 0 0% 13%;--card-foreground: 0 0% 96%;--popover: 0 0% 14%;--popover-foreground: 0 0% 96%;--primary: 323 78% 57%;--primary-foreground: 0 0% 100%;--secondary: 0 0% 18%;--secondary-foreground: 0 0% 94%;--muted: 0 0% 20%;--muted-foreground: 25 8% 64%;--accent: 320 34% 14%;--accent-foreground: 323 78% 62%;--destructive: 0 84% 60%;--destructive-foreground: 0 0% 98%;--border: 0 0% 100% / .08;--input: 0 0% 18%;--ring: 323 78% 57%;--radius: 1rem;--gradient-start: 0 69% 52%;--gradient-mid: 323 78% 57%;--gradient-end: 280 96% 66%;--sidebar: 0 0% 9%;--header: 0 0% 11%}.dark{--background: 0 0% 10%;--foreground: 0 0% 96%;--card: 0 0% 13%;--card-foreground: 0 0% 96%;--popover: 0 0% 14%;--popover-foreground: 0 0% 96%;--primary: 323 78% 57%;--primary-foreground: 0 0% 100%;--secondary: 0 0% 18%;--secondary-foreground: 0 0% 94%;--muted: 0 0% 20%;--muted-foreground: 25 8% 64%;--accent: 320 34% 14%;--accent-foreground: 323 78% 62%;--destructive: 0 84% 60%;--destructive-foreground: 0 0% 98%;--border: 0 0% 100% / .08;--input: 0 0% 18%;--ring: 323 78% 57%;--radius: 1rem;--gradient-start: 0 69% 52%;--gradient-mid: 323 78% 57%;--gradient-end: 280 96% 66%;--sidebar: 0 0% 9%;--header: 0 0% 11%}*{border-color:hsl(var(--border))}body{background-color:hsl(var(--background));color:hsl(var(--foreground));font-family:Inter,system-ui,-apple-system,sans-serif;letter-spacing:-.01em;background-image:radial-gradient(circle at top,rgba(228,58,156,.1),transparent 24%),radial-gradient(circle at bottom,rgba(255,255,255,.05),transparent 26%),linear-gradient(180deg,hsl(var(--background)),hsl(var(--background)));background-attachment:fixed}.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}.prose-invert{--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)}.font-display{font-family:Bebas Neue,Inter,sans-serif}.btn-gradient{position:relative;overflow:hidden;border-radius:.75rem;padding:.5rem .75rem;font-size:.875rem;line-height:1.25rem;font-weight:500;--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1));transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.2s;background-image:linear-gradient(135deg,hsl(var(--gradient-start)),hsl(var(--gradient-mid)),hsl(var(--gradient-end)));background-size:200% auto;background-position:center;animation:gradientShift 6s linear infinite;animation-play-state:paused;box-shadow:0 12px 30px -14px hsl(var(--gradient-mid) / .65)}.btn-gradient:hover{animation-play-state:running;transform:translateY(-1px);box-shadow:0 16px 34px -16px hsl(var(--gradient-mid) / .85)}.btn-gradient:active{transform:translateY(0)}.btn-gradient:disabled{opacity:.5;transform:none;box-shadow:none;cursor:not-allowed}.pointer-events-none{pointer-events:none}.visible{visibility:visible}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.bottom-24{bottom:6rem}.bottom-4{bottom:1rem}.bottom-5{bottom:1.25rem}.bottom-full{bottom:100%}.left-1\/2{left:50%}.left-2{left:.5rem}.left-2\.5{left:.625rem}.left-4{left:1rem}.right-1{right:.25rem}.right-4{right:1rem}.right-5{right:1.25rem}.top-1\/2{top:50%}.top-2\.5{top:.625rem}.z-10{z-index:10}.z-50{z-index:50}.mx-auto{margin-left:auto;margin-right:auto}.-mt-0\.5{margin-top:-.125rem}.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}.mr-1{margin-right:.25rem}.mr-1\.5{margin-right:.375rem}.mt-0{margin-top:0}.mt-0\.5{margin-top:.125rem}.mt-1{margin-top:.25rem}.mt-2{margin-top:.5rem}.mt-3{margin-top:.75rem}.mt-4{margin-top:1rem}.mt-8{margin-top:2rem}.line-clamp-2{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2}.block{display:block}.inline-block{display:inline-block}.inline{display:inline}.flex{display:flex}.inline-flex{display:inline-flex}.table{display:table}.grid{display:grid}.hidden{display:none}.h-1{height:.25rem}.h-10{height:2.5rem}.h-11{height:2.75rem}.h-12{height:3rem}.h-2{height:.5rem}.h-3{height:.75rem}.h-3\.5{height:.875rem}.h-32{height:8rem}.h-4{height:1rem}.h-5{height:1.25rem}.h-6{height:1.5rem}.h-7{height:1.75rem}.h-8{height:2rem}.h-96{height:24rem}.h-\[460px\]{height:460px}.h-full{height:100%}.h-screen{height:100vh}.max-h-44{max-height:11rem}.max-h-\[120px\]{max-height:120px}.min-h-\[36px\]{min-height:36px}.min-h-\[400px\]{min-height:400px}.min-h-\[40px\]{min-height:40px}.min-h-screen{min-height:100vh}.w-1{width:.25rem}.w-10{width:2.5rem}.w-11{width:2.75rem}.w-12{width:3rem}.w-16{width:4rem}.w-2{width:.5rem}.w-3{width:.75rem}.w-3\.5{width:.875rem}.w-4{width:1rem}.w-5{width:1.25rem}.w-56{width:14rem}.w-6{width:1.5rem}.w-64{width:16rem}.w-7{width:1.75rem}.w-72{width:18rem}.w-8{width:2rem}.w-80{width:20rem}.w-\[340px\]{width:340px}.w-fit{width:-moz-fit-content;width:fit-content}.w-full{width:100%}.min-w-0{min-width:0px}.min-w-\[4px\]{min-width:4px}.max-w-\[120px\]{max-width:120px}.max-w-\[170px\]{max-width:170px}.max-w-\[75\%\]{max-width:75%}.max-w-\[82\%\]{max-width:82%}.max-w-full{max-width:100%}.max-w-lg{max-width:32rem}.max-w-md{max-width:28rem}.max-w-none{max-width:none}.max-w-sm{max-width:24rem}.flex-1{flex:1 1 0%}.flex-shrink-0,.shrink-0{flex-shrink:0}.-translate-x-1\/2{--tw-translate-x: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-y-1\/2{--tw-translate-y: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-0{--tw-translate-x: 0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-5{--tw-translate-x: 1.25rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-y-0{--tw-translate-y: 0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-y-4{--tw-translate-y: 1rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.scale-100{--tw-scale-x: 1;--tw-scale-y: 1;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.scale-\[0\.98\]{--tw-scale-x: .98;--tw-scale-y: .98;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes ping{75%,to{transform:scale(2);opacity:0}}.animate-ping{animation:ping 1s cubic-bezier(0,0,.2,1) infinite}@keyframes pulse{50%{opacity:.5}}.animate-pulse{animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite}@keyframes spin{to{transform:rotate(360deg)}}.animate-spin{animation:spin 1s linear infinite}.cursor-pointer{cursor:pointer}.select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.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))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.flex-row-reverse{flex-direction:row-reverse}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.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-2\.5{gap:.625rem}.gap-3{gap:.75rem}.gap-4{gap:1rem}.space-y-0\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.125rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.125rem * var(--tw-space-y-reverse))}.space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.25rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.25rem * var(--tw-space-y-reverse))}.space-y-1\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.375rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.375rem * var(--tw-space-y-reverse))}.space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.5rem * var(--tw-space-y-reverse))}.space-y-3>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.75rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.75rem * var(--tw-space-y-reverse))}.space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem * var(--tw-space-y-reverse))}.space-y-6>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.5rem * var(--tw-space-y-reverse))}.space-y-8>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(2rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(2rem * var(--tw-space-y-reverse))}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.break-words{overflow-wrap:break-word}.break-all{word-break:break-all}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:1rem}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:var(--radius)}.rounded-md{border-radius:calc(var(--radius) - 2px)}.rounded-xl{border-radius:.75rem}.rounded-t{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.rounded-tl-sm{border-top-left-radius:calc(var(--radius) - 4px)}.rounded-tr-sm{border-top-right-radius:calc(var(--radius) - 4px)}.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-l-4{border-left-width:4px}.border-r{border-right-width:1px}.border-t{border-top-width:1px}.border-\[\#2a2a2a\]{--tw-border-opacity: 1;border-color:rgb(42 42 42 / var(--tw-border-opacity, 1))}.border-\[\#2b2b2b\]{--tw-border-opacity: 1;border-color:rgb(43 43 43 / var(--tw-border-opacity, 1))}.border-\[\#2d2d2d\]{--tw-border-opacity: 1;border-color:rgb(45 45 45 / var(--tw-border-opacity, 1))}.border-\[\#3a3a3a\]{--tw-border-opacity: 1;border-color:rgb(58 58 58 / var(--tw-border-opacity, 1))}.border-border{border-color:hsl(var(--border))}.border-border\/50{border-color:hsl(var(--border) / .5)}.border-destructive\/30{border-color:hsl(var(--destructive) / .3)}.border-green-500\/30{border-color:#22c55e4d}.border-input{border-color:hsl(var(--input))}.border-primary{border-color:hsl(var(--primary))}.border-red-500\/50{border-color:#ef444480}.border-transparent{border-color:transparent}.border-white\/10{border-color:#ffffff1a}.border-yellow-500\/20{border-color:#eab30833}.border-l-blue-500{--tw-border-opacity: 1;border-left-color:rgb(59 130 246 / var(--tw-border-opacity, 1))}.border-l-green-500{--tw-border-opacity: 1;border-left-color:rgb(34 197 94 / var(--tw-border-opacity, 1))}.border-l-primary{border-left-color:hsl(var(--primary))}.border-l-red-500{--tw-border-opacity: 1;border-left-color:rgb(239 68 68 / var(--tw-border-opacity, 1))}.border-l-yellow-500{--tw-border-opacity: 1;border-left-color:rgb(234 179 8 / var(--tw-border-opacity, 1))}.bg-\[\#1c1c1c\]{--tw-bg-opacity: 1;background-color:rgb(28 28 28 / var(--tw-bg-opacity, 1))}.bg-\[\#1f1f1f\]{--tw-bg-opacity: 1;background-color:rgb(31 31 31 / var(--tw-bg-opacity, 1))}.bg-\[\#252525\]{--tw-bg-opacity: 1;background-color:rgb(37 37 37 / var(--tw-bg-opacity, 1))}.bg-\[\#252525\]\/90{background-color:#252525e6}.bg-\[\#252525\]\/95{background-color:#252525f2}.bg-\[\#282828\]{--tw-bg-opacity: 1;background-color:rgb(40 40 40 / var(--tw-bg-opacity, 1))}.bg-\[\#2a2a2a\]{--tw-bg-opacity: 1;background-color:rgb(42 42 42 / var(--tw-bg-opacity, 1))}.bg-\[\#2c2c2c\]{--tw-bg-opacity: 1;background-color:rgb(44 44 44 / var(--tw-bg-opacity, 1))}.bg-\[\#E43A9C\]{--tw-bg-opacity: 1;background-color:rgb(228 58 156 / var(--tw-bg-opacity, 1))}.bg-accent{background-color:hsl(var(--accent))}.bg-accent\/40{background-color:hsl(var(--accent) / .4)}.bg-background{background-color:hsl(var(--background))}.bg-background\/70{background-color:hsl(var(--background) / .7)}.bg-blue-500\/10{background-color:#3b82f61a}.bg-blue-500\/20{background-color:#3b82f633}.bg-blue-600{--tw-bg-opacity: 1;background-color:rgb(37 99 235 / var(--tw-bg-opacity, 1))}.bg-card{background-color:hsl(var(--card))}.bg-current{background-color:currentColor}.bg-green-500\/10{background-color:#22c55e1a}.bg-green-500\/20{background-color:#22c55e33}.bg-header{background-color:hsl(var(--header))}.bg-indigo-500\/20{background-color:#6366f133}.bg-input{background-color:hsl(var(--input))}.bg-muted{background-color:hsl(var(--muted))}.bg-muted\/10{background-color:hsl(var(--muted) / .1)}.bg-muted\/20{background-color:hsl(var(--muted) / .2)}.bg-muted\/30{background-color:hsl(var(--muted) / .3)}.bg-orange-500\/10{background-color:#f973161a}.bg-primary{background-color:hsl(var(--primary))}.bg-primary\/10{background-color:hsl(var(--primary) / .1)}.bg-primary\/60{background-color:hsl(var(--primary) / .6)}.bg-purple-500\/10{background-color:#a855f71a}.bg-purple-500\/20{background-color:#a855f733}.bg-red-500\/10{background-color:#ef44441a}.bg-red-500\/20{background-color:#ef444433}.bg-secondary{background-color:hsl(var(--secondary))}.bg-sidebar{background-color:hsl(var(--sidebar))}.bg-teal-500\/20{background-color:#14b8a633}.bg-white{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1))}.bg-white\/\[0\.07\]{background-color:#ffffff12}.bg-yellow-500{--tw-bg-opacity: 1;background-color:rgb(234 179 8 / var(--tw-bg-opacity, 1))}.bg-yellow-500\/10{background-color:#eab3081a}.bg-yellow-500\/20{background-color:#eab30833}.bg-gradient-brand{background-image:linear-gradient(135deg,hsl(var(--gradient-start)),hsl(var(--gradient-mid)),hsl(var(--gradient-end)))}.bg-clip-text{-webkit-background-clip:text;background-clip:text}.object-contain{-o-object-fit:contain;object-fit:contain}.p-0\.5{padding:.125rem}.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{padding-left:.25rem;padding-right:.25rem}.px-1\.5{padding-left:.375rem;padding-right:.375rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-2\.5{padding-left:.625rem;padding-right:.625rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.px-5{padding-left:1.25rem;padding-right:1.25rem}.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-2\.5{padding-top:.625rem;padding-bottom:.625rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.py-8{padding-top:2rem;padding-bottom:2rem}.pb-3{padding-bottom:.75rem}.pl-6{padding-left:1.5rem}.pl-8{padding-left:2rem}.pr-2{padding-right:.5rem}.pr-3{padding-right:.75rem}.pt-1{padding-top:.25rem}.pt-2{padding-top:.5rem}.pt-3{padding-top:.75rem}.pt-4{padding-top:1rem}.text-left{text-align:left}.text-center{text-align:center}.text-right{text-align:right}.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-\[1\.1rem\]{font-size:1.1rem}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.text-\[9px\]{font-size:9px}.text-base{font-size:1rem;line-height:1.5rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xs{font-size:.75rem;line-height:1rem}.font-bold{font-weight:700}.font-medium{font-weight:500}.font-normal{font-weight:400}.font-semibold{font-weight:600}.uppercase{text-transform:uppercase}.leading-none{line-height:1}.leading-relaxed{line-height:1.625}.tracking-\[0\.16em\]{letter-spacing:.16em}.tracking-\[0\.18em\]{letter-spacing:.18em}.tracking-wide{letter-spacing:.025em}.text-\[\#ef4444\]{--tw-text-opacity: 1;color:rgb(239 68 68 / var(--tw-text-opacity, 1))}.text-accent-foreground{color:hsl(var(--accent-foreground))}.text-blue-400{--tw-text-opacity: 1;color:rgb(96 165 250 / var(--tw-text-opacity, 1))}.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-400{--tw-text-opacity: 1;color:rgb(74 222 128 / var(--tw-text-opacity, 1))}.text-green-500{--tw-text-opacity: 1;color:rgb(34 197 94 / var(--tw-text-opacity, 1))}.text-indigo-400{--tw-text-opacity: 1;color:rgb(129 140 248 / var(--tw-text-opacity, 1))}.text-muted-foreground{color:hsl(var(--muted-foreground))}.text-orange-500{--tw-text-opacity: 1;color:rgb(249 115 22 / var(--tw-text-opacity, 1))}.text-primary{color:hsl(var(--primary))}.text-primary-foreground{color:hsl(var(--primary-foreground))}.text-primary\/90{color:hsl(var(--primary) / .9)}.text-purple-400{--tw-text-opacity: 1;color:rgb(192 132 252 / var(--tw-text-opacity, 1))}.text-purple-500{--tw-text-opacity: 1;color:rgb(168 85 247 / var(--tw-text-opacity, 1))}.text-red-400{--tw-text-opacity: 1;color:rgb(248 113 113 / 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-teal-400{--tw-text-opacity: 1;color:rgb(45 212 191 / var(--tw-text-opacity, 1))}.text-transparent{color:transparent}.text-white{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.text-yellow-400{--tw-text-opacity: 1;color:rgb(250 204 21 / var(--tw-text-opacity, 1))}.text-yellow-500{--tw-text-opacity: 1;color:rgb(234 179 8 / var(--tw-text-opacity, 1))}.text-yellow-600{--tw-text-opacity: 1;color:rgb(202 138 4 / var(--tw-text-opacity, 1))}.text-zinc-200{--tw-text-opacity: 1;color:rgb(228 228 231 / var(--tw-text-opacity, 1))}.text-zinc-300{--tw-text-opacity: 1;color:rgb(212 212 216 / var(--tw-text-opacity, 1))}.text-zinc-500{--tw-text-opacity: 1;color:rgb(113 113 122 / var(--tw-text-opacity, 1))}.underline{text-decoration-line:underline}.opacity-0{opacity:0}.opacity-100{opacity:1}.opacity-40{opacity:.4}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.opacity-65{opacity:.65}.opacity-70{opacity:.7}.shadow-\[0_0_0_1px_rgba\(228\,58\,156\,0\.35\)\]{--tw-shadow: 0 0 0 1px rgba(228,58,156,.35);--tw-shadow-colored: 0 0 0 1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-sm{--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-xl{--tw-shadow: 0 20px 25px -5px rgb(0 0 0 / .1), 0 8px 10px -6px rgb(0 0 0 / .1);--tw-shadow-colored: 0 20px 25px -5px var(--tw-shadow-color), 0 8px 10px -6px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.outline-none{outline:2px solid transparent;outline-offset:2px}.ring-1{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.ring-2{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.ring-\[\#E43A9C\]{--tw-ring-opacity: 1;--tw-ring-color: rgb(228 58 156 / var(--tw-ring-opacity, 1))}.ring-black\/10{--tw-ring-color: rgb(0 0 0 / .1)}.ring-offset-2{--tw-ring-offset-width: 2px}.ring-offset-\[\#1a1a1a\]{--tw-ring-offset-color: #1a1a1a}.ring-offset-\[\#1c1c1c\]{--tw-ring-offset-color: #1c1c1c}.ring-offset-\[\#252525\]{--tw-ring-offset-color: #252525}.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-all{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-opacity{transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-transform{transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.duration-150{transition-duration:.15s}.duration-200{transition-duration:.2s}.ease-in{transition-timing-function:cubic-bezier(.4,0,1,1)}.ease-out{transition-timing-function:cubic-bezier(0,0,.2,1)}@keyframes gradientShift{0%,to{background-position:0% 50%}50%{background-position:100% 50%}}.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)}.placeholder\:text-muted-foreground::-moz-placeholder{color:hsl(var(--muted-foreground))}.placeholder\:text-muted-foreground::placeholder{color:hsl(var(--muted-foreground))}.placeholder\:text-zinc-700::-moz-placeholder{--tw-text-opacity: 1;color:rgb(63 63 70 / var(--tw-text-opacity, 1))}.placeholder\:text-zinc-700::placeholder{--tw-text-opacity: 1;color:rgb(63 63 70 / var(--tw-text-opacity, 1))}.hover\:border-foreground:hover{border-color:hsl(var(--foreground))}.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-accent\/70:hover{background-color:hsl(var(--accent) / .7)}.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\/10:hover{background-color:hsl(var(--primary) / .1)}.hover\:bg-primary\/90:hover{background-color:hsl(var(--primary) / .9)}.hover\:bg-red-500\/10:hover{background-color:#ef44441a}.hover\:bg-secondary\/80:hover{background-color:hsl(var(--secondary) / .8)}.hover\:bg-white\/5:hover{background-color:#ffffff0d}.hover\:text-destructive:hover{color:hsl(var(--destructive))}.hover\:text-foreground:hover{color:hsl(var(--foreground))}.hover\:text-primary:hover{color:hsl(var(--primary))}.hover\:text-red-400:hover{--tw-text-opacity: 1;color:rgb(248 113 113 / var(--tw-text-opacity, 1))}.hover\:underline:hover{text-decoration-line:underline}.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))}.focus-visible\:outline-none:focus-visible{outline:2px solid transparent;outline-offset:2px}.focus-visible\:ring-2:focus-visible{--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-visible\:ring-ring:focus-visible{--tw-ring-color: hsl(var(--ring))}.focus-visible\:ring-offset-2:focus-visible{--tw-ring-offset-width: 2px}.focus-visible\:ring-offset-background:focus-visible{--tw-ring-offset-color: hsl(var(--background))}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-40:disabled{opacity:.4}.disabled\:opacity-50:disabled{opacity:.5}.group:hover .group-hover\:block{display:block}.group:hover .group-hover\:opacity-100{opacity:1}@media(min-width:640px){.sm\:bottom-6{bottom:1.5rem}}@media(min-width:768px){.md\:flex{display:flex}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.md\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}}@media(min-width:1024px){.lg\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.lg\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}}@media(min-width:1280px){.xl\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/ChatView-
|
|
1
|
+
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/ChatView-DLu9BMg8.js","assets/x-xgLSmc9e.js","assets/SquadsView-CPVzko7k.js","assets/api-BiDVwQrs.js","assets/squad-colors-B8B_Y-lz.js","assets/git-branch-BLstr_Gr.js","assets/SquadHealthView-DF2zF9D3.js","assets/triangle-alert-BrzY_E1n.js","assets/SquadDetailView-BBvrgHzn.js","assets/trash-2-C21cNLJl.js","assets/arrow-left-DFbf2tii.js","assets/FeedView-6OV-l6Gl.js","assets/SkillsView-DnNmO192.js","assets/plus-gmwiZVfr.js","assets/search-BabUvoGD.js","assets/pencil-D4Zz_t0y.js","assets/save-BvtAs5WB.js","assets/McpView-TJN-fZvI.js","assets/ToggleSwitch.vue_vue_type_script_setup_true_lang-Bk_t9_Rn.js","assets/SchedulesView-BDFpImX6.js","assets/HistoryView-DizPqv0y.js","assets/WikiView-KhFqBZI0.js","assets/UsageView-OcyM5k14.js","assets/AuditLogView-C5QtUQBq.js","assets/SettingsView-D-K1iC1c.js"])))=>i.map(i=>d[i]);
|
|
2
2
|
var hh=Object.defineProperty;var dh=(t,e,r)=>e in t?hh(t,e,{enumerable:!0,configurable:!0,writable:!0,value:r}):t[e]=r;var be=(t,e,r)=>dh(t,typeof e!="symbol"?e+"":e,r);(function(){const e=document.createElement("link").relList;if(e&&e.supports&&e.supports("modulepreload"))return;for(const s of document.querySelectorAll('link[rel="modulepreload"]'))n(s);new MutationObserver(s=>{for(const i of s)if(i.type==="childList")for(const o of i.addedNodes)o.tagName==="LINK"&&o.rel==="modulepreload"&&n(o)}).observe(document,{childList:!0,subtree:!0});function r(s){const i={};return s.integrity&&(i.integrity=s.integrity),s.referrerPolicy&&(i.referrerPolicy=s.referrerPolicy),s.crossOrigin==="use-credentials"?i.credentials="include":s.crossOrigin==="anonymous"?i.credentials="omit":i.credentials="same-origin",i}function n(s){if(s.ep)return;s.ep=!0;const i=r(s);fetch(s.href,i)}})();const fh="modulepreload",ph=function(t){return"/"+t},Jo={},Ke=function(e,r,n){let s=Promise.resolve();if(r&&r.length>0){let o=function(c){return Promise.all(c.map(u=>Promise.resolve(u).then(h=>({status:"fulfilled",value:h}),h=>({status:"rejected",reason:h}))))};document.getElementsByTagName("link");const a=document.querySelector("meta[property=csp-nonce]"),l=(a==null?void 0:a.nonce)||(a==null?void 0:a.getAttribute("nonce"));s=o(r.map(c=>{if(c=ph(c),c in Jo)return;Jo[c]=!0;const u=c.endsWith(".css"),h=u?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${c}"]${h}`))return;const d=document.createElement("link");if(d.rel=u?"stylesheet":fh,u||(d.as="script"),d.crossOrigin="",d.href=c,l&&d.setAttribute("nonce",l),document.head.appendChild(d),u)return new Promise((f,p)=>{d.addEventListener("load",f),d.addEventListener("error",()=>p(new Error(`Unable to preload CSS for ${c}`)))})}))}function i(o){const a=new Event("vite:preloadError",{cancelable:!0});if(a.payload=o,window.dispatchEvent(a),!a.defaultPrevented)throw o}return s.then(o=>{for(const a of o||[])a.status==="rejected"&&i(a.reason);return e().catch(i)})};/**
|
|
3
3
|
* @vue/shared v3.5.34
|
|
4
4
|
* (c) 2018-present Yuxi (Evan) You and Vue contributors
|
|
@@ -167,7 +167,7 @@ var hh=Object.defineProperty;var dh=(t,e,r)=>e in t?hh(t,e,{enumerable:!0,config
|
|
|
167
167
|
*
|
|
168
168
|
* This source code is licensed under the ISC license.
|
|
169
169
|
* See the LICENSE file in the root directory of this source tree.
|
|
170
|
-
*/const Og=Ae("UsersIcon",[["path",{d:"M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2",key:"1yyitq"}],["circle",{cx:"9",cy:"7",r:"4",key:"nufk8"}],["path",{d:"M22 21v-2a4 4 0 0 0-3-3.87",key:"kshegd"}],["path",{d:"M16 3.13a4 4 0 0 1 0 7.75",key:"1da9ce"}]]),Pg={key:0,class:"font-display text-[1.1rem] font-normal uppercase tracking-[0.18em] bg-gradient-brand bg-clip-text text-transparent"},Ig=["title"],$g={class:"flex-1 p-2 space-y-0.5 overflow-y-auto"},jg={key:0},Ng={class:"border-t border-border p-2 space-y-0.5"},Lg={key:0},Dg=["href"],sl="https://github.com/michaeljolley/io",Ug=pr({__name:"AppSidebar",setup(t){const e=jo(),r=Oe(!1),n=[{name:"History",icon:vg,path:"/history"},{name:"Squads",icon:Og,path:"/squads"},{name:"Health",icon:hg,path:"/squads/health"},{name:"Usage",icon:fg,path:"/usage"},{name:"Audit Log",icon:gg,path:"/audit-log"},{name:"Skills",icon:Eg,path:"/skills"},{name:"MCP Servers",icon:Ag,path:"/mcp"},{name:"Schedules",icon:mg,path:"/schedules"},{name:"Wiki",icon:dg,path:"/wiki"}],s=[{name:"Chat",icon:xu,path:"/"},{name:"Feed",icon:Au,path:"/feed"},{name:"Settings",icon:xg,path:"/settings"}],i="1.12.0",o=je(()=>{let l="";const c=[...n,...s];for(const u of c){const h=u.path;(h==="/"?e.path==="/":e.path===h||e.path.startsWith(h+"/"))&&h.length>l.length&&(l=h)}return l});function a(){r.value=!r.value}return(l,c)=>{const u=Zs("router-link");return Z(),ue("aside",{class:Ye(["border-r border-border bg-sidebar flex flex-col h-full shrink-0 transition-all duration-200",r.value?"w-16":"w-56"])},[ne("div",{class:Ye(["p-3 border-b border-border flex items-center",r.value?"justify-center":"justify-between"])},[he(u,{to:"/",class:Ye(["flex items-center gap-2",r.value?"justify-center":""])},{default:Yr(()=>[he(Zi,{size:24}),r.value?$e("",!0):(Z(),ue("h1",Pg,"IO"))]),_:1},8,["class"]),r.value?$e("",!0):(Z(),ue("button",{key:0,onClick:a,class:"p-1 rounded-full hover:bg-accent/70 text-muted-foreground hover:text-foreground transition-colors",title:r.value?"Expand sidebar":"Collapse sidebar"},[he(re(wg),{class:"w-4 h-4"})],8,Ig))],2),r.value?(Z(),ue("button",{key:0,onClick:a,class:"mx-auto mt-2 p-1.5 rounded-full hover:bg-accent/70 text-muted-foreground hover:text-foreground transition-colors",title:"Expand sidebar"},[he(re(kg),{class:"w-4 h-4"})])):$e("",!0),ne("nav",$g,[(Z(),ue(Fe,null,zr(n,h=>he(u,{key:h.path,to:h.path,class:Ye(["flex items-center gap-3 rounded-full text-sm transition-colors border border-transparent",[r.value?"justify-center px-2 py-2":"px-3 py-2",o.value===h.path?"bg-accent text-accent-foreground font-medium border border-white/10":"text-muted-foreground hover:bg-white/5 hover:text-foreground"]]),title:r.value?h.name:void 0},{default:Yr(()=>[(Z(),nt(sa(h.icon),{class:"w-4 h-4 shrink-0"})),r.value?$e("",!0):(Z(),ue("span",jg,it(h.name),1))]),_:2},1032,["to","class","title"])),64))]),ne("div",Ng,[(Z(),ue(Fe,null,zr(s,h=>he(u,{key:h.path,to:h.path,class:Ye(["flex items-center gap-3 rounded-full text-sm transition-colors border border-transparent",[r.value?"justify-center px-2 py-2":"px-3 py-2",o.value===h.path?"bg-accent text-accent-foreground font-medium border border-white/10":"text-muted-foreground hover:bg-white/5 hover:text-foreground"]]),title:r.value?h.name:void 0},{default:Yr(()=>[(Z(),nt(sa(h.icon),{class:"w-4 h-4 shrink-0"})),r.value?$e("",!0):(Z(),ue("span",Lg,it(h.name),1))]),_:2},1032,["to","class","title"])),64)),ne("div",{class:Ye(["flex items-center pt-2 mt-2 border-t border-border",r.value?"justify-center":"justify-between px-3"])},[r.value?$e("",!0):(Z(),ue("a",{key:0,href:`${sl}/releases/tag/v${re(i)}`,target:"_blank",class:"text-[10px] text-muted-foreground hover:text-foreground transition-colors",title:"Release notes"}," v"+it(re(i)),9,Dg)),ne("a",{href:sl,target:"_blank",class:"p-1 rounded-full hover:bg-accent/70 text-muted-foreground hover:text-foreground transition-colors",title:"GitHub repository"},[he(re(yg),{class:"w-3.5 h-3.5"})])],2)])],2)}}});function ii(t,e){var r={};for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&e.indexOf(n)<0&&(r[n]=t[n]);if(t!=null&&typeof Object.getOwnPropertySymbols=="function")for(var s=0,n=Object.getOwnPropertySymbols(t);s<n.length;s++)e.indexOf(n[s])<0&&Object.prototype.propertyIsEnumerable.call(t,n[s])&&(r[n[s]]=t[n[s]]);return r}function Bg(t,e,r,n){function s(i){return i instanceof r?i:new r(function(o){o(i)})}return new(r||(r=Promise))(function(i,o){function a(u){try{c(n.next(u))}catch(h){o(h)}}function l(u){try{c(n.throw(u))}catch(h){o(h)}}function c(u){u.done?i(u.value):s(u.value).then(a,l)}c((n=n.apply(t,e||[])).next())})}const Mg=t=>t?(...e)=>t(...e):(...e)=>fetch(...e);class No extends Error{constructor(e,r="FunctionsError",n){super(e),this.name=r,this.context=n}toJSON(){return{name:this.name,message:this.message,context:this.context}}}class Hg extends No{constructor(e){super("Failed to send a request to the Edge Function","FunctionsFetchError",e)}}class il extends No{constructor(e){super("Relay Error invoking the Edge Function","FunctionsRelayError",e)}}class ol extends No{constructor(e){super("Edge Function returned a non-2xx status code","FunctionsHttpError",e)}}var Qi;(function(t){t.Any="any",t.ApNortheast1="ap-northeast-1",t.ApNortheast2="ap-northeast-2",t.ApSouth1="ap-south-1",t.ApSoutheast1="ap-southeast-1",t.ApSoutheast2="ap-southeast-2",t.CaCentral1="ca-central-1",t.EuCentral1="eu-central-1",t.EuWest1="eu-west-1",t.EuWest2="eu-west-2",t.EuWest3="eu-west-3",t.SaEast1="sa-east-1",t.UsEast1="us-east-1",t.UsWest1="us-west-1",t.UsWest2="us-west-2"})(Qi||(Qi={}));class qg{constructor(e,{headers:r={},customFetch:n,region:s=Qi.Any}={}){this.url=e,this.headers=r,this.region=s,this.fetch=Mg(n)}setAuth(e){this.headers.Authorization=`Bearer ${e}`}invoke(e){return Bg(this,arguments,void 0,function*(r,n={}){var s;let i,o;try{const{headers:a,method:l,body:c,signal:u,timeout:h}=n;let d={},{region:f}=n;f||(f=this.region);const p=new URL(`${this.url}/${r}`);f&&f!=="any"&&(d["x-region"]=f,p.searchParams.set("forceFunctionRegion",f));let y;c&&(a&&!Object.prototype.hasOwnProperty.call(a,"Content-Type")||!a)?typeof Blob<"u"&&c instanceof Blob||c instanceof ArrayBuffer?(d["Content-Type"]="application/octet-stream",y=c):typeof c=="string"?(d["Content-Type"]="text/plain",y=c):typeof FormData<"u"&&c instanceof FormData?y=c:(d["Content-Type"]="application/json",y=JSON.stringify(c)):c&&typeof c!="string"&&!(typeof Blob<"u"&&c instanceof Blob)&&!(c instanceof ArrayBuffer)&&!(typeof FormData<"u"&&c instanceof FormData)?y=JSON.stringify(c):y=c;let w=u;h&&(o=new AbortController,i=setTimeout(()=>o.abort(),h),u?(w=o.signal,u.addEventListener("abort",()=>o.abort())):w=o.signal);const k=yield this.fetch(p.toString(),{method:l||"POST",headers:Object.assign(Object.assign(Object.assign({},d),this.headers),a),body:y,signal:w}).catch(D=>{throw new Hg(D)}),_=k.headers.get("x-relay-error");if(_&&_==="true")throw new il(k);if(!k.ok)throw new ol(k);let b=((s=k.headers.get("Content-Type"))!==null&&s!==void 0?s:"text/plain").split(";")[0].trim(),x;return b==="application/json"?x=yield k.json():b==="application/octet-stream"||b==="application/pdf"?x=yield k.blob():b==="text/event-stream"?x=k:b==="multipart/form-data"?x=yield k.formData():x=yield k.text(),{data:x,error:null,response:k}}catch(a){return{data:null,error:a,response:a instanceof ol||a instanceof il?a.context:void 0}}finally{i&&clearTimeout(i)}})}}const Ru=3,al=t=>Math.min(1e3*2**t,3e4),Fg=[520,503],Cu=["GET","HEAD","OPTIONS"];var Vg=class extends Error{constructor(t){super(t.message),this.name="PostgrestError",this.details=t.details,this.hint=t.hint,this.code=t.code}toJSON(){return{name:this.name,message:this.message,details:this.details,hint:this.hint,code:this.code}}};function ll(t,e){return new Promise(r=>{if(e!=null&&e.aborted){r();return}const n=setTimeout(()=>{e==null||e.removeEventListener("abort",s),r()},t);function s(){clearTimeout(n),r()}e==null||e.addEventListener("abort",s)})}function zg(t,e,r,n){return!(!n||r>=Ru||!Cu.includes(t)||!Fg.includes(e))}var Wg=class{constructor(t){var e,r,n,s,i;this.shouldThrowOnError=!1,this.retryEnabled=!0,this.method=t.method,this.url=t.url,this.headers=new Headers(t.headers),this.schema=t.schema,this.body=t.body,this.shouldThrowOnError=(e=t.shouldThrowOnError)!==null&&e!==void 0?e:!1,this.signal=t.signal,this.isMaybeSingle=(r=t.isMaybeSingle)!==null&&r!==void 0?r:!1,this.shouldStripNulls=(n=t.shouldStripNulls)!==null&&n!==void 0?n:!1,this.urlLengthLimit=(s=t.urlLengthLimit)!==null&&s!==void 0?s:8e3,this.retryEnabled=(i=t.retry)!==null&&i!==void 0?i:!0,t.fetch?this.fetch=t.fetch:this.fetch=fetch}throwOnError(){return this.shouldThrowOnError=!0,this}stripNulls(){if(this.headers.get("Accept")==="text/csv")throw new Error("stripNulls() cannot be used with csv()");return this.shouldStripNulls=!0,this}setHeader(t,e){return this.headers=new Headers(this.headers),this.headers.set(t,e),this}retry(t){return this.retryEnabled=t,this}then(t,e){var r=this;if(this.schema===void 0||(["GET","HEAD"].includes(this.method)?this.headers.set("Accept-Profile",this.schema):this.headers.set("Content-Profile",this.schema)),this.method!=="GET"&&this.method!=="HEAD"&&this.headers.set("Content-Type","application/json"),this.shouldStripNulls){const o=this.headers.get("Accept");o==="application/vnd.pgrst.object+json"?this.headers.set("Accept","application/vnd.pgrst.object+json;nulls=stripped"):(!o||o==="application/json")&&this.headers.set("Accept","application/vnd.pgrst.array+json;nulls=stripped")}const n=this.fetch;let i=(async()=>{let o=0;for(;;){const c=new Headers(r.headers);o>0&&c.set("X-Retry-Count",String(o));let u;try{u=await n(r.url.toString(),{method:r.method,headers:c,body:JSON.stringify(r.body,(h,d)=>typeof d=="bigint"?d.toString():d),signal:r.signal})}catch(h){if((h==null?void 0:h.name)==="AbortError"||(h==null?void 0:h.code)==="ABORT_ERR"||!Cu.includes(r.method))throw h;if(r.retryEnabled&&o<Ru){const d=al(o);o++,await ll(d,r.signal);continue}throw h}if(zg(r.method,u.status,o,r.retryEnabled)){var a,l;const h=(a=(l=u.headers)===null||l===void 0?void 0:l.get("Retry-After"))!==null&&a!==void 0?a:null,d=h!==null?Math.max(0,parseInt(h,10)||0)*1e3:al(o);await u.text(),o++,await ll(d,r.signal);continue}return await r.processResponse(u)}})();return this.shouldThrowOnError||(i=i.catch(o=>{var a;let l="",c="",u="";const h=o==null?void 0:o.cause;if(h){var d,f,p,y;const _=(d=h==null?void 0:h.message)!==null&&d!==void 0?d:"",b=(f=h==null?void 0:h.code)!==null&&f!==void 0?f:"";l=`${(p=o==null?void 0:o.name)!==null&&p!==void 0?p:"FetchError"}: ${o==null?void 0:o.message}`,l+=`
|
|
170
|
+
*/const Og=Ae("UsersIcon",[["path",{d:"M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2",key:"1yyitq"}],["circle",{cx:"9",cy:"7",r:"4",key:"nufk8"}],["path",{d:"M22 21v-2a4 4 0 0 0-3-3.87",key:"kshegd"}],["path",{d:"M16 3.13a4 4 0 0 1 0 7.75",key:"1da9ce"}]]),Pg={key:0,class:"font-display text-[1.1rem] font-normal uppercase tracking-[0.18em] bg-gradient-brand bg-clip-text text-transparent"},Ig=["title"],$g={class:"flex-1 p-2 space-y-0.5 overflow-y-auto"},jg={key:0},Ng={class:"border-t border-border p-2 space-y-0.5"},Lg={key:0},Dg=["href"],sl="https://github.com/michaeljolley/io",Ug=pr({__name:"AppSidebar",setup(t){const e=jo(),r=Oe(!1),n=[{name:"History",icon:vg,path:"/history"},{name:"Squads",icon:Og,path:"/squads"},{name:"Health",icon:hg,path:"/squads/health"},{name:"Usage",icon:fg,path:"/usage"},{name:"Audit Log",icon:gg,path:"/audit-log"},{name:"Skills",icon:Eg,path:"/skills"},{name:"MCP Servers",icon:Ag,path:"/mcp"},{name:"Schedules",icon:mg,path:"/schedules"},{name:"Wiki",icon:dg,path:"/wiki"}],s=[{name:"Chat",icon:xu,path:"/"},{name:"Feed",icon:Au,path:"/feed"},{name:"Settings",icon:xg,path:"/settings"}],i="1.12.1",o=je(()=>{let l="";const c=[...n,...s];for(const u of c){const h=u.path;(h==="/"?e.path==="/":e.path===h||e.path.startsWith(h+"/"))&&h.length>l.length&&(l=h)}return l});function a(){r.value=!r.value}return(l,c)=>{const u=Zs("router-link");return Z(),ue("aside",{class:Ye(["border-r border-border bg-sidebar flex flex-col h-full shrink-0 transition-all duration-200",r.value?"w-16":"w-56"])},[ne("div",{class:Ye(["p-3 border-b border-border flex items-center",r.value?"justify-center":"justify-between"])},[he(u,{to:"/",class:Ye(["flex items-center gap-2",r.value?"justify-center":""])},{default:Yr(()=>[he(Zi,{size:24}),r.value?$e("",!0):(Z(),ue("h1",Pg,"IO"))]),_:1},8,["class"]),r.value?$e("",!0):(Z(),ue("button",{key:0,onClick:a,class:"p-1 rounded-full hover:bg-accent/70 text-muted-foreground hover:text-foreground transition-colors",title:r.value?"Expand sidebar":"Collapse sidebar"},[he(re(wg),{class:"w-4 h-4"})],8,Ig))],2),r.value?(Z(),ue("button",{key:0,onClick:a,class:"mx-auto mt-2 p-1.5 rounded-full hover:bg-accent/70 text-muted-foreground hover:text-foreground transition-colors",title:"Expand sidebar"},[he(re(kg),{class:"w-4 h-4"})])):$e("",!0),ne("nav",$g,[(Z(),ue(Fe,null,zr(n,h=>he(u,{key:h.path,to:h.path,class:Ye(["flex items-center gap-3 rounded-full text-sm transition-colors border border-transparent",[r.value?"justify-center px-2 py-2":"px-3 py-2",o.value===h.path?"bg-accent text-accent-foreground font-medium border border-white/10":"text-muted-foreground hover:bg-white/5 hover:text-foreground"]]),title:r.value?h.name:void 0},{default:Yr(()=>[(Z(),nt(sa(h.icon),{class:"w-4 h-4 shrink-0"})),r.value?$e("",!0):(Z(),ue("span",jg,it(h.name),1))]),_:2},1032,["to","class","title"])),64))]),ne("div",Ng,[(Z(),ue(Fe,null,zr(s,h=>he(u,{key:h.path,to:h.path,class:Ye(["flex items-center gap-3 rounded-full text-sm transition-colors border border-transparent",[r.value?"justify-center px-2 py-2":"px-3 py-2",o.value===h.path?"bg-accent text-accent-foreground font-medium border border-white/10":"text-muted-foreground hover:bg-white/5 hover:text-foreground"]]),title:r.value?h.name:void 0},{default:Yr(()=>[(Z(),nt(sa(h.icon),{class:"w-4 h-4 shrink-0"})),r.value?$e("",!0):(Z(),ue("span",Lg,it(h.name),1))]),_:2},1032,["to","class","title"])),64)),ne("div",{class:Ye(["flex items-center pt-2 mt-2 border-t border-border",r.value?"justify-center":"justify-between px-3"])},[r.value?$e("",!0):(Z(),ue("a",{key:0,href:`${sl}/releases/tag/v${re(i)}`,target:"_blank",class:"text-[10px] text-muted-foreground hover:text-foreground transition-colors",title:"Release notes"}," v"+it(re(i)),9,Dg)),ne("a",{href:sl,target:"_blank",class:"p-1 rounded-full hover:bg-accent/70 text-muted-foreground hover:text-foreground transition-colors",title:"GitHub repository"},[he(re(yg),{class:"w-3.5 h-3.5"})])],2)])],2)}}});function ii(t,e){var r={};for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&e.indexOf(n)<0&&(r[n]=t[n]);if(t!=null&&typeof Object.getOwnPropertySymbols=="function")for(var s=0,n=Object.getOwnPropertySymbols(t);s<n.length;s++)e.indexOf(n[s])<0&&Object.prototype.propertyIsEnumerable.call(t,n[s])&&(r[n[s]]=t[n[s]]);return r}function Bg(t,e,r,n){function s(i){return i instanceof r?i:new r(function(o){o(i)})}return new(r||(r=Promise))(function(i,o){function a(u){try{c(n.next(u))}catch(h){o(h)}}function l(u){try{c(n.throw(u))}catch(h){o(h)}}function c(u){u.done?i(u.value):s(u.value).then(a,l)}c((n=n.apply(t,e||[])).next())})}const Mg=t=>t?(...e)=>t(...e):(...e)=>fetch(...e);class No extends Error{constructor(e,r="FunctionsError",n){super(e),this.name=r,this.context=n}toJSON(){return{name:this.name,message:this.message,context:this.context}}}class Hg extends No{constructor(e){super("Failed to send a request to the Edge Function","FunctionsFetchError",e)}}class il extends No{constructor(e){super("Relay Error invoking the Edge Function","FunctionsRelayError",e)}}class ol extends No{constructor(e){super("Edge Function returned a non-2xx status code","FunctionsHttpError",e)}}var Qi;(function(t){t.Any="any",t.ApNortheast1="ap-northeast-1",t.ApNortheast2="ap-northeast-2",t.ApSouth1="ap-south-1",t.ApSoutheast1="ap-southeast-1",t.ApSoutheast2="ap-southeast-2",t.CaCentral1="ca-central-1",t.EuCentral1="eu-central-1",t.EuWest1="eu-west-1",t.EuWest2="eu-west-2",t.EuWest3="eu-west-3",t.SaEast1="sa-east-1",t.UsEast1="us-east-1",t.UsWest1="us-west-1",t.UsWest2="us-west-2"})(Qi||(Qi={}));class qg{constructor(e,{headers:r={},customFetch:n,region:s=Qi.Any}={}){this.url=e,this.headers=r,this.region=s,this.fetch=Mg(n)}setAuth(e){this.headers.Authorization=`Bearer ${e}`}invoke(e){return Bg(this,arguments,void 0,function*(r,n={}){var s;let i,o;try{const{headers:a,method:l,body:c,signal:u,timeout:h}=n;let d={},{region:f}=n;f||(f=this.region);const p=new URL(`${this.url}/${r}`);f&&f!=="any"&&(d["x-region"]=f,p.searchParams.set("forceFunctionRegion",f));let y;c&&(a&&!Object.prototype.hasOwnProperty.call(a,"Content-Type")||!a)?typeof Blob<"u"&&c instanceof Blob||c instanceof ArrayBuffer?(d["Content-Type"]="application/octet-stream",y=c):typeof c=="string"?(d["Content-Type"]="text/plain",y=c):typeof FormData<"u"&&c instanceof FormData?y=c:(d["Content-Type"]="application/json",y=JSON.stringify(c)):c&&typeof c!="string"&&!(typeof Blob<"u"&&c instanceof Blob)&&!(c instanceof ArrayBuffer)&&!(typeof FormData<"u"&&c instanceof FormData)?y=JSON.stringify(c):y=c;let w=u;h&&(o=new AbortController,i=setTimeout(()=>o.abort(),h),u?(w=o.signal,u.addEventListener("abort",()=>o.abort())):w=o.signal);const k=yield this.fetch(p.toString(),{method:l||"POST",headers:Object.assign(Object.assign(Object.assign({},d),this.headers),a),body:y,signal:w}).catch(D=>{throw new Hg(D)}),_=k.headers.get("x-relay-error");if(_&&_==="true")throw new il(k);if(!k.ok)throw new ol(k);let b=((s=k.headers.get("Content-Type"))!==null&&s!==void 0?s:"text/plain").split(";")[0].trim(),x;return b==="application/json"?x=yield k.json():b==="application/octet-stream"||b==="application/pdf"?x=yield k.blob():b==="text/event-stream"?x=k:b==="multipart/form-data"?x=yield k.formData():x=yield k.text(),{data:x,error:null,response:k}}catch(a){return{data:null,error:a,response:a instanceof ol||a instanceof il?a.context:void 0}}finally{i&&clearTimeout(i)}})}}const Ru=3,al=t=>Math.min(1e3*2**t,3e4),Fg=[520,503],Cu=["GET","HEAD","OPTIONS"];var Vg=class extends Error{constructor(t){super(t.message),this.name="PostgrestError",this.details=t.details,this.hint=t.hint,this.code=t.code}toJSON(){return{name:this.name,message:this.message,details:this.details,hint:this.hint,code:this.code}}};function ll(t,e){return new Promise(r=>{if(e!=null&&e.aborted){r();return}const n=setTimeout(()=>{e==null||e.removeEventListener("abort",s),r()},t);function s(){clearTimeout(n),r()}e==null||e.addEventListener("abort",s)})}function zg(t,e,r,n){return!(!n||r>=Ru||!Cu.includes(t)||!Fg.includes(e))}var Wg=class{constructor(t){var e,r,n,s,i;this.shouldThrowOnError=!1,this.retryEnabled=!0,this.method=t.method,this.url=t.url,this.headers=new Headers(t.headers),this.schema=t.schema,this.body=t.body,this.shouldThrowOnError=(e=t.shouldThrowOnError)!==null&&e!==void 0?e:!1,this.signal=t.signal,this.isMaybeSingle=(r=t.isMaybeSingle)!==null&&r!==void 0?r:!1,this.shouldStripNulls=(n=t.shouldStripNulls)!==null&&n!==void 0?n:!1,this.urlLengthLimit=(s=t.urlLengthLimit)!==null&&s!==void 0?s:8e3,this.retryEnabled=(i=t.retry)!==null&&i!==void 0?i:!0,t.fetch?this.fetch=t.fetch:this.fetch=fetch}throwOnError(){return this.shouldThrowOnError=!0,this}stripNulls(){if(this.headers.get("Accept")==="text/csv")throw new Error("stripNulls() cannot be used with csv()");return this.shouldStripNulls=!0,this}setHeader(t,e){return this.headers=new Headers(this.headers),this.headers.set(t,e),this}retry(t){return this.retryEnabled=t,this}then(t,e){var r=this;if(this.schema===void 0||(["GET","HEAD"].includes(this.method)?this.headers.set("Accept-Profile",this.schema):this.headers.set("Content-Profile",this.schema)),this.method!=="GET"&&this.method!=="HEAD"&&this.headers.set("Content-Type","application/json"),this.shouldStripNulls){const o=this.headers.get("Accept");o==="application/vnd.pgrst.object+json"?this.headers.set("Accept","application/vnd.pgrst.object+json;nulls=stripped"):(!o||o==="application/json")&&this.headers.set("Accept","application/vnd.pgrst.array+json;nulls=stripped")}const n=this.fetch;let i=(async()=>{let o=0;for(;;){const c=new Headers(r.headers);o>0&&c.set("X-Retry-Count",String(o));let u;try{u=await n(r.url.toString(),{method:r.method,headers:c,body:JSON.stringify(r.body,(h,d)=>typeof d=="bigint"?d.toString():d),signal:r.signal})}catch(h){if((h==null?void 0:h.name)==="AbortError"||(h==null?void 0:h.code)==="ABORT_ERR"||!Cu.includes(r.method))throw h;if(r.retryEnabled&&o<Ru){const d=al(o);o++,await ll(d,r.signal);continue}throw h}if(zg(r.method,u.status,o,r.retryEnabled)){var a,l;const h=(a=(l=u.headers)===null||l===void 0?void 0:l.get("Retry-After"))!==null&&a!==void 0?a:null,d=h!==null?Math.max(0,parseInt(h,10)||0)*1e3:al(o);await u.text(),o++,await ll(d,r.signal);continue}return await r.processResponse(u)}})();return this.shouldThrowOnError||(i=i.catch(o=>{var a;let l="",c="",u="";const h=o==null?void 0:o.cause;if(h){var d,f,p,y;const _=(d=h==null?void 0:h.message)!==null&&d!==void 0?d:"",b=(f=h==null?void 0:h.code)!==null&&f!==void 0?f:"";l=`${(p=o==null?void 0:o.name)!==null&&p!==void 0?p:"FetchError"}: ${o==null?void 0:o.message}`,l+=`
|
|
171
171
|
|
|
172
172
|
Caused by: ${(y=h==null?void 0:h.name)!==null&&y!==void 0?y:"Error"}: ${_}`,b&&(l+=` (${b})`),h!=null&&h.stack&&(l+=`
|
|
173
173
|
${h.stack}`)}else{var w;l=(w=o==null?void 0:o.stack)!==null&&w!==void 0?w:""}const k=this.url.toString().length;return(o==null?void 0:o.name)==="AbortError"||(o==null?void 0:o.code)==="ABORT_ERR"?(u="",c="Request was aborted (timeout or manual cancellation)",k>this.urlLengthLimit&&(c+=`. Note: Your request URL is ${k} characters, which may exceed server limits. If selecting many fields, consider using views. If filtering with large arrays (e.g., .in('id', [many IDs])), consider using an RPC function to pass values server-side.`)):((h==null?void 0:h.name)==="HeadersOverflowError"||(h==null?void 0:h.code)==="UND_ERR_HEADERS_OVERFLOW")&&(u="",c="HTTP headers exceeded server limits (typically 16KB)",k>this.urlLengthLimit&&(c+=`. Your request URL is ${k} characters. If selecting many fields, consider using views. If filtering with large arrays (e.g., .in('id', [200+ IDs])), consider using an RPC function instead.`)),{success:!1,error:{message:`${(a=o==null?void 0:o.name)!==null&&a!==void 0?a:"FetchError"}: ${o==null?void 0:o.message}`,details:l,hint:c,code:u},data:null,count:null,status:0,statusText:""}})),i.then(t,e)}async processResponse(t){var e=this;let r=null,n=null,s=null,i=t.status,o=t.statusText;if(t.ok){var a,l;if(e.method!=="HEAD"){var c;const d=await t.text();d===""||(e.headers.get("Accept")==="text/csv"||e.headers.get("Accept")&&(!((c=e.headers.get("Accept"))===null||c===void 0)&&c.includes("application/vnd.pgrst.plan+text"))?n=d:n=JSON.parse(d))}const u=(a=e.headers.get("Prefer"))===null||a===void 0?void 0:a.match(/count=(exact|planned|estimated)/),h=(l=t.headers.get("content-range"))===null||l===void 0?void 0:l.split("/");u&&h&&h.length>1&&(s=parseInt(h[1])),e.isMaybeSingle&&Array.isArray(n)&&(n.length>1?(r={code:"PGRST116",details:`Results contain ${n.length} rows, application/vnd.pgrst.object+json requires 1 row`,hint:null,message:"JSON object requested, multiple (or no) rows returned"},n=null,s=null,i=406,o="Not Acceptable"):n.length===1?n=n[0]:n=null)}else{const u=await t.text();try{r=JSON.parse(u),Array.isArray(r)&&t.status===404&&(n=[],r=null,i=200,o="OK")}catch{t.status===404&&u===""?(i=204,o="No Content"):r={message:u}}if(r&&e.shouldThrowOnError)throw new Vg(r)}return{success:r===null,error:r,data:n,count:s,status:i,statusText:o}}returns(){return this}overrideTypes(){return this}},Kg=class extends Wg{select(t){let e=!1;const r=(t??"*").split("").map(n=>/\s/.test(n)&&!e?"":(n==='"'&&(e=!e),n)).join("");return this.url.searchParams.set("select",r),this.headers.append("Prefer","return=representation"),this}order(t,{ascending:e=!0,nullsFirst:r,foreignTable:n,referencedTable:s=n}={}){const i=s?`${s}.order`:"order",o=this.url.searchParams.get(i);return this.url.searchParams.set(i,`${o?`${o},`:""}${t}.${e?"asc":"desc"}${r===void 0?"":r?".nullsfirst":".nullslast"}`),this}limit(t,{foreignTable:e,referencedTable:r=e}={}){const n=typeof r>"u"?"limit":`${r}.limit`;return this.url.searchParams.set(n,`${t}`),this}range(t,e,{foreignTable:r,referencedTable:n=r}={}){const s=typeof n>"u"?"offset":`${n}.offset`,i=typeof n>"u"?"limit":`${n}.limit`;return this.url.searchParams.set(s,`${t}`),this.url.searchParams.set(i,`${e-t+1}`),this}abortSignal(t){return this.signal=t,this}single(){return this.headers.set("Accept","application/vnd.pgrst.object+json"),this}maybeSingle(){return this.isMaybeSingle=!0,this}csv(){return this.headers.set("Accept","text/csv"),this}geojson(){return this.headers.set("Accept","application/geo+json"),this}explain({analyze:t=!1,verbose:e=!1,settings:r=!1,buffers:n=!1,wal:s=!1,format:i="text"}={}){var o;const a=[t?"analyze":null,e?"verbose":null,r?"settings":null,n?"buffers":null,s?"wal":null].filter(Boolean).join("|"),l=(o=this.headers.get("Accept"))!==null&&o!==void 0?o:"application/json";return this.headers.set("Accept",`application/vnd.pgrst.plan+${i}; for="${l}"; options=${a};`),i==="json"?this:this}rollback(){return this.headers.append("Prefer","tx=rollback"),this}returns(){return this}maxAffected(t){return this.headers.append("Prefer","handling=strict"),this.headers.append("Prefer",`max-affected=${t}`),this}};const cl=new RegExp("[,()]");var Hr=class extends Kg{eq(t,e){return this.url.searchParams.append(t,`eq.${e}`),this}neq(t,e){return this.url.searchParams.append(t,`neq.${e}`),this}gt(t,e){return this.url.searchParams.append(t,`gt.${e}`),this}gte(t,e){return this.url.searchParams.append(t,`gte.${e}`),this}lt(t,e){return this.url.searchParams.append(t,`lt.${e}`),this}lte(t,e){return this.url.searchParams.append(t,`lte.${e}`),this}like(t,e){return this.url.searchParams.append(t,`like.${e}`),this}likeAllOf(t,e){return this.url.searchParams.append(t,`like(all).{${e.join(",")}}`),this}likeAnyOf(t,e){return this.url.searchParams.append(t,`like(any).{${e.join(",")}}`),this}ilike(t,e){return this.url.searchParams.append(t,`ilike.${e}`),this}ilikeAllOf(t,e){return this.url.searchParams.append(t,`ilike(all).{${e.join(",")}}`),this}ilikeAnyOf(t,e){return this.url.searchParams.append(t,`ilike(any).{${e.join(",")}}`),this}regexMatch(t,e){return this.url.searchParams.append(t,`match.${e}`),this}regexIMatch(t,e){return this.url.searchParams.append(t,`imatch.${e}`),this}is(t,e){return this.url.searchParams.append(t,`is.${e}`),this}isDistinct(t,e){return this.url.searchParams.append(t,`isdistinct.${e}`),this}in(t,e){const r=Array.from(new Set(e)).map(n=>typeof n=="string"&&cl.test(n)?`"${n}"`:`${n}`).join(",");return this.url.searchParams.append(t,`in.(${r})`),this}notIn(t,e){const r=Array.from(new Set(e)).map(n=>typeof n=="string"&&cl.test(n)?`"${n}"`:`${n}`).join(",");return this.url.searchParams.append(t,`not.in.(${r})`),this}contains(t,e){return typeof e=="string"?this.url.searchParams.append(t,`cs.${e}`):Array.isArray(e)?this.url.searchParams.append(t,`cs.{${e.join(",")}}`):this.url.searchParams.append(t,`cs.${JSON.stringify(e)}`),this}containedBy(t,e){return typeof e=="string"?this.url.searchParams.append(t,`cd.${e}`):Array.isArray(e)?this.url.searchParams.append(t,`cd.{${e.join(",")}}`):this.url.searchParams.append(t,`cd.${JSON.stringify(e)}`),this}rangeGt(t,e){return this.url.searchParams.append(t,`sr.${e}`),this}rangeGte(t,e){return this.url.searchParams.append(t,`nxl.${e}`),this}rangeLt(t,e){return this.url.searchParams.append(t,`sl.${e}`),this}rangeLte(t,e){return this.url.searchParams.append(t,`nxr.${e}`),this}rangeAdjacent(t,e){return this.url.searchParams.append(t,`adj.${e}`),this}overlaps(t,e){return typeof e=="string"?this.url.searchParams.append(t,`ov.${e}`):this.url.searchParams.append(t,`ov.{${e.join(",")}}`),this}textSearch(t,e,{config:r,type:n}={}){let s="";n==="plain"?s="pl":n==="phrase"?s="ph":n==="websearch"&&(s="w");const i=r===void 0?"":`(${r})`;return this.url.searchParams.append(t,`${s}fts${i}.${e}`),this}match(t){return Object.entries(t).filter(([e,r])=>r!==void 0).forEach(([e,r])=>{this.url.searchParams.append(e,`eq.${r}`)}),this}not(t,e,r){return this.url.searchParams.append(t,`not.${e}.${r}`),this}or(t,{foreignTable:e,referencedTable:r=e}={}){const n=r?`${r}.or`:"or";return this.url.searchParams.append(n,`(${t})`),this}filter(t,e,r){return this.url.searchParams.append(t,`${e}.${r}`),this}},Gg=class{constructor(t,{headers:e={},schema:r,fetch:n,urlLengthLimit:s=8e3,retry:i}){this.url=t,this.headers=new Headers(e),this.schema=r,this.fetch=n,this.urlLengthLimit=s,this.retry=i}cloneRequestState(){return{url:new URL(this.url.toString()),headers:new Headers(this.headers)}}select(t,e){const{head:r=!1,count:n}=e??{},s=r?"HEAD":"GET";let i=!1;const o=(t??"*").split("").map(c=>/\s/.test(c)&&!i?"":(c==='"'&&(i=!i),c)).join(""),{url:a,headers:l}=this.cloneRequestState();return a.searchParams.set("select",o),n&&l.append("Prefer",`count=${n}`),new Hr({method:s,url:a,headers:l,schema:this.schema,fetch:this.fetch,urlLengthLimit:this.urlLengthLimit,retry:this.retry})}insert(t,{count:e,defaultToNull:r=!0}={}){var n;const s="POST",{url:i,headers:o}=this.cloneRequestState();if(e&&o.append("Prefer",`count=${e}`),r||o.append("Prefer","missing=default"),Array.isArray(t)){const a=t.reduce((l,c)=>l.concat(Object.keys(c)),[]);if(a.length>0){const l=[...new Set(a)].map(c=>`"${c}"`);i.searchParams.set("columns",l.join(","))}}return new Hr({method:s,url:i,headers:o,schema:this.schema,body:t,fetch:(n=this.fetch)!==null&&n!==void 0?n:fetch,urlLengthLimit:this.urlLengthLimit,retry:this.retry})}upsert(t,{onConflict:e,ignoreDuplicates:r=!1,count:n,defaultToNull:s=!0}={}){var i;const o="POST",{url:a,headers:l}=this.cloneRequestState();if(l.append("Prefer",`resolution=${r?"ignore":"merge"}-duplicates`),e!==void 0&&a.searchParams.set("on_conflict",e),n&&l.append("Prefer",`count=${n}`),s||l.append("Prefer","missing=default"),Array.isArray(t)){const c=t.reduce((u,h)=>u.concat(Object.keys(h)),[]);if(c.length>0){const u=[...new Set(c)].map(h=>`"${h}"`);a.searchParams.set("columns",u.join(","))}}return new Hr({method:o,url:a,headers:l,schema:this.schema,body:t,fetch:(i=this.fetch)!==null&&i!==void 0?i:fetch,urlLengthLimit:this.urlLengthLimit,retry:this.retry})}update(t,{count:e}={}){var r;const n="PATCH",{url:s,headers:i}=this.cloneRequestState();return e&&i.append("Prefer",`count=${e}`),new Hr({method:n,url:s,headers:i,schema:this.schema,body:t,fetch:(r=this.fetch)!==null&&r!==void 0?r:fetch,urlLengthLimit:this.urlLengthLimit,retry:this.retry})}delete({count:t}={}){var e;const r="DELETE",{url:n,headers:s}=this.cloneRequestState();return t&&s.append("Prefer",`count=${t}`),new Hr({method:r,url:n,headers:s,schema:this.schema,fetch:(e=this.fetch)!==null&&e!==void 0?e:fetch,urlLengthLimit:this.urlLengthLimit,retry:this.retry})}};function Vn(t){"@babel/helpers - typeof";return Vn=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(e){return typeof e}:function(e){return e&&typeof Symbol=="function"&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Vn(t)}function Jg(t,e){if(Vn(t)!="object"||!t)return t;var r=t[Symbol.toPrimitive];if(r!==void 0){var n=r.call(t,e);if(Vn(n)!="object")return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return(e==="string"?String:Number)(t)}function Yg(t){var e=Jg(t,"string");return Vn(e)=="symbol"?e:e+""}function Xg(t,e,r){return(e=Yg(e))in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}function ul(t,e){var r=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter(function(s){return Object.getOwnPropertyDescriptor(t,s).enumerable})),r.push.apply(r,n)}return r}function os(t){for(var e=1;e<arguments.length;e++){var r=arguments[e]!=null?arguments[e]:{};e%2?ul(Object(r),!0).forEach(function(n){Xg(t,n,r[n])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(r)):ul(Object(r)).forEach(function(n){Object.defineProperty(t,n,Object.getOwnPropertyDescriptor(r,n))})}return t}var Zg=class Ou{constructor(e,{headers:r={},schema:n,fetch:s,timeout:i,urlLengthLimit:o=8e3,retry:a}={}){this.url=e,this.headers=new Headers(r),this.schemaName=n,this.urlLengthLimit=o;const l=s??globalThis.fetch;i!==void 0&&i>0?this.fetch=(c,u)=>{const h=new AbortController,d=setTimeout(()=>h.abort(),i),f=u==null?void 0:u.signal;if(f){if(f.aborted)return clearTimeout(d),l(c,u);const p=()=>{clearTimeout(d),h.abort()};return f.addEventListener("abort",p,{once:!0}),l(c,os(os({},u),{},{signal:h.signal})).finally(()=>{clearTimeout(d),f.removeEventListener("abort",p)})}return l(c,os(os({},u),{},{signal:h.signal})).finally(()=>clearTimeout(d))}:this.fetch=l,this.retry=a}from(e){if(!e||typeof e!="string"||e.trim()==="")throw new Error("Invalid relation name: relation must be a non-empty string.");return new Gg(new URL(`${this.url}/${e}`),{headers:new Headers(this.headers),schema:this.schemaName,fetch:this.fetch,urlLengthLimit:this.urlLengthLimit,retry:this.retry})}schema(e){return new Ou(this.url,{headers:this.headers,schema:e,fetch:this.fetch,urlLengthLimit:this.urlLengthLimit,retry:this.retry})}rpc(e,r={},{head:n=!1,get:s=!1,count:i}={}){var o;let a;const l=new URL(`${this.url}/rpc/${e}`);let c;const u=f=>f!==null&&typeof f=="object"&&(!Array.isArray(f)||f.some(u)),h=n&&Object.values(r).some(u);h?(a="POST",c=r):n||s?(a=n?"HEAD":"GET",Object.entries(r).filter(([f,p])=>p!==void 0).map(([f,p])=>[f,Array.isArray(p)?`{${p.join(",")}}`:`${p}`]).forEach(([f,p])=>{l.searchParams.append(f,p)})):(a="POST",c=r);const d=new Headers(this.headers);return h?d.set("Prefer",i?`count=${i},return=minimal`:"return=minimal"):i&&d.set("Prefer",`count=${i}`),new Hr({method:a,url:l,headers:d,schema:this.schemaName,body:c,fetch:(o=this.fetch)!==null&&o!==void 0?o:fetch,urlLengthLimit:this.urlLengthLimit,retry:this.retry})}};class Qg{constructor(){}static detectEnvironment(){var e;if(typeof WebSocket<"u")return{type:"native",wsConstructor:WebSocket};const r=globalThis;if(typeof globalThis<"u"&&typeof r.WebSocket<"u")return{type:"native",wsConstructor:r.WebSocket};const n=typeof global<"u"?global:void 0;if(n&&typeof n.WebSocket<"u")return{type:"native",wsConstructor:n.WebSocket};if(typeof globalThis<"u"&&typeof r.WebSocketPair<"u"&&typeof globalThis.WebSocket>"u")return{type:"cloudflare",error:"Cloudflare Workers detected. WebSocket clients are not supported in Cloudflare Workers.",workaround:"Use Cloudflare Workers WebSocket API for server-side WebSocket handling, or deploy to a different runtime."};if(typeof globalThis<"u"&&r.EdgeRuntime||typeof navigator<"u"&&(!((e=navigator.userAgent)===null||e===void 0)&&e.includes("Vercel-Edge")))return{type:"unsupported",error:"Edge runtime detected (Vercel Edge/Netlify Edge). WebSockets are not supported in edge functions.",workaround:"Use serverless functions or a different deployment target for WebSocket functionality."};const s=globalThis.process;if(s){const i=s.versions;if(i&&i.node){const o=i.node,a=parseInt(o.replace(/^v/,"").split(".")[0]);return a>=22?typeof globalThis.WebSocket<"u"?{type:"native",wsConstructor:globalThis.WebSocket}:{type:"unsupported",error:`Node.js ${a} detected but native WebSocket not found.`,workaround:"Provide a WebSocket implementation via the transport option."}:{type:"unsupported",error:`Node.js ${a} detected without native WebSocket support.`,workaround:`For Node.js < 22, install "ws" package and provide it via the transport option:
|
|
@@ -266,4 +266,4 @@ ${t}</tr>
|
|
|
266
266
|
`}tablecell(t){const e=this.parser.parseInline(t.tokens),r=t.header?"th":"td";return(t.align?`<${r} align="${t.align}">`:`<${r}>`)+e+`</${r}>
|
|
267
267
|
`}strong({tokens:t}){return`<strong>${this.parser.parseInline(t)}</strong>`}em({tokens:t}){return`<em>${this.parser.parseInline(t)}</em>`}codespan({text:t}){return`<code>${xt(t,!0)}</code>`}br(t){return"<br>"}del({tokens:t}){return`<del>${this.parser.parseInline(t)}</del>`}link({href:t,title:e,tokens:r}){const n=this.parser.parseInline(r),s=Ml(t);if(s===null)return n;t=s;let i='<a href="'+t+'"';return e&&(i+=' title="'+xt(e)+'"'),i+=">"+n+"</a>",i}image({href:t,title:e,text:r,tokens:n}){n&&(r=this.parser.parseInline(n,this.parser.textRenderer));const s=Ml(t);if(s===null)return xt(r);t=s;let i=`<img src="${t}" alt="${r}"`;return e&&(i+=` title="${xt(e)}"`),i+=">",i}text(t){return"tokens"in t&&t.tokens?this.parser.parseInline(t.tokens):"escaped"in t&&t.escaped?t.text:xt(t.text)}},zo=class{strong({text:t}){return t}em({text:t}){return t}codespan({text:t}){return t}del({text:t}){return t}html({text:t}){return t}text({text:t}){return t}link({text:t}){return""+t}image({text:t}){return""+t}br(){return""}},Jt=class go{constructor(e){be(this,"options");be(this,"renderer");be(this,"textRenderer");this.options=e||Or,this.options.renderer=this.options.renderer||new Us,this.renderer=this.options.renderer,this.renderer.options=this.options,this.renderer.parser=this,this.textRenderer=new zo}static parse(e,r){return new go(r).parse(e)}static parseInline(e,r){return new go(r).parseInline(e)}parse(e,r=!0){var s,i;let n="";for(let o=0;o<e.length;o++){const a=e[o];if((i=(s=this.options.extensions)==null?void 0:s.renderers)!=null&&i[a.type]){const c=a,u=this.options.extensions.renderers[c.type].call({parser:this},c);if(u!==!1||!["space","hr","heading","code","table","blockquote","list","html","paragraph","text"].includes(c.type)){n+=u||"";continue}}const l=a;switch(l.type){case"space":{n+=this.renderer.space(l);continue}case"hr":{n+=this.renderer.hr(l);continue}case"heading":{n+=this.renderer.heading(l);continue}case"code":{n+=this.renderer.code(l);continue}case"table":{n+=this.renderer.table(l);continue}case"blockquote":{n+=this.renderer.blockquote(l);continue}case"list":{n+=this.renderer.list(l);continue}case"html":{n+=this.renderer.html(l);continue}case"paragraph":{n+=this.renderer.paragraph(l);continue}case"text":{let c=l,u=this.renderer.text(c);for(;o+1<e.length&&e[o+1].type==="text";)c=e[++o],u+=`
|
|
268
268
|
`+this.renderer.text(c);r?n+=this.renderer.paragraph({type:"paragraph",raw:u,text:u,tokens:[{type:"text",raw:u,text:u,escaped:!0}]}):n+=u;continue}default:{const c='Token with "'+l.type+'" type was not found.';if(this.options.silent)return console.error(c),"";throw new Error(c)}}}return n}parseInline(e,r=this.renderer){var s,i;let n="";for(let o=0;o<e.length;o++){const a=e[o];if((i=(s=this.options.extensions)==null?void 0:s.renderers)!=null&&i[a.type]){const c=this.options.extensions.renderers[a.type].call({parser:this},a);if(c!==!1||!["escape","html","link","image","strong","em","codespan","br","del","text"].includes(a.type)){n+=c||"";continue}}const l=a;switch(l.type){case"escape":{n+=r.text(l);break}case"html":{n+=r.html(l);break}case"link":{n+=r.link(l);break}case"image":{n+=r.image(l);break}case"strong":{n+=r.strong(l);break}case"em":{n+=r.em(l);break}case"codespan":{n+=r.codespan(l);break}case"br":{n+=r.br(l);break}case"del":{n+=r.del(l);break}case"text":{n+=r.text(l);break}default:{const c='Token with "'+l.type+'" type was not found.';if(this.options.silent)return console.error(c),"";throw new Error(c)}}}return n}},ji,_s=(ji=class{constructor(t){be(this,"options");be(this,"block");this.options=t||Or}preprocess(t){return t}postprocess(t){return t}processAllTokens(t){return t}provideLexer(){return this.block?Gt.lex:Gt.lexInline}provideParser(){return this.block?Jt.parse:Jt.parseInline}},be(ji,"passThroughHooks",new Set(["preprocess","postprocess","processAllTokens"])),ji),Cb=class{constructor(...t){be(this,"defaults",Do());be(this,"options",this.setOptions);be(this,"parse",this.parseMarkdown(!0));be(this,"parseInline",this.parseMarkdown(!1));be(this,"Parser",Jt);be(this,"Renderer",Us);be(this,"TextRenderer",zo);be(this,"Lexer",Gt);be(this,"Tokenizer",Ds);be(this,"Hooks",_s);this.use(...t)}walkTokens(t,e){var n,s;let r=[];for(const i of t)switch(r=r.concat(e.call(this,i)),i.type){case"table":{const o=i;for(const a of o.header)r=r.concat(this.walkTokens(a.tokens,e));for(const a of o.rows)for(const l of a)r=r.concat(this.walkTokens(l.tokens,e));break}case"list":{const o=i;r=r.concat(this.walkTokens(o.items,e));break}default:{const o=i;(s=(n=this.defaults.extensions)==null?void 0:n.childTokens)!=null&&s[o.type]?this.defaults.extensions.childTokens[o.type].forEach(a=>{const l=o[a].flat(1/0);r=r.concat(this.walkTokens(l,e))}):o.tokens&&(r=r.concat(this.walkTokens(o.tokens,e)))}}return r}use(...t){const e=this.defaults.extensions||{renderers:{},childTokens:{}};return t.forEach(r=>{const n={...r};if(n.async=this.defaults.async||n.async||!1,r.extensions&&(r.extensions.forEach(s=>{if(!s.name)throw new Error("extension name required");if("renderer"in s){const i=e.renderers[s.name];i?e.renderers[s.name]=function(...o){let a=s.renderer.apply(this,o);return a===!1&&(a=i.apply(this,o)),a}:e.renderers[s.name]=s.renderer}if("tokenizer"in s){if(!s.level||s.level!=="block"&&s.level!=="inline")throw new Error("extension level must be 'block' or 'inline'");const i=e[s.level];i?i.unshift(s.tokenizer):e[s.level]=[s.tokenizer],s.start&&(s.level==="block"?e.startBlock?e.startBlock.push(s.start):e.startBlock=[s.start]:s.level==="inline"&&(e.startInline?e.startInline.push(s.start):e.startInline=[s.start]))}"childTokens"in s&&s.childTokens&&(e.childTokens[s.name]=s.childTokens)}),n.extensions=e),r.renderer){const s=this.defaults.renderer||new Us(this.defaults);for(const i in r.renderer){if(!(i in s))throw new Error(`renderer '${i}' does not exist`);if(["options","parser"].includes(i))continue;const o=i,a=r.renderer[o],l=s[o];s[o]=(...c)=>{let u=a.apply(s,c);return u===!1&&(u=l.apply(s,c)),u||""}}n.renderer=s}if(r.tokenizer){const s=this.defaults.tokenizer||new Ds(this.defaults);for(const i in r.tokenizer){if(!(i in s))throw new Error(`tokenizer '${i}' does not exist`);if(["options","rules","lexer"].includes(i))continue;const o=i,a=r.tokenizer[o],l=s[o];s[o]=(...c)=>{let u=a.apply(s,c);return u===!1&&(u=l.apply(s,c)),u}}n.tokenizer=s}if(r.hooks){const s=this.defaults.hooks||new _s;for(const i in r.hooks){if(!(i in s))throw new Error(`hook '${i}' does not exist`);if(["options","block"].includes(i))continue;const o=i,a=r.hooks[o],l=s[o];_s.passThroughHooks.has(i)?s[o]=c=>{if(this.defaults.async)return Promise.resolve(a.call(s,c)).then(h=>l.call(s,h));const u=a.call(s,c);return l.call(s,u)}:s[o]=(...c)=>{let u=a.apply(s,c);return u===!1&&(u=l.apply(s,c)),u}}n.hooks=s}if(r.walkTokens){const s=this.defaults.walkTokens,i=r.walkTokens;n.walkTokens=function(o){let a=[];return a.push(i.call(this,o)),s&&(a=a.concat(s.call(this,o))),a}}this.defaults={...this.defaults,...n}}),this}setOptions(t){return this.defaults={...this.defaults,...t},this}lexer(t,e){return Gt.lex(t,e??this.defaults)}parser(t,e){return Jt.parse(t,e??this.defaults)}parseMarkdown(t){return(r,n)=>{const s={...n},i={...this.defaults,...s},o=this.onError(!!i.silent,!!i.async);if(this.defaults.async===!0&&s.async===!1)return o(new Error("marked(): The async option was set to true by an extension. Remove async: false from the parse options object to return a Promise."));if(typeof r>"u"||r===null)return o(new Error("marked(): input parameter is undefined or null"));if(typeof r!="string")return o(new Error("marked(): input parameter is of type "+Object.prototype.toString.call(r)+", string expected"));i.hooks&&(i.hooks.options=i,i.hooks.block=t);const a=i.hooks?i.hooks.provideLexer():t?Gt.lex:Gt.lexInline,l=i.hooks?i.hooks.provideParser():t?Jt.parse:Jt.parseInline;if(i.async)return Promise.resolve(i.hooks?i.hooks.preprocess(r):r).then(c=>a(c,i)).then(c=>i.hooks?i.hooks.processAllTokens(c):c).then(c=>i.walkTokens?Promise.all(this.walkTokens(c,i.walkTokens)).then(()=>c):c).then(c=>l(c,i)).then(c=>i.hooks?i.hooks.postprocess(c):c).catch(o);try{i.hooks&&(r=i.hooks.preprocess(r));let c=a(r,i);i.hooks&&(c=i.hooks.processAllTokens(c)),i.walkTokens&&this.walkTokens(c,i.walkTokens);let u=l(c,i);return i.hooks&&(u=i.hooks.postprocess(u)),u}catch(c){return o(c)}}}onError(t,e){return r=>{if(r.message+=`
|
|
269
|
-
Please report this to https://github.com/markedjs/marked.`,t){const n="<p>An error occurred:</p><pre>"+xt(r.message+"",!0)+"</pre>";return e?Promise.resolve(n):n}if(e)return Promise.reject(r);throw r}}},Cr=new Cb;function pe(t,e){return Cr.parse(t,e)}pe.options=pe.setOptions=function(t){return Cr.setOptions(t),pe.defaults=Cr.defaults,Xu(pe.defaults),pe};pe.getDefaults=Do;pe.defaults=Or;pe.use=function(...t){return Cr.use(...t),pe.defaults=Cr.defaults,Xu(pe.defaults),pe};pe.walkTokens=function(t,e){return Cr.walkTokens(t,e)};pe.parseInline=Cr.parseInline;pe.Parser=Jt;pe.parser=Jt.parse;pe.Renderer=Us;pe.TextRenderer=zo;pe.Lexer=Gt;pe.lexer=Gt.lex;pe.Tokenizer=Ds;pe.Hooks=_s;pe.parse=pe;pe.options;pe.setOptions;pe.use;pe.walkTokens;pe.parseInline;Jt.parse;Gt.lex;const Ob=["innerHTML"],Pb=pr({__name:"MarkdownContent",props:{content:{}},setup(t){const e=t,r=new pe.Renderer;r.link=({href:s,title:i,text:o})=>{const a=s??"",l=i?` title="${i}"`:"";return`<a href="${a}"${l} target="_blank" rel="noopener noreferrer">${o}</a>`};const n=je(()=>e.content?pe.parse(e.content,{async:!1,renderer:r}):"");return(s,i)=>(Z(),ue("div",{class:"prose prose-sm dark:prose-invert max-w-none markdown-content",innerHTML:n.value},null,8,Ob))}}),lh=10*1024*1024,ch=25*1024*1024;function yn(t){return t<1024?`${t} B`:t<1024*1024?`${(t/1024).toFixed(1)} KB`:`${(t/(1024*1024)).toFixed(1)} MB`}function $i(t){return t.mimeType.startsWith("image/")}function Ib(t){return`data:${t.mimeType};base64,${t.content}`}async function $b(t){const e=await new Promise((n,s)=>{const i=new FileReader;i.onload=()=>n(String(i.result??"")),i.onerror=()=>s(new Error("Unable to read file")),i.readAsDataURL(t)}),r=e.indexOf(",");if(r===-1)throw new Error(`Unable to parse file content for ${t.name}`);return{name:t.name,mimeType:t.type||"application/octet-stream",size:t.size,content:e.slice(r+1)}}function jb(t){for(const r of t)if(r.size>lh)return{ok:!1,error:`"${r.name}" exceeds the 10MB per-file limit.`};return t.reduce((r,n)=>r+n.size,0)>ch?{ok:!1,error:"Attachments exceed the 25MB per-message limit."}:{ok:!0}}const Nb={class:"overlay-header",style:{background:"linear-gradient(180deg, rgba(216,51,51,0.12) 0%, rgba(240,65,255,0.06) 100%)"}},Lb={key:0,class:"flex h-full items-center justify-center px-5 text-center"},Db={key:0,class:"overlay-avatar-letter"},Ub={key:0,class:"mb-2 space-y-2"},Bb=["src","alt"],Mb={class:"flex items-center gap-2 text-[9px]"},Hb={class:"truncate"},qb={class:"opacity-70"},Fb={key:2,class:"text-zinc-500"},Vb={key:0,class:"overlay-stream-indicator"},zb={class:"overlay-footer"},Wb={key:0,class:"mb-2 space-y-2"},Kb={class:"flex flex-wrap gap-1.5"},Gb={class:"max-w-[120px] truncate"},Jb={class:"opacity-65"},Yb=["onClick"],Xb={class:"overlay-meta text-zinc-500"},Zb={key:1,class:"mb-2 text-[11px] text-[#ef4444]"},Qb={class:"overlay-composer-field"},e_=["disabled"],t_=["disabled","aria-label","title"],r_=pr({__name:"ChatOverlay",setup(t){const e=Kv(),r=ln(),n=jo(),s=Oe(!1),i=Oe(""),o=Oe(""),a=Oe(!1),l=Oe([]),c=Oe(),u=Oe(),h=Oe(),d=Oe(!0),f=Oe(!1),p=[0,110,220],y=je(()=>e.messages.length>0),w=()=>n.path==="/",k=je(()=>l.value.reduce((L,se)=>L+se.size,0)),_=je(()=>{const L=typeof r.email=="string"?r.email.trim():"";return L?L.charAt(0).toUpperCase():"U"}),b=je(()=>!e.isStreaming&&(i.value.trim().length>0||l.value.length>0));function x(){w()||(s.value=!s.value)}function D(){h.value&&(h.value.style.height="auto",h.value.style.height=`${Math.min(h.value.scrollHeight,136)}px`)}function M(){if(!c.value)return;const L=c.value,se=L.scrollHeight-L.scrollTop-L.clientHeight;d.value=se<40,f.value=!d.value}function U(L=!1){c.value&&(L||d.value)&&(c.value.scrollTop=c.value.scrollHeight,f.value=!1)}async function V(L){if(!L||L.length===0)return;o.value="";const se=[];try{for(const ae of Array.from(L))se.push(await $b(ae))}catch(ae){o.value=(ae==null?void 0:ae.message)??"Unable to read one or more files.";return}const We=[...l.value,...se],ie=jb(We);if(!ie.ok){o.value=ie.error;return}l.value=We,u.value&&(u.value.value="")}function C(L){l.value.splice(L,1),o.value=""}function z(){var L;e.isStreaming||(L=u.value)==null||L.click()}function Q(L){const se=L.target;V((se==null?void 0:se.files)??null)}async function O(){if(!b.value)return;const L=i.value.trim(),se=[...l.value],We=L||"Please review the attached file(s).";i.value="",l.value=[],o.value="",D(),await e.sendMessage(We,se)}function Y(){e.stopStreaming()}function Ee(L){if(L.key==="Enter"&&!L.shiftKey){if(L.preventDefault(),e.isStreaming){Y();return}O()}}function Ne(L){L.preventDefault(),!e.isStreaming&&(a.value=!0)}function ye(L){L.preventDefault(),a.value=!1}async function te(L){var se;L.preventDefault(),a.value=!1,!e.isStreaming&&await V(((se=L.dataTransfer)==null?void 0:se.files)??null)}return Kt(i,()=>D()),Kt(()=>e.messages.map(L=>L.content),async()=>{await hr(),M(),U()},{deep:!0}),Kt(()=>e.messages.length,async()=>{await hr(),M(),U(!0)}),Kt(s,async L=>{L&&(await hr(),D(),M(),U(!0))}),xo(async()=>{await hr(),D()}),(L,se)=>{const We=Zs("X");return Z(),ue(Fe,null,[!s.value&&!w()?(Z(),ue("button",{key:0,onClick:x,class:"overlay-fab",title:"Chat with IO","aria-label":"Open chat overlay"},[he(re(xu),{class:"h-4 w-4 text-white"})])):$e("",!0),he(yf,{"enter-active-class":"transition-all duration-200 ease-out","enter-from-class":"opacity-0 translate-y-4 scale-[0.98]","enter-to-class":"opacity-100 translate-y-0 scale-100","leave-active-class":"transition-all duration-150 ease-in","leave-from-class":"opacity-100 translate-y-0 scale-100","leave-to-class":"opacity-0 translate-y-4 scale-[0.98]"},{default:Yr(()=>[s.value?(Z(),ue("section",{key:0,class:Ye(["overlay-panel",a.value?"overlay-panel-dragging":""]),"aria-label":"IO Assistant chat",onDragover:Ne,onDragleave:ye,onDrop:te},[ne("header",Nb,[se[4]||(se[4]=ne("div",{class:"flex items-center gap-2.5"},[ne("div",{class:"overlay-brand-mark","aria-hidden":"true"},[ne("img",{src:Tu,alt:"IO",width:"18",height:"18",class:"shrink-0"})]),ne("div",{class:"flex items-center leading-none"},[ne("span",{class:"overlay-title"},"IO Chat")])],-1)),ne("button",{onClick:se[0]||(se[0]=ie=>s.value=!1),class:"overlay-icon-btn","aria-label":"Minimize chat overlay",title:"Minimize chat"},[he(re(_g),{class:"h-3.5 w-3.5"})])]),ne("div",{ref_key:"messagesContainer",ref:c,class:"overlay-messages",onScroll:M},[y.value?$e("",!0):(Z(),ue("div",Lb,[ne("div",null,[he(Zi,{size:32,class:"mx-auto mb-3 shrink-0"}),se[5]||(se[5]=ne("p",{class:"overlay-empty-copy"},"Ask IO about your workspace, agents, or recent changes.",-1))])])),(Z(!0),ue(Fe,null,zr(re(e).messages,ie=>(Z(),ue("div",{key:ie.id,class:Ye(["flex",ie.role==="user"?"justify-end":"justify-start"])},[ne("div",{class:Ye(["flex max-w-full items-start gap-2",ie.role==="user"?"flex-row-reverse":""])},[ne("div",{class:Ye(["overlay-avatar",ie.role==="user"?"overlay-avatar-user":"overlay-avatar-assistant"]),"aria-hidden":"true"},[ie.role==="user"?(Z(),ue("span",Db,it(_.value),1)):(Z(),nt(Zi,{key:1,size:10,class:"shrink-0"}))],2),ne("article",{class:Ye(["overlay-bubble",ie.role==="user"?"overlay-bubble-user rounded-tr-sm":"overlay-bubble-assistant rounded-tl-sm"])},[ie.attachments.length>0?(Z(),ue("div",Ub,[(Z(!0),ue(Fe,null,zr(ie.attachments,(ae,Lt)=>(Z(),ue("div",{key:`${ie.id}-${Lt}`,class:"overlay-attachment"},[re($i)(ae)?(Z(),ue("img",{key:0,src:re(Ib)(ae),alt:ae.name,class:"mb-1 max-h-44 rounded-md object-contain"},null,8,Bb)):$e("",!0),ne("div",Mb,[re($i)(ae)?(Z(),nt(re(nl),{key:0,class:"h-3.5 w-3.5"})):(Z(),nt(re(rl),{key:1,class:"h-3.5 w-3.5"})),ne("span",Hb,it(ae.name),1),ne("span",qb,it(re(yn)(ae.size)),1)])]))),128))])):$e("",!0),ie.content?(Z(),nt(Pb,{key:1,content:ie.content,class:Ye(["overlay-markdown",ie.role==="user"?"prose-invert":""])},null,8,["content","class"])):ie.streaming?$e("",!0):(Z(),ue("span",Fb,"..."))],2)],2),ie.streaming&&ie.role==="assistant"?(Z(),ue("div",Vb,[(Z(),ue(Fe,null,zr(p,ae=>ne("span",{key:ae,class:"overlay-stream-dot",style:Ws({animationDelay:`${ae}ms`})},null,4)),64))])):$e("",!0)],2))),128))],544),f.value?(Z(),ue("button",{key:0,class:"overlay-scroll-hint",type:"button",onClick:se[1]||(se[1]=ie=>U(!0)),"aria-label":"Scroll to latest message"},[he(re(pg),{class:"h-3.5 w-3.5"}),se[6]||(se[6]=ru(" Latest ",-1))])):$e("",!0),ne("footer",zb,[ne("input",{ref_key:"fileInput",ref:u,type:"file",multiple:"",class:"hidden",onChange:Q},null,544),l.value.length>0?(Z(),ue("div",Wb,[ne("div",Kb,[(Z(!0),ue(Fe,null,zr(l.value,(ie,ae)=>(Z(),ue("div",{key:`${ie.name}-${ae}`,class:"overlay-chip"},[re($i)(ie)?(Z(),nt(re(nl),{key:0,class:"h-3.5 w-3.5"})):(Z(),nt(re(rl),{key:1,class:"h-3.5 w-3.5"})),ne("span",Gb,it(ie.name),1),ne("span",Jb,it(re(yn)(ie.size)),1),ne("button",{class:"hover:text-destructive",onClick:Lt=>C(ae)},[he(We,{class:"h-3.5 w-3.5"})],8,Yb)]))),128))]),ne("p",Xb,it(re(yn)(k.value))+" · Max "+it(re(yn)(re(lh)))+" file · "+it(re(yn)(re(ch)))+" total ",1)])):$e("",!0),o.value?(Z(),ue("p",Zb,it(o.value),1)):$e("",!0),ne("div",Qb,[ne("button",{class:"overlay-attach-btn",disabled:re(e).isStreaming,onClick:z,title:"Attach files","aria-label":"Attach files"},[he(re(Sg),{class:"h-4 w-4"})],8,e_),od(ne("textarea",{ref_key:"textareaRef",ref:h,"onUpdate:modelValue":se[2]||(se[2]=ie=>i.value=ie),onKeydown:Ee,placeholder:"Message IO…",rows:"1",class:"overlay-input"},null,544),[[Mf,i.value]]),ne("button",{onClick:se[3]||(se[3]=ie=>re(e).isStreaming?Y():O()),disabled:!b.value&&!re(e).isStreaming,class:"overlay-send-btn","aria-label":re(e).isStreaming?"Stop generation":"Send message",title:re(e).isStreaming?"Stop generation":"Send message"},[re(e).isStreaming?(Z(),nt(re(Rg),{key:1,class:"h-3 w-3"})):(Z(),nt(re(Tg),{key:0,class:"h-3 w-3"}))],8,t_)])])],34)):$e("",!0)]),_:1})],64)}}}),n_=(t,e)=>{const r=t.__vccOpts||t;for(const[n,s]of e)r[n]=s;return r},s_=n_(r_,[["__scopeId","data-v-0be88a62"]]),i_={class:"flex h-screen overflow-hidden"},o_={class:"flex-1 flex flex-col overflow-hidden"},a_={class:"flex-1 overflow-auto"},l_=pr({__name:"App",setup(t){const e=ln(),r=jo(),n=je(()=>e.isAuthenticated&&r.name!=="login");return(s,i)=>{const o=Zs("router-view");return Z(),ue("div",i_,[n.value?(Z(),nt(Ug,{key:0})):$e("",!0),ne("div",o_,[n.value?(Z(),nt(Vv,{key:0})):$e("",!0),ne("main",a_,[he(o)])]),n.value?(Z(),nt(s_,{key:1})):$e("",!0)])}}}),c_=[{path:"/login",name:"login",component:()=>Ke(()=>import("./LoginView-CNnHmWRL.js"),[]),meta:{public:!0}},{path:"/",name:"chat",component:()=>Ke(()=>import("./ChatView-Dxk6eQl1.js"),__vite__mapDeps([0,1]))},{path:"/squads",name:"squads",component:()=>Ke(()=>import("./SquadsView-C6ikS5RW.js"),__vite__mapDeps([2,3,4,5]))},{path:"/squads/health",name:"squad-health",component:()=>Ke(()=>import("./SquadHealthView-CicAIjwi.js"),__vite__mapDeps([6,3,7,5]))},{path:"/squads/:id",name:"squad-detail",component:()=>Ke(()=>import("./SquadDetailView-BOAi0Hgv.js"),__vite__mapDeps([8,3,4,1,5,9,10]))},{path:"/feed",name:"feed",component:()=>Ke(()=>import("./FeedView-CUuImaZo.js"),__vite__mapDeps([11,3,4,9]))},{path:"/skills",name:"skills",component:()=>Ke(()=>import("./SkillsView-DoSq-jyC.js"),__vite__mapDeps([12,3,13,14,15,16,1,9]))},{path:"/mcp",name:"mcp",component:()=>Ke(()=>import("./McpView-zHTJmc0Y.js"),__vite__mapDeps([17,3,18,13,9]))},{path:"/schedules",name:"schedules",component:()=>Ke(()=>import("./SchedulesView-DAGAkVsM.js"),__vite__mapDeps([19,3,4,18,13,15,9]))},{path:"/history",name:"history",component:()=>Ke(()=>import("./HistoryView-DXsZEMVH.js"),__vite__mapDeps([20,3,14,10,9]))},{path:"/wiki",name:"wiki",component:()=>Ke(()=>import("./WikiView-CYSbQVLd.js"),__vite__mapDeps([21,3,14,13,15,9,16,1]))},{path:"/usage",name:"usage",component:()=>Ke(()=>import("./UsageView-Ar_4xZn1.js"),__vite__mapDeps([22,3,7]))},{path:"/audit-log",name:"audit-log",component:()=>Ke(()=>import("./AuditLogView-C92eQY3G.js"),__vite__mapDeps([23,3]))},{path:"/settings",name:"settings",component:()=>Ke(()=>import("./SettingsView-ClF03x9D.js"),__vite__mapDeps([24,3]))}],uh=og({history:Up(),routes:c_});uh.beforeEach(t=>{const e=ln();if(!t.meta.public&&!e.isAuthenticated)return{name:"login"}});async function u_(){await Bv();const t=Wf(l_);t.use(Jf()),t.use(uh);const{useAuthStore:e}=await Ke(async()=>{const{useAuthStore:n}=await Promise.resolve().then(()=>Mv);return{useAuthStore:n}},void 0),r=e();r.initAuthListener(),r.token&&await r.refreshToken(),t.mount("#app")}u_();export{f_ as $,hg as A,dg as B,fg as C,Ws as D,xo as E,rl as F,$c as G,vg as H,nl as I,Z as J,Oe as K,zr as L,lh as M,Zs as N,uh as O,Sg as P,Ib as Q,it as R,Tg as S,re as T,Cg as U,ln as V,Kv as W,jo as X,ag as Y,d_ as Z,Zi as _,pg as a,Mf as a0,jb as a1,Kt as a2,Yr as a3,od as a4,g_ as a5,p_ as a6,gg as b,mg as c,Fe as d,Au as e,ch as f,xu as g,Eg as h,Ag as i,Rg as j,Og as k,Pb as l,je as m,ne as n,nt as o,$e as p,ue as q,Ae as r,ru as s,he as t,pr as u,$b as v,yn as w,$i as x,hr as y,Ye as z};
|
|
269
|
+
Please report this to https://github.com/markedjs/marked.`,t){const n="<p>An error occurred:</p><pre>"+xt(r.message+"",!0)+"</pre>";return e?Promise.resolve(n):n}if(e)return Promise.reject(r);throw r}}},Cr=new Cb;function pe(t,e){return Cr.parse(t,e)}pe.options=pe.setOptions=function(t){return Cr.setOptions(t),pe.defaults=Cr.defaults,Xu(pe.defaults),pe};pe.getDefaults=Do;pe.defaults=Or;pe.use=function(...t){return Cr.use(...t),pe.defaults=Cr.defaults,Xu(pe.defaults),pe};pe.walkTokens=function(t,e){return Cr.walkTokens(t,e)};pe.parseInline=Cr.parseInline;pe.Parser=Jt;pe.parser=Jt.parse;pe.Renderer=Us;pe.TextRenderer=zo;pe.Lexer=Gt;pe.lexer=Gt.lex;pe.Tokenizer=Ds;pe.Hooks=_s;pe.parse=pe;pe.options;pe.setOptions;pe.use;pe.walkTokens;pe.parseInline;Jt.parse;Gt.lex;const Ob=["innerHTML"],Pb=pr({__name:"MarkdownContent",props:{content:{}},setup(t){const e=t,r=new pe.Renderer;r.link=({href:s,title:i,text:o})=>{const a=s??"",l=i?` title="${i}"`:"";return`<a href="${a}"${l} target="_blank" rel="noopener noreferrer">${o}</a>`};const n=je(()=>e.content?pe.parse(e.content,{async:!1,renderer:r}):"");return(s,i)=>(Z(),ue("div",{class:"prose prose-sm dark:prose-invert max-w-none markdown-content",innerHTML:n.value},null,8,Ob))}}),lh=10*1024*1024,ch=25*1024*1024;function yn(t){return t<1024?`${t} B`:t<1024*1024?`${(t/1024).toFixed(1)} KB`:`${(t/(1024*1024)).toFixed(1)} MB`}function $i(t){return t.mimeType.startsWith("image/")}function Ib(t){return`data:${t.mimeType};base64,${t.content}`}async function $b(t){const e=await new Promise((n,s)=>{const i=new FileReader;i.onload=()=>n(String(i.result??"")),i.onerror=()=>s(new Error("Unable to read file")),i.readAsDataURL(t)}),r=e.indexOf(",");if(r===-1)throw new Error(`Unable to parse file content for ${t.name}`);return{name:t.name,mimeType:t.type||"application/octet-stream",size:t.size,content:e.slice(r+1)}}function jb(t){for(const r of t)if(r.size>lh)return{ok:!1,error:`"${r.name}" exceeds the 10MB per-file limit.`};return t.reduce((r,n)=>r+n.size,0)>ch?{ok:!1,error:"Attachments exceed the 25MB per-message limit."}:{ok:!0}}const Nb={class:"overlay-header",style:{background:"linear-gradient(180deg, rgba(216,51,51,0.12) 0%, rgba(240,65,255,0.06) 100%)"}},Lb={key:0,class:"flex h-full items-center justify-center px-5 text-center"},Db={key:0,class:"overlay-avatar-letter"},Ub={key:0,class:"mb-2 space-y-2"},Bb=["src","alt"],Mb={class:"flex items-center gap-2 text-[9px]"},Hb={class:"truncate"},qb={class:"opacity-70"},Fb={key:2,class:"text-zinc-500"},Vb={key:0,class:"overlay-stream-indicator"},zb={class:"overlay-footer"},Wb={key:0,class:"mb-2 space-y-2"},Kb={class:"flex flex-wrap gap-1.5"},Gb={class:"max-w-[120px] truncate"},Jb={class:"opacity-65"},Yb=["onClick"],Xb={class:"overlay-meta text-zinc-500"},Zb={key:1,class:"mb-2 text-[11px] text-[#ef4444]"},Qb={class:"overlay-composer-field"},e_=["disabled"],t_=["disabled","aria-label","title"],r_=pr({__name:"ChatOverlay",setup(t){const e=Kv(),r=ln(),n=jo(),s=Oe(!1),i=Oe(""),o=Oe(""),a=Oe(!1),l=Oe([]),c=Oe(),u=Oe(),h=Oe(),d=Oe(!0),f=Oe(!1),p=[0,110,220],y=je(()=>e.messages.length>0),w=()=>n.path==="/",k=je(()=>l.value.reduce((L,se)=>L+se.size,0)),_=je(()=>{const L=typeof r.email=="string"?r.email.trim():"";return L?L.charAt(0).toUpperCase():"U"}),b=je(()=>!e.isStreaming&&(i.value.trim().length>0||l.value.length>0));function x(){w()||(s.value=!s.value)}function D(){h.value&&(h.value.style.height="auto",h.value.style.height=`${Math.min(h.value.scrollHeight,136)}px`)}function M(){if(!c.value)return;const L=c.value,se=L.scrollHeight-L.scrollTop-L.clientHeight;d.value=se<40,f.value=!d.value}function U(L=!1){c.value&&(L||d.value)&&(c.value.scrollTop=c.value.scrollHeight,f.value=!1)}async function V(L){if(!L||L.length===0)return;o.value="";const se=[];try{for(const ae of Array.from(L))se.push(await $b(ae))}catch(ae){o.value=(ae==null?void 0:ae.message)??"Unable to read one or more files.";return}const We=[...l.value,...se],ie=jb(We);if(!ie.ok){o.value=ie.error;return}l.value=We,u.value&&(u.value.value="")}function C(L){l.value.splice(L,1),o.value=""}function z(){var L;e.isStreaming||(L=u.value)==null||L.click()}function Q(L){const se=L.target;V((se==null?void 0:se.files)??null)}async function O(){if(!b.value)return;const L=i.value.trim(),se=[...l.value],We=L||"Please review the attached file(s).";i.value="",l.value=[],o.value="",D(),await e.sendMessage(We,se)}function Y(){e.stopStreaming()}function Ee(L){if(L.key==="Enter"&&!L.shiftKey){if(L.preventDefault(),e.isStreaming){Y();return}O()}}function Ne(L){L.preventDefault(),!e.isStreaming&&(a.value=!0)}function ye(L){L.preventDefault(),a.value=!1}async function te(L){var se;L.preventDefault(),a.value=!1,!e.isStreaming&&await V(((se=L.dataTransfer)==null?void 0:se.files)??null)}return Kt(i,()=>D()),Kt(()=>e.messages.map(L=>L.content),async()=>{await hr(),M(),U()},{deep:!0}),Kt(()=>e.messages.length,async()=>{await hr(),M(),U(!0)}),Kt(s,async L=>{L&&(await hr(),D(),M(),U(!0))}),xo(async()=>{await hr(),D()}),(L,se)=>{const We=Zs("X");return Z(),ue(Fe,null,[!s.value&&!w()?(Z(),ue("button",{key:0,onClick:x,class:"overlay-fab",title:"Chat with IO","aria-label":"Open chat overlay"},[he(re(xu),{class:"h-4 w-4 text-white"})])):$e("",!0),he(yf,{"enter-active-class":"transition-all duration-200 ease-out","enter-from-class":"opacity-0 translate-y-4 scale-[0.98]","enter-to-class":"opacity-100 translate-y-0 scale-100","leave-active-class":"transition-all duration-150 ease-in","leave-from-class":"opacity-100 translate-y-0 scale-100","leave-to-class":"opacity-0 translate-y-4 scale-[0.98]"},{default:Yr(()=>[s.value?(Z(),ue("section",{key:0,class:Ye(["overlay-panel",a.value?"overlay-panel-dragging":""]),"aria-label":"IO Assistant chat",onDragover:Ne,onDragleave:ye,onDrop:te},[ne("header",Nb,[se[4]||(se[4]=ne("div",{class:"flex items-center gap-2.5"},[ne("div",{class:"overlay-brand-mark","aria-hidden":"true"},[ne("img",{src:Tu,alt:"IO",width:"18",height:"18",class:"shrink-0"})]),ne("div",{class:"flex items-center leading-none"},[ne("span",{class:"overlay-title"},"IO Chat")])],-1)),ne("button",{onClick:se[0]||(se[0]=ie=>s.value=!1),class:"overlay-icon-btn","aria-label":"Minimize chat overlay",title:"Minimize chat"},[he(re(_g),{class:"h-3.5 w-3.5"})])]),ne("div",{ref_key:"messagesContainer",ref:c,class:"overlay-messages",onScroll:M},[y.value?$e("",!0):(Z(),ue("div",Lb,[ne("div",null,[he(Zi,{size:32,class:"mx-auto mb-3 shrink-0"}),se[5]||(se[5]=ne("p",{class:"overlay-empty-copy"},"Ask IO about your workspace, agents, or recent changes.",-1))])])),(Z(!0),ue(Fe,null,zr(re(e).messages,ie=>(Z(),ue("div",{key:ie.id,class:Ye(["flex",ie.role==="user"?"justify-end":"justify-start"])},[ne("div",{class:Ye(["flex max-w-full items-start gap-2",ie.role==="user"?"flex-row-reverse":""])},[ne("div",{class:Ye(["overlay-avatar",ie.role==="user"?"overlay-avatar-user":"overlay-avatar-assistant"]),"aria-hidden":"true"},[ie.role==="user"?(Z(),ue("span",Db,it(_.value),1)):(Z(),nt(Zi,{key:1,size:10,class:"shrink-0"}))],2),ne("article",{class:Ye(["overlay-bubble",ie.role==="user"?"overlay-bubble-user rounded-tr-sm":"overlay-bubble-assistant rounded-tl-sm"])},[ie.attachments.length>0?(Z(),ue("div",Ub,[(Z(!0),ue(Fe,null,zr(ie.attachments,(ae,Lt)=>(Z(),ue("div",{key:`${ie.id}-${Lt}`,class:"overlay-attachment"},[re($i)(ae)?(Z(),ue("img",{key:0,src:re(Ib)(ae),alt:ae.name,class:"mb-1 max-h-44 rounded-md object-contain"},null,8,Bb)):$e("",!0),ne("div",Mb,[re($i)(ae)?(Z(),nt(re(nl),{key:0,class:"h-3.5 w-3.5"})):(Z(),nt(re(rl),{key:1,class:"h-3.5 w-3.5"})),ne("span",Hb,it(ae.name),1),ne("span",qb,it(re(yn)(ae.size)),1)])]))),128))])):$e("",!0),ie.content?(Z(),nt(Pb,{key:1,content:ie.content,class:Ye(["overlay-markdown",ie.role==="user"?"prose-invert":""])},null,8,["content","class"])):ie.streaming?$e("",!0):(Z(),ue("span",Fb,"..."))],2)],2),ie.streaming&&ie.role==="assistant"?(Z(),ue("div",Vb,[(Z(),ue(Fe,null,zr(p,ae=>ne("span",{key:ae,class:"overlay-stream-dot",style:Ws({animationDelay:`${ae}ms`})},null,4)),64))])):$e("",!0)],2))),128))],544),f.value?(Z(),ue("button",{key:0,class:"overlay-scroll-hint",type:"button",onClick:se[1]||(se[1]=ie=>U(!0)),"aria-label":"Scroll to latest message"},[he(re(pg),{class:"h-3.5 w-3.5"}),se[6]||(se[6]=ru(" Latest ",-1))])):$e("",!0),ne("footer",zb,[ne("input",{ref_key:"fileInput",ref:u,type:"file",multiple:"",class:"hidden",onChange:Q},null,544),l.value.length>0?(Z(),ue("div",Wb,[ne("div",Kb,[(Z(!0),ue(Fe,null,zr(l.value,(ie,ae)=>(Z(),ue("div",{key:`${ie.name}-${ae}`,class:"overlay-chip"},[re($i)(ie)?(Z(),nt(re(nl),{key:0,class:"h-3.5 w-3.5"})):(Z(),nt(re(rl),{key:1,class:"h-3.5 w-3.5"})),ne("span",Gb,it(ie.name),1),ne("span",Jb,it(re(yn)(ie.size)),1),ne("button",{class:"hover:text-destructive",onClick:Lt=>C(ae)},[he(We,{class:"h-3.5 w-3.5"})],8,Yb)]))),128))]),ne("p",Xb,it(re(yn)(k.value))+" · Max "+it(re(yn)(re(lh)))+" file · "+it(re(yn)(re(ch)))+" total ",1)])):$e("",!0),o.value?(Z(),ue("p",Zb,it(o.value),1)):$e("",!0),ne("div",Qb,[ne("button",{class:"overlay-attach-btn",disabled:re(e).isStreaming,onClick:z,title:"Attach files","aria-label":"Attach files"},[he(re(Sg),{class:"h-4 w-4"})],8,e_),od(ne("textarea",{ref_key:"textareaRef",ref:h,"onUpdate:modelValue":se[2]||(se[2]=ie=>i.value=ie),onKeydown:Ee,placeholder:"Message IO…",rows:"1",class:"overlay-input"},null,544),[[Mf,i.value]]),ne("button",{onClick:se[3]||(se[3]=ie=>re(e).isStreaming?Y():O()),disabled:!b.value&&!re(e).isStreaming,class:"overlay-send-btn","aria-label":re(e).isStreaming?"Stop generation":"Send message",title:re(e).isStreaming?"Stop generation":"Send message"},[re(e).isStreaming?(Z(),nt(re(Rg),{key:1,class:"h-3 w-3"})):(Z(),nt(re(Tg),{key:0,class:"h-3 w-3"}))],8,t_)])])],34)):$e("",!0)]),_:1})],64)}}}),n_=(t,e)=>{const r=t.__vccOpts||t;for(const[n,s]of e)r[n]=s;return r},s_=n_(r_,[["__scopeId","data-v-0be88a62"]]),i_={class:"flex h-screen overflow-hidden"},o_={class:"flex-1 flex flex-col overflow-hidden"},a_={class:"flex-1 overflow-auto"},l_=pr({__name:"App",setup(t){const e=ln(),r=jo(),n=je(()=>e.isAuthenticated&&r.name!=="login");return(s,i)=>{const o=Zs("router-view");return Z(),ue("div",i_,[n.value?(Z(),nt(Ug,{key:0})):$e("",!0),ne("div",o_,[n.value?(Z(),nt(Vv,{key:0})):$e("",!0),ne("main",a_,[he(o)])]),n.value?(Z(),nt(s_,{key:1})):$e("",!0)])}}}),c_=[{path:"/login",name:"login",component:()=>Ke(()=>import("./LoginView-CG1O9fmR.js"),[]),meta:{public:!0}},{path:"/",name:"chat",component:()=>Ke(()=>import("./ChatView-DLu9BMg8.js"),__vite__mapDeps([0,1]))},{path:"/squads",name:"squads",component:()=>Ke(()=>import("./SquadsView-CPVzko7k.js"),__vite__mapDeps([2,3,4,5]))},{path:"/squads/health",name:"squad-health",component:()=>Ke(()=>import("./SquadHealthView-DF2zF9D3.js"),__vite__mapDeps([6,3,7,5]))},{path:"/squads/:id",name:"squad-detail",component:()=>Ke(()=>import("./SquadDetailView-BBvrgHzn.js"),__vite__mapDeps([8,3,4,1,5,9,10]))},{path:"/feed",name:"feed",component:()=>Ke(()=>import("./FeedView-6OV-l6Gl.js"),__vite__mapDeps([11,3,4,9]))},{path:"/skills",name:"skills",component:()=>Ke(()=>import("./SkillsView-DnNmO192.js"),__vite__mapDeps([12,3,13,14,15,16,1,9]))},{path:"/mcp",name:"mcp",component:()=>Ke(()=>import("./McpView-TJN-fZvI.js"),__vite__mapDeps([17,3,18,13,9]))},{path:"/schedules",name:"schedules",component:()=>Ke(()=>import("./SchedulesView-BDFpImX6.js"),__vite__mapDeps([19,3,4,18,13,15,9]))},{path:"/history",name:"history",component:()=>Ke(()=>import("./HistoryView-DizPqv0y.js"),__vite__mapDeps([20,3,14,10,9]))},{path:"/wiki",name:"wiki",component:()=>Ke(()=>import("./WikiView-KhFqBZI0.js"),__vite__mapDeps([21,3,14,13,15,9,16,1]))},{path:"/usage",name:"usage",component:()=>Ke(()=>import("./UsageView-OcyM5k14.js"),__vite__mapDeps([22,3,7]))},{path:"/audit-log",name:"audit-log",component:()=>Ke(()=>import("./AuditLogView-C5QtUQBq.js"),__vite__mapDeps([23,3]))},{path:"/settings",name:"settings",component:()=>Ke(()=>import("./SettingsView-D-K1iC1c.js"),__vite__mapDeps([24,3]))}],uh=og({history:Up(),routes:c_});uh.beforeEach(t=>{const e=ln();if(!t.meta.public&&!e.isAuthenticated)return{name:"login"}});async function u_(){await Bv();const t=Wf(l_);t.use(Jf()),t.use(uh);const{useAuthStore:e}=await Ke(async()=>{const{useAuthStore:n}=await Promise.resolve().then(()=>Mv);return{useAuthStore:n}},void 0),r=e();r.initAuthListener(),r.token&&await r.refreshToken(),t.mount("#app")}u_();export{f_ as $,hg as A,dg as B,fg as C,Ws as D,xo as E,rl as F,$c as G,vg as H,nl as I,Z as J,Oe as K,zr as L,lh as M,Zs as N,uh as O,Sg as P,Ib as Q,it as R,Tg as S,re as T,Cg as U,ln as V,Kv as W,jo as X,ag as Y,d_ as Z,Zi as _,pg as a,Mf as a0,jb as a1,Kt as a2,Yr as a3,od as a4,g_ as a5,p_ as a6,gg as b,mg as c,Fe as d,Au as e,ch as f,xu as g,Eg as h,Ag as i,Rg as j,Og as k,Pb as l,je as m,ne as n,nt as o,$e as p,ue as q,Ae as r,ru as s,he as t,pr as u,$b as v,yn as w,$i as x,hr as y,Ye as z};
|
package/web-dist/index.html
CHANGED
|
@@ -5,8 +5,8 @@
|
|
|
5
5
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
6
6
|
<title>IO — Dashboard</title>
|
|
7
7
|
<link rel="icon" type="image/svg+xml" href="/favicon.svg" />
|
|
8
|
-
<script type="module" crossorigin src="/assets/index-
|
|
9
|
-
<link rel="stylesheet" crossorigin href="/assets/index-
|
|
8
|
+
<script type="module" crossorigin src="/assets/index-DCJUYZtV.js"></script>
|
|
9
|
+
<link rel="stylesheet" crossorigin href="/assets/index-B-o45ao1.css">
|
|
10
10
|
</head>
|
|
11
11
|
<body class="bg-background text-foreground">
|
|
12
12
|
<div id="app"></div>
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
import{r as O,u as A,E as R,J as d,q as r,n as o,t as c,T as v,s as C,d as _,L as k,a4 as b,$,a0 as w,p as S,c as F,R as i,K as n,m as G,z as J,D as K}from"./index-CVHn07Yu.js";import{b as P,c as T,d as V,a as H}from"./api-dXl4z_H9.js";import{g as Q}from"./squad-colors-B8B_Y-lz.js";import{_ as W}from"./ToggleSwitch.vue_vue_type_script_setup_true_lang-qVvadgnS.js";import{P as X}from"./plus-CZyw8CN2.js";import{P as Y}from"./pencil-Bfw57NpW.js";import{T as Z}from"./trash-2-BtBTSEpB.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 ee=O("PlayIcon",[["polygon",{points:"6 3 20 12 6 21 6 3",key:"1oa8hb"}]]),te={class:"p-6"},oe={class:"flex items-center justify-between mb-6"},se={class:"flex gap-1 border-b border-border mb-4"},ae=["onClick"],de={key:0,class:"border border-border rounded-lg p-4 mb-4 space-y-3"},re={class:"grid grid-cols-2 gap-3"},ne=["value"],le=["disabled"],ue={key:1,class:"text-muted-foreground"},ie={key:2,class:"text-center py-12 text-muted-foreground"},pe={key:3,class:"space-y-2"},me={class:"text-sm font-medium font-mono"},ce={key:0,class:"mt-1"},ve={class:"text-xs text-muted-foreground mt-0.5"},be={key:0,class:"mt-2 space-y-2"},fe={class:"flex gap-2"},ge=["onClick"],xe={key:1,class:"mt-2 flex items-center justify-between gap-3"},ye=["onClick"],_e={class:"text-xs text-muted-foreground mt-0.5"},ke={class:"flex items-center gap-3"},we=["onClick"],Se={key:0,class:"text-xs text-green-500 font-medium"},qe=["onClick"],Ne=A({__name:"SchedulesView",setup(he){const l=n([]),p=n([]),q=n(!0),f=n("squad"),g=n(!1),a=n({type:"squad",cron:"",squad_id:"",prompt:""}),x=n(null),m=n(""),y=n(null);R(async()=>{try{const s=await P("/squads");p.value=s.squads,p.value.length>0&&(a.value.squad_id=p.value[0].id),l.value=await P("/schedules")}finally{q.value=!1}});const h=()=>l.value.filter(s=>s.type===f.value);async function U(){const s={type:a.value.type,cron:a.value.cron,squad_id:a.value.squad_id};if(!a.value.squad_id||!a.value.prompt.trim())return;s.prompt=a.value.prompt;const e=await T("/schedules",s);l.value.push(e),g.value=!1}function E(s){if(s)return p.value.find(e=>e.id===s)}const N=G(()=>h().map(s=>({...s,squad:E(s.squad_id)})));async function D(s){const e=!s.enabled,t=await V(`/schedules/${s.id}`,{enabled:e});s.enabled=t.enabled}function I(s){x.value=s.id,m.value=s.prompt}async function B(s){const e=await V(`/schedules/${s.id}`,{prompt:m.value});s.prompt=e.prompt,x.value=null,m.value=""}function L(){x.value=null,m.value=""}async function j(s){await H(`/schedules/${s}`),l.value=l.value.filter(e=>e.id!==s)}async function z(s){await T(`/schedules/${s.id}/trigger`,{}),y.value=s.id;const e=l.value.findIndex(t=>t.id===s.id);e!==-1&&(l.value[e]={...l.value[e],last_run:new Date().toISOString()}),setTimeout(()=>{y.value=null},3e3)}function M(s){var e;return s?((e=p.value.find(t=>t.id===s))==null?void 0:e.name)??s:"Unknown squad"}return(s,e)=>(d(),r("div",te,[o("div",oe,[e[8]||(e[8]=o("h1",{class:"text-2xl font-bold"},"Schedules",-1)),o("button",{onClick:e[0]||(e[0]=t=>g.value=!g.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(X),{class:"w-4 h-4"}),e[7]||(e[7]=C(" Add Schedule ",-1))])]),o("div",se,[(d(),r(_,null,k(["squad","io"],t=>o("button",{key:t,onClick:u=>f.value=t,class:J(["px-4 py-2 text-sm font-medium border-b-2 transition-colors",f.value===t?"border-primary text-foreground":"border-transparent text-muted-foreground hover:text-foreground"])},i(t==="squad"?"Squad Schedules":"IO Schedules"),11,ae)),64))]),g.value?(d(),r("div",de,[o("div",re,[o("div",null,[e[10]||(e[10]=o("label",{class:"text-sm font-medium"},"Type",-1)),b(o("select",{"onUpdate:modelValue":e[1]||(e[1]=t=>a.value.type=t),class:"mt-1 w-full rounded-md border border-input bg-background px-3 py-2 text-sm"},[...e[9]||(e[9]=[o("option",{value:"squad"},"Squad",-1),o("option",{value:"io"},"IO",-1)])],512),[[$,a.value.type]])]),o("div",null,[e[11]||(e[11]=o("label",{class:"text-sm font-medium"},"Cron Expression",-1)),b(o("input",{"onUpdate:modelValue":e[2]||(e[2]=t=>a.value.cron=t),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),[[w,a.value.cron]])])]),o("div",null,[e[12]||(e[12]=o("label",{class:"text-sm font-medium"},"Target Squad",-1)),b(o("select",{"onUpdate:modelValue":e[3]||(e[3]=t=>a.value.squad_id=t),class:"mt-1 w-full rounded-md border border-input bg-background px-3 py-2 text-sm"},[(d(!0),r(_,null,k(p.value,t=>(d(),r("option",{key:t.id,value:t.id},i(t.name),9,ne))),128))],512),[[$,a.value.squad_id]])]),o("div",null,[e[13]||(e[13]=o("label",{class:"text-sm font-medium"},"Prompt",-1)),b(o("textarea",{"onUpdate:modelValue":e[4]||(e[4]=t=>a.value.prompt=t),rows:"3",placeholder:"e.g. Triage issues, review PRs, ideate on features",class:"mt-1 w-full rounded-md border border-input bg-background px-3 py-2 text-sm"},null,512),[[w,a.value.prompt]])]),o("button",{onClick:U,disabled:!a.value.squad_id||!a.value.prompt.trim(),class:"px-4 py-2 text-sm rounded-md bg-primary text-primary-foreground hover:bg-primary/90 disabled:opacity-50 disabled:cursor-not-allowed"}," Save ",8,le)])):S("",!0),q.value?(d(),r("div",ue,"Loading...")):h().length===0?(d(),r("div",ie,[c(v(F),{class:"w-12 h-12 mx-auto mb-3 opacity-50"}),o("p",null,"No "+i(f.value)+" schedules configured.",1)])):(d(),r("div",pe,[(d(!0),r(_,null,k(N.value,t=>(d(),r("div",{key:t.id,class:"flex items-center justify-between border border-border rounded-lg px-4 py-3"},[o("div",null,[o("div",me,i(t.cron),1),t.squad?(d(),r("div",ce,[o("span",{class:"text-xs px-2 py-0.5 rounded-full",style:K(v(Q)(t.squad.color))},i(t.squad.name),5)])):S("",!0),o("div",ve,[x.value===t.id?(d(),r("div",be,[b(o("textarea",{"onUpdate:modelValue":e[5]||(e[5]=u=>m.value=u),rows:"3",class:"w-full rounded-md border border-input bg-background px-3 py-2 text-sm",placeholder:"Schedule prompt"},null,512),[[w,m.value]]),o("div",fe,[o("button",{onClick:u=>B(t),class:"px-3 py-1.5 text-xs rounded-md bg-primary text-primary-foreground hover:bg-primary/90"}," Save ",8,ge),o("button",{onClick:e[6]||(e[6]=u=>L()),class:"px-3 py-1.5 text-xs rounded-md border border-border hover:bg-muted/50"}," Cancel ")])])):(d(),r("div",xe,[o("span",null,i(t.prompt?t.prompt:"(no prompt)"),1),o("button",{onClick:u=>I(t),class:"inline-flex items-center gap-1 px-2 py-1 text-xs rounded-md border border-border hover:bg-muted/50"},[c(v(Y),{class:"w-3 h-3"}),e[14]||(e[14]=C(" Edit prompt ",-1))],8,ye)]))]),o("div",_e," Squad: "+i(M(t.squad_id)),1)]),o("div",ke,[o("button",{onClick:u=>z(t),class:"p-1.5 rounded hover:bg-primary/10 text-muted-foreground hover:text-primary",title:"Trigger now"},[c(v(ee),{class:"w-4 h-4"})],8,we),y.value===t.id?(d(),r("span",Se,"Triggered!")):S("",!0),c(W,{"model-value":!!t.enabled,"aria-label":`Toggle schedule ${t.cron}`,"onUpdate:modelValue":u=>D(t)},null,8,["model-value","aria-label","onUpdate:modelValue"]),o("button",{onClick:u=>j(t.id),class:"p-1.5 rounded hover:bg-destructive/10 text-muted-foreground hover:text-destructive"},[c(v(Z),{class:"w-4 h-4"})],8,qe)])]))),128))]))]))}});export{Ne as default};
|