@mcp-b/embedded-agent 1.2.9 → 1.2.10

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.
@@ -21,12 +21,12 @@ import { TabClientTransport } from "@mcp-b/transports";
21
21
  import { SSEClientTransport } from "@modelcontextprotocol/sdk/client/sse.js";
22
22
  import { StreamableHTTPClientTransport } from "@modelcontextprotocol/sdk/client/streamableHttp.js";
23
23
  import { jsonrepair } from "jsonrepair";
24
+ import { z } from "zod";
24
25
  import { useAgent } from "agents/react";
25
26
  import stableStringifyImpl from "fast-json-stable-stringify";
26
27
  import { getToolName, isToolUIPart } from "ai";
27
28
  import { useAgentChat } from "@cloudflare/ai-chat/react";
28
29
  import { useWebMCP } from "@mcp-b/react-webmcp";
29
- import { z } from "zod";
30
30
  import { createPortal } from "react-dom";
31
31
 
32
32
  //#region src/components/ui/tooltip.tsx
@@ -1628,7 +1628,7 @@ function MCPToolsProvider({ children, autoConnectLocal = true, onToolsChange, on
1628
1628
  const error = err instanceof Error ? err : new Error(String(err));
1629
1629
  console.error(`[MCPToolsProvider:${id}] Connection failed:`, error);
1630
1630
  sourceState.state = "error";
1631
- sourceState.error = error;
1631
+ sourceState.error = error.message;
1632
1632
  forceUpdate({});
1633
1633
  }
1634
1634
  }, [rebuildTools, rebuildPrompts]);
@@ -4927,11 +4927,637 @@ function useOptionalVoiceToolApproval() {
4927
4927
  }
4928
4928
 
4929
4929
  //#endregion
4930
- //#region ../cloud-mirror-types/dist/index.js
4930
+ //#region ../shared-types/dist/schemas/thread.js
4931
+ const ThreadStatusSchema = z.enum(["regular", "archived"]);
4932
+ const ThreadSummarySchema = z.object({
4933
+ id: z.string(),
4934
+ status: ThreadStatusSchema,
4935
+ title: z.string().optional(),
4936
+ remoteId: z.string().optional(),
4937
+ externalId: z.string().optional(),
4938
+ organizationId: z.string(),
4939
+ messageCount: z.number(),
4940
+ totalTokens: z.number().optional(),
4941
+ lastMessageAt: z.number().nullable(),
4942
+ createdAt: z.number()
4943
+ });
4944
+ const ThreadWithDeletedSchema = z.union([ThreadSummarySchema, ThreadSummarySchema.omit({ status: true }).extend({ status: z.literal("deleted") })]);
4945
+ const ThreadMetadataSchema = z.object({
4946
+ threadId: z.string(),
4947
+ userId: z.string(),
4948
+ threadManagerName: z.string().optional(),
4949
+ organizationId: z.string(),
4950
+ title: z.string().nullable(),
4951
+ createdAt: z.number()
4952
+ });
4953
+ const CreateThreadParamsSchema = z.object({
4954
+ title: z.string().optional(),
4955
+ organizationId: z.string().optional()
4956
+ });
4957
+ const CreateThreadResultSchema = z.object({ threadId: z.string() });
4958
+ const ThreadUpdateParamsSchema = z.object({
4959
+ title: z.string().optional(),
4960
+ messageCount: z.number().optional(),
4961
+ totalTokensDelta: z.number().optional(),
4962
+ lastMessageAt: z.number().optional()
4963
+ });
4964
+ const ThreadManagerContextSchema = z.object({
4965
+ endUserId: z.string(),
4966
+ organizationId: z.string(),
4967
+ externalId: z.string()
4968
+ });
4969
+
4970
+ //#endregion
4971
+ //#region ../shared-types/dist/schemas/thread-manager-state.js
4972
+ const ThreadManagerStateSchema = z.object({
4973
+ threads: z.array(ThreadWithDeletedSchema),
4974
+ endUserId: z.string().nullable(),
4975
+ organizationId: z.string().nullable(),
4976
+ externalId: z.string().nullable(),
4977
+ isAnonymous: z.boolean().optional(),
4978
+ anthropicApiKey: z.string().optional(),
4979
+ lastSelectedThreadId: z.string().nullable().optional()
4980
+ });
4981
+
4982
+ //#endregion
4983
+ //#region ../shared-types/dist/schemas/tool-source.js
4984
+ const ToolSourceSelectorSchema = z.object({
4985
+ sourceId: z.string(),
4986
+ tabId: z.string()
4987
+ });
4988
+ const ToolSourceSchema = z.object({
4989
+ sourceId: z.string(),
4990
+ tabId: z.string(),
4991
+ origin: z.string().optional(),
4992
+ url: z.string().optional(),
4993
+ title: z.string().optional(),
4994
+ iconUrl: z.string().optional(),
4995
+ connectedAt: z.number(),
4996
+ lastSeenAt: z.number().optional()
4997
+ });
4998
+ const ToolSourceInfoSchema = ToolSourceSchema.extend({ toolCount: z.number() });
4999
+ const ToolConnectionMetadataSchema = z.object({
5000
+ origin: z.string().optional(),
5001
+ url: z.string().optional(),
5002
+ title: z.string().optional(),
5003
+ iconUrl: z.string().optional(),
5004
+ tabId: z.string()
5005
+ });
5006
+ const ThreadToolSelectionSchema = z.object({ selectedSources: z.array(ToolSourceSelectorSchema) });
5007
+ const ToolSourcesUpdateMessageSchema = z.object({
5008
+ type: z.literal("tool_sources"),
5009
+ sources: z.array(ToolSourceInfoSchema)
5010
+ });
5011
+
5012
+ //#endregion
5013
+ //#region ../shared-types/dist/schemas/tool-sync.js
5014
+ const ToolAnnotationsSchema = z.object({
5015
+ title: z.string().optional(),
5016
+ readOnlyHint: z.boolean().optional(),
5017
+ destructiveHint: z.boolean().optional(),
5018
+ idempotentHint: z.boolean().optional(),
5019
+ openWorldHint: z.boolean().optional()
5020
+ }).passthrough();
5021
+ const SyncedToolSchemaSchema = z.object({
5022
+ name: z.string(),
5023
+ description: z.string().optional(),
5024
+ inputSchema: z.record(z.unknown()).optional(),
5025
+ annotations: ToolAnnotationsSchema.optional(),
5026
+ sources: z.array(ToolSourceSchema).optional()
5027
+ });
5028
+
5029
+ //#endregion
5030
+ //#region ../shared-types/dist/schemas/tool-call-metadata.js
5031
+ /**
5032
+ * Metadata captured during tool execution.
5033
+ * Stored in the `artifact` field of tool-call message parts in assistant-ui.
5034
+ * This data persists in the thread and can be synced externally.
5035
+ */
5036
+ const ToolCallMetadataSchema = z.object({
5037
+ startedAt: z.number(),
5038
+ duration: z.number(),
5039
+ sourceId: z.string(),
5040
+ isError: z.boolean().optional(),
5041
+ wasAborted: z.boolean().optional()
5042
+ });
5043
+
5044
+ //#endregion
5045
+ //#region ../shared-types/dist/schemas/rpc-messages.js
5046
+ const HubToSiteMessageSchema = z.discriminatedUnion("type", [z.object({
5047
+ type: z.literal("invoke"),
5048
+ callId: z.string(),
5049
+ toolName: z.string(),
5050
+ args: z.record(z.unknown()).optional()
5051
+ }), z.object({ type: z.literal("ping") })]);
5052
+ const SiteToHubMessageSchema = z.discriminatedUnion("type", [z.object({
5053
+ type: z.literal("result"),
5054
+ callId: z.string(),
5055
+ result: z.object({
5056
+ content: z.array(z.unknown()),
5057
+ isError: z.boolean().optional()
5058
+ }).passthrough()
5059
+ }), z.object({ type: z.literal("pong") })]);
5060
+
5061
+ //#endregion
5062
+ //#region ../auth/dist/oidc/validators/token-size.js
4931
5063
  /**
4932
- * Determine whether a tool should be considered destructive.
5064
+ * Token Size Validator
5065
+ *
5066
+ * Validates JWT token size before parsing to prevent DoS attacks.
5067
+ *
5068
+ * Security:
5069
+ * - Rejects oversized tokens before JSON parsing
5070
+ * - Prevents resource exhaustion from maliciously large tokens
5071
+ * - Default limit: 16KB (sufficient for normal OIDC tokens)
5072
+ */
5073
+ /**
5074
+ * Default maximum token size in bytes (16KB).
5075
+ * Normal OIDC tokens are typically 1-4KB.
5076
+ */
5077
+ const DEFAULT_MAX_TOKEN_SIZE_BYTES = 16 * 1024;
5078
+
5079
+ //#endregion
5080
+ //#region ../auth/dist/idp/constants.js
5081
+ /**
5082
+ * IDP Constants
5083
+ *
5084
+ * Constants for supported identity providers.
5085
+ */
5086
+ /**
5087
+ * Supported IDP types.
5088
+ */
5089
+ const IDP_TYPE = {
5090
+ OKTA: "okta",
5091
+ AZURE: "azure",
5092
+ AUTH0: "auth0",
5093
+ GOOGLE: "google",
5094
+ CUSTOM_OIDC: "custom_oidc"
5095
+ };
5096
+ /**
5097
+ * All IDP type values as an array.
5098
+ * Useful for Zod enums and iteration.
5099
+ */
5100
+ const IDP_TYPES = Object.values(IDP_TYPE);
5101
+ /**
5102
+ * Display names for IDP types.
5103
+ * Uses `as const satisfies` to ensure all IDP types have display names.
5104
+ */
5105
+ const IDP_DISPLAY_NAMES = {
5106
+ [IDP_TYPE.OKTA]: "Okta",
5107
+ [IDP_TYPE.AZURE]: "Azure AD",
5108
+ [IDP_TYPE.AUTH0]: "Auth0",
5109
+ [IDP_TYPE.GOOGLE]: "Google Workspace",
5110
+ [IDP_TYPE.CUSTOM_OIDC]: "Custom OIDC Provider"
5111
+ };
5112
+ /**
5113
+ * IDP types that require domain configuration.
5114
+ */
5115
+ const IDP_TYPES_REQUIRING_DOMAIN$1 = [
5116
+ IDP_TYPE.OKTA,
5117
+ IDP_TYPE.AZURE,
5118
+ IDP_TYPE.AUTH0
5119
+ ];
5120
+ /**
5121
+ * IDP types that require issuer configuration.
5122
+ */
5123
+ const IDP_TYPES_REQUIRING_ISSUER = [IDP_TYPE.CUSTOM_OIDC];
5124
+ /**
5125
+ * Known issuer URL patterns for each IDP type.
5126
+ * Used to construct expected issuer URLs from IDP type and domain.
5127
+ */
5128
+ const IDP_ISSUER_PATTERNS = {
5129
+ [IDP_TYPE.OKTA]: (domain) => `https://${domain}`,
5130
+ [IDP_TYPE.AZURE]: (domain) => `https://login.microsoftonline.com/${domain}/v2.0`,
5131
+ [IDP_TYPE.AUTH0]: (domain) => `https://${domain}/`,
5132
+ [IDP_TYPE.GOOGLE]: () => "https://accounts.google.com",
5133
+ [IDP_TYPE.CUSTOM_OIDC]: null
5134
+ };
5135
+
5136
+ //#endregion
5137
+ //#region ../auth/dist/oidc/jwt-verifier.js
5138
+ /**
5139
+ * Default max token age in seconds (24 hours).
5140
+ */
5141
+ const DEFAULT_MAX_TOKEN_AGE_SECONDS$1 = 1440 * 60;
5142
+
5143
+ //#endregion
5144
+ //#region ../auth/dist/oidc/validators/expiration.js
5145
+ /**
5146
+ * Expiration Validator
5147
+ *
5148
+ * Validates JWT expiration (exp) and issued at (iat) claims.
5149
+ *
5150
+ * Security:
5151
+ * - Ensures token is not expired
5152
+ * - Enforces maximum token age (exp - iat <= 24h by default)
5153
+ * - Allows configurable clock skew tolerance
5154
+ */
5155
+ /**
5156
+ * Default maximum token age in seconds (24 hours).
5157
+ * Tokens with (exp - iat) > this value are rejected.
5158
+ */
5159
+ const DEFAULT_MAX_TOKEN_AGE_SECONDS = 1440 * 60;
5160
+
5161
+ //#endregion
5162
+ //#region ../auth/dist/idp/schemas.js
5163
+ /**
5164
+ * IDP Schemas
5165
+ *
5166
+ * Zod schemas for IDP configuration validation with type inference.
5167
+ */
5168
+ /**
5169
+ * IDP type schema.
5170
+ */
5171
+ const IdpTypeSchema = z.enum([
5172
+ IDP_TYPE.OKTA,
5173
+ IDP_TYPE.AZURE,
5174
+ IDP_TYPE.AUTH0,
5175
+ IDP_TYPE.GOOGLE,
5176
+ IDP_TYPE.CUSTOM_OIDC
5177
+ ]).nullable();
5178
+ /**
5179
+ * Domain format validation.
5180
+ * Domain should be a hostname without protocol or trailing slash.
5181
+ */
5182
+ const domainSchema = z.string().min(1).refine((val) => !val.includes("://"), { message: "Domain should not include protocol (http:// or https://)" }).refine((val) => !val.endsWith("/"), { message: "Domain should not have trailing slash" }).nullable().optional();
5183
+ /**
5184
+ * Issuer URL validation.
5185
+ * Must be a valid HTTP(S) URL.
5186
+ */
5187
+ const issuerSchema = z.string().refine((val) => {
5188
+ try {
5189
+ const url = new URL(val);
5190
+ return url.protocol === "https:" || url.protocol === "http:";
5191
+ } catch {
5192
+ return false;
5193
+ }
5194
+ }, { message: "Issuer must be a valid HTTP(S) URL" }).nullable().optional();
5195
+ /**
5196
+ * Client ID validation.
5197
+ * Can be null/undefined, but if provided must not be empty.
5198
+ */
5199
+ const clientIdSchema = z.string().refine((val) => val.trim().length > 0, { message: "Client ID cannot be empty" }).nullable().optional();
5200
+ /**
5201
+ * Base IDP configuration schema (without cross-field validation).
5202
+ */
5203
+ const BaseIdpConfigSchema = z.object({
5204
+ type: IdpTypeSchema,
5205
+ clientId: clientIdSchema,
5206
+ domain: domainSchema,
5207
+ issuer: issuerSchema
5208
+ });
5209
+ /**
5210
+ * IDP types that require domain configuration.
5211
+ */
5212
+ const IDP_TYPES_REQUIRING_DOMAIN = [
5213
+ IDP_TYPE.OKTA,
5214
+ IDP_TYPE.AZURE,
5215
+ IDP_TYPE.AUTH0
5216
+ ];
5217
+ /**
5218
+ * IDP configuration schema with cross-field validation.
5219
+ *
5220
+ * Note: Unknown IDP types are caught by Zod's enum validation before superRefine runs.
5221
+ */
5222
+ const IdpConfigSchema = BaseIdpConfigSchema.superRefine((config, ctx) => {
5223
+ if (!config.type) return;
5224
+ if (IDP_TYPES_REQUIRING_DOMAIN.includes(config.type)) {
5225
+ if (!config.domain) {
5226
+ const displayName = IDP_DISPLAY_NAMES[config.type];
5227
+ ctx.addIssue({
5228
+ code: z.ZodIssueCode.custom,
5229
+ message: `${displayName} requires domain configuration`,
5230
+ path: ["domain"]
5231
+ });
5232
+ }
5233
+ }
5234
+ if (config.type === IDP_TYPE.CUSTOM_OIDC && !config.issuer) ctx.addIssue({
5235
+ code: z.ZodIssueCode.custom,
5236
+ message: "Custom OIDC Provider requires issuer URL configuration",
5237
+ path: ["issuer"]
5238
+ });
5239
+ });
5240
+
5241
+ //#endregion
5242
+ //#region ../auth/dist/idp/domain-validation.js
5243
+ /**
5244
+ * IDP Domain Validation
5245
+ *
5246
+ * Enhanced validation for IDP configurations with security checks:
5247
+ * - Typosquat prevention (validates domain patterns for known IDPs)
5248
+ * - ReDoS mitigation (length checks before regex matching)
5249
+ * - Wildcard rejection (prevents subdomain takeover attacks)
5250
+ */
5251
+ /**
5252
+ * Domain patterns for known IDP providers.
5253
+ * Used to prevent typosquat attacks (e.g., okta.com.evil.com).
5254
+ *
5255
+ * These patterns enforce that domains match the expected format for each provider,
5256
+ * preventing attackers from using lookalike domains.
5257
+ */
5258
+ const IDP_DOMAIN_PATTERNS = {
5259
+ [IDP_TYPE.OKTA]: /^[\w-]+\.okta\.com$|^[\w-]+\.oktapreview\.com$/,
5260
+ [IDP_TYPE.AUTH0]: /^[\w-]+\.auth0\.com$|^[\w-]+\.us\.auth0\.com$|^[\w-]+\.eu\.auth0\.com$|^[\w-]+\.au\.auth0\.com$/
5261
+ };
5262
+
5263
+ //#endregion
5264
+ //#region ../auth/dist/errors/codes.js
5265
+ /**
5266
+ * Error Codes - Single Source of Truth
5267
+ *
5268
+ * All authentication and authorization error codes are defined here.
5269
+ * This is the canonical source - other packages should import from here.
5270
+ *
5271
+ * Error codes are organized into categories:
5272
+ * - Token validation errors (from JWT verification)
5273
+ * - Key/JWKS errors (from key fetching)
5274
+ * - Configuration errors (from IDP setup)
5275
+ * - Provider-specific errors (Azure, etc.)
5276
+ * - Application-level errors (org lookup, origin validation)
5277
+ */
5278
+ /**
5279
+ * Token validation error codes.
5280
+ * Returned when JWT verification fails.
5281
+ */
5282
+ const TOKEN_ERROR_CODES = {
5283
+ TOKEN_REQUIRED: "TOKEN_REQUIRED",
5284
+ TOKEN_EXPIRED: "TOKEN_EXPIRED",
5285
+ INVALID_TOKEN: "INVALID_TOKEN",
5286
+ INVALID_SIGNATURE: "INVALID_SIGNATURE",
5287
+ INVALID_ISSUER: "INVALID_ISSUER",
5288
+ INVALID_AUDIENCE: "INVALID_AUDIENCE",
5289
+ INVALID_ALGORITHM: "INVALID_ALGORITHM",
5290
+ INVALID_AZP: "INVALID_AZP",
5291
+ INVALID_TOKEN_AGE: "INVALID_TOKEN_AGE",
5292
+ TOKEN_TOO_LARGE: "TOKEN_TOO_LARGE"
5293
+ };
5294
+ /**
5295
+ * Key/JWKS error codes.
5296
+ * Returned when fetching or using signing keys fails.
5297
+ */
5298
+ const KEY_ERROR_CODES = {
5299
+ KEY_NOT_FOUND: "KEY_NOT_FOUND",
5300
+ JWKS_FETCH_FAILED: "JWKS_FETCH_FAILED",
5301
+ JWKS_RATE_LIMITED: "JWKS_RATE_LIMITED"
5302
+ };
5303
+ /**
5304
+ * Configuration error codes.
5305
+ * Returned when IDP or security configuration is invalid.
5306
+ */
5307
+ const CONFIG_ERROR_CODES = {
5308
+ IDP_NOT_CONFIGURED: "IDP_NOT_CONFIGURED",
5309
+ SSRF_BLOCKED: "SSRF_BLOCKED"
5310
+ };
5311
+ /**
5312
+ * Provider-specific error codes.
5313
+ */
5314
+ const PROVIDER_ERROR_CODES = { AZURE_TID_MISMATCH: "AZURE_TID_MISMATCH" };
5315
+ /**
5316
+ * Application-level error codes.
5317
+ * Returned by application logic (not JWT verification).
5318
+ */
5319
+ const APP_ERROR_CODES = {
5320
+ ORG_NOT_FOUND: "ORG_NOT_FOUND",
5321
+ ORIGIN_NOT_ALLOWED: "ORIGIN_NOT_ALLOWED",
5322
+ DATABASE_ERROR: "DATABASE_ERROR",
5323
+ LOCALHOST_REQUIRED: "LOCALHOST_REQUIRED",
5324
+ API_KEY_REQUIRED: "API_KEY_REQUIRED",
5325
+ FEATURE_NOT_IMPLEMENTED: "FEATURE_NOT_IMPLEMENTED",
5326
+ INTERNAL_ERROR: "INTERNAL_ERROR"
5327
+ };
5328
+ /**
5329
+ * All error codes combined.
5330
+ * Use this for exhaustive switch statements.
5331
+ */
5332
+ const AUTH_ERROR_CODE = {
5333
+ ...TOKEN_ERROR_CODES,
5334
+ ...KEY_ERROR_CODES,
5335
+ ...CONFIG_ERROR_CODES,
5336
+ ...PROVIDER_ERROR_CODES,
5337
+ ...APP_ERROR_CODES
5338
+ };
5339
+ /**
5340
+ * HTTP status codes for each error code.
5341
+ * Used for API responses.
5342
+ */
5343
+ const ERROR_HTTP_STATUS = {
5344
+ [AUTH_ERROR_CODE.TOKEN_REQUIRED]: 401,
5345
+ [AUTH_ERROR_CODE.TOKEN_EXPIRED]: 401,
5346
+ [AUTH_ERROR_CODE.INVALID_TOKEN]: 401,
5347
+ [AUTH_ERROR_CODE.INVALID_SIGNATURE]: 401,
5348
+ [AUTH_ERROR_CODE.INVALID_ISSUER]: 401,
5349
+ [AUTH_ERROR_CODE.INVALID_AUDIENCE]: 401,
5350
+ [AUTH_ERROR_CODE.INVALID_ALGORITHM]: 401,
5351
+ [AUTH_ERROR_CODE.INVALID_AZP]: 401,
5352
+ [AUTH_ERROR_CODE.INVALID_TOKEN_AGE]: 401,
5353
+ [AUTH_ERROR_CODE.TOKEN_TOO_LARGE]: 400,
5354
+ [AUTH_ERROR_CODE.KEY_NOT_FOUND]: 401,
5355
+ [AUTH_ERROR_CODE.JWKS_FETCH_FAILED]: 502,
5356
+ [AUTH_ERROR_CODE.JWKS_RATE_LIMITED]: 429,
5357
+ [AUTH_ERROR_CODE.IDP_NOT_CONFIGURED]: 500,
5358
+ [AUTH_ERROR_CODE.SSRF_BLOCKED]: 400,
5359
+ [AUTH_ERROR_CODE.AZURE_TID_MISMATCH]: 401,
5360
+ [AUTH_ERROR_CODE.ORG_NOT_FOUND]: 404,
5361
+ [AUTH_ERROR_CODE.ORIGIN_NOT_ALLOWED]: 403,
5362
+ [AUTH_ERROR_CODE.DATABASE_ERROR]: 503,
5363
+ [AUTH_ERROR_CODE.LOCALHOST_REQUIRED]: 403,
5364
+ [AUTH_ERROR_CODE.API_KEY_REQUIRED]: 400,
5365
+ [AUTH_ERROR_CODE.FEATURE_NOT_IMPLEMENTED]: 501,
5366
+ [AUTH_ERROR_CODE.INTERNAL_ERROR]: 500
5367
+ };
5368
+ /**
5369
+ * Type guard to check if a string is a valid AuthErrorCode.
5370
+ */
5371
+ function isAuthErrorCode(code) {
5372
+ return Object.values(AUTH_ERROR_CODE).includes(code);
5373
+ }
5374
+
5375
+ //#endregion
5376
+ //#region ../shared-types/dist/schemas/init-context.js
5377
+ /**
5378
+ * Zod schema for AuthErrorCode.
5379
+ * Built from the AUTH_ERROR_CODE constant to stay in sync with @char-ai/auth.
5380
+ */
5381
+ const authErrorCodeValues = Object.values(AUTH_ERROR_CODE);
5382
+ const AuthErrorCodeSchema = z.enum(authErrorCodeValues);
5383
+ /**
5384
+ * Zod schema for ErrorCallToAction.
5385
+ * Validates the structure defined in @char-ai/auth.
5386
+ */
5387
+ const ErrorCallToActionSchema = z.object({
5388
+ steps: z.array(z.string()),
5389
+ examples: z.array(z.string()).optional()
5390
+ });
5391
+ /**
5392
+ * Zod schema for ErrorContext.
5393
+ * Validates the structure defined in @char-ai/auth.
5394
+ * Uses passthrough to allow additional context properties.
5395
+ *
5396
+ * Note: We don't use `satisfies` here because Zod's passthrough produces
5397
+ * `unknown` for additional properties, while ErrorContext uses `string | undefined`.
5398
+ * The TypeScript type is re-exported from @char-ai/auth for type safety.
5399
+ */
5400
+ const ErrorContextSchema = z.object({
5401
+ issuer: z.string().optional(),
5402
+ configuredIssuer: z.string().optional(),
5403
+ currentDomain: z.string().optional(),
5404
+ allowedDomains: z.array(z.string()).optional(),
5405
+ expectedIssuer: z.string().optional(),
5406
+ actualIssuer: z.string().optional(),
5407
+ missingField: z.string().optional()
5408
+ }).passthrough();
5409
+ const InitContextResultSchema = z.object({
5410
+ success: z.boolean(),
5411
+ endUserId: z.string(),
5412
+ organizationId: z.string().optional(),
5413
+ isAnonymous: z.boolean().optional(),
5414
+ hasOrgContext: z.boolean().optional(),
5415
+ message: z.string(),
5416
+ errorCode: AuthErrorCodeSchema.optional(),
5417
+ errorTitle: z.string().optional(),
5418
+ callToAction: ErrorCallToActionSchema.optional(),
5419
+ dashboardLink: z.string().optional(),
5420
+ docsLink: z.string().optional(),
5421
+ context: ErrorContextSchema.optional(),
5422
+ recoverable: z.boolean().optional(),
5423
+ debugInfo: z.string().optional()
5424
+ });
5425
+
5426
+ //#endregion
5427
+ //#region ../shared-types/dist/schemas/tool-approval.js
5428
+ const ToolApprovalModeSchema = z.enum(["auto", "ask"]);
5429
+ const ToolApprovalSettingsSchema = z.object({ mode: ToolApprovalModeSchema });
5430
+
5431
+ //#endregion
5432
+ //#region ../shared-types/dist/schemas/planning.js
5433
+ const TodoStatusSchema = z.enum([
5434
+ "new",
5435
+ "pending",
5436
+ "in-progress",
5437
+ "done"
5438
+ ]);
5439
+ const TodoSchema = z.object({
5440
+ text: z.string(),
5441
+ status: TodoStatusSchema
5442
+ });
5443
+ const UpdateTodosInputSchema = z.object({
5444
+ new: z.array(z.string()),
5445
+ inProgress: z.array(z.number()),
5446
+ done: z.array(z.number()),
5447
+ clearPreviouslyDone: z.boolean(),
5448
+ insertAt: z.number().optional()
5449
+ });
5450
+ const UpdateTodosResultSchema = z.object({ todos: z.array(TodoSchema) });
5451
+ const AskForPlanApprovalInputSchema = z.object({ explainer: z.string() });
5452
+ const AskForPlanApprovalResultSchema = z.object({
5453
+ todos: z.array(TodoSchema),
5454
+ approved: z.boolean()
5455
+ });
5456
+
5457
+ //#endregion
5458
+ //#region ../shared-types/dist/schemas/mcp-client.js
5459
+ /**
5460
+ * MCP Client Types
4933
5461
  *
4934
- * Defaults to destructive when annotations are missing to follow MCP defaults.
5462
+ * Types for MCP client connections and tool management.
5463
+ * These extend/complement the MCP SDK types.
5464
+ */
5465
+ /**
5466
+ * Simple connection state for MCP clients
5467
+ */
5468
+ const MCPClientStateSchema = z.enum([
5469
+ "idle",
5470
+ "connecting",
5471
+ "connected",
5472
+ "error"
5473
+ ]);
5474
+ /**
5475
+ * Extended connection state for MCP clients with more granular states.
5476
+ * Useful for UI feedback during connection lifecycle.
5477
+ */
5478
+ const MCPConnectionStateSchema = z.enum([
5479
+ "idle",
5480
+ "discovering",
5481
+ "connecting",
5482
+ "loading",
5483
+ "ready",
5484
+ "error"
5485
+ ]);
5486
+ /**
5487
+ * Configuration for tab-based MCP sources (same-tab or iframe)
5488
+ */
5489
+ const TabSourceConfigSchema = z.object({
5490
+ type: z.literal("tab"),
5491
+ targetOrigin: z.string().optional(),
5492
+ channelId: z.string().optional()
5493
+ });
5494
+ /**
5495
+ * Configuration for HTTP-based MCP sources (remote servers)
5496
+ */
5497
+ const HttpSourceConfigSchema = z.object({
5498
+ type: z.literal("http"),
5499
+ url: z.string(),
5500
+ authToken: z.string().optional(),
5501
+ timeout: z.number().optional(),
5502
+ autoReconnect: z.boolean().optional(),
5503
+ transportType: z.enum([
5504
+ "auto",
5505
+ "http",
5506
+ "sse"
5507
+ ]).optional(),
5508
+ customHeaders: z.record(z.string()).optional()
5509
+ });
5510
+ /**
5511
+ * Unified configuration for MCP sources
5512
+ */
5513
+ const MCPSourceConfigSchema = z.discriminatedUnion("type", [TabSourceConfigSchema, HttpSourceConfigSchema]);
5514
+ /**
5515
+ * Tool annotations schema (mirrors MCP SDK Tool.annotations)
5516
+ * Note: This is a more complete version for tools with source tracking
5517
+ */
5518
+ const ToolAnnotationsFullSchema = z.object({
5519
+ title: z.string().optional(),
5520
+ readOnlyHint: z.boolean().optional(),
5521
+ destructiveHint: z.boolean().optional(),
5522
+ idempotentHint: z.boolean().optional(),
5523
+ openWorldHint: z.boolean().optional()
5524
+ }).passthrough();
5525
+ /**
5526
+ * Tool with source tracking for multi-source tool management.
5527
+ * The _sourceId identifies which client to route tool calls to.
5528
+ *
5529
+ * This extends the MCP SDK Tool interface shape.
5530
+ */
5531
+ const ToolWithSourceSchema = z.object({
5532
+ name: z.string(),
5533
+ description: z.string().optional(),
5534
+ inputSchema: z.record(z.unknown()).optional(),
5535
+ annotations: ToolAnnotationsFullSchema.optional(),
5536
+ _sourceId: z.string()
5537
+ });
5538
+ /**
5539
+ * State of an MCP source connection.
5540
+ *
5541
+ * Note: This schema uses z.unknown() for arrays of SDK types (Tool, Resource, etc.)
5542
+ * because we don't want to re-define those schemas here. Runtime validation
5543
+ * of these arrays should be done at the boundary where SDK types are received.
5544
+ */
5545
+ const MCPSourceSchema = z.object({
5546
+ id: z.string(),
5547
+ config: MCPSourceConfigSchema,
5548
+ state: MCPClientStateSchema,
5549
+ error: z.string().nullable(),
5550
+ tools: z.array(z.unknown()),
5551
+ resources: z.array(z.unknown()),
5552
+ resourceTemplates: z.array(z.unknown()),
5553
+ prompts: z.array(z.unknown())
5554
+ });
5555
+
5556
+ //#endregion
5557
+ //#region ../shared-types/dist/utils/tool-destructive.js
5558
+ /**
5559
+ * Determine whether a tool should be considered destructive.
5560
+ * Defaults to destructive when annotations are missing (MCP default).
4935
5561
  */
4936
5562
  function isToolDestructive(annotations) {
4937
5563
  if (!annotations) return true;
@@ -5400,6 +6026,38 @@ function _temp2$5(c$1) {
5400
6026
  //#region src/components/assistant-ui/thread.tsx
5401
6027
  /** Glassmorphic button styles (from WebMCP extension) - theme-aware */
5402
6028
  const glassmorphicButtonClass$1 = "h-8 w-8 rounded-full border border-border backdrop-blur-sm shadow-lg shadow-black/20 bg-muted/50 transition-all duration-200 hover:border-border hover:bg-muted";
6029
+ /**
6030
+ * ThinkingIndicator - Shows a subtle "Thinking" indicator when the thread is running
6031
+ * This provides visual feedback when the model is processing (e.g., after tool calls complete)
6032
+ */
6033
+ const ThinkingIndicator = () => {
6034
+ const $ = c(1);
6035
+ let t0;
6036
+ if ($[0] === Symbol.for("react.memo_cache_sentinel")) {
6037
+ t0 = /* @__PURE__ */ jsx(AssistantIf, {
6038
+ condition: _temp2$4,
6039
+ children: /* @__PURE__ */ jsx("div", {
6040
+ className: "aui-thinking-indicator mx-auto w-full max-w-(--thread-max-width) px-2 py-2",
6041
+ children: /* @__PURE__ */ jsxs("div", {
6042
+ className: "flex items-center gap-2 text-muted-foreground text-sm",
6043
+ children: [/* @__PURE__ */ jsxs("span", {
6044
+ className: "aui-thinking-dots flex gap-1",
6045
+ children: [
6046
+ /* @__PURE__ */ jsx("span", { className: "aui-thinking-dot size-1.5 rounded-full bg-current animate-pulse" }),
6047
+ /* @__PURE__ */ jsx("span", { className: "aui-thinking-dot size-1.5 rounded-full bg-current animate-pulse [animation-delay:150ms]" }),
6048
+ /* @__PURE__ */ jsx("span", { className: "aui-thinking-dot size-1.5 rounded-full bg-current animate-pulse [animation-delay:300ms]" })
6049
+ ]
6050
+ }), /* @__PURE__ */ jsx("span", {
6051
+ className: "aui-thinking-text",
6052
+ children: "Thinking"
6053
+ })]
6054
+ })
6055
+ })
6056
+ });
6057
+ $[0] = t0;
6058
+ } else t0 = $[0];
6059
+ return t0;
6060
+ };
5403
6061
  const Thread = ({ onThreadsClick, onNewThread, onClose }) => {
5404
6062
  return /* @__PURE__ */ jsxs(ThreadPrimitive.Root, {
5405
6063
  className: "aui-root aui-thread-root @container relative flex h-full min-h-0 flex-col bg-background",
@@ -5463,6 +6121,7 @@ const Thread = ({ onThreadsClick, onNewThread, onClose }) => {
5463
6121
  UserMessage,
5464
6122
  AssistantMessage
5465
6123
  } }),
6124
+ /* @__PURE__ */ jsx(ThinkingIndicator, {}),
5466
6125
  /* @__PURE__ */ jsxs(ThreadPrimitive.ViewportFooter, {
5467
6126
  className: "aui-thread-viewport-footer sticky bottom-0 mx-auto mt-auto flex w-full max-w-(--thread-max-width) flex-col gap-4 overflow-visible bg-transparent pt-2 pb-4 md:pb-6",
5468
6127
  children: [/* @__PURE__ */ jsx(ThreadScrollToBottom, {}), /* @__PURE__ */ jsx(Composer, {})]
@@ -5518,7 +6177,7 @@ const ThreadSuggestions = () => {
5518
6177
  if (!hasPrompts) return null;
5519
6178
  let t0;
5520
6179
  if ($[0] !== prompts) {
5521
- t0 = prompts.slice(0, 4).map(_temp$9);
6180
+ t0 = prompts.slice(0, 4).map(_temp3$3);
5522
6181
  $[0] = prompts;
5523
6182
  $[1] = t0;
5524
6183
  } else t0 = $[1];
@@ -5845,7 +6504,7 @@ const ComposerAction = () => {
5845
6504
  let t1;
5846
6505
  if ($[1] === Symbol.for("react.memo_cache_sentinel")) {
5847
6506
  t1 = /* @__PURE__ */ jsx(AssistantIf, {
5848
- condition: _temp2$4,
6507
+ condition: _temp4$2,
5849
6508
  children: /* @__PURE__ */ jsx(ComposerPrimitive.Send, {
5850
6509
  asChild: true,
5851
6510
  children: /* @__PURE__ */ jsx(TooltipIconButton, {
@@ -5869,7 +6528,7 @@ const ComposerAction = () => {
5869
6528
  children: [t0, /* @__PURE__ */ jsxs("div", {
5870
6529
  className: "flex items-center gap-1",
5871
6530
  children: [t1, /* @__PURE__ */ jsx(AssistantIf, {
5872
- condition: _temp3$3,
6531
+ condition: _temp5$2,
5873
6532
  children: /* @__PURE__ */ jsx(ComposerPrimitive.Cancel, {
5874
6533
  asChild: true,
5875
6534
  children: /* @__PURE__ */ jsx(Button, {
@@ -5934,7 +6593,7 @@ const AssistantActionBar = () => {
5934
6593
  let t0;
5935
6594
  if ($[0] === Symbol.for("react.memo_cache_sentinel")) {
5936
6595
  t0 = /* @__PURE__ */ jsx(AssistantIf, {
5937
- condition: _temp4$2,
6596
+ condition: _temp6$1,
5938
6597
  children: /* @__PURE__ */ jsx(CheckIcon, { className: "size-4" })
5939
6598
  });
5940
6599
  $[0] = t0;
@@ -5951,7 +6610,7 @@ const AssistantActionBar = () => {
5951
6610
  children: /* @__PURE__ */ jsxs(TooltipIconButton, {
5952
6611
  tooltip: "Copy",
5953
6612
  children: [t0, /* @__PURE__ */ jsx(AssistantIf, {
5954
- condition: _temp5$2,
6613
+ condition: _temp7,
5955
6614
  children: /* @__PURE__ */ jsx(CopyIcon, { className: "size-4" })
5956
6615
  })]
5957
6616
  })
@@ -5985,7 +6644,14 @@ const UserMessage = () => {
5985
6644
  } else t1 = $[1];
5986
6645
  return t1;
5987
6646
  };
5988
- function _temp$9(prompt, index) {
6647
+ function _temp$9(message) {
6648
+ return message.status?.type === "requires-action" || message.status?.type === "incomplete";
6649
+ }
6650
+ function _temp2$4(t0) {
6651
+ const { thread } = t0;
6652
+ return thread.messages.at(-1)?.parts.at(-1)?.type === "tool-call" && !thread.messages.some(_temp$9);
6653
+ }
6654
+ function _temp3$3(prompt, index) {
5989
6655
  return /* @__PURE__ */ jsx("div", {
5990
6656
  className: "aui-thread-welcome-suggestion-display fade-in slide-in-from-bottom-2 @md:nth-[n+3]:block nth-[n+3]:hidden animate-in fill-mode-both duration-200",
5991
6657
  style: { animationDelay: `${100 + index * 50}ms` },
@@ -6008,19 +6674,19 @@ function _temp$9(prompt, index) {
6008
6674
  })
6009
6675
  }, prompt.name);
6010
6676
  }
6011
- function _temp2$4(t0) {
6677
+ function _temp4$2(t0) {
6012
6678
  const { thread } = t0;
6013
6679
  return !thread.isRunning;
6014
6680
  }
6015
- function _temp3$3(t0) {
6681
+ function _temp5$2(t0) {
6016
6682
  const { thread: thread_0 } = t0;
6017
6683
  return thread_0.isRunning;
6018
6684
  }
6019
- function _temp4$2(t0) {
6685
+ function _temp6$1(t0) {
6020
6686
  const { message } = t0;
6021
6687
  return message.isCopied;
6022
6688
  }
6023
- function _temp5$2(t0) {
6689
+ function _temp7(t0) {
6024
6690
  const { message: message_0 } = t0;
6025
6691
  return !message_0.isCopied;
6026
6692
  }
@@ -6375,24 +7041,19 @@ function _temp$8(step, index) {
6375
7041
  //#endregion
6376
7042
  //#region src/utils/convert-init-error.ts
6377
7043
  /**
6378
- * Map backend error codes to frontend error codes
7044
+ * Convert InitContextResult error to AuthError
7045
+ *
7046
+ * Takes the structured error response from the backend and converts it
7047
+ * to an AuthError that the error boundary can display properly.
7048
+ */
7049
+ /**
7050
+ * Map backend error codes to frontend error codes.
7051
+ * Uses isAuthErrorCode from @char-ai/auth to validate known codes.
6379
7052
  */
6380
7053
  function mapErrorCode(backendCode) {
6381
- if (!backendCode) return "UNKNOWN_ERROR";
6382
- if ([
6383
- "TOKEN_REQUIRED",
6384
- "TOKEN_EXPIRED",
6385
- "INVALID_TOKEN",
6386
- "INVALID_SIGNATURE",
6387
- "INVALID_ISSUER",
6388
- "INVALID_AUDIENCE",
6389
- "KEY_NOT_FOUND",
6390
- "IDP_NOT_CONFIGURED",
6391
- "JWKS_FETCH_FAILED",
6392
- "ORG_NOT_FOUND",
6393
- "ORIGIN_NOT_ALLOWED"
6394
- ].includes(backendCode)) return backendCode;
6395
- return "UNKNOWN_ERROR";
7054
+ if (!backendCode) return APP_ERROR_CODES.INTERNAL_ERROR;
7055
+ if (isAuthErrorCode(backendCode)) return backendCode;
7056
+ return APP_ERROR_CODES.INTERNAL_ERROR;
6396
7057
  }
6397
7058
  /**
6398
7059
  * Convert InitContextResult failure to AuthError
@@ -6756,7 +7417,12 @@ function decodeJWT(token) {
6756
7417
  const base64 = payload.replace(/-/g, "+").replace(/_/g, "/");
6757
7418
  const jsonPayload = decodeURIComponent(atob(base64).split("").map((c$1) => "%" + ("00" + c$1.charCodeAt(0).toString(16)).slice(-2)).join(""));
6758
7419
  return JSON.parse(jsonPayload);
6759
- } catch {
7420
+ } catch (error) {
7421
+ console.debug("[JWT] Failed to decode token payload:", {
7422
+ error: error instanceof Error ? error.message : String(error),
7423
+ tokenLength: token?.length,
7424
+ hasThreeParts: token?.split(".").length === 3
7425
+ });
6760
7426
  return null;
6761
7427
  }
6762
7428
  }
@@ -6773,6 +7439,73 @@ function extractUserIdFromToken(token) {
6773
7439
 
6774
7440
  //#endregion
6775
7441
  //#region src/hooks/useCloudflareThreadAdapter.tsx
7442
+ /**
7443
+ * Exchange an IDP token for a short-lived ticket.
7444
+ *
7445
+ * This unifies SPA and SSR authentication:
7446
+ * - SPA: Embedded agent calls this internally
7447
+ * - SSR: Customer's server calls this, passes ticket to embedded agent
7448
+ *
7449
+ * Both paths end up using initContextWithTicket for WebSocket auth.
7450
+ */
7451
+ async function exchangeTokenForTicket(authToken, apiBase) {
7452
+ try {
7453
+ const response = await fetch(`${apiBase}/api/auth/ticket`, {
7454
+ method: "POST",
7455
+ headers: {
7456
+ "Authorization": `Bearer ${authToken}`,
7457
+ "Content-Type": "application/json"
7458
+ },
7459
+ body: JSON.stringify({})
7460
+ });
7461
+ if (!response.ok) {
7462
+ let errorData;
7463
+ try {
7464
+ errorData = await response.json();
7465
+ } catch (parseError) {
7466
+ console.error("[exchangeTokenForTicket] Failed to parse error response:", {
7467
+ status: response.status,
7468
+ statusText: response.statusText,
7469
+ parseError: parseError instanceof Error ? parseError.message : String(parseError),
7470
+ contentType: response.headers.get("content-type")
7471
+ });
7472
+ errorData = {
7473
+ error: "UNKNOWN",
7474
+ message: `Server returned status ${response.status}`
7475
+ };
7476
+ }
7477
+ return {
7478
+ success: false,
7479
+ error: errorData.error ?? "TICKET_EXCHANGE_FAILED",
7480
+ message: errorData.message ?? "Failed to exchange token for ticket"
7481
+ };
7482
+ }
7483
+ const data = await response.json();
7484
+ return {
7485
+ success: true,
7486
+ ticketAuth: {
7487
+ ticket: data.ticket,
7488
+ userId: data.userId,
7489
+ orgId: data.orgId
7490
+ }
7491
+ };
7492
+ } catch (error) {
7493
+ const errorMessage = error instanceof Error ? error.message : String(error);
7494
+ const errorName = error instanceof Error ? error.name : "Unknown";
7495
+ const isNetworkError = error instanceof TypeError && errorMessage.includes("fetch") || error instanceof DOMException && error.name === "AbortError";
7496
+ const errorType = isNetworkError ? "NETWORK_ERROR" : "TOKEN_EXCHANGE_ERROR";
7497
+ console.error("[exchangeTokenForTicket] Error:", {
7498
+ type: errorType,
7499
+ error: errorMessage,
7500
+ name: errorName
7501
+ });
7502
+ return {
7503
+ success: false,
7504
+ error: errorType,
7505
+ message: isNetworkError ? "Unable to reach authentication server. Please check your connection." : `Authentication failed: ${errorMessage}`
7506
+ };
7507
+ }
7508
+ }
6776
7509
  /** localStorage key for anonymous session ID persistence */
6777
7510
  const ANONYMOUS_SESSION_KEY = "webmcp-anonymous-session-id";
6778
7511
  /**
@@ -6808,31 +7541,79 @@ function isArchivedThread(thread) {
6808
7541
  /**
6809
7542
  * Hook that manages thread list state and syncs with ThreadManager DO.
6810
7543
  *
6811
- * This hook:
6812
- * 1. Connects to ThreadManager via WebSocket
6813
- * 2. Calls initContextWithIdp() to resolve internal IDs from the IDP token
6814
- * 3. Subscribes to state updates (thread list changes)
6815
- * 4. Exposes assistant-ui thread list adapter
7544
+ * ## Unified Ticket-Based Authentication
7545
+ *
7546
+ * Both SPA and SSR flows converge on ticket-based auth:
7547
+ *
7548
+ * **SPA flow (authToken):**
7549
+ * 1. Embedded agent calls POST /api/auth/ticket to exchange IDP token
7550
+ * 2. Receives short-lived ticket with userId and orgId
7551
+ * 3. Connects to org-scoped ThreadManager DO
7552
+ * 4. Calls initContextWithTicket() with the ticket
7553
+ *
7554
+ * **SSR flow (ticketAuth):**
7555
+ * 1. Customer's server already called POST /api/auth/ticket
7556
+ * 2. Passes ticketAuth directly to embedded agent
7557
+ * 3. Connects to org-scoped ThreadManager DO
7558
+ * 4. Calls initContextWithTicket() with the ticket
7559
+ *
7560
+ * This unified approach means:
7561
+ * - JWKS validation happens once (at ticket creation), not on every WebSocket reconnect
7562
+ * - Same backend code path for both SPA and SSR
7563
+ * - Consistent security model (short-lived, single-use tickets)
6816
7564
  */
6817
7565
  function useCloudflareThreadAdapter(options) {
6818
- const { host, authToken, anthropicApiKey, mcpTools, executeMCPTool } = options;
6819
- const { baseUserId, isAnonymous } = useMemo(() => {
6820
- if (!authToken) return {
6821
- baseUserId: getOrCreateAnonymousId(),
6822
- isAnonymous: true
7566
+ const { host, authToken, ticketAuth: providedTicketAuth, anthropicApiKey, mcpTools, executeMCPTool } = options;
7567
+ const apiBase = useMemo(() => {
7568
+ if (!host) return WEBMCP_PRODUCTION_API_BASE;
7569
+ return `${host.startsWith("localhost") || host.startsWith("127.0.0.1") ? "http" : "https"}://${host}`;
7570
+ }, [host]);
7571
+ const [exchangedTicket, setExchangedTicket] = useState(null);
7572
+ const [ticketExchangeError, setTicketExchangeError] = useState(null);
7573
+ const [isExchangingTicket, setIsExchangingTicket] = useState(false);
7574
+ const exchangePromiseRef = useRef(null);
7575
+ const isMountedRef = useRef(true);
7576
+ useEffect(() => {
7577
+ isMountedRef.current = true;
7578
+ return () => {
7579
+ isMountedRef.current = false;
6823
7580
  };
6824
- const tokenUserId = extractUserIdFromToken(authToken);
6825
- if (tokenUserId) return {
6826
- baseUserId: tokenUserId,
6827
- isAnonymous: false
7581
+ }, []);
7582
+ const ticketAuth = providedTicketAuth ?? exchangedTicket;
7583
+ const { baseUserId, isAnonymous, initialOrgId, needsTicketExchange } = useMemo(() => {
7584
+ if (ticketAuth) return {
7585
+ baseUserId: ticketAuth.userId,
7586
+ isAnonymous: false,
7587
+ initialOrgId: ticketAuth.orgId,
7588
+ needsTicketExchange: false
6828
7589
  };
6829
- console.warn("[useCloudflareThreadAdapter] Failed to extract user ID from auth token, falling back to anonymous mode");
7590
+ if (authToken) {
7591
+ const tokenUserId = extractUserIdFromToken(authToken);
7592
+ if (tokenUserId) return {
7593
+ baseUserId: tokenUserId,
7594
+ isAnonymous: false,
7595
+ initialOrgId: null,
7596
+ needsTicketExchange: true
7597
+ };
7598
+ console.error("[useCloudflareThreadAdapter] Failed to extract user ID from auth token - token may be malformed");
7599
+ return {
7600
+ baseUserId: `malformed-token-${crypto.randomUUID()}`,
7601
+ isAnonymous: false,
7602
+ initialOrgId: null,
7603
+ needsTicketExchange: true
7604
+ };
7605
+ }
6830
7606
  return {
6831
7607
  baseUserId: getOrCreateAnonymousId(),
6832
- isAnonymous: true
7608
+ isAnonymous: true,
7609
+ initialOrgId: null,
7610
+ needsTicketExchange: false
6833
7611
  };
6834
- }, [authToken]);
6835
- const [compositeManagerName, setCompositeManagerName] = useState(null);
7612
+ }, [authToken, ticketAuth]);
7613
+ const [compositeManagerName, setCompositeManagerName] = useState(() => {
7614
+ if (initialOrgId) return `${initialOrgId}:${baseUserId}`;
7615
+ return null;
7616
+ });
6836
7617
  const effectiveUserId = compositeManagerName ?? baseUserId;
6837
7618
  const [isInitialized, setIsInitialized] = useState(false);
6838
7619
  const [initialSyncComplete, setInitialSyncComplete] = useState(false);
@@ -6842,12 +7623,11 @@ function useCloudflareThreadAdapter(options) {
6842
7623
  const [threads, setThreads] = useState([]);
6843
7624
  const [lastSelectedThreadId, setLastSelectedThreadId] = useState(null);
6844
7625
  const initPromiseRef = useRef(null);
6845
- const prevAuthTokenRef = useRef(authToken);
6846
7626
  const manager = useAgent({
6847
7627
  agent: "ThreadManager",
6848
7628
  name: effectiveUserId,
6849
7629
  host,
6850
- query: isAnonymous ? { anonymous: "true" } : { auth_token: authToken },
7630
+ query: isAnonymous ? { anonymous: "true" } : void 0,
6851
7631
  onStateUpdate: (state, source) => {
6852
7632
  setThreads(state.threads);
6853
7633
  if (state.lastSelectedThreadId !== void 0) setLastSelectedThreadId(state.lastSelectedThreadId);
@@ -6911,20 +7691,32 @@ function useCloudflareThreadAdapter(options) {
6911
7691
  tabId,
6912
7692
  manager
6913
7693
  ]);
7694
+ const prevAuthTokenRef = useRef(authToken);
7695
+ const prevProvidedTicketRef = useRef(providedTicketAuth?.ticket);
6914
7696
  useEffect(() => {
6915
- if (authToken === prevAuthTokenRef.current) return;
7697
+ const authTokenChanged = authToken !== prevAuthTokenRef.current;
7698
+ const providedTicketChanged = providedTicketAuth?.ticket !== prevProvidedTicketRef.current;
7699
+ if (!authTokenChanged && !providedTicketChanged) return;
6916
7700
  prevAuthTokenRef.current = authToken;
7701
+ prevProvidedTicketRef.current = providedTicketAuth?.ticket;
7702
+ setExchangedTicket(null);
7703
+ setTicketExchangeError(null);
7704
+ setIsExchangingTicket(false);
7705
+ exchangePromiseRef.current = null;
6917
7706
  initPromiseRef.current = null;
6918
7707
  setIsInitialized(false);
6919
7708
  setInitialSyncComplete(false);
6920
7709
  setEndUserId(null);
6921
7710
  setOrganizationId(null);
6922
- setCompositeManagerName(null);
7711
+ setCompositeManagerName(initialOrgId ? `${initialOrgId}:${baseUserId}` : null);
6923
7712
  setLastSelectedThreadId(null);
6924
7713
  }, [
6925
7714
  authToken,
7715
+ providedTicketAuth?.ticket,
6926
7716
  anthropicApiKey,
6927
- isAnonymous
7717
+ isAnonymous,
7718
+ initialOrgId,
7719
+ baseUserId
6928
7720
  ]);
6929
7721
  useEffect(() => {
6930
7722
  if (manager.readyState === WebSocket.OPEN) return;
@@ -6932,52 +7724,93 @@ function useCloudflareThreadAdapter(options) {
6932
7724
  setIsInitialized(false);
6933
7725
  setInitialSyncComplete(false);
6934
7726
  }, [manager.readyState]);
7727
+ useEffect(() => {
7728
+ if (!exchangedTicket) return;
7729
+ setCompositeManagerName(`${exchangedTicket.orgId}:${exchangedTicket.userId}`);
7730
+ }, [exchangedTicket]);
6935
7731
  const ensureInitialized = useCallback(async () => {
6936
7732
  if (manager.readyState !== WebSocket.OPEN) throw new Error("ThreadManager is not connected");
6937
- if (!initPromiseRef.current) {
6938
- const origin = typeof window !== "undefined" ? window.location.origin : void 0;
6939
- if (isAnonymous) initPromiseRef.current = manager.call("initContextAnonymous", [{
6940
- origin,
6941
- anthropicApiKey
6942
- }]);
6943
- else initPromiseRef.current = manager.call("initContextWithIdp", [{
6944
- authToken,
6945
- origin
6946
- }]);
7733
+ const origin = typeof window !== "undefined" ? window.location.origin : void 0;
7734
+ if (needsTicketExchange && authToken && !ticketAuth) {
7735
+ if (!exchangePromiseRef.current) {
7736
+ setIsExchangingTicket(true);
7737
+ exchangePromiseRef.current = exchangeTokenForTicket(authToken, apiBase);
7738
+ }
7739
+ const result_0 = await exchangePromiseRef.current;
7740
+ exchangePromiseRef.current = null;
7741
+ if (!isMountedRef.current) return;
7742
+ setIsExchangingTicket(false);
7743
+ if (!result_0.success) {
7744
+ setTicketExchangeError({
7745
+ error: result_0.error,
7746
+ message: result_0.message
7747
+ });
7748
+ throw {
7749
+ code: result_0.error,
7750
+ title: "Authentication Failed",
7751
+ message: result_0.message,
7752
+ recoverable: result_0.error === "NETWORK_ERROR"
7753
+ };
7754
+ }
7755
+ setExchangedTicket(result_0.ticketAuth);
7756
+ return;
7757
+ }
7758
+ if (ticketAuth && ticketAuth.orgId) {
7759
+ const expectedDOName = `${ticketAuth.orgId}:${ticketAuth.userId}`;
7760
+ if (effectiveUserId !== expectedDOName) {
7761
+ console.debug("[useCloudflareThreadAdapter] Waiting for org-scoped DO connection", {
7762
+ current: effectiveUserId,
7763
+ expected: expectedDOName
7764
+ });
7765
+ return;
7766
+ }
6947
7767
  }
7768
+ if (!initPromiseRef.current) if (isAnonymous) initPromiseRef.current = manager.call("initContextAnonymous", [{
7769
+ origin,
7770
+ anthropicApiKey
7771
+ }]);
7772
+ else if (ticketAuth) initPromiseRef.current = manager.call("initContextWithTicket", [{
7773
+ ticket: ticketAuth.ticket,
7774
+ origin
7775
+ }]);
7776
+ else throw new Error("No authentication method available");
6948
7777
  const initResult = await initPromiseRef.current;
7778
+ if (!isMountedRef.current) return;
6949
7779
  if (!initResult.success) throwInitError(initResult);
6950
7780
  setEndUserId(initResult.endUserId);
6951
7781
  if (initResult.organizationId) setOrganizationId(initResult.organizationId);
6952
- if (!isAnonymous && initResult.organizationId) {
6953
- const composite = `${initResult.organizationId}:${baseUserId}`;
6954
- if (!compositeManagerName) {
6955
- initPromiseRef.current = null;
6956
- setCompositeManagerName(composite);
6957
- return;
6958
- }
6959
- }
6960
7782
  setIsInitialized(true);
6961
7783
  }, [
6962
7784
  manager,
6963
7785
  authToken,
7786
+ ticketAuth,
6964
7787
  anthropicApiKey,
6965
7788
  isAnonymous,
6966
- baseUserId,
6967
- compositeManagerName
7789
+ needsTicketExchange,
7790
+ isExchangingTicket,
7791
+ apiBase,
7792
+ effectiveUserId
6968
7793
  ]);
6969
7794
  useEffect(() => {
6970
7795
  if (manager.readyState !== WebSocket.OPEN) return;
6971
7796
  if (isInitialized) return;
6972
7797
  if (authError) return;
7798
+ if (isExchangingTicket) return;
6973
7799
  ensureInitialized().catch((error_0) => {
6974
7800
  console.error("[useCloudflareThreadAdapter] initContext error:", error_0);
6975
7801
  if (error_0 && typeof error_0 === "object" && "code" in error_0 && "title" in error_0) setAuthError(error_0);
7802
+ else setAuthError({
7803
+ code: "INTERNAL_ERROR",
7804
+ title: "Connection Error",
7805
+ message: error_0 instanceof Error ? error_0.message : "Failed to initialize. Please try again.",
7806
+ recoverable: true
7807
+ });
6976
7808
  });
6977
7809
  }, [
6978
7810
  manager.readyState,
6979
7811
  isInitialized,
6980
7812
  authError,
7813
+ isExchangingTicket,
6981
7814
  ensureInitialized
6982
7815
  ]);
6983
7816
  const activeThreads = useMemo(() => {
@@ -7022,7 +7855,9 @@ function useCloudflareThreadAdapter(options) {
7022
7855
  await managerRef.current.call("archiveThread", [threadId_1]);
7023
7856
  if (threadId_1 === currentThreadIdRef.current) {
7024
7857
  const nextActive = activeThreadsRef.current.filter((t_2) => t_2.id !== threadId_1)[0]?.id;
7025
- if (nextActive) managerRef.current.call("setLastSelectedThread", [nextActive]).catch(() => {});
7858
+ if (nextActive) managerRef.current.call("setLastSelectedThread", [nextActive]).catch((error_2) => {
7859
+ console.warn("[WebMCP] Failed to update thread selection after archive:", error_2);
7860
+ });
7026
7861
  else await createThread();
7027
7862
  }
7028
7863
  }, [
@@ -7041,7 +7876,9 @@ function useCloudflareThreadAdapter(options) {
7041
7876
  await managerRef.current.call("deleteThread", [threadId_3]);
7042
7877
  if (threadId_3 === currentThreadIdRef.current) {
7043
7878
  const nextActive_0 = activeThreadsRef.current.filter((t_3) => t_3.id !== threadId_3)[0]?.id;
7044
- if (nextActive_0) managerRef.current.call("setLastSelectedThread", [nextActive_0]).catch(() => {});
7879
+ if (nextActive_0) managerRef.current.call("setLastSelectedThread", [nextActive_0]).catch((error_3) => {
7880
+ console.warn("[WebMCP] Failed to update thread selection after delete:", error_3);
7881
+ });
7045
7882
  }
7046
7883
  }, [
7047
7884
  ensureInitializedRef,
@@ -7131,7 +7968,7 @@ const convertParts = (message, metadata) => {
7131
7968
  let result;
7132
7969
  let isError = false;
7133
7970
  const rawInput = getRawInput(part);
7134
- if (part.state === "input-streaming" || part.state === "input-available") args = part.input || {};
7971
+ if (part.state === "input-streaming" || part.state === "input-available" || part.state === "approval-requested") args = part.input || {};
7135
7972
  else if (part.state === "output-available") {
7136
7973
  args = part.input || {};
7137
7974
  result = part.output;
@@ -7293,7 +8130,6 @@ function useThreadRuntime$2(options) {
7293
8130
  agent: "ThreadAgent",
7294
8131
  name: threadId ?? DISCONNECTED_THREAD_ID,
7295
8132
  host,
7296
- query: authToken ? { auth_token: authToken } : void 0,
7297
8133
  startClosed: threadId == null,
7298
8134
  onStateUpdate: (state) => {
7299
8135
  setAgentState(state);
@@ -7664,10 +8500,11 @@ function ThreadRuntimeBridge({ children, threadId, host, authToken, manager, mcp
7664
8500
  * }
7665
8501
  * ```
7666
8502
  */
7667
- function CloudflareThreadRuntimeProvider({ children, host, authToken, anthropicApiKey, mcpTools, executeMCPTool, dashboardBaseUrl, docsBaseUrl, onClose }) {
8503
+ function CloudflareThreadRuntimeProvider({ children, host, authToken, ticketAuth, anthropicApiKey, mcpTools, executeMCPTool, dashboardBaseUrl, docsBaseUrl, onClose }) {
7668
8504
  const { currentThreadId, setCurrentThreadId, threadListAdapter, isInitialized, isReady, endUserId, organizationId, authError, manager, toolSources } = useCloudflareThreadAdapter({
7669
8505
  host,
7670
8506
  authToken,
8507
+ ticketAuth,
7671
8508
  anthropicApiKey,
7672
8509
  mcpTools,
7673
8510
  executeMCPTool
@@ -8447,7 +9284,7 @@ var AuthErrorBoundary = class extends React.Component {
8447
9284
  return {
8448
9285
  hasError: true,
8449
9286
  error: isAuthError(error) ? error : {
8450
- code: "UNKNOWN_ERROR",
9287
+ code: APP_ERROR_CODES.INTERNAL_ERROR,
8451
9288
  title: "Something Went Wrong",
8452
9289
  message: "An unexpected error occurred. Please try refreshing the page.",
8453
9290
  recoverable: true,
@@ -9055,7 +9892,7 @@ function useWebMCPDebugTools(options) {
9055
9892
  id,
9056
9893
  state: source.state,
9057
9894
  toolCount: source.tools.length,
9058
- error: source.error?.message ?? null
9895
+ error: source.error ?? null
9059
9896
  })) : [],
9060
9897
  remoteSources: state.toolSelection ? state.toolSelection.sources.map((s_0) => ({
9061
9898
  sourceId: s_0.sourceId,
@@ -9568,8 +10405,8 @@ const StatefulRuntimeBridge = (t0) => {
9568
10405
  * Note: Tool approval mode is now managed by ThreadAgent state (synced across clients).
9569
10406
  */
9570
10407
  const UnifiedRuntime = (t0) => {
9571
- const $ = c(20);
9572
- const { children, apiBase, authToken, anthropicApiKey, host, tokenEndpoint, enableDebugTools, dashboardBaseUrl, docsBaseUrl, onClose, onVoiceError, onVoiceConnect, onVoiceDisconnect } = t0;
10408
+ const $ = c(21);
10409
+ const { children, apiBase, authToken, ticketAuth, anthropicApiKey, host, tokenEndpoint, enableDebugTools, dashboardBaseUrl, docsBaseUrl, onClose, onVoiceError, onVoiceConnect, onVoiceDisconnect } = t0;
9573
10410
  const { tools: mcpTools, callTool } = useMCPTools();
9574
10411
  const resolvedApiBase = apiBase ?? WEBMCP_PRODUCTION_API_BASE;
9575
10412
  let t1;
@@ -9606,10 +10443,11 @@ const UnifiedRuntime = (t0) => {
9606
10443
  $[9] = t2;
9607
10444
  } else t2 = $[9];
9608
10445
  let t3;
9609
- if ($[10] !== anthropicApiKey || $[11] !== authToken || $[12] !== callTool || $[13] !== dashboardBaseUrl || $[14] !== docsBaseUrl || $[15] !== mcpTools || $[16] !== onClose || $[17] !== resolvedHost || $[18] !== t2) {
10446
+ if ($[10] !== anthropicApiKey || $[11] !== authToken || $[12] !== callTool || $[13] !== dashboardBaseUrl || $[14] !== docsBaseUrl || $[15] !== mcpTools || $[16] !== onClose || $[17] !== resolvedHost || $[18] !== t2 || $[19] !== ticketAuth) {
9610
10447
  t3 = /* @__PURE__ */ jsx(CloudflareThreadRuntimeProvider, {
9611
10448
  host: resolvedHost,
9612
10449
  authToken,
10450
+ ticketAuth,
9613
10451
  anthropicApiKey,
9614
10452
  mcpTools,
9615
10453
  executeMCPTool: callTool,
@@ -9627,8 +10465,9 @@ const UnifiedRuntime = (t0) => {
9627
10465
  $[16] = onClose;
9628
10466
  $[17] = resolvedHost;
9629
10467
  $[18] = t2;
9630
- $[19] = t3;
9631
- } else t3 = $[19];
10468
+ $[19] = ticketAuth;
10469
+ $[20] = t3;
10470
+ } else t3 = $[20];
9632
10471
  return t3;
9633
10472
  };
9634
10473
  /**
@@ -9639,13 +10478,14 @@ const UnifiedRuntime = (t0) => {
9639
10478
  * - Anonymous: no authToken, anthropicApiKey provided (localhost dev mode)
9640
10479
  */
9641
10480
  const AgentRuntime = (t0) => {
9642
- const $ = c(14);
9643
- const { children, apiBase, authToken, anthropicApiKey, host, tokenEndpoint, enableDebugTools, dashboardBaseUrl, docsBaseUrl, onClose, onVoiceError, onVoiceConnect, onVoiceDisconnect } = t0;
10481
+ const $ = c(15);
10482
+ const { children, apiBase, authToken, ticketAuth, anthropicApiKey, host, tokenEndpoint, enableDebugTools, dashboardBaseUrl, docsBaseUrl, onClose, onVoiceError, onVoiceConnect, onVoiceDisconnect } = t0;
9644
10483
  let t1;
9645
- if ($[0] !== anthropicApiKey || $[1] !== apiBase || $[2] !== authToken || $[3] !== children || $[4] !== dashboardBaseUrl || $[5] !== docsBaseUrl || $[6] !== enableDebugTools || $[7] !== host || $[8] !== onClose || $[9] !== onVoiceConnect || $[10] !== onVoiceDisconnect || $[11] !== onVoiceError || $[12] !== tokenEndpoint) {
10484
+ if ($[0] !== anthropicApiKey || $[1] !== apiBase || $[2] !== authToken || $[3] !== children || $[4] !== dashboardBaseUrl || $[5] !== docsBaseUrl || $[6] !== enableDebugTools || $[7] !== host || $[8] !== onClose || $[9] !== onVoiceConnect || $[10] !== onVoiceDisconnect || $[11] !== onVoiceError || $[12] !== ticketAuth || $[13] !== tokenEndpoint) {
9646
10485
  t1 = /* @__PURE__ */ jsx(UnifiedRuntime, {
9647
10486
  apiBase,
9648
10487
  authToken,
10488
+ ticketAuth,
9649
10489
  anthropicApiKey,
9650
10490
  host,
9651
10491
  tokenEndpoint,
@@ -9670,9 +10510,10 @@ const AgentRuntime = (t0) => {
9670
10510
  $[9] = onVoiceConnect;
9671
10511
  $[10] = onVoiceDisconnect;
9672
10512
  $[11] = onVoiceError;
9673
- $[12] = tokenEndpoint;
9674
- $[13] = t1;
9675
- } else t1 = $[13];
10513
+ $[12] = ticketAuth;
10514
+ $[13] = tokenEndpoint;
10515
+ $[14] = t1;
10516
+ } else t1 = $[14];
9676
10517
  return t1;
9677
10518
  };
9678
10519
  /**
@@ -9693,8 +10534,8 @@ const AgentRuntime = (t0) => {
9693
10534
  * across all connected clients. The defaultApprovalMode prop has been removed.
9694
10535
  */
9695
10536
  const AgentProvider = (t0) => {
9696
- const $ = c(38);
9697
- const { children, apiBase, authToken, anthropicApiKey: anthropicApiKeyProp, devMode, host, tokenEndpoint, autoConnectLocal: t1, open, defaultOpen: t2, defaultMode: t3, excludeTools, excludeToolNames, excludeToolPrefixes, enableDebugTools: t4, dashboardBaseUrl, docsBaseUrl, onAuthError, showErrorDebug: t5, onClose, onToolsChange, onVoiceError, onVoiceConnect, onVoiceDisconnect, onOpenChange, onModeChange } = t0;
10537
+ const $ = c(39);
10538
+ const { children, apiBase, authToken, ticketAuth, anthropicApiKey: anthropicApiKeyProp, devMode, host, tokenEndpoint, autoConnectLocal: t1, open, defaultOpen: t2, defaultMode: t3, excludeTools, excludeToolNames, excludeToolPrefixes, enableDebugTools: t4, dashboardBaseUrl, docsBaseUrl, onAuthError, showErrorDebug: t5, onClose, onToolsChange, onVoiceError, onVoiceConnect, onVoiceDisconnect, onOpenChange, onModeChange } = t0;
9698
10539
  const autoConnectLocal = t1 === void 0 ? true : t1;
9699
10540
  const defaultOpen = t2 === void 0 ? false : t2;
9700
10541
  const defaultMode = t3 === void 0 ? "collapsed" : t3;
@@ -9703,10 +10544,11 @@ const AgentProvider = (t0) => {
9703
10544
  const anthropicApiKey = devMode?.anthropicApiKey ?? anthropicApiKeyProp;
9704
10545
  const hasExclusions = excludeTools || excludeToolNames || excludeToolPrefixes;
9705
10546
  let t6;
9706
- if ($[0] !== anthropicApiKey || $[1] !== apiBase || $[2] !== authToken || $[3] !== children || $[4] !== dashboardBaseUrl || $[5] !== docsBaseUrl || $[6] !== enableDebugTools || $[7] !== host || $[8] !== onClose || $[9] !== onVoiceConnect || $[10] !== onVoiceDisconnect || $[11] !== onVoiceError || $[12] !== tokenEndpoint) {
10547
+ if ($[0] !== anthropicApiKey || $[1] !== apiBase || $[2] !== authToken || $[3] !== children || $[4] !== dashboardBaseUrl || $[5] !== docsBaseUrl || $[6] !== enableDebugTools || $[7] !== host || $[8] !== onClose || $[9] !== onVoiceConnect || $[10] !== onVoiceDisconnect || $[11] !== onVoiceError || $[12] !== ticketAuth || $[13] !== tokenEndpoint) {
9707
10548
  t6 = /* @__PURE__ */ jsx(AgentRuntime, {
9708
10549
  apiBase,
9709
10550
  authToken,
10551
+ ticketAuth,
9710
10552
  anthropicApiKey,
9711
10553
  host,
9712
10554
  tokenEndpoint,
@@ -9731,39 +10573,40 @@ const AgentProvider = (t0) => {
9731
10573
  $[9] = onVoiceConnect;
9732
10574
  $[10] = onVoiceDisconnect;
9733
10575
  $[11] = onVoiceError;
9734
- $[12] = tokenEndpoint;
9735
- $[13] = t6;
9736
- } else t6 = $[13];
10576
+ $[12] = ticketAuth;
10577
+ $[13] = tokenEndpoint;
10578
+ $[14] = t6;
10579
+ } else t6 = $[14];
9737
10580
  let t7;
9738
- if ($[14] !== autoConnectLocal || $[15] !== onToolsChange || $[16] !== t6) {
10581
+ if ($[15] !== autoConnectLocal || $[16] !== onToolsChange || $[17] !== t6) {
9739
10582
  t7 = /* @__PURE__ */ jsx(MCPToolsProvider, {
9740
10583
  autoConnectLocal,
9741
10584
  onToolsChange,
9742
10585
  children: t6
9743
10586
  });
9744
- $[14] = autoConnectLocal;
9745
- $[15] = onToolsChange;
9746
- $[16] = t6;
9747
- $[17] = t7;
9748
- } else t7 = $[17];
10587
+ $[15] = autoConnectLocal;
10588
+ $[16] = onToolsChange;
10589
+ $[17] = t6;
10590
+ $[18] = t7;
10591
+ } else t7 = $[18];
9749
10592
  const content = t7;
9750
10593
  let t8;
9751
- if ($[18] !== content || $[19] !== excludeToolNames || $[20] !== excludeToolPrefixes || $[21] !== excludeTools || $[22] !== hasExclusions) {
10594
+ if ($[19] !== content || $[20] !== excludeToolNames || $[21] !== excludeToolPrefixes || $[22] !== excludeTools || $[23] !== hasExclusions) {
9752
10595
  t8 = hasExclusions ? /* @__PURE__ */ jsx(ToolExclusionProvider, {
9753
10596
  exclude: excludeTools,
9754
10597
  excludeNames: excludeToolNames,
9755
10598
  excludePrefixes: excludeToolPrefixes,
9756
10599
  children: content
9757
10600
  }) : content;
9758
- $[18] = content;
9759
- $[19] = excludeToolNames;
9760
- $[20] = excludeToolPrefixes;
9761
- $[21] = excludeTools;
9762
- $[22] = hasExclusions;
9763
- $[23] = t8;
9764
- } else t8 = $[23];
10601
+ $[19] = content;
10602
+ $[20] = excludeToolNames;
10603
+ $[21] = excludeToolPrefixes;
10604
+ $[22] = excludeTools;
10605
+ $[23] = hasExclusions;
10606
+ $[24] = t8;
10607
+ } else t8 = $[24];
9765
10608
  let t9;
9766
- if ($[24] !== defaultMode || $[25] !== defaultOpen || $[26] !== onModeChange || $[27] !== onOpenChange || $[28] !== open || $[29] !== t8) {
10609
+ if ($[25] !== defaultMode || $[26] !== defaultOpen || $[27] !== onModeChange || $[28] !== onOpenChange || $[29] !== open || $[30] !== t8) {
9767
10610
  t9 = /* @__PURE__ */ jsx(AgentUIProvider, {
9768
10611
  open,
9769
10612
  defaultOpen,
@@ -9772,16 +10615,16 @@ const AgentProvider = (t0) => {
9772
10615
  onModeChange,
9773
10616
  children: t8
9774
10617
  });
9775
- $[24] = defaultMode;
9776
- $[25] = defaultOpen;
9777
- $[26] = onModeChange;
9778
- $[27] = onOpenChange;
9779
- $[28] = open;
9780
- $[29] = t8;
9781
- $[30] = t9;
9782
- } else t9 = $[30];
10618
+ $[25] = defaultMode;
10619
+ $[26] = defaultOpen;
10620
+ $[27] = onModeChange;
10621
+ $[28] = onOpenChange;
10622
+ $[29] = open;
10623
+ $[30] = t8;
10624
+ $[31] = t9;
10625
+ } else t9 = $[31];
9783
10626
  let t10;
9784
- if ($[31] !== dashboardBaseUrl || $[32] !== docsBaseUrl || $[33] !== onAuthError || $[34] !== onClose || $[35] !== showErrorDebug || $[36] !== t9) {
10627
+ if ($[32] !== dashboardBaseUrl || $[33] !== docsBaseUrl || $[34] !== onAuthError || $[35] !== onClose || $[36] !== showErrorDebug || $[37] !== t9) {
9785
10628
  t10 = /* @__PURE__ */ jsx(AuthErrorBoundary, {
9786
10629
  dashboardBaseUrl,
9787
10630
  docsBaseUrl,
@@ -9790,14 +10633,14 @@ const AgentProvider = (t0) => {
9790
10633
  showDebug: showErrorDebug,
9791
10634
  children: t9
9792
10635
  });
9793
- $[31] = dashboardBaseUrl;
9794
- $[32] = docsBaseUrl;
9795
- $[33] = onAuthError;
9796
- $[34] = onClose;
9797
- $[35] = showErrorDebug;
9798
- $[36] = t9;
9799
- $[37] = t10;
9800
- } else t10 = $[37];
10636
+ $[32] = dashboardBaseUrl;
10637
+ $[33] = docsBaseUrl;
10638
+ $[34] = onAuthError;
10639
+ $[35] = onClose;
10640
+ $[36] = showErrorDebug;
10641
+ $[37] = t9;
10642
+ $[38] = t10;
10643
+ } else t10 = $[38];
9801
10644
  return t10;
9802
10645
  };
9803
10646
 
@@ -10227,7 +11070,7 @@ function _temp() {
10227
11070
  * - No @property declarations (not supported in shadow DOM)
10228
11071
  * - Uses :host selector for theming (in addition to :root)
10229
11072
  */
10230
- const WEBMCP_SHADOW_STYLES = "/*! tailwindcss v4.1.18 | 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-scale-x:1;--tw-scale-y:1;--tw-scale-z:1;--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-animation-delay:0s;--tw-animation-direction:normal;--tw-animation-duration:initial;--tw-animation-fill-mode:none;--tw-animation-iteration-count:1;--tw-enter-blur:0;--tw-enter-opacity:1;--tw-enter-rotate:0;--tw-enter-scale:1;--tw-enter-translate-x:0;--tw-enter-translate-y:0;--tw-exit-blur:0;--tw-exit-opacity:1;--tw-exit-rotate:0;--tw-exit-scale:1;--tw-exit-translate-x:0;--tw-exit-translate-y:0}}}@layer theme{:root,:host{--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-orange-400:oklch(75% .183 55.934);--color-orange-500:oklch(70.5% .213 47.604);--color-orange-600:oklch(64.6% .222 41.116);--color-amber-300:oklch(87.9% .169 91.605);--color-amber-400:oklch(82.8% .189 84.429);--color-amber-500:oklch(76.9% .188 70.08);--color-amber-600:oklch(66.6% .179 58.318);--color-green-400:oklch(79.2% .209 151.711);--color-green-500:oklch(72.3% .219 149.579);--color-emerald-300:oklch(84.5% .143 164.978);--color-emerald-400:oklch(76.5% .177 163.223);--color-emerald-500:oklch(69.6% .17 162.48);--color-emerald-600:oklch(59.6% .145 163.225);--color-blue-300:oklch(80.9% .105 251.813);--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-300:oklch(86.9% .022 252.894);--color-slate-500:oklch(55.4% .046 257.417);--color-slate-600:oklch(44.6% .043 257.281);--color-slate-900:oklch(20.8% .042 265.755);--color-gray-50:oklch(98.5% .002 247.839);--color-gray-100:oklch(96.7% .003 264.542);--color-gray-200:oklch(92.8% .006 264.531);--color-gray-400:oklch(70.7% .022 261.325);--color-gray-500:oklch(55.1% .027 264.364);--color-gray-600:oklch(44.6% .03 256.802);--color-gray-800:oklch(27.8% .033 256.848);--color-gray-900:oklch(21% .034 264.665);--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-600:oklch(44.2% .017 285.786);--color-zinc-700:oklch(37% .013 285.805);--color-zinc-800:oklch(27.4% .006 286.033);--color-black:#000;--color-white:#fff;--spacing:.25rem;--container-sm:24rem;--container-lg:32rem;--container-3xl:48rem;--container-6xl:72rem;--text-xs:.75rem;--text-xs--line-height:calc(1/.75);--text-sm:.875rem;--text-sm--line-height:calc(1.25/.875);--text-base:1rem;--text-base--line-height:calc(1.5/1);--text-lg:1.125rem;--text-lg--line-height:calc(1.75/1.125);--text-xl:1.25rem;--text-xl--line-height:calc(1.75/1.25);--text-2xl:1.5rem;--text-2xl--line-height:calc(2/1.5);--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--font-weight-extrabold:800;--tracking-tight:-.025em;--tracking-wide:.025em;--tracking-widest:.1em;--leading-normal:1.5;--leading-relaxed:1.625;--radius-xs:.125rem;--radius-2xl:1rem;--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;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4,0,.2,1);--default-font-family:var(--char-font-sans);--default-mono-font-family:var(--char-font-mono);--color-background:var(--char-color-background)}}@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}:host,:root{--char-color-background:oklch(100% 0 0);--char-color-foreground:oklch(14.1% .005 285.823);--char-color-primary:oklch(21% .006 285.885);--char-color-primary-foreground:oklch(98.5% 0 0);--char-color-muted:oklch(96.7% .001 286.375);--char-color-muted-foreground:oklch(55.2% .016 285.938);--char-color-border:oklch(92% .004 286.32);--char-color-success:oklch(70% .2 145);--char-color-warning:oklch(75% .15 85);--char-color-error:oklch(65% .25 25);--char-color-card:var(--char-color-background);--char-color-card-foreground:var(--char-color-foreground);--char-color-popover:var(--char-color-background);--char-color-popover-foreground:var(--char-color-foreground);--char-color-secondary:var(--char-color-muted);--char-color-secondary-foreground:var(--char-color-foreground);--char-color-accent:var(--char-color-muted);--char-color-accent-foreground:var(--char-color-foreground);--char-color-destructive:var(--char-color-error);--char-color-destructive-foreground:var(--char-color-primary-foreground);--char-color-input:var(--char-color-border);--char-color-ring:var(--char-color-muted-foreground);--char-user-bubble-bg:var(--char-color-muted);--char-user-bubble-text:var(--char-color-foreground);--char-assistant-bubble-bg:transparent;--char-assistant-bubble-text:var(--char-color-foreground);--char-composer-bg:var(--char-color-background);--char-composer-border:var(--char-color-input);--char-composer-text:var(--char-color-foreground);--char-composer-placeholder:var(--char-color-muted-foreground);--char-composer-button-bg:var(--char-color-primary);--char-composer-button-text:var(--char-color-primary-foreground);--char-tool-bg:var(--char-color-muted);--char-tool-border:var(--char-color-border);--char-tool-text:var(--char-color-foreground);--char-tool-header-bg:var(--char-color-muted);--char-tool-approve-bg:var(--char-color-primary);--char-tool-approve-text:var(--char-color-primary-foreground);--char-tool-deny-bg:transparent;--char-tool-deny-text:var(--char-color-muted-foreground);--char-code-bg:oklch(14.1% .005 285.823);--char-code-text:oklch(98.5% 0 0);--char-code-header-bg:var(--char-color-muted-foreground)}@supports (color:color-mix(in lab, red, red)){:host,:root{--char-code-header-bg:color-mix(in oklch,var(--char-color-muted-foreground),transparent 85%)}}:host,:root{--char-radius:.75rem;--char-radius-sm:calc(var(--char-radius) - 4px);--char-radius-md:calc(var(--char-radius) - 2px);--char-radius-lg:var(--char-radius);--char-radius-xl:calc(var(--char-radius) + 4px);--char-radius-full:9999px;--char-spacing-unit:.25rem;--char-font-sans:ui-sans-serif,system-ui,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol\",\"Noto Color Emoji\";--char-font-mono:ui-monospace,SFMono-Regular,\"SF Mono\",Menlo,Consolas,monospace;--char-font-size-xs:.6875rem;--char-font-size-sm:.75rem;--char-font-size-base:.875rem;--char-font-size-lg:1rem;--char-duration-fast:.15s;--char-duration-normal:.25s;--char-duration-slow:.4s;--char-easing-default:cubic-bezier(.4,0,.2,1);--char-easing-spring:cubic-bezier(.34,1.56,.64,1);--char-z-base:0;--char-z-content:10;--char-z-overlay:50;--char-z-max:2147480000;--char-shadow-sm:0 1px 2px #0000000d;--char-shadow-md:0 4px 6px -1px #0000001a,0 2px 4px -2px #0000001a;--char-shadow-lg:0 10px 15px -3px #0000001a,0 4px 6px -4px #0000001a;--char-blur-sm:8px;--char-blur-md:12px;--char-blur-lg:20px}:host(.dark),.dark{--char-color-background:oklch(14.1% .005 285.823);--char-color-foreground:oklch(98.5% 0 0);--char-color-primary:oklch(92% .004 286.32);--char-color-primary-foreground:oklch(21% .006 285.885);--char-color-muted:oklch(27.4% .006 286.033);--char-color-muted-foreground:oklch(70.5% .015 286.067);--char-color-border:oklch(100% 0 0/.1);--char-color-input:oklch(100% 0 0/.15);--char-color-ring:oklch(55.2% .016 285.938);--char-color-success:oklch(75% .18 145);--char-color-warning:oklch(80% .14 85);--char-color-error:oklch(70% .22 25)}*{border-color:var(--char-color-border);outline-color:var(--char-color-ring)}@supports (color:color-mix(in lab, red, red)){*{outline-color:color-mix(in oklch,var(--char-color-ring),transparent 50%)}}}@layer components{.char-animate-fade-in-up{opacity:0;animation:.5s ease-out forwards char-fade-in-up}.char-animate-gradient-shift{background-size:200% 200%;animation:20s ease-in-out infinite char-gradient-shift}.char-animate-float-slow{animation:20s ease-in-out infinite char-float}.char-animate-float-delayed{animation:25s ease-in-out 5s infinite char-float-delayed}.char-animate-shimmer{animation:2s linear infinite char-shimmer}.char-animate-pulse-success{animation:.6s ease-out char-pulse-success}.char-animate-shake{animation:.3s ease-out char-shake}.char-animate-pulse-glow{animation:2s ease-in-out infinite char-pulse-glow}.char-animate-gradient-x{animation:8s ease-in-out infinite char-gradient-x}.char-transition-spring{transition:all var(--char-duration-slow)var(--char-easing-spring)}.char-transition-smooth{transition:all var(--char-duration-normal)var(--char-easing-default)}.char-app-shell{z-index:var(--char-z-base);background-color:var(--char-color-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 .char-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)}.char-app-shell:before,.char-app-shell:after{content:\"\";pointer-events:none;border-radius:var(--char-radius-full);filter:blur(32px);opacity:.6;z-index:-1;position:absolute;inset:auto}.char-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}.char-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}.char-toolbar-surface{border-top:1px solid var(--char-color-border);background:linear-gradient(to right,var(--char-color-background),var(--char-color-background),var(--char-color-background))}@supports (color:color-mix(in lab, red, red)){.char-toolbar-surface{background:linear-gradient(to right,var(--char-color-background),color-mix(in oklch,var(--char-color-background),transparent 5%),var(--char-color-background))}}.char-toolbar-surface{-webkit-backdrop-filter:blur(var(--char-blur-md));backdrop-filter:blur(var(--char-blur-md))}@supports ((-webkit-backdrop-filter:blur(12px)) or (backdrop-filter:blur(12px))){.char-toolbar-surface{background:var(--char-color-background)}@supports (color:color-mix(in lab, red, red)){.char-toolbar-surface{background:color-mix(in oklch,var(--char-color-background),transparent 20%)}}}.char-toolbar-surface-top{border-bottom:1px solid var(--char-color-border);background:linear-gradient(to right,var(--char-color-background),var(--char-color-background),var(--char-color-background))}@supports (color:color-mix(in lab, red, red)){.char-toolbar-surface-top{background:linear-gradient(to right,var(--char-color-background),color-mix(in oklch,var(--char-color-background),transparent 5%),var(--char-color-background))}}.char-toolbar-surface-top{-webkit-backdrop-filter:blur(var(--char-blur-md));backdrop-filter:blur(var(--char-blur-md))}@supports ((-webkit-backdrop-filter:blur(12px)) or (backdrop-filter:blur(12px))){.char-toolbar-surface-top{background:var(--char-color-background)}@supports (color:color-mix(in lab, red, red)){.char-toolbar-surface-top{background:color-mix(in oklch,var(--char-color-background),transparent 20%)}}}.char-toolbar-inner{justify-content:space-between;align-items:center;padding:.5rem .75rem;display:flex}.char-toolbar-card{background:var(--char-color-card);justify-content:space-between;align-items:center;gap:.5rem;display:flex}@supports (color:color-mix(in lab, red, red)){.char-toolbar-card{background:color-mix(in oklch,var(--char-color-card),transparent 60%)}}.char-toolbar-card{border:1px solid var(--char-color-border);border-radius:var(--char-radius-lg);padding:.5rem .75rem}.char-toolbar-group{align-items:center;gap:.25rem;display:flex}.char-btn-toolbar-primary{border-radius:var(--char-radius-lg);background:linear-gradient(to right,var(--char-color-primary),var(--char-color-primary));align-items:center;gap:.5rem;height:2.25rem;padding:0 .75rem;display:flex}@supports (color:color-mix(in lab, red, red)){.char-btn-toolbar-primary{background:linear-gradient(to right,color-mix(in oklch,var(--char-color-primary),transparent 95%),color-mix(in oklch,var(--char-color-primary),transparent 90%))}}.char-btn-toolbar-primary{border:1px solid var(--char-color-primary)}@supports (color:color-mix(in lab, red, red)){.char-btn-toolbar-primary{border:1px solid color-mix(in oklch,var(--char-color-primary),transparent 80%)}}.char-btn-toolbar-primary{transition:all var(--char-duration-fast)}.char-btn-toolbar-primary:hover{background:linear-gradient(to right,var(--char-color-primary),var(--char-color-primary))}@supports (color:color-mix(in lab, red, red)){.char-btn-toolbar-primary:hover{background:linear-gradient(to right,color-mix(in oklch,var(--char-color-primary),transparent 90%),color-mix(in oklch,var(--char-color-primary),transparent 80%))}}.char-btn-toolbar-icon-primary{border-radius:var(--char-radius-full);background:linear-gradient(to bottom right,var(--char-color-primary),var(--char-color-primary));width:2rem;height:2rem;padding:0}@supports (color:color-mix(in lab, red, red)){.char-btn-toolbar-icon-primary{background:linear-gradient(to bottom right,color-mix(in oklch,var(--char-color-primary),transparent 90%),color-mix(in oklch,var(--char-color-primary),transparent 80%))}}.char-btn-toolbar-icon-primary{border:1px solid var(--char-color-primary)}@supports (color:color-mix(in lab, red, red)){.char-btn-toolbar-icon-primary{border:1px solid color-mix(in oklch,var(--char-color-primary),transparent 70%)}}.char-btn-toolbar-icon-primary{box-shadow:var(--char-shadow-sm);transition:all var(--char-duration-fast)}.char-btn-toolbar-icon-primary:hover{background:linear-gradient(to bottom right,var(--char-color-primary),var(--char-color-primary))}@supports (color:color-mix(in lab, red, red)){.char-btn-toolbar-icon-primary:hover{background:linear-gradient(to bottom right,color-mix(in oklch,var(--char-color-primary),transparent 80%),color-mix(in oklch,var(--char-color-primary),transparent 70%))}}.char-btn-toolbar-icon-secondary{border-radius:var(--char-radius-full);background:linear-gradient(to bottom right,var(--char-color-secondary),var(--char-color-secondary));width:2rem;height:2rem;padding:0}@supports (color:color-mix(in lab, red, red)){.char-btn-toolbar-icon-secondary{background:linear-gradient(to bottom right,color-mix(in oklch,var(--char-color-secondary),transparent 90%),color-mix(in oklch,var(--char-color-secondary),transparent 80%))}}.char-btn-toolbar-icon-secondary{border:1px solid var(--char-color-secondary)}@supports (color:color-mix(in lab, red, red)){.char-btn-toolbar-icon-secondary{border:1px solid color-mix(in oklch,var(--char-color-secondary),transparent 70%)}}.char-btn-toolbar-icon-secondary{box-shadow:var(--char-shadow-sm);transition:all var(--char-duration-fast)}.char-btn-toolbar-icon-secondary:hover{background:linear-gradient(to bottom right,var(--char-color-secondary),var(--char-color-secondary))}@supports (color:color-mix(in lab, red, red)){.char-btn-toolbar-icon-secondary:hover{background:linear-gradient(to bottom right,color-mix(in oklch,var(--char-color-secondary),transparent 80%),color-mix(in oklch,var(--char-color-secondary),transparent 70%))}}.char-badge-compact{height:1.25rem;padding:0 .5rem;font-size:10px}.char-badge-mini{height:1rem;padding:0 .375rem;font-size:10px}.char-shimmer{background:linear-gradient(90deg,transparent,var(--char-color-foreground),transparent);animation:3s linear infinite char-shimmer}@supports (color:color-mix(in lab, red, red)){.char-shimmer{background:linear-gradient(90deg,transparent,color-mix(in oklch,var(--char-color-foreground),transparent 90%),transparent)}}.char-shimmer{background-size:1000px 100%}.char-gradient-text{background:linear-gradient(to right,var(--char-color-foreground),var(--char-color-foreground))}@supports (color:color-mix(in lab, red, red)){.char-gradient-text{background:linear-gradient(to right,var(--char-color-foreground),color-mix(in oklch,var(--char-color-foreground),transparent 30%))}}.char-gradient-text{-webkit-text-fill-color:transparent;-webkit-background-clip:text;background-clip:text}.char-glass{background:var(--char-color-background)}@supports (color:color-mix(in lab, red, red)){.char-glass{background:color-mix(in oklch,var(--char-color-background),transparent 50%)}}.char-glass{-webkit-backdrop-filter:blur(var(--char-blur-md));backdrop-filter:blur(var(--char-blur-md));border:1px solid var(--char-color-border)}@supports (color:color-mix(in lab, red, red)){.char-glass{border:1px solid color-mix(in oklch,var(--char-color-border),transparent 50%)}}.char-tool-card{transition:all .3s ease-out}.char-tool-card:hover{box-shadow:var(--char-shadow-lg);transform:scale(1.02)}.char-tool-border-calling{position:relative;overflow:hidden}.char-tool-border-calling:before{content:\"\";background:conic-gradient(from 0deg,transparent 0deg,transparent 60deg,var(--char-color-primary)90deg,var(--char-color-primary)120deg,var(--char-color-primary)150deg,transparent 180deg,transparent 360deg);position:absolute;inset:-50%}@supports (color:color-mix(in lab, red, red)){.char-tool-border-calling:before{background:conic-gradient(from 0deg,transparent 0deg,transparent 60deg,color-mix(in oklch,var(--char-color-primary),transparent 50%)90deg,color-mix(in oklch,var(--char-color-primary),transparent 30%)120deg,color-mix(in oklch,var(--char-color-primary),transparent 50%)150deg,transparent 180deg,transparent 360deg)}}.char-tool-border-calling:before{animation:1.5s linear infinite char-border-rotate}.char-tool-border-success{background:var(--char-color-success)}@supports (color:color-mix(in lab, red, red)){.char-tool-border-success{background:color-mix(in oklch,var(--char-color-success),transparent 60%)}}.char-tool-border-success{box-shadow:0 0 12px var(--char-color-success),inset 0 0 8px var(--char-color-success)}@supports (color:color-mix(in lab, red, red)){.char-tool-border-success{box-shadow:0 0 12px color-mix(in oklch,var(--char-color-success),transparent 70%),inset 0 0 8px color-mix(in oklch,var(--char-color-success),transparent 90%)}}.char-tool-border-error{background:var(--char-color-error)}@supports (color:color-mix(in lab, red, red)){.char-tool-border-error{background:color-mix(in oklch,var(--char-color-error),transparent 60%)}}.char-tool-border-error{box-shadow:0 0 12px var(--char-color-error),inset 0 0 8px var(--char-color-error)}@supports (color:color-mix(in lab, red, red)){.char-tool-border-error{box-shadow:0 0 12px color-mix(in oklch,var(--char-color-error),transparent 70%),inset 0 0 8px color-mix(in oklch,var(--char-color-error),transparent 90%)}}.char-scrollbar-thin{scrollbar-width:thin;scrollbar-color:var(--char-color-primary)transparent}@supports (color:color-mix(in lab, red, red)){.char-scrollbar-thin{scrollbar-color:color-mix(in oklch,var(--char-color-primary),transparent 80%)transparent}}.char-scrollbar-thin::-webkit-scrollbar{width:6px;height:6px}.char-scrollbar-thin::-webkit-scrollbar-track{background:0 0}.char-scrollbar-thin::-webkit-scrollbar-thumb{background-color:var(--char-color-primary)}@supports (color:color-mix(in lab, red, red)){.char-scrollbar-thin::-webkit-scrollbar-thumb{background-color:color-mix(in oklch,var(--char-color-primary),transparent 80%)}}.char-scrollbar-thin::-webkit-scrollbar-thumb{border-radius:3px}.char-scrollbar-thin::-webkit-scrollbar-thumb:hover{background-color:var(--char-color-primary)}@supports (color:color-mix(in lab, red, red)){.char-scrollbar-thin::-webkit-scrollbar-thumb:hover{background-color:color-mix(in oklch,var(--char-color-primary),transparent 70%)}}.char-glass-pill{background:var(--char-color-background)}@supports (color:color-mix(in lab, red, red)){.char-glass-pill{background:color-mix(in oklch,var(--char-color-background),transparent 15%)}}.char-glass-pill{-webkit-backdrop-filter:blur(var(--char-blur-lg))saturate(150%);box-shadow:0 4px 16px var(--char-color-foreground),inset 0 .5px 0 var(--char-color-foreground)}@supports (color:color-mix(in lab, red, red)){.char-glass-pill{box-shadow:0 4px 16px color-mix(in oklch,var(--char-color-foreground),transparent 80%),inset 0 .5px 0 color-mix(in oklch,var(--char-color-foreground),transparent 92%)}}.char-glass-pill{border:1px solid var(--char-color-foreground)}@supports (color:color-mix(in lab, red, red)){.char-glass-pill{border:1px solid color-mix(in oklch,var(--char-color-foreground),transparent 94%)}}.char-glass-pill:before{content:\"\";border-radius:inherit;background:linear-gradient(180deg,var(--char-color-foreground)0%,transparent 40%);position:absolute;inset:0}@supports (color:color-mix(in lab, red, red)){.char-glass-pill:before{background:linear-gradient(180deg,color-mix(in oklch,var(--char-color-foreground),transparent 96%)0%,transparent 40%)}}.char-glass-pill:before{pointer-events:none;z-index:1}.char-glass-pill-collapsed{background:var(--char-color-background)}@supports (color:color-mix(in lab, red, red)){.char-glass-pill-collapsed{background:color-mix(in oklch,var(--char-color-background),transparent 15%)}}.char-glass-pill-collapsed{-webkit-backdrop-filter:blur(var(--char-blur-lg))saturate(150%);box-shadow:0 2px 8px var(--char-color-foreground),inset 0 .5px 0 var(--char-color-foreground)}@supports (color:color-mix(in lab, red, red)){.char-glass-pill-collapsed{box-shadow:0 2px 8px color-mix(in oklch,var(--char-color-foreground),transparent 80%),inset 0 .5px 0 color-mix(in oklch,var(--char-color-foreground),transparent 92%)}}.char-glass-pill-collapsed{border:1px solid var(--char-color-foreground)}@supports (color:color-mix(in lab, red, red)){.char-glass-pill-collapsed{border:1px solid color-mix(in oklch,var(--char-color-foreground),transparent 94%)}}.char-glass-pill-hovered{background:var(--char-color-background)}@supports (color:color-mix(in lab, red, red)){.char-glass-pill-hovered{background:color-mix(in oklch,var(--char-color-background),transparent 20%)}}.char-glass-pill-hovered{-webkit-backdrop-filter:blur(16px)saturate(140%);box-shadow:0 2px 12px var(--char-color-foreground)}@supports (color:color-mix(in lab, red, red)){.char-glass-pill-hovered{box-shadow:0 2px 12px color-mix(in oklch,var(--char-color-foreground),transparent 82%)}}.char-glass-pill-hovered{border:1px solid var(--char-color-foreground)}@supports (color:color-mix(in lab, red, red)){.char-glass-pill-hovered{border:1px solid color-mix(in oklch,var(--char-color-foreground),transparent 94%)}}.char-glass-shimmer{background:linear-gradient(90deg,var(--char-color-foreground)0%,var(--char-color-foreground)50%,var(--char-color-foreground)100%)}@supports (color:color-mix(in lab, red, red)){.char-glass-shimmer{background:linear-gradient(90deg,color-mix(in oklch,var(--char-color-foreground),transparent 92%)0%,color-mix(in oklch,var(--char-color-foreground),transparent 85%)50%,color-mix(in oklch,var(--char-color-foreground),transparent 92%)100%)}}.char-glass-shimmer{background-size:200% 100%;animation:4s ease-in-out infinite char-glass-shimmer}.char-scroll-touch{-webkit-overflow-scrolling:touch;overscroll-behavior:contain}.char-scroll-fade-y{-webkit-mask-image:linear-gradient(#0000,#000 8px calc(100% - 8px),#0000);mask-image:linear-gradient(#0000,#000 8px calc(100% - 8px),#0000)}.char-pb-safe{padding-bottom:env(safe-area-inset-bottom,0px)}.char-mb-safe{margin-bottom:env(safe-area-inset-bottom,0px)}.char-bottom-safe{bottom:max(1rem,env(safe-area-inset-bottom,0px))}@supports (padding-bottom:env(safe-area-inset-bottom)){.char-pill-safe-bottom{padding-bottom:calc(env(safe-area-inset-bottom,0px) + .5rem)}}}@layer utilities{.\\@container\\/card-header{container:card-header/inline-size}.\\@container{container-type:inline-size}.pointer-events-auto{pointer-events:auto}.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)}.inset-x-0{inset-inline:calc(var(--spacing)*0)}.inset-y-0{inset-block:calc(var(--spacing)*0)}.-top-1{top:calc(var(--spacing)*-1)}.-top-1\\.5{top:calc(var(--spacing)*-1.5)}.-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-0\\.5{right:calc(var(--spacing)*-.5)}.-right-1{right:calc(var(--spacing)*-1)}.-right-1\\.5{right:calc(var(--spacing)*-1.5)}.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)}.-bottom-0\\.5{bottom:calc(var(--spacing)*-.5)}.bottom-0{bottom:calc(var(--spacing)*0)}.bottom-full{bottom:100%}.left-0{left:calc(var(--spacing)*0)}.left-1\\/2{left:50%}.left-2{left:calc(var(--spacing)*2)}.left-\\[50\\%\\]{left:50%}.z-0{z-index:0}.z-10{z-index:10}.z-20{z-index:20}.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-span-2{grid-row:span 2/span 2}.row-start-1{grid-row-start:1}.row-start-2{grid-row-start:2}.container{width:100%}@media (min-width:40rem){.container{max-width:40rem}}@media (min-width:48rem){.container{max-width:48rem}}@media (min-width:64rem){.container{max-width:64rem}}@media (min-width:80rem){.container{max-width:80rem}}@media (min-width:96rem){.container{max-width:96rem}}.-m-1{margin:calc(var(--spacing)*-1)}.m-0{margin:calc(var(--spacing)*0)}.-mx-1{margin-inline:calc(var(--spacing)*-1)}.mx-2{margin-inline:calc(var(--spacing)*2)}.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-4{margin-block:calc(var(--spacing)*4)}.my-5{margin-block:calc(var(--spacing)*5)}.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-1\\.5{margin-top:calc(var(--spacing)*1.5)}.mt-2{margin-top:calc(var(--spacing)*2)}.mt-3{margin-top:calc(var(--spacing)*3)}.mt-4{margin-top:calc(var(--spacing)*4)}.mt-5{margin-top:calc(var(--spacing)*5)}.mt-6{margin-top:calc(var(--spacing)*6)}.mt-auto{margin-top:auto}.mr-1{margin-right:calc(var(--spacing)*1)}.mr-1\\.5{margin-right:calc(var(--spacing)*1.5)}.-mb-1{margin-bottom:calc(var(--spacing)*-1)}.-mb-2{margin-bottom:calc(var(--spacing)*-2)}.mb-0\\.5{margin-bottom:calc(var(--spacing)*.5)}.mb-1{margin-bottom:calc(var(--spacing)*1)}.mb-1\\.5{margin-bottom:calc(var(--spacing)*1.5)}.mb-2{margin-bottom:calc(var(--spacing)*2)}.mb-3{margin-bottom:calc(var(--spacing)*3)}.mb-4{margin-bottom:calc(var(--spacing)*4)}.mb-5{margin-bottom:calc(var(--spacing)*5)}.mb-6{margin-bottom:calc(var(--spacing)*6)}.-ml-1{margin-left:calc(var(--spacing)*-1)}.ml-0\\.5{margin-left:calc(var(--spacing)*.5)}.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-6{margin-left:calc(var(--spacing)*6)}.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}.contents{display:contents}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.table{display:table}.aspect-square{aspect-ratio:1}.size-2{width:calc(var(--spacing)*2);height:calc(var(--spacing)*2)}.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-7{width:calc(var(--spacing)*7);height:calc(var(--spacing)*7)}.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{height:calc(var(--spacing)*1)}.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-4\\.5{height:calc(var(--spacing)*4.5)}.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-11{height:calc(var(--spacing)*11)}.h-16{height:calc(var(--spacing)*16)}.h-\\[var\\(--radix-select-trigger-height\\)\\]{height:var(--radix-select-trigger-height)}.h-auto{height:auto}.h-full{height:100%}.h-px{height:1px}.h-screen{height:100vh}.max-h-\\(--radix-dropdown-menu-content-available-height\\){max-height:var(--radix-dropdown-menu-content-available-height)}.max-h-\\(--radix-select-content-available-height\\){max-height:var(--radix-select-content-available-height)}.max-h-20{max-height:calc(var(--spacing)*20)}.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-64{max-height:calc(var(--spacing)*64)}.max-h-\\[30vh\\]{max-height:30vh}.max-h-\\[80dvh\\]{max-height:80dvh}.max-h-\\[80vh\\]{max-height:80vh}.max-h-\\[90vh\\]{max-height:90vh}.min-h-0{min-height:calc(var(--spacing)*0)}.min-h-7{min-height:calc(var(--spacing)*7)}.min-h-11{min-height:calc(var(--spacing)*11)}.min-h-14{min-height:calc(var(--spacing)*14)}.min-h-40{min-height:calc(var(--spacing)*40)}.min-h-screen{min-height:100vh}.w-0\\.5{width:calc(var(--spacing)*.5)}.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-3\\/4{width:75%}.w-4{width:calc(var(--spacing)*4)}.w-4\\.5{width:calc(var(--spacing)*4.5)}.w-5{width:calc(var(--spacing)*5)}.w-6{width:calc(var(--spacing)*6)}.w-8{width:calc(var(--spacing)*8)}.w-11{width:calc(var(--spacing)*11)}.w-auto{width:auto}.w-fit{width:fit-content}.w-full{width:100%}.w-px{width:1px}.max-w-\\(--thread-max-width\\){max-width:var(--thread-max-width)}.max-w-6xl{max-width:var(--container-6xl)}.max-w-24{max-width:calc(var(--spacing)*24)}.max-w-32{max-width:calc(var(--spacing)*32)}.max-w-\\[75\\%\\]{max-width:75%}.max-w-\\[100px\\]{max-width:100px}.max-w-\\[140px\\]{max-width:140px}.max-w-\\[calc\\(100\\%-2rem\\)\\]{max-width:calc(100% - 2rem)}.max-w-full{max-width:100%}.max-w-lg{max-width:var(--container-lg)}.min-w-0{min-width:calc(var(--spacing)*0)}.min-w-4{min-width:calc(var(--spacing)*4)}.min-w-7{min-width:calc(var(--spacing)*7)}.min-w-11{min-width:calc(var(--spacing)*11)}.min-w-\\[8rem\\]{min-width:8rem}.min-w-\\[var\\(--radix-select-trigger-width\\)\\]{min-width:var(--radix-select-trigger-width)}.flex-1{flex:1}.flex-none{flex:none}.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-dropdown-menu-content-transform-origin\\){transform-origin:var(--radix-dropdown-menu-content-transform-origin)}.origin-\\(--radix-select-content-transform-origin\\){transform-origin:var(--radix-select-content-transform-origin)}.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-\\[-50\\%\\]{--tw-translate-x:-50%;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)}.scale-75{--tw-scale-x:75%;--tw-scale-y:75%;--tw-scale-z:75%;scale:var(--tw-scale-x)var(--tw-scale-y)}.scale-100{--tw-scale-x:100%;--tw-scale-y:100%;--tw-scale-z:100%;scale:var(--tw-scale-x)var(--tw-scale-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,)}.transform-gpu{transform:translateZ(0)var(--tw-rotate-x,)var(--tw-rotate-y,)var(--tw-rotate-z,)var(--tw-skew-x,)var(--tw-skew-y,)}.animate-in{animation:enter var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none)}.animate-pulse{animation:var(--animate-pulse)}.animate-spin{animation:var(--animate-spin)}.cursor-default{cursor:default}.cursor-grab{cursor:grab}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.resize{resize:both}.resize-none{resize:none}.scroll-m-20{scroll-margin:calc(var(--spacing)*20)}.scroll-my-1{scroll-margin-block:calc(var(--spacing)*1)}.list-inside{list-style-position:inside}.list-decimal{list-style-type:decimal}.list-disc{list-style-type:disc}.auto-rows-auto{grid-auto-rows:auto}.auto-rows-min{grid-auto-rows:min-content}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.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}.grid-rows-\\[auto_auto\\]{grid-template-rows:auto auto}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.flex-row{flex-direction:row}.flex-wrap{flex-wrap:wrap}.content-start{align-content:flex-start}.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}.justify-items-end{justify-items:end}.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)}.gap-6{gap:calc(var(--spacing)*6)}:where(.space-y-0\\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*.5)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*.5)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-1>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*1)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*1)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-1\\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*1.5)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*1.5)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-2>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*2)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*2)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-2\\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*2.5)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*2.5)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-3>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*3)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*3)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-4>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*4)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*4)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-6>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*6)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*6)*calc(1 - var(--tw-space-y-reverse)))}.gap-y-2{row-gap:calc(var(--spacing)*2)}.self-center{align-self:center}.self-start{align-self:flex-start}.justify-self-end{justify-self:flex-end}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-visible{overflow:visible}.overflow-x-auto{overflow-x:auto}.overflow-x-hidden{overflow-x:hidden}.overflow-y-auto{overflow-y:auto}.overflow-y-scroll{overflow-y:scroll}.scroll-smooth{scroll-behavior:smooth}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:var(--radius-2xl)}.rounded-\\[2px\\]{border-radius:2px}.rounded-\\[14px\\]{border-radius:14px}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--char-radius-lg)}.rounded-md{border-radius:var(--char-radius-md)}.rounded-none{border-radius:0}.rounded-sm{border-radius:var(--char-radius-sm)}.rounded-xl{border-radius:var(--char-radius-xl)}.rounded-xs{border-radius:var(--radius-xs)}.rounded-t-lg{border-top-left-radius:var(--char-radius-lg);border-top-right-radius:var(--char-radius-lg)}.rounded-t-none\\!{border-top-left-radius:0!important;border-top-right-radius:0!important}.rounded-b-lg{border-bottom-right-radius:var(--char-radius-lg);border-bottom-left-radius:var(--char-radius-lg)}.border{border-style:var(--tw-border-style);border-width:1px}.border-2{border-style:var(--tw-border-style);border-width:2px}.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-r{border-right-style:var(--tw-border-style);border-right-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-l{border-left-style:var(--tw-border-style);border-left-width:1px}.border-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-amber-500\\/30{border-color:#f99c004d}@supports (color:color-mix(in lab, red, red)){.border-amber-500\\/30{border-color:color-mix(in oklab,var(--color-amber-500)30%,transparent)}}.border-amber-500\\/50{border-color:#f99c0080}@supports (color:color-mix(in lab, red, red)){.border-amber-500\\/50{border-color:color-mix(in oklab,var(--color-amber-500)50%,transparent)}}.border-blue-500\\/20{border-color:#3080ff33}@supports (color:color-mix(in lab, red, red)){.border-blue-500\\/20{border-color:color-mix(in oklab,var(--color-blue-500)20%,transparent)}}.border-blue-500\\/30{border-color:#3080ff4d}@supports (color:color-mix(in lab, red, red)){.border-blue-500\\/30{border-color:color-mix(in oklab,var(--color-blue-500)30%,transparent)}}.border-border,.border-border\\/50{border-color:var(--char-color-border)}@supports (color:color-mix(in lab, red, red)){.border-border\\/50{border-color:color-mix(in oklab,var(--char-color-border)50%,transparent)}}.border-composer-border{border-color:var(--char-composer-border)}.border-destructive,.border-destructive\\/20{border-color:var(--char-color-destructive)}@supports (color:color-mix(in lab, red, red)){.border-destructive\\/20{border-color:color-mix(in oklab,var(--char-color-destructive)20%,transparent)}}.border-emerald-500\\/20{border-color:#00bb7f33}@supports (color:color-mix(in lab, red, red)){.border-emerald-500\\/20{border-color:color-mix(in oklab,var(--color-emerald-500)20%,transparent)}}.border-foreground\\/20{border-color:var(--char-color-foreground)}@supports (color:color-mix(in lab, red, red)){.border-foreground\\/20{border-color:color-mix(in oklab,var(--char-color-foreground)20%,transparent)}}.border-gray-200{border-color:var(--color-gray-200)}.border-input{border-color:var(--char-color-input)}.border-muted-foreground\\/20{border-color:var(--char-color-muted-foreground)}@supports (color:color-mix(in lab, red, red)){.border-muted-foreground\\/20{border-color:color-mix(in oklab,var(--char-color-muted-foreground)20%,transparent)}}.border-muted-foreground\\/30{border-color:var(--char-color-muted-foreground)}@supports (color:color-mix(in lab, red, red)){.border-muted-foreground\\/30{border-color:color-mix(in oklab,var(--char-color-muted-foreground)30%,transparent)}}.border-orange-500\\/20{border-color:#fe6e0033}@supports (color:color-mix(in lab, red, red)){.border-orange-500\\/20{border-color:color-mix(in oklab,var(--color-orange-500)20%,transparent)}}.border-primary\\/50{border-color:var(--char-color-primary)}@supports (color:color-mix(in lab, red, red)){.border-primary\\/50{border-color:color-mix(in oklab,var(--char-color-primary)50%,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-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\\/8{border-color:#ffffff14}@supports (color:color-mix(in lab, red, red)){.border-white\\/8{border-color:color-mix(in oklab,var(--color-white)8%,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-zinc-200{border-color:var(--color-zinc-200)}.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-zinc-600{border-color:var(--color-zinc-600)}.border-t-muted-foreground\\/60{border-top-color:var(--char-color-muted-foreground)}@supports (color:color-mix(in lab, red, red)){.border-t-muted-foreground\\/60{border-top-color:color-mix(in oklab,var(--char-color-muted-foreground)60%,transparent)}}.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-accent{background-color:var(--char-color-accent)}.bg-amber-500{background-color:var(--color-amber-500)}.bg-amber-500\\/5{background-color:#f99c000d}@supports (color:color-mix(in lab, red, red)){.bg-amber-500\\/5{background-color:color-mix(in oklab,var(--color-amber-500)5%,transparent)}}.bg-amber-500\\/10{background-color:#f99c001a}@supports (color:color-mix(in lab, red, red)){.bg-amber-500\\/10{background-color:color-mix(in oklab,var(--color-amber-500)10%,transparent)}}.bg-amber-500\\/20{background-color:#f99c0033}@supports (color:color-mix(in lab, red, red)){.bg-amber-500\\/20{background-color:color-mix(in oklab,var(--color-amber-500)20%,transparent)}}.bg-background,.bg-background\\/80{background-color:var(--char-color-background)}@supports (color:color-mix(in lab, red, red)){.bg-background\\/80{background-color:color-mix(in oklab,var(--char-color-background)80%,transparent)}}.bg-black\\/30{background-color:#0000004d}@supports (color:color-mix(in lab, red, red)){.bg-black\\/30{background-color:color-mix(in oklab,var(--color-black)30%,transparent)}}.bg-black\\/50{background-color:#00000080}@supports (color:color-mix(in lab, red, red)){.bg-black\\/50{background-color:color-mix(in oklab,var(--color-black)50%,transparent)}}.bg-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-blue-500\\/70{background-color:#3080ffb3}@supports (color:color-mix(in lab, red, red)){.bg-blue-500\\/70{background-color:color-mix(in oklab,var(--color-blue-500)70%,transparent)}}.bg-border{background-color:var(--char-color-border)}.bg-card{background-color:var(--char-color-card)}.bg-code-bg{background-color:var(--char-code-bg)}.bg-code-header-bg{background-color:var(--char-code-header-bg)}.bg-composer-bg{background-color:var(--char-composer-bg)}.bg-destructive,.bg-destructive\\/10{background-color:var(--char-color-destructive)}@supports (color:color-mix(in lab, red, red)){.bg-destructive\\/10{background-color:color-mix(in oklab,var(--char-color-destructive)10%,transparent)}}.bg-emerald-500\\/6{background-color:#00bb7f0f}@supports (color:color-mix(in lab, red, red)){.bg-emerald-500\\/6{background-color:color-mix(in oklab,var(--color-emerald-500)6%,transparent)}}.bg-emerald-500\\/10{background-color:#00bb7f1a}@supports (color:color-mix(in lab, red, red)){.bg-emerald-500\\/10{background-color:color-mix(in oklab,var(--color-emerald-500)10%,transparent)}}.bg-foreground{background-color:var(--char-color-foreground)}.bg-gray-50{background-color:var(--color-gray-50)}.bg-gray-100{background-color:var(--color-gray-100)}.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\\/10{background-color:#00c7581a}@supports (color:color-mix(in lab, red, red)){.bg-green-500\\/10{background-color:color-mix(in oklab,var(--color-green-500)10%,transparent)}}.bg-green-500\\/20{background-color:#00c75833}@supports (color:color-mix(in lab, red, red)){.bg-green-500\\/20{background-color:color-mix(in oklab,var(--color-green-500)20%,transparent)}}.bg-muted{background-color:var(--char-color-muted)}.bg-muted-foreground\\/40{background-color:var(--char-color-muted-foreground)}@supports (color:color-mix(in lab, red, red)){.bg-muted-foreground\\/40{background-color:color-mix(in oklab,var(--char-color-muted-foreground)40%,transparent)}}.bg-muted\\/5{background-color:var(--char-color-muted)}@supports (color:color-mix(in lab, red, red)){.bg-muted\\/5{background-color:color-mix(in oklab,var(--char-color-muted)5%,transparent)}}.bg-muted\\/30{background-color:var(--char-color-muted)}@supports (color:color-mix(in lab, red, red)){.bg-muted\\/30{background-color:color-mix(in oklab,var(--char-color-muted)30%,transparent)}}.bg-muted\\/40{background-color:var(--char-color-muted)}@supports (color:color-mix(in lab, red, red)){.bg-muted\\/40{background-color:color-mix(in oklab,var(--char-color-muted)40%,transparent)}}.bg-muted\\/50{background-color:var(--char-color-muted)}@supports (color:color-mix(in lab, red, red)){.bg-muted\\/50{background-color:color-mix(in oklab,var(--char-color-muted)50%,transparent)}}.bg-orange-500\\/10{background-color:#fe6e001a}@supports (color:color-mix(in lab, red, red)){.bg-orange-500\\/10{background-color:color-mix(in oklab,var(--color-orange-500)10%,transparent)}}.bg-popover{background-color:var(--char-color-popover)}.bg-primary,.bg-primary\\/10{background-color:var(--char-color-primary)}@supports (color:color-mix(in lab, red, red)){.bg-primary\\/10{background-color:color-mix(in oklab,var(--char-color-primary)10%,transparent)}}.bg-primary\\/90{background-color:var(--char-color-primary)}@supports (color:color-mix(in lab, red, red)){.bg-primary\\/90{background-color:color-mix(in oklab,var(--char-color-primary)90%,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(--char-color-secondary)}.bg-slate-500\\/10{background-color:#62748e1a}@supports (color:color-mix(in lab, red, red)){.bg-slate-500\\/10{background-color:color-mix(in oklab,var(--color-slate-500)10%,transparent)}}.bg-transparent{background-color:#0000}.bg-user-bubble-bg{background-color:var(--char-user-bubble-bg)}.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\\/8{background-color:#ffffff14}@supports (color:color-mix(in lab, red, red)){.bg-white\\/8{background-color:color-mix(in oklab,var(--color-white)8%,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\\/20{background-color:#fff3}@supports (color:color-mix(in lab, red, red)){.bg-white\\/20{background-color:color-mix(in oklab,var(--color-white)20%,transparent)}}.bg-white\\/60{background-color:#fff9}@supports (color:color-mix(in lab, red, red)){.bg-white\\/60{background-color:color-mix(in oklab,var(--color-white)60%,transparent)}}.bg-white\\/90{background-color:#ffffffe6}@supports (color:color-mix(in lab, red, red)){.bg-white\\/90{background-color:color-mix(in oklab,var(--color-white)90%,transparent)}}.bg-zinc-100{background-color:var(--color-zinc-100)}.bg-zinc-700\\/50{background-color:#3f3f4680}@supports (color:color-mix(in lab, red, red)){.bg-zinc-700\\/50{background-color:color-mix(in oklab,var(--color-zinc-700)50%,transparent)}}.bg-gradient-to-br{--tw-gradient-position:to bottom right in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.bg-\\[linear-gradient\\(to_top\\,var\\(--color-background\\)\\,transparent\\)\\]{background-image:linear-gradient(to top,var(--color-background),transparent)}.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-current{fill:currentColor}.fill-foreground{fill:var(--char-color-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)}.px-1{padding-inline:calc(var(--spacing)*1)}.px-1\\.5{padding-inline:calc(var(--spacing)*1.5)}.px-2{padding-inline:calc(var(--spacing)*2)}.px-2\\.5{padding-inline:calc(var(--spacing)*2.5)}.px-3{padding-inline:calc(var(--spacing)*3)}.px-4{padding-inline:calc(var(--spacing)*4)}.px-6{padding-inline:calc(var(--spacing)*6)}.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)}.py-6{padding-block:calc(var(--spacing)*6)}.py-8{padding-block:calc(var(--spacing)*8)}.pt-0\\.5{padding-top:calc(var(--spacing)*.5)}.pt-1{padding-top:calc(var(--spacing)*1)}.pt-1\\.5{padding-top:calc(var(--spacing)*1.5)}.pt-2{padding-top:calc(var(--spacing)*2)}.pt-3{padding-top:calc(var(--spacing)*3)}.pt-4{padding-top:calc(var(--spacing)*4)}.pt-14{padding-top:calc(var(--spacing)*14)}.pr-2{padding-right:calc(var(--spacing)*2)}.pr-8{padding-right:calc(var(--spacing)*8)}.pb-1{padding-bottom:calc(var(--spacing)*1)}.pb-3{padding-bottom:calc(var(--spacing)*3)}.pb-4{padding-bottom:calc(var(--spacing)*4)}.pl-2{padding-left:calc(var(--spacing)*2)}.pl-3{padding-left:calc(var(--spacing)*3)}.pl-6{padding-left:calc(var(--spacing)*6)}.pl-8{padding-left:calc(var(--spacing)*8)}.text-center{text-align:center}.text-left{text-align:left}.text-start{text-align:start}.align-middle{vertical-align:middle}.font-mono{font-family:var(--char-font-mono)}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\\[9px\\]{font-size:9px}.text-\\[10px\\]{font-size:10px}.text-\\[11px\\]{font-size:11px}.text-\\[15px\\]{font-size:15px}.leading-7{--tw-leading:calc(var(--spacing)*7);line-height:calc(var(--spacing)*7)}.leading-\\[21px\\]{--tw-leading:21px;line-height:21px}.leading-none{--tw-leading:1;line-height:1}.leading-normal{--tw-leading:var(--leading-normal);line-height:var(--leading-normal)}.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)}.tracking-widest{--tw-tracking:var(--tracking-widest);letter-spacing:var(--tracking-widest)}.text-balance{text-wrap:balance}.wrap-break-word{overflow-wrap:break-word}.break-all{word-break:break-all}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.text-amber-400{color:var(--color-amber-400)}.text-amber-500{color:var(--color-amber-500)}.text-amber-600{color:var(--color-amber-600)}.text-assistant-bubble-text{color:var(--char-assistant-bubble-text)}.text-background{color:var(--char-color-background)}.text-blue-400{color:var(--color-blue-400)}.text-blue-400\\/60{color:#54a2ff99}@supports (color:color-mix(in lab, red, red)){.text-blue-400\\/60{color:color-mix(in oklab,var(--color-blue-400)60%,transparent)}}.text-blue-600{color:var(--color-blue-600)}.text-card-foreground{color:var(--char-color-card-foreground)}.text-code-text{color:var(--char-code-text)}.text-composer-text{color:var(--char-composer-text)}.text-destructive,.text-destructive\\/70{color:var(--char-color-destructive)}@supports (color:color-mix(in lab, red, red)){.text-destructive\\/70{color:color-mix(in oklab,var(--char-color-destructive)70%,transparent)}}.text-emerald-600{color:var(--color-emerald-600)}.text-foreground,.text-foreground\\/70{color:var(--char-color-foreground)}@supports (color:color-mix(in lab, red, red)){.text-foreground\\/70{color:color-mix(in oklab,var(--char-color-foreground)70%,transparent)}}.text-foreground\\/80{color:var(--char-color-foreground)}@supports (color:color-mix(in lab, red, red)){.text-foreground\\/80{color:color-mix(in oklab,var(--char-color-foreground)80%,transparent)}}.text-gray-400{color:var(--color-gray-400)}.text-gray-500{color:var(--color-gray-500)}.text-gray-600{color:var(--color-gray-600)}.text-gray-800{color:var(--color-gray-800)}.text-gray-900{color:var(--color-gray-900)}.text-green-400{color:var(--color-green-400)}.text-green-500{color:var(--color-green-500)}.text-muted-foreground,.text-muted-foreground\\/70{color:var(--char-color-muted-foreground)}@supports (color:color-mix(in lab, red, red)){.text-muted-foreground\\/70{color:color-mix(in oklab,var(--char-color-muted-foreground)70%,transparent)}}.text-muted-foreground\\/80{color:var(--char-color-muted-foreground)}@supports (color:color-mix(in lab, red, red)){.text-muted-foreground\\/80{color:color-mix(in oklab,var(--char-color-muted-foreground)80%,transparent)}}.text-orange-600{color:var(--color-orange-600)}.text-popover-foreground{color:var(--char-color-popover-foreground)}.text-primary{color:var(--char-color-primary)}.text-primary-foreground{color:var(--char-color-primary-foreground)}.text-primary\\/80{color:var(--char-color-primary)}@supports (color:color-mix(in lab, red, red)){.text-primary\\/80{color:color-mix(in oklab,var(--char-color-primary)80%,transparent)}}.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(--char-color-secondary-foreground)}.text-slate-600{color:var(--color-slate-600)}.text-slate-900{color:var(--color-slate-900)}.text-user-bubble-text{color:var(--char-user-bubble-text)}.text-white{color:var(--color-white)}.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-700{color:var(--color-zinc-700)}.capitalize{text-transform:capitalize}.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,)}.line-through{text-decoration-line:line-through}.underline{text-decoration-line:underline}.underline-offset-4{text-underline-offset:4px}.opacity-0{opacity:0}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.opacity-70{opacity:.7}.opacity-90{opacity:.9}.opacity-100{opacity:1}.shadow{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-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-none{--tw-shadow:0 0 #0000;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\\/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\\/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-amber-500\\/30{--tw-ring-color:#f99c004d}@supports (color:color-mix(in lab, red, red)){.ring-amber-500\\/30{--tw-ring-color:color-mix(in oklab,var(--color-amber-500)30%,transparent)}}.ring-blue-500\\/25{--tw-ring-color:#3080ff40}@supports (color:color-mix(in lab, red, red)){.ring-blue-500\\/25{--tw-ring-color:color-mix(in oklab,var(--color-blue-500)25%,transparent)}}.ring-border\\/20{--tw-ring-color:var(--char-color-border)}@supports (color:color-mix(in lab, red, red)){.ring-border\\/20{--tw-ring-color:color-mix(in oklab,var(--char-color-border)20%,transparent)}}.ring-emerald-400\\/30{--tw-ring-color:#00d2944d}@supports (color:color-mix(in lab, red, red)){.ring-emerald-400\\/30{--tw-ring-color:color-mix(in oklab,var(--color-emerald-400)30%,transparent)}}.ring-red-500\\/30{--tw-ring-color:#fb2c364d}@supports (color:color-mix(in lab, red, red)){.ring-red-500\\/30{--tw-ring-color:color-mix(in oklab,var(--color-red-500)30%,transparent)}}.ring-offset-background{--tw-ring-offset-color:var(--char-color-background)}.outline-hidden{--tw-outline-style:none;outline-style:none}@media (forced-colors:active){.outline-hidden{outline-offset:2px;outline:2px solid #0000}}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.filter{filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.backdrop-blur-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,)}.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-\\[transform\\,opacity\\]{transition-property:transform,opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.delay-75{transition-delay:75ms}.duration-\\(--animation-duration\\){--tw-duration:var(--animation-duration);transition-duration:var(--animation-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}.delay-75{--tw-animation-delay:75ms;animation-delay:75ms}.fade-in-0{--tw-enter-opacity:0}.fill-mode-both{--tw-animation-fill-mode:both;animation-fill-mode:both}.outline-none{--tw-outline-style:none;outline-style:none}.select-none{-webkit-user-select:none;user-select:none}.zoom-in-95{--tw-enter-scale:.95}.fade-in{--tw-enter-opacity:0}.paused{animation-play-state:paused}.running{animation-play-state:running}.slide-in-from-bottom-1{--tw-enter-translate-y:calc(1*var(--spacing))}.slide-in-from-bottom-2{--tw-enter-translate-y:calc(2*var(--spacing))}@media (hover:hover){.group-hover\\:scale-100:is(:where(.group):hover *){--tw-scale-x:100%;--tw-scale-y:100%;--tw-scale-z:100%;scale:var(--tw-scale-x)var(--tw-scale-y)}.group-hover\\:opacity-100:is(:where(.group):hover *){opacity:1}}.group-data-\\[state\\=closed\\]\\/collapsible-content\\:animate-out:is(:where(.group\\/collapsible-content)[data-state=closed] *){animation:exit var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none)}.group-data-\\[state\\=closed\\]\\/collapsible-content\\:duration-\\(--animation-duration\\):is(:where(.group\\/collapsible-content)[data-state=closed] *){--tw-duration:var(--animation-duration);transition-duration:var(--animation-duration)}.group-data-\\[state\\=closed\\]\\/collapsible-content\\:fade-out-0:is(:where(.group\\/collapsible-content)[data-state=closed] *){--tw-exit-opacity:0}.group-data-\\[state\\=closed\\]\\/collapsible-content\\:slide-out-to-top-4:is(:where(.group\\/collapsible-content)[data-state=closed] *){--tw-exit-translate-y:calc(4*var(--spacing)*-1)}.group-data-\\[state\\=closed\\]\\/trigger\\:-rotate-90:is(:where(.group\\/trigger)[data-state=closed] *){rotate:-90deg}.group-data-\\[state\\=open\\]\\/collapsible-content\\:animate-in:is(:where(.group\\/collapsible-content)[data-state=open] *){animation:enter var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none)}.group-data-\\[state\\=open\\]\\/collapsible-content\\:animate-out:is(:where(.group\\/collapsible-content)[data-state=open] *){animation:exit var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none)}.group-data-\\[state\\=open\\]\\/collapsible-content\\:delay-\\[calc\\(var\\(--animation-duration\\)\\*0\\.75\\)\\]:is(:where(.group\\/collapsible-content)[data-state=open] *){transition-delay:calc(var(--animation-duration)*.75)}.group-data-\\[state\\=open\\]\\/collapsible-content\\:duration-\\(--animation-duration\\):is(:where(.group\\/collapsible-content)[data-state=open] *){--tw-duration:var(--animation-duration);transition-duration:var(--animation-duration)}.group-data-\\[state\\=open\\]\\/collapsible-content\\:delay-\\[calc\\(var\\(--animation-duration\\)\\*0\\.75\\)\\]:is(:where(.group\\/collapsible-content)[data-state=open] *){animation-delay:calc(var(--animation-duration)*.75);--tw-animation-delay:calc(var(--animation-duration)*.75)}.group-data-\\[state\\=open\\]\\/collapsible-content\\:fade-in-0:is(:where(.group\\/collapsible-content)[data-state=open] *){--tw-enter-opacity:0}.group-data-\\[state\\=open\\]\\/collapsible-content\\:fade-out-0:is(:where(.group\\/collapsible-content)[data-state=open] *){--tw-exit-opacity:0}.group-data-\\[state\\=open\\]\\/collapsible-content\\:fill-mode-forwards:is(:where(.group\\/collapsible-content)[data-state=open] *){--tw-animation-fill-mode:forwards;animation-fill-mode:forwards}.group-data-\\[state\\=open\\]\\/collapsible-content\\:slide-in-from-top-4:is(:where(.group\\/collapsible-content)[data-state=open] *){--tw-enter-translate-y:calc(4*var(--spacing)*-1)}.group-data-\\[state\\=open\\]\\/trigger\\:rotate-0:is(:where(.group\\/trigger)[data-state=open] *){rotate:none}.selection\\:bg-primary ::selection{background-color:var(--char-color-primary)}.selection\\:bg-primary::selection{background-color:var(--char-color-primary)}.selection\\:text-primary-foreground ::selection{color:var(--char-color-primary-foreground)}.selection\\:text-primary-foreground::selection{color:var(--char-color-primary-foreground)}.file\\:inline-flex::file-selector-button{display:inline-flex}.file\\:h-7::file-selector-button{height:calc(var(--spacing)*7)}.file\\:border-0::file-selector-button{border-style:var(--tw-border-style);border-width:0}.file\\:bg-transparent::file-selector-button{background-color:#0000}.file\\:text-sm::file-selector-button{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.file\\:font-medium::file-selector-button{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.file\\:text-foreground::file-selector-button{color:var(--char-color-foreground)}.placeholder\\:text-composer-placeholder::placeholder{color:var(--char-composer-placeholder)}.placeholder\\:text-muted-foreground::placeholder{color:var(--char-color-muted-foreground)}.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\\:rounded-tl-lg:first-child{border-top-left-radius:var(--char-radius-lg)}.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\\:rounded-tr-lg:last-child{border-top-right-radius:var(--char-radius-lg)}.last\\:border-r:last-child{border-right-style:var(--tw-border-style);border-right-width:1px}.empty\\:hidden:empty{display:none}.focus-within\\:border-white\\/15:focus-within{border-color:#ffffff26}@supports (color:color-mix(in lab, red, red)){.focus-within\\:border-white\\/15:focus-within{border-color:color-mix(in oklab,var(--color-white)15%,transparent)}}.focus-within\\:bg-white\\/10:focus-within{background-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){.focus-within\\:bg-white\\/10:focus-within{background-color:color-mix(in oklab,var(--color-white)10%,transparent)}}@media (hover:hover){.hover\\:border-amber-500:hover{border-color:var(--color-amber-500)}.hover\\:border-border:hover{border-color:var(--char-color-border)}.hover\\:border-red-500\\/50:hover{border-color:#fb2c3680}@supports (color:color-mix(in lab, red, red)){.hover\\:border-red-500\\/50:hover{border-color:color-mix(in oklab,var(--color-red-500)50%,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-\\[color-mix\\(in_oklab\\,rgb\\(var\\(--background\\)\\)_30\\%\\,transparent\\)\\]:hover{background-color:rgb(var(--background))}@supports (color:color-mix(in lab, red, red)){.hover\\:bg-\\[color-mix\\(in_oklab\\,rgb\\(var\\(--background\\)\\)_30\\%\\,transparent\\)\\]:hover{background-color:color-mix(in oklab,rgb(var(--background))30%,transparent)}}.hover\\:bg-accent:hover,.hover\\:bg-accent\\/50:hover{background-color:var(--char-color-accent)}@supports (color:color-mix(in lab, red, red)){.hover\\:bg-accent\\/50:hover{background-color:color-mix(in oklab,var(--char-color-accent)50%,transparent)}}.hover\\:bg-amber-500\\/10:hover{background-color:#f99c001a}@supports (color:color-mix(in lab, red, red)){.hover\\:bg-amber-500\\/10:hover{background-color:color-mix(in oklab,var(--color-amber-500)10%,transparent)}}.hover\\:bg-amber-500\\/20:hover{background-color:#f99c0033}@supports (color:color-mix(in lab, red, red)){.hover\\:bg-amber-500\\/20:hover{background-color:color-mix(in oklab,var(--color-amber-500)20%,transparent)}}.hover\\:bg-amber-500\\/30:hover{background-color:#f99c004d}@supports (color:color-mix(in lab, red, red)){.hover\\:bg-amber-500\\/30:hover{background-color:color-mix(in oklab,var(--color-amber-500)30%,transparent)}}.hover\\:bg-blue-500\\/20:hover{background-color:#3080ff33}@supports (color:color-mix(in lab, red, red)){.hover\\:bg-blue-500\\/20:hover{background-color:color-mix(in oklab,var(--color-blue-500)20%,transparent)}}.hover\\:bg-destructive\\/15:hover{background-color:var(--char-color-destructive)}@supports (color:color-mix(in lab, red, red)){.hover\\:bg-destructive\\/15:hover{background-color:color-mix(in oklab,var(--char-color-destructive)15%,transparent)}}.hover\\:bg-destructive\\/20:hover{background-color:var(--char-color-destructive)}@supports (color:color-mix(in lab, red, red)){.hover\\:bg-destructive\\/20:hover{background-color:color-mix(in oklab,var(--char-color-destructive)20%,transparent)}}.hover\\:bg-destructive\\/90:hover{background-color:var(--char-color-destructive)}@supports (color:color-mix(in lab, red, red)){.hover\\:bg-destructive\\/90:hover{background-color:color-mix(in oklab,var(--char-color-destructive)90%,transparent)}}.hover\\:bg-emerald-500\\/5:hover{background-color:#00bb7f0d}@supports (color:color-mix(in lab, red, red)){.hover\\:bg-emerald-500\\/5:hover{background-color:color-mix(in oklab,var(--color-emerald-500)5%,transparent)}}.hover\\:bg-green-500\\/30:hover{background-color:#00c7584d}@supports (color:color-mix(in lab, red, red)){.hover\\:bg-green-500\\/30:hover{background-color:color-mix(in oklab,var(--color-green-500)30%,transparent)}}.hover\\:bg-muted:hover{background-color:var(--char-color-muted)}.hover\\:bg-muted-foreground\\/15:hover{background-color:var(--char-color-muted-foreground)}@supports (color:color-mix(in lab, red, red)){.hover\\:bg-muted-foreground\\/15:hover{background-color:color-mix(in oklab,var(--char-color-muted-foreground)15%,transparent)}}.hover\\:bg-muted\\/50:hover{background-color:var(--char-color-muted)}@supports (color:color-mix(in lab, red, red)){.hover\\:bg-muted\\/50:hover{background-color:color-mix(in oklab,var(--char-color-muted)50%,transparent)}}.hover\\:bg-muted\\/60:hover{background-color:var(--char-color-muted)}@supports (color:color-mix(in lab, red, red)){.hover\\:bg-muted\\/60:hover{background-color:color-mix(in oklab,var(--char-color-muted)60%,transparent)}}.hover\\:bg-muted\\/70:hover{background-color:var(--char-color-muted)}@supports (color:color-mix(in lab, red, red)){.hover\\:bg-muted\\/70:hover{background-color:color-mix(in oklab,var(--char-color-muted)70%,transparent)}}.hover\\:bg-orange-500\\/20:hover{background-color:#fe6e0033}@supports (color:color-mix(in lab, red, red)){.hover\\:bg-orange-500\\/20:hover{background-color:color-mix(in oklab,var(--color-orange-500)20%,transparent)}}.hover\\:bg-primary\\/90:hover{background-color:var(--char-color-primary)}@supports (color:color-mix(in lab, red, red)){.hover\\:bg-primary\\/90:hover{background-color:color-mix(in oklab,var(--char-color-primary)90%,transparent)}}.hover\\:bg-red-500\\/20:hover{background-color:#fb2c3633}@supports (color:color-mix(in lab, red, red)){.hover\\:bg-red-500\\/20:hover{background-color:color-mix(in oklab,var(--color-red-500)20%,transparent)}}.hover\\:bg-red-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-secondary\\/80:hover{background-color:var(--char-color-secondary)}@supports (color:color-mix(in lab, red, red)){.hover\\:bg-secondary\\/80:hover{background-color:color-mix(in oklab,var(--char-color-secondary)80%,transparent)}}.hover\\:bg-white:hover{background-color:var(--color-white)}.hover\\:bg-white\\!:hover{background-color:var(--color-white)!important}.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\\/15:hover{background-color:#ffffff26}@supports (color:color-mix(in lab, red, red)){.hover\\:bg-white\\/15:hover{background-color:color-mix(in oklab,var(--color-white)15%,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-white\\/30:hover{background-color:#ffffff4d}@supports (color:color-mix(in lab, red, red)){.hover\\:bg-white\\/30:hover{background-color:color-mix(in oklab,var(--color-white)30%,transparent)}}.hover\\:bg-zinc-50:hover{background-color:var(--color-zinc-50)}.hover\\:bg-zinc-200:hover{background-color:var(--color-zinc-200)}.hover\\:bg-zinc-700:hover{background-color:var(--color-zinc-700)}.hover\\:text-accent-foreground:hover{color:var(--char-color-accent-foreground)}.hover\\:text-amber-400:hover{color:var(--color-amber-400)}.hover\\:text-foreground:hover{color:var(--char-color-foreground)}.hover\\:text-primary\\/80:hover{color:var(--char-color-primary)}@supports (color:color-mix(in lab, red, red)){.hover\\:text-primary\\/80:hover{color:color-mix(in oklab,var(--char-color-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\\/50:hover{color:#ffffff80}@supports (color:color-mix(in lab, red, red)){.hover\\:text-white\\/50:hover{color:color-mix(in oklab,var(--color-white)50%,transparent)}}.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\\:text-white\\/80:hover{color:#fffc}@supports (color:color-mix(in lab, red, red)){.hover\\:text-white\\/80:hover{color:color-mix(in oklab,var(--color-white)80%,transparent)}}.hover\\:text-zinc-600:hover{color:var(--color-zinc-600)}.hover\\:underline:hover{text-decoration-line:underline}.hover\\:opacity-75:hover{opacity:.75}.hover\\:opacity-100:hover{opacity:1}}.focus\\:bg-accent:focus{background-color:var(--char-color-accent)}.focus\\:text-accent-foreground:focus{color:var(--char-color-accent-foreground)}.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(--char-color-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(--char-color-ring)}.focus-visible\\:bg-muted:focus-visible{background-color:var(--char-color-muted)}.focus-visible\\:opacity-100:focus-visible{opacity:1}.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-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-blue-500:focus-visible{--tw-ring-color:var(--color-blue-500)}.focus-visible\\:ring-destructive\\/20:focus-visible{--tw-ring-color:var(--char-color-destructive)}@supports (color:color-mix(in lab, red, red)){.focus-visible\\:ring-destructive\\/20:focus-visible{--tw-ring-color:color-mix(in oklab,var(--char-color-destructive)20%,transparent)}}.focus-visible\\:ring-ring\\/50:focus-visible{--tw-ring-color:var(--char-color-ring)}@supports (color:color-mix(in lab, red, red)){.focus-visible\\:ring-ring\\/50:focus-visible{--tw-ring-color:color-mix(in oklab,var(--char-color-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-1:focus-visible{--tw-ring-offset-width:1px;--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-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-none:focus-visible{--tw-outline-style:none;outline-style:none}.active\\:scale-\\[0\\.98\\]:active{scale:.98}.active\\:cursor-grabbing:active{cursor:grabbing}.active\\:bg-white\\/15:active{background-color:#ffffff26}@supports (color:color-mix(in lab, red, red)){.active\\:bg-white\\/15:active{background-color:color-mix(in oklab,var(--color-white)15%,transparent)}}.active\\:bg-white\\/20:active{background-color:#fff3}@supports (color:color-mix(in lab, red, red)){.active\\:bg-white\\/20:active{background-color:color-mix(in oklab,var(--color-white)20%,transparent)}}.disabled\\:pointer-events-none:disabled{pointer-events:none}.disabled\\:invisible:disabled{visibility:hidden}.disabled\\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\\:opacity-40:disabled{opacity:.4}.disabled\\:opacity-50:disabled{opacity:.5}.has-data-\\[slot\\=card-action\\]\\:grid-cols-\\[1fr_auto\\]:has([data-slot=card-action]){grid-template-columns:1fr auto}.has-\\[textarea\\:focus-visible\\]\\:border-ring:has(:is(textarea:focus-visible)){border-color:var(--char-color-ring)}.has-\\[textarea\\:focus-visible\\]\\:ring-2:has(:is(textarea: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)}.has-\\[textarea\\:focus-visible\\]\\:ring-ring\\/20:has(:is(textarea:focus-visible)){--tw-ring-color:var(--char-color-ring)}@supports (color:color-mix(in lab, red, red)){.has-\\[textarea\\:focus-visible\\]\\:ring-ring\\/20:has(:is(textarea:focus-visible)){--tw-ring-color:color-mix(in oklab,var(--char-color-ring)20%,transparent)}}.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(--char-color-destructive)}.aria-invalid\\:ring-destructive\\/20[aria-invalid=true]{--tw-ring-color:var(--char-color-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(--char-color-destructive)20%,transparent)}}.data-floating\\:absolute[data-floating]{position:absolute}.data-floating\\:rounded-md[data-floating]{border-radius:var(--char-radius-md)}.data-floating\\:border[data-floating]{border-style:var(--tw-border-style);border-width:1px}.data-floating\\:bg-background[data-floating]{background-color:var(--char-color-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-\\[active\\=true\\]\\:bg-muted[data-active=true]{background-color:var(--char-color-muted)}.data-\\[disabled\\]\\:pointer-events-none[data-disabled]{pointer-events:none}.data-\\[disabled\\]\\:opacity-50[data-disabled]{opacity:.5}.data-\\[dragging\\=true\\]\\:border-dashed[data-dragging=true]{--tw-border-style:dashed;border-style:dashed}.data-\\[dragging\\=true\\]\\:border-ring[data-dragging=true]{border-color:var(--char-color-ring)}.data-\\[dragging\\=true\\]\\:bg-accent\\/50[data-dragging=true]{background-color:var(--char-color-accent)}@supports (color:color-mix(in lab, red, red)){.data-\\[dragging\\=true\\]\\:bg-accent\\/50[data-dragging=true]{background-color:color-mix(in oklab,var(--char-color-accent)50%,transparent)}}.data-\\[inset\\]\\:pl-8[data-inset]{padding-left:calc(var(--spacing)*8)}.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-\\[placeholder\\]\\:text-muted-foreground[data-placeholder]{color:var(--char-color-muted-foreground)}.data-\\[side\\=bottom\\]\\:translate-y-1[data-side=bottom]{--tw-translate-y:calc(var(--spacing)*1);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\\[side\\=bottom\\]\\:slide-in-from-top-2[data-side=bottom]{--tw-enter-translate-y:calc(2*var(--spacing)*-1)}.data-\\[side\\=left\\]\\:-translate-x-1[data-side=left]{--tw-translate-x:calc(var(--spacing)*-1);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\\[side\\=left\\]\\:slide-in-from-right-2[data-side=left]{--tw-enter-translate-x:calc(2*var(--spacing))}.data-\\[side\\=right\\]\\:translate-x-1[data-side=right]{--tw-translate-x:calc(var(--spacing)*1);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\\[side\\=right\\]\\:slide-in-from-left-2[data-side=right]{--tw-enter-translate-x:calc(2*var(--spacing)*-1)}.data-\\[side\\=top\\]\\:-translate-y-1[data-side=top]{--tw-translate-y:calc(var(--spacing)*-1);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\\[side\\=top\\]\\:slide-in-from-bottom-2[data-side=top]{--tw-enter-translate-y:calc(2*var(--spacing))}.data-\\[size\\=default\\]\\:h-9[data-size=default]{height:calc(var(--spacing)*9)}.data-\\[size\\=sm\\]\\:h-8[data-size=sm]{height:calc(var(--spacing)*8)}:is(.\\*\\:data-\\[slot\\=select-value\\]\\:line-clamp-1>*)[data-slot=select-value]{-webkit-line-clamp:1;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}:is(.\\*\\:data-\\[slot\\=select-value\\]\\:flex>*)[data-slot=select-value]{display:flex}:is(.\\*\\:data-\\[slot\\=select-value\\]\\:items-center>*)[data-slot=select-value]{align-items:center}:is(.\\*\\:data-\\[slot\\=select-value\\]\\:gap-2>*)[data-slot=select-value]{gap:calc(var(--spacing)*2)}.data-\\[state\\=closed\\]\\:pointer-events-none[data-state=closed]{pointer-events:none}.data-\\[state\\=closed\\]\\:animate-collapsible-up[data-state=closed]{animation:collapsible-up var(--tw-animation-duration,var(--tw-duration,.2s))var(--tw-ease,ease-out)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none)}.data-\\[state\\=closed\\]\\:animate-out[data-state=closed]{animation:exit var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none)}.data-\\[state\\=closed\\]\\:duration-\\(--animation-duration\\)[data-state=closed]{--tw-duration:var(--animation-duration);transition-duration:var(--animation-duration)}.data-\\[state\\=closed\\]\\:duration-300[data-state=closed]{--tw-duration:.3s;transition-duration:.3s}.data-\\[state\\=closed\\]\\:fade-out-0[data-state=closed]{--tw-exit-opacity:0}.data-\\[state\\=closed\\]\\:fill-mode-forwards[data-state=closed]{--tw-animation-fill-mode:forwards;animation-fill-mode:forwards}.data-\\[state\\=closed\\]\\:zoom-out-95[data-state=closed]{--tw-exit-scale:.95}.data-\\[state\\=closed\\]\\:slide-out-to-bottom[data-state=closed]{--tw-exit-translate-y:100%}.data-\\[state\\=closed\\]\\:slide-out-to-left[data-state=closed]{--tw-exit-translate-x:-100%}.data-\\[state\\=closed\\]\\:slide-out-to-right[data-state=closed]{--tw-exit-translate-x:100%}.data-\\[state\\=closed\\]\\:slide-out-to-top[data-state=closed]{--tw-exit-translate-y:-100%}.data-\\[state\\=open\\]\\:animate-collapsible-down[data-state=open]{animation:collapsible-down var(--tw-animation-duration,var(--tw-duration,.2s))var(--tw-ease,ease-out)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none)}.data-\\[state\\=open\\]\\:animate-in[data-state=open]{animation:enter var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none)}.data-\\[state\\=open\\]\\:bg-accent[data-state=open]{background-color:var(--char-color-accent)}.data-\\[state\\=open\\]\\:bg-secondary[data-state=open]{background-color:var(--char-color-secondary)}.data-\\[state\\=open\\]\\:text-accent-foreground[data-state=open]{color:var(--char-color-accent-foreground)}.data-\\[state\\=open\\]\\:text-muted-foreground[data-state=open]{color:var(--char-color-muted-foreground)}.data-\\[state\\=open\\]\\:duration-\\(--animation-duration\\)[data-state=open]{--tw-duration:var(--animation-duration);transition-duration:var(--animation-duration)}.data-\\[state\\=open\\]\\:duration-500[data-state=open]{--tw-duration:.5s;transition-duration:.5s}.data-\\[state\\=open\\]\\:fade-in-0[data-state=open]{--tw-enter-opacity:0}.data-\\[state\\=open\\]\\:zoom-in-95[data-state=open]{--tw-enter-scale:.95}.data-\\[state\\=open\\]\\:slide-in-from-bottom[data-state=open]{--tw-enter-translate-y:100%}.data-\\[state\\=open\\]\\:slide-in-from-left[data-state=open]{--tw-enter-translate-x:-100%}.data-\\[state\\=open\\]\\:slide-in-from-right[data-state=open]{--tw-enter-translate-x:100%}.data-\\[state\\=open\\]\\:slide-in-from-top[data-state=open]{--tw-enter-translate-y:-100%}.data-\\[variant\\=destructive\\]\\:text-destructive[data-variant=destructive]{color:var(--char-color-destructive)}.data-\\[variant\\=destructive\\]\\:focus\\:bg-destructive\\/10[data-variant=destructive]:focus{background-color:var(--char-color-destructive)}@supports (color:color-mix(in lab, red, red)){.data-\\[variant\\=destructive\\]\\:focus\\:bg-destructive\\/10[data-variant=destructive]:focus{background-color:color-mix(in oklab,var(--char-color-destructive)10%,transparent)}}.data-\\[variant\\=destructive\\]\\:focus\\:text-destructive[data-variant=destructive]:focus{color:var(--char-color-destructive)}.nth-\\[n\\+3\\]\\:hidden:nth-child(n+3){display:none}@media (prefers-reduced-motion:reduce){.motion-reduce\\:animate-none{animation:none}}@media (min-width:40rem){.sm\\:flex{display:flex}.sm\\:h-3{height:calc(var(--spacing)*3)}.sm\\:h-3\\.5{height:calc(var(--spacing)*3.5)}.sm\\:h-4{height:calc(var(--spacing)*4)}.sm\\:h-7{height:calc(var(--spacing)*7)}.sm\\:max-h-24{max-height:calc(var(--spacing)*24)}.sm\\:max-h-32{max-height:calc(var(--spacing)*32)}.sm\\:max-h-48{max-height:calc(var(--spacing)*48)}.sm\\:min-h-7{min-height:calc(var(--spacing)*7)}.sm\\:w-3{width:calc(var(--spacing)*3)}.sm\\:w-3\\.5{width:calc(var(--spacing)*3.5)}.sm\\:w-4{width:calc(var(--spacing)*4)}.sm\\:w-7{width:calc(var(--spacing)*7)}.sm\\:max-w-3xl{max-width:var(--container-3xl)}.sm\\:max-w-16{max-width:calc(var(--spacing)*16)}.sm\\:max-w-24{max-width:calc(var(--spacing)*24)}.sm\\:max-w-lg{max-width:var(--container-lg)}.sm\\:max-w-sm{max-width:var(--container-sm)}.sm\\:min-w-7{min-width:calc(var(--spacing)*7)}.sm\\:flex-row{flex-direction:row}.sm\\:justify-end{justify-content:flex-end}.sm\\:gap-1{gap:calc(var(--spacing)*1)}.sm\\:gap-1\\.5{gap:calc(var(--spacing)*1.5)}.sm\\:p-1{padding:calc(var(--spacing)*1)}.sm\\:p-1\\.5{padding:calc(var(--spacing)*1.5)}.sm\\:px-2{padding-inline:calc(var(--spacing)*2)}.sm\\:py-1{padding-block:calc(var(--spacing)*1)}.sm\\:text-left{text-align:left}.sm\\:opacity-0{opacity:0}@media (hover:hover){.sm\\:group-hover\\:opacity-100:is(:where(.group):hover *){opacity:1}}}@media (min-width:48rem){.md\\:pb-6{padding-bottom:calc(var(--spacing)*6)}.md\\:text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}}@container (min-width:28rem){.\\@md\\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.\\@md\\:flex-col{flex-direction:column}.\\@md\\:nth-\\[n\\+3\\]\\:block:nth-child(n+3){display:block}}.dark\\:border-input:is(.dark *){border-color:var(--char-color-input)}.dark\\:border-muted-foreground\\/15:is(.dark *){border-color:var(--char-color-muted-foreground)}@supports (color:color-mix(in lab, red, red)){.dark\\:border-muted-foreground\\/15:is(.dark *){border-color:color-mix(in oklab,var(--char-color-muted-foreground)15%,transparent)}}.dark\\:border-zinc-600:is(.dark *){border-color:var(--color-zinc-600)}.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-amber-500\\/10:is(.dark *){background-color:#f99c001a}@supports (color:color-mix(in lab, red, red)){.dark\\:bg-amber-500\\/10:is(.dark *){background-color:color-mix(in oklab,var(--color-amber-500)10%,transparent)}}.dark\\:bg-blue-500\\/10:is(.dark *){background-color:#3080ff1a}@supports (color:color-mix(in lab, red, red)){.dark\\:bg-blue-500\\/10:is(.dark *){background-color:color-mix(in oklab,var(--color-blue-500)10%,transparent)}}.dark\\:bg-destructive\\/5:is(.dark *){background-color:var(--char-color-destructive)}@supports (color:color-mix(in lab, red, red)){.dark\\:bg-destructive\\/5:is(.dark *){background-color:color-mix(in oklab,var(--char-color-destructive)5%,transparent)}}.dark\\:bg-destructive\\/60:is(.dark *){background-color:var(--char-color-destructive)}@supports (color:color-mix(in lab, red, red)){.dark\\:bg-destructive\\/60:is(.dark *){background-color:color-mix(in oklab,var(--char-color-destructive)60%,transparent)}}.dark\\:bg-emerald-500\\/12:is(.dark *){background-color:#00bb7f1f}@supports (color:color-mix(in lab, red, red)){.dark\\:bg-emerald-500\\/12:is(.dark *){background-color:color-mix(in oklab,var(--color-emerald-500)12%,transparent)}}.dark\\:bg-input\\/30:is(.dark *){background-color:var(--char-color-input)}@supports (color:color-mix(in lab, red, red)){.dark\\:bg-input\\/30:is(.dark *){background-color:color-mix(in oklab,var(--char-color-input)30%,transparent)}}.dark\\:bg-muted:is(.dark *){background-color:var(--char-color-muted)}.dark\\:bg-red-500\\/10:is(.dark *){background-color:#fb2c361a}@supports (color:color-mix(in lab, red, red)){.dark\\:bg-red-500\\/10:is(.dark *){background-color:color-mix(in oklab,var(--color-red-500)10%,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\\:stroke-\\[2\\.5px\\]:is(.dark *){stroke-width:2.5px}.dark\\:text-amber-300:is(.dark *){color:var(--color-amber-300)}.dark\\:text-blue-300:is(.dark *){color:var(--color-blue-300)}.dark\\:text-blue-400:is(.dark *){color:var(--color-blue-400)}.dark\\:text-emerald-300:is(.dark *){color:var(--color-emerald-300)}.dark\\:text-foreground:is(.dark *){color:var(--char-color-foreground)}.dark\\:text-orange-400:is(.dark *){color:var(--color-orange-400)}.dark\\:text-red-200:is(.dark *){color:var(--color-red-200)}.dark\\:text-red-300:is(.dark *){color:var(--color-red-300)}.dark\\:text-red-400:is(.dark *){color:var(--color-red-400)}.dark\\:text-slate-300:is(.dark *){color:var(--color-slate-300)}.dark\\:text-zinc-200:is(.dark *){color:var(--color-zinc-200)}.dark\\:text-zinc-400:is(.dark *){color:var(--color-zinc-400)}.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\\:ring-amber-400\\/30:is(.dark *){--tw-ring-color:#fcbb004d}@supports (color:color-mix(in lab, red, red)){.dark\\:ring-amber-400\\/30:is(.dark *){--tw-ring-color:color-mix(in oklab,var(--color-amber-400)30%,transparent)}}.dark\\:ring-blue-400\\/25:is(.dark *){--tw-ring-color:#54a2ff40}@supports (color:color-mix(in lab, red, red)){.dark\\:ring-blue-400\\/25:is(.dark *){--tw-ring-color:color-mix(in oklab,var(--color-blue-400)25%,transparent)}}.dark\\:ring-border\\/30:is(.dark *){--tw-ring-color:var(--char-color-border)}@supports (color:color-mix(in lab, red, red)){.dark\\:ring-border\\/30:is(.dark *){--tw-ring-color:color-mix(in oklab,var(--char-color-border)30%,transparent)}}.dark\\:ring-emerald-500\\/25:is(.dark *){--tw-ring-color:#00bb7f40}@supports (color:color-mix(in lab, red, red)){.dark\\:ring-emerald-500\\/25:is(.dark *){--tw-ring-color:color-mix(in oklab,var(--color-emerald-500)25%,transparent)}}.dark\\:ring-red-400\\/30:is(.dark *){--tw-ring-color:#ff65684d}@supports (color:color-mix(in lab, red, red)){.dark\\:ring-red-400\\/30:is(.dark *){--tw-ring-color:color-mix(in oklab,var(--color-red-400)30%,transparent)}}@media (hover:hover){.dark\\:hover\\:bg-accent\\/50:is(.dark *):hover{background-color:var(--char-color-accent)}@supports (color:color-mix(in lab, red, red)){.dark\\:hover\\:bg-accent\\/50:is(.dark *):hover{background-color:color-mix(in oklab,var(--char-color-accent)50%,transparent)}}.dark\\:hover\\:bg-input\\/50:is(.dark *):hover{background-color:var(--char-color-input)}@supports (color:color-mix(in lab, red, red)){.dark\\:hover\\:bg-input\\/50:is(.dark *):hover{background-color:color-mix(in oklab,var(--char-color-input)50%,transparent)}}.dark\\:hover\\:bg-muted-foreground\\/30:is(.dark *):hover{background-color:var(--char-color-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(--char-color-muted-foreground)30%,transparent)}}.dark\\:hover\\:bg-zinc-600:is(.dark *):hover{background-color:var(--color-zinc-600)}.dark\\:hover\\:bg-zinc-700:is(.dark *):hover{background-color:var(--color-zinc-700)}.dark\\:hover\\:text-zinc-200:is(.dark *):hover{color:var(--color-zinc-200)}}.dark\\:focus-visible\\:ring-destructive\\/40:is(.dark *):focus-visible{--tw-ring-color:var(--char-color-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(--char-color-destructive)40%,transparent)}}.dark\\:aria-invalid\\:ring-destructive\\/40:is(.dark *)[aria-invalid=true]{--tw-ring-color:var(--char-color-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(--char-color-destructive)40%,transparent)}}.dark\\:data-\\[variant\\=destructive\\]\\:focus\\:bg-destructive\\/20:is(.dark *)[data-variant=destructive]:focus{background-color:var(--char-color-destructive)}@supports (color:color-mix(in lab, red, red)){.dark\\:data-\\[variant\\=destructive\\]\\:focus\\:bg-destructive\\/20:is(.dark *)[data-variant=destructive]:focus{background-color:color-mix(in oklab,var(--char-color-destructive)20%,transparent)}}.\\[\\&_p\\]\\:-mb-2 p{margin-bottom:calc(var(--spacing)*-2)}.\\[\\&_svg\\]\\:pointer-events-none svg{pointer-events:none}.\\[\\&_svg\\]\\:shrink-0 svg{flex-shrink:0}.\\[\\&_svg\\]\\:text-background svg{color:var(--char-color-background)}.\\[\\&_svg\\]\\:text-black svg{color:var(--color-black)}@media (hover:hover){.hover\\:\\[\\&_svg\\]\\:text-destructive:hover svg{color:var(--char-color-destructive)}}.\\[\\&_svg\\:not\\(\\[class\\*\\=\\'size-\\'\\]\\)\\]\\:size-4 svg:not([class*=size-]){width:calc(var(--spacing)*4);height:calc(var(--spacing)*4)}.\\[\\&_svg\\:not\\(\\[class\\*\\=\\'text-\\'\\]\\)\\]\\:text-muted-foreground svg:not([class*=text-]){color:var(--char-color-muted-foreground)}.\\[\\.border-b\\]\\:pb-6.border-b{padding-bottom:calc(var(--spacing)*6)}.\\[\\.border-t\\]\\:pt-6.border-t{padding-top:calc(var(--spacing)*6)}.\\[\\[align\\=center\\]\\]\\:text-center[align=center]{text-align:center}.\\[\\[align\\=right\\]\\]\\:text-right[align=right]{text-align:right}:is(.\\*\\:\\[span\\]\\:last\\:flex>*):is(span):last-child{display:flex}:is(.\\*\\:\\[span\\]\\:last\\:items-center>*):is(span):last-child{align-items:center}:is(.\\*\\:\\[span\\]\\:last\\:gap-2>*):is(span):last-child{gap:calc(var(--spacing)*2)}:is(.data-\\[variant\\=destructive\\]\\:\\*\\:\\[svg\\]\\:\\!text-destructive[data-variant=destructive]>*):is(svg){color:var(--char-color-destructive)!important}.\\[\\&\\:last-child\\>td\\:first-child\\]\\:rounded-bl-lg:last-child>td:first-child{border-bottom-left-radius:var(--char-radius-lg)}.\\[\\&\\:last-child\\>td\\:last-child\\]\\:rounded-br-lg:last-child>td:last-child{border-bottom-right-radius:var(--char-radius-lg)}.\\[\\&\\: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)}.\\[\\&\\>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(--char-color-foreground)}@supports (color:color-mix(in lab, red, red)){.\\[\\&\\>button\\]\\:bg-foreground\\/60>button{background-color:color-mix(in oklab,var(--char-color-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(--char-color-destructive)}}.\\[\\&\\>li\\]\\:mt-0\\.5>li{margin-top:calc(var(--spacing)*.5)}.\\[\\&\\>li\\]\\:mt-2>li{margin-top:calc(var(--spacing)*2)}.\\[\\&\\>span\\]\\:text-xs>span{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.\\[\\&\\>svg\\]\\:pointer-events-none>svg{pointer-events:none}.\\[\\&\\>svg\\]\\:size-3>svg{width:calc(var(--spacing)*3);height:calc(var(--spacing)*3)}@media (hover:hover){a.\\[a\\&\\]\\:hover\\:bg-accent:hover{background-color:var(--char-color-accent)}a.\\[a\\&\\]\\:hover\\:bg-destructive\\/90:hover{background-color:var(--char-color-destructive)}@supports (color:color-mix(in lab, red, red)){a.\\[a\\&\\]\\:hover\\:bg-destructive\\/90:hover{background-color:color-mix(in oklab,var(--char-color-destructive)90%,transparent)}}a.\\[a\\&\\]\\:hover\\:bg-primary\\/90:hover{background-color:var(--char-color-primary)}@supports (color:color-mix(in lab, red, red)){a.\\[a\\&\\]\\:hover\\:bg-primary\\/90:hover{background-color:color-mix(in oklab,var(--char-color-primary)90%,transparent)}}a.\\[a\\&\\]\\:hover\\:bg-secondary\\/90:hover{background-color:var(--char-color-secondary)}@supports (color:color-mix(in lab, red, red)){a.\\[a\\&\\]\\:hover\\:bg-secondary\\/90:hover{background-color:color-mix(in oklab,var(--char-color-secondary)90%,transparent)}}a.\\[a\\&\\]\\:hover\\:text-accent-foreground:hover{color:var(--char-color-accent-foreground)}}}@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}@keyframes char-shimmer{0%{transform:translate(-100%)}to{transform:translate(200%)}}@keyframes char-subtle-pulse{0%,to{opacity:1}50%{opacity:.85}}@keyframes char-slide-down{0%{opacity:0;transform:translateY(-8px)}to{opacity:1;transform:translateY(0)}}@keyframes char-fade-in-up{0%{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}@keyframes char-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 char-float{0%,to{transform:translateY(0)translate(0)}33%{transform:translateY(-30px)translate(20px)}66%{transform:translateY(20px)translate(-20px)}}@keyframes char-float-delayed{0%,to{transform:translateY(0)translate(0)}33%{transform:translateY(30px)translate(-30px)}66%{transform:translateY(-20px)translate(20px)}}@keyframes char-border-rotate{0%{transform:rotate(0)}to{transform:rotate(360deg)}}@keyframes char-pulse-success{0%,to{box-shadow:0 0 0 0 color-mix(in oklch,var(--char-color-success),transparent 60%)}50%{box-shadow:0 0 0 8px #0000}}@keyframes char-shake{0%,to{transform:translate(0)}10%,30%,50%,70%,90%{transform:translate(-2px)}20%,40%,60%,80%{transform:translate(2px)}}@keyframes char-pulse-glow{0%,to{box-shadow:0 0 20px color-mix(in oklch,var(--char-color-primary),transparent 90%)}50%{box-shadow:0 0 30px color-mix(in oklch,var(--char-color-primary),transparent 80%)}}@keyframes char-gradient-x{0%,to{background-position:0%}50%{background-position:100%}}@keyframes char-glass-shimmer{0%{background-position:-200% 0}to{background-position:200% 0}}@keyframes char-aui-pulse{50%{opacity:.5}}.char-no-scrollbar::-webkit-scrollbar{display:none}.char-no-scrollbar{-ms-overflow-style:none;scrollbar-width:none}@media (hover:none){.char-scrollbar-thin{scrollbar-width:none}.char-scrollbar-thin::-webkit-scrollbar{display:none}}: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{font-family:var(--char-font-sans);--aui-content:\"●\";content:var(--aui-content);margin-left:.25rem;margin-right:.25rem;animation:2s cubic-bezier(.4,0,.6,1) infinite char-aui-pulse}@keyframes spin{to{transform:rotate(360deg)}}@keyframes pulse{50%{opacity:.5}}@keyframes enter{0%{opacity:var(--tw-enter-opacity,1);transform:translate3d(var(--tw-enter-translate-x,0),var(--tw-enter-translate-y,0),0)scale3d(var(--tw-enter-scale,1),var(--tw-enter-scale,1),var(--tw-enter-scale,1))rotate(var(--tw-enter-rotate,0));filter:blur(var(--tw-enter-blur,0))}}@keyframes exit{to{opacity:var(--tw-exit-opacity,1);transform:translate3d(var(--tw-exit-translate-x,0),var(--tw-exit-translate-y,0),0)scale3d(var(--tw-exit-scale,1),var(--tw-exit-scale,1),var(--tw-exit-scale,1))rotate(var(--tw-exit-rotate,0));filter:blur(var(--tw-exit-blur,0))}}@keyframes collapsible-down{0%{height:0}to{height:var(--radix-collapsible-content-height,var(--bits-collapsible-content-height,var(--reka-collapsible-content-height,var(--kb-collapsible-content-height,auto))))}}@keyframes collapsible-up{0%{height:var(--radix-collapsible-content-height,var(--bits-collapsible-content-height,var(--reka-collapsible-content-height,var(--kb-collapsible-content-height,auto))))}to{height:0}}";
11073
+ const WEBMCP_SHADOW_STYLES = "/*! tailwindcss v4.1.18 | 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-scale-x:1;--tw-scale-y:1;--tw-scale-z:1;--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-animation-delay:0s;--tw-animation-direction:normal;--tw-animation-duration:initial;--tw-animation-fill-mode:none;--tw-animation-iteration-count:1;--tw-enter-blur:0;--tw-enter-opacity:1;--tw-enter-rotate:0;--tw-enter-scale:1;--tw-enter-translate-x:0;--tw-enter-translate-y:0;--tw-exit-blur:0;--tw-exit-opacity:1;--tw-exit-rotate:0;--tw-exit-scale:1;--tw-exit-translate-x:0;--tw-exit-translate-y:0}}}@layer theme{:root,:host{--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-orange-400:oklch(75% .183 55.934);--color-orange-500:oklch(70.5% .213 47.604);--color-orange-600:oklch(64.6% .222 41.116);--color-amber-300:oklch(87.9% .169 91.605);--color-amber-400:oklch(82.8% .189 84.429);--color-amber-500:oklch(76.9% .188 70.08);--color-amber-600:oklch(66.6% .179 58.318);--color-green-400:oklch(79.2% .209 151.711);--color-green-500:oklch(72.3% .219 149.579);--color-emerald-300:oklch(84.5% .143 164.978);--color-emerald-400:oklch(76.5% .177 163.223);--color-emerald-500:oklch(69.6% .17 162.48);--color-emerald-600:oklch(59.6% .145 163.225);--color-blue-300:oklch(80.9% .105 251.813);--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-300:oklch(86.9% .022 252.894);--color-slate-500:oklch(55.4% .046 257.417);--color-slate-600:oklch(44.6% .043 257.281);--color-slate-900:oklch(20.8% .042 265.755);--color-gray-50:oklch(98.5% .002 247.839);--color-gray-100:oklch(96.7% .003 264.542);--color-gray-200:oklch(92.8% .006 264.531);--color-gray-400:oklch(70.7% .022 261.325);--color-gray-500:oklch(55.1% .027 264.364);--color-gray-600:oklch(44.6% .03 256.802);--color-gray-800:oklch(27.8% .033 256.848);--color-gray-900:oklch(21% .034 264.665);--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-600:oklch(44.2% .017 285.786);--color-zinc-700:oklch(37% .013 285.805);--color-zinc-800:oklch(27.4% .006 286.033);--color-black:#000;--color-white:#fff;--spacing:.25rem;--container-sm:24rem;--container-lg:32rem;--container-3xl:48rem;--container-6xl:72rem;--text-xs--line-height:calc(1/.75);--text-sm--line-height:calc(1.25/.875);--text-base:var(--char-font-size-base);--text-base--line-height:calc(1.5/1);--text-lg--line-height:calc(1.75/1.125);--text-xl:1.25rem;--text-xl--line-height:calc(1.75/1.25);--text-2xl:1.5rem;--text-2xl--line-height:calc(2/1.5);--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--font-weight-extrabold:800;--tracking-tight:-.025em;--tracking-wide:.025em;--tracking-widest:.1em;--leading-normal:1.5;--leading-relaxed:1.625;--radius-xs:.125rem;--radius-2xl:1rem;--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;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4,0,.2,1);--default-font-family:var(--char-font-sans);--default-mono-font-family:var(--char-font-mono);--color-background:var(--char-color-background)}}@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}:host,:root{--char-color-background:oklch(100% 0 0);--char-color-foreground:oklch(14.1% .005 285.823);--char-color-primary:oklch(21% .006 285.885);--char-color-primary-foreground:oklch(98.5% 0 0);--char-color-muted:oklch(96.7% .001 286.375);--char-color-muted-foreground:oklch(55.2% .016 285.938);--char-color-border:oklch(92% .004 286.32);--char-color-success:oklch(70% .2 145);--char-color-warning:oklch(75% .15 85);--char-color-error:oklch(65% .25 25);--char-color-card:var(--char-color-background);--char-color-card-foreground:var(--char-color-foreground);--char-color-popover:var(--char-color-background);--char-color-popover-foreground:var(--char-color-foreground);--char-color-secondary:var(--char-color-muted);--char-color-secondary-foreground:var(--char-color-foreground);--char-color-accent:var(--char-color-muted);--char-color-accent-foreground:var(--char-color-foreground);--char-color-destructive:var(--char-color-error);--char-color-destructive-foreground:var(--char-color-primary-foreground);--char-color-input:var(--char-color-border);--char-color-ring:var(--char-color-muted-foreground);--char-user-bubble-bg:var(--char-color-muted);--char-user-bubble-text:var(--char-color-foreground);--char-assistant-bubble-bg:transparent;--char-assistant-bubble-text:var(--char-color-foreground);--char-composer-bg:var(--char-color-background);--char-composer-border:var(--char-color-input);--char-composer-text:var(--char-color-foreground);--char-composer-placeholder:var(--char-color-muted-foreground);--char-composer-button-bg:var(--char-color-primary);--char-composer-button-text:var(--char-color-primary-foreground);--char-tool-bg:var(--char-color-muted);--char-tool-border:var(--char-color-border);--char-tool-text:var(--char-color-foreground);--char-tool-header-bg:var(--char-color-muted);--char-tool-approve-bg:var(--char-color-primary);--char-tool-approve-text:var(--char-color-primary-foreground);--char-tool-deny-bg:transparent;--char-tool-deny-text:var(--char-color-muted-foreground);--char-code-bg:oklch(14.1% .005 285.823);--char-code-text:oklch(98.5% 0 0);--char-code-header-bg:var(--char-color-muted-foreground)}@supports (color:color-mix(in lab, red, red)){:host,:root{--char-code-header-bg:color-mix(in oklch,var(--char-color-muted-foreground),transparent 85%)}}:host,:root{--char-radius:.75rem;--char-radius-sm:calc(var(--char-radius) - 4px);--char-radius-md:calc(var(--char-radius) - 2px);--char-radius-lg:var(--char-radius);--char-radius-xl:calc(var(--char-radius) + 4px);--char-radius-full:9999px;--char-spacing-unit:.25rem;--char-font-sans:ui-sans-serif,system-ui,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol\",\"Noto Color Emoji\";--char-font-mono:ui-monospace,SFMono-Regular,\"SF Mono\",Menlo,Consolas,monospace;--char-font-size-xs:.75rem;--char-font-size-sm:.8125rem;--char-font-size-base:.875rem;--char-font-size-lg:1rem;--char-duration-fast:.15s;--char-duration-normal:.25s;--char-duration-slow:.4s;--char-easing-default:cubic-bezier(.4,0,.2,1);--char-easing-spring:cubic-bezier(.34,1.56,.64,1);--char-z-base:0;--char-z-content:10;--char-z-overlay:50;--char-z-max:2147480000;--char-shadow-sm:0 1px 2px #0000000d;--char-shadow-md:0 4px 6px -1px #0000001a,0 2px 4px -2px #0000001a;--char-shadow-lg:0 10px 15px -3px #0000001a,0 4px 6px -4px #0000001a;--char-blur-sm:8px;--char-blur-md:12px;--char-blur-lg:20px}:host(.dark),.dark{--char-color-background:oklch(14.1% .005 285.823);--char-color-foreground:oklch(98.5% 0 0);--char-color-primary:oklch(92% .004 286.32);--char-color-primary-foreground:oklch(21% .006 285.885);--char-color-muted:oklch(27.4% .006 286.033);--char-color-muted-foreground:oklch(70.5% .015 286.067);--char-color-border:oklch(100% 0 0/.1);--char-color-input:oklch(100% 0 0/.15);--char-color-ring:oklch(55.2% .016 285.938);--char-color-success:oklch(75% .18 145);--char-color-warning:oklch(80% .14 85);--char-color-error:oklch(70% .22 25)}*{border-color:var(--char-color-border);outline-color:var(--char-color-ring)}@supports (color:color-mix(in lab, red, red)){*{outline-color:color-mix(in oklch,var(--char-color-ring),transparent 50%)}}}@layer components{.char-animate-fade-in-up{opacity:0;animation:.5s ease-out forwards char-fade-in-up}.char-animate-gradient-shift{background-size:200% 200%;animation:20s ease-in-out infinite char-gradient-shift}.char-animate-float-slow{animation:20s ease-in-out infinite char-float}.char-animate-float-delayed{animation:25s ease-in-out 5s infinite char-float-delayed}.char-animate-shimmer{animation:2s linear infinite char-shimmer}.char-animate-pulse-success{animation:.6s ease-out char-pulse-success}.char-animate-shake{animation:.3s ease-out char-shake}.char-animate-pulse-glow{animation:2s ease-in-out infinite char-pulse-glow}.char-animate-gradient-x{animation:8s ease-in-out infinite char-gradient-x}.char-transition-spring{transition:all var(--char-duration-slow)var(--char-easing-spring)}.char-transition-smooth{transition:all var(--char-duration-normal)var(--char-easing-default)}.char-app-shell{z-index:var(--char-z-base);background-color:var(--char-color-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 .char-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)}.char-app-shell:before,.char-app-shell:after{content:\"\";pointer-events:none;border-radius:var(--char-radius-full);filter:blur(32px);opacity:.6;z-index:-1;position:absolute;inset:auto}.char-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}.char-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}.char-toolbar-surface{border-top:1px solid var(--char-color-border);background:linear-gradient(to right,var(--char-color-background),var(--char-color-background),var(--char-color-background))}@supports (color:color-mix(in lab, red, red)){.char-toolbar-surface{background:linear-gradient(to right,var(--char-color-background),color-mix(in oklch,var(--char-color-background),transparent 5%),var(--char-color-background))}}.char-toolbar-surface{-webkit-backdrop-filter:blur(var(--char-blur-md));backdrop-filter:blur(var(--char-blur-md))}@supports ((-webkit-backdrop-filter:blur(12px)) or (backdrop-filter:blur(12px))){.char-toolbar-surface{background:var(--char-color-background)}@supports (color:color-mix(in lab, red, red)){.char-toolbar-surface{background:color-mix(in oklch,var(--char-color-background),transparent 20%)}}}.char-toolbar-surface-top{border-bottom:1px solid var(--char-color-border);background:linear-gradient(to right,var(--char-color-background),var(--char-color-background),var(--char-color-background))}@supports (color:color-mix(in lab, red, red)){.char-toolbar-surface-top{background:linear-gradient(to right,var(--char-color-background),color-mix(in oklch,var(--char-color-background),transparent 5%),var(--char-color-background))}}.char-toolbar-surface-top{-webkit-backdrop-filter:blur(var(--char-blur-md));backdrop-filter:blur(var(--char-blur-md))}@supports ((-webkit-backdrop-filter:blur(12px)) or (backdrop-filter:blur(12px))){.char-toolbar-surface-top{background:var(--char-color-background)}@supports (color:color-mix(in lab, red, red)){.char-toolbar-surface-top{background:color-mix(in oklch,var(--char-color-background),transparent 20%)}}}.char-toolbar-inner{justify-content:space-between;align-items:center;padding:.5rem .75rem;display:flex}.char-toolbar-card{background:var(--char-color-card);justify-content:space-between;align-items:center;gap:.5rem;display:flex}@supports (color:color-mix(in lab, red, red)){.char-toolbar-card{background:color-mix(in oklch,var(--char-color-card),transparent 60%)}}.char-toolbar-card{border:1px solid var(--char-color-border);border-radius:var(--char-radius-lg);padding:.5rem .75rem}.char-toolbar-group{align-items:center;gap:.25rem;display:flex}.char-btn-toolbar-primary{border-radius:var(--char-radius-lg);background:linear-gradient(to right,var(--char-color-primary),var(--char-color-primary));align-items:center;gap:.5rem;height:2.25rem;padding:0 .75rem;display:flex}@supports (color:color-mix(in lab, red, red)){.char-btn-toolbar-primary{background:linear-gradient(to right,color-mix(in oklch,var(--char-color-primary),transparent 95%),color-mix(in oklch,var(--char-color-primary),transparent 90%))}}.char-btn-toolbar-primary{border:1px solid var(--char-color-primary)}@supports (color:color-mix(in lab, red, red)){.char-btn-toolbar-primary{border:1px solid color-mix(in oklch,var(--char-color-primary),transparent 80%)}}.char-btn-toolbar-primary{transition:all var(--char-duration-fast)}.char-btn-toolbar-primary:hover{background:linear-gradient(to right,var(--char-color-primary),var(--char-color-primary))}@supports (color:color-mix(in lab, red, red)){.char-btn-toolbar-primary:hover{background:linear-gradient(to right,color-mix(in oklch,var(--char-color-primary),transparent 90%),color-mix(in oklch,var(--char-color-primary),transparent 80%))}}.char-btn-toolbar-icon-primary{border-radius:var(--char-radius-full);background:linear-gradient(to bottom right,var(--char-color-primary),var(--char-color-primary));width:2rem;height:2rem;padding:0}@supports (color:color-mix(in lab, red, red)){.char-btn-toolbar-icon-primary{background:linear-gradient(to bottom right,color-mix(in oklch,var(--char-color-primary),transparent 90%),color-mix(in oklch,var(--char-color-primary),transparent 80%))}}.char-btn-toolbar-icon-primary{border:1px solid var(--char-color-primary)}@supports (color:color-mix(in lab, red, red)){.char-btn-toolbar-icon-primary{border:1px solid color-mix(in oklch,var(--char-color-primary),transparent 70%)}}.char-btn-toolbar-icon-primary{box-shadow:var(--char-shadow-sm);transition:all var(--char-duration-fast)}.char-btn-toolbar-icon-primary:hover{background:linear-gradient(to bottom right,var(--char-color-primary),var(--char-color-primary))}@supports (color:color-mix(in lab, red, red)){.char-btn-toolbar-icon-primary:hover{background:linear-gradient(to bottom right,color-mix(in oklch,var(--char-color-primary),transparent 80%),color-mix(in oklch,var(--char-color-primary),transparent 70%))}}.char-btn-toolbar-icon-secondary{border-radius:var(--char-radius-full);background:linear-gradient(to bottom right,var(--char-color-secondary),var(--char-color-secondary));width:2rem;height:2rem;padding:0}@supports (color:color-mix(in lab, red, red)){.char-btn-toolbar-icon-secondary{background:linear-gradient(to bottom right,color-mix(in oklch,var(--char-color-secondary),transparent 90%),color-mix(in oklch,var(--char-color-secondary),transparent 80%))}}.char-btn-toolbar-icon-secondary{border:1px solid var(--char-color-secondary)}@supports (color:color-mix(in lab, red, red)){.char-btn-toolbar-icon-secondary{border:1px solid color-mix(in oklch,var(--char-color-secondary),transparent 70%)}}.char-btn-toolbar-icon-secondary{box-shadow:var(--char-shadow-sm);transition:all var(--char-duration-fast)}.char-btn-toolbar-icon-secondary:hover{background:linear-gradient(to bottom right,var(--char-color-secondary),var(--char-color-secondary))}@supports (color:color-mix(in lab, red, red)){.char-btn-toolbar-icon-secondary:hover{background:linear-gradient(to bottom right,color-mix(in oklch,var(--char-color-secondary),transparent 80%),color-mix(in oklch,var(--char-color-secondary),transparent 70%))}}.char-badge-compact{height:1.25rem;padding:0 .5rem;font-size:10px}.char-badge-mini{height:1rem;padding:0 .375rem;font-size:10px}.char-shimmer{background:linear-gradient(90deg,transparent,var(--char-color-foreground),transparent);animation:3s linear infinite char-shimmer}@supports (color:color-mix(in lab, red, red)){.char-shimmer{background:linear-gradient(90deg,transparent,color-mix(in oklch,var(--char-color-foreground),transparent 90%),transparent)}}.char-shimmer{background-size:1000px 100%}.char-gradient-text{background:linear-gradient(to right,var(--char-color-foreground),var(--char-color-foreground))}@supports (color:color-mix(in lab, red, red)){.char-gradient-text{background:linear-gradient(to right,var(--char-color-foreground),color-mix(in oklch,var(--char-color-foreground),transparent 30%))}}.char-gradient-text{-webkit-text-fill-color:transparent;-webkit-background-clip:text;background-clip:text}.char-glass{background:var(--char-color-background)}@supports (color:color-mix(in lab, red, red)){.char-glass{background:color-mix(in oklch,var(--char-color-background),transparent 50%)}}.char-glass{-webkit-backdrop-filter:blur(var(--char-blur-md));backdrop-filter:blur(var(--char-blur-md));border:1px solid var(--char-color-border)}@supports (color:color-mix(in lab, red, red)){.char-glass{border:1px solid color-mix(in oklch,var(--char-color-border),transparent 50%)}}.char-tool-card{transition:all .3s ease-out}.char-tool-card:hover{box-shadow:var(--char-shadow-lg);transform:scale(1.02)}.char-tool-border-calling{position:relative;overflow:hidden}.char-tool-border-calling:before{content:\"\";background:conic-gradient(from 0deg,transparent 0deg,transparent 60deg,var(--char-color-primary)90deg,var(--char-color-primary)120deg,var(--char-color-primary)150deg,transparent 180deg,transparent 360deg);position:absolute;inset:-50%}@supports (color:color-mix(in lab, red, red)){.char-tool-border-calling:before{background:conic-gradient(from 0deg,transparent 0deg,transparent 60deg,color-mix(in oklch,var(--char-color-primary),transparent 50%)90deg,color-mix(in oklch,var(--char-color-primary),transparent 30%)120deg,color-mix(in oklch,var(--char-color-primary),transparent 50%)150deg,transparent 180deg,transparent 360deg)}}.char-tool-border-calling:before{animation:1.5s linear infinite char-border-rotate}.char-tool-border-success{background:var(--char-color-success)}@supports (color:color-mix(in lab, red, red)){.char-tool-border-success{background:color-mix(in oklch,var(--char-color-success),transparent 60%)}}.char-tool-border-success{box-shadow:0 0 12px var(--char-color-success),inset 0 0 8px var(--char-color-success)}@supports (color:color-mix(in lab, red, red)){.char-tool-border-success{box-shadow:0 0 12px color-mix(in oklch,var(--char-color-success),transparent 70%),inset 0 0 8px color-mix(in oklch,var(--char-color-success),transparent 90%)}}.char-tool-border-error{background:var(--char-color-error)}@supports (color:color-mix(in lab, red, red)){.char-tool-border-error{background:color-mix(in oklch,var(--char-color-error),transparent 60%)}}.char-tool-border-error{box-shadow:0 0 12px var(--char-color-error),inset 0 0 8px var(--char-color-error)}@supports (color:color-mix(in lab, red, red)){.char-tool-border-error{box-shadow:0 0 12px color-mix(in oklch,var(--char-color-error),transparent 70%),inset 0 0 8px color-mix(in oklch,var(--char-color-error),transparent 90%)}}.char-scrollbar-thin{scrollbar-width:thin;scrollbar-color:var(--char-color-primary)transparent}@supports (color:color-mix(in lab, red, red)){.char-scrollbar-thin{scrollbar-color:color-mix(in oklch,var(--char-color-primary),transparent 80%)transparent}}.char-scrollbar-thin::-webkit-scrollbar{width:6px;height:6px}.char-scrollbar-thin::-webkit-scrollbar-track{background:0 0}.char-scrollbar-thin::-webkit-scrollbar-thumb{background-color:var(--char-color-primary)}@supports (color:color-mix(in lab, red, red)){.char-scrollbar-thin::-webkit-scrollbar-thumb{background-color:color-mix(in oklch,var(--char-color-primary),transparent 80%)}}.char-scrollbar-thin::-webkit-scrollbar-thumb{border-radius:3px}.char-scrollbar-thin::-webkit-scrollbar-thumb:hover{background-color:var(--char-color-primary)}@supports (color:color-mix(in lab, red, red)){.char-scrollbar-thin::-webkit-scrollbar-thumb:hover{background-color:color-mix(in oklch,var(--char-color-primary),transparent 70%)}}.char-glass-pill{background:var(--char-color-background)}@supports (color:color-mix(in lab, red, red)){.char-glass-pill{background:color-mix(in oklch,var(--char-color-background),transparent 15%)}}.char-glass-pill{-webkit-backdrop-filter:blur(var(--char-blur-lg))saturate(150%);box-shadow:0 4px 16px var(--char-color-foreground),inset 0 .5px 0 var(--char-color-foreground)}@supports (color:color-mix(in lab, red, red)){.char-glass-pill{box-shadow:0 4px 16px color-mix(in oklch,var(--char-color-foreground),transparent 80%),inset 0 .5px 0 color-mix(in oklch,var(--char-color-foreground),transparent 92%)}}.char-glass-pill{border:1px solid var(--char-color-foreground)}@supports (color:color-mix(in lab, red, red)){.char-glass-pill{border:1px solid color-mix(in oklch,var(--char-color-foreground),transparent 94%)}}.char-glass-pill:before{content:\"\";border-radius:inherit;background:linear-gradient(180deg,var(--char-color-foreground)0%,transparent 40%);position:absolute;inset:0}@supports (color:color-mix(in lab, red, red)){.char-glass-pill:before{background:linear-gradient(180deg,color-mix(in oklch,var(--char-color-foreground),transparent 96%)0%,transparent 40%)}}.char-glass-pill:before{pointer-events:none;z-index:1}.char-glass-pill-collapsed{background:var(--char-color-background)}@supports (color:color-mix(in lab, red, red)){.char-glass-pill-collapsed{background:color-mix(in oklch,var(--char-color-background),transparent 15%)}}.char-glass-pill-collapsed{-webkit-backdrop-filter:blur(var(--char-blur-lg))saturate(150%);box-shadow:0 2px 8px var(--char-color-foreground),inset 0 .5px 0 var(--char-color-foreground)}@supports (color:color-mix(in lab, red, red)){.char-glass-pill-collapsed{box-shadow:0 2px 8px color-mix(in oklch,var(--char-color-foreground),transparent 80%),inset 0 .5px 0 color-mix(in oklch,var(--char-color-foreground),transparent 92%)}}.char-glass-pill-collapsed{border:1px solid var(--char-color-foreground)}@supports (color:color-mix(in lab, red, red)){.char-glass-pill-collapsed{border:1px solid color-mix(in oklch,var(--char-color-foreground),transparent 94%)}}.char-glass-pill-hovered{background:var(--char-color-background)}@supports (color:color-mix(in lab, red, red)){.char-glass-pill-hovered{background:color-mix(in oklch,var(--char-color-background),transparent 20%)}}.char-glass-pill-hovered{-webkit-backdrop-filter:blur(16px)saturate(140%);box-shadow:0 2px 12px var(--char-color-foreground)}@supports (color:color-mix(in lab, red, red)){.char-glass-pill-hovered{box-shadow:0 2px 12px color-mix(in oklch,var(--char-color-foreground),transparent 82%)}}.char-glass-pill-hovered{border:1px solid var(--char-color-foreground)}@supports (color:color-mix(in lab, red, red)){.char-glass-pill-hovered{border:1px solid color-mix(in oklch,var(--char-color-foreground),transparent 94%)}}.char-glass-shimmer{background:linear-gradient(90deg,var(--char-color-foreground)0%,var(--char-color-foreground)50%,var(--char-color-foreground)100%)}@supports (color:color-mix(in lab, red, red)){.char-glass-shimmer{background:linear-gradient(90deg,color-mix(in oklch,var(--char-color-foreground),transparent 92%)0%,color-mix(in oklch,var(--char-color-foreground),transparent 85%)50%,color-mix(in oklch,var(--char-color-foreground),transparent 92%)100%)}}.char-glass-shimmer{background-size:200% 100%;animation:4s ease-in-out infinite char-glass-shimmer}.char-scroll-touch{-webkit-overflow-scrolling:touch;overscroll-behavior:contain}.char-scroll-fade-y{-webkit-mask-image:linear-gradient(#0000,#000 8px calc(100% - 8px),#0000);mask-image:linear-gradient(#0000,#000 8px calc(100% - 8px),#0000)}.char-pb-safe{padding-bottom:env(safe-area-inset-bottom,0px)}.char-mb-safe{margin-bottom:env(safe-area-inset-bottom,0px)}.char-bottom-safe{bottom:max(1rem,env(safe-area-inset-bottom,0px))}@supports (padding-bottom:env(safe-area-inset-bottom)){.char-pill-safe-bottom{padding-bottom:calc(env(safe-area-inset-bottom,0px) + .5rem)}}}@layer utilities{.\\@container\\/card-header{container:card-header/inline-size}.\\@container{container-type:inline-size}.pointer-events-auto{pointer-events:auto}.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)}.inset-x-0{inset-inline:calc(var(--spacing)*0)}.inset-y-0{inset-block:calc(var(--spacing)*0)}.-top-1{top:calc(var(--spacing)*-1)}.-top-1\\.5{top:calc(var(--spacing)*-1.5)}.-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-0\\.5{right:calc(var(--spacing)*-.5)}.-right-1{right:calc(var(--spacing)*-1)}.-right-1\\.5{right:calc(var(--spacing)*-1.5)}.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)}.-bottom-0\\.5{bottom:calc(var(--spacing)*-.5)}.bottom-0{bottom:calc(var(--spacing)*0)}.bottom-full{bottom:100%}.left-0{left:calc(var(--spacing)*0)}.left-1\\/2{left:50%}.left-2{left:calc(var(--spacing)*2)}.left-\\[50\\%\\]{left:50%}.z-0{z-index:0}.z-10{z-index:10}.z-20{z-index:20}.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-span-2{grid-row:span 2/span 2}.row-start-1{grid-row-start:1}.row-start-2{grid-row-start:2}.container{width:100%}@media (min-width:40rem){.container{max-width:40rem}}@media (min-width:48rem){.container{max-width:48rem}}@media (min-width:64rem){.container{max-width:64rem}}@media (min-width:80rem){.container{max-width:80rem}}@media (min-width:96rem){.container{max-width:96rem}}.-m-1{margin:calc(var(--spacing)*-1)}.m-0{margin:calc(var(--spacing)*0)}.-mx-1{margin-inline:calc(var(--spacing)*-1)}.mx-2{margin-inline:calc(var(--spacing)*2)}.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-4{margin-block:calc(var(--spacing)*4)}.my-5{margin-block:calc(var(--spacing)*5)}.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-1\\.5{margin-top:calc(var(--spacing)*1.5)}.mt-2{margin-top:calc(var(--spacing)*2)}.mt-3{margin-top:calc(var(--spacing)*3)}.mt-4{margin-top:calc(var(--spacing)*4)}.mt-5{margin-top:calc(var(--spacing)*5)}.mt-6{margin-top:calc(var(--spacing)*6)}.mt-auto{margin-top:auto}.mr-1{margin-right:calc(var(--spacing)*1)}.mr-1\\.5{margin-right:calc(var(--spacing)*1.5)}.-mb-1{margin-bottom:calc(var(--spacing)*-1)}.-mb-2{margin-bottom:calc(var(--spacing)*-2)}.mb-0\\.5{margin-bottom:calc(var(--spacing)*.5)}.mb-1{margin-bottom:calc(var(--spacing)*1)}.mb-1\\.5{margin-bottom:calc(var(--spacing)*1.5)}.mb-2{margin-bottom:calc(var(--spacing)*2)}.mb-3{margin-bottom:calc(var(--spacing)*3)}.mb-4{margin-bottom:calc(var(--spacing)*4)}.mb-5{margin-bottom:calc(var(--spacing)*5)}.mb-6{margin-bottom:calc(var(--spacing)*6)}.-ml-1{margin-left:calc(var(--spacing)*-1)}.ml-0\\.5{margin-left:calc(var(--spacing)*.5)}.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-6{margin-left:calc(var(--spacing)*6)}.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}.contents{display:contents}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.table{display:table}.aspect-square{aspect-ratio:1}.size-1\\.5{width:calc(var(--spacing)*1.5);height:calc(var(--spacing)*1.5)}.size-2{width:calc(var(--spacing)*2);height:calc(var(--spacing)*2)}.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-7{width:calc(var(--spacing)*7);height:calc(var(--spacing)*7)}.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{height:calc(var(--spacing)*1)}.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-4\\.5{height:calc(var(--spacing)*4.5)}.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-11{height:calc(var(--spacing)*11)}.h-16{height:calc(var(--spacing)*16)}.h-\\[var\\(--radix-select-trigger-height\\)\\]{height:var(--radix-select-trigger-height)}.h-auto{height:auto}.h-full{height:100%}.h-px{height:1px}.h-screen{height:100vh}.max-h-\\(--radix-dropdown-menu-content-available-height\\){max-height:var(--radix-dropdown-menu-content-available-height)}.max-h-\\(--radix-select-content-available-height\\){max-height:var(--radix-select-content-available-height)}.max-h-20{max-height:calc(var(--spacing)*20)}.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-64{max-height:calc(var(--spacing)*64)}.max-h-\\[30vh\\]{max-height:30vh}.max-h-\\[80dvh\\]{max-height:80dvh}.max-h-\\[80vh\\]{max-height:80vh}.max-h-\\[90vh\\]{max-height:90vh}.min-h-0{min-height:calc(var(--spacing)*0)}.min-h-7{min-height:calc(var(--spacing)*7)}.min-h-11{min-height:calc(var(--spacing)*11)}.min-h-14{min-height:calc(var(--spacing)*14)}.min-h-40{min-height:calc(var(--spacing)*40)}.min-h-screen{min-height:100vh}.w-0\\.5{width:calc(var(--spacing)*.5)}.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-3\\/4{width:75%}.w-4{width:calc(var(--spacing)*4)}.w-4\\.5{width:calc(var(--spacing)*4.5)}.w-5{width:calc(var(--spacing)*5)}.w-6{width:calc(var(--spacing)*6)}.w-8{width:calc(var(--spacing)*8)}.w-11{width:calc(var(--spacing)*11)}.w-auto{width:auto}.w-fit{width:fit-content}.w-full{width:100%}.w-px{width:1px}.max-w-\\(--thread-max-width\\){max-width:var(--thread-max-width)}.max-w-6xl{max-width:var(--container-6xl)}.max-w-24{max-width:calc(var(--spacing)*24)}.max-w-32{max-width:calc(var(--spacing)*32)}.max-w-\\[75\\%\\]{max-width:75%}.max-w-\\[100px\\]{max-width:100px}.max-w-\\[140px\\]{max-width:140px}.max-w-\\[calc\\(100\\%-2rem\\)\\]{max-width:calc(100% - 2rem)}.max-w-full{max-width:100%}.max-w-lg{max-width:var(--container-lg)}.min-w-0{min-width:calc(var(--spacing)*0)}.min-w-4{min-width:calc(var(--spacing)*4)}.min-w-7{min-width:calc(var(--spacing)*7)}.min-w-11{min-width:calc(var(--spacing)*11)}.min-w-\\[8rem\\]{min-width:8rem}.min-w-\\[var\\(--radix-select-trigger-width\\)\\]{min-width:var(--radix-select-trigger-width)}.flex-1{flex:1}.flex-none{flex:none}.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-dropdown-menu-content-transform-origin\\){transform-origin:var(--radix-dropdown-menu-content-transform-origin)}.origin-\\(--radix-select-content-transform-origin\\){transform-origin:var(--radix-select-content-transform-origin)}.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-\\[-50\\%\\]{--tw-translate-x:-50%;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)}.scale-75{--tw-scale-x:75%;--tw-scale-y:75%;--tw-scale-z:75%;scale:var(--tw-scale-x)var(--tw-scale-y)}.scale-100{--tw-scale-x:100%;--tw-scale-y:100%;--tw-scale-z:100%;scale:var(--tw-scale-x)var(--tw-scale-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,)}.transform-gpu{transform:translateZ(0)var(--tw-rotate-x,)var(--tw-rotate-y,)var(--tw-rotate-z,)var(--tw-skew-x,)var(--tw-skew-y,)}.animate-in{animation:enter var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none)}.animate-pulse{animation:var(--animate-pulse)}.animate-spin{animation:var(--animate-spin)}.cursor-default{cursor:default}.cursor-grab{cursor:grab}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.resize{resize:both}.resize-none{resize:none}.scroll-m-20{scroll-margin:calc(var(--spacing)*20)}.scroll-my-1{scroll-margin-block:calc(var(--spacing)*1)}.list-inside{list-style-position:inside}.list-decimal{list-style-type:decimal}.list-disc{list-style-type:disc}.auto-rows-auto{grid-auto-rows:auto}.auto-rows-min{grid-auto-rows:min-content}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.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}.grid-rows-\\[auto_auto\\]{grid-template-rows:auto auto}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.flex-row{flex-direction:row}.flex-wrap{flex-wrap:wrap}.content-start{align-content:flex-start}.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}.justify-items-end{justify-items:end}.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)}.gap-6{gap:calc(var(--spacing)*6)}:where(.space-y-0\\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*.5)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*.5)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-1>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*1)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*1)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-1\\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*1.5)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*1.5)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-2>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*2)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*2)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-2\\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*2.5)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*2.5)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-3>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*3)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*3)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-4>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*4)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*4)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-6>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*6)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*6)*calc(1 - var(--tw-space-y-reverse)))}.gap-y-2{row-gap:calc(var(--spacing)*2)}.self-center{align-self:center}.self-start{align-self:flex-start}.justify-self-end{justify-self:flex-end}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-visible{overflow:visible}.overflow-x-auto{overflow-x:auto}.overflow-x-hidden{overflow-x:hidden}.overflow-y-auto{overflow-y:auto}.overflow-y-scroll{overflow-y:scroll}.scroll-smooth{scroll-behavior:smooth}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:var(--radius-2xl)}.rounded-\\[2px\\]{border-radius:2px}.rounded-\\[14px\\]{border-radius:14px}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--char-radius-lg)}.rounded-md{border-radius:var(--char-radius-md)}.rounded-none{border-radius:0}.rounded-sm{border-radius:var(--char-radius-sm)}.rounded-xl{border-radius:var(--char-radius-xl)}.rounded-xs{border-radius:var(--radius-xs)}.rounded-t-lg{border-top-left-radius:var(--char-radius-lg);border-top-right-radius:var(--char-radius-lg)}.rounded-t-none\\!{border-top-left-radius:0!important;border-top-right-radius:0!important}.rounded-b-lg{border-bottom-right-radius:var(--char-radius-lg);border-bottom-left-radius:var(--char-radius-lg)}.border{border-style:var(--tw-border-style);border-width:1px}.border-2{border-style:var(--tw-border-style);border-width:2px}.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-r{border-right-style:var(--tw-border-style);border-right-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-l{border-left-style:var(--tw-border-style);border-left-width:1px}.border-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-amber-500\\/30{border-color:#f99c004d}@supports (color:color-mix(in lab, red, red)){.border-amber-500\\/30{border-color:color-mix(in oklab,var(--color-amber-500)30%,transparent)}}.border-amber-500\\/50{border-color:#f99c0080}@supports (color:color-mix(in lab, red, red)){.border-amber-500\\/50{border-color:color-mix(in oklab,var(--color-amber-500)50%,transparent)}}.border-blue-500\\/20{border-color:#3080ff33}@supports (color:color-mix(in lab, red, red)){.border-blue-500\\/20{border-color:color-mix(in oklab,var(--color-blue-500)20%,transparent)}}.border-blue-500\\/30{border-color:#3080ff4d}@supports (color:color-mix(in lab, red, red)){.border-blue-500\\/30{border-color:color-mix(in oklab,var(--color-blue-500)30%,transparent)}}.border-border,.border-border\\/50{border-color:var(--char-color-border)}@supports (color:color-mix(in lab, red, red)){.border-border\\/50{border-color:color-mix(in oklab,var(--char-color-border)50%,transparent)}}.border-composer-border{border-color:var(--char-composer-border)}.border-destructive,.border-destructive\\/20{border-color:var(--char-color-destructive)}@supports (color:color-mix(in lab, red, red)){.border-destructive\\/20{border-color:color-mix(in oklab,var(--char-color-destructive)20%,transparent)}}.border-emerald-500\\/20{border-color:#00bb7f33}@supports (color:color-mix(in lab, red, red)){.border-emerald-500\\/20{border-color:color-mix(in oklab,var(--color-emerald-500)20%,transparent)}}.border-foreground\\/20{border-color:var(--char-color-foreground)}@supports (color:color-mix(in lab, red, red)){.border-foreground\\/20{border-color:color-mix(in oklab,var(--char-color-foreground)20%,transparent)}}.border-gray-200{border-color:var(--color-gray-200)}.border-input{border-color:var(--char-color-input)}.border-muted-foreground\\/20{border-color:var(--char-color-muted-foreground)}@supports (color:color-mix(in lab, red, red)){.border-muted-foreground\\/20{border-color:color-mix(in oklab,var(--char-color-muted-foreground)20%,transparent)}}.border-muted-foreground\\/30{border-color:var(--char-color-muted-foreground)}@supports (color:color-mix(in lab, red, red)){.border-muted-foreground\\/30{border-color:color-mix(in oklab,var(--char-color-muted-foreground)30%,transparent)}}.border-orange-500\\/20{border-color:#fe6e0033}@supports (color:color-mix(in lab, red, red)){.border-orange-500\\/20{border-color:color-mix(in oklab,var(--color-orange-500)20%,transparent)}}.border-primary\\/50{border-color:var(--char-color-primary)}@supports (color:color-mix(in lab, red, red)){.border-primary\\/50{border-color:color-mix(in oklab,var(--char-color-primary)50%,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-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\\/8{border-color:#ffffff14}@supports (color:color-mix(in lab, red, red)){.border-white\\/8{border-color:color-mix(in oklab,var(--color-white)8%,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-zinc-200{border-color:var(--color-zinc-200)}.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-zinc-600{border-color:var(--color-zinc-600)}.border-t-muted-foreground\\/60{border-top-color:var(--char-color-muted-foreground)}@supports (color:color-mix(in lab, red, red)){.border-t-muted-foreground\\/60{border-top-color:color-mix(in oklab,var(--char-color-muted-foreground)60%,transparent)}}.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-accent{background-color:var(--char-color-accent)}.bg-amber-500{background-color:var(--color-amber-500)}.bg-amber-500\\/5{background-color:#f99c000d}@supports (color:color-mix(in lab, red, red)){.bg-amber-500\\/5{background-color:color-mix(in oklab,var(--color-amber-500)5%,transparent)}}.bg-amber-500\\/10{background-color:#f99c001a}@supports (color:color-mix(in lab, red, red)){.bg-amber-500\\/10{background-color:color-mix(in oklab,var(--color-amber-500)10%,transparent)}}.bg-amber-500\\/20{background-color:#f99c0033}@supports (color:color-mix(in lab, red, red)){.bg-amber-500\\/20{background-color:color-mix(in oklab,var(--color-amber-500)20%,transparent)}}.bg-background,.bg-background\\/80{background-color:var(--char-color-background)}@supports (color:color-mix(in lab, red, red)){.bg-background\\/80{background-color:color-mix(in oklab,var(--char-color-background)80%,transparent)}}.bg-black\\/30{background-color:#0000004d}@supports (color:color-mix(in lab, red, red)){.bg-black\\/30{background-color:color-mix(in oklab,var(--color-black)30%,transparent)}}.bg-black\\/50{background-color:#00000080}@supports (color:color-mix(in lab, red, red)){.bg-black\\/50{background-color:color-mix(in oklab,var(--color-black)50%,transparent)}}.bg-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-blue-500\\/70{background-color:#3080ffb3}@supports (color:color-mix(in lab, red, red)){.bg-blue-500\\/70{background-color:color-mix(in oklab,var(--color-blue-500)70%,transparent)}}.bg-border{background-color:var(--char-color-border)}.bg-card{background-color:var(--char-color-card)}.bg-code-bg{background-color:var(--char-code-bg)}.bg-code-header-bg{background-color:var(--char-code-header-bg)}.bg-composer-bg{background-color:var(--char-composer-bg)}.bg-current{background-color:currentColor}.bg-destructive,.bg-destructive\\/10{background-color:var(--char-color-destructive)}@supports (color:color-mix(in lab, red, red)){.bg-destructive\\/10{background-color:color-mix(in oklab,var(--char-color-destructive)10%,transparent)}}.bg-emerald-500\\/6{background-color:#00bb7f0f}@supports (color:color-mix(in lab, red, red)){.bg-emerald-500\\/6{background-color:color-mix(in oklab,var(--color-emerald-500)6%,transparent)}}.bg-emerald-500\\/10{background-color:#00bb7f1a}@supports (color:color-mix(in lab, red, red)){.bg-emerald-500\\/10{background-color:color-mix(in oklab,var(--color-emerald-500)10%,transparent)}}.bg-foreground{background-color:var(--char-color-foreground)}.bg-gray-50{background-color:var(--color-gray-50)}.bg-gray-100{background-color:var(--color-gray-100)}.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\\/10{background-color:#00c7581a}@supports (color:color-mix(in lab, red, red)){.bg-green-500\\/10{background-color:color-mix(in oklab,var(--color-green-500)10%,transparent)}}.bg-green-500\\/20{background-color:#00c75833}@supports (color:color-mix(in lab, red, red)){.bg-green-500\\/20{background-color:color-mix(in oklab,var(--color-green-500)20%,transparent)}}.bg-muted{background-color:var(--char-color-muted)}.bg-muted-foreground\\/40{background-color:var(--char-color-muted-foreground)}@supports (color:color-mix(in lab, red, red)){.bg-muted-foreground\\/40{background-color:color-mix(in oklab,var(--char-color-muted-foreground)40%,transparent)}}.bg-muted\\/5{background-color:var(--char-color-muted)}@supports (color:color-mix(in lab, red, red)){.bg-muted\\/5{background-color:color-mix(in oklab,var(--char-color-muted)5%,transparent)}}.bg-muted\\/30{background-color:var(--char-color-muted)}@supports (color:color-mix(in lab, red, red)){.bg-muted\\/30{background-color:color-mix(in oklab,var(--char-color-muted)30%,transparent)}}.bg-muted\\/40{background-color:var(--char-color-muted)}@supports (color:color-mix(in lab, red, red)){.bg-muted\\/40{background-color:color-mix(in oklab,var(--char-color-muted)40%,transparent)}}.bg-muted\\/50{background-color:var(--char-color-muted)}@supports (color:color-mix(in lab, red, red)){.bg-muted\\/50{background-color:color-mix(in oklab,var(--char-color-muted)50%,transparent)}}.bg-orange-500\\/10{background-color:#fe6e001a}@supports (color:color-mix(in lab, red, red)){.bg-orange-500\\/10{background-color:color-mix(in oklab,var(--color-orange-500)10%,transparent)}}.bg-popover{background-color:var(--char-color-popover)}.bg-primary,.bg-primary\\/10{background-color:var(--char-color-primary)}@supports (color:color-mix(in lab, red, red)){.bg-primary\\/10{background-color:color-mix(in oklab,var(--char-color-primary)10%,transparent)}}.bg-primary\\/90{background-color:var(--char-color-primary)}@supports (color:color-mix(in lab, red, red)){.bg-primary\\/90{background-color:color-mix(in oklab,var(--char-color-primary)90%,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(--char-color-secondary)}.bg-slate-500\\/10{background-color:#62748e1a}@supports (color:color-mix(in lab, red, red)){.bg-slate-500\\/10{background-color:color-mix(in oklab,var(--color-slate-500)10%,transparent)}}.bg-transparent{background-color:#0000}.bg-user-bubble-bg{background-color:var(--char-user-bubble-bg)}.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\\/8{background-color:#ffffff14}@supports (color:color-mix(in lab, red, red)){.bg-white\\/8{background-color:color-mix(in oklab,var(--color-white)8%,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\\/20{background-color:#fff3}@supports (color:color-mix(in lab, red, red)){.bg-white\\/20{background-color:color-mix(in oklab,var(--color-white)20%,transparent)}}.bg-white\\/60{background-color:#fff9}@supports (color:color-mix(in lab, red, red)){.bg-white\\/60{background-color:color-mix(in oklab,var(--color-white)60%,transparent)}}.bg-white\\/90{background-color:#ffffffe6}@supports (color:color-mix(in lab, red, red)){.bg-white\\/90{background-color:color-mix(in oklab,var(--color-white)90%,transparent)}}.bg-zinc-100{background-color:var(--color-zinc-100)}.bg-zinc-700\\/50{background-color:#3f3f4680}@supports (color:color-mix(in lab, red, red)){.bg-zinc-700\\/50{background-color:color-mix(in oklab,var(--color-zinc-700)50%,transparent)}}.bg-gradient-to-br{--tw-gradient-position:to bottom right in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.bg-\\[linear-gradient\\(to_top\\,var\\(--color-background\\)\\,transparent\\)\\]{background-image:linear-gradient(to top,var(--color-background),transparent)}.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-current{fill:currentColor}.fill-foreground{fill:var(--char-color-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)}.px-1{padding-inline:calc(var(--spacing)*1)}.px-1\\.5{padding-inline:calc(var(--spacing)*1.5)}.px-2{padding-inline:calc(var(--spacing)*2)}.px-2\\.5{padding-inline:calc(var(--spacing)*2.5)}.px-3{padding-inline:calc(var(--spacing)*3)}.px-4{padding-inline:calc(var(--spacing)*4)}.px-6{padding-inline:calc(var(--spacing)*6)}.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)}.py-6{padding-block:calc(var(--spacing)*6)}.py-8{padding-block:calc(var(--spacing)*8)}.pt-0\\.5{padding-top:calc(var(--spacing)*.5)}.pt-1{padding-top:calc(var(--spacing)*1)}.pt-1\\.5{padding-top:calc(var(--spacing)*1.5)}.pt-2{padding-top:calc(var(--spacing)*2)}.pt-3{padding-top:calc(var(--spacing)*3)}.pt-4{padding-top:calc(var(--spacing)*4)}.pt-14{padding-top:calc(var(--spacing)*14)}.pr-2{padding-right:calc(var(--spacing)*2)}.pr-8{padding-right:calc(var(--spacing)*8)}.pb-1{padding-bottom:calc(var(--spacing)*1)}.pb-3{padding-bottom:calc(var(--spacing)*3)}.pb-4{padding-bottom:calc(var(--spacing)*4)}.pl-2{padding-left:calc(var(--spacing)*2)}.pl-3{padding-left:calc(var(--spacing)*3)}.pl-6{padding-left:calc(var(--spacing)*6)}.pl-8{padding-left:calc(var(--spacing)*8)}.text-center{text-align:center}.text-left{text-align:left}.text-start{text-align:start}.align-middle{vertical-align:middle}.font-mono{font-family:var(--char-font-mono)}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.text-base{font-size:var(--char-font-size-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-lg{font-size:var(--char-font-size-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--char-font-size-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.text-xs{font-size:var(--char-font-size-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\\[9px\\]{font-size:9px}.text-\\[10px\\]{font-size:10px}.text-\\[11px\\]{font-size:11px}.text-\\[15px\\]{font-size:15px}.leading-7{--tw-leading:calc(var(--spacing)*7);line-height:calc(var(--spacing)*7)}.leading-\\[21px\\]{--tw-leading:21px;line-height:21px}.leading-none{--tw-leading:1;line-height:1}.leading-normal{--tw-leading:var(--leading-normal);line-height:var(--leading-normal)}.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)}.tracking-widest{--tw-tracking:var(--tracking-widest);letter-spacing:var(--tracking-widest)}.text-balance{text-wrap:balance}.wrap-break-word{overflow-wrap:break-word}.break-all{word-break:break-all}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.text-amber-400{color:var(--color-amber-400)}.text-amber-500{color:var(--color-amber-500)}.text-amber-600{color:var(--color-amber-600)}.text-assistant-bubble-text{color:var(--char-assistant-bubble-text)}.text-background{color:var(--char-color-background)}.text-blue-400{color:var(--color-blue-400)}.text-blue-400\\/60{color:#54a2ff99}@supports (color:color-mix(in lab, red, red)){.text-blue-400\\/60{color:color-mix(in oklab,var(--color-blue-400)60%,transparent)}}.text-blue-600{color:var(--color-blue-600)}.text-card-foreground{color:var(--char-color-card-foreground)}.text-code-text{color:var(--char-code-text)}.text-composer-text{color:var(--char-composer-text)}.text-destructive,.text-destructive\\/70{color:var(--char-color-destructive)}@supports (color:color-mix(in lab, red, red)){.text-destructive\\/70{color:color-mix(in oklab,var(--char-color-destructive)70%,transparent)}}.text-emerald-600{color:var(--color-emerald-600)}.text-foreground,.text-foreground\\/70{color:var(--char-color-foreground)}@supports (color:color-mix(in lab, red, red)){.text-foreground\\/70{color:color-mix(in oklab,var(--char-color-foreground)70%,transparent)}}.text-foreground\\/80{color:var(--char-color-foreground)}@supports (color:color-mix(in lab, red, red)){.text-foreground\\/80{color:color-mix(in oklab,var(--char-color-foreground)80%,transparent)}}.text-gray-400{color:var(--color-gray-400)}.text-gray-500{color:var(--color-gray-500)}.text-gray-600{color:var(--color-gray-600)}.text-gray-800{color:var(--color-gray-800)}.text-gray-900{color:var(--color-gray-900)}.text-green-400{color:var(--color-green-400)}.text-green-500{color:var(--color-green-500)}.text-muted-foreground,.text-muted-foreground\\/70{color:var(--char-color-muted-foreground)}@supports (color:color-mix(in lab, red, red)){.text-muted-foreground\\/70{color:color-mix(in oklab,var(--char-color-muted-foreground)70%,transparent)}}.text-muted-foreground\\/80{color:var(--char-color-muted-foreground)}@supports (color:color-mix(in lab, red, red)){.text-muted-foreground\\/80{color:color-mix(in oklab,var(--char-color-muted-foreground)80%,transparent)}}.text-orange-600{color:var(--color-orange-600)}.text-popover-foreground{color:var(--char-color-popover-foreground)}.text-primary{color:var(--char-color-primary)}.text-primary-foreground{color:var(--char-color-primary-foreground)}.text-primary\\/80{color:var(--char-color-primary)}@supports (color:color-mix(in lab, red, red)){.text-primary\\/80{color:color-mix(in oklab,var(--char-color-primary)80%,transparent)}}.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(--char-color-secondary-foreground)}.text-slate-600{color:var(--color-slate-600)}.text-slate-900{color:var(--color-slate-900)}.text-user-bubble-text{color:var(--char-user-bubble-text)}.text-white{color:var(--color-white)}.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-700{color:var(--color-zinc-700)}.capitalize{text-transform:capitalize}.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,)}.line-through{text-decoration-line:line-through}.underline{text-decoration-line:underline}.underline-offset-4{text-underline-offset:4px}.opacity-0{opacity:0}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.opacity-70{opacity:.7}.opacity-90{opacity:.9}.opacity-100{opacity:1}.shadow{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-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-none{--tw-shadow:0 0 #0000;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\\/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\\/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-amber-500\\/30{--tw-ring-color:#f99c004d}@supports (color:color-mix(in lab, red, red)){.ring-amber-500\\/30{--tw-ring-color:color-mix(in oklab,var(--color-amber-500)30%,transparent)}}.ring-blue-500\\/25{--tw-ring-color:#3080ff40}@supports (color:color-mix(in lab, red, red)){.ring-blue-500\\/25{--tw-ring-color:color-mix(in oklab,var(--color-blue-500)25%,transparent)}}.ring-border\\/20{--tw-ring-color:var(--char-color-border)}@supports (color:color-mix(in lab, red, red)){.ring-border\\/20{--tw-ring-color:color-mix(in oklab,var(--char-color-border)20%,transparent)}}.ring-emerald-400\\/30{--tw-ring-color:#00d2944d}@supports (color:color-mix(in lab, red, red)){.ring-emerald-400\\/30{--tw-ring-color:color-mix(in oklab,var(--color-emerald-400)30%,transparent)}}.ring-red-500\\/30{--tw-ring-color:#fb2c364d}@supports (color:color-mix(in lab, red, red)){.ring-red-500\\/30{--tw-ring-color:color-mix(in oklab,var(--color-red-500)30%,transparent)}}.ring-offset-background{--tw-ring-offset-color:var(--char-color-background)}.outline-hidden{--tw-outline-style:none;outline-style:none}@media (forced-colors:active){.outline-hidden{outline-offset:2px;outline:2px solid #0000}}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.filter{filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.backdrop-blur-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,)}.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-\\[transform\\,opacity\\]{transition-property:transform,opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.delay-75{transition-delay:75ms}.duration-\\(--animation-duration\\){--tw-duration:var(--animation-duration);transition-duration:var(--animation-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}.delay-75{--tw-animation-delay:75ms;animation-delay:75ms}.fade-in-0{--tw-enter-opacity:0}.fill-mode-both{--tw-animation-fill-mode:both;animation-fill-mode:both}.outline-none{--tw-outline-style:none;outline-style:none}.select-none{-webkit-user-select:none;user-select:none}.zoom-in-95{--tw-enter-scale:.95}.\\[animation-delay\\:150ms\\]{animation-delay:.15s}.\\[animation-delay\\:300ms\\]{animation-delay:.3s}.fade-in{--tw-enter-opacity:0}.paused{animation-play-state:paused}.running{animation-play-state:running}.slide-in-from-bottom-1{--tw-enter-translate-y:calc(1*var(--spacing))}.slide-in-from-bottom-2{--tw-enter-translate-y:calc(2*var(--spacing))}@media (hover:hover){.group-hover\\:scale-100:is(:where(.group):hover *){--tw-scale-x:100%;--tw-scale-y:100%;--tw-scale-z:100%;scale:var(--tw-scale-x)var(--tw-scale-y)}.group-hover\\:opacity-100:is(:where(.group):hover *){opacity:1}}.group-data-\\[state\\=closed\\]\\/collapsible-content\\:animate-out:is(:where(.group\\/collapsible-content)[data-state=closed] *){animation:exit var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none)}.group-data-\\[state\\=closed\\]\\/collapsible-content\\:duration-\\(--animation-duration\\):is(:where(.group\\/collapsible-content)[data-state=closed] *){--tw-duration:var(--animation-duration);transition-duration:var(--animation-duration)}.group-data-\\[state\\=closed\\]\\/collapsible-content\\:fade-out-0:is(:where(.group\\/collapsible-content)[data-state=closed] *){--tw-exit-opacity:0}.group-data-\\[state\\=closed\\]\\/collapsible-content\\:slide-out-to-top-4:is(:where(.group\\/collapsible-content)[data-state=closed] *){--tw-exit-translate-y:calc(4*var(--spacing)*-1)}.group-data-\\[state\\=closed\\]\\/trigger\\:-rotate-90:is(:where(.group\\/trigger)[data-state=closed] *){rotate:-90deg}.group-data-\\[state\\=open\\]\\/collapsible-content\\:animate-in:is(:where(.group\\/collapsible-content)[data-state=open] *){animation:enter var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none)}.group-data-\\[state\\=open\\]\\/collapsible-content\\:animate-out:is(:where(.group\\/collapsible-content)[data-state=open] *){animation:exit var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none)}.group-data-\\[state\\=open\\]\\/collapsible-content\\:delay-\\[calc\\(var\\(--animation-duration\\)\\*0\\.75\\)\\]:is(:where(.group\\/collapsible-content)[data-state=open] *){transition-delay:calc(var(--animation-duration)*.75)}.group-data-\\[state\\=open\\]\\/collapsible-content\\:duration-\\(--animation-duration\\):is(:where(.group\\/collapsible-content)[data-state=open] *){--tw-duration:var(--animation-duration);transition-duration:var(--animation-duration)}.group-data-\\[state\\=open\\]\\/collapsible-content\\:delay-\\[calc\\(var\\(--animation-duration\\)\\*0\\.75\\)\\]:is(:where(.group\\/collapsible-content)[data-state=open] *){animation-delay:calc(var(--animation-duration)*.75);--tw-animation-delay:calc(var(--animation-duration)*.75)}.group-data-\\[state\\=open\\]\\/collapsible-content\\:fade-in-0:is(:where(.group\\/collapsible-content)[data-state=open] *){--tw-enter-opacity:0}.group-data-\\[state\\=open\\]\\/collapsible-content\\:fade-out-0:is(:where(.group\\/collapsible-content)[data-state=open] *){--tw-exit-opacity:0}.group-data-\\[state\\=open\\]\\/collapsible-content\\:fill-mode-forwards:is(:where(.group\\/collapsible-content)[data-state=open] *){--tw-animation-fill-mode:forwards;animation-fill-mode:forwards}.group-data-\\[state\\=open\\]\\/collapsible-content\\:slide-in-from-top-4:is(:where(.group\\/collapsible-content)[data-state=open] *){--tw-enter-translate-y:calc(4*var(--spacing)*-1)}.group-data-\\[state\\=open\\]\\/trigger\\:rotate-0:is(:where(.group\\/trigger)[data-state=open] *){rotate:none}.selection\\:bg-primary ::selection{background-color:var(--char-color-primary)}.selection\\:bg-primary::selection{background-color:var(--char-color-primary)}.selection\\:text-primary-foreground ::selection{color:var(--char-color-primary-foreground)}.selection\\:text-primary-foreground::selection{color:var(--char-color-primary-foreground)}.file\\:inline-flex::file-selector-button{display:inline-flex}.file\\:h-7::file-selector-button{height:calc(var(--spacing)*7)}.file\\:border-0::file-selector-button{border-style:var(--tw-border-style);border-width:0}.file\\:bg-transparent::file-selector-button{background-color:#0000}.file\\:text-sm::file-selector-button{font-size:var(--char-font-size-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.file\\:font-medium::file-selector-button{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.file\\:text-foreground::file-selector-button{color:var(--char-color-foreground)}.placeholder\\:text-composer-placeholder::placeholder{color:var(--char-composer-placeholder)}.placeholder\\:text-muted-foreground::placeholder{color:var(--char-color-muted-foreground)}.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\\:rounded-tl-lg:first-child{border-top-left-radius:var(--char-radius-lg)}.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\\:rounded-tr-lg:last-child{border-top-right-radius:var(--char-radius-lg)}.last\\:border-r:last-child{border-right-style:var(--tw-border-style);border-right-width:1px}.empty\\:hidden:empty{display:none}.focus-within\\:border-white\\/15:focus-within{border-color:#ffffff26}@supports (color:color-mix(in lab, red, red)){.focus-within\\:border-white\\/15:focus-within{border-color:color-mix(in oklab,var(--color-white)15%,transparent)}}.focus-within\\:bg-white\\/10:focus-within{background-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){.focus-within\\:bg-white\\/10:focus-within{background-color:color-mix(in oklab,var(--color-white)10%,transparent)}}@media (hover:hover){.hover\\:border-amber-500:hover{border-color:var(--color-amber-500)}.hover\\:border-border:hover{border-color:var(--char-color-border)}.hover\\:border-red-500\\/50:hover{border-color:#fb2c3680}@supports (color:color-mix(in lab, red, red)){.hover\\:border-red-500\\/50:hover{border-color:color-mix(in oklab,var(--color-red-500)50%,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-\\[color-mix\\(in_oklab\\,rgb\\(var\\(--background\\)\\)_30\\%\\,transparent\\)\\]:hover{background-color:rgb(var(--background))}@supports (color:color-mix(in lab, red, red)){.hover\\:bg-\\[color-mix\\(in_oklab\\,rgb\\(var\\(--background\\)\\)_30\\%\\,transparent\\)\\]:hover{background-color:color-mix(in oklab,rgb(var(--background))30%,transparent)}}.hover\\:bg-accent:hover,.hover\\:bg-accent\\/50:hover{background-color:var(--char-color-accent)}@supports (color:color-mix(in lab, red, red)){.hover\\:bg-accent\\/50:hover{background-color:color-mix(in oklab,var(--char-color-accent)50%,transparent)}}.hover\\:bg-amber-500\\/10:hover{background-color:#f99c001a}@supports (color:color-mix(in lab, red, red)){.hover\\:bg-amber-500\\/10:hover{background-color:color-mix(in oklab,var(--color-amber-500)10%,transparent)}}.hover\\:bg-amber-500\\/20:hover{background-color:#f99c0033}@supports (color:color-mix(in lab, red, red)){.hover\\:bg-amber-500\\/20:hover{background-color:color-mix(in oklab,var(--color-amber-500)20%,transparent)}}.hover\\:bg-amber-500\\/30:hover{background-color:#f99c004d}@supports (color:color-mix(in lab, red, red)){.hover\\:bg-amber-500\\/30:hover{background-color:color-mix(in oklab,var(--color-amber-500)30%,transparent)}}.hover\\:bg-blue-500\\/20:hover{background-color:#3080ff33}@supports (color:color-mix(in lab, red, red)){.hover\\:bg-blue-500\\/20:hover{background-color:color-mix(in oklab,var(--color-blue-500)20%,transparent)}}.hover\\:bg-destructive\\/15:hover{background-color:var(--char-color-destructive)}@supports (color:color-mix(in lab, red, red)){.hover\\:bg-destructive\\/15:hover{background-color:color-mix(in oklab,var(--char-color-destructive)15%,transparent)}}.hover\\:bg-destructive\\/20:hover{background-color:var(--char-color-destructive)}@supports (color:color-mix(in lab, red, red)){.hover\\:bg-destructive\\/20:hover{background-color:color-mix(in oklab,var(--char-color-destructive)20%,transparent)}}.hover\\:bg-destructive\\/90:hover{background-color:var(--char-color-destructive)}@supports (color:color-mix(in lab, red, red)){.hover\\:bg-destructive\\/90:hover{background-color:color-mix(in oklab,var(--char-color-destructive)90%,transparent)}}.hover\\:bg-emerald-500\\/5:hover{background-color:#00bb7f0d}@supports (color:color-mix(in lab, red, red)){.hover\\:bg-emerald-500\\/5:hover{background-color:color-mix(in oklab,var(--color-emerald-500)5%,transparent)}}.hover\\:bg-green-500\\/30:hover{background-color:#00c7584d}@supports (color:color-mix(in lab, red, red)){.hover\\:bg-green-500\\/30:hover{background-color:color-mix(in oklab,var(--color-green-500)30%,transparent)}}.hover\\:bg-muted:hover{background-color:var(--char-color-muted)}.hover\\:bg-muted-foreground\\/15:hover{background-color:var(--char-color-muted-foreground)}@supports (color:color-mix(in lab, red, red)){.hover\\:bg-muted-foreground\\/15:hover{background-color:color-mix(in oklab,var(--char-color-muted-foreground)15%,transparent)}}.hover\\:bg-muted\\/50:hover{background-color:var(--char-color-muted)}@supports (color:color-mix(in lab, red, red)){.hover\\:bg-muted\\/50:hover{background-color:color-mix(in oklab,var(--char-color-muted)50%,transparent)}}.hover\\:bg-muted\\/60:hover{background-color:var(--char-color-muted)}@supports (color:color-mix(in lab, red, red)){.hover\\:bg-muted\\/60:hover{background-color:color-mix(in oklab,var(--char-color-muted)60%,transparent)}}.hover\\:bg-muted\\/70:hover{background-color:var(--char-color-muted)}@supports (color:color-mix(in lab, red, red)){.hover\\:bg-muted\\/70:hover{background-color:color-mix(in oklab,var(--char-color-muted)70%,transparent)}}.hover\\:bg-orange-500\\/20:hover{background-color:#fe6e0033}@supports (color:color-mix(in lab, red, red)){.hover\\:bg-orange-500\\/20:hover{background-color:color-mix(in oklab,var(--color-orange-500)20%,transparent)}}.hover\\:bg-primary\\/90:hover{background-color:var(--char-color-primary)}@supports (color:color-mix(in lab, red, red)){.hover\\:bg-primary\\/90:hover{background-color:color-mix(in oklab,var(--char-color-primary)90%,transparent)}}.hover\\:bg-red-500\\/20:hover{background-color:#fb2c3633}@supports (color:color-mix(in lab, red, red)){.hover\\:bg-red-500\\/20:hover{background-color:color-mix(in oklab,var(--color-red-500)20%,transparent)}}.hover\\:bg-red-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-secondary\\/80:hover{background-color:var(--char-color-secondary)}@supports (color:color-mix(in lab, red, red)){.hover\\:bg-secondary\\/80:hover{background-color:color-mix(in oklab,var(--char-color-secondary)80%,transparent)}}.hover\\:bg-white:hover{background-color:var(--color-white)}.hover\\:bg-white\\!:hover{background-color:var(--color-white)!important}.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\\/15:hover{background-color:#ffffff26}@supports (color:color-mix(in lab, red, red)){.hover\\:bg-white\\/15:hover{background-color:color-mix(in oklab,var(--color-white)15%,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-white\\/30:hover{background-color:#ffffff4d}@supports (color:color-mix(in lab, red, red)){.hover\\:bg-white\\/30:hover{background-color:color-mix(in oklab,var(--color-white)30%,transparent)}}.hover\\:bg-zinc-50:hover{background-color:var(--color-zinc-50)}.hover\\:bg-zinc-200:hover{background-color:var(--color-zinc-200)}.hover\\:bg-zinc-700:hover{background-color:var(--color-zinc-700)}.hover\\:text-accent-foreground:hover{color:var(--char-color-accent-foreground)}.hover\\:text-amber-400:hover{color:var(--color-amber-400)}.hover\\:text-foreground:hover{color:var(--char-color-foreground)}.hover\\:text-primary\\/80:hover{color:var(--char-color-primary)}@supports (color:color-mix(in lab, red, red)){.hover\\:text-primary\\/80:hover{color:color-mix(in oklab,var(--char-color-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\\/50:hover{color:#ffffff80}@supports (color:color-mix(in lab, red, red)){.hover\\:text-white\\/50:hover{color:color-mix(in oklab,var(--color-white)50%,transparent)}}.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\\:text-white\\/80:hover{color:#fffc}@supports (color:color-mix(in lab, red, red)){.hover\\:text-white\\/80:hover{color:color-mix(in oklab,var(--color-white)80%,transparent)}}.hover\\:text-zinc-600:hover{color:var(--color-zinc-600)}.hover\\:underline:hover{text-decoration-line:underline}.hover\\:opacity-75:hover{opacity:.75}.hover\\:opacity-100:hover{opacity:1}}.focus\\:bg-accent:focus{background-color:var(--char-color-accent)}.focus\\:text-accent-foreground:focus{color:var(--char-color-accent-foreground)}.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(--char-color-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(--char-color-ring)}.focus-visible\\:bg-muted:focus-visible{background-color:var(--char-color-muted)}.focus-visible\\:opacity-100:focus-visible{opacity:1}.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-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-blue-500:focus-visible{--tw-ring-color:var(--color-blue-500)}.focus-visible\\:ring-destructive\\/20:focus-visible{--tw-ring-color:var(--char-color-destructive)}@supports (color:color-mix(in lab, red, red)){.focus-visible\\:ring-destructive\\/20:focus-visible{--tw-ring-color:color-mix(in oklab,var(--char-color-destructive)20%,transparent)}}.focus-visible\\:ring-ring\\/50:focus-visible{--tw-ring-color:var(--char-color-ring)}@supports (color:color-mix(in lab, red, red)){.focus-visible\\:ring-ring\\/50:focus-visible{--tw-ring-color:color-mix(in oklab,var(--char-color-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-1:focus-visible{--tw-ring-offset-width:1px;--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-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-none:focus-visible{--tw-outline-style:none;outline-style:none}.active\\:scale-\\[0\\.98\\]:active{scale:.98}.active\\:cursor-grabbing:active{cursor:grabbing}.active\\:bg-white\\/15:active{background-color:#ffffff26}@supports (color:color-mix(in lab, red, red)){.active\\:bg-white\\/15:active{background-color:color-mix(in oklab,var(--color-white)15%,transparent)}}.active\\:bg-white\\/20:active{background-color:#fff3}@supports (color:color-mix(in lab, red, red)){.active\\:bg-white\\/20:active{background-color:color-mix(in oklab,var(--color-white)20%,transparent)}}.disabled\\:pointer-events-none:disabled{pointer-events:none}.disabled\\:invisible:disabled{visibility:hidden}.disabled\\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\\:opacity-40:disabled{opacity:.4}.disabled\\:opacity-50:disabled{opacity:.5}.has-data-\\[slot\\=card-action\\]\\:grid-cols-\\[1fr_auto\\]:has([data-slot=card-action]){grid-template-columns:1fr auto}.has-\\[textarea\\:focus-visible\\]\\:border-ring:has(:is(textarea:focus-visible)){border-color:var(--char-color-ring)}.has-\\[textarea\\:focus-visible\\]\\:ring-2:has(:is(textarea: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)}.has-\\[textarea\\:focus-visible\\]\\:ring-ring\\/20:has(:is(textarea:focus-visible)){--tw-ring-color:var(--char-color-ring)}@supports (color:color-mix(in lab, red, red)){.has-\\[textarea\\:focus-visible\\]\\:ring-ring\\/20:has(:is(textarea:focus-visible)){--tw-ring-color:color-mix(in oklab,var(--char-color-ring)20%,transparent)}}.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(--char-color-destructive)}.aria-invalid\\:ring-destructive\\/20[aria-invalid=true]{--tw-ring-color:var(--char-color-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(--char-color-destructive)20%,transparent)}}.data-floating\\:absolute[data-floating]{position:absolute}.data-floating\\:rounded-md[data-floating]{border-radius:var(--char-radius-md)}.data-floating\\:border[data-floating]{border-style:var(--tw-border-style);border-width:1px}.data-floating\\:bg-background[data-floating]{background-color:var(--char-color-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-\\[active\\=true\\]\\:bg-muted[data-active=true]{background-color:var(--char-color-muted)}.data-\\[disabled\\]\\:pointer-events-none[data-disabled]{pointer-events:none}.data-\\[disabled\\]\\:opacity-50[data-disabled]{opacity:.5}.data-\\[dragging\\=true\\]\\:border-dashed[data-dragging=true]{--tw-border-style:dashed;border-style:dashed}.data-\\[dragging\\=true\\]\\:border-ring[data-dragging=true]{border-color:var(--char-color-ring)}.data-\\[dragging\\=true\\]\\:bg-accent\\/50[data-dragging=true]{background-color:var(--char-color-accent)}@supports (color:color-mix(in lab, red, red)){.data-\\[dragging\\=true\\]\\:bg-accent\\/50[data-dragging=true]{background-color:color-mix(in oklab,var(--char-color-accent)50%,transparent)}}.data-\\[inset\\]\\:pl-8[data-inset]{padding-left:calc(var(--spacing)*8)}.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-\\[placeholder\\]\\:text-muted-foreground[data-placeholder]{color:var(--char-color-muted-foreground)}.data-\\[side\\=bottom\\]\\:translate-y-1[data-side=bottom]{--tw-translate-y:calc(var(--spacing)*1);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\\[side\\=bottom\\]\\:slide-in-from-top-2[data-side=bottom]{--tw-enter-translate-y:calc(2*var(--spacing)*-1)}.data-\\[side\\=left\\]\\:-translate-x-1[data-side=left]{--tw-translate-x:calc(var(--spacing)*-1);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\\[side\\=left\\]\\:slide-in-from-right-2[data-side=left]{--tw-enter-translate-x:calc(2*var(--spacing))}.data-\\[side\\=right\\]\\:translate-x-1[data-side=right]{--tw-translate-x:calc(var(--spacing)*1);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\\[side\\=right\\]\\:slide-in-from-left-2[data-side=right]{--tw-enter-translate-x:calc(2*var(--spacing)*-1)}.data-\\[side\\=top\\]\\:-translate-y-1[data-side=top]{--tw-translate-y:calc(var(--spacing)*-1);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\\[side\\=top\\]\\:slide-in-from-bottom-2[data-side=top]{--tw-enter-translate-y:calc(2*var(--spacing))}.data-\\[size\\=default\\]\\:h-9[data-size=default]{height:calc(var(--spacing)*9)}.data-\\[size\\=sm\\]\\:h-8[data-size=sm]{height:calc(var(--spacing)*8)}:is(.\\*\\:data-\\[slot\\=select-value\\]\\:line-clamp-1>*)[data-slot=select-value]{-webkit-line-clamp:1;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}:is(.\\*\\:data-\\[slot\\=select-value\\]\\:flex>*)[data-slot=select-value]{display:flex}:is(.\\*\\:data-\\[slot\\=select-value\\]\\:items-center>*)[data-slot=select-value]{align-items:center}:is(.\\*\\:data-\\[slot\\=select-value\\]\\:gap-2>*)[data-slot=select-value]{gap:calc(var(--spacing)*2)}.data-\\[state\\=closed\\]\\:pointer-events-none[data-state=closed]{pointer-events:none}.data-\\[state\\=closed\\]\\:animate-collapsible-up[data-state=closed]{animation:collapsible-up var(--tw-animation-duration,var(--tw-duration,.2s))var(--tw-ease,ease-out)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none)}.data-\\[state\\=closed\\]\\:animate-out[data-state=closed]{animation:exit var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none)}.data-\\[state\\=closed\\]\\:duration-\\(--animation-duration\\)[data-state=closed]{--tw-duration:var(--animation-duration);transition-duration:var(--animation-duration)}.data-\\[state\\=closed\\]\\:duration-300[data-state=closed]{--tw-duration:.3s;transition-duration:.3s}.data-\\[state\\=closed\\]\\:fade-out-0[data-state=closed]{--tw-exit-opacity:0}.data-\\[state\\=closed\\]\\:fill-mode-forwards[data-state=closed]{--tw-animation-fill-mode:forwards;animation-fill-mode:forwards}.data-\\[state\\=closed\\]\\:zoom-out-95[data-state=closed]{--tw-exit-scale:.95}.data-\\[state\\=closed\\]\\:slide-out-to-bottom[data-state=closed]{--tw-exit-translate-y:100%}.data-\\[state\\=closed\\]\\:slide-out-to-left[data-state=closed]{--tw-exit-translate-x:-100%}.data-\\[state\\=closed\\]\\:slide-out-to-right[data-state=closed]{--tw-exit-translate-x:100%}.data-\\[state\\=closed\\]\\:slide-out-to-top[data-state=closed]{--tw-exit-translate-y:-100%}.data-\\[state\\=open\\]\\:animate-collapsible-down[data-state=open]{animation:collapsible-down var(--tw-animation-duration,var(--tw-duration,.2s))var(--tw-ease,ease-out)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none)}.data-\\[state\\=open\\]\\:animate-in[data-state=open]{animation:enter var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none)}.data-\\[state\\=open\\]\\:bg-accent[data-state=open]{background-color:var(--char-color-accent)}.data-\\[state\\=open\\]\\:bg-secondary[data-state=open]{background-color:var(--char-color-secondary)}.data-\\[state\\=open\\]\\:text-accent-foreground[data-state=open]{color:var(--char-color-accent-foreground)}.data-\\[state\\=open\\]\\:text-muted-foreground[data-state=open]{color:var(--char-color-muted-foreground)}.data-\\[state\\=open\\]\\:duration-\\(--animation-duration\\)[data-state=open]{--tw-duration:var(--animation-duration);transition-duration:var(--animation-duration)}.data-\\[state\\=open\\]\\:duration-500[data-state=open]{--tw-duration:.5s;transition-duration:.5s}.data-\\[state\\=open\\]\\:fade-in-0[data-state=open]{--tw-enter-opacity:0}.data-\\[state\\=open\\]\\:zoom-in-95[data-state=open]{--tw-enter-scale:.95}.data-\\[state\\=open\\]\\:slide-in-from-bottom[data-state=open]{--tw-enter-translate-y:100%}.data-\\[state\\=open\\]\\:slide-in-from-left[data-state=open]{--tw-enter-translate-x:-100%}.data-\\[state\\=open\\]\\:slide-in-from-right[data-state=open]{--tw-enter-translate-x:100%}.data-\\[state\\=open\\]\\:slide-in-from-top[data-state=open]{--tw-enter-translate-y:-100%}.data-\\[variant\\=destructive\\]\\:text-destructive[data-variant=destructive]{color:var(--char-color-destructive)}.data-\\[variant\\=destructive\\]\\:focus\\:bg-destructive\\/10[data-variant=destructive]:focus{background-color:var(--char-color-destructive)}@supports (color:color-mix(in lab, red, red)){.data-\\[variant\\=destructive\\]\\:focus\\:bg-destructive\\/10[data-variant=destructive]:focus{background-color:color-mix(in oklab,var(--char-color-destructive)10%,transparent)}}.data-\\[variant\\=destructive\\]\\:focus\\:text-destructive[data-variant=destructive]:focus{color:var(--char-color-destructive)}.nth-\\[n\\+3\\]\\:hidden:nth-child(n+3){display:none}@media (prefers-reduced-motion:reduce){.motion-reduce\\:animate-none{animation:none}}@media (min-width:40rem){.sm\\:flex{display:flex}.sm\\:h-3{height:calc(var(--spacing)*3)}.sm\\:h-3\\.5{height:calc(var(--spacing)*3.5)}.sm\\:h-4{height:calc(var(--spacing)*4)}.sm\\:h-7{height:calc(var(--spacing)*7)}.sm\\:max-h-24{max-height:calc(var(--spacing)*24)}.sm\\:max-h-32{max-height:calc(var(--spacing)*32)}.sm\\:max-h-48{max-height:calc(var(--spacing)*48)}.sm\\:min-h-7{min-height:calc(var(--spacing)*7)}.sm\\:w-3{width:calc(var(--spacing)*3)}.sm\\:w-3\\.5{width:calc(var(--spacing)*3.5)}.sm\\:w-4{width:calc(var(--spacing)*4)}.sm\\:w-7{width:calc(var(--spacing)*7)}.sm\\:max-w-3xl{max-width:var(--container-3xl)}.sm\\:max-w-16{max-width:calc(var(--spacing)*16)}.sm\\:max-w-24{max-width:calc(var(--spacing)*24)}.sm\\:max-w-lg{max-width:var(--container-lg)}.sm\\:max-w-sm{max-width:var(--container-sm)}.sm\\:min-w-7{min-width:calc(var(--spacing)*7)}.sm\\:flex-row{flex-direction:row}.sm\\:justify-end{justify-content:flex-end}.sm\\:gap-1{gap:calc(var(--spacing)*1)}.sm\\:gap-1\\.5{gap:calc(var(--spacing)*1.5)}.sm\\:p-1{padding:calc(var(--spacing)*1)}.sm\\:p-1\\.5{padding:calc(var(--spacing)*1.5)}.sm\\:px-2{padding-inline:calc(var(--spacing)*2)}.sm\\:py-1{padding-block:calc(var(--spacing)*1)}.sm\\:text-left{text-align:left}.sm\\:opacity-0{opacity:0}@media (hover:hover){.sm\\:group-hover\\:opacity-100:is(:where(.group):hover *){opacity:1}}}@media (min-width:48rem){.md\\:pb-6{padding-bottom:calc(var(--spacing)*6)}.md\\:text-sm{font-size:var(--char-font-size-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}}@container (min-width:28rem){.\\@md\\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.\\@md\\:flex-col{flex-direction:column}.\\@md\\:nth-\\[n\\+3\\]\\:block:nth-child(n+3){display:block}}.dark\\:border-input:is(.dark *){border-color:var(--char-color-input)}.dark\\:border-muted-foreground\\/15:is(.dark *){border-color:var(--char-color-muted-foreground)}@supports (color:color-mix(in lab, red, red)){.dark\\:border-muted-foreground\\/15:is(.dark *){border-color:color-mix(in oklab,var(--char-color-muted-foreground)15%,transparent)}}.dark\\:border-zinc-600:is(.dark *){border-color:var(--color-zinc-600)}.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-amber-500\\/10:is(.dark *){background-color:#f99c001a}@supports (color:color-mix(in lab, red, red)){.dark\\:bg-amber-500\\/10:is(.dark *){background-color:color-mix(in oklab,var(--color-amber-500)10%,transparent)}}.dark\\:bg-blue-500\\/10:is(.dark *){background-color:#3080ff1a}@supports (color:color-mix(in lab, red, red)){.dark\\:bg-blue-500\\/10:is(.dark *){background-color:color-mix(in oklab,var(--color-blue-500)10%,transparent)}}.dark\\:bg-destructive\\/5:is(.dark *){background-color:var(--char-color-destructive)}@supports (color:color-mix(in lab, red, red)){.dark\\:bg-destructive\\/5:is(.dark *){background-color:color-mix(in oklab,var(--char-color-destructive)5%,transparent)}}.dark\\:bg-destructive\\/60:is(.dark *){background-color:var(--char-color-destructive)}@supports (color:color-mix(in lab, red, red)){.dark\\:bg-destructive\\/60:is(.dark *){background-color:color-mix(in oklab,var(--char-color-destructive)60%,transparent)}}.dark\\:bg-emerald-500\\/12:is(.dark *){background-color:#00bb7f1f}@supports (color:color-mix(in lab, red, red)){.dark\\:bg-emerald-500\\/12:is(.dark *){background-color:color-mix(in oklab,var(--color-emerald-500)12%,transparent)}}.dark\\:bg-input\\/30:is(.dark *){background-color:var(--char-color-input)}@supports (color:color-mix(in lab, red, red)){.dark\\:bg-input\\/30:is(.dark *){background-color:color-mix(in oklab,var(--char-color-input)30%,transparent)}}.dark\\:bg-muted:is(.dark *){background-color:var(--char-color-muted)}.dark\\:bg-red-500\\/10:is(.dark *){background-color:#fb2c361a}@supports (color:color-mix(in lab, red, red)){.dark\\:bg-red-500\\/10:is(.dark *){background-color:color-mix(in oklab,var(--color-red-500)10%,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\\:stroke-\\[2\\.5px\\]:is(.dark *){stroke-width:2.5px}.dark\\:text-amber-300:is(.dark *){color:var(--color-amber-300)}.dark\\:text-blue-300:is(.dark *){color:var(--color-blue-300)}.dark\\:text-blue-400:is(.dark *){color:var(--color-blue-400)}.dark\\:text-emerald-300:is(.dark *){color:var(--color-emerald-300)}.dark\\:text-foreground:is(.dark *){color:var(--char-color-foreground)}.dark\\:text-orange-400:is(.dark *){color:var(--color-orange-400)}.dark\\:text-red-200:is(.dark *){color:var(--color-red-200)}.dark\\:text-red-300:is(.dark *){color:var(--color-red-300)}.dark\\:text-red-400:is(.dark *){color:var(--color-red-400)}.dark\\:text-slate-300:is(.dark *){color:var(--color-slate-300)}.dark\\:text-zinc-200:is(.dark *){color:var(--color-zinc-200)}.dark\\:text-zinc-400:is(.dark *){color:var(--color-zinc-400)}.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\\:ring-amber-400\\/30:is(.dark *){--tw-ring-color:#fcbb004d}@supports (color:color-mix(in lab, red, red)){.dark\\:ring-amber-400\\/30:is(.dark *){--tw-ring-color:color-mix(in oklab,var(--color-amber-400)30%,transparent)}}.dark\\:ring-blue-400\\/25:is(.dark *){--tw-ring-color:#54a2ff40}@supports (color:color-mix(in lab, red, red)){.dark\\:ring-blue-400\\/25:is(.dark *){--tw-ring-color:color-mix(in oklab,var(--color-blue-400)25%,transparent)}}.dark\\:ring-border\\/30:is(.dark *){--tw-ring-color:var(--char-color-border)}@supports (color:color-mix(in lab, red, red)){.dark\\:ring-border\\/30:is(.dark *){--tw-ring-color:color-mix(in oklab,var(--char-color-border)30%,transparent)}}.dark\\:ring-emerald-500\\/25:is(.dark *){--tw-ring-color:#00bb7f40}@supports (color:color-mix(in lab, red, red)){.dark\\:ring-emerald-500\\/25:is(.dark *){--tw-ring-color:color-mix(in oklab,var(--color-emerald-500)25%,transparent)}}.dark\\:ring-red-400\\/30:is(.dark *){--tw-ring-color:#ff65684d}@supports (color:color-mix(in lab, red, red)){.dark\\:ring-red-400\\/30:is(.dark *){--tw-ring-color:color-mix(in oklab,var(--color-red-400)30%,transparent)}}@media (hover:hover){.dark\\:hover\\:bg-accent\\/50:is(.dark *):hover{background-color:var(--char-color-accent)}@supports (color:color-mix(in lab, red, red)){.dark\\:hover\\:bg-accent\\/50:is(.dark *):hover{background-color:color-mix(in oklab,var(--char-color-accent)50%,transparent)}}.dark\\:hover\\:bg-input\\/50:is(.dark *):hover{background-color:var(--char-color-input)}@supports (color:color-mix(in lab, red, red)){.dark\\:hover\\:bg-input\\/50:is(.dark *):hover{background-color:color-mix(in oklab,var(--char-color-input)50%,transparent)}}.dark\\:hover\\:bg-muted-foreground\\/30:is(.dark *):hover{background-color:var(--char-color-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(--char-color-muted-foreground)30%,transparent)}}.dark\\:hover\\:bg-zinc-600:is(.dark *):hover{background-color:var(--color-zinc-600)}.dark\\:hover\\:bg-zinc-700:is(.dark *):hover{background-color:var(--color-zinc-700)}.dark\\:hover\\:text-zinc-200:is(.dark *):hover{color:var(--color-zinc-200)}}.dark\\:focus-visible\\:ring-destructive\\/40:is(.dark *):focus-visible{--tw-ring-color:var(--char-color-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(--char-color-destructive)40%,transparent)}}.dark\\:aria-invalid\\:ring-destructive\\/40:is(.dark *)[aria-invalid=true]{--tw-ring-color:var(--char-color-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(--char-color-destructive)40%,transparent)}}.dark\\:data-\\[variant\\=destructive\\]\\:focus\\:bg-destructive\\/20:is(.dark *)[data-variant=destructive]:focus{background-color:var(--char-color-destructive)}@supports (color:color-mix(in lab, red, red)){.dark\\:data-\\[variant\\=destructive\\]\\:focus\\:bg-destructive\\/20:is(.dark *)[data-variant=destructive]:focus{background-color:color-mix(in oklab,var(--char-color-destructive)20%,transparent)}}.\\[\\&_p\\]\\:-mb-2 p{margin-bottom:calc(var(--spacing)*-2)}.\\[\\&_svg\\]\\:pointer-events-none svg{pointer-events:none}.\\[\\&_svg\\]\\:shrink-0 svg{flex-shrink:0}.\\[\\&_svg\\]\\:text-background svg{color:var(--char-color-background)}.\\[\\&_svg\\]\\:text-black svg{color:var(--color-black)}@media (hover:hover){.hover\\:\\[\\&_svg\\]\\:text-destructive:hover svg{color:var(--char-color-destructive)}}.\\[\\&_svg\\:not\\(\\[class\\*\\=\\'size-\\'\\]\\)\\]\\:size-4 svg:not([class*=size-]){width:calc(var(--spacing)*4);height:calc(var(--spacing)*4)}.\\[\\&_svg\\:not\\(\\[class\\*\\=\\'text-\\'\\]\\)\\]\\:text-muted-foreground svg:not([class*=text-]){color:var(--char-color-muted-foreground)}.\\[\\.border-b\\]\\:pb-6.border-b{padding-bottom:calc(var(--spacing)*6)}.\\[\\.border-t\\]\\:pt-6.border-t{padding-top:calc(var(--spacing)*6)}.\\[\\[align\\=center\\]\\]\\:text-center[align=center]{text-align:center}.\\[\\[align\\=right\\]\\]\\:text-right[align=right]{text-align:right}:is(.\\*\\:\\[span\\]\\:last\\:flex>*):is(span):last-child{display:flex}:is(.\\*\\:\\[span\\]\\:last\\:items-center>*):is(span):last-child{align-items:center}:is(.\\*\\:\\[span\\]\\:last\\:gap-2>*):is(span):last-child{gap:calc(var(--spacing)*2)}:is(.data-\\[variant\\=destructive\\]\\:\\*\\:\\[svg\\]\\:\\!text-destructive[data-variant=destructive]>*):is(svg){color:var(--char-color-destructive)!important}.\\[\\&\\:last-child\\>td\\:first-child\\]\\:rounded-bl-lg:last-child>td:first-child{border-bottom-left-radius:var(--char-radius-lg)}.\\[\\&\\:last-child\\>td\\:last-child\\]\\:rounded-br-lg:last-child>td:last-child{border-bottom-right-radius:var(--char-radius-lg)}.\\[\\&\\: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)}.\\[\\&\\>a\\]\\:text-xs>a{font-size:var(--char-font-size-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(--char-color-foreground)}@supports (color:color-mix(in lab, red, red)){.\\[\\&\\>button\\]\\:bg-foreground\\/60>button{background-color:color-mix(in oklab,var(--char-color-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(--char-color-destructive)}}.\\[\\&\\>li\\]\\:mt-0\\.5>li{margin-top:calc(var(--spacing)*.5)}.\\[\\&\\>li\\]\\:mt-2>li{margin-top:calc(var(--spacing)*2)}.\\[\\&\\>span\\]\\:text-xs>span{font-size:var(--char-font-size-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.\\[\\&\\>svg\\]\\:pointer-events-none>svg{pointer-events:none}.\\[\\&\\>svg\\]\\:size-3>svg{width:calc(var(--spacing)*3);height:calc(var(--spacing)*3)}@media (hover:hover){a.\\[a\\&\\]\\:hover\\:bg-accent:hover{background-color:var(--char-color-accent)}a.\\[a\\&\\]\\:hover\\:bg-destructive\\/90:hover{background-color:var(--char-color-destructive)}@supports (color:color-mix(in lab, red, red)){a.\\[a\\&\\]\\:hover\\:bg-destructive\\/90:hover{background-color:color-mix(in oklab,var(--char-color-destructive)90%,transparent)}}a.\\[a\\&\\]\\:hover\\:bg-primary\\/90:hover{background-color:var(--char-color-primary)}@supports (color:color-mix(in lab, red, red)){a.\\[a\\&\\]\\:hover\\:bg-primary\\/90:hover{background-color:color-mix(in oklab,var(--char-color-primary)90%,transparent)}}a.\\[a\\&\\]\\:hover\\:bg-secondary\\/90:hover{background-color:var(--char-color-secondary)}@supports (color:color-mix(in lab, red, red)){a.\\[a\\&\\]\\:hover\\:bg-secondary\\/90:hover{background-color:color-mix(in oklab,var(--char-color-secondary)90%,transparent)}}a.\\[a\\&\\]\\:hover\\:text-accent-foreground:hover{color:var(--char-color-accent-foreground)}}}@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}@keyframes char-shimmer{0%{transform:translate(-100%)}to{transform:translate(200%)}}@keyframes char-subtle-pulse{0%,to{opacity:1}50%{opacity:.85}}@keyframes char-slide-down{0%{opacity:0;transform:translateY(-8px)}to{opacity:1;transform:translateY(0)}}@keyframes char-fade-in-up{0%{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}@keyframes char-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 char-float{0%,to{transform:translateY(0)translate(0)}33%{transform:translateY(-30px)translate(20px)}66%{transform:translateY(20px)translate(-20px)}}@keyframes char-float-delayed{0%,to{transform:translateY(0)translate(0)}33%{transform:translateY(30px)translate(-30px)}66%{transform:translateY(-20px)translate(20px)}}@keyframes char-border-rotate{0%{transform:rotate(0)}to{transform:rotate(360deg)}}@keyframes char-pulse-success{0%,to{box-shadow:0 0 0 0 color-mix(in oklch,var(--char-color-success),transparent 60%)}50%{box-shadow:0 0 0 8px #0000}}@keyframes char-shake{0%,to{transform:translate(0)}10%,30%,50%,70%,90%{transform:translate(-2px)}20%,40%,60%,80%{transform:translate(2px)}}@keyframes char-pulse-glow{0%,to{box-shadow:0 0 20px color-mix(in oklch,var(--char-color-primary),transparent 90%)}50%{box-shadow:0 0 30px color-mix(in oklch,var(--char-color-primary),transparent 80%)}}@keyframes char-gradient-x{0%,to{background-position:0%}50%{background-position:100%}}@keyframes char-glass-shimmer{0%{background-position:-200% 0}to{background-position:200% 0}}@keyframes char-aui-pulse{50%{opacity:.5}}.char-no-scrollbar::-webkit-scrollbar{display:none}.char-no-scrollbar{-ms-overflow-style:none;scrollbar-width:none}@media (hover:none){.char-scrollbar-thin{scrollbar-width:none}.char-scrollbar-thin::-webkit-scrollbar{display:none}}.aui-md,.aui-user-message-content{font-size:var(--text-base)}.aui-md{line-height:1.5}.aui-md p{margin-bottom:.75rem;line-height:1.5}.aui-md ul,.aui-md ol{margin-top:.5rem;margin-bottom:.75rem;padding-left:1.25rem}.aui-md li{margin-top:.25rem;margin-bottom:.25rem}.aui-md li p{margin-bottom:.25rem}.aui-md h1,.aui-md h2,.aui-md h3,.aui-md h4{margin-top:1rem;margin-bottom:.5rem}.aui-md pre{margin-top:.5rem;margin-bottom:.75rem}: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{font-family:var(--char-font-sans);--aui-content:\"●\";content:var(--aui-content);margin-left:.25rem;margin-right:.25rem;animation:2s cubic-bezier(.4,0,.6,1) infinite char-aui-pulse}@keyframes spin{to{transform:rotate(360deg)}}@keyframes pulse{50%{opacity:.5}}@keyframes enter{0%{opacity:var(--tw-enter-opacity,1);transform:translate3d(var(--tw-enter-translate-x,0),var(--tw-enter-translate-y,0),0)scale3d(var(--tw-enter-scale,1),var(--tw-enter-scale,1),var(--tw-enter-scale,1))rotate(var(--tw-enter-rotate,0));filter:blur(var(--tw-enter-blur,0))}}@keyframes exit{to{opacity:var(--tw-exit-opacity,1);transform:translate3d(var(--tw-exit-translate-x,0),var(--tw-exit-translate-y,0),0)scale3d(var(--tw-exit-scale,1),var(--tw-exit-scale,1),var(--tw-exit-scale,1))rotate(var(--tw-exit-rotate,0));filter:blur(var(--tw-exit-blur,0))}}@keyframes collapsible-down{0%{height:0}to{height:var(--radix-collapsible-content-height,var(--bits-collapsible-content-height,var(--reka-collapsible-content-height,var(--kb-collapsible-content-height,auto))))}}@keyframes collapsible-up{0%{height:var(--radix-collapsible-content-height,var(--bits-collapsible-content-height,var(--reka-collapsible-content-height,var(--kb-collapsible-content-height,auto))))}to{height:0}}";
10231
11074
 
10232
11075
  //#endregion
10233
11076
  //#region src/web-component.tsx
@@ -10240,24 +11083,36 @@ const WEBMCP_SHADOW_STYLES = "/*! tailwindcss v4.1.18 | MIT License | https://ta
10240
11083
  * Styles are isolated by default using Shadow DOM. Customize appearance
10241
11084
  * via CSS variables on the host element.
10242
11085
  *
10243
- * @example SSO-First (production usage)
10244
- * ```tsx
10245
- * // Use your existing IDP token - no additional login needed
10246
- * const { session } = useOktaAuth() // or Azure, Auth0, Google, etc.
11086
+ * ## Authentication (Imperative API)
10247
11087
  *
10248
- * <webmcp-agent auth-token={session.idToken} />
10249
- * ```
11088
+ * Use the `connect()` method for secure authentication. Tokens are stored
11089
+ * as JavaScript properties (never exposed as DOM attributes).
10250
11090
  *
10251
- * @example React
11091
+ * @example Imperative authentication (React)
10252
11092
  * ```tsx
10253
- * import '@anthropic/char-embedded-agent/web-component'
11093
+ * import { useEffect, useRef } from 'react'
11094
+ * import '@mcp-b/embedded-agent/web-component'
10254
11095
  *
10255
11096
  * function App() {
10256
11097
  * const { session } = useOktaAuth()
10257
- * return <webmcp-agent auth-token={session.idToken} />
11098
+ * const agentRef = useRef<WebMCPAgentElement>(null)
11099
+ *
11100
+ * useEffect(() => {
11101
+ * if (agentRef.current && session?.idToken) {
11102
+ * agentRef.current.connect({ idToken: session.idToken })
11103
+ * }
11104
+ * }, [session?.idToken])
11105
+ *
11106
+ * return <webmcp-agent ref={agentRef} />
10258
11107
  * }
10259
11108
  * ```
10260
11109
  *
11110
+ * @example Vanilla JS
11111
+ * ```js
11112
+ * const agent = document.querySelector('webmcp-agent')
11113
+ * agent.connect({ idToken: 'eyJhbGciOi...' })
11114
+ * ```
11115
+ *
10261
11116
  * @example Anonymous (dev mode - localhost only)
10262
11117
  * ```tsx
10263
11118
  * // No auth token = anonymous mode (requires API key, localhost only)
@@ -10293,34 +11148,37 @@ const getDefaultApiBase = (useLocalApi) => {
10293
11148
  * Just pass your IDP token and you're done. Everything else is handled.
10294
11149
  */
10295
11150
  const EmbeddedAgent = (t0) => {
10296
- const $ = c(12);
10297
- const { authToken, open, devMode, enableDebugTools: t1, className, onClose } = t0;
11151
+ const $ = c(14);
11152
+ const { authToken, ticketAuth, open, devMode, enableDebugTools: t1, className, onClose } = t0;
10298
11153
  const enableDebugTools = t1 === void 0 ? false : t1;
10299
11154
  let apiBase;
10300
- if ($[0] !== authToken || $[1] !== devMode) {
11155
+ if ($[0] !== authToken || $[1] !== devMode || $[2] !== ticketAuth) {
10301
11156
  apiBase = getDefaultApiBase(devMode?.useLocalApi);
10302
- const authMode = authToken ? "sso-first" : "anonymous";
11157
+ const authMode = ticketAuth ? "ticket" : authToken ? "sso-first" : "anonymous";
10303
11158
  if (typeof window !== "undefined") console.debug("[WebMCP] Initialized", {
10304
11159
  hasAuthToken: !!authToken,
11160
+ hasTicketAuth: !!ticketAuth,
10305
11161
  authMode,
10306
11162
  mode: devMode ? "development" : "production",
10307
11163
  apiBase
10308
11164
  });
10309
11165
  $[0] = authToken;
10310
11166
  $[1] = devMode;
10311
- $[2] = apiBase;
10312
- } else apiBase = $[2];
11167
+ $[2] = ticketAuth;
11168
+ $[3] = apiBase;
11169
+ } else apiBase = $[3];
10313
11170
  const voiceEnabled = !devMode || !!devMode.openaiApiKey;
10314
11171
  const anthropicApiKey = devMode?.anthropicApiKey;
10315
11172
  const t2 = voiceEnabled ? `${apiBase}/api/realtime/session` : void 0;
10316
11173
  const t3 = className ?? "h-full w-full";
10317
11174
  let t4;
10318
- if ($[3] !== anthropicApiKey || $[4] !== apiBase || $[5] !== authToken || $[6] !== enableDebugTools || $[7] !== onClose || $[8] !== open || $[9] !== t2 || $[10] !== t3) {
11175
+ if ($[4] !== anthropicApiKey || $[5] !== apiBase || $[6] !== authToken || $[7] !== enableDebugTools || $[8] !== onClose || $[9] !== open || $[10] !== t2 || $[11] !== t3 || $[12] !== ticketAuth) {
10319
11176
  t4 = /* @__PURE__ */ jsx(ShadowRoot, {
10320
11177
  styles: WEBMCP_SHADOW_STYLES,
10321
11178
  children: /* @__PURE__ */ jsx(AgentThread, {
10322
11179
  apiBase,
10323
11180
  authToken,
11181
+ ticketAuth,
10324
11182
  anthropicApiKey,
10325
11183
  tokenEndpoint: t2,
10326
11184
  autoConnectLocal: true,
@@ -10330,31 +11188,116 @@ const EmbeddedAgent = (t0) => {
10330
11188
  onClose
10331
11189
  })
10332
11190
  });
10333
- $[3] = anthropicApiKey;
10334
- $[4] = apiBase;
10335
- $[5] = authToken;
10336
- $[6] = enableDebugTools;
10337
- $[7] = onClose;
10338
- $[8] = open;
10339
- $[9] = t2;
10340
- $[10] = t3;
10341
- $[11] = t4;
10342
- } else t4 = $[11];
11191
+ $[4] = anthropicApiKey;
11192
+ $[5] = apiBase;
11193
+ $[6] = authToken;
11194
+ $[7] = enableDebugTools;
11195
+ $[8] = onClose;
11196
+ $[9] = open;
11197
+ $[10] = t2;
11198
+ $[11] = t3;
11199
+ $[12] = ticketAuth;
11200
+ $[13] = t4;
11201
+ } else t4 = $[13];
10343
11202
  return t4;
10344
11203
  };
10345
11204
  /**
10346
- * Web Component wrapper
11205
+ * Base Web Component from r2wc
10347
11206
  *
10348
11207
  * Converts EmbeddedAgent to a <webmcp-agent> custom element.
10349
- * Attributes map to props in kebab-case (auth-token -> authToken).
11208
+ * Attributes map to props in kebab-case (e.g., dev-mode -> devMode).
11209
+ * Note: Auth props (authToken, ticketAuth) are internal only - use connect() method.
10350
11210
  */
10351
- const WebMCPAgentElement = r2wc(EmbeddedAgent, { props: {
11211
+ const BaseWebMCPAgentElement = r2wc(EmbeddedAgent, { props: {
10352
11212
  authToken: "string",
11213
+ ticketAuth: "json",
10353
11214
  open: "boolean",
10354
11215
  devMode: "json",
10355
11216
  enableDebugTools: "boolean"
10356
11217
  } });
10357
11218
  /**
11219
+ * Extended Web Component with secure connect() method
11220
+ *
11221
+ * The connect() method allows passing the auth token imperatively without
11222
+ * exposing it as a DOM attribute. This prevents token leakage via:
11223
+ * - Session replay tools (e.g., FullStory, LogRocket)
11224
+ * - Error monitoring (e.g., Sentry, DataDog)
11225
+ * - DOM snapshots and inspection
11226
+ * - Browser extensions
11227
+ *
11228
+ * @example
11229
+ * ```ts
11230
+ * const agent = document.querySelector('webmcp-agent')
11231
+ * agent.connect({ idToken: 'eyJhbGciOi...' })
11232
+ * ```
11233
+ */
11234
+ var WebMCPAgentElement = class extends BaseWebMCPAgentElement {
11235
+ /**
11236
+ * Connect to the Char agent with authentication.
11237
+ *
11238
+ * The token is stored as a JavaScript property (not as a DOM attribute),
11239
+ * preventing exposure to DOM inspection and session replay tools.
11240
+ * This is the recommended way to authenticate.
11241
+ *
11242
+ * @param options.idToken - IDP token (ID token) for authentication
11243
+ * @returns true if connection was initiated, false if idToken was missing
11244
+ *
11245
+ * @example
11246
+ * ```ts
11247
+ * // Vanilla JS
11248
+ * const agent = document.querySelector('webmcp-agent')
11249
+ * const success = agent.connect({ idToken: session.idToken })
11250
+ * if (!success) {
11251
+ * console.error('Failed to connect - missing token')
11252
+ * }
11253
+ *
11254
+ * // React with ref
11255
+ * const agentRef = useRef(null)
11256
+ * useEffect(() => {
11257
+ * agentRef.current?.connect({ idToken: session.idToken })
11258
+ * }, [session.idToken])
11259
+ * ```
11260
+ */
11261
+ connect(options) {
11262
+ if (!options?.idToken && !options?.ticketAuth) {
11263
+ console.error("[WebMCP] connect() called without idToken or ticketAuth - authentication cannot proceed");
11264
+ this.dispatchEvent(new CustomEvent("char-error", {
11265
+ detail: {
11266
+ code: "MISSING_TOKEN",
11267
+ message: "connect() requires either idToken or ticketAuth parameter"
11268
+ },
11269
+ bubbles: true,
11270
+ composed: true
11271
+ }));
11272
+ return false;
11273
+ }
11274
+ if (options?.idToken && options?.ticketAuth) console.warn("[WebMCP] connect() called with both idToken and ticketAuth - using ticketAuth");
11275
+ const self = this;
11276
+ if (options.ticketAuth) {
11277
+ self.ticketAuth = options.ticketAuth;
11278
+ self.authToken = void 0;
11279
+ } else if (options.idToken) {
11280
+ self.authToken = options.idToken;
11281
+ self.ticketAuth = void 0;
11282
+ }
11283
+ return true;
11284
+ }
11285
+ /**
11286
+ * Disconnect from the Char agent.
11287
+ * Clears the authentication token.
11288
+ * @returns true if disconnection succeeded, false if an error occurred
11289
+ */
11290
+ disconnect() {
11291
+ try {
11292
+ this.authToken = void 0;
11293
+ return true;
11294
+ } catch (error) {
11295
+ console.error("[WebMCP] Failed to disconnect:", error);
11296
+ return false;
11297
+ }
11298
+ }
11299
+ };
11300
+ /**
10358
11301
  * Register the <webmcp-agent> custom element
10359
11302
  *
10360
11303
  * Called automatically when importing this module.