@mcp-b/embedded-agent 0.0.7-beta.2 → 0.0.7

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/index.js CHANGED
@@ -1,14 +1,15 @@
1
1
  import { c } from "react/compiler-runtime";
2
- import { ActionBarPrimitive, AssistantModalPrimitive, AssistantRuntimeProvider, AttachmentPrimitive, BranchPickerPrimitive, ComposerPrimitive, ErrorPrimitive, MessagePrimitive, ThreadPrimitive, makeAssistantToolUI, useAssistantApi, useAssistantState, useAssistantTool, useComposer, useThread } from "@assistant-ui/react";
2
+ import { ActionBarPrimitive, AssistantModalPrimitive, AssistantRuntimeProvider, AttachmentPrimitive, BranchPickerPrimitive, ComposerPrimitive, ErrorPrimitive, MessagePrimitive, ThreadPrimitive, useAssistantApi, useAssistantState, useAssistantTool, useComposer, useComposerRuntime, useThread } from "@assistant-ui/react";
3
3
  import { AssistantChatTransport, useChatRuntime } from "@assistant-ui/react-ai-sdk";
4
4
  import r2wc from "@r2wc/react-to-web-component";
5
5
  import { lastAssistantMessageIsCompleteWithToolCalls } from "ai";
6
6
  import { createContext, forwardRef, memo, useCallback, useContext, useEffect, useMemo, useRef, useState } from "react";
7
- import { AlertCircle, ArrowDownIcon, ArrowUpIcon, Check, CheckCircle2, CheckIcon, ChevronDown, ChevronDownIcon, ChevronLeftIcon, ChevronRightIcon, ChevronUpIcon, Circle, Clock, Copy, CopyIcon, FileText, GripHorizontal, History, Loader2, Mic, MicOff, PencilIcon, Phone, PhoneOff, Plug, Plus, PlusIcon, RefreshCwIcon, Send, Square, Trash2, Volume2, X, XIcon } from "lucide-react";
7
+ import { AlertCircle, ArrowDownIcon, ArrowUpIcon, Check, CheckCircle2, CheckIcon, ChevronDown, ChevronDownIcon, ChevronLeftIcon, ChevronRightIcon, ChevronUpIcon, Circle, Copy, CopyIcon, FileText, GripHorizontal, History, Loader2, Mic, MicOff, PencilIcon, Phone, PhoneOff, Plug, Plus, PlusIcon, RefreshCwIcon, Send, Square, Volume2, X, XIcon } from "lucide-react";
8
8
  import { AnimatePresence, LazyMotion, MotionConfig, domAnimation, motion, useDragControls, useReducedMotion } from "motion/react";
9
9
  import * as m from "motion/react-m";
10
10
  import { clsx } from "clsx";
11
11
  import { twMerge } from "tailwind-merge";
12
+ import { jsonrepair } from "jsonrepair";
12
13
  import { Fragment, jsx, jsxs } from "react/jsx-runtime";
13
14
  import { useShallow } from "zustand/shallow";
14
15
  import * as AvatarPrimitive from "@radix-ui/react-avatar";
@@ -19,7 +20,7 @@ import { cva } from "class-variance-authority";
19
20
  import { MarkdownTextPrimitive, unstable_memoizeMarkdownComponents, useIsMarkdownCodeBlock } from "@assistant-ui/react-markdown";
20
21
  import remarkGfm from "remark-gfm";
21
22
  import { Client } from "@modelcontextprotocol/sdk/client/index.js";
22
- import { ToolListChangedNotificationSchema } from "@modelcontextprotocol/sdk/types.js";
23
+ import { PromptListChangedNotificationSchema, ToolListChangedNotificationSchema } from "@modelcontextprotocol/sdk/types.js";
23
24
  import { TabClientTransport } from "@mcp-b/transports";
24
25
  import { SSEClientTransport } from "@modelcontextprotocol/sdk/client/sse.js";
25
26
  import { StreamableHTTPClientTransport } from "@modelcontextprotocol/sdk/client/streamableHttp.js";
@@ -539,9 +540,11 @@ var ToolManager = class {
539
540
  }
540
541
  let args;
541
542
  try {
542
- args = argsString ? JSON.parse(argsString) : {};
543
+ const repaired = argsString ? jsonrepair(argsString) : "{}";
544
+ args = JSON.parse(repaired);
543
545
  } catch (error) {
544
546
  console.error("[ToolManager] Failed to parse arguments:", error);
547
+ console.error("[ToolManager] Raw argsString:", argsString?.slice(0, 200));
545
548
  return {
546
549
  success: false,
547
550
  error: "Invalid arguments format"
@@ -2184,7 +2187,7 @@ const useFileSrc = (file) => {
2184
2187
  return src;
2185
2188
  };
2186
2189
  const useAttachmentSrc = () => {
2187
- const { file, src: src_0 } = useAssistantState(useShallow(_temp2$8));
2190
+ const { file, src: src_0 } = useAssistantState(useShallow(_temp2$5));
2188
2191
  return useFileSrc(file) ?? src_0;
2189
2192
  };
2190
2193
  const AttachmentPreview = (t0) => {
@@ -2250,7 +2253,7 @@ const AttachmentPreviewDialog = (t0) => {
2250
2253
  };
2251
2254
  const AttachmentThumb = () => {
2252
2255
  const $ = c(8);
2253
- const isImage = useAssistantState(_temp3$5);
2256
+ const isImage = useAssistantState(_temp3$3);
2254
2257
  const src = useAttachmentSrc();
2255
2258
  let t0;
2256
2259
  if ($[0] !== src) {
@@ -2292,8 +2295,8 @@ const AttachmentThumb = () => {
2292
2295
  const AttachmentUI = () => {
2293
2296
  const $ = c(17);
2294
2297
  const isComposer = useAssistantApi().attachment.source === "composer";
2295
- const isImage = useAssistantState(_temp4$3);
2296
- const typeLabel = useAssistantState(_temp5$1);
2298
+ const isImage = useAssistantState(_temp4$2);
2299
+ const typeLabel = useAssistantState(_temp5);
2297
2300
  const t0 = isImage && "aui-attachment-root-composer only:[&>#attachment-tile]:size-24";
2298
2301
  let t1;
2299
2302
  if ($[0] !== t0) {
@@ -2424,26 +2427,26 @@ const ComposerAddAttachment = () => {
2424
2427
  } else t0 = $[0];
2425
2428
  return t0;
2426
2429
  };
2427
- function _temp$12(c$1) {
2430
+ function _temp$9(c$1) {
2428
2431
  return c$1.type === "image";
2429
2432
  }
2430
- function _temp2$8(t0) {
2433
+ function _temp2$5(t0) {
2431
2434
  const { attachment } = t0;
2432
2435
  if (attachment.type !== "image") return {};
2433
2436
  if (attachment.file) return { file: attachment.file };
2434
- const src = attachment.content?.filter(_temp$12)[0]?.image;
2437
+ const src = attachment.content?.filter(_temp$9)[0]?.image;
2435
2438
  if (!src) return {};
2436
2439
  return { src };
2437
2440
  }
2438
- function _temp3$5(t0) {
2441
+ function _temp3$3(t0) {
2439
2442
  const { attachment } = t0;
2440
2443
  return attachment.type === "image";
2441
2444
  }
2442
- function _temp4$3(t0) {
2445
+ function _temp4$2(t0) {
2443
2446
  const { attachment } = t0;
2444
2447
  return attachment.type === "image";
2445
2448
  }
2446
- function _temp5$1(t0) {
2449
+ function _temp5(t0) {
2447
2450
  const { attachment: attachment_0 } = t0;
2448
2451
  const type = attachment_0.type;
2449
2452
  switch (type) {
@@ -2722,10 +2725,11 @@ function createMCPTransport(config, transportType = "http") {
2722
2725
  const SOURCE_LOCAL = "local";
2723
2726
  const SOURCE_REMOTE = "remote";
2724
2727
  const MCPToolsContext = createContext(null);
2725
- function MCPToolsProvider({ children, autoConnectLocal = true, onToolsChange }) {
2728
+ function MCPToolsProvider({ children, autoConnectLocal = true, onToolsChange, onPromptsChange }) {
2726
2729
  const sourcesRef = useRef(/* @__PURE__ */ new Map());
2727
2730
  const [, forceUpdate] = useState({});
2728
2731
  const [toolsList, setToolsList] = useState([]);
2732
+ const [promptsList, setPromptsList] = useState([]);
2729
2733
  /**
2730
2734
  * Rebuild tools list from all sources
2731
2735
  */
@@ -2742,18 +2746,30 @@ function MCPToolsProvider({ children, autoConnectLocal = true, onToolsChange })
2742
2746
  setToolsList(allTools);
2743
2747
  }, []);
2744
2748
  /**
2749
+ * Rebuild prompts list from all sources
2750
+ */
2751
+ const rebuildPrompts = useCallback(() => {
2752
+ const allPrompts = [];
2753
+ sourcesRef.current.forEach((source_0) => {
2754
+ source_0.prompts.forEach((prompt) => {
2755
+ allPrompts.push(prompt);
2756
+ });
2757
+ });
2758
+ setPromptsList(allPrompts);
2759
+ }, []);
2760
+ /**
2745
2761
  * Get public source state (without client reference)
2746
2762
  */
2747
- const getPublicSource = useCallback((source_0) => {
2763
+ const getPublicSource = useCallback((source_1) => {
2748
2764
  return {
2749
- id: source_0.id,
2750
- config: source_0.config,
2751
- state: source_0.state,
2752
- error: source_0.error,
2753
- tools: source_0.tools,
2754
- resources: source_0.resources,
2755
- resourceTemplates: source_0.resourceTemplates,
2756
- prompts: source_0.prompts
2765
+ id: source_1.id,
2766
+ config: source_1.config,
2767
+ state: source_1.state,
2768
+ error: source_1.error,
2769
+ tools: source_1.tools,
2770
+ resources: source_1.resources,
2771
+ resourceTemplates: source_1.resourceTemplates,
2772
+ prompts: source_1.prompts
2757
2773
  };
2758
2774
  }, []);
2759
2775
  /**
@@ -2786,17 +2802,34 @@ function MCPToolsProvider({ children, autoConnectLocal = true, onToolsChange })
2786
2802
  sourceState.transport = transport;
2787
2803
  const { tools } = await client.listTools();
2788
2804
  sourceState.tools = tools;
2805
+ try {
2806
+ const { prompts } = await client.listPrompts();
2807
+ sourceState.prompts = prompts;
2808
+ } catch (err_0) {
2809
+ console.warn(`[MCPToolsProvider:${id}] Server does not support prompts:`, err_0);
2810
+ sourceState.prompts = [];
2811
+ }
2789
2812
  sourceState.state = "connected";
2790
2813
  client.setNotificationHandler(ToolListChangedNotificationSchema, async () => {
2791
2814
  try {
2792
2815
  sourceState.tools = (await client.listTools()).tools;
2793
2816
  rebuildTools();
2794
2817
  forceUpdate({});
2795
- } catch (err_0) {
2796
- console.error(`[MCPToolsProvider:${id}] Failed to update tools:`, err_0);
2818
+ } catch (err_1) {
2819
+ console.error(`[MCPToolsProvider:${id}] Failed to update tools:`, err_1);
2820
+ }
2821
+ });
2822
+ client.setNotificationHandler(PromptListChangedNotificationSchema, async () => {
2823
+ try {
2824
+ sourceState.prompts = (await client.listPrompts()).prompts;
2825
+ rebuildPrompts();
2826
+ forceUpdate({});
2827
+ } catch (err_2) {
2828
+ console.error(`[MCPToolsProvider:${id}] Failed to update prompts:`, err_2);
2797
2829
  }
2798
2830
  });
2799
2831
  rebuildTools();
2832
+ rebuildPrompts();
2800
2833
  forceUpdate({});
2801
2834
  } catch (err) {
2802
2835
  const error = err instanceof Error ? err : new Error(String(err));
@@ -2805,33 +2838,34 @@ function MCPToolsProvider({ children, autoConnectLocal = true, onToolsChange })
2805
2838
  sourceState.error = error;
2806
2839
  forceUpdate({});
2807
2840
  }
2808
- }, [rebuildTools]);
2841
+ }, [rebuildTools, rebuildPrompts]);
2809
2842
  /**
2810
2843
  * Remove a source
2811
2844
  */
2812
2845
  const removeSource = useCallback(async (id_0) => {
2813
- const source_1 = sourcesRef.current.get(id_0);
2814
- if (!source_1) return;
2815
- if (source_1.client) try {
2816
- await source_1.client.close();
2817
- } catch (err_1) {
2818
- console.error(`[MCPToolsProvider:${id_0}] Error closing client:`, err_1);
2846
+ const source_2 = sourcesRef.current.get(id_0);
2847
+ if (!source_2) return;
2848
+ if (source_2.client) try {
2849
+ await source_2.client.close();
2850
+ } catch (err_3) {
2851
+ console.error(`[MCPToolsProvider:${id_0}] Error closing client:`, err_3);
2819
2852
  }
2820
- if (source_1.transport) try {
2821
- await source_1.transport.close();
2822
- } catch (err_2) {
2823
- console.error(`[MCPToolsProvider:${id_0}] Error closing transport:`, err_2);
2853
+ if (source_2.transport) try {
2854
+ await source_2.transport.close();
2855
+ } catch (err_4) {
2856
+ console.error(`[MCPToolsProvider:${id_0}] Error closing transport:`, err_4);
2824
2857
  }
2825
2858
  sourcesRef.current.delete(id_0);
2826
2859
  rebuildTools();
2860
+ rebuildPrompts();
2827
2861
  forceUpdate({});
2828
- }, [rebuildTools]);
2862
+ }, [rebuildTools, rebuildPrompts]);
2829
2863
  /**
2830
2864
  * Get a source by ID
2831
2865
  */
2832
2866
  const getSource = useCallback((id_1) => {
2833
- const source_2 = sourcesRef.current.get(id_1);
2834
- return source_2 ? getPublicSource(source_2) : void 0;
2867
+ const source_3 = sourcesRef.current.get(id_1);
2868
+ return source_3 ? getPublicSource(source_3) : void 0;
2835
2869
  }, [getPublicSource]);
2836
2870
  /**
2837
2871
  * Check if a source is connected
@@ -2843,9 +2877,9 @@ function MCPToolsProvider({ children, autoConnectLocal = true, onToolsChange })
2843
2877
  * Call a tool on a specific source
2844
2878
  */
2845
2879
  const callToolOnSource = useCallback(async (sourceId, name, args) => {
2846
- const source_4 = sourcesRef.current.get(sourceId);
2847
- if (!source_4?.client) throw new Error(`Source '${sourceId}' not connected`);
2848
- return await source_4.client.callTool({
2880
+ const source_5 = sourcesRef.current.get(sourceId);
2881
+ if (!source_5?.client) throw new Error(`Source '${sourceId}' not connected`);
2882
+ return await source_5.client.callTool({
2849
2883
  name,
2850
2884
  arguments: args
2851
2885
  });
@@ -2859,15 +2893,29 @@ function MCPToolsProvider({ children, autoConnectLocal = true, onToolsChange })
2859
2893
  return callToolOnSource(tool_0._sourceId, name_0, args_0);
2860
2894
  }, [toolsList, callToolOnSource]);
2861
2895
  /**
2896
+ * Get a prompt's expanded content (auto-routes based on prompt name)
2897
+ */
2898
+ const getPrompt = useCallback(async (name_1, args_1) => {
2899
+ for (const source_6 of sourcesRef.current.values()) if (source_6.prompts.some((p) => p.name === name_1) && source_6.client) return await source_6.client.getPrompt({
2900
+ name: name_1,
2901
+ arguments: args_1
2902
+ });
2903
+ throw new Error(`Prompt '${name_1}' not found`);
2904
+ }, []);
2905
+ /**
2862
2906
  * Get sources map for context (public view)
2863
2907
  */
2864
2908
  const sources = useMemo(() => {
2865
2909
  const publicSources = /* @__PURE__ */ new Map();
2866
- sourcesRef.current.forEach((source_5) => {
2867
- publicSources.set(source_5.id, getPublicSource(source_5));
2910
+ sourcesRef.current.forEach((source_7) => {
2911
+ publicSources.set(source_7.id, getPublicSource(source_7));
2868
2912
  });
2869
2913
  return publicSources;
2870
- }, [toolsList, getPublicSource]);
2914
+ }, [
2915
+ toolsList,
2916
+ promptsList,
2917
+ getPublicSource
2918
+ ]);
2871
2919
  useEffect(() => {
2872
2920
  if (autoConnectLocal) {
2873
2921
  const timer = setTimeout(() => {
@@ -2879,34 +2927,41 @@ function MCPToolsProvider({ children, autoConnectLocal = true, onToolsChange })
2879
2927
  useEffect(() => {
2880
2928
  onToolsChange?.(toolsList);
2881
2929
  }, [toolsList, onToolsChange]);
2930
+ useEffect(() => {
2931
+ onPromptsChange?.(promptsList);
2932
+ }, [promptsList, onPromptsChange]);
2882
2933
  useEffect(() => {
2883
2934
  const sources_0 = sourcesRef;
2884
2935
  return () => {
2885
- sources_0.current.forEach((source_6) => {
2886
- if (source_6.client) source_6.client.close().catch(console.error);
2887
- if (source_6.transport) source_6.transport.close().catch(console.error);
2936
+ sources_0.current.forEach((source_8) => {
2937
+ if (source_8.client) source_8.client.close().catch(console.error);
2938
+ if (source_8.transport) source_8.transport.close().catch(console.error);
2888
2939
  });
2889
2940
  sources_0.current.clear();
2890
2941
  };
2891
2942
  }, []);
2892
2943
  const value = useMemo(() => ({
2893
2944
  tools: toolsList,
2945
+ prompts: promptsList,
2894
2946
  sources,
2895
2947
  addSource,
2896
2948
  removeSource,
2897
2949
  getSource,
2898
2950
  isConnected,
2899
2951
  callTool,
2900
- callToolOnSource
2952
+ callToolOnSource,
2953
+ getPrompt
2901
2954
  }), [
2902
2955
  toolsList,
2956
+ promptsList,
2903
2957
  sources,
2904
2958
  addSource,
2905
2959
  removeSource,
2906
2960
  getSource,
2907
2961
  isConnected,
2908
2962
  callTool,
2909
- callToolOnSource
2963
+ callToolOnSource,
2964
+ getPrompt
2910
2965
  ]);
2911
2966
  return /* @__PURE__ */ jsx(MCPToolsContext.Provider, {
2912
2967
  value,
@@ -2921,6 +2976,12 @@ function useMCPTools() {
2921
2976
  if (!context) throw new Error("useMCPTools must be used within an MCPToolsProvider");
2922
2977
  return context;
2923
2978
  }
2979
+ /**
2980
+ * Hook to optionally access MCP Tools context
2981
+ */
2982
+ function useOptionalMCPTools() {
2983
+ return useContext(MCPToolsContext);
2984
+ }
2924
2985
 
2925
2986
  //#endregion
2926
2987
  //#region src/components/RemoteMCPSettings.tsx
@@ -4179,7 +4240,7 @@ const ThreadSuggestions = () => {
4179
4240
  label: "for healthy weight loss",
4180
4241
  action: "Create a meal plan for healthy weight loss"
4181
4242
  }
4182
- ].map(_temp$11)
4243
+ ].map(_temp$8)
4183
4244
  });
4184
4245
  $[0] = t0;
4185
4246
  } else t0 = $[0];
@@ -4452,7 +4513,7 @@ const BranchPicker = (t0) => {
4452
4513
  } else t6 = $[11];
4453
4514
  return t6;
4454
4515
  };
4455
- function _temp$11(suggestedAction, index) {
4516
+ function _temp$8(suggestedAction, index) {
4456
4517
  return /* @__PURE__ */ jsx(m.div, {
4457
4518
  initial: {
4458
4519
  opacity: 0,
@@ -4676,7 +4737,7 @@ function humanizeToolName(toolName, isRunning = false) {
4676
4737
  */
4677
4738
  function useActions() {
4678
4739
  const $ = c(3);
4679
- const messages = useThread(_temp$10);
4740
+ const messages = useThread(_temp$7);
4680
4741
  let t0;
4681
4742
  bb0: {
4682
4743
  if (!messages || messages.length === 0) {
@@ -4723,7 +4784,7 @@ function useActions() {
4723
4784
  /**
4724
4785
  * Hook to get the current running action (if any)
4725
4786
  */
4726
- function _temp$10(thread) {
4787
+ function _temp$7(thread) {
4727
4788
  return thread.messages;
4728
4789
  }
4729
4790
  function useCurrentAction() {
@@ -4731,7 +4792,7 @@ function useCurrentAction() {
4731
4792
  const actions = useActions();
4732
4793
  let t0;
4733
4794
  if ($[0] !== actions) {
4734
- t0 = actions.find(_temp2$7) ?? null;
4795
+ t0 = actions.find(_temp2$4) ?? null;
4735
4796
  $[0] = actions;
4736
4797
  $[1] = t0;
4737
4798
  } else t0 = $[1];
@@ -4740,7 +4801,7 @@ function useCurrentAction() {
4740
4801
  /**
4741
4802
  * Hook to get recently completed actions
4742
4803
  */
4743
- function _temp2$7(a) {
4804
+ function _temp2$4(a) {
4744
4805
  return a.status === "running";
4745
4806
  }
4746
4807
  function useRecentActions(t0) {
@@ -4749,7 +4810,7 @@ function useRecentActions(t0) {
4749
4810
  const actions = useActions();
4750
4811
  let t1;
4751
4812
  if ($[0] !== actions || $[1] !== limit) {
4752
- t1 = actions.filter(_temp3$4).slice(-limit);
4813
+ t1 = actions.filter(_temp3$2).slice(-limit);
4753
4814
  $[0] = actions;
4754
4815
  $[1] = limit;
4755
4816
  $[2] = t1;
@@ -4759,7 +4820,7 @@ function useRecentActions(t0) {
4759
4820
  /**
4760
4821
  * Hook to get action summary stats
4761
4822
  */
4762
- function _temp3$4(a) {
4823
+ function _temp3$2(a) {
4763
4824
  return a.status === "success" || a.status === "error";
4764
4825
  }
4765
4826
 
@@ -4999,7 +5060,7 @@ const CurrentActivity = (t0) => {
4999
5060
  if ($[6] !== recentActions || $[7] !== showRecent) {
5000
5061
  t6 = showRecent && recentActions.length > 0 && /* @__PURE__ */ jsx("div", {
5001
5062
  className: "ml-1 border-l border-white/20 pl-3 space-y-1",
5002
- children: recentActions.map(_temp$9)
5063
+ children: recentActions.map(_temp$6)
5003
5064
  });
5004
5065
  $[6] = recentActions;
5005
5066
  $[7] = showRecent;
@@ -5145,7 +5206,7 @@ const IdleIndicator = (t0) => {
5145
5206
  } else t4 = $[5];
5146
5207
  return t4;
5147
5208
  };
5148
- function _temp$9(action) {
5209
+ function _temp$6(action) {
5149
5210
  return /* @__PURE__ */ jsxs("div", {
5150
5211
  className: "flex items-center gap-2 text-xs text-white/60",
5151
5212
  children: [/* @__PURE__ */ jsx(ActionStatusIcon, {
@@ -5171,7 +5232,7 @@ const ActionList = (t0) => {
5171
5232
  if (actions.length === 0) return null;
5172
5233
  let t2;
5173
5234
  if ($[0] !== actions) {
5174
- t2 = actions.filter(_temp$8);
5235
+ t2 = actions.filter(_temp$5);
5175
5236
  $[0] = actions;
5176
5237
  $[1] = t2;
5177
5238
  } else t2 = $[1];
@@ -5259,7 +5320,7 @@ const ActionList = (t0) => {
5259
5320
  } else t14 = $[21];
5260
5321
  let t15;
5261
5322
  if ($[22] !== actions) {
5262
- t15 = actions.map(_temp2$6);
5323
+ t15 = actions.map(_temp2$3);
5263
5324
  $[22] = actions;
5264
5325
  $[23] = t15;
5265
5326
  } else t15 = $[23];
@@ -5401,10 +5462,10 @@ function formatDuration(ms) {
5401
5462
  if (seconds < 60) return `${seconds.toFixed(1)}s`;
5402
5463
  return `${Math.floor(seconds / 60)}m ${Math.floor(seconds % 60)}s`;
5403
5464
  }
5404
- function _temp$8(a) {
5465
+ function _temp$5(a) {
5405
5466
  return a.status === "success";
5406
5467
  }
5407
- function _temp2$6(action) {
5468
+ function _temp2$3(action) {
5408
5469
  return /* @__PURE__ */ jsx(ActionItem, { action }, action.id);
5409
5470
  }
5410
5471
 
@@ -5416,7 +5477,7 @@ const MAX_CHARS = 4e3;
5416
5477
  */
5417
5478
  const CharacterCount = () => {
5418
5479
  const $ = c(5);
5419
- const charCount = useComposer(_temp$7)?.length ?? 0;
5480
+ const charCount = useComposer(_temp$4)?.length ?? 0;
5420
5481
  if (charCount < MAX_CHARS * .8) return null;
5421
5482
  const isOver = charCount > MAX_CHARS;
5422
5483
  const remaining = MAX_CHARS - charCount;
@@ -5555,7 +5616,7 @@ const PillComposer = (t0) => {
5555
5616
  } else t14 = $[19];
5556
5617
  return t14;
5557
5618
  };
5558
- function _temp$7(c$1) {
5619
+ function _temp$4(c$1) {
5559
5620
  return c$1.text;
5560
5621
  }
5561
5622
 
@@ -5570,8 +5631,8 @@ const sizeSpring = {
5570
5631
  const reducedMotionTransition = { duration: 0 };
5571
5632
  const containerVariants = {
5572
5633
  collapsed: {
5573
- width: "80px",
5574
- height: "8px",
5634
+ width: "44px",
5635
+ height: "10px",
5575
5636
  padding: "0px",
5576
5637
  borderRadius: "9999px"
5577
5638
  },
@@ -5741,7 +5802,7 @@ const PillContainer = (t0) => {
5741
5802
  const showContent = mode !== "collapsed" && mode !== "hovered";
5742
5803
  const currentVariant = containerVariants[mode];
5743
5804
  const t8 = !prefersReducedMotion && "will-change-transform";
5744
- const t9 = mode === "collapsed" && "glass-pill-collapsed glass-shimmer";
5805
+ const t9 = mode === "collapsed" && "glass-pill-collapsed";
5745
5806
  const t10 = mode === "hovered" && "glass-pill-hovered";
5746
5807
  const t11 = (mode === "composing" || mode === "expanded") && "glass-pill";
5747
5808
  const t12 = mode === "active" && "glass-pill glass-active";
@@ -5919,7 +5980,7 @@ const PillMessageContent = () => {
5919
5980
  let t0;
5920
5981
  if ($[0] === Symbol.for("react.memo_cache_sentinel")) {
5921
5982
  t0 = /* @__PURE__ */ jsx(ThreadPrimitive.Messages, { components: {
5922
- UserMessage: _temp$6,
5983
+ UserMessage: _temp$3,
5923
5984
  AssistantMessage: PillAssistantMessage
5924
5985
  } });
5925
5986
  $[0] = t0;
@@ -5935,7 +5996,7 @@ const PillAssistantMessage = () => {
5935
5996
  let t0;
5936
5997
  if ($[0] === Symbol.for("react.memo_cache_sentinel")) {
5937
5998
  t0 = /* @__PURE__ */ jsx(MessagePrimitive.Root, { children: /* @__PURE__ */ jsx(MessagePrimitive.Parts, { components: {
5938
- Text: _temp2$5,
5999
+ Text: _temp2$2,
5939
6000
  tools: { Fallback: PillToolFallback }
5940
6001
  } }) });
5941
6002
  $[0] = t0;
@@ -5950,530 +6011,13 @@ const PillAssistantMessage = () => {
5950
6011
  const PillToolFallback = () => {
5951
6012
  return null;
5952
6013
  };
5953
- function _temp$6() {
6014
+ function _temp$3() {
5954
6015
  return null;
5955
6016
  }
5956
- function _temp2$5() {
6017
+ function _temp2$2() {
5957
6018
  return null;
5958
6019
  }
5959
6020
 
5960
- //#endregion
5961
- //#region src/providers/PlanProvider.tsx
5962
- /**
5963
- * Plan Provider
5964
- *
5965
- * Client-side provider for managing planning/todos state.
5966
- * Works with the updateTodosTool and askForPlanApprovalTool to provide
5967
- * a human-in-the-loop planning experience.
5968
- *
5969
- * @example Usage
5970
- * ```tsx
5971
- * <PlanProvider>
5972
- * <App />
5973
- * </PlanProvider>
5974
- * ```
5975
- *
5976
- * @example Using the hook
5977
- * ```tsx
5978
- * const { todos, updateTodos, isPlanPending } = usePlan()
5979
- * ```
5980
- */
5981
- const PlanContext = createContext(null);
5982
- /**
5983
- * Helper to update todo statuses at given indices
5984
- */
5985
- function updateTodoStatuses(todos, indices, status) {
5986
- for (const index of indices) if (index >= 0 && index < todos.length) todos[index] = {
5987
- ...todos[index],
5988
- status
5989
- };
5990
- }
5991
- /**
5992
- * Apply todo updates according to the update input
5993
- */
5994
- function applyTodoUpdates(currentTodos, updates) {
5995
- let updatedTodos = [...currentTodos];
5996
- updatedTodos = updatedTodos.map((todo, index) => {
5997
- if (updates.inProgress.includes(index) || updates.done.includes(index)) return todo;
5998
- if (todo.status === "new") return {
5999
- ...todo,
6000
- status: "pending"
6001
- };
6002
- return todo;
6003
- });
6004
- if (updates.clearPreviouslyDone) updatedTodos = updatedTodos.filter((todo) => todo.status !== "done");
6005
- const newTodos = updates.new.map((text) => ({
6006
- text,
6007
- status: "new"
6008
- }));
6009
- if (typeof updates.insertAt === "number" && updates.insertAt >= 0) {
6010
- const insertPosition = Math.min(updates.insertAt, updatedTodos.length);
6011
- updatedTodos.splice(insertPosition, 0, ...newTodos);
6012
- } else updatedTodos.push(...newTodos);
6013
- updateTodoStatuses(updatedTodos, updates.inProgress, "in-progress");
6014
- updateTodoStatuses(updatedTodos, updates.done, "done");
6015
- return updatedTodos;
6016
- }
6017
- function PlanProvider(t0) {
6018
- const $ = c(36);
6019
- const { children, initialTodos: t1, onTodosChange } = t0;
6020
- let t2;
6021
- if ($[0] !== t1) {
6022
- t2 = t1 === void 0 ? [] : t1;
6023
- $[0] = t1;
6024
- $[1] = t2;
6025
- } else t2 = $[1];
6026
- const [todos, setTodos] = useState(t2);
6027
- const [isPlanApproved, setIsPlanApproved] = useState(false);
6028
- const [pendingApproval, setPendingApproval] = useState(null);
6029
- let t3;
6030
- if ($[2] !== onTodosChange) {
6031
- t3 = (newTodos) => {
6032
- setTodos((prev) => {
6033
- const result = typeof newTodos === "function" ? newTodos(prev) : newTodos;
6034
- onTodosChange?.(result);
6035
- return result;
6036
- });
6037
- };
6038
- $[2] = onTodosChange;
6039
- $[3] = t3;
6040
- } else t3 = $[3];
6041
- const setTodosWithCallback = t3;
6042
- let t4;
6043
- if ($[4] !== isPlanApproved || $[5] !== setTodosWithCallback || $[6] !== todos) {
6044
- t4 = async (input) => {
6045
- const newTodos_0 = applyTodoUpdates(todos, input);
6046
- setTodosWithCallback(newTodos_0);
6047
- if (!isPlanApproved && newTodos_0.length > 0) {
6048
- const approvalResult = await new Promise((resolve) => {
6049
- setPendingApproval({
6050
- explainer: "Review the proposed plan",
6051
- resolve: (result_0) => {
6052
- setPendingApproval(null);
6053
- resolve(result_0);
6054
- }
6055
- });
6056
- });
6057
- if (approvalResult.approved) {
6058
- setIsPlanApproved(true);
6059
- setTodosWithCallback(approvalResult.todos);
6060
- return { todos: approvalResult.todos };
6061
- } else {
6062
- setTodosWithCallback([]);
6063
- return { todos: [] };
6064
- }
6065
- }
6066
- return { todos: newTodos_0 };
6067
- };
6068
- $[4] = isPlanApproved;
6069
- $[5] = setTodosWithCallback;
6070
- $[6] = todos;
6071
- $[7] = t4;
6072
- } else t4 = $[7];
6073
- const updateTodos = t4;
6074
- let t5;
6075
- if ($[8] !== setTodosWithCallback) {
6076
- t5 = (explainer) => new Promise((resolve_0) => {
6077
- setTodosWithCallback(_temp3$3);
6078
- setPendingApproval({
6079
- explainer,
6080
- resolve: (result_1) => {
6081
- setPendingApproval(null);
6082
- resolve_0(result_1);
6083
- }
6084
- });
6085
- });
6086
- $[8] = setTodosWithCallback;
6087
- $[9] = t5;
6088
- } else t5 = $[9];
6089
- const requestPlanApproval = t5;
6090
- let t6;
6091
- if ($[10] !== setTodosWithCallback) {
6092
- t6 = () => {
6093
- setTodosWithCallback([]);
6094
- };
6095
- $[10] = setTodosWithCallback;
6096
- $[11] = t6;
6097
- } else t6 = $[11];
6098
- const clearTodos = t6;
6099
- let t7;
6100
- if ($[12] !== setTodosWithCallback) {
6101
- t7 = (text, t8$1) => {
6102
- const status = t8$1 === void 0 ? "new" : t8$1;
6103
- setTodosWithCallback((prev_1) => [...prev_1, {
6104
- text,
6105
- status
6106
- }]);
6107
- };
6108
- $[12] = setTodosWithCallback;
6109
- $[13] = t7;
6110
- } else t7 = $[13];
6111
- const addTodo = t7;
6112
- let t8;
6113
- if ($[14] !== setTodosWithCallback) {
6114
- t8 = (index, status_0) => {
6115
- setTodosWithCallback((prev_2) => {
6116
- if (index < 0 || index >= prev_2.length) return prev_2;
6117
- const updated = [...prev_2];
6118
- updated[index] = {
6119
- ...updated[index],
6120
- status: status_0
6121
- };
6122
- return updated;
6123
- });
6124
- };
6125
- $[14] = setTodosWithCallback;
6126
- $[15] = t8;
6127
- } else t8 = $[15];
6128
- const updateTodoStatus = t8;
6129
- let t9;
6130
- if ($[16] !== setTodosWithCallback) {
6131
- t9 = (index_0) => {
6132
- setTodosWithCallback((prev_3) => prev_3.filter((_, i) => i !== index_0));
6133
- };
6134
- $[16] = setTodosWithCallback;
6135
- $[17] = t9;
6136
- } else t9 = $[17];
6137
- const removeTodo = t9;
6138
- let t10;
6139
- if ($[18] !== setTodosWithCallback) {
6140
- t10 = (index_1, text_0) => {
6141
- setTodosWithCallback((prev_4) => {
6142
- if (index_1 < 0 || index_1 >= prev_4.length) return prev_4;
6143
- const updated_0 = [...prev_4];
6144
- updated_0[index_1] = {
6145
- ...updated_0[index_1],
6146
- text: text_0
6147
- };
6148
- return updated_0;
6149
- });
6150
- };
6151
- $[18] = setTodosWithCallback;
6152
- $[19] = t10;
6153
- } else t10 = $[19];
6154
- const updateTodoText = t10;
6155
- const t11 = pendingApproval !== null;
6156
- const t12 = pendingApproval?.explainer ?? null;
6157
- const t13 = pendingApproval?.resolve ?? null;
6158
- let t14;
6159
- if ($[20] !== addTodo || $[21] !== clearTodos || $[22] !== isPlanApproved || $[23] !== removeTodo || $[24] !== requestPlanApproval || $[25] !== t11 || $[26] !== t12 || $[27] !== t13 || $[28] !== todos || $[29] !== updateTodoStatus || $[30] !== updateTodoText || $[31] !== updateTodos) {
6160
- t14 = {
6161
- todos,
6162
- isPlanPending: t11,
6163
- isPlanApproved,
6164
- pendingPlanExplainer: t12,
6165
- resolvePlanApproval: t13,
6166
- updateTodos,
6167
- requestPlanApproval,
6168
- clearTodos,
6169
- addTodo,
6170
- updateTodoStatus,
6171
- removeTodo,
6172
- updateTodoText
6173
- };
6174
- $[20] = addTodo;
6175
- $[21] = clearTodos;
6176
- $[22] = isPlanApproved;
6177
- $[23] = removeTodo;
6178
- $[24] = requestPlanApproval;
6179
- $[25] = t11;
6180
- $[26] = t12;
6181
- $[27] = t13;
6182
- $[28] = todos;
6183
- $[29] = updateTodoStatus;
6184
- $[30] = updateTodoText;
6185
- $[31] = updateTodos;
6186
- $[32] = t14;
6187
- } else t14 = $[32];
6188
- const value = t14;
6189
- let t15;
6190
- if ($[33] !== children || $[34] !== value) {
6191
- t15 = /* @__PURE__ */ jsx(PlanContext.Provider, {
6192
- value,
6193
- children
6194
- });
6195
- $[33] = children;
6196
- $[34] = value;
6197
- $[35] = t15;
6198
- } else t15 = $[35];
6199
- return t15;
6200
- }
6201
- /**
6202
- * Hook to access Plan context
6203
- */
6204
- function _temp3$3(prev_0) {
6205
- return prev_0.filter(_temp$5).map(_temp2$4);
6206
- }
6207
- function _temp2$4(todo_0) {
6208
- return {
6209
- ...todo_0,
6210
- status: "pending"
6211
- };
6212
- }
6213
- function _temp$5(todo) {
6214
- return todo.status !== "done";
6215
- }
6216
- function usePlan() {
6217
- const context = useContext(PlanContext);
6218
- if (!context) throw new Error("usePlan must be used within a PlanProvider");
6219
- return context;
6220
- }
6221
- /**
6222
- * Hook to optionally access Plan context
6223
- */
6224
- function useOptionalPlan() {
6225
- return useContext(PlanContext);
6226
- }
6227
-
6228
- //#endregion
6229
- //#region src/components/pill/PillTodoList.tsx
6230
- /**
6231
- * PillTodoList Component
6232
- *
6233
- * Persistent todo list for the pill.
6234
- * Shows current todos from PlanProvider context.
6235
- * Always collapsed by default.
6236
- */
6237
- /**
6238
- * Persistent todo list for the pill.
6239
- * Shows current todos from PlanProvider context.
6240
- * Always collapsed by default.
6241
- */
6242
- const PillTodoList = () => {
6243
- const $ = c(40);
6244
- const plan = useOptionalPlan();
6245
- const [isOpen, setIsOpen] = useState(false);
6246
- if (!plan || plan.todos.length === 0) return null;
6247
- if (plan.isPlanPending) return null;
6248
- if (!plan.isPlanApproved) return null;
6249
- const { todos } = plan;
6250
- let t0;
6251
- if ($[0] !== todos) {
6252
- t0 = todos.filter(_temp$4);
6253
- $[0] = todos;
6254
- $[1] = t0;
6255
- } else t0 = $[1];
6256
- const doneCount = t0.length;
6257
- let t1;
6258
- if ($[2] !== todos) {
6259
- t1 = todos.filter(_temp2$3);
6260
- $[2] = todos;
6261
- $[3] = t1;
6262
- } else t1 = $[3];
6263
- const inProgressCount = t1.length;
6264
- let t2;
6265
- if ($[4] !== todos) {
6266
- t2 = todos.filter(_temp3$2);
6267
- $[4] = todos;
6268
- $[5] = t2;
6269
- } else t2 = $[5];
6270
- const pendingCount = t2.length;
6271
- let t3;
6272
- let t4;
6273
- if ($[6] === Symbol.for("react.memo_cache_sentinel")) {
6274
- t3 = () => setIsOpen(_temp4$2);
6275
- t4 = cn("flex w-full items-center gap-2", "rounded-lg px-3 py-2", "bg-white/5 hover:bg-white/10", "transition-colors duration-200");
6276
- $[6] = t3;
6277
- $[7] = t4;
6278
- } else {
6279
- t3 = $[6];
6280
- t4 = $[7];
6281
- }
6282
- const t5 = !isOpen && "-rotate-90";
6283
- let t6;
6284
- if ($[8] !== t5) {
6285
- t6 = cn("h-3.5 w-3.5 text-white/50 transition-transform", t5);
6286
- $[8] = t5;
6287
- $[9] = t6;
6288
- } else t6 = $[9];
6289
- let t7;
6290
- if ($[10] !== t6) {
6291
- t7 = /* @__PURE__ */ jsx(ChevronDown, { className: t6 });
6292
- $[10] = t6;
6293
- $[11] = t7;
6294
- } else t7 = $[11];
6295
- let t8;
6296
- if ($[12] === Symbol.for("react.memo_cache_sentinel")) {
6297
- t8 = /* @__PURE__ */ jsx("span", {
6298
- className: "text-xs font-medium text-white/80",
6299
- children: "Tasks"
6300
- });
6301
- $[12] = t8;
6302
- } else t8 = $[12];
6303
- let t9;
6304
- if ($[13] !== inProgressCount) {
6305
- t9 = inProgressCount > 0 && /* @__PURE__ */ jsxs("span", {
6306
- className: "flex items-center gap-1",
6307
- children: [/* @__PURE__ */ jsx("span", { className: "h-1.5 w-1.5 animate-pulse rounded-full bg-blue-400" }), inProgressCount]
6308
- });
6309
- $[13] = inProgressCount;
6310
- $[14] = t9;
6311
- } else t9 = $[14];
6312
- let t10;
6313
- if ($[15] !== pendingCount) {
6314
- t10 = pendingCount > 0 && /* @__PURE__ */ jsxs("span", {
6315
- className: "flex items-center gap-1",
6316
- children: [/* @__PURE__ */ jsx("span", { className: "h-1.5 w-1.5 rounded-full bg-white/50" }), pendingCount]
6317
- });
6318
- $[15] = pendingCount;
6319
- $[16] = t10;
6320
- } else t10 = $[16];
6321
- let t11;
6322
- if ($[17] !== doneCount) {
6323
- t11 = doneCount > 0 && /* @__PURE__ */ jsxs("span", {
6324
- className: "flex items-center gap-1",
6325
- children: [/* @__PURE__ */ jsx("span", { className: "h-1.5 w-1.5 rounded-full bg-green-400" }), doneCount]
6326
- });
6327
- $[17] = doneCount;
6328
- $[18] = t11;
6329
- } else t11 = $[18];
6330
- let t12;
6331
- if ($[19] !== t10 || $[20] !== t11 || $[21] !== t9) {
6332
- t12 = /* @__PURE__ */ jsxs("div", {
6333
- className: "ml-auto flex items-center gap-2 text-xs text-white/50",
6334
- children: [
6335
- t9,
6336
- t10,
6337
- t11
6338
- ]
6339
- });
6340
- $[19] = t10;
6341
- $[20] = t11;
6342
- $[21] = t9;
6343
- $[22] = t12;
6344
- } else t12 = $[22];
6345
- let t13;
6346
- if ($[23] !== isOpen || $[24] !== t12 || $[25] !== t7) {
6347
- t13 = /* @__PURE__ */ jsxs("button", {
6348
- type: "button",
6349
- onClick: t3,
6350
- className: t4,
6351
- "aria-expanded": isOpen,
6352
- children: [
6353
- t7,
6354
- t8,
6355
- t12
6356
- ]
6357
- });
6358
- $[23] = isOpen;
6359
- $[24] = t12;
6360
- $[25] = t7;
6361
- $[26] = t13;
6362
- } else t13 = $[26];
6363
- const t14 = isOpen ? "mt-2 grid-rows-[1fr]" : "grid-rows-[0fr]";
6364
- let t15;
6365
- if ($[27] !== t14) {
6366
- t15 = cn("grid transition-[grid-template-rows] duration-300 ease-in-out", t14);
6367
- $[27] = t14;
6368
- $[28] = t15;
6369
- } else t15 = $[28];
6370
- const t16 = !isOpen;
6371
- let t17;
6372
- if ($[29] !== todos) {
6373
- t17 = todos.map(_temp5);
6374
- $[29] = todos;
6375
- $[30] = t17;
6376
- } else t17 = $[30];
6377
- let t18;
6378
- if ($[31] !== t17) {
6379
- t18 = /* @__PURE__ */ jsx("div", {
6380
- className: "overflow-hidden",
6381
- children: /* @__PURE__ */ jsx("div", {
6382
- className: "flex max-h-48 flex-col gap-1.5 overflow-y-auto px-1",
6383
- children: t17
6384
- })
6385
- });
6386
- $[31] = t17;
6387
- $[32] = t18;
6388
- } else t18 = $[32];
6389
- let t19;
6390
- if ($[33] !== t15 || $[34] !== t16 || $[35] !== t18) {
6391
- t19 = /* @__PURE__ */ jsx("div", {
6392
- className: t15,
6393
- "aria-hidden": t16,
6394
- children: t18
6395
- });
6396
- $[33] = t15;
6397
- $[34] = t16;
6398
- $[35] = t18;
6399
- $[36] = t19;
6400
- } else t19 = $[36];
6401
- let t20;
6402
- if ($[37] !== t13 || $[38] !== t19) {
6403
- t20 = /* @__PURE__ */ jsxs("div", {
6404
- className: "my-2",
6405
- children: [t13, t19]
6406
- });
6407
- $[37] = t13;
6408
- $[38] = t19;
6409
- $[39] = t20;
6410
- } else t20 = $[39];
6411
- return t20;
6412
- };
6413
- function TodoItem$1(t0) {
6414
- const $ = c(13);
6415
- const { todo } = t0;
6416
- const isDone = todo.status === "done";
6417
- const isInProgress = todo.status === "in-progress";
6418
- let t1;
6419
- if ($[0] !== isDone || $[1] !== isInProgress) {
6420
- t1 = isDone ? /* @__PURE__ */ jsx(CheckCircle2, { className: "mt-0.5 h-3.5 w-3.5 shrink-0 text-green-400/60" }) : isInProgress ? /* @__PURE__ */ jsx("div", {
6421
- className: "mt-0.5 flex h-3.5 w-3.5 shrink-0 items-center justify-center rounded-full border border-blue-400",
6422
- children: /* @__PURE__ */ jsx("div", { className: "h-1.5 w-1.5 animate-pulse rounded-full bg-blue-400" })
6423
- }) : /* @__PURE__ */ jsx(Circle, { className: "mt-0.5 h-3.5 w-3.5 shrink-0 text-white/50" });
6424
- $[0] = isDone;
6425
- $[1] = isInProgress;
6426
- $[2] = t1;
6427
- } else t1 = $[2];
6428
- const t2 = isDone && "text-white/40 line-through";
6429
- const t3 = isInProgress && "text-white";
6430
- const t4 = !isDone && !isInProgress && "text-white/70";
6431
- let t5;
6432
- if ($[3] !== t2 || $[4] !== t3 || $[5] !== t4) {
6433
- t5 = cn("text-sm leading-snug", t2, t3, t4);
6434
- $[3] = t2;
6435
- $[4] = t3;
6436
- $[5] = t4;
6437
- $[6] = t5;
6438
- } else t5 = $[6];
6439
- let t6;
6440
- if ($[7] !== t5 || $[8] !== todo.text) {
6441
- t6 = /* @__PURE__ */ jsx("span", {
6442
- className: t5,
6443
- children: todo.text
6444
- });
6445
- $[7] = t5;
6446
- $[8] = todo.text;
6447
- $[9] = t6;
6448
- } else t6 = $[9];
6449
- let t7;
6450
- if ($[10] !== t1 || $[11] !== t6) {
6451
- t7 = /* @__PURE__ */ jsxs("div", {
6452
- className: "flex items-start gap-2.5 px-2 py-1",
6453
- children: [t1, t6]
6454
- });
6455
- $[10] = t1;
6456
- $[11] = t6;
6457
- $[12] = t7;
6458
- } else t7 = $[12];
6459
- return t7;
6460
- }
6461
- function _temp$4(t) {
6462
- return t.status === "done";
6463
- }
6464
- function _temp2$3(t_0) {
6465
- return t_0.status === "in-progress";
6466
- }
6467
- function _temp3$2(t_1) {
6468
- return t_1.status === "pending" || t_1.status === "new";
6469
- }
6470
- function _temp4$2(o) {
6471
- return !o;
6472
- }
6473
- function _temp5(todo, index) {
6474
- return /* @__PURE__ */ jsx(TodoItem$1, { todo }, `${todo.text}-${index}`);
6475
- }
6476
-
6477
6021
  //#endregion
6478
6022
  //#region src/components/pill/PillVoice.tsx
6479
6023
  const voiceVariants = {
@@ -7026,35 +6570,326 @@ function useVoiceBorderStatus() {
7026
6570
  }
7027
6571
 
7028
6572
  //#endregion
7029
- //#region src/components/pill/PillMarkdown.tsx
6573
+ //#region src/components/pill/PromptBadge.tsx
7030
6574
  /**
7031
- * Markdown renderer for pill components.
7032
- * Uses the same styling as the main MarkdownText but accepts content as a prop.
6575
+ * PromptBadge
6576
+ *
6577
+ * Floating prompt suggestions that appear above the collapsed pill.
6578
+ * Shows a compact list of available prompts that opens upward.
7033
6579
  */
7034
6580
  /**
7035
- * Markdown component for rendering content within pill UI.
7036
- * Supports GitHub-flavored markdown with compact styling option.
6581
+ * Floating prompts above the pill.
6582
+ * Positioned absolutely above parent - parent should be relative.
7037
6583
  */
7038
- const PillMarkdown = memo((t0) => {
7039
- const $ = c(33);
7040
- const { content, className, compact } = t0;
6584
+ const PromptBadge = (t0) => {
6585
+ const $ = c(14);
6586
+ const { prompts, onSelect, className } = t0;
6587
+ const [isExpanded, setIsExpanded] = useState(false);
7041
6588
  let t1;
6589
+ if ($[0] !== onSelect) {
6590
+ t1 = (prompt) => {
6591
+ setIsExpanded(false);
6592
+ onSelect(prompt);
6593
+ };
6594
+ $[0] = onSelect;
6595
+ $[1] = t1;
6596
+ } else t1 = $[1];
6597
+ const handleSelect = t1;
6598
+ if (prompts.length === 0) return null;
6599
+ const firstPrompt = prompts[0];
6600
+ const hasMore = prompts.length > 1;
7042
6601
  let t2;
6602
+ if ($[2] !== className) {
6603
+ t2 = cn("absolute bottom-full left-1/2 -translate-x-1/2 mb-2 z-20", className);
6604
+ $[2] = className;
6605
+ $[3] = t2;
6606
+ } else t2 = $[3];
7043
6607
  let t3;
6608
+ if ($[4] === Symbol.for("react.memo_cache_sentinel")) {
6609
+ t3 = () => setIsExpanded(false);
6610
+ $[4] = t3;
6611
+ } else t3 = $[4];
7044
6612
  let t4;
7045
- let t5;
7046
- let t6;
7047
- let t7;
7048
- if ($[0] !== compact) {
7049
- t1 = (t8$1) => {
7050
- const { className: cn_, ...props } = t8$1;
7051
- return /* @__PURE__ */ jsx("h1", {
7052
- className: cn("aui-md-h1 mb-3 scroll-m-20 font-extrabold tracking-tight last:mb-0", compact ? "text-base" : "text-lg", cn_),
7053
- ...props
7054
- });
7055
- };
7056
- t2 = (t9$1) => {
7057
- const { className: cn__0, ...props_0 } = t9$1;
6613
+ if ($[5] !== firstPrompt || $[6] !== handleSelect || $[7] !== hasMore || $[8] !== isExpanded || $[9] !== prompts) {
6614
+ t4 = /* @__PURE__ */ jsx(AnimatePresence, {
6615
+ mode: "wait",
6616
+ children: !isExpanded ? /* @__PURE__ */ jsxs(motion.button, {
6617
+ type: "button",
6618
+ initial: {
6619
+ opacity: 0,
6620
+ y: 5
6621
+ },
6622
+ animate: {
6623
+ opacity: 1,
6624
+ y: 0
6625
+ },
6626
+ exit: {
6627
+ opacity: 0,
6628
+ y: 5
6629
+ },
6630
+ transition: { duration: .15 },
6631
+ onClick: () => hasMore ? setIsExpanded(true) : handleSelect(firstPrompt),
6632
+ onMouseEnter: () => hasMore && setIsExpanded(true),
6633
+ className: cn("flex items-center gap-2 px-3 py-1.5", "bg-white dark:bg-zinc-800", "rounded-full", "shadow-lg shadow-black/10 dark:shadow-black/30", "border border-zinc-200/80 dark:border-zinc-700/80", "text-sm text-zinc-700 dark:text-zinc-200", "hover:bg-zinc-50 dark:hover:bg-zinc-700", "transition-colors duration-100", "whitespace-nowrap"),
6634
+ children: [
6635
+ /* @__PURE__ */ jsx("span", {
6636
+ className: "text-zinc-400 dark:text-zinc-500",
6637
+ children: "💬"
6638
+ }),
6639
+ /* @__PURE__ */ jsx("span", {
6640
+ className: "max-w-[150px] truncate",
6641
+ children: firstPrompt.name
6642
+ }),
6643
+ hasMore && /* @__PURE__ */ jsxs("span", {
6644
+ className: "text-xs text-zinc-400 dark:text-zinc-500",
6645
+ children: ["+", prompts.length - 1]
6646
+ })
6647
+ ]
6648
+ }, "teaser") : /* @__PURE__ */ jsxs(motion.div, {
6649
+ initial: {
6650
+ opacity: 0,
6651
+ y: 5,
6652
+ scale: .95
6653
+ },
6654
+ animate: {
6655
+ opacity: 1,
6656
+ y: 0,
6657
+ scale: 1
6658
+ },
6659
+ exit: {
6660
+ opacity: 0,
6661
+ y: 5,
6662
+ scale: .95
6663
+ },
6664
+ transition: { duration: .15 },
6665
+ className: cn("min-w-[200px] max-w-[280px]", "py-1.5", "bg-white dark:bg-zinc-800", "rounded-lg", "shadow-xl shadow-black/15 dark:shadow-black/40", "border border-zinc-200/80 dark:border-zinc-700/80", "overflow-hidden"),
6666
+ children: [/* @__PURE__ */ jsx("div", {
6667
+ className: "px-3 py-1.5 border-b border-zinc-100 dark:border-zinc-700/50",
6668
+ children: /* @__PURE__ */ jsx("span", {
6669
+ className: "text-xs font-medium text-zinc-400 dark:text-zinc-500 uppercase tracking-wide",
6670
+ children: "Suggestions"
6671
+ })
6672
+ }), /* @__PURE__ */ jsx("div", {
6673
+ className: "py-1 max-h-[200px] overflow-y-auto",
6674
+ children: prompts.map((prompt_0) => /* @__PURE__ */ jsx("button", {
6675
+ type: "button",
6676
+ onClick: () => handleSelect(prompt_0),
6677
+ className: cn("w-full px-3 py-2 text-left", "hover:bg-zinc-50 dark:hover:bg-zinc-700/50", "transition-colors duration-100", "group"),
6678
+ children: /* @__PURE__ */ jsxs("div", {
6679
+ className: "flex items-start gap-2",
6680
+ children: [/* @__PURE__ */ jsx("span", {
6681
+ className: "text-zinc-400 dark:text-zinc-500 text-sm mt-0.5",
6682
+ children: "💬"
6683
+ }), /* @__PURE__ */ jsxs("div", {
6684
+ className: "flex-1 min-w-0",
6685
+ children: [/* @__PURE__ */ jsx("div", {
6686
+ className: cn("text-sm font-medium truncate", "text-zinc-700 dark:text-zinc-200", "group-hover:text-zinc-900 dark:group-hover:text-white"),
6687
+ children: prompt_0.name
6688
+ }), prompt_0.description && /* @__PURE__ */ jsx("div", {
6689
+ className: "text-xs text-zinc-500 dark:text-zinc-400 truncate mt-0.5",
6690
+ children: prompt_0.description
6691
+ })]
6692
+ })]
6693
+ })
6694
+ }, prompt_0.name))
6695
+ })]
6696
+ }, "menu")
6697
+ });
6698
+ $[5] = firstPrompt;
6699
+ $[6] = handleSelect;
6700
+ $[7] = hasMore;
6701
+ $[8] = isExpanded;
6702
+ $[9] = prompts;
6703
+ $[10] = t4;
6704
+ } else t4 = $[10];
6705
+ let t5;
6706
+ if ($[11] !== t2 || $[12] !== t4) {
6707
+ t5 = /* @__PURE__ */ jsx("div", {
6708
+ className: t2,
6709
+ onMouseLeave: t3,
6710
+ children: t4
6711
+ });
6712
+ $[11] = t2;
6713
+ $[12] = t4;
6714
+ $[13] = t5;
6715
+ } else t5 = $[13];
6716
+ return t5;
6717
+ };
6718
+
6719
+ //#endregion
6720
+ //#region src/components/pill/PromptSuggestions.tsx
6721
+ /**
6722
+ * PromptSuggestions
6723
+ *
6724
+ * Inline prompt suggestions shown inside the expanded pill.
6725
+ * Compact horizontal scrollable list of prompt chips.
6726
+ */
6727
+ /**
6728
+ * Inline prompt suggestions for the expanded pill.
6729
+ * Horizontally scrollable list of compact prompt chips.
6730
+ */
6731
+ const PromptSuggestions = (t0) => {
6732
+ const $ = c(19);
6733
+ const { prompts, onSelect, className } = t0;
6734
+ const scrollRef = useRef(null);
6735
+ let t1;
6736
+ if ($[0] !== onSelect) {
6737
+ t1 = (prompt) => {
6738
+ onSelect(prompt);
6739
+ };
6740
+ $[0] = onSelect;
6741
+ $[1] = t1;
6742
+ } else t1 = $[1];
6743
+ const handleClick = t1;
6744
+ if (prompts.length === 0) return null;
6745
+ let t2;
6746
+ let t3;
6747
+ let t4;
6748
+ if ($[2] === Symbol.for("react.memo_cache_sentinel")) {
6749
+ t2 = {
6750
+ opacity: 0,
6751
+ height: 0
6752
+ };
6753
+ t3 = {
6754
+ opacity: 1,
6755
+ height: "auto"
6756
+ };
6757
+ t4 = {
6758
+ opacity: 0,
6759
+ height: 0
6760
+ };
6761
+ $[2] = t2;
6762
+ $[3] = t3;
6763
+ $[4] = t4;
6764
+ } else {
6765
+ t2 = $[2];
6766
+ t3 = $[3];
6767
+ t4 = $[4];
6768
+ }
6769
+ let t5;
6770
+ if ($[5] !== className) {
6771
+ t5 = cn("overflow-hidden", className);
6772
+ $[5] = className;
6773
+ $[6] = t5;
6774
+ } else t5 = $[6];
6775
+ let t6;
6776
+ if ($[7] === Symbol.for("react.memo_cache_sentinel")) {
6777
+ t6 = /* @__PURE__ */ jsx("div", {
6778
+ className: "flex items-center gap-1.5 mb-2",
6779
+ children: /* @__PURE__ */ jsx("span", {
6780
+ className: "text-xs text-white/40",
6781
+ children: "Suggestions"
6782
+ })
6783
+ });
6784
+ $[7] = t6;
6785
+ } else t6 = $[7];
6786
+ let t7;
6787
+ if ($[8] === Symbol.for("react.memo_cache_sentinel")) {
6788
+ t7 = cn("flex gap-2 overflow-x-auto scrollbar-hide", "pb-1 -mb-1");
6789
+ $[8] = t7;
6790
+ } else t7 = $[8];
6791
+ let t8;
6792
+ if ($[9] !== handleClick || $[10] !== prompts) {
6793
+ let t9$1;
6794
+ if ($[12] !== handleClick) {
6795
+ t9$1 = (prompt_0, index) => /* @__PURE__ */ jsx(motion.button, {
6796
+ type: "button",
6797
+ initial: {
6798
+ opacity: 0,
6799
+ scale: .9
6800
+ },
6801
+ animate: {
6802
+ opacity: 1,
6803
+ scale: 1
6804
+ },
6805
+ exit: {
6806
+ opacity: 0,
6807
+ scale: .9
6808
+ },
6809
+ transition: {
6810
+ type: "spring",
6811
+ stiffness: 400,
6812
+ damping: 25,
6813
+ delay: index * .03
6814
+ },
6815
+ onClick: () => handleClick(prompt_0),
6816
+ className: cn("flex-shrink-0", "px-2.5 py-1 rounded-full", "bg-white/10 hover:bg-white/20", "text-white/80 hover:text-white", "text-xs font-medium", "border border-white/10 hover:border-white/20", "transition-all duration-150", "cursor-pointer", "whitespace-nowrap"),
6817
+ title: prompt_0.description || prompt_0.name,
6818
+ children: /* @__PURE__ */ jsxs("span", {
6819
+ className: "flex items-center gap-1",
6820
+ children: [/* @__PURE__ */ jsx("span", {
6821
+ className: "opacity-60",
6822
+ children: "💬"
6823
+ }), prompt_0.name]
6824
+ })
6825
+ }, prompt_0.name);
6826
+ $[12] = handleClick;
6827
+ $[13] = t9$1;
6828
+ } else t9$1 = $[13];
6829
+ t8 = prompts.map(t9$1);
6830
+ $[9] = handleClick;
6831
+ $[10] = prompts;
6832
+ $[11] = t8;
6833
+ } else t8 = $[11];
6834
+ let t9;
6835
+ if ($[14] !== t8) {
6836
+ t9 = /* @__PURE__ */ jsx("div", {
6837
+ ref: scrollRef,
6838
+ className: t7,
6839
+ children: /* @__PURE__ */ jsx(AnimatePresence, {
6840
+ mode: "popLayout",
6841
+ children: t8
6842
+ })
6843
+ });
6844
+ $[14] = t8;
6845
+ $[15] = t9;
6846
+ } else t9 = $[15];
6847
+ let t10;
6848
+ if ($[16] !== t5 || $[17] !== t9) {
6849
+ t10 = /* @__PURE__ */ jsxs(motion.div, {
6850
+ initial: t2,
6851
+ animate: t3,
6852
+ exit: t4,
6853
+ className: t5,
6854
+ children: [t6, t9]
6855
+ });
6856
+ $[16] = t5;
6857
+ $[17] = t9;
6858
+ $[18] = t10;
6859
+ } else t10 = $[18];
6860
+ return t10;
6861
+ };
6862
+
6863
+ //#endregion
6864
+ //#region src/components/pill/PillMarkdown.tsx
6865
+ /**
6866
+ * Markdown renderer for pill components.
6867
+ * Uses the same styling as the main MarkdownText but accepts content as a prop.
6868
+ */
6869
+ /**
6870
+ * Markdown component for rendering content within pill UI.
6871
+ * Supports GitHub-flavored markdown with compact styling option.
6872
+ */
6873
+ const PillMarkdown = memo((t0) => {
6874
+ const $ = c(33);
6875
+ const { content, className, compact } = t0;
6876
+ let t1;
6877
+ let t2;
6878
+ let t3;
6879
+ let t4;
6880
+ let t5;
6881
+ let t6;
6882
+ let t7;
6883
+ if ($[0] !== compact) {
6884
+ t1 = (t8$1) => {
6885
+ const { className: cn_, ...props } = t8$1;
6886
+ return /* @__PURE__ */ jsx("h1", {
6887
+ className: cn("aui-md-h1 mb-3 scroll-m-20 font-extrabold tracking-tight last:mb-0", compact ? "text-base" : "text-lg", cn_),
6888
+ ...props
6889
+ });
6890
+ };
6891
+ t2 = (t9$1) => {
6892
+ const { className: cn__0, ...props_0 } = t9$1;
7058
6893
  return /* @__PURE__ */ jsx("h2", {
7059
6894
  className: cn("aui-md-h2 mt-3 mb-2 scroll-m-20 font-semibold tracking-tight first:mt-0 last:mb-0", compact ? "text-sm" : "text-base", cn__0),
7060
6895
  ...props_0
@@ -7160,11 +6995,11 @@ const PillMarkdown = memo((t0) => {
7160
6995
  a: t5,
7161
6996
  ul: t6,
7162
6997
  ol: t7,
7163
- li: _temp$3,
6998
+ li: _temp$2,
7164
6999
  blockquote: t8,
7165
7000
  code: t9,
7166
7001
  pre: t10,
7167
- hr: _temp2$2,
7002
+ hr: _temp2$1,
7168
7003
  strong: _temp3$1,
7169
7004
  em: _temp4$1
7170
7005
  };
@@ -7218,14 +7053,14 @@ const PillMarkdown = memo((t0) => {
7218
7053
  return t16;
7219
7054
  });
7220
7055
  PillMarkdown.displayName = "PillMarkdown";
7221
- function _temp$3(t0) {
7056
+ function _temp$2(t0) {
7222
7057
  const { className: cn__6, ...props_6 } = t0;
7223
7058
  return /* @__PURE__ */ jsx("li", {
7224
7059
  className: cn("aui-md-li", cn__6),
7225
7060
  ...props_6
7226
7061
  });
7227
7062
  }
7228
- function _temp2$2(t0) {
7063
+ function _temp2$1(t0) {
7229
7064
  const { className: cn__10, ...props_10 } = t0;
7230
7065
  return /* @__PURE__ */ jsx("hr", {
7231
7066
  className: cn("aui-md-hr my-2 border-white/10", cn__10),
@@ -7343,7 +7178,7 @@ const SummaryBlock = (t0) => {
7343
7178
  if ($[19] !== actions) {
7344
7179
  t12 = actions && actions.length > 0 && /* @__PURE__ */ jsx("div", {
7345
7180
  className: "flex flex-wrap gap-2 mt-3 pt-2 border-t border-white/10",
7346
- children: actions.map(_temp$2)
7181
+ children: actions.map(_temp$1)
7347
7182
  });
7348
7183
  $[19] = actions;
7349
7184
  $[20] = t12;
@@ -7374,7 +7209,7 @@ const SummaryBlock = (t0) => {
7374
7209
  */
7375
7210
  function useLatestSummary() {
7376
7211
  const $ = c(2);
7377
- const messages = useThread(_temp2$1);
7212
+ const messages = useThread(_temp2);
7378
7213
  let t0;
7379
7214
  if ($[0] !== messages) {
7380
7215
  bb0: {
@@ -7408,7 +7243,7 @@ function _temp4(c$1) {
7408
7243
  function _temp3(m$1) {
7409
7244
  return m$1.role === "assistant";
7410
7245
  }
7411
- function _temp2$1(thread) {
7246
+ function _temp2(thread) {
7412
7247
  return thread.messages;
7413
7248
  }
7414
7249
  const WelcomeMessage = (t0) => {
@@ -7448,7 +7283,7 @@ const WelcomeMessage = (t0) => {
7448
7283
  } else t4 = $[5];
7449
7284
  return t4;
7450
7285
  };
7451
- function _temp$2(action, i) {
7286
+ function _temp$1(action, i) {
7452
7287
  return /* @__PURE__ */ jsx("button", {
7453
7288
  onClick: action.onClick,
7454
7289
  className: cn("px-2.5 py-1 rounded-lg text-xs font-medium", "transition-colors duration-200", action.variant === "primary" ? "bg-primary text-primary-foreground hover:bg-primary/90" : "bg-white/10 text-white/80 hover:bg-white/20"),
@@ -7621,75 +7456,36 @@ const AUTO_COLLAPSE_TIMEOUT = 3e4;
7621
7456
  *
7622
7457
  * Uses assistant-ui primitives for data binding.
7623
7458
  */
7624
- const AgentPill = (t0) => {
7625
- const $ = c(113);
7626
- const { position: t1, onOpenHistory, showVoiceButton: t2, isVoiceActive: t3, onVoiceToggle, autoCollapse: t4, className } = t0;
7627
- const position = t1 === void 0 ? "bottom-center" : t1;
7628
- const showVoiceButton = t2 === void 0 ? false : t2;
7629
- const isVoiceActive = t3 === void 0 ? false : t3;
7630
- const autoCollapse = t4 === void 0 ? true : t4;
7459
+ const AgentPill = ({ position = "bottom-center", onOpenHistory, showVoiceButton = false, isVoiceActive = false, onVoiceToggle, autoCollapse = true, className }) => {
7631
7460
  const [userMode, setUserMode] = useState("collapsed");
7632
7461
  const [hasUnread, setHasUnread] = useState(false);
7633
- let t5;
7634
- if ($[0] === Symbol.for("react.memo_cache_sentinel")) {
7635
- t5 = {
7636
- x: 0,
7637
- y: 0
7638
- };
7639
- $[0] = t5;
7640
- } else t5 = $[0];
7641
- const [dragPosition, setDragPosition] = useState(t5);
7462
+ const [dragPosition, setDragPosition] = useState({
7463
+ x: 0,
7464
+ y: 0
7465
+ });
7642
7466
  const dragControls = useDragControls();
7643
7467
  const constraintsRef = useRef(null);
7644
7468
  const autoCollapseTimeoutRef = useRef(null);
7645
7469
  const lastMessageCountRef = useRef(0);
7646
- const messages = useThread(_temp$1);
7647
- let t6;
7648
- if ($[1] === Symbol.for("react.memo_cache_sentinel")) {
7649
- t6 = (_, info) => {
7650
- setDragPosition((prev) => ({
7651
- x: prev.x + info.offset.x,
7652
- y: prev.y + info.offset.y
7653
- }));
7654
- };
7655
- $[1] = t6;
7656
- } else t6 = $[1];
7657
- const handleDragEnd = t6;
7658
- let t7;
7659
- if ($[2] !== messages?.length || $[3] !== userMode) {
7660
- t7 = () => {
7661
- const currentCount = messages?.length ?? 0;
7662
- if (userMode === "collapsed" && currentCount > lastMessageCountRef.current) setHasUnread(true);
7663
- lastMessageCountRef.current = currentCount;
7664
- };
7665
- $[2] = messages?.length;
7666
- $[3] = userMode;
7667
- $[4] = t7;
7668
- } else t7 = $[4];
7669
- const t8 = messages?.length;
7670
- let t9;
7671
- if ($[5] !== t8 || $[6] !== userMode) {
7672
- t9 = [t8, userMode];
7673
- $[5] = t8;
7674
- $[6] = userMode;
7675
- $[7] = t9;
7676
- } else t9 = $[7];
7677
- useEffect(t7, t9);
7678
- let t10;
7679
- let t11;
7680
- if ($[8] !== userMode) {
7681
- t10 = () => {
7682
- if (userMode !== "collapsed") setHasUnread(false);
7683
- };
7684
- t11 = [userMode];
7685
- $[8] = userMode;
7686
- $[9] = t10;
7687
- $[10] = t11;
7688
- } else {
7689
- t10 = $[9];
7690
- t11 = $[10];
7691
- }
7692
- useEffect(t10, t11);
7470
+ const messages = useThread((thread) => thread.messages);
7471
+ const mcpTools = useOptionalMCPTools();
7472
+ const prompts = mcpTools?.prompts ?? [];
7473
+ const getPrompt = mcpTools?.getPrompt;
7474
+ const composerRuntime = useComposerRuntime();
7475
+ const handleDragEnd = useCallback((_, info) => {
7476
+ setDragPosition((prev) => ({
7477
+ x: prev.x + info.offset.x,
7478
+ y: prev.y + info.offset.y
7479
+ }));
7480
+ }, []);
7481
+ useEffect(() => {
7482
+ const currentCount = messages?.length ?? 0;
7483
+ if (userMode === "collapsed" && currentCount > lastMessageCountRef.current) setHasUnread(true);
7484
+ lastMessageCountRef.current = currentCount;
7485
+ }, [messages?.length, userMode]);
7486
+ useEffect(() => {
7487
+ if (userMode !== "collapsed") setHasUnread(false);
7488
+ }, [userMode]);
7693
7489
  const voiceMode = useOptionalVoiceModeContext();
7694
7490
  const voiceBorderStatus = useVoiceBorderStatus();
7695
7491
  const isVoiceModeActive = voiceMode?.isActive || voiceMode?.isConnecting || voiceMode?.isError || isVoiceActive;
@@ -7702,916 +7498,184 @@ const AgentPill = (t0) => {
7702
7498
  const voiceSummary = useVoiceSummary();
7703
7499
  const summary = !isVoiceModeActive && voiceSummary ? voiceSummary.text : textSummary;
7704
7500
  const hasMessages = (messages?.length ?? 0) > 0 || !!voiceSummary;
7705
- let t12;
7706
- bb0: {
7707
- if (!messages || messages.length === 0) {
7708
- t12 = false;
7709
- break bb0;
7710
- }
7711
- let t13$1;
7712
- if ($[11] !== messages) {
7713
- t13$1 = messages.at(-1);
7714
- $[11] = messages;
7715
- $[12] = t13$1;
7716
- } else t13$1 = $[12];
7717
- const lastMessage = t13$1;
7718
- t12 = lastMessage?.role === "assistant" && lastMessage.status?.type !== "complete";
7719
- }
7720
- const isRunning = t12;
7721
- let t13;
7722
- if ($[13] !== actions) {
7723
- t13 = actions.filter(_temp2).at(-1);
7724
- $[13] = actions;
7725
- $[14] = t13;
7726
- } else t13 = $[14];
7727
- const lastCompletedAction = t13;
7501
+ const isRunning = useMemo(() => {
7502
+ if (!messages || messages.length === 0) return false;
7503
+ const lastMessage = messages.at(-1);
7504
+ return lastMessage?.role === "assistant" && lastMessage.status?.type !== "complete";
7505
+ }, [messages]);
7506
+ const lastCompletedAction = useMemo(() => {
7507
+ return actions.filter((a) => a.status === "success" || a.status === "error").at(-1);
7508
+ }, [actions]);
7728
7509
  const textBorderStatus = useToolBorderStatus(!!currentAction, lastCompletedAction?.status === "success" ? "success" : lastCompletedAction?.status === "error" ? "error" : null);
7729
7510
  const borderStatus = isVoiceModeActive ? voiceBorderStatus : textBorderStatus;
7730
- let t14;
7731
- bb1: {
7732
- if (isVoiceModeActive) {
7733
- t14 = "active";
7734
- break bb1;
7735
- }
7736
- if (userMode === "collapsed") {
7737
- t14 = "collapsed";
7738
- break bb1;
7739
- }
7740
- if (userMode === "hovered") {
7741
- t14 = "hovered";
7742
- break bb1;
7743
- }
7744
- if (isRunning) {
7745
- t14 = "active";
7746
- break bb1;
7747
- }
7748
- if (hasMessages) {
7749
- t14 = "expanded";
7750
- break bb1;
7751
- }
7752
- if (userMode === "composing") {
7753
- t14 = "composing";
7754
- break bb1;
7511
+ const mode = useMemo(() => {
7512
+ if (isVoiceModeActive) return "active";
7513
+ if (userMode === "collapsed") return "collapsed";
7514
+ if (userMode === "hovered") return "hovered";
7515
+ if (isRunning) return "active";
7516
+ if (hasMessages) return "expanded";
7517
+ if (userMode === "composing") return "composing";
7518
+ return "collapsed";
7519
+ }, [
7520
+ userMode,
7521
+ isRunning,
7522
+ hasMessages,
7523
+ isVoiceModeActive
7524
+ ]);
7525
+ const handleModeChange = useCallback((newMode) => {
7526
+ setUserMode(newMode);
7527
+ }, []);
7528
+ const handleCollapse = useCallback(() => {
7529
+ setUserMode("collapsed");
7530
+ }, []);
7531
+ useEffect(() => {
7532
+ if (mode === "collapsed" || mode === "hovered") setDragPosition({
7533
+ x: 0,
7534
+ y: 0
7535
+ });
7536
+ }, [mode]);
7537
+ useEffect(() => {
7538
+ if (!autoCollapse) return;
7539
+ if (autoCollapseTimeoutRef.current) {
7540
+ clearTimeout(autoCollapseTimeoutRef.current);
7541
+ autoCollapseTimeoutRef.current = null;
7755
7542
  }
7756
- t14 = "collapsed";
7757
- }
7758
- const mode = t14;
7759
- let t15;
7760
- if ($[15] === Symbol.for("react.memo_cache_sentinel")) {
7761
- t15 = (newMode) => {
7762
- setUserMode(newMode);
7763
- };
7764
- $[15] = t15;
7765
- } else t15 = $[15];
7766
- const handleModeChange = t15;
7767
- let t16;
7768
- if ($[16] === Symbol.for("react.memo_cache_sentinel")) {
7769
- t16 = () => {
7543
+ if (mode === "composing" || mode === "expanded" && !isRunning) autoCollapseTimeoutRef.current = setTimeout(() => {
7770
7544
  setUserMode("collapsed");
7545
+ }, AUTO_COLLAPSE_TIMEOUT);
7546
+ return () => {
7547
+ if (autoCollapseTimeoutRef.current) clearTimeout(autoCollapseTimeoutRef.current);
7771
7548
  };
7772
- $[16] = t16;
7773
- } else t16 = $[16];
7774
- const handleCollapse = t16;
7775
- let t17;
7776
- let t18;
7777
- if ($[17] !== mode) {
7778
- t17 = () => {
7779
- if (mode === "collapsed" || mode === "hovered") setDragPosition({
7780
- x: 0,
7781
- y: 0
7782
- });
7783
- };
7784
- t18 = [mode];
7785
- $[17] = mode;
7786
- $[18] = t17;
7787
- $[19] = t18;
7788
- } else {
7789
- t17 = $[18];
7790
- t18 = $[19];
7791
- }
7792
- useEffect(t17, t18);
7793
- let t19;
7794
- let t20;
7795
- if ($[20] !== autoCollapse || $[21] !== isRunning || $[22] !== mode) {
7796
- t19 = () => {
7797
- if (!autoCollapse) return;
7798
- if (autoCollapseTimeoutRef.current) {
7799
- clearTimeout(autoCollapseTimeoutRef.current);
7800
- autoCollapseTimeoutRef.current = null;
7549
+ }, [
7550
+ mode,
7551
+ isRunning,
7552
+ autoCollapse
7553
+ ]);
7554
+ const handleVoiceToggle = useCallback(() => {
7555
+ if (voiceMode) if (voiceMode.isActive || voiceMode.isConnecting) voiceMode.stopSession();
7556
+ else voiceMode.startSession();
7557
+ onVoiceToggle?.();
7558
+ }, [voiceMode, onVoiceToggle]);
7559
+ const handlePromptSelect = useCallback(async (prompt) => {
7560
+ setUserMode("composing");
7561
+ if (!getPrompt) return;
7562
+ try {
7563
+ const userMessage = (await getPrompt(prompt.name)).messages?.find((m$1) => m$1.role === "user");
7564
+ if (userMessage) {
7565
+ let textContent = "";
7566
+ if (typeof userMessage.content === "string") textContent = userMessage.content;
7567
+ else if (userMessage.content.type === "text") textContent = userMessage.content.text;
7568
+ if (textContent) {
7569
+ composerRuntime.setText(textContent);
7570
+ composerRuntime.send();
7571
+ }
7801
7572
  }
7802
- if (mode === "composing" || mode === "expanded" && !isRunning) autoCollapseTimeoutRef.current = setTimeout(() => {
7803
- setUserMode("collapsed");
7804
- }, AUTO_COLLAPSE_TIMEOUT);
7805
- return () => {
7806
- if (autoCollapseTimeoutRef.current) clearTimeout(autoCollapseTimeoutRef.current);
7807
- };
7808
- };
7809
- t20 = [
7810
- mode,
7811
- isRunning,
7812
- autoCollapse
7813
- ];
7814
- $[20] = autoCollapse;
7815
- $[21] = isRunning;
7816
- $[22] = mode;
7817
- $[23] = t19;
7818
- $[24] = t20;
7819
- } else {
7820
- t19 = $[23];
7821
- t20 = $[24];
7822
- }
7823
- useEffect(t19, t20);
7824
- let t21;
7825
- if ($[25] !== onVoiceToggle || $[26] !== voiceMode) {
7826
- t21 = () => {
7827
- if (voiceMode) if (voiceMode.isActive || voiceMode.isConnecting) voiceMode.stopSession();
7828
- else voiceMode.startSession();
7829
- onVoiceToggle?.();
7830
- };
7831
- $[25] = onVoiceToggle;
7832
- $[26] = voiceMode;
7833
- $[27] = t21;
7834
- } else t21 = $[27];
7835
- const handleVoiceToggle = t21;
7573
+ } catch (err) {
7574
+ console.error("[AgentPill] Failed to get prompt:", err);
7575
+ }
7576
+ }, [getPrompt, composerRuntime]);
7836
7577
  const borderRadius = mode === "collapsed" || mode === "hovered" ? "9999px" : "20px";
7837
7578
  const canCollapse = mode === "composing" || mode === "active" || mode === "expanded";
7838
- let t22;
7839
- if ($[28] === Symbol.for("react.memo_cache_sentinel")) {
7840
- t22 = /* @__PURE__ */ jsx("div", {
7841
- ref: constraintsRef,
7842
- className: "fixed inset-0 pointer-events-none"
7843
- });
7844
- $[28] = t22;
7845
- } else t22 = $[28];
7846
- const t23 = position === "bottom-center" && "bottom-4 left-1/2 -translate-x-1/2";
7847
- const t24 = position === "bottom-right" && "bottom-4 right-4";
7848
- let t25;
7849
- if ($[29] !== className || $[30] !== t23 || $[31] !== t24) {
7850
- t25 = cn("fixed z-50", t23, t24, className);
7851
- $[29] = className;
7852
- $[30] = t23;
7853
- $[31] = t24;
7854
- $[32] = t25;
7855
- } else t25 = $[32];
7856
- let t26;
7857
- if ($[33] === Symbol.for("react.memo_cache_sentinel")) {
7858
- t26 = { scale: 1.02 };
7859
- $[33] = t26;
7860
- } else t26 = $[33];
7861
- let t27;
7862
- if ($[34] !== dragPosition.x || $[35] !== dragPosition.y) {
7863
- t27 = {
7864
- x: dragPosition.x,
7865
- y: dragPosition.y
7866
- };
7867
- $[34] = dragPosition.x;
7868
- $[35] = dragPosition.y;
7869
- $[36] = t27;
7870
- } else t27 = $[36];
7871
- let t28;
7872
- if ($[37] === Symbol.for("react.memo_cache_sentinel")) {
7873
- t28 = {
7874
- type: "spring",
7875
- stiffness: 400,
7876
- damping: 30
7877
- };
7878
- $[37] = t28;
7879
- } else t28 = $[37];
7880
- let t29;
7881
- if ($[38] !== hasUnread || $[39] !== mode) {
7882
- t29 = mode === "collapsed" && hasUnread && /* @__PURE__ */ jsx(motion.div, {
7883
- initial: { scale: 0 },
7884
- animate: { scale: 1 },
7885
- className: "absolute -top-1 -right-1 w-2 h-2 bg-blue-500 rounded-full"
7886
- });
7887
- $[38] = hasUnread;
7888
- $[39] = mode;
7889
- $[40] = t29;
7890
- } else t29 = $[40];
7891
- let t30;
7892
- if ($[41] !== canCollapse || $[42] !== dragControls || $[43] !== handleVoiceToggle || $[44] !== isVoiceModeActive || $[45] !== onOpenHistory) {
7893
- t30 = (isVoiceModeActive || canCollapse) && /* @__PURE__ */ jsxs("div", {
7894
- className: "flex items-center justify-between mb-1 -mt-1",
7895
- children: [/* @__PURE__ */ jsx("div", {
7896
- className: "flex items-center gap-1 text-white/30 cursor-grab active:cursor-grabbing",
7897
- onPointerDown: (e) => dragControls.start(e),
7898
- children: /* @__PURE__ */ jsx(GripHorizontal, { className: "h-3 w-3" })
7899
- }), /* @__PURE__ */ jsxs("div", {
7900
- className: "flex items-center gap-1",
7901
- children: [onOpenHistory && /* @__PURE__ */ jsx("button", {
7902
- type: "button",
7903
- onClick: onOpenHistory,
7904
- className: cn("p-1 rounded-full", "hover:bg-white/10", "text-white/40 hover:text-white/70", "transition-colors duration-150"),
7905
- "aria-label": "View history",
7906
- children: /* @__PURE__ */ jsx(History, { className: "h-3.5 w-3.5" })
7907
- }), /* @__PURE__ */ jsx("button", {
7908
- type: "button",
7909
- onClick: isVoiceModeActive ? handleVoiceToggle : handleCollapse,
7910
- className: cn("p-1 rounded-full", "hover:bg-white/10", "text-white/40 hover:text-white/70", "transition-colors duration-150"),
7911
- "aria-label": isVoiceModeActive ? "End voice session" : "Close",
7912
- children: /* @__PURE__ */ jsx(X, { className: "h-3.5 w-3.5" })
7913
- })]
7914
- })]
7915
- });
7916
- $[41] = canCollapse;
7917
- $[42] = dragControls;
7918
- $[43] = handleVoiceToggle;
7919
- $[44] = isVoiceModeActive;
7920
- $[45] = onOpenHistory;
7921
- $[46] = t30;
7922
- } else t30 = $[46];
7923
- let t31;
7924
- if ($[47] !== handleVoiceToggle || $[48] !== isVoiceModeActive) {
7925
- t31 = isVoiceModeActive && /* @__PURE__ */ jsx(PillVoice, { onEnd: handleVoiceToggle }, "voice-mode");
7926
- $[47] = handleVoiceToggle;
7927
- $[48] = isVoiceModeActive;
7928
- $[49] = t31;
7929
- } else t31 = $[49];
7930
- let t32;
7931
- if ($[50] !== t31) {
7932
- t32 = /* @__PURE__ */ jsx(AnimatePresence, {
7933
- mode: "wait",
7934
- children: t31
7935
- });
7936
- $[50] = t31;
7937
- $[51] = t32;
7938
- } else t32 = $[51];
7939
- let t33;
7940
- if ($[52] !== hasMessages || $[53] !== isVoiceModeActive || $[54] !== mode) {
7941
- t33 = !isVoiceModeActive && mode === "composing" && !hasMessages && /* @__PURE__ */ jsx(WelcomeMessage, {});
7942
- $[52] = hasMessages;
7943
- $[53] = isVoiceModeActive;
7944
- $[54] = mode;
7945
- $[55] = t33;
7946
- } else t33 = $[55];
7947
- let t34;
7948
- if ($[56] !== currentAction || $[57] !== isVoiceModeActive || $[58] !== mode || $[59] !== recentActions) {
7949
- t34 = !isVoiceModeActive && mode === "active" && /* @__PURE__ */ jsx(CurrentActivity, {
7950
- currentAction,
7951
- recentActions,
7952
- showRecent: false
7953
- });
7954
- $[56] = currentAction;
7955
- $[57] = isVoiceModeActive;
7956
- $[58] = mode;
7957
- $[59] = recentActions;
7958
- $[60] = t34;
7959
- } else t34 = $[60];
7960
- let t35;
7961
- if ($[61] !== isVoiceModeActive || $[62] !== mode) {
7962
- t35 = !isVoiceModeActive && (mode === "active" || mode === "expanded") && /* @__PURE__ */ jsx(PillTodoList, {});
7963
- $[61] = isVoiceModeActive;
7964
- $[62] = mode;
7965
- $[63] = t35;
7966
- } else t35 = $[63];
7967
- let t36;
7968
- if ($[64] !== isVoiceModeActive || $[65] !== mode) {
7969
- t36 = !isVoiceModeActive && (mode === "active" || mode === "expanded") && /* @__PURE__ */ jsx(PillMessageContent, {});
7970
- $[64] = isVoiceModeActive;
7971
- $[65] = mode;
7972
- $[66] = t36;
7973
- } else t36 = $[66];
7974
- let t37;
7975
- if ($[67] !== isRunning || $[68] !== isVoiceModeActive || $[69] !== lastCompletedAction?.error || $[70] !== mode || $[71] !== summary) {
7976
- t37 = !isVoiceModeActive && mode === "expanded" && !isRunning && summary && /* @__PURE__ */ jsx(SummaryBlock, {
7977
- summary,
7978
- isSuccess: !lastCompletedAction?.error
7979
- });
7980
- $[67] = isRunning;
7981
- $[68] = isVoiceModeActive;
7982
- $[69] = lastCompletedAction?.error;
7983
- $[70] = mode;
7984
- $[71] = summary;
7985
- $[72] = t37;
7986
- } else t37 = $[72];
7987
- let t38;
7988
- if ($[73] !== isRunning || $[74] !== isVoiceModeActive || $[75] !== mode || $[76] !== summary) {
7989
- t38 = !isVoiceModeActive && mode === "expanded" && !isRunning && !summary && /* @__PURE__ */ jsx(IdleIndicator, {});
7990
- $[73] = isRunning;
7991
- $[74] = isVoiceModeActive;
7992
- $[75] = mode;
7993
- $[76] = summary;
7994
- $[77] = t38;
7995
- } else t38 = $[77];
7996
- let t39;
7997
- if ($[78] !== actions || $[79] !== isVoiceModeActive || $[80] !== mode) {
7998
- t39 = (mode === "active" || mode === "expanded" || isVoiceModeActive) && actions.length > 0 && /* @__PURE__ */ jsx(ActionList, {
7999
- actions,
8000
- defaultCollapsed: mode === "active"
8001
- });
8002
- $[78] = actions;
8003
- $[79] = isVoiceModeActive;
8004
- $[80] = mode;
8005
- $[81] = t39;
8006
- } else t39 = $[81];
8007
- let t40;
8008
- if ($[82] !== handleVoiceToggle || $[83] !== isVoiceActive || $[84] !== isVoiceModeActive || $[85] !== mode || $[86] !== showVoiceButton || $[87] !== voiceMode?.isSupported) {
8009
- t40 = !isVoiceModeActive && (mode === "composing" || mode === "active" || mode === "expanded") && /* @__PURE__ */ jsx(PillComposer, {
8010
- showVoiceButton: showVoiceButton || !!voiceMode?.isSupported,
8011
- isVoiceActive,
8012
- onVoiceToggle: handleVoiceToggle
8013
- });
8014
- $[82] = handleVoiceToggle;
8015
- $[83] = isVoiceActive;
8016
- $[84] = isVoiceModeActive;
8017
- $[85] = mode;
8018
- $[86] = showVoiceButton;
8019
- $[87] = voiceMode?.isSupported;
8020
- $[88] = t40;
8021
- } else t40 = $[88];
8022
- let t41;
8023
- if ($[89] !== mode || $[90] !== t30 || $[91] !== t32 || $[92] !== t33 || $[93] !== t34 || $[94] !== t35 || $[95] !== t36 || $[96] !== t37 || $[97] !== t38 || $[98] !== t39 || $[99] !== t40) {
8024
- t41 = /* @__PURE__ */ jsxs(PillContainer, {
8025
- mode,
8026
- onModeChange: handleModeChange,
8027
- children: [
8028
- t30,
8029
- t32,
8030
- t33,
8031
- t34,
8032
- t35,
8033
- t36,
8034
- t37,
8035
- t38,
8036
- t39,
8037
- t40
8038
- ]
8039
- });
8040
- $[89] = mode;
8041
- $[90] = t30;
8042
- $[91] = t32;
8043
- $[92] = t33;
8044
- $[93] = t34;
8045
- $[94] = t35;
8046
- $[95] = t36;
8047
- $[96] = t37;
8048
- $[97] = t38;
8049
- $[98] = t39;
8050
- $[99] = t40;
8051
- $[100] = t41;
8052
- } else t41 = $[100];
8053
- let t42;
8054
- if ($[101] !== borderRadius || $[102] !== borderStatus || $[103] !== t41) {
8055
- t42 = /* @__PURE__ */ jsx(ToolStatusBorder, {
8056
- status: borderStatus,
8057
- borderRadius,
8058
- children: t41
8059
- });
8060
- $[101] = borderRadius;
8061
- $[102] = borderStatus;
8062
- $[103] = t41;
8063
- $[104] = t42;
8064
- } else t42 = $[104];
8065
- let t43;
8066
- if ($[105] !== dragControls || $[106] !== t27 || $[107] !== t29 || $[108] !== t42) {
8067
- t43 = /* @__PURE__ */ jsxs(motion.div, {
7579
+ return /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx("div", {
7580
+ ref: constraintsRef,
7581
+ className: "fixed inset-0 pointer-events-none"
7582
+ }), /* @__PURE__ */ jsx(ThreadPrimitive.Root, {
7583
+ className: cn("fixed z-50", position === "bottom-center" && "bottom-4 left-1/2 -translate-x-1/2", position === "bottom-right" && "bottom-4 right-4", className),
7584
+ children: /* @__PURE__ */ jsxs(motion.div, {
8068
7585
  drag: true,
8069
7586
  dragControls,
8070
7587
  dragConstraints: constraintsRef,
8071
7588
  dragElastic: .1,
8072
7589
  dragMomentum: false,
8073
- whileDrag: t26,
7590
+ whileDrag: { scale: 1.02 },
8074
7591
  onDragEnd: handleDragEnd,
8075
7592
  initial: false,
8076
- animate: t27,
8077
- transition: t28,
8078
- className: "cursor-grab active:cursor-grabbing relative",
8079
- children: [t29, t42]
8080
- });
8081
- $[105] = dragControls;
8082
- $[106] = t27;
8083
- $[107] = t29;
8084
- $[108] = t42;
8085
- $[109] = t43;
8086
- } else t43 = $[109];
8087
- let t44;
8088
- if ($[110] !== t25 || $[111] !== t43) {
8089
- t44 = /* @__PURE__ */ jsxs(Fragment, { children: [t22, /* @__PURE__ */ jsx(ThreadPrimitive.Root, {
8090
- className: t25,
8091
- children: t43
8092
- })] });
8093
- $[110] = t25;
8094
- $[111] = t43;
8095
- $[112] = t44;
8096
- } else t44 = $[112];
8097
- return t44;
8098
- };
8099
- function _temp$1(thread) {
8100
- return thread.messages;
8101
- }
8102
- function _temp2(a) {
8103
- return a.status === "success" || a.status === "error";
8104
- }
8105
-
8106
- //#endregion
8107
- //#region src/components/planning/PlanToolRegistry.tsx
8108
- /**
8109
- * Plan Tool Registry Component
8110
- *
8111
- * Registers the planning tools (updateTodosTool, askForPlanApprovalTool) with
8112
- * the assistant-ui runtime. These tools execute client-side using React state
8113
- * managed by PlanProvider.
8114
- *
8115
- * Usage:
8116
- * <PlanToolRegistry />
8117
- *
8118
- * This component should be placed inside both PlanProvider and AssistantRuntimeProvider.
8119
- */
8120
- /**
8121
- * Registers updateTodosTool with the runtime
8122
- */
8123
- const UpdateTodosToolBridge = () => {
8124
- const $ = c(5);
8125
- const plan = useOptionalPlan();
8126
- let t0;
8127
- if ($[0] === Symbol.for("react.memo_cache_sentinel")) {
8128
- t0 = {
8129
- type: "array",
8130
- items: { type: "string" },
8131
- description: "Array of new todo items to add"
8132
- };
8133
- $[0] = t0;
8134
- } else t0 = $[0];
8135
- let t1;
8136
- if ($[1] === Symbol.for("react.memo_cache_sentinel")) {
8137
- t1 = {
8138
- type: "array",
8139
- items: { type: "number" },
8140
- description: "Array of indices of todos to mark as in progress"
8141
- };
8142
- $[1] = t1;
8143
- } else t1 = $[1];
8144
- let t2;
8145
- if ($[2] === Symbol.for("react.memo_cache_sentinel")) {
8146
- t2 = {
8147
- type: "object",
8148
- properties: {
8149
- new: t0,
8150
- inProgress: t1,
8151
- done: {
8152
- type: "array",
8153
- items: { type: "number" },
8154
- description: "Array of indices of todos to mark as done"
8155
- },
8156
- clearPreviouslyDone: {
8157
- type: "boolean",
8158
- default: false,
8159
- description: "Whether to remove all previously completed todos from the list"
8160
- },
8161
- insertAt: {
8162
- type: "number",
8163
- description: "Index at which to insert new items (0 for beginning, defaults to end of list)"
8164
- }
7593
+ animate: {
7594
+ x: dragPosition.x,
7595
+ y: dragPosition.y
8165
7596
  },
8166
- required: [
8167
- "new",
8168
- "inProgress",
8169
- "done",
8170
- "clearPreviouslyDone"
8171
- ]
8172
- };
8173
- $[2] = t2;
8174
- } else t2 = $[2];
8175
- let t3;
8176
- if ($[3] !== plan) {
8177
- t3 = {
8178
- toolName: "updateTodosTool",
8179
- description: "Manage and update a task list to communicate progress and planned actions. Keep the list current throughout the interaction to maintain transparency about ongoing and planned work.",
8180
- parameters: t2,
8181
- execute: async (args) => {
8182
- if (!plan) throw new Error("PlanProvider not available");
8183
- const input = {
8184
- new: args.new ?? [],
8185
- inProgress: args.inProgress ?? [],
8186
- done: args.done ?? [],
8187
- clearPreviouslyDone: args.clearPreviouslyDone ?? false,
8188
- insertAt: args.insertAt
8189
- };
8190
- return plan.updateTodos(input);
8191
- }
8192
- };
8193
- $[3] = plan;
8194
- $[4] = t3;
8195
- } else t3 = $[4];
8196
- useAssistantTool(t3);
8197
- return null;
8198
- };
8199
- /**
8200
- * Registers askForPlanApprovalTool with the runtime
8201
- */
8202
- const AskForPlanApprovalToolBridge = () => {
8203
- const $ = c(3);
8204
- const plan = useOptionalPlan();
8205
- let t0;
8206
- if ($[0] === Symbol.for("react.memo_cache_sentinel")) {
8207
- t0 = {
8208
- type: "object",
8209
- properties: { explainer: {
8210
- type: "string",
8211
- description: "One-line explanation of the plan."
8212
- } },
8213
- required: ["explainer"]
8214
- };
8215
- $[0] = t0;
8216
- } else t0 = $[0];
8217
- let t1;
8218
- if ($[1] !== plan) {
8219
- t1 = {
8220
- toolName: "askForPlanApprovalTool",
8221
- description: "Request user approval before executing planned actions. Presents pending tasks for review, allowing the user to approve, reject, or modify the plan. Returns the updated task list after user review, which may include modifications made by the user.",
8222
- parameters: t0,
8223
- execute: async (args) => {
8224
- if (!plan) throw new Error("PlanProvider not available");
8225
- const explainer = args.explainer;
8226
- return await plan.requestPlanApproval(explainer);
8227
- }
8228
- };
8229
- $[1] = plan;
8230
- $[2] = t1;
8231
- } else t1 = $[2];
8232
- useAssistantTool(t1);
8233
- return null;
8234
- };
8235
- /**
8236
- * Tool registry that registers all planning tools with assistant-ui.
8237
- * These tools execute client-side using React state from PlanProvider.
8238
- */
8239
- const PlanToolRegistry = () => {
8240
- const $ = c(1);
8241
- if (!useOptionalPlan()) return null;
8242
- let t0;
8243
- if ($[0] === Symbol.for("react.memo_cache_sentinel")) {
8244
- t0 = /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx(UpdateTodosToolBridge, {}), /* @__PURE__ */ jsx(AskForPlanApprovalToolBridge, {})] });
8245
- $[0] = t0;
8246
- } else t0 = $[0];
8247
- return t0;
8248
- };
8249
-
8250
- //#endregion
8251
- //#region src/components/planning/UpdateTodosUI.tsx
8252
- /**
8253
- * UpdateTodosUI Component
8254
- *
8255
- * UI component for displaying the result of updateTodosTool calls.
8256
- * Shows a collapsible list of todos with status indicators.
8257
- * Designed for the pill's dark theme.
8258
- */
8259
- const statusConfig$1 = {
8260
- new: {
8261
- icon: Circle,
8262
- color: "text-purple-400",
8263
- bgColor: "bg-purple-400"
8264
- },
8265
- pending: {
8266
- icon: Circle,
8267
- color: "text-white/50",
8268
- bgColor: "bg-white/50"
8269
- },
8270
- "in-progress": {
8271
- icon: Clock,
8272
- color: "text-blue-400",
8273
- bgColor: "bg-blue-400"
8274
- },
8275
- done: {
8276
- icon: CheckCircle2,
8277
- color: "text-green-400",
8278
- bgColor: "bg-green-400"
8279
- }
8280
- };
8281
- const UpdateTodosUI = makeAssistantToolUI({
8282
- toolName: "updateTodosTool",
8283
- render: function Render({ args, result }) {
8284
- const [isManualOpen, setIsOpen] = useState(void 0);
8285
- const plan = useOptionalPlan();
8286
- const emphasisedIndexes = useMemo(() => {
8287
- const targets = /* @__PURE__ */ new Set();
8288
- (args?.inProgress ?? []).forEach((index) => targets.add(index));
8289
- (args?.done ?? []).forEach((index) => targets.add(index));
8290
- return targets;
8291
- }, [args]);
8292
- if (plan?.isPlanPending) return null;
8293
- if (!plan?.isPlanApproved) return null;
8294
- const todos = result?.todos ?? [];
8295
- const isOpen = isManualOpen ?? false;
8296
- if (!result) return /* @__PURE__ */ jsxs("div", {
8297
- className: "my-2 flex w-full animate-pulse items-center gap-2 text-sm text-white/60",
8298
- children: [/* @__PURE__ */ jsx(Clock, { className: "h-3.5 w-3.5 animate-spin" }), "Updating tasks..."]
8299
- });
8300
- if (todos.length === 0) return null;
8301
- const doneCount = todos.filter((t) => t.status === "done").length;
8302
- const inProgressCount = todos.filter((t) => t.status === "in-progress").length;
8303
- const pendingCount = todos.filter((t) => t.status === "pending" || t.status === "new").length;
8304
- return /* @__PURE__ */ jsxs("div", {
8305
- className: "my-2",
8306
- children: [/* @__PURE__ */ jsxs("button", {
8307
- type: "button",
8308
- onClick: () => setIsOpen((open) => !open),
8309
- className: cn("flex w-full items-center gap-2", "rounded-lg px-3 py-2", "bg-white/5 hover:bg-white/10", "transition-colors duration-200"),
8310
- "aria-expanded": isOpen,
8311
- children: [
8312
- /* @__PURE__ */ jsx(ChevronDown, { className: cn("h-3.5 w-3.5 text-white/50 transition-transform", !isOpen && "-rotate-90") }),
8313
- /* @__PURE__ */ jsx("span", {
8314
- className: "text-xs font-medium text-white/80",
8315
- children: "Tasks"
8316
- }),
8317
- /* @__PURE__ */ jsxs("div", {
8318
- className: "flex items-center gap-2 ml-auto text-xs text-white/50",
7597
+ transition: {
7598
+ type: "spring",
7599
+ stiffness: 400,
7600
+ damping: 30
7601
+ },
7602
+ className: "cursor-grab active:cursor-grabbing relative",
7603
+ children: [
7604
+ mode === "collapsed" && prompts.length > 0 && /* @__PURE__ */ jsx(PromptBadge, {
7605
+ prompts,
7606
+ onSelect: handlePromptSelect
7607
+ }),
7608
+ mode === "collapsed" && hasUnread && /* @__PURE__ */ jsx(motion.div, {
7609
+ initial: { scale: 0 },
7610
+ animate: { scale: 1 },
7611
+ className: "absolute -top-1 -right-1 w-2 h-2 bg-blue-500 rounded-full z-10"
7612
+ }),
7613
+ /* @__PURE__ */ jsx(ToolStatusBorder, {
7614
+ status: borderStatus,
7615
+ borderRadius,
7616
+ children: /* @__PURE__ */ jsxs(PillContainer, {
7617
+ mode,
7618
+ onModeChange: handleModeChange,
8319
7619
  children: [
8320
- inProgressCount > 0 && /* @__PURE__ */ jsxs("span", {
8321
- className: "flex items-center gap-1",
8322
- children: [/* @__PURE__ */ jsx("span", { className: "h-1.5 w-1.5 rounded-full bg-blue-400 animate-pulse" }), inProgressCount]
7620
+ (isVoiceModeActive || canCollapse) && /* @__PURE__ */ jsxs("div", {
7621
+ className: "flex items-center justify-between mb-1 -mt-1",
7622
+ children: [/* @__PURE__ */ jsx("div", {
7623
+ className: "flex items-center gap-1 text-white/30 cursor-grab active:cursor-grabbing",
7624
+ onPointerDown: (e) => dragControls.start(e),
7625
+ children: /* @__PURE__ */ jsx(GripHorizontal, { className: "h-3 w-3" })
7626
+ }), /* @__PURE__ */ jsxs("div", {
7627
+ className: "flex items-center gap-1",
7628
+ children: [onOpenHistory && /* @__PURE__ */ jsx("button", {
7629
+ type: "button",
7630
+ onClick: onOpenHistory,
7631
+ className: cn("p-1 rounded-full", "hover:bg-white/10", "text-white/40 hover:text-white/70", "transition-colors duration-150"),
7632
+ "aria-label": "View history",
7633
+ children: /* @__PURE__ */ jsx(History, { className: "h-3.5 w-3.5" })
7634
+ }), /* @__PURE__ */ jsx("button", {
7635
+ type: "button",
7636
+ onClick: isVoiceModeActive ? handleVoiceToggle : handleCollapse,
7637
+ className: cn("p-1 rounded-full", "hover:bg-white/10", "text-white/40 hover:text-white/70", "transition-colors duration-150"),
7638
+ "aria-label": isVoiceModeActive ? "End voice session" : "Close",
7639
+ children: /* @__PURE__ */ jsx(X, { className: "h-3.5 w-3.5" })
7640
+ })]
7641
+ })]
7642
+ }),
7643
+ /* @__PURE__ */ jsx(AnimatePresence, {
7644
+ mode: "wait",
7645
+ children: isVoiceModeActive && /* @__PURE__ */ jsx(PillVoice, { onEnd: handleVoiceToggle }, "voice-mode")
8323
7646
  }),
8324
- pendingCount > 0 && /* @__PURE__ */ jsxs("span", {
8325
- className: "flex items-center gap-1",
8326
- children: [/* @__PURE__ */ jsx("span", { className: "h-1.5 w-1.5 rounded-full bg-white/50" }), pendingCount]
7647
+ !isVoiceModeActive && mode === "composing" && !hasMessages && /* @__PURE__ */ jsx(WelcomeMessage, {}),
7648
+ !isVoiceModeActive && mode === "active" && /* @__PURE__ */ jsx(CurrentActivity, {
7649
+ currentAction,
7650
+ recentActions,
7651
+ showRecent: false
8327
7652
  }),
8328
- doneCount > 0 && /* @__PURE__ */ jsxs("span", {
8329
- className: "flex items-center gap-1",
8330
- children: [/* @__PURE__ */ jsx("span", { className: "h-1.5 w-1.5 rounded-full bg-green-400" }), doneCount]
7653
+ !isVoiceModeActive && (mode === "active" || mode === "expanded") && /* @__PURE__ */ jsx(PillMessageContent, {}),
7654
+ !isVoiceModeActive && mode === "expanded" && !isRunning && summary && /* @__PURE__ */ jsx(SummaryBlock, {
7655
+ summary,
7656
+ isSuccess: !lastCompletedAction?.error
7657
+ }),
7658
+ !isVoiceModeActive && mode === "expanded" && !isRunning && !summary && /* @__PURE__ */ jsx(IdleIndicator, {}),
7659
+ (mode === "active" || mode === "expanded" || isVoiceModeActive) && actions.length > 0 && /* @__PURE__ */ jsx(ActionList, {
7660
+ actions,
7661
+ defaultCollapsed: mode === "active"
7662
+ }),
7663
+ !isVoiceModeActive && (mode === "composing" || mode === "expanded") && !isRunning && prompts.length > 0 && /* @__PURE__ */ jsx(PromptSuggestions, {
7664
+ prompts,
7665
+ onSelect: handlePromptSelect
7666
+ }),
7667
+ !isVoiceModeActive && (mode === "composing" || mode === "active" || mode === "expanded") && /* @__PURE__ */ jsx(PillComposer, {
7668
+ showVoiceButton: showVoiceButton || !!voiceMode?.isSupported,
7669
+ isVoiceActive,
7670
+ onVoiceToggle: handleVoiceToggle
8331
7671
  })
8332
7672
  ]
8333
7673
  })
8334
- ]
8335
- }), /* @__PURE__ */ jsx("div", {
8336
- className: cn("grid transition-[grid-template-rows] duration-300 ease-in-out", isOpen ? "mt-2 grid-rows-[1fr]" : "grid-rows-[0fr]"),
8337
- "aria-hidden": !isOpen,
8338
- children: /* @__PURE__ */ jsx("div", {
8339
- className: "overflow-hidden",
8340
- children: /* @__PURE__ */ jsx("div", {
8341
- className: "flex flex-col gap-1.5 px-1 max-h-48 overflow-y-auto",
8342
- children: todos.map((todo, index) => /* @__PURE__ */ jsx(TodoItem, {
8343
- todo,
8344
- emphasized: emphasisedIndexes.has(index) || todo.status === "new"
8345
- }, `${todo.text}-${index}`))
8346
- })
8347
- })
8348
- })]
8349
- });
8350
- }
8351
- });
8352
- function TodoItem(t0) {
8353
- const $ = c(16);
8354
- const { todo, emphasized } = t0;
8355
- const config = statusConfig$1[todo.status];
8356
- const StatusIcon = config.icon;
8357
- const isDone = todo.status === "done";
8358
- const isInProgress = todo.status === "in-progress";
8359
- let t1;
8360
- if ($[0] !== StatusIcon || $[1] !== config.color || $[2] !== isDone || $[3] !== isInProgress) {
8361
- t1 = isDone ? /* @__PURE__ */ jsx(CheckCircle2, { className: "mt-0.5 h-3.5 w-3.5 shrink-0 text-green-400/60" }) : isInProgress ? /* @__PURE__ */ jsx("div", {
8362
- className: "mt-0.5 flex h-3.5 w-3.5 shrink-0 items-center justify-center rounded-full border border-blue-400",
8363
- children: /* @__PURE__ */ jsx("div", { className: "h-1.5 w-1.5 rounded-full bg-blue-400 animate-pulse" })
8364
- }) : /* @__PURE__ */ jsx(StatusIcon, { className: cn("mt-0.5 h-3.5 w-3.5 shrink-0", config.color) });
8365
- $[0] = StatusIcon;
8366
- $[1] = config.color;
8367
- $[2] = isDone;
8368
- $[3] = isInProgress;
8369
- $[4] = t1;
8370
- } else t1 = $[4];
8371
- const t2 = isDone && "text-white/40 line-through";
8372
- const t3 = isInProgress && "text-white";
8373
- const t4 = !isDone && !isInProgress && "text-white/70";
8374
- const t5 = emphasized && !isDone && "font-medium";
8375
- let t6;
8376
- if ($[5] !== t2 || $[6] !== t3 || $[7] !== t4 || $[8] !== t5) {
8377
- t6 = cn("text-sm leading-snug", t2, t3, t4, t5);
8378
- $[5] = t2;
8379
- $[6] = t3;
8380
- $[7] = t4;
8381
- $[8] = t5;
8382
- $[9] = t6;
8383
- } else t6 = $[9];
8384
- let t7;
8385
- if ($[10] !== t6 || $[11] !== todo.text) {
8386
- t7 = /* @__PURE__ */ jsx("span", {
8387
- className: t6,
8388
- children: todo.text
8389
- });
8390
- $[10] = t6;
8391
- $[11] = todo.text;
8392
- $[12] = t7;
8393
- } else t7 = $[12];
8394
- let t8;
8395
- if ($[13] !== t1 || $[14] !== t7) {
8396
- t8 = /* @__PURE__ */ jsxs("div", {
8397
- className: "flex items-start gap-2.5 px-2 py-1",
8398
- children: [t1, t7]
8399
- });
8400
- $[13] = t1;
8401
- $[14] = t7;
8402
- $[15] = t8;
8403
- } else t8 = $[15];
8404
- return t8;
8405
- }
8406
-
8407
- //#endregion
8408
- //#region src/components/planning/PlanApprovalUI.tsx
8409
- /**
8410
- * PlanApprovalUI Component
8411
- *
8412
- * UI component for the askForPlanApprovalTool.
8413
- * Displays pending tasks for user review with approve/reject controls.
8414
- * Users can also add, modify, or delete tasks before approving.
8415
- * Designed for the pill's dark theme.
8416
- */
8417
- const statusConfig = {
8418
- new: {
8419
- icon: Circle,
8420
- color: "text-purple-400"
8421
- },
8422
- pending: {
8423
- icon: Circle,
8424
- color: "text-white/50"
8425
- },
8426
- "in-progress": {
8427
- icon: Clock,
8428
- color: "text-blue-400"
8429
- },
8430
- done: {
8431
- icon: CheckCircle2,
8432
- color: "text-green-400"
8433
- }
8434
- };
8435
- const PlanApprovalUI = makeAssistantToolUI({
8436
- toolName: "askForPlanApprovalTool",
8437
- render: function Render({ args, status, result, addResult }) {
8438
- const { todos: contextTodos } = usePlan();
8439
- const isCompleted = status.type === "complete";
8440
- const isApproved = result?.approved;
8441
- const isRejected = status.type === "incomplete" || isCompleted && isApproved === false;
8442
- const [todos, setTodos] = useState(contextTodos.filter((todo) => todo.status !== "done").map((todo) => ({
8443
- ...todo,
8444
- status: "pending"
8445
- })));
8446
- const [draftValue, setDraftValue] = useState("");
8447
- const itemRefs = useRef([]);
8448
- const [pendingFocusIndex, setPendingFocusIndex] = useState(null);
8449
- useEffect(() => {
8450
- itemRefs.current = itemRefs.current.slice(0, todos.length);
8451
- }, [todos.length]);
8452
- useEffect(() => {
8453
- if (pendingFocusIndex === null) return;
8454
- const target = itemRefs.current[pendingFocusIndex];
8455
- if (target) {
8456
- target.focus();
8457
- const length = target.value.length;
8458
- target.setSelectionRange(length, length);
8459
- }
8460
- setPendingFocusIndex(null);
8461
- }, [pendingFocusIndex]);
8462
- const handleTodoChange = useCallback((index, value) => {
8463
- setTodos((prev) => {
8464
- const next = [...prev];
8465
- next[index] = {
8466
- ...next[index],
8467
- text: value
8468
- };
8469
- return next;
8470
- });
8471
- }, []);
8472
- const handleDelete = useCallback((index) => {
8473
- setTodos((prev) => prev.filter((_, i) => i !== index));
8474
- }, []);
8475
- const handleCreateFromDraft = useCallback((value) => {
8476
- if (!value.trim()) {
8477
- setDraftValue(value);
8478
- return;
8479
- }
8480
- setDraftValue("");
8481
- setTodos((prev) => {
8482
- const next = [...prev, {
8483
- text: value.trim(),
8484
- status: "pending"
8485
- }];
8486
- setPendingFocusIndex(next.length - 1);
8487
- return next;
8488
- });
8489
- }, []);
8490
- const handleKeyDown = useCallback((e) => {
8491
- if (e.key === "Enter" && draftValue.trim()) {
8492
- e.preventDefault();
8493
- handleCreateFromDraft(draftValue);
8494
- }
8495
- }, [draftValue, handleCreateFromDraft]);
8496
- const handleApprove = useCallback(() => {
8497
- addResult({
8498
- todos,
8499
- approved: true
8500
- });
8501
- }, [todos, addResult]);
8502
- const handleReject = useCallback(() => {
8503
- addResult({
8504
- todos: [],
8505
- approved: false
8506
- });
8507
- }, [addResult]);
8508
- if (isCompleted && isApproved) return null;
8509
- const headerStatus = isCompleted ? {
8510
- icon: isApproved ? CheckCircle2 : AlertCircle,
8511
- label: isApproved ? "Plan Approved" : "Plan Rejected",
8512
- className: isApproved ? "text-green-400" : "text-red-400"
8513
- } : null;
8514
- return /* @__PURE__ */ jsxs("div", {
8515
- className: cn("my-3 overflow-hidden rounded-xl border shadow-lg", isRejected ? "border-red-500/50 bg-red-950/20" : "border-white/10 bg-white/5"),
8516
- children: [
8517
- /* @__PURE__ */ jsxs("div", {
8518
- className: "flex items-center gap-2 border-b border-white/10 px-4 py-2 text-xs font-medium tracking-wide text-white/50 uppercase",
8519
- children: ["Plan Approval", headerStatus && /* @__PURE__ */ jsxs("span", {
8520
- className: cn("ml-auto flex items-center gap-1 text-xs font-semibold normal-case", headerStatus.className),
8521
- children: [/* @__PURE__ */ jsx(headerStatus.icon, {
8522
- className: "h-4 w-4",
8523
- "aria-hidden": true
8524
- }), headerStatus.label]
8525
- })]
8526
- }),
8527
- args?.explainer && /* @__PURE__ */ jsx("div", {
8528
- className: "border-b border-white/5 px-4 py-2 text-sm text-white/70",
8529
- children: args.explainer
8530
- }),
8531
- /* @__PURE__ */ jsx("div", {
8532
- className: "px-4 py-3",
8533
- children: isCompleted ? isApproved ? todos.length > 0 ? /* @__PURE__ */ jsx("ul", {
8534
- className: "flex flex-col gap-1",
8535
- children: todos.map((todo, index) => {
8536
- const StatusIcon = statusConfig[todo.status].icon;
8537
- return /* @__PURE__ */ jsxs("li", {
8538
- className: "flex items-center gap-2 rounded-md px-2 py-1 text-sm text-white/70",
8539
- children: [/* @__PURE__ */ jsx(StatusIcon, { className: cn("h-3.5 w-3.5 flex-shrink-0", statusConfig[todo.status].color) }), /* @__PURE__ */ jsx("span", { children: todo.text })]
8540
- }, `approved-todo-${index}`);
8541
- })
8542
- }) : /* @__PURE__ */ jsx("p", {
8543
- className: "text-sm text-white/60",
8544
- children: "Approved with no tasks in the queue."
8545
- }) : /* @__PURE__ */ jsx("p", {
8546
- className: "text-sm text-white/60",
8547
- children: "Plan rejected. The assistant will revise next steps."
8548
- }) : /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsxs("ul", {
8549
- className: "flex flex-col",
8550
- children: [todos.map((todo, index) => {
8551
- const StatusIcon = statusConfig[todo.status].icon;
8552
- return /* @__PURE__ */ jsxs("li", {
8553
- className: "group flex items-center gap-2 rounded-md px-2 py-1 text-sm text-white/70 hover:bg-white/5",
8554
- children: [
8555
- /* @__PURE__ */ jsx(StatusIcon, { className: cn("h-3.5 w-3.5 flex-shrink-0", statusConfig[todo.status].color) }),
8556
- /* @__PURE__ */ jsx("input", {
8557
- ref: (el) => {
8558
- itemRefs.current[index] = el;
8559
- },
8560
- value: todo.text,
8561
- onChange: (e) => handleTodoChange(index, e.target.value),
8562
- className: "flex-1 bg-transparent text-sm text-white/80 outline-none placeholder:text-white/30"
8563
- }),
8564
- /* @__PURE__ */ jsx("button", {
8565
- type: "button",
8566
- onClick: () => handleDelete(index),
8567
- className: "opacity-0 transition-opacity duration-150 group-hover:opacity-100",
8568
- "aria-label": "Delete task",
8569
- children: /* @__PURE__ */ jsx(Trash2, { className: "h-3.5 w-3.5 text-white/30 hover:text-red-400" })
8570
- })
8571
- ]
8572
- }, `todo-${index}`);
8573
- }), /* @__PURE__ */ jsxs("li", {
8574
- className: "flex items-center gap-2 px-2 py-1 text-sm text-white/40",
8575
- children: [/* @__PURE__ */ jsx(Plus, { className: "h-3.5 w-3.5" }), /* @__PURE__ */ jsx("input", {
8576
- value: draftValue,
8577
- onChange: (e) => setDraftValue(e.target.value),
8578
- onBlur: () => handleCreateFromDraft(draftValue),
8579
- onKeyDown: handleKeyDown,
8580
- placeholder: "Add a task...",
8581
- className: "flex-1 bg-transparent text-sm text-white/60 outline-none placeholder:text-white/30"
8582
- })]
8583
- })]
8584
- }), /* @__PURE__ */ jsxs("div", {
8585
- className: "mt-4 flex justify-end gap-2",
8586
- children: [/* @__PURE__ */ jsx("button", {
8587
- type: "button",
8588
- onClick: handleReject,
8589
- disabled: isCompleted,
8590
- className: cn("h-8 px-4 rounded-lg text-sm font-medium", "bg-white/5 text-white/70 hover:bg-white/10 hover:text-white", "border border-white/10", "transition-colors duration-200", "disabled:opacity-50 disabled:cursor-not-allowed"),
8591
- children: "Reject"
8592
- }), /* @__PURE__ */ jsx("button", {
8593
- type: "button",
8594
- onClick: handleApprove,
8595
- disabled: isCompleted || todos.length === 0,
8596
- className: cn("h-8 px-4 rounded-lg text-sm font-medium", "bg-green-600 text-white hover:bg-green-500", "transition-colors duration-200", "disabled:opacity-50 disabled:cursor-not-allowed"),
8597
- children: "Approve & Continue"
8598
- })]
8599
- })] })
8600
7674
  })
8601
7675
  ]
8602
- });
8603
- }
8604
- });
8605
-
8606
- //#endregion
8607
- //#region src/components/planning/PlanSection.tsx
8608
- /**
8609
- * PlanSection Component
8610
- *
8611
- * A standalone component for displaying the current plan/todos in the pill.
8612
- * Uses PlanProvider context to get the current todos state.
8613
- * Can be used independently of the tool UI components.
8614
- */
7676
+ })
7677
+ })] });
7678
+ };
8615
7679
 
8616
7680
  //#endregion
8617
7681
  //#region src/generated/inline-styles.ts
@@ -8621,7 +7685,7 @@ const PlanApprovalUI = makeAssistantToolUI({
8621
7685
  *
8622
7686
  * Contains the compiled CSS for the web component standalone build.
8623
7687
  */
8624
- const WEBMCP_STYLES = "/*! tailwindcss v4.1.17 | MIT License | https://tailwindcss.com */\n@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-space-y-reverse:0;--tw-border-style:solid;--tw-gradient-position:initial;--tw-gradient-from:#0000;--tw-gradient-via:#0000;--tw-gradient-to:#0000;--tw-gradient-stops:initial;--tw-gradient-via-stops:initial;--tw-gradient-from-position:0%;--tw-gradient-via-position:50%;--tw-gradient-to-position:100%;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-duration:initial;--tw-ease:initial;--tw-scale-x:1;--tw-scale-y:1;--tw-scale-z:1;--tool-border-angle:0deg}}}@layer theme{:root,:host{--font-sans:ui-sans-serif,system-ui,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol\",\"Noto Color Emoji\";--font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,\"Liberation Mono\",\"Courier New\",monospace;--color-red-200:oklch(88.5% .062 18.334);--color-red-300:oklch(80.8% .114 19.571);--color-red-400:oklch(70.4% .191 22.216);--color-red-500:oklch(63.7% .237 25.331);--color-red-600:oklch(57.7% .245 27.325);--color-red-950:oklch(25.8% .092 26.042);--color-amber-500:oklch(76.9% .188 70.08);--color-yellow-400:oklch(85.2% .199 91.936);--color-yellow-500:oklch(79.5% .184 86.047);--color-green-400:oklch(79.2% .209 151.711);--color-green-500:oklch(72.3% .219 149.579);--color-green-600:oklch(62.7% .194 149.214);--color-emerald-500:oklch(69.6% .17 162.48);--color-blue-400:oklch(70.7% .165 254.624);--color-blue-500:oklch(62.3% .214 259.815);--color-blue-600:oklch(54.6% .245 262.881);--color-indigo-500:oklch(58.5% .233 277.117);--color-purple-400:oklch(71.4% .203 305.504);--color-purple-600:oklch(55.8% .288 302.321);--color-slate-900:oklch(20.8% .042 265.755);--color-black:#000;--color-white:#fff;--spacing:.25rem;--container-md:28rem;--container-lg:32rem;--container-2xl:42rem;--container-3xl:48rem;--text-xs:.75rem;--text-xs--line-height:calc(1/.75);--text-sm:.875rem;--text-sm--line-height:calc(1.25/.875);--text-base:1rem;--text-base--line-height:calc(1.5/1);--text-lg:1.125rem;--text-lg--line-height:calc(1.75/1.125);--text-2xl:1.5rem;--text-2xl--line-height:calc(2/1.5);--text-3xl:1.875rem;--text-3xl--line-height:calc(2.25/1.875);--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--font-weight-extrabold:800;--tracking-tight:-.025em;--tracking-wide:.025em;--leading-snug:1.375;--leading-relaxed:1.625;--radius-xs:.125rem;--radius-2xl:1rem;--radius-3xl:1.5rem;--drop-shadow-xl:0 9px 7px #0000001a;--drop-shadow-2xl:0 25px 25px #00000026;--ease-out:cubic-bezier(0,0,.2,1);--ease-in-out:cubic-bezier(.4,0,.2,1);--animate-spin:spin 1s linear infinite;--animate-pulse:pulse 2s cubic-bezier(.4,0,.6,1)infinite;--blur-sm:8px;--blur-md:12px;--blur-xl:24px;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4,0,.2,1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif,system-ui,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol\",\"Noto Color Emoji\");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,\"Liberation Mono\",\"Courier New\",monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab, red, red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}:root{--radius:.75rem;--background:oklch(100% 0 0);--foreground:oklch(14.1% .005 285.823);--card:oklch(100% 0 0);--card-foreground:oklch(14.1% .005 285.823);--popover:oklch(100% 0 0);--popover-foreground:oklch(14.1% .005 285.823);--primary:oklch(21% .006 285.885);--primary-foreground:oklch(98.5% 0 0);--secondary:oklch(96.7% .001 286.375);--secondary-foreground:oklch(21% .006 285.885);--muted:oklch(96.7% .001 286.375);--muted-foreground:oklch(55.2% .016 285.938);--accent:oklch(96.7% .001 286.375);--accent-foreground:oklch(21% .006 285.885);--destructive:oklch(57.7% .245 27.325);--destructive-foreground:oklch(98.5% 0 0);--border:oklch(92% .004 286.32);--input:oklch(92% .004 286.32);--ring:oklch(70.5% .015 286.067)}.dark{--background:oklch(14.1% .005 285.823);--foreground:oklch(98.5% 0 0);--card:oklch(21% .006 285.885);--card-foreground:oklch(98.5% 0 0);--popover:oklch(21% .006 285.885);--popover-foreground:oklch(98.5% 0 0);--primary:oklch(92% .004 286.32);--primary-foreground:oklch(21% .006 285.885);--secondary:oklch(27.4% .006 286.033);--secondary-foreground:oklch(98.5% 0 0);--muted:oklch(27.4% .006 286.033);--muted-foreground:oklch(70.5% .015 286.067);--accent:oklch(27.4% .006 286.033);--accent-foreground:oklch(98.5% 0 0);--destructive:oklch(70.4% .191 22.216);--destructive-foreground:oklch(98.5% 0 0);--border:oklch(100% 0 0/.1);--input:oklch(100% 0 0/.15);--ring:oklch(55.2% .016 285.938)}*{border-color:var(--border);outline-color:var(--ring)}@supports (color:color-mix(in lab, red, red)){*{outline-color:color-mix(in oklch,var(--ring),transparent 50%)}}body{background-color:var(--background);color:var(--foreground)}}@layer components{.app-shell{z-index:0;background-color:var(--background);background-image:radial-gradient(80% 60% at -10% -10%,oklch(82% .15 270/.15),#0000),radial-gradient(60% 50% at 110% 10%,oklch(85% .1 220/.12),#0000),radial-gradient(50% 45% at 50% 120%,oklch(95% .02 250/.08),#0000);position:relative}.dark .app-shell{background-image:radial-gradient(80% 60% at -10% -10%,oklch(55% .14 270/.25),#0000),radial-gradient(60% 50% at 110% 15%,oklch(60% .12 220/.22),#0000),radial-gradient(50% 45% at 50% 120%,oklch(35% .04 250/.16),#0000)}.app-shell:before,.app-shell:after{content:\"\";pointer-events:none;filter:blur(32px);opacity:.6;z-index:-1;border-radius:9999px;position:absolute;inset:auto}.app-shell:before{background:radial-gradient(60% 60% at 40% 40%,oklch(80% .12 270/.3),#0000);width:260px;height:260px;top:-60px;left:-80px}.app-shell:after{background:radial-gradient(60% 60% at 60% 60%,oklch(84% .1 220/.25),#0000);width:300px;height:300px;bottom:-80px;right:-60px}.toolbar-surface{border-top:1px solid var(--border);background:linear-gradient(to right,var(--background),var(--background),var(--background))}@supports (color:color-mix(in lab, red, red)){.toolbar-surface{background:linear-gradient(to right,var(--background),color-mix(in oklch,var(--background),transparent 5%),var(--background))}}.toolbar-surface{-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px)}@supports ((-webkit-backdrop-filter:blur(12px)) or (backdrop-filter:blur(12px))){.toolbar-surface{background:var(--background)}@supports (color:color-mix(in lab, red, red)){.toolbar-surface{background:color-mix(in oklch,var(--background),transparent 20%)}}}.toolbar-surface-top{border-bottom:1px solid var(--border);background:linear-gradient(to right,var(--background),var(--background),var(--background))}@supports (color:color-mix(in lab, red, red)){.toolbar-surface-top{background:linear-gradient(to right,var(--background),color-mix(in oklch,var(--background),transparent 5%),var(--background))}}.toolbar-surface-top{-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px)}@supports ((-webkit-backdrop-filter:blur(12px)) or (backdrop-filter:blur(12px))){.toolbar-surface-top{background:var(--background)}@supports (color:color-mix(in lab, red, red)){.toolbar-surface-top{background:color-mix(in oklch,var(--background),transparent 20%)}}}.toolbar-inner{justify-content:space-between;align-items:center;padding:.5rem .75rem;display:flex}.toolbar-card{background:var(--card);justify-content:space-between;align-items:center;gap:.5rem;display:flex}@supports (color:color-mix(in lab, red, red)){.toolbar-card{background:color-mix(in oklch,var(--card),transparent 60%)}}.toolbar-card{border:1px solid var(--border);border-radius:.75rem;padding:.5rem .75rem}.toolbar-group{align-items:center;gap:.25rem;display:flex}.btn-toolbar-primary{background:linear-gradient(to right,var(--primary),var(--primary));border-radius:.75rem;align-items:center;gap:.5rem;height:2.25rem;padding:0 .75rem;display:flex}@supports (color:color-mix(in lab, red, red)){.btn-toolbar-primary{background:linear-gradient(to right,color-mix(in oklch,var(--primary),transparent 95%),color-mix(in oklch,var(--primary),transparent 90%))}}.btn-toolbar-primary{border:1px solid var(--primary)}@supports (color:color-mix(in lab, red, red)){.btn-toolbar-primary{border:1px solid color-mix(in oklch,var(--primary),transparent 80%)}}.btn-toolbar-primary{transition:all .2s}.btn-toolbar-primary:hover{background:linear-gradient(to right,var(--primary),var(--primary))}@supports (color:color-mix(in lab, red, red)){.btn-toolbar-primary:hover{background:linear-gradient(to right,color-mix(in oklch,var(--primary),transparent 90%),color-mix(in oklch,var(--primary),transparent 80%))}}.btn-toolbar-icon-primary{background:linear-gradient(to bottom right,var(--primary),var(--primary));border-radius:9999px;width:2rem;height:2rem;padding:0}@supports (color:color-mix(in lab, red, red)){.btn-toolbar-icon-primary{background:linear-gradient(to bottom right,color-mix(in oklch,var(--primary),transparent 90%),color-mix(in oklch,var(--primary),transparent 80%))}}.btn-toolbar-icon-primary{border:1px solid var(--primary)}@supports (color:color-mix(in lab, red, red)){.btn-toolbar-icon-primary{border:1px solid color-mix(in oklch,var(--primary),transparent 70%)}}.btn-toolbar-icon-primary{transition:all .2s;box-shadow:0 1px 2px #0000000d}.btn-toolbar-icon-primary:hover{background:linear-gradient(to bottom right,var(--primary),var(--primary))}@supports (color:color-mix(in lab, red, red)){.btn-toolbar-icon-primary:hover{background:linear-gradient(to bottom right,color-mix(in oklch,var(--primary),transparent 80%),color-mix(in oklch,var(--primary),transparent 70%))}}.btn-toolbar-icon-secondary{background:linear-gradient(to bottom right,var(--secondary),var(--secondary));border-radius:9999px;width:2rem;height:2rem;padding:0}@supports (color:color-mix(in lab, red, red)){.btn-toolbar-icon-secondary{background:linear-gradient(to bottom right,color-mix(in oklch,var(--secondary),transparent 90%),color-mix(in oklch,var(--secondary),transparent 80%))}}.btn-toolbar-icon-secondary{border:1px solid var(--secondary)}@supports (color:color-mix(in lab, red, red)){.btn-toolbar-icon-secondary{border:1px solid color-mix(in oklch,var(--secondary),transparent 70%)}}.btn-toolbar-icon-secondary{transition:all .2s;box-shadow:0 1px 2px #0000000d}.btn-toolbar-icon-secondary:hover{background:linear-gradient(to bottom right,var(--secondary),var(--secondary))}@supports (color:color-mix(in lab, red, red)){.btn-toolbar-icon-secondary:hover{background:linear-gradient(to bottom right,color-mix(in oklch,var(--secondary),transparent 80%),color-mix(in oklch,var(--secondary),transparent 70%))}}.badge-compact{height:1.25rem;padding:0 .5rem;font-size:10px}.badge-mini{height:1rem;padding:0 .375rem;font-size:10px}@keyframes shimmer-bg{0%{background-position:-1000px 0}to{background-position:1000px 0}}.shimmer{background:linear-gradient(90deg,#0000,#ffffff1a,#0000) 0 0/1000px 100%;animation:3s linear infinite shimmer-bg}.animate-shimmer{animation:2s linear infinite shimmer}@keyframes pulse-glow{0%,to{box-shadow:0 0 20px rgba(var(--primary),.1)}50%{box-shadow:0 0 30px rgba(var(--primary),.2)}}.pulse-glow{animation:2s ease-in-out infinite pulse-glow}@keyframes gradient-x{0%,to{background-position:0%}50%{background-position:100%}}.animate-gradient-x{animation:8s ease-in-out infinite gradient-x}.gradient-text{background:linear-gradient(to right,var(--foreground),var(--foreground))}@supports (color:color-mix(in lab, red, red)){.gradient-text{background:linear-gradient(to right,var(--foreground),color-mix(in oklch,var(--foreground),transparent 30%))}}.gradient-text{-webkit-text-fill-color:transparent;-webkit-background-clip:text;background-clip:text}.glass{background:var(--background)}@supports (color:color-mix(in lab, red, red)){.glass{background:color-mix(in oklch,var(--background),transparent 50%)}}.glass{-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);border:1px solid var(--border)}@supports (color:color-mix(in lab, red, red)){.glass{border:1px solid color-mix(in oklch,var(--border),transparent 50%)}}.tool-card{transition:all .3s ease-out}.tool-card:hover{transform:scale(1.02);box-shadow:0 10px 15px -3px #0000001a,0 4px 6px -2px #0000000d}.scrollbar-thin{scrollbar-width:thin}.scrollbar-thin::-webkit-scrollbar{width:6px;height:6px}.scrollbar-thin::-webkit-scrollbar-track{background:0 0}.scrollbar-thin::-webkit-scrollbar-thumb{background-color:var(--primary)}@supports (color:color-mix(in lab, red, red)){.scrollbar-thin::-webkit-scrollbar-thumb{background-color:color-mix(in oklch,var(--primary),transparent 80%)}}.scrollbar-thin::-webkit-scrollbar-thumb{border-radius:3px}.scrollbar-thin::-webkit-scrollbar-thumb:hover{background-color:var(--primary)}@supports (color:color-mix(in lab, red, red)){.scrollbar-thin::-webkit-scrollbar-thumb:hover{background-color:color-mix(in oklch,var(--primary),transparent 70%)}}}@layer utilities{.\\@container{container-type:inline-size}.pointer-events-none{pointer-events:none}.collapse{visibility:collapse}.visible{visibility:visible}.sr-only{clip-path:inset(50%);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.sticky{position:sticky}.-inset-\\[1px\\]{inset:-1px}.inset-0{inset:calc(var(--spacing)*0)}.-top-1{top:calc(var(--spacing)*-1)}.-top-12{top:calc(var(--spacing)*-12)}.top-0{top:calc(var(--spacing)*0)}.top-1\\.5{top:calc(var(--spacing)*1.5)}.top-1\\/2{top:50%}.top-2{top:calc(var(--spacing)*2)}.top-4{top:calc(var(--spacing)*4)}.top-\\[50\\%\\]{top:50%}.-right-1{right:calc(var(--spacing)*-1)}.right-0{right:calc(var(--spacing)*0)}.right-1\\.5{right:calc(var(--spacing)*1.5)}.right-2{right:calc(var(--spacing)*2)}.right-4{right:calc(var(--spacing)*4)}.right-6{right:calc(var(--spacing)*6)}.bottom-0{bottom:calc(var(--spacing)*0)}.bottom-4{bottom:calc(var(--spacing)*4)}.bottom-6{bottom:calc(var(--spacing)*6)}.left-0{left:calc(var(--spacing)*0)}.left-1\\/2,.left-\\[50\\%\\]{left:50%}.z-10{z-index:10}.z-40{z-index:40}.z-50{z-index:50}.col-span-full{grid-column:1/-1}.col-start-1{grid-column-start:1}.col-start-2{grid-column-start:2}.col-start-3{grid-column-start:3}.row-start-1{grid-row-start:1}.row-start-2{grid-row-start:2}.row-start-3{grid-row-start:3}.container{width:100%}@media (min-width:40rem){.container{max-width:40rem}}@media (min-width:48rem){.container{max-width:48rem}}@media (min-width:64rem){.container{max-width:64rem}}@media (min-width:80rem){.container{max-width:80rem}}@media (min-width:96rem){.container{max-width:96rem}}.m-0{margin:calc(var(--spacing)*0)}.mx-2{margin-inline:calc(var(--spacing)*2)}.mx-3{margin-inline:calc(var(--spacing)*3)}.mx-auto{margin-inline:auto}.my-1{margin-block:calc(var(--spacing)*1)}.my-2{margin-block:calc(var(--spacing)*2)}.my-3{margin-block:calc(var(--spacing)*3)}.my-auto{margin-block:auto}.-mt-1{margin-top:calc(var(--spacing)*-1)}.mt-0\\.5{margin-top:calc(var(--spacing)*.5)}.mt-1{margin-top:calc(var(--spacing)*1)}.mt-2{margin-top:calc(var(--spacing)*2)}.mt-3{margin-top:calc(var(--spacing)*3)}.mt-4{margin-top:calc(var(--spacing)*4)}.-mr-1{margin-right:calc(var(--spacing)*-1)}.mr-1\\.5{margin-right:calc(var(--spacing)*1.5)}.mr-2{margin-right:calc(var(--spacing)*2)}.mb-1{margin-bottom:calc(var(--spacing)*1)}.mb-2{margin-bottom:calc(var(--spacing)*2)}.mb-3{margin-bottom:calc(var(--spacing)*3)}.mb-4{margin-bottom:calc(var(--spacing)*4)}.-ml-1{margin-left:calc(var(--spacing)*-1)}.-ml-2{margin-left:calc(var(--spacing)*-2)}.ml-1{margin-left:calc(var(--spacing)*1)}.ml-2{margin-left:calc(var(--spacing)*2)}.ml-4{margin-left:calc(var(--spacing)*4)}.ml-auto{margin-left:auto}.line-clamp-2{-webkit-line-clamp:2;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.line-clamp-3{-webkit-line-clamp:3;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.block{display:block}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-flex{display:inline-flex}.table{display:table}.aspect-square{aspect-ratio:1}.size-2\\.5{width:calc(var(--spacing)*2.5);height:calc(var(--spacing)*2.5)}.size-3{width:calc(var(--spacing)*3);height:calc(var(--spacing)*3)}.size-3\\.5{width:calc(var(--spacing)*3.5);height:calc(var(--spacing)*3.5)}.size-4{width:calc(var(--spacing)*4);height:calc(var(--spacing)*4)}.size-5{width:calc(var(--spacing)*5);height:calc(var(--spacing)*5)}.size-6{width:calc(var(--spacing)*6);height:calc(var(--spacing)*6)}.size-8{width:calc(var(--spacing)*8);height:calc(var(--spacing)*8)}.size-9{width:calc(var(--spacing)*9);height:calc(var(--spacing)*9)}.size-10{width:calc(var(--spacing)*10);height:calc(var(--spacing)*10)}.size-14{width:calc(var(--spacing)*14);height:calc(var(--spacing)*14)}.size-\\[34px\\]{width:34px;height:34px}.size-full{width:100%;height:100%}.h-1\\.5{height:calc(var(--spacing)*1.5)}.h-2{height:calc(var(--spacing)*2)}.h-2\\.5{height:calc(var(--spacing)*2.5)}.h-3{height:calc(var(--spacing)*3)}.h-3\\.5{height:calc(var(--spacing)*3.5)}.h-4{height:calc(var(--spacing)*4)}.h-5{height:calc(var(--spacing)*5)}.h-6{height:calc(var(--spacing)*6)}.h-7{height:calc(var(--spacing)*7)}.h-8{height:calc(var(--spacing)*8)}.h-9{height:calc(var(--spacing)*9)}.h-10{height:calc(var(--spacing)*10)}.h-12{height:calc(var(--spacing)*12)}.h-\\[600px\\]{height:600px}.h-\\[calc\\(100\\%-60px\\)\\]{height:calc(100% - 60px)}.h-auto{height:auto}.h-full{height:100%}.max-h-24{max-height:calc(var(--spacing)*24)}.max-h-32{max-height:calc(var(--spacing)*32)}.max-h-40{max-height:calc(var(--spacing)*40)}.max-h-48{max-height:calc(var(--spacing)*48)}.max-h-60{max-height:calc(var(--spacing)*60)}.max-h-64{max-height:calc(var(--spacing)*64)}.max-h-\\[80dvh\\]{max-height:80dvh}.max-h-\\[80vh\\]{max-height:80vh}.min-h-8{min-height:calc(var(--spacing)*8)}.min-h-\\[60px\\]{min-height:60px}.min-h-screen{min-height:100vh}.w-1\\.5{width:calc(var(--spacing)*1.5)}.w-2{width:calc(var(--spacing)*2)}.w-2\\.5{width:calc(var(--spacing)*2.5)}.w-3{width:calc(var(--spacing)*3)}.w-3\\.5{width:calc(var(--spacing)*3.5)}.w-4{width:calc(var(--spacing)*4)}.w-5{width:calc(var(--spacing)*5)}.w-6{width:calc(var(--spacing)*6)}.w-7{width:calc(var(--spacing)*7)}.w-8{width:calc(var(--spacing)*8)}.w-12{width:calc(var(--spacing)*12)}.w-16{width:calc(var(--spacing)*16)}.w-\\[500px\\]{width:500px}.w-auto{width:auto}.w-fit{width:fit-content}.w-full{width:100%}.w-px{width:1px}.max-w-2xl{max-width:var(--container-2xl)}.max-w-7\\/8{max-width:87.5%}.max-w-16{max-width:calc(var(--spacing)*16)}.max-w-24{max-width:calc(var(--spacing)*24)}.max-w-\\[80\\%\\]{max-width:80%}.max-w-\\[80px\\]{max-width:80px}.max-w-\\[85\\%\\]{max-width:85%}.max-w-\\[100px\\]{max-width:100px}.max-w-\\[calc\\(100\\%-2rem\\)\\]{max-width:calc(100% - 2rem)}.max-w-\\[var\\(--thread-max-width\\)\\]{max-width:var(--thread-max-width)}.max-w-full{max-width:100%}.max-w-md{max-width:var(--container-md)}.min-w-0{min-width:calc(var(--spacing)*0)}.flex-1{flex:1}.flex-shrink-0,.shrink-0{flex-shrink:0}.flex-grow,.grow{flex-grow:1}.border-separate{border-collapse:separate}.border-spacing-0{--tw-border-spacing-x:calc(var(--spacing)*0);--tw-border-spacing-y:calc(var(--spacing)*0);border-spacing:var(--tw-border-spacing-x)var(--tw-border-spacing-y)}.origin-\\(--radix-tooltip-content-transform-origin\\){transform-origin:var(--radix-tooltip-content-transform-origin)}.-translate-x-1\\/2{--tw-translate-x:calc(calc(1/2*100%)*-1);translate:var(--tw-translate-x)var(--tw-translate-y)}.-translate-x-full{--tw-translate-x:-100%;translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-x-0{--tw-translate-x:calc(var(--spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-x-\\[-50\\%\\]{--tw-translate-x:-50%;translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-x-full{--tw-translate-x:100%;translate:var(--tw-translate-x)var(--tw-translate-y)}.-translate-y-1\\/2{--tw-translate-y:calc(calc(1/2*100%)*-1);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-y-\\[-50\\%\\]{--tw-translate-y:-50%;translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-y-\\[calc\\(-50\\%_-_2px\\)\\]{--tw-translate-y:calc(-50% - 2px);translate:var(--tw-translate-x)var(--tw-translate-y)}.-rotate-90{rotate:-90deg}.rotate-45{rotate:45deg}.rotate-180{rotate:180deg}.transform{transform:var(--tw-rotate-x,)var(--tw-rotate-y,)var(--tw-rotate-z,)var(--tw-skew-x,)var(--tw-skew-y,)}.animate-pulse{animation:var(--animate-pulse)}.animate-spin{animation:var(--animate-spin)}.cursor-grab{cursor:grab}.cursor-pointer{cursor:pointer}.touch-none{touch-action:none}.resize-none{resize:none}.scroll-m-20{scroll-margin:calc(var(--spacing)*20)}.list-decimal{list-style-type:decimal}.list-disc{list-style-type:disc}.auto-rows-auto{grid-auto-rows:auto}.grid-cols-\\[minmax\\(72px\\,1fr\\)_auto\\]{grid-template-columns:minmax(72px,1fr) auto}.grid-rows-\\[0fr\\]{grid-template-rows:0fr}.grid-rows-\\[1fr\\]{grid-template-rows:1fr}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.flex-row{flex-direction:row}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.items-end{align-items:flex-end}.items-start{align-items:flex-start}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.justify-start{justify-content:flex-start}.gap-0\\.5{gap:calc(var(--spacing)*.5)}.gap-1{gap:calc(var(--spacing)*1)}.gap-1\\.5{gap:calc(var(--spacing)*1.5)}.gap-2{gap:calc(var(--spacing)*2)}.gap-2\\.5{gap:calc(var(--spacing)*2.5)}.gap-3{gap:calc(var(--spacing)*3)}.gap-4{gap:calc(var(--spacing)*4)}:where(.space-y-1>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*1)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*1)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-2>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*2)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*2)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-4>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*4)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*4)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-6>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*6)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*6)*calc(1 - var(--tw-space-y-reverse)))}.gap-y-2{row-gap:calc(var(--spacing)*2)}.self-center{align-self:center}.self-end{align-self:flex-end}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-auto{overflow:auto}.overflow-clip{overflow:clip}.overflow-hidden{overflow:hidden}.overflow-visible{overflow:visible}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.overflow-y-scroll{overflow-y:scroll}.overscroll-contain{overscroll-behavior:contain}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:var(--radius-2xl)}.rounded-3xl{border-radius:var(--radius-3xl)}.rounded-\\[2px\\]{border-radius:2px}.rounded-\\[14px\\]{border-radius:14px}.rounded-\\[inherit\\]{border-radius:inherit}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius)}.rounded-md{border-radius:calc(var(--radius) - 2px)}.rounded-none{border-radius:0}.rounded-xl{border-radius:calc(var(--radius) + 4px)}.rounded-xs{border-radius:var(--radius-xs)}.\\!rounded-t-none{border-top-left-radius:0!important;border-top-right-radius:0!important}.rounded-t-3xl{border-top-left-radius:var(--radius-3xl);border-top-right-radius:var(--radius-3xl)}.rounded-t-lg{border-top-left-radius:var(--radius);border-top-right-radius:var(--radius)}.rounded-tr-sm{border-top-right-radius:calc(var(--radius) - 4px)}.rounded-b-lg{border-bottom-right-radius:var(--radius);border-bottom-left-radius:var(--radius)}.border{border-style:var(--tw-border-style);border-width:1px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-t-2{border-top-style:var(--tw-border-style);border-top-width:2px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-l{border-left-style:var(--tw-border-style);border-left-width:1px}.border-l-2{border-left-style:var(--tw-border-style);border-left-width:2px}.border-dashed{--tw-border-style:dashed;border-style:dashed}.border-dotted{--tw-border-style:dotted;border-style:dotted}.border-blue-400{border-color:var(--color-blue-400)}.border-blue-500\\/40{border-color:#3080ff66}@supports (color:color-mix(in lab, red, red)){.border-blue-500\\/40{border-color:color-mix(in oklab,var(--color-blue-500)40%,transparent)}}.border-blue-500\\/60{border-color:#3080ff99}@supports (color:color-mix(in lab, red, red)){.border-blue-500\\/60{border-color:color-mix(in oklab,var(--color-blue-500)60%,transparent)}}.border-border,.border-border\\/20{border-color:var(--border)}@supports (color:color-mix(in lab, red, red)){.border-border\\/20{border-color:color-mix(in oklab,var(--border)20%,transparent)}}.border-border\\/40{border-color:var(--border)}@supports (color:color-mix(in lab, red, red)){.border-border\\/40{border-color:color-mix(in oklab,var(--border)40%,transparent)}}.border-border\\/50{border-color:var(--border)}@supports (color:color-mix(in lab, red, red)){.border-border\\/50{border-color:color-mix(in oklab,var(--border)50%,transparent)}}.border-destructive,.border-destructive\\/60{border-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.border-destructive\\/60{border-color:color-mix(in oklab,var(--destructive)60%,transparent)}}.border-foreground\\/20{border-color:var(--foreground)}@supports (color:color-mix(in lab, red, red)){.border-foreground\\/20{border-color:color-mix(in oklab,var(--foreground)20%,transparent)}}.border-green-500\\/20{border-color:#00c75833}@supports (color:color-mix(in lab, red, red)){.border-green-500\\/20{border-color:color-mix(in oklab,var(--color-green-500)20%,transparent)}}.border-green-500\\/40{border-color:#00c75866}@supports (color:color-mix(in lab, red, red)){.border-green-500\\/40{border-color:color-mix(in oklab,var(--color-green-500)40%,transparent)}}.border-green-500\\/60{border-color:#00c75899}@supports (color:color-mix(in lab, red, red)){.border-green-500\\/60{border-color:color-mix(in oklab,var(--color-green-500)60%,transparent)}}.border-input{border-color:var(--input)}.border-muted-foreground\\/20{border-color:var(--muted-foreground)}@supports (color:color-mix(in lab, red, red)){.border-muted-foreground\\/20{border-color:color-mix(in oklab,var(--muted-foreground)20%,transparent)}}.border-primary\\/60{border-color:var(--primary)}@supports (color:color-mix(in lab, red, red)){.border-primary\\/60{border-color:color-mix(in oklab,var(--primary)60%,transparent)}}.border-red-500\\/20{border-color:#fb2c3633}@supports (color:color-mix(in lab, red, red)){.border-red-500\\/20{border-color:color-mix(in oklab,var(--color-red-500)20%,transparent)}}.border-red-500\\/40{border-color:#fb2c3666}@supports (color:color-mix(in lab, red, red)){.border-red-500\\/40{border-color:color-mix(in oklab,var(--color-red-500)40%,transparent)}}.border-red-500\\/50{border-color:#fb2c3680}@supports (color:color-mix(in lab, red, red)){.border-red-500\\/50{border-color:color-mix(in oklab,var(--color-red-500)50%,transparent)}}.border-red-500\\/60{border-color:#fb2c3699}@supports (color:color-mix(in lab, red, red)){.border-red-500\\/60{border-color:color-mix(in oklab,var(--color-red-500)60%,transparent)}}.border-transparent{border-color:#0000}.border-white\\/5{border-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){.border-white\\/5{border-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.border-white\\/10{border-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){.border-white\\/10{border-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.border-white\\/20{border-color:#fff3}@supports (color:color-mix(in lab, red, red)){.border-white\\/20{border-color:color-mix(in oklab,var(--color-white)20%,transparent)}}.border-t-transparent{border-top-color:#0000}.border-l-transparent{border-left-color:#0000}.bg-\\[color-mix\\(in_oklab\\,rgb\\(var\\(--background\\)\\)_20\\%\\,transparent\\)\\]{background-color:rgb(var(--background))}@supports (color:color-mix(in lab, red, red)){.bg-\\[color-mix\\(in_oklab\\,rgb\\(var\\(--background\\)\\)_20\\%\\,transparent\\)\\]{background-color:color-mix(in oklab,rgb(var(--background))20%,transparent)}}.bg-amber-500{background-color:var(--color-amber-500)}.bg-background,.bg-background\\/50{background-color:var(--background)}@supports (color:color-mix(in lab, red, red)){.bg-background\\/50{background-color:color-mix(in oklab,var(--background)50%,transparent)}}.bg-background\\/80{background-color:var(--background)}@supports (color:color-mix(in lab, red, red)){.bg-background\\/80{background-color:color-mix(in oklab,var(--background)80%,transparent)}}.bg-background\\/95{background-color:var(--background)}@supports (color:color-mix(in lab, red, red)){.bg-background\\/95{background-color:color-mix(in oklab,var(--background)95%,transparent)}}.bg-black{background-color:var(--color-black)}.bg-black\\/30{background-color:#0000004d}@supports (color:color-mix(in lab, red, red)){.bg-black\\/30{background-color:color-mix(in oklab,var(--color-black)30%,transparent)}}.bg-black\\/50{background-color:#00000080}@supports (color:color-mix(in lab, red, red)){.bg-black\\/50{background-color:color-mix(in oklab,var(--color-black)50%,transparent)}}.bg-blue-400{background-color:var(--color-blue-400)}.bg-blue-500{background-color:var(--color-blue-500)}.bg-blue-500\\/5{background-color:#3080ff0d}@supports (color:color-mix(in lab, red, red)){.bg-blue-500\\/5{background-color:color-mix(in oklab,var(--color-blue-500)5%,transparent)}}.bg-blue-500\\/10{background-color:#3080ff1a}@supports (color:color-mix(in lab, red, red)){.bg-blue-500\\/10{background-color:color-mix(in oklab,var(--color-blue-500)10%,transparent)}}.bg-border{background-color:var(--border)}.bg-destructive,.bg-destructive\\/10{background-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.bg-destructive\\/10{background-color:color-mix(in oklab,var(--destructive)10%,transparent)}}.bg-foreground{background-color:var(--foreground)}.bg-green-400{background-color:var(--color-green-400)}.bg-green-400\\/60{background-color:#05df7299}@supports (color:color-mix(in lab, red, red)){.bg-green-400\\/60{background-color:color-mix(in oklab,var(--color-green-400)60%,transparent)}}.bg-green-500{background-color:var(--color-green-500)}.bg-green-500\\/5{background-color:#00c7580d}@supports (color:color-mix(in lab, red, red)){.bg-green-500\\/5{background-color:color-mix(in oklab,var(--color-green-500)5%,transparent)}}.bg-green-500\\/10{background-color:#00c7581a}@supports (color:color-mix(in lab, red, red)){.bg-green-500\\/10{background-color:color-mix(in oklab,var(--color-green-500)10%,transparent)}}.bg-green-600{background-color:var(--color-green-600)}.bg-muted{background-color:var(--muted)}.bg-muted-foreground\\/15{background-color:var(--muted-foreground)}@supports (color:color-mix(in lab, red, red)){.bg-muted-foreground\\/15{background-color:color-mix(in oklab,var(--muted-foreground)15%,transparent)}}.bg-muted\\/5{background-color:var(--muted)}@supports (color:color-mix(in lab, red, red)){.bg-muted\\/5{background-color:color-mix(in oklab,var(--muted)5%,transparent)}}.bg-muted\\/30{background-color:var(--muted)}@supports (color:color-mix(in lab, red, red)){.bg-muted\\/30{background-color:color-mix(in oklab,var(--muted)30%,transparent)}}.bg-muted\\/50{background-color:var(--muted)}@supports (color:color-mix(in lab, red, red)){.bg-muted\\/50{background-color:color-mix(in oklab,var(--muted)50%,transparent)}}.bg-popover\\/95{background-color:var(--popover)}@supports (color:color-mix(in lab, red, red)){.bg-popover\\/95{background-color:color-mix(in oklab,var(--popover)95%,transparent)}}.bg-primary,.bg-primary\\/10{background-color:var(--primary)}@supports (color:color-mix(in lab, red, red)){.bg-primary\\/10{background-color:color-mix(in oklab,var(--primary)10%,transparent)}}.bg-purple-400{background-color:var(--color-purple-400)}.bg-red-500{background-color:var(--color-red-500)}.bg-red-500\\/5{background-color:#fb2c360d}@supports (color:color-mix(in lab, red, red)){.bg-red-500\\/5{background-color:color-mix(in oklab,var(--color-red-500)5%,transparent)}}.bg-red-500\\/10{background-color:#fb2c361a}@supports (color:color-mix(in lab, red, red)){.bg-red-500\\/10{background-color:color-mix(in oklab,var(--color-red-500)10%,transparent)}}.bg-red-500\\/20{background-color:#fb2c3633}@supports (color:color-mix(in lab, red, red)){.bg-red-500\\/20{background-color:color-mix(in oklab,var(--color-red-500)20%,transparent)}}.bg-red-950\\/20{background-color:#46080933}@supports (color:color-mix(in lab, red, red)){.bg-red-950\\/20{background-color:color-mix(in oklab,var(--color-red-950)20%,transparent)}}.bg-secondary{background-color:var(--secondary)}.bg-slate-900\\/95{background-color:#0f172bf2}@supports (color:color-mix(in lab, red, red)){.bg-slate-900\\/95{background-color:color-mix(in oklab,var(--color-slate-900)95%,transparent)}}.bg-transparent{background-color:#0000}.bg-white{background-color:var(--color-white)}.bg-white\\/5{background-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){.bg-white\\/5{background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.bg-white\\/10{background-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){.bg-white\\/10{background-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.bg-white\\/50{background-color:#ffffff80}@supports (color:color-mix(in lab, red, red)){.bg-white\\/50{background-color:color-mix(in oklab,var(--color-white)50%,transparent)}}.bg-yellow-500{background-color:var(--color-yellow-500)}.bg-yellow-500\\/20{background-color:#edb20033}@supports (color:color-mix(in lab, red, red)){.bg-yellow-500\\/20{background-color:color-mix(in oklab,var(--color-yellow-500)20%,transparent)}}.bg-gradient-to-br{--tw-gradient-position:to bottom right in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.from-indigo-500{--tw-gradient-from:var(--color-indigo-500);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-purple-600{--tw-gradient-to:var(--color-purple-600);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.fill-foreground{fill:var(--foreground)}.stroke-\\[1\\.5px\\]{stroke-width:1.5px}.object-contain{object-fit:contain}.object-cover{object-fit:cover}.p-0{padding:calc(var(--spacing)*0)}.p-1{padding:calc(var(--spacing)*1)}.p-1\\.5{padding:calc(var(--spacing)*1.5)}.p-2{padding:calc(var(--spacing)*2)}.p-3{padding:calc(var(--spacing)*3)}.p-4{padding:calc(var(--spacing)*4)}.p-6{padding:calc(var(--spacing)*6)}.p-8{padding:calc(var(--spacing)*8)}.p-px{padding:1px}.px-0{padding-inline:calc(var(--spacing)*0)}.px-1{padding-inline:calc(var(--spacing)*1)}.px-1\\.5{padding-inline:calc(var(--spacing)*1.5)}.px-2{padding-inline:calc(var(--spacing)*2)}.px-2\\.5{padding-inline:calc(var(--spacing)*2.5)}.px-3{padding-inline:calc(var(--spacing)*3)}.px-4{padding-inline:calc(var(--spacing)*4)}.px-5{padding-inline:calc(var(--spacing)*5)}.px-6{padding-inline:calc(var(--spacing)*6)}.px-8{padding-inline:calc(var(--spacing)*8)}.py-0\\.5{padding-block:calc(var(--spacing)*.5)}.py-1{padding-block:calc(var(--spacing)*1)}.py-1\\.5{padding-block:calc(var(--spacing)*1.5)}.py-2{padding-block:calc(var(--spacing)*2)}.py-2\\.5{padding-block:calc(var(--spacing)*2.5)}.py-3{padding-block:calc(var(--spacing)*3)}.py-4{padding-block:calc(var(--spacing)*4)}.pt-0\\.5{padding-top:calc(var(--spacing)*.5)}.pt-2{padding-top:calc(var(--spacing)*2)}.pr-1{padding-right:calc(var(--spacing)*1)}.pr-2{padding-right:calc(var(--spacing)*2)}.pb-1{padding-bottom:calc(var(--spacing)*1)}.pb-4{padding-bottom:calc(var(--spacing)*4)}.pl-3{padding-left:calc(var(--spacing)*3)}.pl-4{padding-left:calc(var(--spacing)*4)}.text-center{text-align:center}.text-left{text-align:left}.font-mono{font-family:var(--font-mono)}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\\[10px\\]{font-size:10px}.text-\\[11px\\]{font-size:11px}.text-\\[13px\\]{font-size:13px}.text-\\[15px\\]{font-size:15px}.text-\\[17px\\]{font-size:17px}.text-\\[19px\\]{font-size:19px}.text-\\[21px\\]{font-size:21px}.text-\\[25px\\]{font-size:25px}.leading-7{--tw-leading:calc(var(--spacing)*7);line-height:calc(var(--spacing)*7)}.leading-none{--tw-leading:1;line-height:1}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.leading-snug{--tw-leading:var(--leading-snug);line-height:var(--leading-snug)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-extrabold{--tw-font-weight:var(--font-weight-extrabold);font-weight:var(--font-weight-extrabold)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-tight{--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.tracking-wide{--tw-tracking:var(--tracking-wide);letter-spacing:var(--tracking-wide)}.text-balance{text-wrap:balance}.break-words{overflow-wrap:break-word}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.text-background{color:var(--background)}.text-blue-400{color:var(--color-blue-400)}.text-blue-600{color:var(--color-blue-600)}.text-destructive{color:var(--destructive)}.text-destructive-foreground{color:var(--destructive-foreground)}.text-emerald-500{color:var(--color-emerald-500)}.text-foreground,.text-foreground\\/80{color:var(--foreground)}@supports (color:color-mix(in lab, red, red)){.text-foreground\\/80{color:color-mix(in oklab,var(--foreground)80%,transparent)}}.text-green-400{color:var(--color-green-400)}.text-green-400\\/60{color:#05df7299}@supports (color:color-mix(in lab, red, red)){.text-green-400\\/60{color:color-mix(in oklab,var(--color-green-400)60%,transparent)}}.text-green-600{color:var(--color-green-600)}.text-muted-foreground,.text-muted-foreground\\/65{color:var(--muted-foreground)}@supports (color:color-mix(in lab, red, red)){.text-muted-foreground\\/65{color:color-mix(in oklab,var(--muted-foreground)65%,transparent)}}.text-muted-foreground\\/70{color:var(--muted-foreground)}@supports (color:color-mix(in lab, red, red)){.text-muted-foreground\\/70{color:color-mix(in oklab,var(--muted-foreground)70%,transparent)}}.text-popover-foreground{color:var(--popover-foreground)}.text-primary{color:var(--primary)}.text-primary-foreground{color:var(--primary-foreground)}.text-purple-400{color:var(--color-purple-400)}.text-red-300{color:var(--color-red-300)}.text-red-400{color:var(--color-red-400)}.text-red-600{color:var(--color-red-600)}.text-secondary-foreground{color:var(--secondary-foreground)}.text-white{color:var(--color-white)}.text-white\\/20{color:#fff3}@supports (color:color-mix(in lab, red, red)){.text-white\\/20{color:color-mix(in oklab,var(--color-white)20%,transparent)}}.text-white\\/30{color:#ffffff4d}@supports (color:color-mix(in lab, red, red)){.text-white\\/30{color:color-mix(in oklab,var(--color-white)30%,transparent)}}.text-white\\/40{color:#fff6}@supports (color:color-mix(in lab, red, red)){.text-white\\/40{color:color-mix(in oklab,var(--color-white)40%,transparent)}}.text-white\\/50{color:#ffffff80}@supports (color:color-mix(in lab, red, red)){.text-white\\/50{color:color-mix(in oklab,var(--color-white)50%,transparent)}}.text-white\\/60{color:#fff9}@supports (color:color-mix(in lab, red, red)){.text-white\\/60{color:color-mix(in oklab,var(--color-white)60%,transparent)}}.text-white\\/70{color:#ffffffb3}@supports (color:color-mix(in lab, red, red)){.text-white\\/70{color:color-mix(in oklab,var(--color-white)70%,transparent)}}.text-white\\/80{color:#fffc}@supports (color:color-mix(in lab, red, red)){.text-white\\/80{color:color-mix(in oklab,var(--color-white)80%,transparent)}}.text-white\\/90{color:#ffffffe6}@supports (color:color-mix(in lab, red, red)){.text-white\\/90{color:color-mix(in oklab,var(--color-white)90%,transparent)}}.text-yellow-400{color:var(--color-yellow-400)}.lowercase{text-transform:lowercase}.normal-case{text-transform:none}.uppercase{text-transform:uppercase}.italic{font-style:italic}.tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,)var(--tw-slashed-zero,)var(--tw-numeric-figure,)var(--tw-numeric-spacing,)var(--tw-numeric-fraction,)}.line-through{text-decoration-line:line-through}.underline{text-decoration-line:underline}.underline-offset-4{text-underline-offset:4px}.opacity-0{opacity:0}.opacity-70{opacity:.7}.opacity-100{opacity:1}.shadow-2xl{--tw-shadow:0 25px 50px -12px var(--tw-shadow-color,#00000040);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\\[0_0_12px_rgba\\(34\\,197\\,94\\,0\\.3\\)\\]{--tw-shadow:0 0 12px var(--tw-shadow-color,#22c55e4d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\\[0_0_12px_rgba\\(59\\,130\\,246\\,0\\.3\\)\\]{--tw-shadow:0 0 12px var(--tw-shadow-color,#3b82f64d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\\[0_0_12px_rgba\\(239\\,68\\,68\\,0\\.3\\)\\]{--tw-shadow:0 0 12px var(--tw-shadow-color,#ef44444d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\\[0_12px_24px_-16px_rgba\\(37\\,99\\,235\\,0\\.55\\)\\]{--tw-shadow:0 12px 24px -16px var(--tw-shadow-color,#2563eb8c);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\\[0_12px_24px_-18px_rgba\\(220\\,38\\,38\\,0\\.55\\)\\]{--tw-shadow:0 12px 24px -18px var(--tw-shadow-color,#dc26268c);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a),0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-sm{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-xl{--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000001a),0 8px 10px -6px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-xs{--tw-shadow:0 1px 2px 0 var(--tw-shadow-color,#0000000d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring,.ring-1{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.\\[box-shadow\\:inset_0_1px_2px_0_rgba\\(255\\,255\\,255\\,0\\.15\\)\\]{box-shadow:inset 0 1px 2px #ffffff26}.shadow-black\\/20{--tw-shadow-color:#0003}@supports (color:color-mix(in lab, red, red)){.shadow-black\\/20{--tw-shadow-color:color-mix(in oklab,color-mix(in oklab,var(--color-black)20%,transparent)var(--tw-shadow-alpha),transparent)}}.ring-yellow-500\\/50{--tw-ring-color:#edb20080}@supports (color:color-mix(in lab, red, red)){.ring-yellow-500\\/50{--tw-ring-color:color-mix(in oklab,var(--color-yellow-500)50%,transparent)}}.ring-offset-background{--tw-ring-offset-color:var(--background)}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.drop-shadow-xl{--tw-drop-shadow-size:drop-shadow(0 9px 7px var(--tw-drop-shadow-color,#0000001a));--tw-drop-shadow:drop-shadow(var(--drop-shadow-xl));filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.backdrop-blur-md{--tw-backdrop-blur:blur(var(--blur-md));-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.backdrop-blur-sm{--tw-backdrop-blur:blur(var(--blur-sm));-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.backdrop-blur-xl{--tw-backdrop-blur:blur(var(--blur-xl));-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\\[color\\,box-shadow\\]{transition-property:color,box-shadow;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\\[grid-template-rows\\]{transition-property:grid-template-rows;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-shadow{transition-property:box-shadow;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.duration-150{--tw-duration:.15s;transition-duration:.15s}.duration-200{--tw-duration:.2s;transition-duration:.2s}.duration-300{--tw-duration:.3s;transition-duration:.3s}.ease-in-out{--tw-ease:var(--ease-in-out);transition-timing-function:var(--ease-in-out)}.ease-out{--tw-ease:var(--ease-out);transition-timing-function:var(--ease-out)}.will-change-transform{will-change:transform}.outline-none{--tw-outline-style:none;outline-style:none}.select-none{-webkit-user-select:none;user-select:none}@media (hover:hover){.group-hover\\:opacity-100:is(:where(.group):hover *){opacity:1}}.placeholder\\:text-muted-foreground::placeholder,.placeholder\\:text-muted-foreground\\/70::placeholder{color:var(--muted-foreground)}@supports (color:color-mix(in lab, red, red)){.placeholder\\:text-muted-foreground\\/70::placeholder{color:color-mix(in oklab,var(--muted-foreground)70%,transparent)}}.placeholder\\:text-white\\/30::placeholder{color:#ffffff4d}@supports (color:color-mix(in lab, red, red)){.placeholder\\:text-white\\/30::placeholder{color:color-mix(in oklab,var(--color-white)30%,transparent)}}.placeholder\\:text-white\\/40::placeholder{color:#fff6}@supports (color:color-mix(in lab, red, red)){.placeholder\\:text-white\\/40::placeholder{color:color-mix(in oklab,var(--color-white)40%,transparent)}}.first\\:mt-0:first-child{margin-top:calc(var(--spacing)*0)}.first\\:mt-3:first-child{margin-top:calc(var(--spacing)*3)}.first\\:mt-4:first-child{margin-top:calc(var(--spacing)*4)}.first\\:rounded-tl-lg:first-child{border-top-left-radius:var(--radius)}.first\\:border-t:first-child{border-top-style:var(--tw-border-style);border-top-width:1px}.last\\:mb-0:last-child{margin-bottom:calc(var(--spacing)*0)}.last\\:mb-5:last-child{margin-bottom:calc(var(--spacing)*5)}.last\\:mb-24:last-child{margin-bottom:calc(var(--spacing)*24)}.last\\:rounded-tr-lg:last-child{border-top-right-radius:var(--radius)}.last\\:border-r:last-child{border-right-style:var(--tw-border-style);border-right-width:1px}.empty\\:hidden:empty{display:none}.focus-within\\:border-ring\\/50:focus-within{border-color:var(--ring)}@supports (color:color-mix(in lab, red, red)){.focus-within\\:border-ring\\/50:focus-within{border-color:color-mix(in oklab,var(--ring)50%,transparent)}}.focus-within\\:border-white\\/20:focus-within{border-color:#fff3}@supports (color:color-mix(in lab, red, red)){.focus-within\\:border-white\\/20:focus-within{border-color:color-mix(in oklab,var(--color-white)20%,transparent)}}.focus-within\\:bg-white\\/15:focus-within{background-color:#ffffff26}@supports (color:color-mix(in lab, red, red)){.focus-within\\:bg-white\\/15:focus-within{background-color:color-mix(in oklab,var(--color-white)15%,transparent)}}.focus-within\\:shadow-2xl:focus-within{--tw-shadow:0 25px 50px -12px var(--tw-shadow-color,#00000040);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus-within\\:shadow-md:focus-within{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a),0 2px 4px -2px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus-within\\:ring-2:focus-within{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus-within\\:shadow-black\\/30:focus-within{--tw-shadow-color:#0000004d}@supports (color:color-mix(in lab, red, red)){.focus-within\\:shadow-black\\/30:focus-within{--tw-shadow-color:color-mix(in oklab,color-mix(in oklab,var(--color-black)30%,transparent)var(--tw-shadow-alpha),transparent)}}.focus-within\\:ring-ring:focus-within{--tw-ring-color:var(--ring)}.focus-within\\:ring-offset-2:focus-within{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}@media (hover:hover){.hover\\:scale-105:hover{--tw-scale-x:105%;--tw-scale-y:105%;--tw-scale-z:105%;scale:var(--tw-scale-x)var(--tw-scale-y)}.hover\\:border-accent:hover{border-color:var(--accent)}.hover\\:border-border\\/60:hover{border-color:var(--border)}@supports (color:color-mix(in lab, red, red)){.hover\\:border-border\\/60:hover{border-color:color-mix(in oklab,var(--border)60%,transparent)}}.hover\\:border-white\\/15:hover{border-color:#ffffff26}@supports (color:color-mix(in lab, red, red)){.hover\\:border-white\\/15:hover{border-color:color-mix(in oklab,var(--color-white)15%,transparent)}}.hover\\:\\!bg-white:hover{background-color:var(--color-white)!important}.hover\\:bg-accent:hover,.hover\\:bg-accent\\/50:hover{background-color:var(--accent)}@supports (color:color-mix(in lab, red, red)){.hover\\:bg-accent\\/50:hover{background-color:color-mix(in oklab,var(--accent)50%,transparent)}}.hover\\:bg-destructive\\/10:hover{background-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.hover\\:bg-destructive\\/10:hover{background-color:color-mix(in oklab,var(--destructive)10%,transparent)}}.hover\\:bg-destructive\\/80:hover{background-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.hover\\:bg-destructive\\/80:hover{background-color:color-mix(in oklab,var(--destructive)80%,transparent)}}.hover\\:bg-destructive\\/90:hover{background-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.hover\\:bg-destructive\\/90:hover{background-color:color-mix(in oklab,var(--destructive)90%,transparent)}}.hover\\:bg-green-500:hover{background-color:var(--color-green-500)}.hover\\:bg-muted-foreground\\/15:hover{background-color:var(--muted-foreground)}@supports (color:color-mix(in lab, red, red)){.hover\\:bg-muted-foreground\\/15:hover{background-color:color-mix(in oklab,var(--muted-foreground)15%,transparent)}}.hover\\:bg-primary\\/80:hover{background-color:var(--primary)}@supports (color:color-mix(in lab, red, red)){.hover\\:bg-primary\\/80:hover{background-color:color-mix(in oklab,var(--primary)80%,transparent)}}.hover\\:bg-primary\\/90:hover{background-color:var(--primary)}@supports (color:color-mix(in lab, red, red)){.hover\\:bg-primary\\/90:hover{background-color:color-mix(in oklab,var(--primary)90%,transparent)}}.hover\\:bg-red-500\\/30:hover{background-color:#fb2c364d}@supports (color:color-mix(in lab, red, red)){.hover\\:bg-red-500\\/30:hover{background-color:color-mix(in oklab,var(--color-red-500)30%,transparent)}}.hover\\:bg-red-600:hover{background-color:var(--color-red-600)}.hover\\:bg-secondary\\/80:hover{background-color:var(--secondary)}@supports (color:color-mix(in lab, red, red)){.hover\\:bg-secondary\\/80:hover{background-color:color-mix(in oklab,var(--secondary)80%,transparent)}}.hover\\:bg-transparent:hover{background-color:#0000}.hover\\:bg-white\\/5:hover{background-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){.hover\\:bg-white\\/5:hover{background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.hover\\:bg-white\\/10:hover{background-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){.hover\\:bg-white\\/10:hover{background-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.hover\\:bg-white\\/20:hover{background-color:#fff3}@supports (color:color-mix(in lab, red, red)){.hover\\:bg-white\\/20:hover{background-color:color-mix(in oklab,var(--color-white)20%,transparent)}}.hover\\:text-accent-foreground:hover{color:var(--accent-foreground)}.hover\\:text-destructive:hover{color:var(--destructive)}.hover\\:text-foreground:hover{color:var(--foreground)}.hover\\:text-primary\\/80:hover{color:var(--primary)}@supports (color:color-mix(in lab, red, red)){.hover\\:text-primary\\/80:hover{color:color-mix(in oklab,var(--primary)80%,transparent)}}.hover\\:text-red-200:hover{color:var(--color-red-200)}.hover\\:text-red-300:hover{color:var(--color-red-300)}.hover\\:text-red-400:hover{color:var(--color-red-400)}.hover\\:text-white:hover{color:var(--color-white)}.hover\\:text-white\\/60:hover{color:#fff9}@supports (color:color-mix(in lab, red, red)){.hover\\:text-white\\/60:hover{color:color-mix(in oklab,var(--color-white)60%,transparent)}}.hover\\:text-white\\/70:hover{color:#ffffffb3}@supports (color:color-mix(in lab, red, red)){.hover\\:text-white\\/70:hover{color:color-mix(in oklab,var(--color-white)70%,transparent)}}.hover\\:underline:hover{text-decoration-line:underline}.hover\\:opacity-75:hover{opacity:.75}.hover\\:opacity-100:hover{opacity:1}.hover\\:shadow-2xl:hover{--tw-shadow:0 25px 50px -12px var(--tw-shadow-color,#00000040);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hover\\:shadow-\\[0_14px_24px_-14px_rgba\\(37\\,99\\,235\\,0\\.6\\)\\]:hover{--tw-shadow:0 14px 24px -14px var(--tw-shadow-color,#2563eb99);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hover\\:shadow-\\[0_14px_24px_-16px_rgba\\(220\\,38\\,38\\,0\\.6\\)\\]:hover{--tw-shadow:0 14px 24px -16px var(--tw-shadow-color,#dc262699);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hover\\:drop-shadow-2xl:hover{--tw-drop-shadow-size:drop-shadow(0 25px 25px var(--tw-drop-shadow-color,#00000026));--tw-drop-shadow:drop-shadow(var(--drop-shadow-2xl));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,)}}.focus\\:ring-2:focus{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus\\:ring-ring:focus{--tw-ring-color:var(--ring)}.focus\\:ring-offset-2:focus{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.focus\\:outline-hidden:focus{--tw-outline-style:none;outline-style:none}@media (forced-colors:active){.focus\\:outline-hidden:focus{outline-offset:2px;outline:2px solid #0000}}.focus\\:outline-none:focus{--tw-outline-style:none;outline-style:none}.focus-visible\\:border-ring:focus-visible{border-color:var(--ring)}.focus-visible\\:ring-0:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(0px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus-visible\\:ring-1:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus-visible\\:ring-2:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus-visible\\:ring-\\[3px\\]:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(3px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus-visible\\:ring-destructive\\/20:focus-visible{--tw-ring-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.focus-visible\\:ring-destructive\\/20:focus-visible{--tw-ring-color:color-mix(in oklab,var(--destructive)20%,transparent)}}.focus-visible\\:ring-destructive\\/40:focus-visible{--tw-ring-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.focus-visible\\:ring-destructive\\/40:focus-visible{--tw-ring-color:color-mix(in oklab,var(--destructive)40%,transparent)}}.focus-visible\\:ring-primary\\/40:focus-visible{--tw-ring-color:var(--primary)}@supports (color:color-mix(in lab, red, red)){.focus-visible\\:ring-primary\\/40:focus-visible{--tw-ring-color:color-mix(in oklab,var(--primary)40%,transparent)}}.focus-visible\\:ring-ring:focus-visible,.focus-visible\\:ring-ring\\/50:focus-visible{--tw-ring-color:var(--ring)}@supports (color:color-mix(in lab, red, red)){.focus-visible\\:ring-ring\\/50:focus-visible{--tw-ring-color:color-mix(in oklab,var(--ring)50%,transparent)}}.focus-visible\\:ring-white\\/30:focus-visible{--tw-ring-color:#ffffff4d}@supports (color:color-mix(in lab, red, red)){.focus-visible\\:ring-white\\/30:focus-visible{--tw-ring-color:color-mix(in oklab,var(--color-white)30%,transparent)}}.focus-visible\\:ring-offset-2:focus-visible{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.focus-visible\\:ring-offset-transparent:focus-visible{--tw-ring-offset-color:transparent}.focus-visible\\:outline-1:focus-visible{outline-style:var(--tw-outline-style);outline-width:1px}.focus-visible\\:outline-none:focus-visible{--tw-outline-style:none;outline-style:none}.active\\:scale-95:active{--tw-scale-x:95%;--tw-scale-y:95%;--tw-scale-z:95%;scale:var(--tw-scale-x)var(--tw-scale-y)}.active\\:cursor-grabbing:active{cursor:grabbing}.disabled\\:pointer-events-none:disabled{pointer-events:none}.disabled\\:invisible:disabled{visibility:hidden}.disabled\\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\\:opacity-50:disabled{opacity:.5}.has-\\[\\>svg\\]\\:px-2\\.5:has(>svg){padding-inline:calc(var(--spacing)*2.5)}.has-\\[\\>svg\\]\\:px-3:has(>svg){padding-inline:calc(var(--spacing)*3)}.has-\\[\\>svg\\]\\:px-4:has(>svg){padding-inline:calc(var(--spacing)*4)}.aria-invalid\\:border-destructive[aria-invalid=true]{border-color:var(--destructive)}.aria-invalid\\:ring-destructive\\/20[aria-invalid=true]{--tw-ring-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.aria-invalid\\:ring-destructive\\/20[aria-invalid=true]{--tw-ring-color:color-mix(in oklab,var(--destructive)20%,transparent)}}.data-floating\\:absolute[data-floating]{position:absolute}.data-floating\\:rounded-md[data-floating]{border-radius:calc(var(--radius) - 2px)}.data-floating\\:border[data-floating]{border-style:var(--tw-border-style);border-width:1px}.data-floating\\:bg-background[data-floating]{background-color:var(--background)}.data-floating\\:p-1[data-floating]{padding:calc(var(--spacing)*1)}.data-floating\\:shadow-sm[data-floating]{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.data-\\[orientation\\=horizontal\\]\\:h-px[data-orientation=horizontal]{height:1px}.data-\\[orientation\\=horizontal\\]\\:w-full[data-orientation=horizontal]{width:100%}.data-\\[orientation\\=vertical\\]\\:h-full[data-orientation=vertical]{height:100%}.data-\\[orientation\\=vertical\\]\\:w-px[data-orientation=vertical]{width:1px}.data-\\[state\\=closed\\]\\:scale-0[data-state=closed]{--tw-scale-x:0%;--tw-scale-y:0%;--tw-scale-z:0%;scale:var(--tw-scale-x)var(--tw-scale-y)}.data-\\[state\\=closed\\]\\:scale-100[data-state=closed]{--tw-scale-x:100%;--tw-scale-y:100%;--tw-scale-z:100%;scale:var(--tw-scale-x)var(--tw-scale-y)}.data-\\[state\\=closed\\]\\:-rotate-90[data-state=closed]{rotate:-90deg}.data-\\[state\\=closed\\]\\:rotate-0[data-state=closed]{rotate:none}.data-\\[state\\=open\\]\\:scale-0[data-state=open]{--tw-scale-x:0%;--tw-scale-y:0%;--tw-scale-z:0%;scale:var(--tw-scale-x)var(--tw-scale-y)}.data-\\[state\\=open\\]\\:scale-100[data-state=open]{--tw-scale-x:100%;--tw-scale-y:100%;--tw-scale-z:100%;scale:var(--tw-scale-x)var(--tw-scale-y)}.data-\\[state\\=open\\]\\:rotate-0[data-state=open]{rotate:none}.data-\\[state\\=open\\]\\:rotate-90[data-state=open]{rotate:90deg}.data-\\[state\\=open\\]\\:bg-accent[data-state=open]{background-color:var(--accent)}.data-\\[state\\=open\\]\\:text-muted-foreground[data-state=open]{color:var(--muted-foreground)}@media (min-width:40rem){.sm\\:max-w-3xl{max-width:var(--container-3xl)}.sm\\:max-w-lg{max-width:var(--container-lg)}.sm\\:max-w-md{max-width:var(--container-md)}.sm\\:flex-row{flex-direction:row}.sm\\:justify-end{justify-content:flex-end}.sm\\:text-left{text-align:left}}@media (min-width:48rem){.md\\:pb-6{padding-bottom:calc(var(--spacing)*6)}}@container (min-width:28rem){.\\@md\\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.\\@md\\:flex-col{flex-direction:column}}.dark\\:border-input:is(.dark *){border-color:var(--input)}.dark\\:border-muted-foreground\\/15:is(.dark *){border-color:var(--muted-foreground)}@supports (color:color-mix(in lab, red, red)){.dark\\:border-muted-foreground\\/15:is(.dark *){border-color:color-mix(in oklab,var(--muted-foreground)15%,transparent)}}.dark\\:bg-background:is(.dark *){background-color:var(--background)}.dark\\:bg-destructive\\/5:is(.dark *){background-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.dark\\:bg-destructive\\/5:is(.dark *){background-color:color-mix(in oklab,var(--destructive)5%,transparent)}}.dark\\:bg-destructive\\/60:is(.dark *){background-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.dark\\:bg-destructive\\/60:is(.dark *){background-color:color-mix(in oklab,var(--destructive)60%,transparent)}}.dark\\:bg-input\\/30:is(.dark *){background-color:var(--input)}@supports (color:color-mix(in lab, red, red)){.dark\\:bg-input\\/30:is(.dark *){background-color:color-mix(in oklab,var(--input)30%,transparent)}}.dark\\:bg-muted-foreground\\/20:is(.dark *){background-color:var(--muted-foreground)}@supports (color:color-mix(in lab, red, red)){.dark\\:bg-muted-foreground\\/20:is(.dark *){background-color:color-mix(in oklab,var(--muted-foreground)20%,transparent)}}.dark\\:stroke-\\[2\\.5px\\]:is(.dark *){stroke-width:2.5px}.dark\\:text-green-400:is(.dark *){color:var(--color-green-400)}.dark\\:text-red-200:is(.dark *){color:var(--color-red-200)}@media (hover:hover){.dark\\:hover\\:bg-accent:is(.dark *):hover,.dark\\:hover\\:bg-accent\\/50:is(.dark *):hover{background-color:var(--accent)}@supports (color:color-mix(in lab, red, red)){.dark\\:hover\\:bg-accent\\/50:is(.dark *):hover{background-color:color-mix(in oklab,var(--accent)50%,transparent)}}.dark\\:hover\\:bg-accent\\/60:is(.dark *):hover{background-color:var(--accent)}@supports (color:color-mix(in lab, red, red)){.dark\\:hover\\:bg-accent\\/60:is(.dark *):hover{background-color:color-mix(in oklab,var(--accent)60%,transparent)}}.dark\\:hover\\:bg-input\\/50:is(.dark *):hover{background-color:var(--input)}@supports (color:color-mix(in lab, red, red)){.dark\\:hover\\:bg-input\\/50:is(.dark *):hover{background-color:color-mix(in oklab,var(--input)50%,transparent)}}.dark\\:hover\\:bg-muted-foreground\\/30:is(.dark *):hover{background-color:var(--muted-foreground)}@supports (color:color-mix(in lab, red, red)){.dark\\:hover\\:bg-muted-foreground\\/30:is(.dark *):hover{background-color:color-mix(in oklab,var(--muted-foreground)30%,transparent)}}}.dark\\:focus-visible\\:ring-destructive\\/40:is(.dark *):focus-visible{--tw-ring-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.dark\\:focus-visible\\:ring-destructive\\/40:is(.dark *):focus-visible{--tw-ring-color:color-mix(in oklab,var(--destructive)40%,transparent)}}.dark\\:aria-invalid\\:ring-destructive\\/40:is(.dark *)[aria-invalid=true]{--tw-ring-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.dark\\:aria-invalid\\:ring-destructive\\/40:is(.dark *)[aria-invalid=true]{--tw-ring-color:color-mix(in oklab,var(--destructive)40%,transparent)}}.\\[\\&_svg\\]\\:pointer-events-none svg{pointer-events:none}.\\[\\&_svg\\]\\:shrink-0 svg{flex-shrink:0}.\\[\\&_svg\\]\\:text-background svg{color:var(--background)}.\\[\\&_svg\\]\\:text-black svg{color:var(--color-black)}@media (hover:hover){.hover\\:\\[\\&_svg\\]\\:text-destructive:hover svg{color:var(--destructive)}}.\\[\\&_svg\\:not\\(\\[class\\*\\=\\'size-\\'\\]\\)\\]\\:size-4 svg:not([class*=size-]){width:calc(var(--spacing)*4);height:calc(var(--spacing)*4)}.\\[\\&\\:last-child\\>td\\:first-child\\]\\:rounded-bl-lg:last-child>td:first-child{border-bottom-left-radius:var(--radius)}.\\[\\&\\:last-child\\>td\\:last-child\\]\\:rounded-br-lg:last-child>td:last-child{border-bottom-right-radius:var(--radius)}.\\[\\&\\:nth-child\\(n\\+3\\)\\]\\:hidden:nth-child(n+3){display:none}@container (min-width:28rem){.\\@md\\:\\[\\&\\:nth-child\\(n\\+3\\)\\]\\:block:nth-child(n+3){display:block}}.\\[\\&\\:where\\(\\>\\*\\)\\]\\:col-start-2:where(){grid-column-start:2}.only\\:\\[\\&\\>\\#attachment-tile\\]\\:size-24:only-child>#attachment-tile{width:calc(var(--spacing)*24);height:calc(var(--spacing)*24)}.\\[\\&\\>\\.aui-thread-root\\]\\:bg-inherit>.aui-thread-root{background-color:inherit}.\\[\\&\\>a\\]\\:text-xs>a{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.\\[\\&\\>a\\]\\:no-underline>a{text-decoration-line:none}.\\[\\&\\>button\\]\\:rounded-full>button{border-radius:3.40282e38px}.\\[\\&\\>button\\]\\:bg-foreground\\/60>button{background-color:var(--foreground)}@supports (color:color-mix(in lab, red, red)){.\\[\\&\\>button\\]\\:bg-foreground\\/60>button{background-color:color-mix(in oklab,var(--foreground)60%,transparent)}}.\\[\\&\\>button\\]\\:p-1>button{padding:calc(var(--spacing)*1)}.\\[\\&\\>button\\]\\:opacity-100>button{opacity:1}.\\[\\&\\>button\\]\\:\\!ring-0>button{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(0px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor)!important;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)!important}@media (hover:hover){.\\[\\&\\>button\\]\\:hover\\:\\[\\&_svg\\]\\:text-destructive>button:hover svg{color:var(--destructive)}}.\\[\\&\\>li\\]\\:mt-0\\.5>li{margin-top:calc(var(--spacing)*.5)}.\\[\\&\\>li\\]\\:mt-1>li{margin-top:calc(var(--spacing)*1)}.\\[\\&\\>span\\]\\:text-xs>span{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.\\[\\&\\[align\\=center\\]\\]\\:text-center[align=center]{text-align:center}.\\[\\&\\[align\\=right\\]\\]\\:text-right[align=right]{text-align:right}}@keyframes shimmer{0%{transform:translate(-100%)}to{transform:translate(200%)}}@keyframes subtle-pulse{0%,to{opacity:1}50%{opacity:.85}}@keyframes smooth-slide-down{0%{opacity:0;transform:translateY(-8px)}to{opacity:1;transform:translateY(0)}}@keyframes fadeInUp{0%{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}@keyframes gradient-shift{0%,to{transform:translate(0%)translateY(0%)}25%{transform:translate(100%)translateY(100%)}50%{transform:translate(100%)translateY(0%)}75%{transform:translate(0%)translateY(100%)}}@keyframes float{0%,to{transform:translateY(0)translate(0)}33%{transform:translateY(-30px)translate(20px)}66%{transform:translateY(20px)translate(-20px)}}@keyframes float-delayed{0%,to{transform:translateY(0)translate(0)}33%{transform:translateY(30px)translate(-30px)}66%{transform:translateY(-20px)translate(20px)}}.tool-card-transition{transition:all .4s cubic-bezier(.34,1.56,.64,1)}.tool-card-smooth{transition:all .35s cubic-bezier(.4,0,.2,1)}.animate-fadeInUp{opacity:0;animation:.5s ease-out forwards fadeInUp}.animate-gradient-shift{background-size:200% 200%;animation:20s ease-in-out infinite gradient-shift}.animate-float-slow{animation:20s ease-in-out infinite float}.animate-float-delayed{animation:25s ease-in-out 5s infinite float-delayed}.no-scrollbar::-webkit-scrollbar{display:none}.no-scrollbar{-ms-overflow-style:none;scrollbar-width:none}@keyframes tool-border-rotate{0%{--tool-border-angle:0deg}to{--tool-border-angle:360deg}}@property --tool-border-angle{syntax:\"<angle>\";inherits:false;initial-value:0deg}.tool-border-calling{background:conic-gradient(from var(--tool-border-angle),transparent 0deg,transparent 60deg,#3b82f680 90deg,#60a5fab3 120deg,#93c5fd80 150deg,transparent 180deg,transparent 360deg);animation:1.5s linear infinite tool-border-rotate}.tool-border-success{background:#22c55e66;box-shadow:0 0 12px #22c55e4d,inset 0 0 8px #22c55e1a}.tool-border-error{background:#ef444466;box-shadow:0 0 12px #ef44444d,inset 0 0 8px #ef44441a}@keyframes pulse-success{0%,to{box-shadow:0 0 #22c55e66}50%{box-shadow:0 0 0 8px #22c55e00}}@keyframes shake{0%,to{transform:translate(0)}10%,30%,50%,70%,90%{transform:translate(-2px)}20%,40%,60%,80%{transform:translate(2px)}}.animate-pulse-success{animation:.6s ease-out pulse-success}.animate-shake{animation:.3s ease-out shake}@keyframes aui-pulse{50%{opacity:.5}}:where(.aui-md[data-status=running]):empty:after,:where(.aui-md[data-status=running])>:where(:not(ol):not(ul):not(pre)):last-child:after,:where(.aui-md[data-status=running])>pre:last-child code:after,:where(.aui-md[data-status=running])>:where(:is(ol,ul):last-child)>:where(li:last-child:not(:has(*>li))):after,:where(.aui-md[data-status=running])>:where(:is(ol,ul):last-child)>:where(li:last-child)>:where(:is(ol,ul):last-child)>:where(li:last-child:not(:has(*>li))):after,:where(.aui-md[data-status=running])>:where(:is(ol,ul):last-child)>:where(li:last-child)>:where(:is(ol,ul):last-child)>:where(li:last-child)>:where(:is(ol,ul):last-child)>:where(li:last-child):after{--aui-content:\"●\";content:var(--aui-content);margin-left:.25rem;margin-right:.25rem;font-family:ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;animation:2s cubic-bezier(.4,0,.6,1) infinite aui-pulse}.glass-pill{-webkit-backdrop-filter:blur(20px)saturate(150%);background:#0f172ad9;border:1px solid #ffffff0f;box-shadow:0 4px 16px #0003,inset 0 .5px #ffffff14}.glass-pill:before{content:\"\";border-radius:inherit;pointer-events:none;z-index:1;background:linear-gradient(#ffffff0a 0%,#0000 40%);position:absolute;inset:0}.glass-pill:after{display:none}.glass-pill-collapsed{-webkit-backdrop-filter:blur(12px);background:#ffffff1f;border:none;box-shadow:0 1px 4px #00000026}.glass-pill-collapsed:before,.glass-pill-collapsed:after{display:none}.glass-pill-hovered{-webkit-backdrop-filter:blur(16px)saturate(140%);background:#0f172acc;border:1px solid #ffffff0f;box-shadow:0 2px 12px #0000002e}.glass-pill-hovered:before,.glass-pill-hovered:after{display:none}@keyframes glass-shimmer{0%{background-position:-200% 0}to{background-position:200% 0}}.glass-shimmer{background:linear-gradient(90deg,#ffffff14 0%,#ffffff26 50%,#ffffff14 100%) 0 0/200% 100%;animation:4s ease-in-out infinite glass-shimmer}.scrollbar-thin{scrollbar-width:thin;scrollbar-color:#fff3 transparent}.scrollbar-thin::-webkit-scrollbar{width:4px;height:4px}.scrollbar-thin::-webkit-scrollbar-thumb{background-color:#fff3;border-radius:9999px}.scrollbar-thin::-webkit-scrollbar-track{background-color:#0000}@property --tw-border-spacing-x{syntax:\"<length>\";inherits:false;initial-value:0}@property --tw-border-spacing-y{syntax:\"<length>\";inherits:false;initial-value:0}@property --tw-translate-x{syntax:\"*\";inherits:false;initial-value:0}@property --tw-translate-y{syntax:\"*\";inherits:false;initial-value:0}@property --tw-translate-z{syntax:\"*\";inherits:false;initial-value:0}@property --tw-rotate-x{syntax:\"*\";inherits:false}@property --tw-rotate-y{syntax:\"*\";inherits:false}@property --tw-rotate-z{syntax:\"*\";inherits:false}@property --tw-skew-x{syntax:\"*\";inherits:false}@property --tw-skew-y{syntax:\"*\";inherits:false}@property --tw-space-y-reverse{syntax:\"*\";inherits:false;initial-value:0}@property --tw-border-style{syntax:\"*\";inherits:false;initial-value:solid}@property --tw-gradient-position{syntax:\"*\";inherits:false}@property --tw-gradient-from{syntax:\"<color>\";inherits:false;initial-value:#0000}@property --tw-gradient-via{syntax:\"<color>\";inherits:false;initial-value:#0000}@property --tw-gradient-to{syntax:\"<color>\";inherits:false;initial-value:#0000}@property --tw-gradient-stops{syntax:\"*\";inherits:false}@property --tw-gradient-via-stops{syntax:\"*\";inherits:false}@property --tw-gradient-from-position{syntax:\"<length-percentage>\";inherits:false;initial-value:0%}@property --tw-gradient-via-position{syntax:\"<length-percentage>\";inherits:false;initial-value:50%}@property --tw-gradient-to-position{syntax:\"<length-percentage>\";inherits:false;initial-value:100%}@property --tw-leading{syntax:\"*\";inherits:false}@property --tw-font-weight{syntax:\"*\";inherits:false}@property --tw-tracking{syntax:\"*\";inherits:false}@property --tw-ordinal{syntax:\"*\";inherits:false}@property --tw-slashed-zero{syntax:\"*\";inherits:false}@property --tw-numeric-figure{syntax:\"*\";inherits:false}@property --tw-numeric-spacing{syntax:\"*\";inherits:false}@property --tw-numeric-fraction{syntax:\"*\";inherits:false}@property --tw-shadow{syntax:\"*\";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:\"*\";inherits:false}@property --tw-shadow-alpha{syntax:\"<percentage>\";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:\"*\";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:\"*\";inherits:false}@property --tw-inset-shadow-alpha{syntax:\"<percentage>\";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:\"*\";inherits:false}@property --tw-ring-shadow{syntax:\"*\";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:\"*\";inherits:false}@property --tw-inset-ring-shadow{syntax:\"*\";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:\"*\";inherits:false}@property --tw-ring-offset-width{syntax:\"<length>\";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:\"*\";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:\"*\";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:\"*\";inherits:false;initial-value:solid}@property --tw-blur{syntax:\"*\";inherits:false}@property --tw-brightness{syntax:\"*\";inherits:false}@property --tw-contrast{syntax:\"*\";inherits:false}@property --tw-grayscale{syntax:\"*\";inherits:false}@property --tw-hue-rotate{syntax:\"*\";inherits:false}@property --tw-invert{syntax:\"*\";inherits:false}@property --tw-opacity{syntax:\"*\";inherits:false}@property --tw-saturate{syntax:\"*\";inherits:false}@property --tw-sepia{syntax:\"*\";inherits:false}@property --tw-drop-shadow{syntax:\"*\";inherits:false}@property --tw-drop-shadow-color{syntax:\"*\";inherits:false}@property --tw-drop-shadow-alpha{syntax:\"<percentage>\";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:\"*\";inherits:false}@property --tw-backdrop-blur{syntax:\"*\";inherits:false}@property --tw-backdrop-brightness{syntax:\"*\";inherits:false}@property --tw-backdrop-contrast{syntax:\"*\";inherits:false}@property --tw-backdrop-grayscale{syntax:\"*\";inherits:false}@property --tw-backdrop-hue-rotate{syntax:\"*\";inherits:false}@property --tw-backdrop-invert{syntax:\"*\";inherits:false}@property --tw-backdrop-opacity{syntax:\"*\";inherits:false}@property --tw-backdrop-saturate{syntax:\"*\";inherits:false}@property --tw-backdrop-sepia{syntax:\"*\";inherits:false}@property --tw-duration{syntax:\"*\";inherits:false}@property --tw-ease{syntax:\"*\";inherits:false}@property --tw-scale-x{syntax:\"*\";inherits:false;initial-value:1}@property --tw-scale-y{syntax:\"*\";inherits:false;initial-value:1}@property --tw-scale-z{syntax:\"*\";inherits:false;initial-value:1}@keyframes spin{to{transform:rotate(360deg)}}@keyframes pulse{50%{opacity:.5}}";
7688
+ const WEBMCP_STYLES = "/*! tailwindcss v4.1.17 | MIT License | https://tailwindcss.com */\n@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-space-y-reverse:0;--tw-border-style:solid;--tw-gradient-position:initial;--tw-gradient-from:#0000;--tw-gradient-via:#0000;--tw-gradient-to:#0000;--tw-gradient-stops:initial;--tw-gradient-via-stops:initial;--tw-gradient-from-position:0%;--tw-gradient-via-position:50%;--tw-gradient-to-position:100%;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-duration:initial;--tw-ease:initial;--tw-scale-x:1;--tw-scale-y:1;--tw-scale-z:1;--tool-border-angle:0deg}}}@layer theme{:root,:host{--font-sans:ui-sans-serif,system-ui,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol\",\"Noto Color Emoji\";--font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,\"Liberation Mono\",\"Courier New\",monospace;--color-red-200:oklch(88.5% .062 18.334);--color-red-300:oklch(80.8% .114 19.571);--color-red-400:oklch(70.4% .191 22.216);--color-red-500:oklch(63.7% .237 25.331);--color-red-600:oklch(57.7% .245 27.325);--color-amber-500:oklch(76.9% .188 70.08);--color-yellow-500:oklch(79.5% .184 86.047);--color-green-400:oklch(79.2% .209 151.711);--color-green-500:oklch(72.3% .219 149.579);--color-green-600:oklch(62.7% .194 149.214);--color-emerald-500:oklch(69.6% .17 162.48);--color-blue-400:oklch(70.7% .165 254.624);--color-blue-500:oklch(62.3% .214 259.815);--color-blue-600:oklch(54.6% .245 262.881);--color-indigo-500:oklch(58.5% .233 277.117);--color-purple-600:oklch(55.8% .288 302.321);--color-slate-900:oklch(20.8% .042 265.755);--color-zinc-50:oklch(98.5% 0 0);--color-zinc-100:oklch(96.7% .001 286.375);--color-zinc-200:oklch(92% .004 286.32);--color-zinc-400:oklch(70.5% .015 286.067);--color-zinc-500:oklch(55.2% .016 285.938);--color-zinc-700:oklch(37% .013 285.805);--color-zinc-800:oklch(27.4% .006 286.033);--color-zinc-900:oklch(21% .006 285.885);--color-black:#000;--color-white:#fff;--spacing:.25rem;--container-md:28rem;--container-lg:32rem;--container-2xl:42rem;--container-3xl:48rem;--text-xs:.75rem;--text-xs--line-height:calc(1/.75);--text-sm:.875rem;--text-sm--line-height:calc(1.25/.875);--text-base:1rem;--text-base--line-height:calc(1.5/1);--text-lg:1.125rem;--text-lg--line-height:calc(1.75/1.125);--text-2xl:1.5rem;--text-2xl--line-height:calc(2/1.5);--text-3xl:1.875rem;--text-3xl--line-height:calc(2.25/1.875);--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--font-weight-extrabold:800;--tracking-tight:-.025em;--tracking-wide:.025em;--leading-relaxed:1.625;--radius-xs:.125rem;--radius-2xl:1rem;--radius-3xl:1.5rem;--drop-shadow-xl:0 9px 7px #0000001a;--drop-shadow-2xl:0 25px 25px #00000026;--ease-out:cubic-bezier(0,0,.2,1);--ease-in-out:cubic-bezier(.4,0,.2,1);--animate-spin:spin 1s linear infinite;--animate-pulse:pulse 2s cubic-bezier(.4,0,.6,1)infinite;--blur-sm:8px;--blur-md:12px;--blur-xl:24px;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4,0,.2,1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif,system-ui,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol\",\"Noto Color Emoji\");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,\"Liberation Mono\",\"Courier New\",monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab, red, red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}:root{--radius:.75rem;--background:oklch(100% 0 0);--foreground:oklch(14.1% .005 285.823);--card:oklch(100% 0 0);--card-foreground:oklch(14.1% .005 285.823);--popover:oklch(100% 0 0);--popover-foreground:oklch(14.1% .005 285.823);--primary:oklch(21% .006 285.885);--primary-foreground:oklch(98.5% 0 0);--secondary:oklch(96.7% .001 286.375);--secondary-foreground:oklch(21% .006 285.885);--muted:oklch(96.7% .001 286.375);--muted-foreground:oklch(55.2% .016 285.938);--accent:oklch(96.7% .001 286.375);--accent-foreground:oklch(21% .006 285.885);--destructive:oklch(57.7% .245 27.325);--destructive-foreground:oklch(98.5% 0 0);--border:oklch(92% .004 286.32);--input:oklch(92% .004 286.32);--ring:oklch(70.5% .015 286.067)}.dark{--background:oklch(14.1% .005 285.823);--foreground:oklch(98.5% 0 0);--card:oklch(21% .006 285.885);--card-foreground:oklch(98.5% 0 0);--popover:oklch(21% .006 285.885);--popover-foreground:oklch(98.5% 0 0);--primary:oklch(92% .004 286.32);--primary-foreground:oklch(21% .006 285.885);--secondary:oklch(27.4% .006 286.033);--secondary-foreground:oklch(98.5% 0 0);--muted:oklch(27.4% .006 286.033);--muted-foreground:oklch(70.5% .015 286.067);--accent:oklch(27.4% .006 286.033);--accent-foreground:oklch(98.5% 0 0);--destructive:oklch(70.4% .191 22.216);--destructive-foreground:oklch(98.5% 0 0);--border:oklch(100% 0 0/.1);--input:oklch(100% 0 0/.15);--ring:oklch(55.2% .016 285.938)}*{border-color:var(--border);outline-color:var(--ring)}@supports (color:color-mix(in lab, red, red)){*{outline-color:color-mix(in oklch,var(--ring),transparent 50%)}}body{background-color:var(--background);color:var(--foreground)}}@layer components{.app-shell{z-index:0;background-color:var(--background);background-image:radial-gradient(80% 60% at -10% -10%,oklch(82% .15 270/.15),#0000),radial-gradient(60% 50% at 110% 10%,oklch(85% .1 220/.12),#0000),radial-gradient(50% 45% at 50% 120%,oklch(95% .02 250/.08),#0000);position:relative}.dark .app-shell{background-image:radial-gradient(80% 60% at -10% -10%,oklch(55% .14 270/.25),#0000),radial-gradient(60% 50% at 110% 15%,oklch(60% .12 220/.22),#0000),radial-gradient(50% 45% at 50% 120%,oklch(35% .04 250/.16),#0000)}.app-shell:before,.app-shell:after{content:\"\";pointer-events:none;filter:blur(32px);opacity:.6;z-index:-1;border-radius:9999px;position:absolute;inset:auto}.app-shell:before{background:radial-gradient(60% 60% at 40% 40%,oklch(80% .12 270/.3),#0000);width:260px;height:260px;top:-60px;left:-80px}.app-shell:after{background:radial-gradient(60% 60% at 60% 60%,oklch(84% .1 220/.25),#0000);width:300px;height:300px;bottom:-80px;right:-60px}.toolbar-surface{border-top:1px solid var(--border);background:linear-gradient(to right,var(--background),var(--background),var(--background))}@supports (color:color-mix(in lab, red, red)){.toolbar-surface{background:linear-gradient(to right,var(--background),color-mix(in oklch,var(--background),transparent 5%),var(--background))}}.toolbar-surface{-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px)}@supports ((-webkit-backdrop-filter:blur(12px)) or (backdrop-filter:blur(12px))){.toolbar-surface{background:var(--background)}@supports (color:color-mix(in lab, red, red)){.toolbar-surface{background:color-mix(in oklch,var(--background),transparent 20%)}}}.toolbar-surface-top{border-bottom:1px solid var(--border);background:linear-gradient(to right,var(--background),var(--background),var(--background))}@supports (color:color-mix(in lab, red, red)){.toolbar-surface-top{background:linear-gradient(to right,var(--background),color-mix(in oklch,var(--background),transparent 5%),var(--background))}}.toolbar-surface-top{-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px)}@supports ((-webkit-backdrop-filter:blur(12px)) or (backdrop-filter:blur(12px))){.toolbar-surface-top{background:var(--background)}@supports (color:color-mix(in lab, red, red)){.toolbar-surface-top{background:color-mix(in oklch,var(--background),transparent 20%)}}}.toolbar-inner{justify-content:space-between;align-items:center;padding:.5rem .75rem;display:flex}.toolbar-card{background:var(--card);justify-content:space-between;align-items:center;gap:.5rem;display:flex}@supports (color:color-mix(in lab, red, red)){.toolbar-card{background:color-mix(in oklch,var(--card),transparent 60%)}}.toolbar-card{border:1px solid var(--border);border-radius:.75rem;padding:.5rem .75rem}.toolbar-group{align-items:center;gap:.25rem;display:flex}.btn-toolbar-primary{background:linear-gradient(to right,var(--primary),var(--primary));border-radius:.75rem;align-items:center;gap:.5rem;height:2.25rem;padding:0 .75rem;display:flex}@supports (color:color-mix(in lab, red, red)){.btn-toolbar-primary{background:linear-gradient(to right,color-mix(in oklch,var(--primary),transparent 95%),color-mix(in oklch,var(--primary),transparent 90%))}}.btn-toolbar-primary{border:1px solid var(--primary)}@supports (color:color-mix(in lab, red, red)){.btn-toolbar-primary{border:1px solid color-mix(in oklch,var(--primary),transparent 80%)}}.btn-toolbar-primary{transition:all .2s}.btn-toolbar-primary:hover{background:linear-gradient(to right,var(--primary),var(--primary))}@supports (color:color-mix(in lab, red, red)){.btn-toolbar-primary:hover{background:linear-gradient(to right,color-mix(in oklch,var(--primary),transparent 90%),color-mix(in oklch,var(--primary),transparent 80%))}}.btn-toolbar-icon-primary{background:linear-gradient(to bottom right,var(--primary),var(--primary));border-radius:9999px;width:2rem;height:2rem;padding:0}@supports (color:color-mix(in lab, red, red)){.btn-toolbar-icon-primary{background:linear-gradient(to bottom right,color-mix(in oklch,var(--primary),transparent 90%),color-mix(in oklch,var(--primary),transparent 80%))}}.btn-toolbar-icon-primary{border:1px solid var(--primary)}@supports (color:color-mix(in lab, red, red)){.btn-toolbar-icon-primary{border:1px solid color-mix(in oklch,var(--primary),transparent 70%)}}.btn-toolbar-icon-primary{transition:all .2s;box-shadow:0 1px 2px #0000000d}.btn-toolbar-icon-primary:hover{background:linear-gradient(to bottom right,var(--primary),var(--primary))}@supports (color:color-mix(in lab, red, red)){.btn-toolbar-icon-primary:hover{background:linear-gradient(to bottom right,color-mix(in oklch,var(--primary),transparent 80%),color-mix(in oklch,var(--primary),transparent 70%))}}.btn-toolbar-icon-secondary{background:linear-gradient(to bottom right,var(--secondary),var(--secondary));border-radius:9999px;width:2rem;height:2rem;padding:0}@supports (color:color-mix(in lab, red, red)){.btn-toolbar-icon-secondary{background:linear-gradient(to bottom right,color-mix(in oklch,var(--secondary),transparent 90%),color-mix(in oklch,var(--secondary),transparent 80%))}}.btn-toolbar-icon-secondary{border:1px solid var(--secondary)}@supports (color:color-mix(in lab, red, red)){.btn-toolbar-icon-secondary{border:1px solid color-mix(in oklch,var(--secondary),transparent 70%)}}.btn-toolbar-icon-secondary{transition:all .2s;box-shadow:0 1px 2px #0000000d}.btn-toolbar-icon-secondary:hover{background:linear-gradient(to bottom right,var(--secondary),var(--secondary))}@supports (color:color-mix(in lab, red, red)){.btn-toolbar-icon-secondary:hover{background:linear-gradient(to bottom right,color-mix(in oklch,var(--secondary),transparent 80%),color-mix(in oklch,var(--secondary),transparent 70%))}}.badge-compact{height:1.25rem;padding:0 .5rem;font-size:10px}.badge-mini{height:1rem;padding:0 .375rem;font-size:10px}@keyframes shimmer-bg{0%{background-position:-1000px 0}to{background-position:1000px 0}}.shimmer{background:linear-gradient(90deg,#0000,#ffffff1a,#0000) 0 0/1000px 100%;animation:3s linear infinite shimmer-bg}.animate-shimmer{animation:2s linear infinite shimmer}@keyframes pulse-glow{0%,to{box-shadow:0 0 20px rgba(var(--primary),.1)}50%{box-shadow:0 0 30px rgba(var(--primary),.2)}}.pulse-glow{animation:2s ease-in-out infinite pulse-glow}@keyframes gradient-x{0%,to{background-position:0%}50%{background-position:100%}}.animate-gradient-x{animation:8s ease-in-out infinite gradient-x}.gradient-text{background:linear-gradient(to right,var(--foreground),var(--foreground))}@supports (color:color-mix(in lab, red, red)){.gradient-text{background:linear-gradient(to right,var(--foreground),color-mix(in oklch,var(--foreground),transparent 30%))}}.gradient-text{-webkit-text-fill-color:transparent;-webkit-background-clip:text;background-clip:text}.glass{background:var(--background)}@supports (color:color-mix(in lab, red, red)){.glass{background:color-mix(in oklch,var(--background),transparent 50%)}}.glass{-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);border:1px solid var(--border)}@supports (color:color-mix(in lab, red, red)){.glass{border:1px solid color-mix(in oklch,var(--border),transparent 50%)}}.tool-card{transition:all .3s ease-out}.tool-card:hover{transform:scale(1.02);box-shadow:0 10px 15px -3px #0000001a,0 4px 6px -2px #0000000d}.scrollbar-thin{scrollbar-width:thin}.scrollbar-thin::-webkit-scrollbar{width:6px;height:6px}.scrollbar-thin::-webkit-scrollbar-track{background:0 0}.scrollbar-thin::-webkit-scrollbar-thumb{background-color:var(--primary)}@supports (color:color-mix(in lab, red, red)){.scrollbar-thin::-webkit-scrollbar-thumb{background-color:color-mix(in oklch,var(--primary),transparent 80%)}}.scrollbar-thin::-webkit-scrollbar-thumb{border-radius:3px}.scrollbar-thin::-webkit-scrollbar-thumb:hover{background-color:var(--primary)}@supports (color:color-mix(in lab, red, red)){.scrollbar-thin::-webkit-scrollbar-thumb:hover{background-color:color-mix(in oklch,var(--primary),transparent 70%)}}}@layer utilities{.\\@container{container-type:inline-size}.pointer-events-none{pointer-events:none}.collapse{visibility:collapse}.visible{visibility:visible}.sr-only{clip-path:inset(50%);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.sticky{position:sticky}.-inset-\\[1px\\]{inset:-1px}.inset-0{inset:calc(var(--spacing)*0)}.-top-1{top:calc(var(--spacing)*-1)}.-top-12{top:calc(var(--spacing)*-12)}.top-0{top:calc(var(--spacing)*0)}.top-1\\.5{top:calc(var(--spacing)*1.5)}.top-1\\/2{top:50%}.top-2{top:calc(var(--spacing)*2)}.top-4{top:calc(var(--spacing)*4)}.top-\\[50\\%\\]{top:50%}.-right-1{right:calc(var(--spacing)*-1)}.right-0{right:calc(var(--spacing)*0)}.right-1\\.5{right:calc(var(--spacing)*1.5)}.right-2{right:calc(var(--spacing)*2)}.right-4{right:calc(var(--spacing)*4)}.right-6{right:calc(var(--spacing)*6)}.bottom-0{bottom:calc(var(--spacing)*0)}.bottom-4{bottom:calc(var(--spacing)*4)}.bottom-6{bottom:calc(var(--spacing)*6)}.bottom-full{bottom:100%}.left-0{left:calc(var(--spacing)*0)}.left-1\\/2,.left-\\[50\\%\\]{left:50%}.z-10{z-index:10}.z-20{z-index:20}.z-40{z-index:40}.z-50{z-index:50}.col-span-full{grid-column:1/-1}.col-start-1{grid-column-start:1}.col-start-2{grid-column-start:2}.col-start-3{grid-column-start:3}.row-start-1{grid-row-start:1}.row-start-2{grid-row-start:2}.row-start-3{grid-row-start:3}.container{width:100%}@media (min-width:40rem){.container{max-width:40rem}}@media (min-width:48rem){.container{max-width:48rem}}@media (min-width:64rem){.container{max-width:64rem}}@media (min-width:80rem){.container{max-width:80rem}}@media (min-width:96rem){.container{max-width:96rem}}.m-0{margin:calc(var(--spacing)*0)}.mx-2{margin-inline:calc(var(--spacing)*2)}.mx-3{margin-inline:calc(var(--spacing)*3)}.mx-auto{margin-inline:auto}.my-1{margin-block:calc(var(--spacing)*1)}.my-2{margin-block:calc(var(--spacing)*2)}.my-auto{margin-block:auto}.-mt-1{margin-top:calc(var(--spacing)*-1)}.mt-0\\.5{margin-top:calc(var(--spacing)*.5)}.mt-1{margin-top:calc(var(--spacing)*1)}.mt-2{margin-top:calc(var(--spacing)*2)}.mt-3{margin-top:calc(var(--spacing)*3)}.mt-4{margin-top:calc(var(--spacing)*4)}.-mr-1{margin-right:calc(var(--spacing)*-1)}.mr-1\\.5{margin-right:calc(var(--spacing)*1.5)}.mr-2{margin-right:calc(var(--spacing)*2)}.-mb-1{margin-bottom:calc(var(--spacing)*-1)}.mb-1{margin-bottom:calc(var(--spacing)*1)}.mb-2{margin-bottom:calc(var(--spacing)*2)}.mb-3{margin-bottom:calc(var(--spacing)*3)}.mb-4{margin-bottom:calc(var(--spacing)*4)}.-ml-1{margin-left:calc(var(--spacing)*-1)}.-ml-2{margin-left:calc(var(--spacing)*-2)}.ml-1{margin-left:calc(var(--spacing)*1)}.ml-2{margin-left:calc(var(--spacing)*2)}.ml-4{margin-left:calc(var(--spacing)*4)}.ml-auto{margin-left:auto}.line-clamp-2{-webkit-line-clamp:2;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.line-clamp-3{-webkit-line-clamp:3;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.block{display:block}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-flex{display:inline-flex}.table{display:table}.aspect-square{aspect-ratio:1}.size-2\\.5{width:calc(var(--spacing)*2.5);height:calc(var(--spacing)*2.5)}.size-3{width:calc(var(--spacing)*3);height:calc(var(--spacing)*3)}.size-3\\.5{width:calc(var(--spacing)*3.5);height:calc(var(--spacing)*3.5)}.size-4{width:calc(var(--spacing)*4);height:calc(var(--spacing)*4)}.size-5{width:calc(var(--spacing)*5);height:calc(var(--spacing)*5)}.size-6{width:calc(var(--spacing)*6);height:calc(var(--spacing)*6)}.size-8{width:calc(var(--spacing)*8);height:calc(var(--spacing)*8)}.size-9{width:calc(var(--spacing)*9);height:calc(var(--spacing)*9)}.size-10{width:calc(var(--spacing)*10);height:calc(var(--spacing)*10)}.size-14{width:calc(var(--spacing)*14);height:calc(var(--spacing)*14)}.size-\\[34px\\]{width:34px;height:34px}.size-full{width:100%;height:100%}.h-1\\.5{height:calc(var(--spacing)*1.5)}.h-2{height:calc(var(--spacing)*2)}.h-2\\.5{height:calc(var(--spacing)*2.5)}.h-3{height:calc(var(--spacing)*3)}.h-3\\.5{height:calc(var(--spacing)*3.5)}.h-4{height:calc(var(--spacing)*4)}.h-5{height:calc(var(--spacing)*5)}.h-6{height:calc(var(--spacing)*6)}.h-7{height:calc(var(--spacing)*7)}.h-8{height:calc(var(--spacing)*8)}.h-9{height:calc(var(--spacing)*9)}.h-10{height:calc(var(--spacing)*10)}.h-12{height:calc(var(--spacing)*12)}.h-\\[600px\\]{height:600px}.h-\\[calc\\(100\\%-60px\\)\\]{height:calc(100% - 60px)}.h-auto{height:auto}.h-full{height:100%}.max-h-24{max-height:calc(var(--spacing)*24)}.max-h-32{max-height:calc(var(--spacing)*32)}.max-h-40{max-height:calc(var(--spacing)*40)}.max-h-48{max-height:calc(var(--spacing)*48)}.max-h-60{max-height:calc(var(--spacing)*60)}.max-h-\\[80dvh\\]{max-height:80dvh}.max-h-\\[80vh\\]{max-height:80vh}.max-h-\\[200px\\]{max-height:200px}.min-h-8{min-height:calc(var(--spacing)*8)}.min-h-\\[60px\\]{min-height:60px}.min-h-screen{min-height:100vh}.w-1\\.5{width:calc(var(--spacing)*1.5)}.w-2{width:calc(var(--spacing)*2)}.w-2\\.5{width:calc(var(--spacing)*2.5)}.w-3{width:calc(var(--spacing)*3)}.w-3\\.5{width:calc(var(--spacing)*3.5)}.w-4{width:calc(var(--spacing)*4)}.w-5{width:calc(var(--spacing)*5)}.w-6{width:calc(var(--spacing)*6)}.w-7{width:calc(var(--spacing)*7)}.w-8{width:calc(var(--spacing)*8)}.w-12{width:calc(var(--spacing)*12)}.w-16{width:calc(var(--spacing)*16)}.w-\\[500px\\]{width:500px}.w-auto{width:auto}.w-fit{width:fit-content}.w-full{width:100%}.w-px{width:1px}.max-w-2xl{max-width:var(--container-2xl)}.max-w-7\\/8{max-width:87.5%}.max-w-16{max-width:calc(var(--spacing)*16)}.max-w-24{max-width:calc(var(--spacing)*24)}.max-w-\\[80\\%\\]{max-width:80%}.max-w-\\[80px\\]{max-width:80px}.max-w-\\[85\\%\\]{max-width:85%}.max-w-\\[100px\\]{max-width:100px}.max-w-\\[150px\\]{max-width:150px}.max-w-\\[200px\\]{max-width:200px}.max-w-\\[250px\\]{max-width:250px}.max-w-\\[280px\\]{max-width:280px}.max-w-\\[calc\\(100\\%-2rem\\)\\]{max-width:calc(100% - 2rem)}.max-w-\\[var\\(--thread-max-width\\)\\]{max-width:var(--thread-max-width)}.max-w-full{max-width:100%}.max-w-md{max-width:var(--container-md)}.min-w-0{min-width:calc(var(--spacing)*0)}.min-w-\\[200px\\]{min-width:200px}.flex-1{flex:1}.flex-shrink-0,.shrink-0{flex-shrink:0}.flex-grow,.grow{flex-grow:1}.border-separate{border-collapse:separate}.border-spacing-0{--tw-border-spacing-x:calc(var(--spacing)*0);--tw-border-spacing-y:calc(var(--spacing)*0);border-spacing:var(--tw-border-spacing-x)var(--tw-border-spacing-y)}.origin-\\(--radix-tooltip-content-transform-origin\\){transform-origin:var(--radix-tooltip-content-transform-origin)}.-translate-x-1\\/2{--tw-translate-x:calc(calc(1/2*100%)*-1);translate:var(--tw-translate-x)var(--tw-translate-y)}.-translate-x-full{--tw-translate-x:-100%;translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-x-0{--tw-translate-x:calc(var(--spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-x-\\[-50\\%\\]{--tw-translate-x:-50%;translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-x-full{--tw-translate-x:100%;translate:var(--tw-translate-x)var(--tw-translate-y)}.-translate-y-1\\/2{--tw-translate-y:calc(calc(1/2*100%)*-1);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-y-\\[-50\\%\\]{--tw-translate-y:-50%;translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-y-\\[calc\\(-50\\%_-_2px\\)\\]{--tw-translate-y:calc(-50% - 2px);translate:var(--tw-translate-x)var(--tw-translate-y)}.rotate-45{rotate:45deg}.rotate-180{rotate:180deg}.transform{transform:var(--tw-rotate-x,)var(--tw-rotate-y,)var(--tw-rotate-z,)var(--tw-skew-x,)var(--tw-skew-y,)}.animate-pulse{animation:var(--animate-pulse)}.animate-spin{animation:var(--animate-spin)}.cursor-grab{cursor:grab}.cursor-pointer{cursor:pointer}.touch-none{touch-action:none}.resize-none{resize:none}.scroll-m-20{scroll-margin:calc(var(--spacing)*20)}.list-decimal{list-style-type:decimal}.list-disc{list-style-type:disc}.auto-rows-auto{grid-auto-rows:auto}.grid-cols-\\[minmax\\(72px\\,1fr\\)_auto\\]{grid-template-columns:minmax(72px,1fr) auto}.grid-rows-\\[0fr\\]{grid-template-rows:0fr}.grid-rows-\\[1fr\\]{grid-template-rows:1fr}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.flex-row{flex-direction:row}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.items-end{align-items:flex-end}.items-start{align-items:flex-start}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.justify-start{justify-content:flex-start}.gap-0\\.5{gap:calc(var(--spacing)*.5)}.gap-1{gap:calc(var(--spacing)*1)}.gap-1\\.5{gap:calc(var(--spacing)*1.5)}.gap-2{gap:calc(var(--spacing)*2)}.gap-2\\.5{gap:calc(var(--spacing)*2.5)}.gap-3{gap:calc(var(--spacing)*3)}.gap-4{gap:calc(var(--spacing)*4)}:where(.space-y-1>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*1)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*1)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-2>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*2)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*2)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-4>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*4)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*4)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-6>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*6)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*6)*calc(1 - var(--tw-space-y-reverse)))}.gap-y-2{row-gap:calc(var(--spacing)*2)}.self-center{align-self:center}.self-end{align-self:flex-end}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-auto{overflow:auto}.overflow-clip{overflow:clip}.overflow-hidden{overflow:hidden}.overflow-visible{overflow:visible}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.overflow-y-scroll{overflow-y:scroll}.overscroll-contain{overscroll-behavior:contain}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:var(--radius-2xl)}.rounded-3xl{border-radius:var(--radius-3xl)}.rounded-\\[2px\\]{border-radius:2px}.rounded-\\[14px\\]{border-radius:14px}.rounded-\\[inherit\\]{border-radius:inherit}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius)}.rounded-md{border-radius:calc(var(--radius) - 2px)}.rounded-none{border-radius:0}.rounded-xl{border-radius:calc(var(--radius) + 4px)}.rounded-xs{border-radius:var(--radius-xs)}.\\!rounded-t-none{border-top-left-radius:0!important;border-top-right-radius:0!important}.rounded-t-3xl{border-top-left-radius:var(--radius-3xl);border-top-right-radius:var(--radius-3xl)}.rounded-t-lg{border-top-left-radius:var(--radius);border-top-right-radius:var(--radius)}.rounded-tr-sm{border-top-right-radius:calc(var(--radius) - 4px)}.rounded-b-lg{border-bottom-right-radius:var(--radius);border-bottom-left-radius:var(--radius)}.border{border-style:var(--tw-border-style);border-width:1px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-t-2{border-top-style:var(--tw-border-style);border-top-width:2px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-l{border-left-style:var(--tw-border-style);border-left-width:1px}.border-l-2{border-left-style:var(--tw-border-style);border-left-width:2px}.border-dashed{--tw-border-style:dashed;border-style:dashed}.border-dotted{--tw-border-style:dotted;border-style:dotted}.border-blue-500\\/40{border-color:#3080ff66}@supports (color:color-mix(in lab, red, red)){.border-blue-500\\/40{border-color:color-mix(in oklab,var(--color-blue-500)40%,transparent)}}.border-blue-500\\/60{border-color:#3080ff99}@supports (color:color-mix(in lab, red, red)){.border-blue-500\\/60{border-color:color-mix(in oklab,var(--color-blue-500)60%,transparent)}}.border-border,.border-border\\/20{border-color:var(--border)}@supports (color:color-mix(in lab, red, red)){.border-border\\/20{border-color:color-mix(in oklab,var(--border)20%,transparent)}}.border-border\\/40{border-color:var(--border)}@supports (color:color-mix(in lab, red, red)){.border-border\\/40{border-color:color-mix(in oklab,var(--border)40%,transparent)}}.border-border\\/50{border-color:var(--border)}@supports (color:color-mix(in lab, red, red)){.border-border\\/50{border-color:color-mix(in oklab,var(--border)50%,transparent)}}.border-destructive,.border-destructive\\/60{border-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.border-destructive\\/60{border-color:color-mix(in oklab,var(--destructive)60%,transparent)}}.border-foreground\\/20{border-color:var(--foreground)}@supports (color:color-mix(in lab, red, red)){.border-foreground\\/20{border-color:color-mix(in oklab,var(--foreground)20%,transparent)}}.border-green-500\\/20{border-color:#00c75833}@supports (color:color-mix(in lab, red, red)){.border-green-500\\/20{border-color:color-mix(in oklab,var(--color-green-500)20%,transparent)}}.border-green-500\\/40{border-color:#00c75866}@supports (color:color-mix(in lab, red, red)){.border-green-500\\/40{border-color:color-mix(in oklab,var(--color-green-500)40%,transparent)}}.border-green-500\\/60{border-color:#00c75899}@supports (color:color-mix(in lab, red, red)){.border-green-500\\/60{border-color:color-mix(in oklab,var(--color-green-500)60%,transparent)}}.border-input{border-color:var(--input)}.border-muted-foreground\\/20{border-color:var(--muted-foreground)}@supports (color:color-mix(in lab, red, red)){.border-muted-foreground\\/20{border-color:color-mix(in oklab,var(--muted-foreground)20%,transparent)}}.border-primary\\/60{border-color:var(--primary)}@supports (color:color-mix(in lab, red, red)){.border-primary\\/60{border-color:color-mix(in oklab,var(--primary)60%,transparent)}}.border-red-500\\/20{border-color:#fb2c3633}@supports (color:color-mix(in lab, red, red)){.border-red-500\\/20{border-color:color-mix(in oklab,var(--color-red-500)20%,transparent)}}.border-red-500\\/40{border-color:#fb2c3666}@supports (color:color-mix(in lab, red, red)){.border-red-500\\/40{border-color:color-mix(in oklab,var(--color-red-500)40%,transparent)}}.border-red-500\\/60{border-color:#fb2c3699}@supports (color:color-mix(in lab, red, red)){.border-red-500\\/60{border-color:color-mix(in oklab,var(--color-red-500)60%,transparent)}}.border-transparent{border-color:#0000}.border-white\\/10{border-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){.border-white\\/10{border-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.border-white\\/20{border-color:#fff3}@supports (color:color-mix(in lab, red, red)){.border-white\\/20{border-color:color-mix(in oklab,var(--color-white)20%,transparent)}}.border-zinc-100{border-color:var(--color-zinc-100)}.border-zinc-200\\/50{border-color:#e4e4e780}@supports (color:color-mix(in lab, red, red)){.border-zinc-200\\/50{border-color:color-mix(in oklab,var(--color-zinc-200)50%,transparent)}}.border-zinc-200\\/80{border-color:#e4e4e7cc}@supports (color:color-mix(in lab, red, red)){.border-zinc-200\\/80{border-color:color-mix(in oklab,var(--color-zinc-200)80%,transparent)}}.border-t-transparent{border-top-color:#0000}.border-l-transparent{border-left-color:#0000}.bg-\\[color-mix\\(in_oklab\\,rgb\\(var\\(--background\\)\\)_20\\%\\,transparent\\)\\]{background-color:rgb(var(--background))}@supports (color:color-mix(in lab, red, red)){.bg-\\[color-mix\\(in_oklab\\,rgb\\(var\\(--background\\)\\)_20\\%\\,transparent\\)\\]{background-color:color-mix(in oklab,rgb(var(--background))20%,transparent)}}.bg-amber-500{background-color:var(--color-amber-500)}.bg-background,.bg-background\\/50{background-color:var(--background)}@supports (color:color-mix(in lab, red, red)){.bg-background\\/50{background-color:color-mix(in oklab,var(--background)50%,transparent)}}.bg-background\\/80{background-color:var(--background)}@supports (color:color-mix(in lab, red, red)){.bg-background\\/80{background-color:color-mix(in oklab,var(--background)80%,transparent)}}.bg-background\\/95{background-color:var(--background)}@supports (color:color-mix(in lab, red, red)){.bg-background\\/95{background-color:color-mix(in oklab,var(--background)95%,transparent)}}.bg-black{background-color:var(--color-black)}.bg-black\\/30{background-color:#0000004d}@supports (color:color-mix(in lab, red, red)){.bg-black\\/30{background-color:color-mix(in oklab,var(--color-black)30%,transparent)}}.bg-black\\/50{background-color:#00000080}@supports (color:color-mix(in lab, red, red)){.bg-black\\/50{background-color:color-mix(in oklab,var(--color-black)50%,transparent)}}.bg-blue-400{background-color:var(--color-blue-400)}.bg-blue-500{background-color:var(--color-blue-500)}.bg-blue-500\\/5{background-color:#3080ff0d}@supports (color:color-mix(in lab, red, red)){.bg-blue-500\\/5{background-color:color-mix(in oklab,var(--color-blue-500)5%,transparent)}}.bg-blue-500\\/10{background-color:#3080ff1a}@supports (color:color-mix(in lab, red, red)){.bg-blue-500\\/10{background-color:color-mix(in oklab,var(--color-blue-500)10%,transparent)}}.bg-border{background-color:var(--border)}.bg-destructive,.bg-destructive\\/10{background-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.bg-destructive\\/10{background-color:color-mix(in oklab,var(--destructive)10%,transparent)}}.bg-foreground{background-color:var(--foreground)}.bg-green-400{background-color:var(--color-green-400)}.bg-green-400\\/60{background-color:#05df7299}@supports (color:color-mix(in lab, red, red)){.bg-green-400\\/60{background-color:color-mix(in oklab,var(--color-green-400)60%,transparent)}}.bg-green-500{background-color:var(--color-green-500)}.bg-green-500\\/5{background-color:#00c7580d}@supports (color:color-mix(in lab, red, red)){.bg-green-500\\/5{background-color:color-mix(in oklab,var(--color-green-500)5%,transparent)}}.bg-green-500\\/10{background-color:#00c7581a}@supports (color:color-mix(in lab, red, red)){.bg-green-500\\/10{background-color:color-mix(in oklab,var(--color-green-500)10%,transparent)}}.bg-muted{background-color:var(--muted)}.bg-muted-foreground\\/15{background-color:var(--muted-foreground)}@supports (color:color-mix(in lab, red, red)){.bg-muted-foreground\\/15{background-color:color-mix(in oklab,var(--muted-foreground)15%,transparent)}}.bg-muted\\/5{background-color:var(--muted)}@supports (color:color-mix(in lab, red, red)){.bg-muted\\/5{background-color:color-mix(in oklab,var(--muted)5%,transparent)}}.bg-muted\\/30{background-color:var(--muted)}@supports (color:color-mix(in lab, red, red)){.bg-muted\\/30{background-color:color-mix(in oklab,var(--muted)30%,transparent)}}.bg-muted\\/50{background-color:var(--muted)}@supports (color:color-mix(in lab, red, red)){.bg-muted\\/50{background-color:color-mix(in oklab,var(--muted)50%,transparent)}}.bg-popover\\/95{background-color:var(--popover)}@supports (color:color-mix(in lab, red, red)){.bg-popover\\/95{background-color:color-mix(in oklab,var(--popover)95%,transparent)}}.bg-primary,.bg-primary\\/10{background-color:var(--primary)}@supports (color:color-mix(in lab, red, red)){.bg-primary\\/10{background-color:color-mix(in oklab,var(--primary)10%,transparent)}}.bg-red-500{background-color:var(--color-red-500)}.bg-red-500\\/5{background-color:#fb2c360d}@supports (color:color-mix(in lab, red, red)){.bg-red-500\\/5{background-color:color-mix(in oklab,var(--color-red-500)5%,transparent)}}.bg-red-500\\/10{background-color:#fb2c361a}@supports (color:color-mix(in lab, red, red)){.bg-red-500\\/10{background-color:color-mix(in oklab,var(--color-red-500)10%,transparent)}}.bg-red-500\\/20{background-color:#fb2c3633}@supports (color:color-mix(in lab, red, red)){.bg-red-500\\/20{background-color:color-mix(in oklab,var(--color-red-500)20%,transparent)}}.bg-secondary{background-color:var(--secondary)}.bg-slate-900\\/95{background-color:#0f172bf2}@supports (color:color-mix(in lab, red, red)){.bg-slate-900\\/95{background-color:color-mix(in oklab,var(--color-slate-900)95%,transparent)}}.bg-transparent{background-color:#0000}.bg-white{background-color:var(--color-white)}.bg-white\\/5{background-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){.bg-white\\/5{background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.bg-white\\/10{background-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){.bg-white\\/10{background-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.bg-white\\/95{background-color:#fffffff2}@supports (color:color-mix(in lab, red, red)){.bg-white\\/95{background-color:color-mix(in oklab,var(--color-white)95%,transparent)}}.bg-yellow-500{background-color:var(--color-yellow-500)}.bg-zinc-900{background-color:var(--color-zinc-900)}.bg-gradient-to-br{--tw-gradient-position:to bottom right in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.from-indigo-500{--tw-gradient-from:var(--color-indigo-500);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-purple-600{--tw-gradient-to:var(--color-purple-600);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.fill-foreground{fill:var(--foreground)}.stroke-\\[1\\.5px\\]{stroke-width:1.5px}.object-contain{object-fit:contain}.object-cover{object-fit:cover}.p-0{padding:calc(var(--spacing)*0)}.p-1{padding:calc(var(--spacing)*1)}.p-1\\.5{padding:calc(var(--spacing)*1.5)}.p-2{padding:calc(var(--spacing)*2)}.p-3{padding:calc(var(--spacing)*3)}.p-4{padding:calc(var(--spacing)*4)}.p-6{padding:calc(var(--spacing)*6)}.p-8{padding:calc(var(--spacing)*8)}.p-px{padding:1px}.px-0{padding-inline:calc(var(--spacing)*0)}.px-1{padding-inline:calc(var(--spacing)*1)}.px-1\\.5{padding-inline:calc(var(--spacing)*1.5)}.px-2{padding-inline:calc(var(--spacing)*2)}.px-2\\.5{padding-inline:calc(var(--spacing)*2.5)}.px-3{padding-inline:calc(var(--spacing)*3)}.px-4{padding-inline:calc(var(--spacing)*4)}.px-5{padding-inline:calc(var(--spacing)*5)}.px-6{padding-inline:calc(var(--spacing)*6)}.px-8{padding-inline:calc(var(--spacing)*8)}.py-0\\.5{padding-block:calc(var(--spacing)*.5)}.py-1{padding-block:calc(var(--spacing)*1)}.py-1\\.5{padding-block:calc(var(--spacing)*1.5)}.py-2{padding-block:calc(var(--spacing)*2)}.py-2\\.5{padding-block:calc(var(--spacing)*2.5)}.py-3{padding-block:calc(var(--spacing)*3)}.py-4{padding-block:calc(var(--spacing)*4)}.pt-0\\.5{padding-top:calc(var(--spacing)*.5)}.pt-2{padding-top:calc(var(--spacing)*2)}.pr-1{padding-right:calc(var(--spacing)*1)}.pr-2{padding-right:calc(var(--spacing)*2)}.pb-1{padding-bottom:calc(var(--spacing)*1)}.pb-4{padding-bottom:calc(var(--spacing)*4)}.pl-3{padding-left:calc(var(--spacing)*3)}.pl-4{padding-left:calc(var(--spacing)*4)}.text-center{text-align:center}.text-left{text-align:left}.font-mono{font-family:var(--font-mono)}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\\[10px\\]{font-size:10px}.text-\\[11px\\]{font-size:11px}.text-\\[13px\\]{font-size:13px}.text-\\[15px\\]{font-size:15px}.text-\\[17px\\]{font-size:17px}.text-\\[19px\\]{font-size:19px}.text-\\[21px\\]{font-size:21px}.text-\\[25px\\]{font-size:25px}.leading-7{--tw-leading:calc(var(--spacing)*7);line-height:calc(var(--spacing)*7)}.leading-none{--tw-leading:1;line-height:1}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-extrabold{--tw-font-weight:var(--font-weight-extrabold);font-weight:var(--font-weight-extrabold)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-tight{--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.tracking-wide{--tw-tracking:var(--tracking-wide);letter-spacing:var(--tracking-wide)}.text-balance{text-wrap:balance}.break-words{overflow-wrap:break-word}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.text-background{color:var(--background)}.text-blue-400{color:var(--color-blue-400)}.text-blue-600{color:var(--color-blue-600)}.text-destructive{color:var(--destructive)}.text-destructive-foreground{color:var(--destructive-foreground)}.text-emerald-500{color:var(--color-emerald-500)}.text-foreground,.text-foreground\\/80{color:var(--foreground)}@supports (color:color-mix(in lab, red, red)){.text-foreground\\/80{color:color-mix(in oklab,var(--foreground)80%,transparent)}}.text-green-400{color:var(--color-green-400)}.text-green-600{color:var(--color-green-600)}.text-muted-foreground,.text-muted-foreground\\/65{color:var(--muted-foreground)}@supports (color:color-mix(in lab, red, red)){.text-muted-foreground\\/65{color:color-mix(in oklab,var(--muted-foreground)65%,transparent)}}.text-muted-foreground\\/70{color:var(--muted-foreground)}@supports (color:color-mix(in lab, red, red)){.text-muted-foreground\\/70{color:color-mix(in oklab,var(--muted-foreground)70%,transparent)}}.text-popover-foreground{color:var(--popover-foreground)}.text-primary{color:var(--primary)}.text-primary-foreground{color:var(--primary-foreground)}.text-red-300{color:var(--color-red-300)}.text-red-400{color:var(--color-red-400)}.text-red-600{color:var(--color-red-600)}.text-secondary-foreground{color:var(--secondary-foreground)}.text-white{color:var(--color-white)}.text-white\\/20{color:#fff3}@supports (color:color-mix(in lab, red, red)){.text-white\\/20{color:color-mix(in oklab,var(--color-white)20%,transparent)}}.text-white\\/30{color:#ffffff4d}@supports (color:color-mix(in lab, red, red)){.text-white\\/30{color:color-mix(in oklab,var(--color-white)30%,transparent)}}.text-white\\/40{color:#fff6}@supports (color:color-mix(in lab, red, red)){.text-white\\/40{color:color-mix(in oklab,var(--color-white)40%,transparent)}}.text-white\\/50{color:#ffffff80}@supports (color:color-mix(in lab, red, red)){.text-white\\/50{color:color-mix(in oklab,var(--color-white)50%,transparent)}}.text-white\\/60{color:#fff9}@supports (color:color-mix(in lab, red, red)){.text-white\\/60{color:color-mix(in oklab,var(--color-white)60%,transparent)}}.text-white\\/70{color:#ffffffb3}@supports (color:color-mix(in lab, red, red)){.text-white\\/70{color:color-mix(in oklab,var(--color-white)70%,transparent)}}.text-white\\/80{color:#fffc}@supports (color:color-mix(in lab, red, red)){.text-white\\/80{color:color-mix(in oklab,var(--color-white)80%,transparent)}}.text-white\\/90{color:#ffffffe6}@supports (color:color-mix(in lab, red, red)){.text-white\\/90{color:color-mix(in oklab,var(--color-white)90%,transparent)}}.text-zinc-400{color:var(--color-zinc-400)}.text-zinc-500{color:var(--color-zinc-500)}.text-zinc-700{color:var(--color-zinc-700)}.lowercase{text-transform:lowercase}.uppercase{text-transform:uppercase}.italic{font-style:italic}.tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,)var(--tw-slashed-zero,)var(--tw-numeric-figure,)var(--tw-numeric-spacing,)var(--tw-numeric-fraction,)}.underline{text-decoration-line:underline}.underline-offset-4{text-underline-offset:4px}.opacity-0{opacity:0}.opacity-60{opacity:.6}.opacity-70{opacity:.7}.opacity-100{opacity:1}.shadow-2xl{--tw-shadow:0 25px 50px -12px var(--tw-shadow-color,#00000040);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\\[0_0_12px_rgba\\(34\\,197\\,94\\,0\\.3\\)\\]{--tw-shadow:0 0 12px var(--tw-shadow-color,#22c55e4d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\\[0_0_12px_rgba\\(59\\,130\\,246\\,0\\.3\\)\\]{--tw-shadow:0 0 12px var(--tw-shadow-color,#3b82f64d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\\[0_0_12px_rgba\\(239\\,68\\,68\\,0\\.3\\)\\]{--tw-shadow:0 0 12px var(--tw-shadow-color,#ef44444d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\\[0_12px_24px_-16px_rgba\\(37\\,99\\,235\\,0\\.55\\)\\]{--tw-shadow:0 12px 24px -16px var(--tw-shadow-color,#2563eb8c);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\\[0_12px_24px_-18px_rgba\\(220\\,38\\,38\\,0\\.55\\)\\]{--tw-shadow:0 12px 24px -18px var(--tw-shadow-color,#dc26268c);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a),0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-md{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a),0 2px 4px -2px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-sm{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-xl{--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000001a),0 8px 10px -6px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-xs{--tw-shadow:0 1px 2px 0 var(--tw-shadow-color,#0000000d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.\\[box-shadow\\:inset_0_1px_2px_0_rgba\\(255\\,255\\,255\\,0\\.15\\)\\]{box-shadow:inset 0 1px 2px #ffffff26}.shadow-black\\/10{--tw-shadow-color:#0000001a}@supports (color:color-mix(in lab, red, red)){.shadow-black\\/10{--tw-shadow-color:color-mix(in oklab,color-mix(in oklab,var(--color-black)10%,transparent)var(--tw-shadow-alpha),transparent)}}.shadow-black\\/15{--tw-shadow-color:#00000026}@supports (color:color-mix(in lab, red, red)){.shadow-black\\/15{--tw-shadow-color:color-mix(in oklab,color-mix(in oklab,var(--color-black)15%,transparent)var(--tw-shadow-alpha),transparent)}}.shadow-black\\/20{--tw-shadow-color:#0003}@supports (color:color-mix(in lab, red, red)){.shadow-black\\/20{--tw-shadow-color:color-mix(in oklab,color-mix(in oklab,var(--color-black)20%,transparent)var(--tw-shadow-alpha),transparent)}}.ring-offset-background{--tw-ring-offset-color:var(--background)}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.drop-shadow-xl{--tw-drop-shadow-size:drop-shadow(0 9px 7px var(--tw-drop-shadow-color,#0000001a));--tw-drop-shadow:drop-shadow(var(--drop-shadow-xl));filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.backdrop-blur-md{--tw-backdrop-blur:blur(var(--blur-md));-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.backdrop-blur-sm{--tw-backdrop-blur:blur(var(--blur-sm));-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.backdrop-blur-xl{--tw-backdrop-blur:blur(var(--blur-xl));-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\\[color\\,box-shadow\\]{transition-property:color,box-shadow;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\\[grid-template-rows\\]{transition-property:grid-template-rows;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-shadow{transition-property:box-shadow;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.duration-100{--tw-duration:.1s;transition-duration:.1s}.duration-150{--tw-duration:.15s;transition-duration:.15s}.duration-200{--tw-duration:.2s;transition-duration:.2s}.duration-300{--tw-duration:.3s;transition-duration:.3s}.ease-in-out{--tw-ease:var(--ease-in-out);transition-timing-function:var(--ease-in-out)}.ease-out{--tw-ease:var(--ease-out);transition-timing-function:var(--ease-out)}.will-change-transform{will-change:transform}.outline-none{--tw-outline-style:none;outline-style:none}.select-none{-webkit-user-select:none;user-select:none}@media (hover:hover){.group-hover\\:text-zinc-900:is(:where(.group):hover *){color:var(--color-zinc-900)}.group-hover\\:opacity-100:is(:where(.group):hover *){opacity:1}}.placeholder\\:text-muted-foreground::placeholder,.placeholder\\:text-muted-foreground\\/70::placeholder{color:var(--muted-foreground)}@supports (color:color-mix(in lab, red, red)){.placeholder\\:text-muted-foreground\\/70::placeholder{color:color-mix(in oklab,var(--muted-foreground)70%,transparent)}}.placeholder\\:text-white\\/40::placeholder{color:#fff6}@supports (color:color-mix(in lab, red, red)){.placeholder\\:text-white\\/40::placeholder{color:color-mix(in oklab,var(--color-white)40%,transparent)}}.first\\:mt-0:first-child{margin-top:calc(var(--spacing)*0)}.first\\:mt-3:first-child{margin-top:calc(var(--spacing)*3)}.first\\:mt-4:first-child{margin-top:calc(var(--spacing)*4)}.first\\:rounded-tl-lg:first-child{border-top-left-radius:var(--radius)}.first\\:border-t:first-child{border-top-style:var(--tw-border-style);border-top-width:1px}.last\\:mb-0:last-child{margin-bottom:calc(var(--spacing)*0)}.last\\:mb-5:last-child{margin-bottom:calc(var(--spacing)*5)}.last\\:mb-24:last-child{margin-bottom:calc(var(--spacing)*24)}.last\\:rounded-tr-lg:last-child{border-top-right-radius:var(--radius)}.last\\:border-r:last-child{border-right-style:var(--tw-border-style);border-right-width:1px}.empty\\:hidden:empty{display:none}.focus-within\\:border-ring\\/50:focus-within{border-color:var(--ring)}@supports (color:color-mix(in lab, red, red)){.focus-within\\:border-ring\\/50:focus-within{border-color:color-mix(in oklab,var(--ring)50%,transparent)}}.focus-within\\:border-white\\/20:focus-within{border-color:#fff3}@supports (color:color-mix(in lab, red, red)){.focus-within\\:border-white\\/20:focus-within{border-color:color-mix(in oklab,var(--color-white)20%,transparent)}}.focus-within\\:bg-white\\/15:focus-within{background-color:#ffffff26}@supports (color:color-mix(in lab, red, red)){.focus-within\\:bg-white\\/15:focus-within{background-color:color-mix(in oklab,var(--color-white)15%,transparent)}}.focus-within\\:shadow-2xl:focus-within{--tw-shadow:0 25px 50px -12px var(--tw-shadow-color,#00000040);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus-within\\:shadow-md:focus-within{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a),0 2px 4px -2px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus-within\\:ring-2:focus-within{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus-within\\:shadow-black\\/30:focus-within{--tw-shadow-color:#0000004d}@supports (color:color-mix(in lab, red, red)){.focus-within\\:shadow-black\\/30:focus-within{--tw-shadow-color:color-mix(in oklab,color-mix(in oklab,var(--color-black)30%,transparent)var(--tw-shadow-alpha),transparent)}}.focus-within\\:ring-ring:focus-within{--tw-ring-color:var(--ring)}.focus-within\\:ring-offset-2:focus-within{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}@media (hover:hover){.hover\\:scale-105:hover{--tw-scale-x:105%;--tw-scale-y:105%;--tw-scale-z:105%;scale:var(--tw-scale-x)var(--tw-scale-y)}.hover\\:border-accent:hover{border-color:var(--accent)}.hover\\:border-border\\/60:hover{border-color:var(--border)}@supports (color:color-mix(in lab, red, red)){.hover\\:border-border\\/60:hover{border-color:color-mix(in oklab,var(--border)60%,transparent)}}.hover\\:border-white\\/15:hover{border-color:#ffffff26}@supports (color:color-mix(in lab, red, red)){.hover\\:border-white\\/15:hover{border-color:color-mix(in oklab,var(--color-white)15%,transparent)}}.hover\\:border-white\\/20:hover{border-color:#fff3}@supports (color:color-mix(in lab, red, red)){.hover\\:border-white\\/20:hover{border-color:color-mix(in oklab,var(--color-white)20%,transparent)}}.hover\\:\\!bg-white:hover{background-color:var(--color-white)!important}.hover\\:bg-accent:hover,.hover\\:bg-accent\\/50:hover{background-color:var(--accent)}@supports (color:color-mix(in lab, red, red)){.hover\\:bg-accent\\/50:hover{background-color:color-mix(in oklab,var(--accent)50%,transparent)}}.hover\\:bg-destructive\\/10:hover{background-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.hover\\:bg-destructive\\/10:hover{background-color:color-mix(in oklab,var(--destructive)10%,transparent)}}.hover\\:bg-destructive\\/80:hover{background-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.hover\\:bg-destructive\\/80:hover{background-color:color-mix(in oklab,var(--destructive)80%,transparent)}}.hover\\:bg-destructive\\/90:hover{background-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.hover\\:bg-destructive\\/90:hover{background-color:color-mix(in oklab,var(--destructive)90%,transparent)}}.hover\\:bg-muted-foreground\\/15:hover{background-color:var(--muted-foreground)}@supports (color:color-mix(in lab, red, red)){.hover\\:bg-muted-foreground\\/15:hover{background-color:color-mix(in oklab,var(--muted-foreground)15%,transparent)}}.hover\\:bg-primary\\/80:hover{background-color:var(--primary)}@supports (color:color-mix(in lab, red, red)){.hover\\:bg-primary\\/80:hover{background-color:color-mix(in oklab,var(--primary)80%,transparent)}}.hover\\:bg-primary\\/90:hover{background-color:var(--primary)}@supports (color:color-mix(in lab, red, red)){.hover\\:bg-primary\\/90:hover{background-color:color-mix(in oklab,var(--primary)90%,transparent)}}.hover\\:bg-red-500\\/30:hover{background-color:#fb2c364d}@supports (color:color-mix(in lab, red, red)){.hover\\:bg-red-500\\/30:hover{background-color:color-mix(in oklab,var(--color-red-500)30%,transparent)}}.hover\\:bg-red-600:hover{background-color:var(--color-red-600)}.hover\\:bg-secondary\\/80:hover{background-color:var(--secondary)}@supports (color:color-mix(in lab, red, red)){.hover\\:bg-secondary\\/80:hover{background-color:color-mix(in oklab,var(--secondary)80%,transparent)}}.hover\\:bg-transparent:hover{background-color:#0000}.hover\\:bg-white:hover{background-color:var(--color-white)}.hover\\:bg-white\\/5:hover{background-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){.hover\\:bg-white\\/5:hover{background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.hover\\:bg-white\\/10:hover{background-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){.hover\\:bg-white\\/10:hover{background-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.hover\\:bg-white\\/20:hover{background-color:#fff3}@supports (color:color-mix(in lab, red, red)){.hover\\:bg-white\\/20:hover{background-color:color-mix(in oklab,var(--color-white)20%,transparent)}}.hover\\:bg-zinc-50:hover{background-color:var(--color-zinc-50)}.hover\\:text-accent-foreground:hover{color:var(--accent-foreground)}.hover\\:text-destructive:hover{color:var(--destructive)}.hover\\:text-foreground:hover{color:var(--foreground)}.hover\\:text-primary\\/80:hover{color:var(--primary)}@supports (color:color-mix(in lab, red, red)){.hover\\:text-primary\\/80:hover{color:color-mix(in oklab,var(--primary)80%,transparent)}}.hover\\:text-red-200:hover{color:var(--color-red-200)}.hover\\:text-red-300:hover{color:var(--color-red-300)}.hover\\:text-white:hover{color:var(--color-white)}.hover\\:text-white\\/70:hover{color:#ffffffb3}@supports (color:color-mix(in lab, red, red)){.hover\\:text-white\\/70:hover{color:color-mix(in oklab,var(--color-white)70%,transparent)}}.hover\\:underline:hover{text-decoration-line:underline}.hover\\:opacity-75:hover{opacity:.75}.hover\\:opacity-100:hover{opacity:1}.hover\\:shadow-2xl:hover{--tw-shadow:0 25px 50px -12px var(--tw-shadow-color,#00000040);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hover\\:shadow-\\[0_14px_24px_-14px_rgba\\(37\\,99\\,235\\,0\\.6\\)\\]:hover{--tw-shadow:0 14px 24px -14px var(--tw-shadow-color,#2563eb99);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hover\\:shadow-\\[0_14px_24px_-16px_rgba\\(220\\,38\\,38\\,0\\.6\\)\\]:hover{--tw-shadow:0 14px 24px -16px var(--tw-shadow-color,#dc262699);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hover\\:drop-shadow-2xl:hover{--tw-drop-shadow-size:drop-shadow(0 25px 25px var(--tw-drop-shadow-color,#00000026));--tw-drop-shadow:drop-shadow(var(--drop-shadow-2xl));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,)}}.focus\\:ring-2:focus{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus\\:ring-ring:focus{--tw-ring-color:var(--ring)}.focus\\:ring-offset-2:focus{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.focus\\:outline-hidden:focus{--tw-outline-style:none;outline-style:none}@media (forced-colors:active){.focus\\:outline-hidden:focus{outline-offset:2px;outline:2px solid #0000}}.focus\\:outline-none:focus{--tw-outline-style:none;outline-style:none}.focus-visible\\:border-ring:focus-visible{border-color:var(--ring)}.focus-visible\\:ring-0:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(0px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus-visible\\:ring-1:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus-visible\\:ring-2:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus-visible\\:ring-\\[3px\\]:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(3px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus-visible\\:ring-destructive\\/20:focus-visible{--tw-ring-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.focus-visible\\:ring-destructive\\/20:focus-visible{--tw-ring-color:color-mix(in oklab,var(--destructive)20%,transparent)}}.focus-visible\\:ring-destructive\\/40:focus-visible{--tw-ring-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.focus-visible\\:ring-destructive\\/40:focus-visible{--tw-ring-color:color-mix(in oklab,var(--destructive)40%,transparent)}}.focus-visible\\:ring-primary\\/40:focus-visible{--tw-ring-color:var(--primary)}@supports (color:color-mix(in lab, red, red)){.focus-visible\\:ring-primary\\/40:focus-visible{--tw-ring-color:color-mix(in oklab,var(--primary)40%,transparent)}}.focus-visible\\:ring-ring:focus-visible,.focus-visible\\:ring-ring\\/50:focus-visible{--tw-ring-color:var(--ring)}@supports (color:color-mix(in lab, red, red)){.focus-visible\\:ring-ring\\/50:focus-visible{--tw-ring-color:color-mix(in oklab,var(--ring)50%,transparent)}}.focus-visible\\:ring-white\\/30:focus-visible{--tw-ring-color:#ffffff4d}@supports (color:color-mix(in lab, red, red)){.focus-visible\\:ring-white\\/30:focus-visible{--tw-ring-color:color-mix(in oklab,var(--color-white)30%,transparent)}}.focus-visible\\:ring-offset-2:focus-visible{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.focus-visible\\:ring-offset-transparent:focus-visible{--tw-ring-offset-color:transparent}.focus-visible\\:outline-1:focus-visible{outline-style:var(--tw-outline-style);outline-width:1px}.focus-visible\\:outline-none:focus-visible{--tw-outline-style:none;outline-style:none}.active\\:scale-95:active{--tw-scale-x:95%;--tw-scale-y:95%;--tw-scale-z:95%;scale:var(--tw-scale-x)var(--tw-scale-y)}.active\\:cursor-grabbing:active{cursor:grabbing}.disabled\\:pointer-events-none:disabled{pointer-events:none}.disabled\\:invisible:disabled{visibility:hidden}.disabled\\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\\:opacity-50:disabled{opacity:.5}.has-\\[\\>svg\\]\\:px-2\\.5:has(>svg){padding-inline:calc(var(--spacing)*2.5)}.has-\\[\\>svg\\]\\:px-3:has(>svg){padding-inline:calc(var(--spacing)*3)}.has-\\[\\>svg\\]\\:px-4:has(>svg){padding-inline:calc(var(--spacing)*4)}.aria-invalid\\:border-destructive[aria-invalid=true]{border-color:var(--destructive)}.aria-invalid\\:ring-destructive\\/20[aria-invalid=true]{--tw-ring-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.aria-invalid\\:ring-destructive\\/20[aria-invalid=true]{--tw-ring-color:color-mix(in oklab,var(--destructive)20%,transparent)}}.data-floating\\:absolute[data-floating]{position:absolute}.data-floating\\:rounded-md[data-floating]{border-radius:calc(var(--radius) - 2px)}.data-floating\\:border[data-floating]{border-style:var(--tw-border-style);border-width:1px}.data-floating\\:bg-background[data-floating]{background-color:var(--background)}.data-floating\\:p-1[data-floating]{padding:calc(var(--spacing)*1)}.data-floating\\:shadow-sm[data-floating]{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.data-\\[orientation\\=horizontal\\]\\:h-px[data-orientation=horizontal]{height:1px}.data-\\[orientation\\=horizontal\\]\\:w-full[data-orientation=horizontal]{width:100%}.data-\\[orientation\\=vertical\\]\\:h-full[data-orientation=vertical]{height:100%}.data-\\[orientation\\=vertical\\]\\:w-px[data-orientation=vertical]{width:1px}.data-\\[state\\=closed\\]\\:scale-0[data-state=closed]{--tw-scale-x:0%;--tw-scale-y:0%;--tw-scale-z:0%;scale:var(--tw-scale-x)var(--tw-scale-y)}.data-\\[state\\=closed\\]\\:scale-100[data-state=closed]{--tw-scale-x:100%;--tw-scale-y:100%;--tw-scale-z:100%;scale:var(--tw-scale-x)var(--tw-scale-y)}.data-\\[state\\=closed\\]\\:-rotate-90[data-state=closed]{rotate:-90deg}.data-\\[state\\=closed\\]\\:rotate-0[data-state=closed]{rotate:none}.data-\\[state\\=open\\]\\:scale-0[data-state=open]{--tw-scale-x:0%;--tw-scale-y:0%;--tw-scale-z:0%;scale:var(--tw-scale-x)var(--tw-scale-y)}.data-\\[state\\=open\\]\\:scale-100[data-state=open]{--tw-scale-x:100%;--tw-scale-y:100%;--tw-scale-z:100%;scale:var(--tw-scale-x)var(--tw-scale-y)}.data-\\[state\\=open\\]\\:rotate-0[data-state=open]{rotate:none}.data-\\[state\\=open\\]\\:rotate-90[data-state=open]{rotate:90deg}.data-\\[state\\=open\\]\\:bg-accent[data-state=open]{background-color:var(--accent)}.data-\\[state\\=open\\]\\:text-muted-foreground[data-state=open]{color:var(--muted-foreground)}@media (min-width:40rem){.sm\\:max-w-3xl{max-width:var(--container-3xl)}.sm\\:max-w-lg{max-width:var(--container-lg)}.sm\\:max-w-md{max-width:var(--container-md)}.sm\\:flex-row{flex-direction:row}.sm\\:justify-end{justify-content:flex-end}.sm\\:text-left{text-align:left}}@media (min-width:48rem){.md\\:pb-6{padding-bottom:calc(var(--spacing)*6)}}@container (min-width:28rem){.\\@md\\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.\\@md\\:flex-col{flex-direction:column}}.dark\\:border-input:is(.dark *){border-color:var(--input)}.dark\\:border-muted-foreground\\/15:is(.dark *){border-color:var(--muted-foreground)}@supports (color:color-mix(in lab, red, red)){.dark\\:border-muted-foreground\\/15:is(.dark *){border-color:color-mix(in oklab,var(--muted-foreground)15%,transparent)}}.dark\\:border-zinc-700\\/50:is(.dark *){border-color:#3f3f4680}@supports (color:color-mix(in lab, red, red)){.dark\\:border-zinc-700\\/50:is(.dark *){border-color:color-mix(in oklab,var(--color-zinc-700)50%,transparent)}}.dark\\:border-zinc-700\\/80:is(.dark *){border-color:#3f3f46cc}@supports (color:color-mix(in lab, red, red)){.dark\\:border-zinc-700\\/80:is(.dark *){border-color:color-mix(in oklab,var(--color-zinc-700)80%,transparent)}}.dark\\:bg-background:is(.dark *){background-color:var(--background)}.dark\\:bg-destructive\\/5:is(.dark *){background-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.dark\\:bg-destructive\\/5:is(.dark *){background-color:color-mix(in oklab,var(--destructive)5%,transparent)}}.dark\\:bg-destructive\\/60:is(.dark *){background-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.dark\\:bg-destructive\\/60:is(.dark *){background-color:color-mix(in oklab,var(--destructive)60%,transparent)}}.dark\\:bg-input\\/30:is(.dark *){background-color:var(--input)}@supports (color:color-mix(in lab, red, red)){.dark\\:bg-input\\/30:is(.dark *){background-color:color-mix(in oklab,var(--input)30%,transparent)}}.dark\\:bg-muted-foreground\\/20:is(.dark *){background-color:var(--muted-foreground)}@supports (color:color-mix(in lab, red, red)){.dark\\:bg-muted-foreground\\/20:is(.dark *){background-color:color-mix(in oklab,var(--muted-foreground)20%,transparent)}}.dark\\:bg-zinc-700:is(.dark *){background-color:var(--color-zinc-700)}.dark\\:bg-zinc-800:is(.dark *){background-color:var(--color-zinc-800)}.dark\\:bg-zinc-800\\/95:is(.dark *){background-color:#27272af2}@supports (color:color-mix(in lab, red, red)){.dark\\:bg-zinc-800\\/95:is(.dark *){background-color:color-mix(in oklab,var(--color-zinc-800)95%,transparent)}}.dark\\:stroke-\\[2\\.5px\\]:is(.dark *){stroke-width:2.5px}.dark\\:text-green-400:is(.dark *){color:var(--color-green-400)}.dark\\:text-red-200:is(.dark *){color:var(--color-red-200)}.dark\\:text-zinc-200:is(.dark *){color:var(--color-zinc-200)}.dark\\:text-zinc-400:is(.dark *){color:var(--color-zinc-400)}.dark\\:text-zinc-500:is(.dark *){color:var(--color-zinc-500)}.dark\\:shadow-black\\/30:is(.dark *){--tw-shadow-color:#0000004d}@supports (color:color-mix(in lab, red, red)){.dark\\:shadow-black\\/30:is(.dark *){--tw-shadow-color:color-mix(in oklab,color-mix(in oklab,var(--color-black)30%,transparent)var(--tw-shadow-alpha),transparent)}}.dark\\:shadow-black\\/40:is(.dark *){--tw-shadow-color:#0006}@supports (color:color-mix(in lab, red, red)){.dark\\:shadow-black\\/40:is(.dark *){--tw-shadow-color:color-mix(in oklab,color-mix(in oklab,var(--color-black)40%,transparent)var(--tw-shadow-alpha),transparent)}}@media (hover:hover){.dark\\:group-hover\\:text-white:is(.dark *):is(:where(.group):hover *){color:var(--color-white)}.dark\\:hover\\:bg-accent:is(.dark *):hover,.dark\\:hover\\:bg-accent\\/50:is(.dark *):hover{background-color:var(--accent)}@supports (color:color-mix(in lab, red, red)){.dark\\:hover\\:bg-accent\\/50:is(.dark *):hover{background-color:color-mix(in oklab,var(--accent)50%,transparent)}}.dark\\:hover\\:bg-accent\\/60:is(.dark *):hover{background-color:var(--accent)}@supports (color:color-mix(in lab, red, red)){.dark\\:hover\\:bg-accent\\/60:is(.dark *):hover{background-color:color-mix(in oklab,var(--accent)60%,transparent)}}.dark\\:hover\\:bg-input\\/50:is(.dark *):hover{background-color:var(--input)}@supports (color:color-mix(in lab, red, red)){.dark\\:hover\\:bg-input\\/50:is(.dark *):hover{background-color:color-mix(in oklab,var(--input)50%,transparent)}}.dark\\:hover\\:bg-muted-foreground\\/30:is(.dark *):hover{background-color:var(--muted-foreground)}@supports (color:color-mix(in lab, red, red)){.dark\\:hover\\:bg-muted-foreground\\/30:is(.dark *):hover{background-color:color-mix(in oklab,var(--muted-foreground)30%,transparent)}}.dark\\:hover\\:bg-zinc-700:is(.dark *):hover{background-color:var(--color-zinc-700)}.dark\\:hover\\:bg-zinc-700\\/50:is(.dark *):hover{background-color:#3f3f4680}@supports (color:color-mix(in lab, red, red)){.dark\\:hover\\:bg-zinc-700\\/50:is(.dark *):hover{background-color:color-mix(in oklab,var(--color-zinc-700)50%,transparent)}}}.dark\\:focus-visible\\:ring-destructive\\/40:is(.dark *):focus-visible{--tw-ring-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.dark\\:focus-visible\\:ring-destructive\\/40:is(.dark *):focus-visible{--tw-ring-color:color-mix(in oklab,var(--destructive)40%,transparent)}}.dark\\:aria-invalid\\:ring-destructive\\/40:is(.dark *)[aria-invalid=true]{--tw-ring-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.dark\\:aria-invalid\\:ring-destructive\\/40:is(.dark *)[aria-invalid=true]{--tw-ring-color:color-mix(in oklab,var(--destructive)40%,transparent)}}.\\[\\&_svg\\]\\:pointer-events-none svg{pointer-events:none}.\\[\\&_svg\\]\\:shrink-0 svg{flex-shrink:0}.\\[\\&_svg\\]\\:text-background svg{color:var(--background)}.\\[\\&_svg\\]\\:text-black svg{color:var(--color-black)}@media (hover:hover){.hover\\:\\[\\&_svg\\]\\:text-destructive:hover svg{color:var(--destructive)}}.\\[\\&_svg\\:not\\(\\[class\\*\\=\\'size-\\'\\]\\)\\]\\:size-4 svg:not([class*=size-]){width:calc(var(--spacing)*4);height:calc(var(--spacing)*4)}.\\[\\&\\:last-child\\>td\\:first-child\\]\\:rounded-bl-lg:last-child>td:first-child{border-bottom-left-radius:var(--radius)}.\\[\\&\\:last-child\\>td\\:last-child\\]\\:rounded-br-lg:last-child>td:last-child{border-bottom-right-radius:var(--radius)}.\\[\\&\\:nth-child\\(n\\+3\\)\\]\\:hidden:nth-child(n+3){display:none}@container (min-width:28rem){.\\@md\\:\\[\\&\\:nth-child\\(n\\+3\\)\\]\\:block:nth-child(n+3){display:block}}.\\[\\&\\:where\\(\\>\\*\\)\\]\\:col-start-2:where(){grid-column-start:2}.only\\:\\[\\&\\>\\#attachment-tile\\]\\:size-24:only-child>#attachment-tile{width:calc(var(--spacing)*24);height:calc(var(--spacing)*24)}.\\[\\&\\>\\.aui-thread-root\\]\\:bg-inherit>.aui-thread-root{background-color:inherit}.\\[\\&\\>a\\]\\:text-xs>a{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.\\[\\&\\>a\\]\\:no-underline>a{text-decoration-line:none}.\\[\\&\\>button\\]\\:rounded-full>button{border-radius:3.40282e38px}.\\[\\&\\>button\\]\\:bg-foreground\\/60>button{background-color:var(--foreground)}@supports (color:color-mix(in lab, red, red)){.\\[\\&\\>button\\]\\:bg-foreground\\/60>button{background-color:color-mix(in oklab,var(--foreground)60%,transparent)}}.\\[\\&\\>button\\]\\:p-1>button{padding:calc(var(--spacing)*1)}.\\[\\&\\>button\\]\\:opacity-100>button{opacity:1}.\\[\\&\\>button\\]\\:\\!ring-0>button{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(0px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor)!important;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)!important}@media (hover:hover){.\\[\\&\\>button\\]\\:hover\\:\\[\\&_svg\\]\\:text-destructive>button:hover svg{color:var(--destructive)}}.\\[\\&\\>li\\]\\:mt-0\\.5>li{margin-top:calc(var(--spacing)*.5)}.\\[\\&\\>li\\]\\:mt-1>li{margin-top:calc(var(--spacing)*1)}.\\[\\&\\>span\\]\\:text-xs>span{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.\\[\\&\\[align\\=center\\]\\]\\:text-center[align=center]{text-align:center}.\\[\\&\\[align\\=right\\]\\]\\:text-right[align=right]{text-align:right}}@keyframes shimmer{0%{transform:translate(-100%)}to{transform:translate(200%)}}@keyframes subtle-pulse{0%,to{opacity:1}50%{opacity:.85}}@keyframes smooth-slide-down{0%{opacity:0;transform:translateY(-8px)}to{opacity:1;transform:translateY(0)}}@keyframes fadeInUp{0%{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}@keyframes gradient-shift{0%,to{transform:translate(0%)translateY(0%)}25%{transform:translate(100%)translateY(100%)}50%{transform:translate(100%)translateY(0%)}75%{transform:translate(0%)translateY(100%)}}@keyframes float{0%,to{transform:translateY(0)translate(0)}33%{transform:translateY(-30px)translate(20px)}66%{transform:translateY(20px)translate(-20px)}}@keyframes float-delayed{0%,to{transform:translateY(0)translate(0)}33%{transform:translateY(30px)translate(-30px)}66%{transform:translateY(-20px)translate(20px)}}.tool-card-transition{transition:all .4s cubic-bezier(.34,1.56,.64,1)}.tool-card-smooth{transition:all .35s cubic-bezier(.4,0,.2,1)}.animate-fadeInUp{opacity:0;animation:.5s ease-out forwards fadeInUp}.animate-gradient-shift{background-size:200% 200%;animation:20s ease-in-out infinite gradient-shift}.animate-float-slow{animation:20s ease-in-out infinite float}.animate-float-delayed{animation:25s ease-in-out 5s infinite float-delayed}.no-scrollbar::-webkit-scrollbar{display:none}.no-scrollbar{-ms-overflow-style:none;scrollbar-width:none}@keyframes tool-border-rotate{0%{--tool-border-angle:0deg}to{--tool-border-angle:360deg}}@property --tool-border-angle{syntax:\"<angle>\";inherits:false;initial-value:0deg}.tool-border-calling{background:conic-gradient(from var(--tool-border-angle),transparent 0deg,transparent 60deg,#3b82f680 90deg,#60a5fab3 120deg,#93c5fd80 150deg,transparent 180deg,transparent 360deg);animation:1.5s linear infinite tool-border-rotate}.tool-border-success{background:#22c55e66;box-shadow:0 0 12px #22c55e4d,inset 0 0 8px #22c55e1a}.tool-border-error{background:#ef444466;box-shadow:0 0 12px #ef44444d,inset 0 0 8px #ef44441a}@keyframes pulse-success{0%,to{box-shadow:0 0 #22c55e66}50%{box-shadow:0 0 0 8px #22c55e00}}@keyframes shake{0%,to{transform:translate(0)}10%,30%,50%,70%,90%{transform:translate(-2px)}20%,40%,60%,80%{transform:translate(2px)}}.animate-pulse-success{animation:.6s ease-out pulse-success}.animate-shake{animation:.3s ease-out shake}@keyframes aui-pulse{50%{opacity:.5}}:where(.aui-md[data-status=running]):empty:after,:where(.aui-md[data-status=running])>:where(:not(ol):not(ul):not(pre)):last-child:after,:where(.aui-md[data-status=running])>pre:last-child code:after,:where(.aui-md[data-status=running])>:where(:is(ol,ul):last-child)>:where(li:last-child:not(:has(*>li))):after,:where(.aui-md[data-status=running])>:where(:is(ol,ul):last-child)>:where(li:last-child)>:where(:is(ol,ul):last-child)>:where(li:last-child:not(:has(*>li))):after,:where(.aui-md[data-status=running])>:where(:is(ol,ul):last-child)>:where(li:last-child)>:where(:is(ol,ul):last-child)>:where(li:last-child)>:where(:is(ol,ul):last-child)>:where(li:last-child):after{--aui-content:\"●\";content:var(--aui-content);margin-left:.25rem;margin-right:.25rem;font-family:ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;animation:2s cubic-bezier(.4,0,.6,1) infinite aui-pulse}.glass-pill{-webkit-backdrop-filter:blur(20px)saturate(150%);background:#0f172ad9;border:1px solid #ffffff0f;box-shadow:0 4px 16px #0003,inset 0 .5px #ffffff14}.glass-pill:before{content:\"\";border-radius:inherit;pointer-events:none;z-index:1;background:linear-gradient(#ffffff0a 0%,#0000 40%);position:absolute;inset:0}.glass-pill:after{display:none}.glass-pill-collapsed{-webkit-backdrop-filter:blur(20px)saturate(150%);background:#0f172ad9;border:1px solid #ffffff0f;box-shadow:0 2px 8px #0003,inset 0 .5px #ffffff14}.glass-pill-collapsed:before,.glass-pill-collapsed:after{display:none}.glass-pill-hovered{-webkit-backdrop-filter:blur(16px)saturate(140%);background:#0f172acc;border:1px solid #ffffff0f;box-shadow:0 2px 12px #0000002e}.glass-pill-hovered:before,.glass-pill-hovered:after{display:none}@keyframes glass-shimmer{0%{background-position:-200% 0}to{background-position:200% 0}}.glass-shimmer{background:linear-gradient(90deg,#ffffff14 0%,#ffffff26 50%,#ffffff14 100%) 0 0/200% 100%;animation:4s ease-in-out infinite glass-shimmer}.scrollbar-thin{scrollbar-width:thin;scrollbar-color:#fff3 transparent}.scrollbar-thin::-webkit-scrollbar{width:4px;height:4px}.scrollbar-thin::-webkit-scrollbar-thumb{background-color:#fff3;border-radius:9999px}.scrollbar-thin::-webkit-scrollbar-track{background-color:#0000}@property --tw-border-spacing-x{syntax:\"<length>\";inherits:false;initial-value:0}@property --tw-border-spacing-y{syntax:\"<length>\";inherits:false;initial-value:0}@property --tw-translate-x{syntax:\"*\";inherits:false;initial-value:0}@property --tw-translate-y{syntax:\"*\";inherits:false;initial-value:0}@property --tw-translate-z{syntax:\"*\";inherits:false;initial-value:0}@property --tw-rotate-x{syntax:\"*\";inherits:false}@property --tw-rotate-y{syntax:\"*\";inherits:false}@property --tw-rotate-z{syntax:\"*\";inherits:false}@property --tw-skew-x{syntax:\"*\";inherits:false}@property --tw-skew-y{syntax:\"*\";inherits:false}@property --tw-space-y-reverse{syntax:\"*\";inherits:false;initial-value:0}@property --tw-border-style{syntax:\"*\";inherits:false;initial-value:solid}@property --tw-gradient-position{syntax:\"*\";inherits:false}@property --tw-gradient-from{syntax:\"<color>\";inherits:false;initial-value:#0000}@property --tw-gradient-via{syntax:\"<color>\";inherits:false;initial-value:#0000}@property --tw-gradient-to{syntax:\"<color>\";inherits:false;initial-value:#0000}@property --tw-gradient-stops{syntax:\"*\";inherits:false}@property --tw-gradient-via-stops{syntax:\"*\";inherits:false}@property --tw-gradient-from-position{syntax:\"<length-percentage>\";inherits:false;initial-value:0%}@property --tw-gradient-via-position{syntax:\"<length-percentage>\";inherits:false;initial-value:50%}@property --tw-gradient-to-position{syntax:\"<length-percentage>\";inherits:false;initial-value:100%}@property --tw-leading{syntax:\"*\";inherits:false}@property --tw-font-weight{syntax:\"*\";inherits:false}@property --tw-tracking{syntax:\"*\";inherits:false}@property --tw-ordinal{syntax:\"*\";inherits:false}@property --tw-slashed-zero{syntax:\"*\";inherits:false}@property --tw-numeric-figure{syntax:\"*\";inherits:false}@property --tw-numeric-spacing{syntax:\"*\";inherits:false}@property --tw-numeric-fraction{syntax:\"*\";inherits:false}@property --tw-shadow{syntax:\"*\";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:\"*\";inherits:false}@property --tw-shadow-alpha{syntax:\"<percentage>\";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:\"*\";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:\"*\";inherits:false}@property --tw-inset-shadow-alpha{syntax:\"<percentage>\";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:\"*\";inherits:false}@property --tw-ring-shadow{syntax:\"*\";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:\"*\";inherits:false}@property --tw-inset-ring-shadow{syntax:\"*\";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:\"*\";inherits:false}@property --tw-ring-offset-width{syntax:\"<length>\";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:\"*\";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:\"*\";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:\"*\";inherits:false;initial-value:solid}@property --tw-blur{syntax:\"*\";inherits:false}@property --tw-brightness{syntax:\"*\";inherits:false}@property --tw-contrast{syntax:\"*\";inherits:false}@property --tw-grayscale{syntax:\"*\";inherits:false}@property --tw-hue-rotate{syntax:\"*\";inherits:false}@property --tw-invert{syntax:\"*\";inherits:false}@property --tw-opacity{syntax:\"*\";inherits:false}@property --tw-saturate{syntax:\"*\";inherits:false}@property --tw-sepia{syntax:\"*\";inherits:false}@property --tw-drop-shadow{syntax:\"*\";inherits:false}@property --tw-drop-shadow-color{syntax:\"*\";inherits:false}@property --tw-drop-shadow-alpha{syntax:\"<percentage>\";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:\"*\";inherits:false}@property --tw-backdrop-blur{syntax:\"*\";inherits:false}@property --tw-backdrop-brightness{syntax:\"*\";inherits:false}@property --tw-backdrop-contrast{syntax:\"*\";inherits:false}@property --tw-backdrop-grayscale{syntax:\"*\";inherits:false}@property --tw-backdrop-hue-rotate{syntax:\"*\";inherits:false}@property --tw-backdrop-invert{syntax:\"*\";inherits:false}@property --tw-backdrop-opacity{syntax:\"*\";inherits:false}@property --tw-backdrop-saturate{syntax:\"*\";inherits:false}@property --tw-backdrop-sepia{syntax:\"*\";inherits:false}@property --tw-duration{syntax:\"*\";inherits:false}@property --tw-ease{syntax:\"*\";inherits:false}@property --tw-scale-x{syntax:\"*\";inherits:false;initial-value:1}@property --tw-scale-y{syntax:\"*\";inherits:false;initial-value:1}@property --tw-scale-z{syntax:\"*\";inherits:false;initial-value:1}@keyframes spin{to{transform:rotate(360deg)}}@keyframes pulse{50%{opacity:.5}}";
8625
7689
  /**
8626
7690
  * Inject the WebMCP styles into the document head.
8627
7691
  * This is called automatically when registering the web component.
@@ -8734,93 +7798,64 @@ const VoiceMCPBridge = ({ children, tokenEndpoint, onError, onConnect, onDisconn
8734
7798
  * Can be used as a React component or converted to a web component.
8735
7799
  */
8736
7800
  const EmbeddedAgent = (t0) => {
8737
- const $ = c(30);
8738
- const { appId, apiBase, tokenEndpoint, autoConnectLocal: t1, viewMode: t2, enablePlanning: t3, initialTodos, onTodosChange, onToolsChange, onVoiceError, onVoiceConnect, onVoiceDisconnect } = t0;
7801
+ const $ = c(20);
7802
+ const { appId, apiBase, tokenEndpoint, autoConnectLocal: t1, viewMode: t2, onToolsChange, onVoiceError, onVoiceConnect, onVoiceDisconnect } = t0;
8739
7803
  const autoConnectLocal = t1 === void 0 ? true : t1;
8740
7804
  const viewMode = t2 === void 0 ? "pill" : t2;
8741
- const enablePlanning = t3 === void 0 ? false : t3;
8742
7805
  const chatApi = apiBase ? `${apiBase}/api/chat` : "/api/chat";
8743
- let t4;
7806
+ let t3;
8744
7807
  if ($[0] !== chatApi) {
8745
- t4 = new AssistantChatTransport({ api: chatApi });
7808
+ t3 = new AssistantChatTransport({ api: chatApi });
8746
7809
  $[0] = chatApi;
8747
- $[1] = t4;
8748
- } else t4 = $[1];
8749
- const transport = t4;
8750
- let t5;
7810
+ $[1] = t3;
7811
+ } else t3 = $[1];
7812
+ const transport = t3;
7813
+ let t4;
8751
7814
  if ($[2] !== transport) {
8752
- t5 = {
7815
+ t4 = {
8753
7816
  transport,
8754
7817
  sendAutomaticallyWhen: _temp
8755
7818
  };
8756
7819
  $[2] = transport;
8757
- $[3] = t5;
8758
- } else t5 = $[3];
8759
- const runtime = useChatRuntime(t5);
7820
+ $[3] = t4;
7821
+ } else t4 = $[3];
7822
+ const runtime = useChatRuntime(t4);
8760
7823
  const [, setIsHistoryOpen] = useState(false);
8761
- let t6;
7824
+ let t5;
8762
7825
  if ($[4] === Symbol.for("react.memo_cache_sentinel")) {
8763
- t6 = [];
8764
- $[4] = t6;
8765
- } else t6 = $[4];
8766
- useState(t6);
8767
- let t7;
7826
+ t5 = [];
7827
+ $[4] = t5;
7828
+ } else t5 = $[4];
7829
+ useState(t5);
7830
+ let t6;
8768
7831
  if ($[5] === Symbol.for("react.memo_cache_sentinel")) {
8769
- t7 = () => {
7832
+ t6 = () => {
8770
7833
  setIsHistoryOpen(true);
8771
7834
  };
8772
- $[5] = t7;
8773
- } else t7 = $[5];
8774
- const handleOpenHistory = t7;
7835
+ $[5] = t6;
7836
+ } else t6 = $[5];
7837
+ const handleOpenHistory = t6;
8775
7838
  const resolvedTokenEndpoint = tokenEndpoint || (apiBase ? `${apiBase}/api/realtime/session` : void 0);
8776
7839
  if (appId && typeof window !== "undefined") console.debug("[WebMCP] Initialized with app_id:", appId, "viewMode:", viewMode);
8777
- let t8;
7840
+ let t7;
8778
7841
  if ($[6] !== resolvedTokenEndpoint || $[7] !== viewMode) {
8779
- t8 = () => {
8780
- if (viewMode === "pill") return /* @__PURE__ */ jsx(Fragment, { children: /* @__PURE__ */ jsx(AgentPill, {
7842
+ const renderUI = () => {
7843
+ if (viewMode === "pill") return /* @__PURE__ */ jsx(AgentPill, {
8781
7844
  position: "bottom-center",
8782
7845
  onOpenHistory: handleOpenHistory,
8783
7846
  showVoiceButton: !!resolvedTokenEndpoint
8784
- }) });
7847
+ });
8785
7848
  return /* @__PURE__ */ jsx(AssistantModal, {});
8786
7849
  };
7850
+ t7 = () => /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx(MCPToolRegistry, {}), renderUI()] });
8787
7851
  $[6] = resolvedTokenEndpoint;
8788
7852
  $[7] = viewMode;
8789
- $[8] = t8;
8790
- } else t8 = $[8];
8791
- const renderUI = t8;
8792
- let t9;
8793
- if ($[9] !== enablePlanning || $[10] !== renderUI) {
8794
- t9 = () => /* @__PURE__ */ jsxs(Fragment, { children: [
8795
- /* @__PURE__ */ jsx(MCPToolRegistry, {}),
8796
- enablePlanning && /* @__PURE__ */ jsxs(Fragment, { children: [
8797
- /* @__PURE__ */ jsx(PlanToolRegistry, {}),
8798
- /* @__PURE__ */ jsx(UpdateTodosUI, {}),
8799
- /* @__PURE__ */ jsx(PlanApprovalUI, {})
8800
- ] }),
8801
- renderUI()
8802
- ] });
8803
- $[9] = enablePlanning;
8804
- $[10] = renderUI;
8805
- $[11] = t9;
8806
- } else t9 = $[11];
8807
- const renderRuntimeContent = t9;
8808
- let t10;
8809
- if ($[12] !== enablePlanning || $[13] !== initialTodos || $[14] !== onTodosChange) {
8810
- t10 = (content) => enablePlanning ? /* @__PURE__ */ jsx(PlanProvider, {
8811
- initialTodos,
8812
- onTodosChange,
8813
- children: content
8814
- }) : content;
8815
- $[12] = enablePlanning;
8816
- $[13] = initialTodos;
8817
- $[14] = onTodosChange;
8818
- $[15] = t10;
8819
- } else t10 = $[15];
8820
- const wrapWithPlanProvider = t10;
8821
- let t11;
8822
- if ($[16] !== onVoiceConnect || $[17] !== onVoiceDisconnect || $[18] !== onVoiceError || $[19] !== renderRuntimeContent || $[20] !== resolvedTokenEndpoint || $[21] !== runtime) {
8823
- t11 = resolvedTokenEndpoint ? /* @__PURE__ */ jsx(VoiceMCPBridge, {
7853
+ $[8] = t7;
7854
+ } else t7 = $[8];
7855
+ const renderRuntimeContent = t7;
7856
+ let t8;
7857
+ if ($[9] !== onVoiceConnect || $[10] !== onVoiceDisconnect || $[11] !== onVoiceError || $[12] !== renderRuntimeContent || $[13] !== resolvedTokenEndpoint || $[14] !== runtime) {
7858
+ t8 = resolvedTokenEndpoint ? /* @__PURE__ */ jsx(VoiceMCPBridge, {
8824
7859
  tokenEndpoint: resolvedTokenEndpoint,
8825
7860
  onError: onVoiceError,
8826
7861
  onConnect: onVoiceConnect,
@@ -8833,34 +7868,27 @@ const EmbeddedAgent = (t0) => {
8833
7868
  runtime,
8834
7869
  children: renderRuntimeContent()
8835
7870
  });
8836
- $[16] = onVoiceConnect;
8837
- $[17] = onVoiceDisconnect;
8838
- $[18] = onVoiceError;
8839
- $[19] = renderRuntimeContent;
8840
- $[20] = resolvedTokenEndpoint;
8841
- $[21] = runtime;
8842
- $[22] = t11;
8843
- } else t11 = $[22];
8844
- let t12;
8845
- if ($[23] !== t11 || $[24] !== wrapWithPlanProvider) {
8846
- t12 = wrapWithPlanProvider(t11);
8847
- $[23] = t11;
8848
- $[24] = wrapWithPlanProvider;
8849
- $[25] = t12;
8850
- } else t12 = $[25];
8851
- let t13;
8852
- if ($[26] !== autoConnectLocal || $[27] !== onToolsChange || $[28] !== t12) {
8853
- t13 = /* @__PURE__ */ jsx(MCPToolsProvider, {
7871
+ $[9] = onVoiceConnect;
7872
+ $[10] = onVoiceDisconnect;
7873
+ $[11] = onVoiceError;
7874
+ $[12] = renderRuntimeContent;
7875
+ $[13] = resolvedTokenEndpoint;
7876
+ $[14] = runtime;
7877
+ $[15] = t8;
7878
+ } else t8 = $[15];
7879
+ let t9;
7880
+ if ($[16] !== autoConnectLocal || $[17] !== onToolsChange || $[18] !== t8) {
7881
+ t9 = /* @__PURE__ */ jsx(MCPToolsProvider, {
8854
7882
  autoConnectLocal,
8855
7883
  onToolsChange,
8856
- children: t12
7884
+ children: t8
8857
7885
  });
8858
- $[26] = autoConnectLocal;
8859
- $[27] = onToolsChange;
8860
- $[28] = t12;
8861
- $[29] = t13;
8862
- } else t13 = $[29];
8863
- return t13;
7886
+ $[16] = autoConnectLocal;
7887
+ $[17] = onToolsChange;
7888
+ $[18] = t8;
7889
+ $[19] = t9;
7890
+ } else t9 = $[19];
7891
+ return t9;
8864
7892
  };
8865
7893
  /**
8866
7894
  * Web Component Definition
@@ -8873,8 +7901,7 @@ const WebMCPAgentElement = r2wc(EmbeddedAgent, { props: {
8873
7901
  apiBase: "string",
8874
7902
  tokenEndpoint: "string",
8875
7903
  autoConnectLocal: "boolean",
8876
- viewMode: "string",
8877
- enablePlanning: "boolean"
7904
+ viewMode: "string"
8878
7905
  } });
8879
7906
  /**
8880
7907
  * Register the custom element