linkshell-cli 0.5.19 → 0.5.21

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -945,6 +945,8 @@ const CLAUDE_REMOTE_HIDDEN_COMMANDS = new Set([
945
945
  "resume",
946
946
  "rewind",
947
947
  "settings",
948
+ "setup-bedrock",
949
+ "setup-vertex",
948
950
  "statusline",
949
951
  "stickers",
950
952
  "tasks",
@@ -994,6 +996,7 @@ const CLAUDE_BUILT_IN_COMMANDS: Array<{ name: string; description: string; argsM
994
996
  { name: "bug", description: "Alias for /feedback" },
995
997
  { name: "fewer-permission-prompts", description: "Reduce common permission prompts", argsMode: "none" },
996
998
  { name: "focus", description: "Toggle the focus view", argsMode: "none" },
999
+ { name: "goal", description: "Set or clear a session goal the agent works toward", argsMode: "raw" },
997
1000
  { name: "heapdump", description: "Write a JavaScript heap snapshot for diagnostics", argsMode: "none" },
998
1001
  { name: "help", description: "Show help and available commands", argsMode: "none" },
999
1002
  { name: "hooks", description: "View hook configurations", argsMode: "none" },
@@ -1226,7 +1229,20 @@ function mergeCommands(...groups: Array<AgentCommandDescriptor[] | undefined>):
1226
1229
  map.set(key, {
1227
1230
  ...existing,
1228
1231
  ...command,
1232
+ // Preserve curated metadata the discovered set doesn't carry: the SDK's
1233
+ // SlashCommand has no destructive/category/argsMode/executionKind
1234
+ // fields, and runtimeCommands hardcodes argsMode:"raw" + executionKind:
1235
+ // "prompt". The merge order is (curated, discovered), so without these
1236
+ // a discovered /clear would clobber the curated destructive flag
1237
+ // (red-dot warning), the grouping, AND the curated argsMode:"none" that
1238
+ // makes the web palette execute it on pick (vs insert-and-wait). For
1239
+ // Codex it would also flip native commands to "prompt". Curated wins on
1240
+ // collision; genuinely new discovered commands fall through to "raw".
1241
+ destructive: command.destructive ?? existing?.destructive,
1242
+ category: command.category ?? existing?.category,
1229
1243
  disabledReason: command.disabledReason ?? existing?.disabledReason,
1244
+ argsMode: existing?.argsMode ?? command.argsMode,
1245
+ executionKind: existing?.executionKind ?? command.executionKind,
1230
1246
  });
1231
1247
  }
1232
1248
  }
@@ -1272,7 +1288,7 @@ function runtimeCommands(provider: AgentProvider, value: unknown): AgentCommandD
1272
1288
  .filter((entry): entry is AgentCommandDescriptor => Boolean(entry));
1273
1289
  }
1274
1290
 
1275
- function parseModelListCapabilities(value: unknown): ProviderRuntimeCapabilities | undefined {
1291
+ function parseModelListCapabilities(provider: AgentProvider, value: unknown): ProviderRuntimeCapabilities | undefined {
1276
1292
  const raw = asRecord(value);
1277
1293
  const modelsValue =
1278
1294
  Array.isArray(value) ? value :
@@ -1326,11 +1342,13 @@ function parseModelListCapabilities(value: unknown): ProviderRuntimeCapabilities
1326
1342
  const reasoningEfforts = efforts.size
1327
1343
  ? ALL_REASONING_EFFORTS.filter((effort) => efforts.has(effort))
1328
1344
  : undefined;
1329
- if (models.length === 0 && !defaultModel && !reasoningEfforts?.length) return undefined;
1345
+ const commands = raw && Array.isArray(raw.commands) ? runtimeCommands(provider, raw.commands) : undefined;
1346
+ if (models.length === 0 && !defaultModel && !reasoningEfforts?.length && !commands?.length) return undefined;
1330
1347
  return {
1331
1348
  ...(models.length > 0 ? { models } : {}),
1332
1349
  ...(defaultModel ? { defaultModel } : {}),
1333
1350
  ...(reasoningEfforts?.length ? { reasoningEfforts } : {}),
1351
+ ...(commands?.length ? { commands } : {}),
1334
1352
  };
1335
1353
  }
1336
1354
 
@@ -1353,6 +1371,7 @@ function parseRemoteSessions(value: unknown): Array<{
1353
1371
  createdAt?: number;
1354
1372
  lastActivityAt?: number;
1355
1373
  usage?: unknown;
1374
+ status?: AgentStatus;
1356
1375
  }> {
1357
1376
  const raw = asRecord(value);
1358
1377
  const sessionsValue =
@@ -1370,6 +1389,7 @@ function parseRemoteSessions(value: unknown): Array<{
1370
1389
  createdAt?: number;
1371
1390
  lastActivityAt?: number;
1372
1391
  usage?: unknown;
1392
+ status?: AgentStatus;
1373
1393
  }> = [];
1374
1394
  for (const entry of sessionsValue) {
1375
1395
  const session = asRecord(entry);
@@ -1381,6 +1401,12 @@ function parseRemoteSessions(value: unknown): Array<{
1381
1401
  const source = nestedThread ?? session;
1382
1402
  const id = firstString(source, ["id", "threadId", "sessionId", "agentSessionId"]);
1383
1403
  if (!id) continue;
1404
+ // Only accept a transcript-derived status the provider actually reported
1405
+ // (Claude's listSessions sets "running"/"idle" from the on-disk transcript).
1406
+ // Anything else is left undefined so the sync site keeps its own status.
1407
+ const reportedStatus = firstString(source, ["status"]);
1408
+ const status: AgentStatus | undefined =
1409
+ reportedStatus === "running" || reportedStatus === "idle" ? reportedStatus : undefined;
1384
1410
  result.push({
1385
1411
  id,
1386
1412
  cwd: firstString(source, ["cwd", "workingDirectory", "workspacePath"]),
@@ -1389,6 +1415,7 @@ function parseRemoteSessions(value: unknown): Array<{
1389
1415
  createdAt: parseTimestamp(source.createdAt ?? source.created_at),
1390
1416
  lastActivityAt: parseTimestamp(source.lastActivityAt ?? source.updatedAt ?? source.modifiedAt ?? source.lastModified ?? source.updated_at),
1391
1417
  usage: source.usage,
1418
+ ...(status ? { status } : {}),
1392
1419
  });
1393
1420
  }
1394
1421
  return result;
@@ -1988,7 +2015,7 @@ export class AgentWorkspaceProxy {
1988
2015
  if (typeof listModels === "function") {
1989
2016
  try {
1990
2017
  const result = await listModels.call(client);
1991
- runtimeCapabilities = parseModelListCapabilities(result);
2018
+ runtimeCapabilities = parseModelListCapabilities(provider, result);
1992
2019
  } catch (error) {
1993
2020
  if (this.input.verbose) {
1994
2021
  process.stderr.write(`[agent:v2] model/list failed for ${provider}: ${error instanceof Error ? error.message : String(error)}\n`);
@@ -2047,6 +2074,26 @@ export class AgentWorkspaceProxy {
2047
2074
  const usage: AgentConversationUsage | undefined = usageFields
2048
2075
  ? { ...usageFields, updatedAt: remote.lastActivityAt ?? now }
2049
2076
  : existing?.usage;
2077
+ // Status precedence. While LinkShell is driving a turn for this
2078
+ // conversation, the in-memory status is authoritative — the transcript
2079
+ // lags (the SDK hasn't flushed the in-flight turn to disk), so trusting
2080
+ // it would flicker a live "running" turn back to idle. Otherwise the
2081
+ // transcript-derived remote.status is authoritative for Claude (it
2082
+ // reports running/idle straight from disk): surface "running" while an
2083
+ // external process drives it, and let its "idle" clear a previously
2084
+ // observed "running" once the external turn finishes. We only fall
2085
+ // back to the existing status to keep error/waiting_permission sticky
2086
+ // across a re-sync — deriveTranscriptStatus never emits those, so they
2087
+ // live only in `existing`; defaulting everything else to idle avoids a
2088
+ // purely-external session getting stuck at "running" forever.
2089
+ const linkshellDriving = this.currentTurnIds.has(conversationId);
2090
+ const status: AgentStatus = linkshellDriving
2091
+ ? existing?.status ?? "running"
2092
+ : remote.status === "running"
2093
+ ? "running"
2094
+ : existing?.status === "error" || existing?.status === "waiting_permission"
2095
+ ? existing.status
2096
+ : "idle";
2050
2097
  const conversation: AgentConversation = {
2051
2098
  id: conversationId,
2052
2099
  agentSessionId,
@@ -2057,7 +2104,7 @@ export class AgentWorkspaceProxy {
2057
2104
  reasoningEffort: existing?.reasoningEffort,
2058
2105
  permissionMode: existing?.permissionMode,
2059
2106
  collaborationMode: existing?.collaborationMode,
2060
- status: existing?.status ?? "idle",
2107
+ status,
2061
2108
  archived: existing?.archived ?? false,
2062
2109
  lastMessagePreview: existing?.lastMessagePreview,
2063
2110
  lastActivityAt: remote.lastActivityAt ?? existing?.lastActivityAt ?? now,
@@ -2152,6 +2199,24 @@ export class AgentWorkspaceProxy {
2152
2199
  const model = firstString(thread, ["model", "modelId", "currentModel"]);
2153
2200
  if (model && !conversation.model) conversation.model = model;
2154
2201
 
2202
+ // Seed a scroll-back cursor for Claude, which hydrates via readSession (full
2203
+ // transcript) yet pages via listTurns. The timeline only keeps the last
2204
+ // MAX_TIMELINE_ITEMS, so anything older is dropped here but reachable via
2205
+ // agent.v2.history.request. Cursor = total turn count (end-exclusive): the
2206
+ // first page overlaps the displayed tail (harmlessly deduped by the client's
2207
+ // mergeTimeline) and each subsequent page walks strictly older, terminating
2208
+ // when the cursor reaches 0. This integer-index cursor is Claude-specific —
2209
+ // Codex uses an opaque string cursor captured by the listTurns branch above,
2210
+ // so gate strictly on the provider rather than on listTurns presence (Codex
2211
+ // also exposes listTurns) to avoid poisoning Codex's cursor.
2212
+ if (
2213
+ conversation.provider === "claude" &&
2214
+ !this.historyCursors.has(conversation.id)
2215
+ ) {
2216
+ const turnCount = Array.isArray(thread?.turns) ? thread.turns.length : 0;
2217
+ if (turnCount > 0) this.historyCursors.set(conversation.id, String(turnCount));
2218
+ }
2219
+
2155
2220
  const hydratedItems = timelineItemsFromProviderThread(source, conversation.id);
2156
2221
  if (hydratedItems.length === 0) return;
2157
2222
  const existing = this.timelines.get(conversation.id) ?? [];
@@ -389,10 +389,55 @@ export function parseClaudeJsonlSession(input: {
389
389
  };
390
390
  }
391
391
 
392
+ /** Derive whether an on-disk Claude transcript is being actively driven RIGHT
393
+ * NOW by some process (LinkShell or an external `claude` terminal), purely from
394
+ * the file. Combines a structural signal (the last record) with a freshness
395
+ * signal (mtime), so it neither misses a live external turn nor sticks at
396
+ * "running" forever if that process dies mid-turn.
397
+ *
398
+ * - last record is a completed assistant turn (stop_reason "end_turn") → idle,
399
+ * regardless of mtime (the turn is definitively done).
400
+ * - otherwise the structure is mid-turn (awaiting an assistant response, an
401
+ * assistant still calling tools, or a half-written trailing line). If the
402
+ * file changed within FRESH_MS, a process is appending → running; if it's
403
+ * stale, the driver is gone → idle.
404
+ * Verified against real transcripts: mid-turn+fresh→running, mid-turn+stale→
405
+ * idle, end_turn+fresh→idle, half-written-line+fresh→running. */
406
+ function deriveTranscriptStatus(text: string, mtimeMs: number, nowMs: number): "running" | "idle" {
407
+ const FRESH_MS = 10_000;
408
+ const fresh = nowMs - mtimeMs < FRESH_MS;
409
+ const lines = text.split(/\r?\n/);
410
+ let last: Record<string, unknown> | undefined;
411
+ let sawUnparseableTail = false;
412
+ for (let i = lines.length - 1; i >= 0; i--) {
413
+ const ln = lines[i];
414
+ if (!ln || !ln.trim()) continue;
415
+ try {
416
+ last = asRecord(JSON.parse(ln));
417
+ break;
418
+ } catch {
419
+ // A trailing half-written line means a writer is mid-append.
420
+ sawUnparseableTail = true;
421
+ }
422
+ }
423
+ if (!last) return "idle";
424
+ const message = asRecord(last.message);
425
+ const role = stringField(message, ["role"]) ?? stringField(last, ["type"]);
426
+ const stop = message ? message.stop_reason ?? null : null;
427
+ if (role === "assistant" && stop === "end_turn") return "idle";
428
+ const midTurn =
429
+ role === "user" ||
430
+ last.type === "user" ||
431
+ (role === "assistant" && (stop === "tool_use" || stop === null)) ||
432
+ sawUnparseableTail;
433
+ return midTurn && fresh ? "running" : "idle";
434
+ }
435
+
392
436
  function claudeSessionMetadataFromFile(filePath: string, cwd: string, sessionId: string): Record<string, unknown> {
393
437
  const stat = statSync(filePath);
438
+ const text = readFileSync(filePath, "utf8");
394
439
  const parsed = parseClaudeJsonlSession({
395
- text: readFileSync(filePath, "utf8"),
440
+ text,
396
441
  cwd,
397
442
  sessionId,
398
443
  fallbackUpdatedAt: stat.mtimeMs,
@@ -407,6 +452,10 @@ function claudeSessionMetadataFromFile(filePath: string, cwd: string, sessionId:
407
452
  lastActivityAt: parseTimestamp(thread.updatedAt) ?? stat.mtimeMs,
408
453
  lastModified: stat.mtimeMs,
409
454
  usage: asRecord(thread.usage),
455
+ // Live status read straight from the transcript, so a session another
456
+ // `claude` process is actively driving shows as "running" in the list
457
+ // rather than the hardcoded "idle" the workspace would otherwise assign.
458
+ status: deriveTranscriptStatus(text, stat.mtimeMs, Date.now()),
410
459
  };
411
460
  }
412
461
 
@@ -453,6 +502,13 @@ const FALLBACK_MODEL_LABELS: Record<string, string> = {
453
502
  "opus[1m]": "Opus 1M",
454
503
  };
455
504
 
505
+ // Canonical Claude Code model aliases, used whenever live model discovery
506
+ // (supportedModels()) returns nothing. Hoisted so the two listModels() fallback
507
+ // branches stay in sync — a new alias added here reaches both.
508
+ const DEFAULT_FALLBACK_MODELS = ["default", "sonnet", "opus", "opusplan", "haiku", "sonnet[1m]", "opus[1m]"];
509
+ const toModelEntries = (ids: string[]): { id: string; label: string }[] =>
510
+ ids.map((id) => ({ id, label: FALLBACK_MODEL_LABELS[id] ?? id }));
511
+
456
512
  export class ClaudeSdkClient {
457
513
  private query: ClaudeQuery | undefined;
458
514
  private startup: ((params?: { options?: Record<string, unknown>; initializeTimeoutMs?: number }) => Promise<{ query(prompt: string): AsyncGenerator<unknown> & { supportedModels(): Promise<{ value: string; displayName: string }[]>; interrupt(): Promise<void> }; close(): void }>) | undefined;
@@ -506,14 +562,8 @@ export class ClaudeSdkClient {
506
562
  }
507
563
 
508
564
  async readSession(input: { sessionId: string; includeTurns?: boolean }): Promise<unknown> {
509
- let filePath = join(claudeProjectDir(this.input.cwd), `${input.sessionId}.jsonl`);
510
- if (!existsSync(filePath)) {
511
- const match = claudeProjectDirs(this.input.cwd)
512
- .map((dir) => join(dir, `${input.sessionId}.jsonl`))
513
- .find((candidate) => existsSync(candidate));
514
- if (match) filePath = match;
515
- }
516
- if (!existsSync(filePath)) {
565
+ const filePath = this.resolveSessionFile(input.sessionId);
566
+ if (!filePath) {
517
567
  return {
518
568
  thread: {
519
569
  id: input.sessionId,
@@ -532,6 +582,65 @@ export class ClaudeSdkClient {
532
582
  });
533
583
  }
534
584
 
585
+ /** Resolve the on-disk JSONL transcript for a session, preferring the cwd's
586
+ * project dir and falling back to a scan of sibling project dirs. */
587
+ private resolveSessionFile(sessionId: string): string | undefined {
588
+ const preferred = join(claudeProjectDir(this.input.cwd), `${sessionId}.jsonl`);
589
+ if (existsSync(preferred)) return preferred;
590
+ return claudeProjectDirs(this.input.cwd)
591
+ .map((dir) => join(dir, `${sessionId}.jsonl`))
592
+ .find((candidate) => existsSync(candidate));
593
+ }
594
+
595
+ /** Page OLDER transcript turns for scroll-back, mirroring Codex's
596
+ * thread/turns/list. The whole transcript lives on disk and is already
597
+ * parsed by parseClaudeJsonlSession, so we slice a window of chronological
598
+ * turns by an integer end-exclusive cursor.
599
+ *
600
+ * Cursor = the exclusive upper-bound turn index for the page. No cursor =
601
+ * start at the end (total turn count). A page returns turns [lo, hi) where
602
+ * lo = max(0, hi - limit); nextCursor = String(lo) while lo > 0, else absent
603
+ * (start of history reached). The web client's mergeTimeline dedupes by id
604
+ * and re-sorts by createdAt, so any overlap between this page and what the
605
+ * client already shows is harmless. */
606
+ async listTurns(input: {
607
+ sessionId: string;
608
+ limit?: number;
609
+ cursor?: string;
610
+ sortDirection?: "asc" | "desc";
611
+ itemsView?: "summary" | "full";
612
+ }): Promise<unknown> {
613
+ const empty = { sessionId: input.sessionId, turns: [], sortDirection: "asc" as const };
614
+ const filePath = this.resolveSessionFile(input.sessionId);
615
+ if (!filePath) return empty;
616
+
617
+ const stat = statSync(filePath);
618
+ const parsed = parseClaudeJsonlSession({
619
+ text: readFileSync(filePath, "utf8"),
620
+ cwd: this.input.cwd,
621
+ sessionId: input.sessionId,
622
+ fallbackUpdatedAt: stat.mtimeMs,
623
+ });
624
+ const thread = asRecord(parsed.thread);
625
+ const allTurns = Array.isArray(thread?.turns) ? thread.turns : [];
626
+ const total = allTurns.length;
627
+ if (total === 0) return empty;
628
+
629
+ const limit = input.limit && input.limit > 0 ? Math.floor(input.limit) : 50;
630
+ // Parse the end-exclusive cursor; default to the end of history. Clamp into
631
+ // [0, total] so a stale/garbage cursor can't slice out of bounds.
632
+ const parsedCursor = input.cursor !== undefined ? Number.parseInt(input.cursor, 10) : total;
633
+ const hi = Number.isFinite(parsedCursor) ? Math.max(0, Math.min(total, parsedCursor)) : total;
634
+ const lo = Math.max(0, hi - limit);
635
+ const page = allTurns.slice(lo, hi);
636
+ return {
637
+ sessionId: input.sessionId,
638
+ turns: page, // already chronological (ascending)
639
+ sortDirection: "asc" as const,
640
+ ...(lo > 0 ? { nextCursor: String(lo) } : {}),
641
+ };
642
+ }
643
+
535
644
  async prompt(input: {
536
645
  sessionId?: string;
537
646
  content: unknown[];
@@ -729,6 +838,18 @@ export class ClaudeSdkClient {
729
838
  const q = warm.query("");
730
839
  try {
731
840
  const sdkModels: { value: string; displayName: string }[] = await (q as unknown as { supportedModels(): Promise<{ value: string; displayName: string }[]> }).supportedModels();
841
+ // Discover the REAL slash-command set for the installed Claude Code
842
+ // (built-ins like /goal + project/user custom commands), instead of a
843
+ // hardcoded list that drifts out of sync. Best-effort: an older SDK
844
+ // without supportedCommands() just leaves commands undefined and the
845
+ // static defaults still apply.
846
+ let commands: { name: string; description?: string; argumentHint?: string }[] | undefined;
847
+ try {
848
+ const sdkCommands = await (q as unknown as { supportedCommands?: () => Promise<{ name: string; description?: string; argumentHint?: string }[]> }).supportedCommands?.();
849
+ if (Array.isArray(sdkCommands) && sdkCommands.length > 0) commands = sdkCommands;
850
+ } catch {
851
+ // supportedCommands() unavailable or failed — fall back to static defaults.
852
+ }
732
853
  if (sdkModels.length > 0) {
733
854
  // Filter to admin-configured allowlist if present, then map to our format.
734
855
  const allow = availableModels;
@@ -738,6 +859,17 @@ export class ClaudeSdkClient {
738
859
  return {
739
860
  defaultModel,
740
861
  models: filtered.map((m) => ({ id: m.value, label: m.displayName || m.value })),
862
+ ...(commands ? { commands } : {}),
863
+ };
864
+ }
865
+ // No models surfaced, but commands may still be present — return them
866
+ // so the command palette stays in sync even when the model list is empty.
867
+ if (commands) {
868
+ const fallbackModels = availableModels ?? DEFAULT_FALLBACK_MODELS;
869
+ return {
870
+ defaultModel,
871
+ models: toModelEntries(fallbackModels),
872
+ commands,
741
873
  };
742
874
  }
743
875
  } catch {
@@ -752,12 +884,10 @@ export class ClaudeSdkClient {
752
884
  }
753
885
 
754
886
  // Fallback: admin-configured allowlist, or the full Claude Code alias set.
755
- const fallbackModels = availableModels ?? [
756
- "default", "sonnet", "opus", "opusplan", "haiku", "sonnet[1m]", "opus[1m]",
757
- ];
887
+ const fallbackModels = availableModels ?? DEFAULT_FALLBACK_MODELS;
758
888
  return {
759
889
  defaultModel,
760
- models: fallbackModels.map((id) => ({ id, label: FALLBACK_MODEL_LABELS[id] ?? id })),
890
+ models: toModelEntries(fallbackModels),
761
891
  };
762
892
  }
763
893
 
@@ -30,4 +30,4 @@
30
30
  * has been extended to include xterm CSI codes, among
31
31
  * other features.
32
32
  */.xterm{cursor:text;position:relative;-moz-user-select:none;user-select:none;-ms-user-select:none;-webkit-user-select:none}.xterm.focus,.xterm:focus{outline:none}.xterm .xterm-helpers{position:absolute;top:0;z-index:5}.xterm .xterm-helper-textarea{padding:0;border:0;margin:0;position:absolute;opacity:0;left:-9999em;top:0;width:0;height:0;z-index:-5;white-space:nowrap;overflow:hidden;resize:none}.xterm .composition-view{background:#000;color:#fff;display:none;position:absolute;white-space:nowrap;z-index:1}.xterm .composition-view.active{display:block}.xterm .xterm-viewport{background-color:#000;overflow-y:scroll;cursor:default;position:absolute;right:0;left:0;top:0;bottom:0}.xterm .xterm-screen{position:relative}.xterm .xterm-screen canvas{position:absolute;left:0;top:0}.xterm .xterm-scroll-area{visibility:hidden}.xterm-char-measure-element{display:inline-block;visibility:hidden;position:absolute;top:0;left:-9999em;line-height:normal}.xterm.enable-mouse-events{cursor:default}.xterm.xterm-cursor-pointer,.xterm .xterm-cursor-pointer{cursor:pointer}.xterm.column-select.focus{cursor:crosshair}.xterm .xterm-accessibility:not(.debug),.xterm .xterm-message{position:absolute;left:0;top:0;bottom:0;right:0;z-index:10;color:transparent;pointer-events:none}.xterm .xterm-accessibility-tree:not(.debug) *::-moz-selection{color:transparent}.xterm .xterm-accessibility-tree:not(.debug) *::selection{color:transparent}.xterm .xterm-accessibility-tree{-webkit-user-select:text;-moz-user-select:text;user-select:text;white-space:pre}.xterm .live-region{position:absolute;left:-9999px;width:1px;height:1px;overflow:hidden}.xterm-dim{opacity:1!important}.xterm-underline-1{text-decoration:underline}.xterm-underline-2{-webkit-text-decoration:double underline;text-decoration:double underline}.xterm-underline-3{-webkit-text-decoration:wavy underline;text-decoration:wavy underline}.xterm-underline-4{-webkit-text-decoration:dotted underline;text-decoration:dotted underline}.xterm-underline-5{-webkit-text-decoration:dashed underline;text-decoration:dashed underline}.xterm-overline{text-decoration:overline}.xterm-overline.xterm-underline-1{text-decoration:overline underline}.xterm-overline.xterm-underline-2{-webkit-text-decoration:overline double underline;text-decoration:overline double underline}.xterm-overline.xterm-underline-3{-webkit-text-decoration:overline wavy underline;text-decoration:overline wavy underline}.xterm-overline.xterm-underline-4{-webkit-text-decoration:overline dotted underline;text-decoration:overline dotted underline}.xterm-overline.xterm-underline-5{-webkit-text-decoration:overline dashed underline;text-decoration:overline dashed underline}.xterm-strikethrough{text-decoration:line-through}.xterm-screen .xterm-decoration-container .xterm-decoration{z-index:6;position:absolute}.xterm-screen .xterm-decoration-container .xterm-decoration.xterm-decoration-top-layer{z-index:7}.xterm-decoration-overview-ruler{z-index:8;position:absolute;top:0;right:0;pointer-events:none}.xterm-decoration-top{z-index:2;position:relative}*,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }/*! tailwindcss v3.4.19 | MIT License | https://tailwindcss.com
33
- */*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before,:after{--tw-content: ""}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:Inter,system-ui,-apple-system,Segoe UI,sans-serif;font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:JetBrains Mono,ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}:root,[data-theme=dark]{color-scheme:dark;--c-canvas: 11 13 15;--c-surface: 22 24 28;--c-surface-raised: 28 31 36;--c-surface-overlay: 35 38 44;--c-border: 42 46 53;--c-border-strong: 56 62 70;--c-content-primary: 233 235 238;--c-content-secondary: 158 165 173;--c-content-muted: 112 118 126;--c-content-faint: 78 83 90;--c-brand: 59 107 97;--c-brand-light: 78 138 126;--c-brand-dark: 42 79 71;--c-accent: 45 212 191;--c-accent-dim: 31 148 136;--c-diff-add: 31 61 43;--c-diff-add-text: 95 211 138;--c-diff-remove: 61 31 36;--c-diff-remove-text: 240 112 127;--c-success: 16 185 129;--c-warning: 245 158 11;--c-danger: 239 68 68;--glass-bg: 18 20 23;--body-wash-1: rgba(45, 212, 191, .05);--body-wash-2: rgba(59, 107, 97, .04)}[data-theme=light]{color-scheme:light;--c-canvas: 255 255 255;--c-surface: 255 255 255;--c-surface-raised: 248 248 247;--c-surface-overlay: 241 241 239;--c-border: 229 229 226;--c-border-strong: 212 212 208;--c-content-primary: 33 33 33;--c-content-secondary: 90 90 88;--c-content-muted: 130 130 126;--c-content-faint: 168 168 163;--c-brand: 47 92 83;--c-brand-light: 62 120 109;--c-brand-dark: 36 70 63;--c-accent: 17 122 110;--c-accent-dim: 15 105 95;--c-diff-add: 230 246 235;--c-diff-add-text: 30 120 78;--c-diff-remove: 252 230 232;--c-diff-remove-text: 188 50 64;--c-success: 22 128 84;--c-warning: 176 110 20;--c-danger: 196 48 48;--glass-bg: 255 255 255;--body-wash-1: transparent;--body-wash-2: transparent}html,body,#root{height:100%}body{--tw-bg-opacity: 1;background-color:rgb(var(--c-canvas) / var(--tw-bg-opacity, 1));font-family:Inter,system-ui,-apple-system,Segoe UI,sans-serif;--tw-text-opacity: 1;color:rgb(var(--c-content-primary) / var(--tw-text-opacity, 1));-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;background-image:radial-gradient(120% 80% at 50% -10%,var(--body-wash-1),transparent 60%),radial-gradient(100% 60% at 100% 100%,var(--body-wash-2),transparent 55%);background-attachment:fixed}::-moz-selection{background:rgb(var(--c-accent) / .25)}::selection{background:rgb(var(--c-accent) / .25)}*{scrollbar-width:thin;scrollbar-color:rgb(var(--c-border-strong)) transparent}*::-webkit-scrollbar{width:8px;height:8px}*::-webkit-scrollbar-thumb{background:rgb(var(--c-border-strong));border-radius:9999px;border:2px solid transparent;background-clip:content-box}*::-webkit-scrollbar-thumb:hover{background:rgb(var(--c-content-faint));background-clip:content-box}*::-webkit-scrollbar-track{background:transparent}.container{width:100%}@media(min-width:640px){.container{max-width:640px}}@media(min-width:768px){.container{max-width:768px}}@media(min-width:1024px){.container{max-width:1024px}}@media(min-width:1280px){.container{max-width:1280px}}@media(min-width:1536px){.container{max-width:1536px}}.codex-card{border-radius:.75rem;border-width:1px;--tw-border-opacity: 1;border-color:rgb(var(--c-border) / var(--tw-border-opacity, 1));--tw-bg-opacity: 1;background-color:rgb(var(--c-surface) / var(--tw-bg-opacity, 1));box-shadow:0 1px rgb(var(--c-content-primary) / .03) inset,0 1px 2px #0000002e}.codex-card-raised{border-radius:.75rem;border-width:1px;--tw-border-opacity: 1;border-color:rgb(var(--c-border) / var(--tw-border-opacity, 1));--tw-bg-opacity: 1;background-color:rgb(var(--c-surface-raised) / var(--tw-bg-opacity, 1));box-shadow:0 1px rgb(var(--c-content-primary) / .04) inset,0 8px 28px -8px #00000047}.glass-bar{background:rgb(var(--glass-bg) / .6);backdrop-filter:saturate(140%) blur(12px);-webkit-backdrop-filter:saturate(140%) blur(12px)}.codex-input{width:100%;border-radius:.75rem;border-width:1px;--tw-border-opacity: 1;border-color:rgb(var(--c-border) / var(--tw-border-opacity, 1));--tw-bg-opacity: 1;background-color:rgb(var(--c-surface-raised) / var(--tw-bg-opacity, 1));padding:.625rem .875rem;font-size:.875rem;line-height:1.25rem;--tw-text-opacity: 1;color:rgb(var(--c-content-primary) / var(--tw-text-opacity, 1))}.codex-input::-moz-placeholder{--tw-placeholder-opacity: 1;color:rgb(var(--c-content-muted) / var(--tw-placeholder-opacity, 1))}.codex-input::placeholder{--tw-placeholder-opacity: 1;color:rgb(var(--c-content-muted) / var(--tw-placeholder-opacity, 1))}.codex-input{outline:2px solid transparent;outline-offset:2px;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.codex-input:focus{--tw-border-opacity: 1;border-color:rgb(var(--c-accent-dim) / var(--tw-border-opacity, 1));--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000);--tw-ring-color: rgb(var(--c-accent) / .2)}.codex-btn-primary{display:inline-flex;height:2.25rem;cursor:pointer;align-items:center;justify-content:center;gap:.375rem;border-radius:.5rem;padding-left:.875rem;padding-right:.875rem;font-size:.875rem;line-height:1.25rem;font-weight:500;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.codex-btn-primary:focus-visible{outline:2px solid transparent;outline-offset:2px;--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000);--tw-ring-color: rgb(var(--c-accent) / .4)}.codex-btn-primary:disabled{pointer-events:none;opacity:.4}.codex-btn-primary{--tw-bg-opacity: 1;background-color:rgb(var(--c-accent-dim) / var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.codex-btn-primary:hover{--tw-bg-opacity: 1;background-color:rgb(var(--c-accent) / var(--tw-bg-opacity, 1))}.codex-btn-primary{box-shadow:0 1px 2px #0000001f}.codex-btn-ghost{display:inline-flex;height:2.25rem;cursor:pointer;align-items:center;justify-content:center;gap:.375rem;border-radius:.5rem;padding-left:.875rem;padding-right:.875rem;font-size:.875rem;line-height:1.25rem;font-weight:500;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.codex-btn-ghost:focus-visible{outline:2px solid transparent;outline-offset:2px;--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000);--tw-ring-color: rgb(var(--c-accent) / .4)}.codex-btn-ghost:disabled{pointer-events:none;opacity:.4}.codex-btn-ghost{--tw-text-opacity: 1;color:rgb(var(--c-content-secondary) / var(--tw-text-opacity, 1))}.codex-btn-ghost:hover{--tw-bg-opacity: 1;background-color:rgb(var(--c-surface-overlay) / var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(var(--c-content-primary) / var(--tw-text-opacity, 1))}.codex-btn-outline{display:inline-flex;height:2.25rem;cursor:pointer;align-items:center;justify-content:center;gap:.375rem;border-radius:.5rem;padding-left:.875rem;padding-right:.875rem;font-size:.875rem;line-height:1.25rem;font-weight:500;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.codex-btn-outline:focus-visible{outline:2px solid transparent;outline-offset:2px;--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000);--tw-ring-color: rgb(var(--c-accent) / .4)}.codex-btn-outline:disabled{pointer-events:none;opacity:.4}.codex-btn-outline{border-width:1px;--tw-border-opacity: 1;border-color:rgb(var(--c-border) / var(--tw-border-opacity, 1));--tw-bg-opacity: 1;background-color:rgb(var(--c-surface) / var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(var(--c-content-secondary) / var(--tw-text-opacity, 1))}.codex-btn-outline:hover{--tw-border-opacity: 1;border-color:rgb(var(--c-border-strong) / var(--tw-border-opacity, 1));--tw-bg-opacity: 1;background-color:rgb(var(--c-surface-overlay) / var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(var(--c-content-primary) / var(--tw-text-opacity, 1))}.tree-row{display:flex;width:100%;cursor:pointer;align-items:center;gap:.625rem;border-radius:.5rem;padding:.5rem .75rem;text-align:left;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.tree-row:hover{--tw-bg-opacity: 1;background-color:rgb(var(--c-surface-overlay) / var(--tw-bg-opacity, 1))}.tree-row-active{--tw-bg-opacity: 1;background-color:rgb(var(--c-surface-overlay) / var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(var(--c-content-primary) / var(--tw-text-opacity, 1))}.codex-chip{display:inline-flex;align-items:center;gap:.25rem;border-radius:9999px;border-width:1px;--tw-border-opacity: 1;border-color:rgb(var(--c-border) / var(--tw-border-opacity, 1));--tw-bg-opacity: 1;background-color:rgb(var(--c-surface-raised) / var(--tw-bg-opacity, 1));padding:.125rem .5rem;font-family:JetBrains Mono,ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:.6875rem;line-height:1rem;--tw-text-opacity: 1;color:rgb(var(--c-content-secondary) / var(--tw-text-opacity, 1))}.xterm-host,.xterm-host .xterm,.xterm-host .xterm-viewport{height:100%;width:100%}.pointer-events-none{pointer-events:none}.pointer-events-auto{pointer-events:auto}.visible{visibility:visible}.collapse{visibility:collapse}.static{position:static}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.sticky{position:sticky}.inset-0{top:0;right:0;bottom:0;left:0}.inset-y-0{top:0;bottom:0}.-right-1\.5{right:-.375rem}.-top-1\.5{top:-.375rem}.bottom-4{bottom:1rem}.bottom-full{bottom:100%}.left-0{left:0}.right-0{right:0}.right-1\.5{right:.375rem}.right-2{right:.5rem}.right-4{right:1rem}.top-0{top:0}.top-1\.5{top:.375rem}.top-2{top:.5rem}.top-9{top:2.25rem}.z-10{z-index:10}.z-20{z-index:20}.z-30{z-index:30}.z-40{z-index:40}.z-50{z-index:50}.z-\[60\]{z-index:60}.mx-1{margin-left:.25rem;margin-right:.25rem}.mx-4{margin-left:1rem;margin-right:1rem}.mx-auto{margin-left:auto;margin-right:auto}.my-2{margin-top:.5rem;margin-bottom:.5rem}.my-3{margin-top:.75rem;margin-bottom:.75rem}.-mt-1{margin-top:-.25rem}.mb-1{margin-bottom:.25rem}.mb-1\.5{margin-bottom:.375rem}.mb-2{margin-bottom:.5rem}.mb-3{margin-bottom:.75rem}.mb-4{margin-bottom:1rem}.ml-1{margin-left:.25rem}.ml-2{margin-left:.5rem}.ml-auto{margin-left:auto}.mr-2{margin-right:.5rem}.mt-0\.5{margin-top:.125rem}.mt-1{margin-top:.25rem}.mt-1\.5{margin-top:.375rem}.mt-2{margin-top:.5rem}.mt-2\.5{margin-top:.625rem}.mt-3{margin-top:.75rem}.line-clamp-1{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:1}.block{display:block}.inline-block{display:inline-block}.inline{display:inline}.flex{display:flex}.inline-flex{display:inline-flex}.grid{display:grid}.hidden{display:none}.h-1{height:.25rem}.h-1\.5{height:.375rem}.h-12{height:3rem}.h-14{height:3.5rem}.h-2{height:.5rem}.h-2\.5{height:.625rem}.h-4{height:1rem}.h-5{height:1.25rem}.h-6{height:1.5rem}.h-7{height:1.75rem}.h-8{height:2rem}.h-\[100dvh\]{height:100dvh}.h-full{height:100%}.h-px{height:1px}.max-h-32{max-height:8rem}.max-h-40{max-height:10rem}.max-h-48{max-height:12rem}.max-h-60{max-height:15rem}.max-h-72{max-height:18rem}.max-h-\[50vh\]{max-height:50vh}.max-h-\[80vh\]{max-height:80vh}.min-h-0{min-height:0px}.min-h-screen{min-height:100vh}.w-1{width:.25rem}.w-1\.5{width:.375rem}.w-12{width:3rem}.w-14{width:3.5rem}.w-2\.5{width:.625rem}.w-28{width:7rem}.w-3{width:.75rem}.w-36{width:9rem}.w-4{width:1rem}.w-5{width:1.25rem}.w-6{width:1.5rem}.w-7{width:1.75rem}.w-8{width:2rem}.w-80{width:20rem}.w-9{width:2.25rem}.w-\[390px\]{width:390px}.w-\[82\%\]{width:82%}.w-full{width:100%}.min-w-0{min-width:0px}.min-w-\[8rem\]{min-width:8rem}.max-w-3xl{max-width:48rem}.max-w-5xl{max-width:64rem}.max-w-\[200px\]{max-width:200px}.max-w-\[46rem\]{max-width:46rem}.max-w-\[7rem\]{max-width:7rem}.max-w-\[85\%\]{max-width:85%}.max-w-full{max-width:100%}.max-w-lg{max-width:32rem}.max-w-sm{max-width:24rem}.max-w-xl{max-width:36rem}.max-w-xs{max-width:20rem}.flex-1{flex:1 1 0%}.shrink-0{flex-shrink:0}.basis-full{flex-basis:100%}.rotate-180{--tw-rotate: 180deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes drawer-in{0%{transform:translate(-100%)}to{transform:translate(0)}}.animate-drawer-in{animation:drawer-in .24s cubic-bezier(.16,1,.3,1)}@keyframes fade-in{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:translateY(0)}}.animate-fade-in{animation:fade-in .2s ease-out}@keyframes panel-in-right{0%{opacity:0;transform:translate(30px)}to{opacity:1;transform:translate(0)}}.animate-panel-in-right{animation:panel-in-right .22s cubic-bezier(.16,1,.3,1) both}@keyframes panel-in-up{0%{opacity:0;transform:translateY(100%)}to{opacity:1;transform:translateY(0)}}.animate-panel-in-up{animation:panel-in-up .24s cubic-bezier(.16,1,.3,1) both}@keyframes panel-out-down{0%{opacity:1;transform:translateY(0)}to{opacity:0;transform:translateY(100%)}}.animate-panel-out-down{animation:panel-out-down .24s cubic-bezier(.16,1,.3,1) both}@keyframes panel-out-right{0%{opacity:1;transform:translate(0)}to{opacity:0;transform:translate(30px)}}.animate-panel-out-right{animation:panel-out-right .22s cubic-bezier(.16,1,.3,1) both}@keyframes pulse-dot{0%,to{opacity:.4}50%{opacity:1}}.animate-pulse-dot{animation:pulse-dot 1.2s ease-in-out infinite}@keyframes slide-in{0%{opacity:0;transform:translate(8px)}to{opacity:1;transform:translate(0)}}.animate-slide-in{animation:slide-in .22s cubic-bezier(.16,1,.3,1)}@keyframes spin{to{transform:rotate(360deg)}}.animate-spin{animation:spin 1s linear infinite}.cursor-col-resize{cursor:col-resize}.cursor-crosshair{cursor:crosshair}.cursor-default{cursor:default}.cursor-pointer{cursor:pointer}.cursor-row-resize{cursor:row-resize}.select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.resize-none{resize:none}.resize{resize:both}.list-decimal{list-style-type:decimal}.list-disc{list-style-type:disc}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-start{align-items:flex-start}.items-end{align-items:flex-end}.items-center{align-items:center}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-0\.5{gap:.125rem}.gap-1{gap:.25rem}.gap-1\.5{gap:.375rem}.gap-2{gap:.5rem}.gap-2\.5{gap:.625rem}.gap-3{gap:.75rem}.gap-4{gap:1rem}.gap-6{gap:1.5rem}.gap-\[3px\]{gap:3px}.gap-x-2{-moz-column-gap:.5rem;column-gap:.5rem}.gap-y-1\.5{row-gap:.375rem}.space-y-0\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.125rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.125rem * var(--tw-space-y-reverse))}.space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.25rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.25rem * var(--tw-space-y-reverse))}.space-y-1\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.375rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.375rem * var(--tw-space-y-reverse))}.space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.5rem * var(--tw-space-y-reverse))}.space-y-3>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.75rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.75rem * var(--tw-space-y-reverse))}.space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem * var(--tw-space-y-reverse))}.space-y-5>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1.25rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.25rem * var(--tw-space-y-reverse))}.space-y-6>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.5rem * var(--tw-space-y-reverse))}.divide-x>:not([hidden])~:not([hidden]){--tw-divide-x-reverse: 0;border-right-width:calc(1px * var(--tw-divide-x-reverse));border-left-width:calc(1px * calc(1 - var(--tw-divide-x-reverse)))}.divide-border>:not([hidden])~:not([hidden]){--tw-divide-opacity: 1;border-color:rgb(var(--c-border) / var(--tw-divide-opacity, 1))}.self-start{align-self:flex-start}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.overflow-x-hidden{overflow-x:hidden}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.whitespace-nowrap{white-space:nowrap}.whitespace-pre{white-space:pre}.whitespace-pre-wrap{white-space:pre-wrap}.break-words{overflow-wrap:break-word}.break-all{word-break:break-all}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:1rem}.rounded-\[2px\]{border-radius:2px}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:.5rem}.rounded-md{border-radius:.375rem}.rounded-sm{border-radius:.125rem}.rounded-xl{border-radius:.75rem}.border{border-width:1px}.border-2{border-width:2px}.border-x{border-left-width:1px;border-right-width:1px}.border-b{border-bottom-width:1px}.border-l{border-left-width:1px}.border-r{border-right-width:1px}.border-t{border-top-width:1px}.border-accent{--tw-border-opacity: 1;border-color:rgb(var(--c-accent) / var(--tw-border-opacity, 1))}.border-accent-dim\/40{border-color:rgb(var(--c-accent-dim) / .4)}.border-accent\/30{border-color:rgb(var(--c-accent) / .3)}.border-border{--tw-border-opacity: 1;border-color:rgb(var(--c-border) / var(--tw-border-opacity, 1))}.border-border-strong{--tw-border-opacity: 1;border-color:rgb(var(--c-border-strong) / var(--tw-border-opacity, 1))}.border-content-faint{--tw-border-opacity: 1;border-color:rgb(var(--c-content-faint) / var(--tw-border-opacity, 1))}.border-danger\/30{border-color:rgb(var(--c-danger) / .3)}.border-danger\/40{border-color:rgb(var(--c-danger) / .4)}.border-success\/30{border-color:rgb(var(--c-success) / .3)}.border-warning\/40{border-color:rgb(var(--c-warning) / .4)}.border-t-accent{--tw-border-opacity: 1;border-top-color:rgb(var(--c-accent) / var(--tw-border-opacity, 1))}.bg-accent{--tw-bg-opacity: 1;background-color:rgb(var(--c-accent) / var(--tw-bg-opacity, 1))}.bg-accent-dim{--tw-bg-opacity: 1;background-color:rgb(var(--c-accent-dim) / var(--tw-bg-opacity, 1))}.bg-accent\/10{background-color:rgb(var(--c-accent) / .1)}.bg-black\/60{background-color:#0009}.bg-border{--tw-bg-opacity: 1;background-color:rgb(var(--c-border) / var(--tw-bg-opacity, 1))}.bg-canvas{--tw-bg-opacity: 1;background-color:rgb(var(--c-canvas) / var(--tw-bg-opacity, 1))}.bg-canvas\/60{background-color:rgb(var(--c-canvas) / .6)}.bg-canvas\/80{background-color:rgb(var(--c-canvas) / .8)}.bg-canvas\/95{background-color:rgb(var(--c-canvas) / .95)}.bg-content-faint{--tw-bg-opacity: 1;background-color:rgb(var(--c-content-faint) / var(--tw-bg-opacity, 1))}.bg-current{background-color:currentColor}.bg-danger{--tw-bg-opacity: 1;background-color:rgb(var(--c-danger) / var(--tw-bg-opacity, 1))}.bg-danger\/10{background-color:rgb(var(--c-danger) / .1)}.bg-diff-add{--tw-bg-opacity: 1;background-color:rgb(var(--c-diff-add) / var(--tw-bg-opacity, 1))}.bg-diff-remove{--tw-bg-opacity: 1;background-color:rgb(var(--c-diff-remove) / var(--tw-bg-opacity, 1))}.bg-success{--tw-bg-opacity: 1;background-color:rgb(var(--c-success) / var(--tw-bg-opacity, 1))}.bg-success\/10{background-color:rgb(var(--c-success) / .1)}.bg-surface{--tw-bg-opacity: 1;background-color:rgb(var(--c-surface) / var(--tw-bg-opacity, 1))}.bg-surface-overlay{--tw-bg-opacity: 1;background-color:rgb(var(--c-surface-overlay) / var(--tw-bg-opacity, 1))}.bg-surface-raised{--tw-bg-opacity: 1;background-color:rgb(var(--c-surface-raised) / var(--tw-bg-opacity, 1))}.bg-surface-raised\/60{background-color:rgb(var(--c-surface-raised) / .6)}.bg-transparent{background-color:transparent}.bg-warning{--tw-bg-opacity: 1;background-color:rgb(var(--c-warning) / var(--tw-bg-opacity, 1))}.bg-warning\/10{background-color:rgb(var(--c-warning) / .1)}.bg-warning\/15{background-color:rgb(var(--c-warning) / .15)}.bg-warning\/30{background-color:rgb(var(--c-warning) / .3)}.bg-white{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1))}.object-contain{-o-object-fit:contain;object-fit:contain}.object-cover{-o-object-fit:cover;object-fit:cover}.p-0\.5{padding:.125rem}.p-1{padding:.25rem}.p-1\.5{padding:.375rem}.p-2{padding:.5rem}.p-3{padding:.75rem}.p-3\.5{padding:.875rem}.p-4{padding:1rem}.p-5{padding:1.25rem}.px-0{padding-left:0;padding-right:0}.px-0\.5{padding-left:.125rem;padding-right:.125rem}.px-1{padding-left:.25rem;padding-right:.25rem}.px-1\.5{padding-left:.375rem;padding-right:.375rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-2\.5{padding-left:.625rem;padding-right:.625rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-3\.5{padding-left:.875rem;padding-right:.875rem}.px-4{padding-left:1rem;padding-right:1rem}.px-5{padding-left:1.25rem;padding-right:1.25rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.py-0\.5{padding-top:.125rem;padding-bottom:.125rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-1\.5{padding-top:.375rem;padding-bottom:.375rem}.py-10{padding-top:2.5rem;padding-bottom:2.5rem}.py-12{padding-top:3rem;padding-bottom:3rem}.py-16{padding-top:4rem;padding-bottom:4rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-2\.5{padding-top:.625rem;padding-bottom:.625rem}.py-20{padding-top:5rem;padding-bottom:5rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.py-4{padding-top:1rem;padding-bottom:1rem}.py-6{padding-top:1.5rem;padding-bottom:1.5rem}.py-8{padding-top:2rem;padding-bottom:2rem}.pb-1{padding-bottom:.25rem}.pb-2{padding-bottom:.5rem}.pb-3{padding-bottom:.75rem}.pb-4{padding-bottom:1rem}.pl-1{padding-left:.25rem}.pl-2{padding-left:.5rem}.pl-3{padding-left:.75rem}.pl-4{padding-left:1rem}.pl-5{padding-left:1.25rem}.pl-7{padding-left:1.75rem}.pr-1{padding-right:.25rem}.pr-3{padding-right:.75rem}.pr-9{padding-right:2.25rem}.pt-1\.5{padding-top:.375rem}.pt-2{padding-top:.5rem}.pt-2\.5{padding-top:.625rem}.pt-\[12vh\]{padding-top:12vh}.text-left{text-align:left}.text-center{text-align:center}.text-right{text-align:right}.font-mono{font-family:JetBrains Mono,ui-monospace,SFMono-Regular,Menlo,Consolas,monospace}.text-2xs{font-size:.6875rem;line-height:1rem}.text-\[10px\]{font-size:10px}.text-\[13px\]{font-size:13px}.text-\[15px\]{font-size:15px}.text-base{font-size:1rem;line-height:1.5rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-xs{font-size:.75rem;line-height:1rem}.font-bold{font-weight:700}.font-medium{font-weight:500}.font-normal{font-weight:400}.font-semibold{font-weight:600}.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)}.leading-6{line-height:1.5rem}.leading-7{line-height:1.75rem}.leading-\[1\.6\]{line-height:1.6}.leading-relaxed{line-height:1.625}.tracking-wide{letter-spacing:.025em}.tracking-wider{letter-spacing:.05em}.tracking-widest{letter-spacing:.1em}.text-accent{--tw-text-opacity: 1;color:rgb(var(--c-accent) / var(--tw-text-opacity, 1))}.text-accent-dim{--tw-text-opacity: 1;color:rgb(var(--c-accent-dim) / var(--tw-text-opacity, 1))}.text-content-faint{--tw-text-opacity: 1;color:rgb(var(--c-content-faint) / var(--tw-text-opacity, 1))}.text-content-muted{--tw-text-opacity: 1;color:rgb(var(--c-content-muted) / var(--tw-text-opacity, 1))}.text-content-primary{--tw-text-opacity: 1;color:rgb(var(--c-content-primary) / var(--tw-text-opacity, 1))}.text-content-secondary{--tw-text-opacity: 1;color:rgb(var(--c-content-secondary) / var(--tw-text-opacity, 1))}.text-danger{--tw-text-opacity: 1;color:rgb(var(--c-danger) / var(--tw-text-opacity, 1))}.text-diff-addText{--tw-text-opacity: 1;color:rgb(var(--c-diff-add-text) / var(--tw-text-opacity, 1))}.text-diff-removeText{--tw-text-opacity: 1;color:rgb(var(--c-diff-remove-text) / var(--tw-text-opacity, 1))}.text-success{--tw-text-opacity: 1;color:rgb(var(--c-success) / var(--tw-text-opacity, 1))}.text-warning{--tw-text-opacity: 1;color:rgb(var(--c-warning) / var(--tw-text-opacity, 1))}.text-white{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.underline{text-decoration-line:underline}.line-through{text-decoration-line:line-through}.underline-offset-2{text-underline-offset:2px}.placeholder-content-muted::-moz-placeholder{--tw-placeholder-opacity: 1;color:rgb(var(--c-content-muted) / var(--tw-placeholder-opacity, 1))}.placeholder-content-muted::placeholder{--tw-placeholder-opacity: 1;color:rgb(var(--c-content-muted) / var(--tw-placeholder-opacity, 1))}.opacity-0{opacity:0}.opacity-100{opacity:1}.opacity-40{opacity:.4}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.opacity-70{opacity:.7}.shadow-2xl{--tw-shadow: 0 25px 50px -12px rgb(0 0 0 / .25);--tw-shadow-colored: 0 25px 50px -12px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-sm{--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-xl{--tw-shadow: 0 20px 25px -5px rgb(0 0 0 / .1), 0 8px 10px -6px rgb(0 0 0 / .1);--tw-shadow-colored: 0 20px 25px -5px var(--tw-shadow-color), 0 8px 10px -6px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.outline-none{outline:2px solid transparent;outline-offset:2px}.blur{--tw-blur: blur(8px);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)}.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(4px);-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,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-opacity{transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-transform{transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.duration-150{transition-duration:.15s}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important;scroll-behavior:auto!important}}@media(hover:none)and (pointer:coarse){[class*="group-hover:opacity-100"]{opacity:1!important}}.focus-within\:border-border-strong:focus-within{--tw-border-opacity: 1;border-color:rgb(var(--c-border-strong) / var(--tw-border-opacity, 1))}.hover\:border-border-strong:hover{--tw-border-opacity: 1;border-color:rgb(var(--c-border-strong) / var(--tw-border-opacity, 1))}.hover\:border-danger:hover{--tw-border-opacity: 1;border-color:rgb(var(--c-danger) / var(--tw-border-opacity, 1))}.hover\:bg-accent:hover{--tw-bg-opacity: 1;background-color:rgb(var(--c-accent) / var(--tw-bg-opacity, 1))}.hover\:bg-accent-dim\/50:hover{background-color:rgb(var(--c-accent-dim) / .5)}.hover\:bg-danger\/10:hover{background-color:rgb(var(--c-danger) / .1)}.hover\:bg-surface-overlay:hover{--tw-bg-opacity: 1;background-color:rgb(var(--c-surface-overlay) / var(--tw-bg-opacity, 1))}.hover\:bg-surface-overlay\/60:hover{background-color:rgb(var(--c-surface-overlay) / .6)}.hover\:bg-surface-raised:hover{--tw-bg-opacity: 1;background-color:rgb(var(--c-surface-raised) / var(--tw-bg-opacity, 1))}.hover\:text-accent:hover{--tw-text-opacity: 1;color:rgb(var(--c-accent) / var(--tw-text-opacity, 1))}.hover\:text-content-primary:hover{--tw-text-opacity: 1;color:rgb(var(--c-content-primary) / var(--tw-text-opacity, 1))}.hover\:text-content-secondary:hover{--tw-text-opacity: 1;color:rgb(var(--c-content-secondary) / var(--tw-text-opacity, 1))}.hover\:text-danger:hover{--tw-text-opacity: 1;color:rgb(var(--c-danger) / var(--tw-text-opacity, 1))}.focus\:border-accent-dim:focus{--tw-border-opacity: 1;border-color:rgb(var(--c-accent-dim) / var(--tw-border-opacity, 1))}.disabled\:cursor-default:disabled{cursor:default}.disabled\:bg-surface-overlay:disabled{--tw-bg-opacity: 1;background-color:rgb(var(--c-surface-overlay) / var(--tw-bg-opacity, 1))}.disabled\:text-content-faint:disabled{--tw-text-opacity: 1;color:rgb(var(--c-content-faint) / var(--tw-text-opacity, 1))}.disabled\:opacity-40:disabled{opacity:.4}.group\/code:hover .group-hover\/code\:opacity-100,.group\/out:hover .group-hover\/out\:opacity-100,.group:hover .group-hover\:opacity-100{opacity:1}@media(min-width:640px){.sm\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.sm\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.sm\:gap-3{gap:.75rem}.sm\:px-6{padding-left:1.5rem;padding-right:1.5rem}}@media(min-width:768px){.md\:text-\[15px\]{font-size:15px}}
33
+ */*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before,:after{--tw-content: ""}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:Inter,system-ui,-apple-system,Segoe UI,sans-serif;font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:JetBrains Mono,ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}:root,[data-theme=dark]{color-scheme:dark;--c-canvas: 11 13 15;--c-surface: 22 24 28;--c-surface-raised: 28 31 36;--c-surface-overlay: 35 38 44;--c-border: 42 46 53;--c-border-strong: 56 62 70;--c-content-primary: 233 235 238;--c-content-secondary: 158 165 173;--c-content-muted: 112 118 126;--c-content-faint: 78 83 90;--c-brand: 59 107 97;--c-brand-light: 78 138 126;--c-brand-dark: 42 79 71;--c-accent: 45 212 191;--c-accent-dim: 31 148 136;--c-diff-add: 31 61 43;--c-diff-add-text: 95 211 138;--c-diff-remove: 61 31 36;--c-diff-remove-text: 240 112 127;--c-success: 16 185 129;--c-warning: 245 158 11;--c-danger: 239 68 68;--glass-bg: 18 20 23;--body-wash-1: rgba(45, 212, 191, .05);--body-wash-2: rgba(59, 107, 97, .04)}[data-theme=light]{color-scheme:light;--c-canvas: 255 255 255;--c-surface: 255 255 255;--c-surface-raised: 248 248 247;--c-surface-overlay: 241 241 239;--c-border: 229 229 226;--c-border-strong: 212 212 208;--c-content-primary: 33 33 33;--c-content-secondary: 90 90 88;--c-content-muted: 130 130 126;--c-content-faint: 168 168 163;--c-brand: 47 92 83;--c-brand-light: 62 120 109;--c-brand-dark: 36 70 63;--c-accent: 17 122 110;--c-accent-dim: 15 105 95;--c-diff-add: 230 246 235;--c-diff-add-text: 30 120 78;--c-diff-remove: 252 230 232;--c-diff-remove-text: 188 50 64;--c-success: 22 128 84;--c-warning: 176 110 20;--c-danger: 196 48 48;--glass-bg: 255 255 255;--body-wash-1: transparent;--body-wash-2: transparent}html,body,#root{height:100%}body{--tw-bg-opacity: 1;background-color:rgb(var(--c-canvas) / var(--tw-bg-opacity, 1));font-family:Inter,system-ui,-apple-system,Segoe UI,sans-serif;--tw-text-opacity: 1;color:rgb(var(--c-content-primary) / var(--tw-text-opacity, 1));-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;background-image:radial-gradient(120% 80% at 50% -10%,var(--body-wash-1),transparent 60%),radial-gradient(100% 60% at 100% 100%,var(--body-wash-2),transparent 55%);background-attachment:fixed}::-moz-selection{background:rgb(var(--c-accent) / .25)}::selection{background:rgb(var(--c-accent) / .25)}*{scrollbar-width:thin;scrollbar-color:rgb(var(--c-border-strong)) transparent}*::-webkit-scrollbar{width:8px;height:8px}*::-webkit-scrollbar-thumb{background:rgb(var(--c-border-strong));border-radius:9999px;border:2px solid transparent;background-clip:content-box}*::-webkit-scrollbar-thumb:hover{background:rgb(var(--c-content-faint));background-clip:content-box}*::-webkit-scrollbar-track{background:transparent}.container{width:100%}@media(min-width:640px){.container{max-width:640px}}@media(min-width:768px){.container{max-width:768px}}@media(min-width:1024px){.container{max-width:1024px}}@media(min-width:1280px){.container{max-width:1280px}}@media(min-width:1536px){.container{max-width:1536px}}.codex-card{border-radius:.75rem;border-width:1px;--tw-border-opacity: 1;border-color:rgb(var(--c-border) / var(--tw-border-opacity, 1));--tw-bg-opacity: 1;background-color:rgb(var(--c-surface) / var(--tw-bg-opacity, 1));box-shadow:0 1px rgb(var(--c-content-primary) / .03) inset,0 1px 2px #0000002e}.codex-card-raised{border-radius:.75rem;border-width:1px;--tw-border-opacity: 1;border-color:rgb(var(--c-border) / var(--tw-border-opacity, 1));--tw-bg-opacity: 1;background-color:rgb(var(--c-surface-raised) / var(--tw-bg-opacity, 1));box-shadow:0 1px rgb(var(--c-content-primary) / .04) inset,0 8px 28px -8px #00000047}.glass-bar{background:rgb(var(--glass-bg) / .6);backdrop-filter:saturate(140%) blur(12px);-webkit-backdrop-filter:saturate(140%) blur(12px)}.codex-input{width:100%;border-radius:.75rem;border-width:1px;--tw-border-opacity: 1;border-color:rgb(var(--c-border) / var(--tw-border-opacity, 1));--tw-bg-opacity: 1;background-color:rgb(var(--c-surface-raised) / var(--tw-bg-opacity, 1));padding:.625rem .875rem;font-size:.875rem;line-height:1.25rem;--tw-text-opacity: 1;color:rgb(var(--c-content-primary) / var(--tw-text-opacity, 1))}.codex-input::-moz-placeholder{--tw-placeholder-opacity: 1;color:rgb(var(--c-content-muted) / var(--tw-placeholder-opacity, 1))}.codex-input::placeholder{--tw-placeholder-opacity: 1;color:rgb(var(--c-content-muted) / var(--tw-placeholder-opacity, 1))}.codex-input{outline:2px solid transparent;outline-offset:2px;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.codex-input:focus{--tw-border-opacity: 1;border-color:rgb(var(--c-accent-dim) / var(--tw-border-opacity, 1));--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000);--tw-ring-color: rgb(var(--c-accent) / .2)}.codex-btn-primary{display:inline-flex;height:2.25rem;cursor:pointer;align-items:center;justify-content:center;gap:.375rem;border-radius:.5rem;padding-left:.875rem;padding-right:.875rem;font-size:.875rem;line-height:1.25rem;font-weight:500;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.codex-btn-primary:focus-visible{outline:2px solid transparent;outline-offset:2px;--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000);--tw-ring-color: rgb(var(--c-accent) / .4)}.codex-btn-primary:disabled{pointer-events:none;opacity:.4}.codex-btn-primary{--tw-bg-opacity: 1;background-color:rgb(var(--c-accent-dim) / var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.codex-btn-primary:hover{--tw-bg-opacity: 1;background-color:rgb(var(--c-accent) / var(--tw-bg-opacity, 1))}.codex-btn-primary{box-shadow:0 1px 2px #0000001f}.codex-btn-ghost{display:inline-flex;height:2.25rem;cursor:pointer;align-items:center;justify-content:center;gap:.375rem;border-radius:.5rem;padding-left:.875rem;padding-right:.875rem;font-size:.875rem;line-height:1.25rem;font-weight:500;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.codex-btn-ghost:focus-visible{outline:2px solid transparent;outline-offset:2px;--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000);--tw-ring-color: rgb(var(--c-accent) / .4)}.codex-btn-ghost:disabled{pointer-events:none;opacity:.4}.codex-btn-ghost{--tw-text-opacity: 1;color:rgb(var(--c-content-secondary) / var(--tw-text-opacity, 1))}.codex-btn-ghost:hover{--tw-bg-opacity: 1;background-color:rgb(var(--c-surface-overlay) / var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(var(--c-content-primary) / var(--tw-text-opacity, 1))}.codex-btn-outline{display:inline-flex;height:2.25rem;cursor:pointer;align-items:center;justify-content:center;gap:.375rem;border-radius:.5rem;padding-left:.875rem;padding-right:.875rem;font-size:.875rem;line-height:1.25rem;font-weight:500;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.codex-btn-outline:focus-visible{outline:2px solid transparent;outline-offset:2px;--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000);--tw-ring-color: rgb(var(--c-accent) / .4)}.codex-btn-outline:disabled{pointer-events:none;opacity:.4}.codex-btn-outline{border-width:1px;--tw-border-opacity: 1;border-color:rgb(var(--c-border) / var(--tw-border-opacity, 1));--tw-bg-opacity: 1;background-color:rgb(var(--c-surface) / var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(var(--c-content-secondary) / var(--tw-text-opacity, 1))}.codex-btn-outline:hover{--tw-border-opacity: 1;border-color:rgb(var(--c-border-strong) / var(--tw-border-opacity, 1));--tw-bg-opacity: 1;background-color:rgb(var(--c-surface-overlay) / var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(var(--c-content-primary) / var(--tw-text-opacity, 1))}.tree-row{display:flex;width:100%;cursor:pointer;align-items:center;gap:.625rem;border-radius:.5rem;padding:.5rem .75rem;text-align:left;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.tree-row:hover{--tw-bg-opacity: 1;background-color:rgb(var(--c-surface-overlay) / var(--tw-bg-opacity, 1))}.tree-row-active{--tw-bg-opacity: 1;background-color:rgb(var(--c-surface-overlay) / var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(var(--c-content-primary) / var(--tw-text-opacity, 1))}.codex-chip{display:inline-flex;align-items:center;gap:.25rem;border-radius:9999px;border-width:1px;--tw-border-opacity: 1;border-color:rgb(var(--c-border) / var(--tw-border-opacity, 1));--tw-bg-opacity: 1;background-color:rgb(var(--c-surface-raised) / var(--tw-bg-opacity, 1));padding:.125rem .5rem;font-family:JetBrains Mono,ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:.6875rem;line-height:1rem;--tw-text-opacity: 1;color:rgb(var(--c-content-secondary) / var(--tw-text-opacity, 1))}.xterm-host,.xterm-host .xterm,.xterm-host .xterm-viewport{height:100%;width:100%}.pointer-events-none{pointer-events:none}.pointer-events-auto{pointer-events:auto}.visible{visibility:visible}.collapse{visibility:collapse}.static{position:static}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.sticky{position:sticky}.inset-0{top:0;right:0;bottom:0;left:0}.inset-y-0{top:0;bottom:0}.-right-1\.5{right:-.375rem}.-top-1\.5{top:-.375rem}.bottom-4{bottom:1rem}.bottom-full{bottom:100%}.left-0{left:0}.right-0{right:0}.right-1\.5{right:.375rem}.right-2{right:.5rem}.right-4{right:1rem}.top-0{top:0}.top-1\.5{top:.375rem}.top-2{top:.5rem}.top-9{top:2.25rem}.z-10{z-index:10}.z-20{z-index:20}.z-30{z-index:30}.z-40{z-index:40}.z-50{z-index:50}.z-\[60\]{z-index:60}.mx-1{margin-left:.25rem;margin-right:.25rem}.mx-4{margin-left:1rem;margin-right:1rem}.mx-auto{margin-left:auto;margin-right:auto}.my-2{margin-top:.5rem;margin-bottom:.5rem}.my-3{margin-top:.75rem;margin-bottom:.75rem}.-mt-1{margin-top:-.25rem}.mb-1{margin-bottom:.25rem}.mb-1\.5{margin-bottom:.375rem}.mb-2{margin-bottom:.5rem}.mb-3{margin-bottom:.75rem}.mb-4{margin-bottom:1rem}.ml-1{margin-left:.25rem}.ml-2{margin-left:.5rem}.ml-auto{margin-left:auto}.mr-2{margin-right:.5rem}.mt-0\.5{margin-top:.125rem}.mt-1{margin-top:.25rem}.mt-1\.5{margin-top:.375rem}.mt-10{margin-top:2.5rem}.mt-2{margin-top:.5rem}.mt-2\.5{margin-top:.625rem}.mt-3{margin-top:.75rem}.line-clamp-1{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:1}.block{display:block}.inline-block{display:inline-block}.inline{display:inline}.flex{display:flex}.inline-flex{display:inline-flex}.grid{display:grid}.hidden{display:none}.h-1{height:.25rem}.h-1\.5{height:.375rem}.h-12{height:3rem}.h-14{height:3.5rem}.h-2{height:.5rem}.h-2\.5{height:.625rem}.h-3{height:.75rem}.h-4{height:1rem}.h-5{height:1.25rem}.h-6{height:1.5rem}.h-7{height:1.75rem}.h-8{height:2rem}.h-\[100dvh\]{height:100dvh}.h-full{height:100%}.h-px{height:1px}.max-h-32{max-height:8rem}.max-h-40{max-height:10rem}.max-h-48{max-height:12rem}.max-h-60{max-height:15rem}.max-h-72{max-height:18rem}.max-h-\[50vh\]{max-height:50vh}.max-h-\[80vh\]{max-height:80vh}.min-h-0{min-height:0px}.min-h-screen{min-height:100vh}.w-1{width:.25rem}.w-1\.5{width:.375rem}.w-12{width:3rem}.w-14{width:3.5rem}.w-2\.5{width:.625rem}.w-28{width:7rem}.w-3{width:.75rem}.w-36{width:9rem}.w-4{width:1rem}.w-5{width:1.25rem}.w-6{width:1.5rem}.w-7{width:1.75rem}.w-8{width:2rem}.w-80{width:20rem}.w-9{width:2.25rem}.w-\[390px\]{width:390px}.w-\[82\%\]{width:82%}.w-full{width:100%}.min-w-0{min-width:0px}.min-w-\[8rem\]{min-width:8rem}.max-w-3xl{max-width:48rem}.max-w-5xl{max-width:64rem}.max-w-\[200px\]{max-width:200px}.max-w-\[46rem\]{max-width:46rem}.max-w-\[7rem\]{max-width:7rem}.max-w-\[85\%\]{max-width:85%}.max-w-full{max-width:100%}.max-w-lg{max-width:32rem}.max-w-sm{max-width:24rem}.max-w-xl{max-width:36rem}.max-w-xs{max-width:20rem}.flex-1{flex:1 1 0%}.shrink-0{flex-shrink:0}.basis-full{flex-basis:100%}.rotate-180{--tw-rotate: 180deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes drawer-in{0%{transform:translate(-100%)}to{transform:translate(0)}}.animate-drawer-in{animation:drawer-in .24s cubic-bezier(.16,1,.3,1)}@keyframes fade-in{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:translateY(0)}}.animate-fade-in{animation:fade-in .2s ease-out}@keyframes panel-in-right{0%{opacity:0;transform:translate(30px)}to{opacity:1;transform:translate(0)}}.animate-panel-in-right{animation:panel-in-right .22s cubic-bezier(.16,1,.3,1) both}@keyframes panel-in-up{0%{opacity:0;transform:translateY(100%)}to{opacity:1;transform:translateY(0)}}.animate-panel-in-up{animation:panel-in-up .24s cubic-bezier(.16,1,.3,1) both}@keyframes panel-out-down{0%{opacity:1;transform:translateY(0)}to{opacity:0;transform:translateY(100%)}}.animate-panel-out-down{animation:panel-out-down .24s cubic-bezier(.16,1,.3,1) both}@keyframes panel-out-right{0%{opacity:1;transform:translate(0)}to{opacity:0;transform:translate(30px)}}.animate-panel-out-right{animation:panel-out-right .22s cubic-bezier(.16,1,.3,1) both}@keyframes pulse-dot{0%,to{opacity:.4}50%{opacity:1}}.animate-pulse-dot{animation:pulse-dot 1.2s ease-in-out infinite}@keyframes slide-in{0%{opacity:0;transform:translate(8px)}to{opacity:1;transform:translate(0)}}.animate-slide-in{animation:slide-in .22s cubic-bezier(.16,1,.3,1)}@keyframes spin{to{transform:rotate(360deg)}}.animate-spin{animation:spin 1s linear infinite}.cursor-col-resize{cursor:col-resize}.cursor-crosshair{cursor:crosshair}.cursor-default{cursor:default}.cursor-pointer{cursor:pointer}.cursor-row-resize{cursor:row-resize}.select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.resize-none{resize:none}.resize{resize:both}.list-decimal{list-style-type:decimal}.list-disc{list-style-type:disc}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-start{align-items:flex-start}.items-end{align-items:flex-end}.items-center{align-items:center}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-0\.5{gap:.125rem}.gap-1{gap:.25rem}.gap-1\.5{gap:.375rem}.gap-2{gap:.5rem}.gap-2\.5{gap:.625rem}.gap-3{gap:.75rem}.gap-4{gap:1rem}.gap-6{gap:1.5rem}.gap-x-2{-moz-column-gap:.5rem;column-gap:.5rem}.gap-y-1\.5{row-gap:.375rem}.space-y-0\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.125rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.125rem * var(--tw-space-y-reverse))}.space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.25rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.25rem * var(--tw-space-y-reverse))}.space-y-1\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.375rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.375rem * var(--tw-space-y-reverse))}.space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.5rem * var(--tw-space-y-reverse))}.space-y-3>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.75rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.75rem * var(--tw-space-y-reverse))}.space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem * var(--tw-space-y-reverse))}.space-y-5>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1.25rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.25rem * var(--tw-space-y-reverse))}.space-y-6>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.5rem * var(--tw-space-y-reverse))}.divide-x>:not([hidden])~:not([hidden]){--tw-divide-x-reverse: 0;border-right-width:calc(1px * var(--tw-divide-x-reverse));border-left-width:calc(1px * calc(1 - var(--tw-divide-x-reverse)))}.divide-border>:not([hidden])~:not([hidden]){--tw-divide-opacity: 1;border-color:rgb(var(--c-border) / var(--tw-divide-opacity, 1))}.self-start{align-self:flex-start}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.overflow-x-hidden{overflow-x:hidden}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.whitespace-nowrap{white-space:nowrap}.whitespace-pre{white-space:pre}.whitespace-pre-wrap{white-space:pre-wrap}.break-words{overflow-wrap:break-word}.break-all{word-break:break-all}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:1rem}.rounded-\[3px\]{border-radius:3px}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:.5rem}.rounded-md{border-radius:.375rem}.rounded-sm{border-radius:.125rem}.rounded-xl{border-radius:.75rem}.border{border-width:1px}.border-2{border-width:2px}.border-x{border-left-width:1px;border-right-width:1px}.border-b{border-bottom-width:1px}.border-l{border-left-width:1px}.border-r{border-right-width:1px}.border-t{border-top-width:1px}.border-accent{--tw-border-opacity: 1;border-color:rgb(var(--c-accent) / var(--tw-border-opacity, 1))}.border-accent-dim\/40{border-color:rgb(var(--c-accent-dim) / .4)}.border-accent\/30{border-color:rgb(var(--c-accent) / .3)}.border-border{--tw-border-opacity: 1;border-color:rgb(var(--c-border) / var(--tw-border-opacity, 1))}.border-border-strong{--tw-border-opacity: 1;border-color:rgb(var(--c-border-strong) / var(--tw-border-opacity, 1))}.border-content-faint{--tw-border-opacity: 1;border-color:rgb(var(--c-content-faint) / var(--tw-border-opacity, 1))}.border-danger\/30{border-color:rgb(var(--c-danger) / .3)}.border-danger\/40{border-color:rgb(var(--c-danger) / .4)}.border-success\/30{border-color:rgb(var(--c-success) / .3)}.border-warning\/40{border-color:rgb(var(--c-warning) / .4)}.border-t-accent{--tw-border-opacity: 1;border-top-color:rgb(var(--c-accent) / var(--tw-border-opacity, 1))}.bg-accent{--tw-bg-opacity: 1;background-color:rgb(var(--c-accent) / var(--tw-bg-opacity, 1))}.bg-accent-dim{--tw-bg-opacity: 1;background-color:rgb(var(--c-accent-dim) / var(--tw-bg-opacity, 1))}.bg-accent\/10{background-color:rgb(var(--c-accent) / .1)}.bg-black\/60{background-color:#0009}.bg-border{--tw-bg-opacity: 1;background-color:rgb(var(--c-border) / var(--tw-bg-opacity, 1))}.bg-canvas{--tw-bg-opacity: 1;background-color:rgb(var(--c-canvas) / var(--tw-bg-opacity, 1))}.bg-canvas\/60{background-color:rgb(var(--c-canvas) / .6)}.bg-canvas\/80{background-color:rgb(var(--c-canvas) / .8)}.bg-canvas\/95{background-color:rgb(var(--c-canvas) / .95)}.bg-content-faint{--tw-bg-opacity: 1;background-color:rgb(var(--c-content-faint) / var(--tw-bg-opacity, 1))}.bg-current{background-color:currentColor}.bg-danger{--tw-bg-opacity: 1;background-color:rgb(var(--c-danger) / var(--tw-bg-opacity, 1))}.bg-danger\/10{background-color:rgb(var(--c-danger) / .1)}.bg-diff-add{--tw-bg-opacity: 1;background-color:rgb(var(--c-diff-add) / var(--tw-bg-opacity, 1))}.bg-diff-remove{--tw-bg-opacity: 1;background-color:rgb(var(--c-diff-remove) / var(--tw-bg-opacity, 1))}.bg-success{--tw-bg-opacity: 1;background-color:rgb(var(--c-success) / var(--tw-bg-opacity, 1))}.bg-success\/10{background-color:rgb(var(--c-success) / .1)}.bg-surface{--tw-bg-opacity: 1;background-color:rgb(var(--c-surface) / var(--tw-bg-opacity, 1))}.bg-surface-overlay{--tw-bg-opacity: 1;background-color:rgb(var(--c-surface-overlay) / var(--tw-bg-opacity, 1))}.bg-surface-raised{--tw-bg-opacity: 1;background-color:rgb(var(--c-surface-raised) / var(--tw-bg-opacity, 1))}.bg-surface-raised\/60{background-color:rgb(var(--c-surface-raised) / .6)}.bg-transparent{background-color:transparent}.bg-warning{--tw-bg-opacity: 1;background-color:rgb(var(--c-warning) / var(--tw-bg-opacity, 1))}.bg-warning\/10{background-color:rgb(var(--c-warning) / .1)}.bg-warning\/15{background-color:rgb(var(--c-warning) / .15)}.bg-warning\/30{background-color:rgb(var(--c-warning) / .3)}.bg-white{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1))}.object-contain{-o-object-fit:contain;object-fit:contain}.object-cover{-o-object-fit:cover;object-fit:cover}.p-0\.5{padding:.125rem}.p-1{padding:.25rem}.p-1\.5{padding:.375rem}.p-2{padding:.5rem}.p-3{padding:.75rem}.p-3\.5{padding:.875rem}.p-4{padding:1rem}.p-5{padding:1.25rem}.px-0{padding-left:0;padding-right:0}.px-0\.5{padding-left:.125rem;padding-right:.125rem}.px-1{padding-left:.25rem;padding-right:.25rem}.px-1\.5{padding-left:.375rem;padding-right:.375rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-2\.5{padding-left:.625rem;padding-right:.625rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-3\.5{padding-left:.875rem;padding-right:.875rem}.px-4{padding-left:1rem;padding-right:1rem}.px-5{padding-left:1.25rem;padding-right:1.25rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.py-0\.5{padding-top:.125rem;padding-bottom:.125rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-1\.5{padding-top:.375rem;padding-bottom:.375rem}.py-10{padding-top:2.5rem;padding-bottom:2.5rem}.py-12{padding-top:3rem;padding-bottom:3rem}.py-16{padding-top:4rem;padding-bottom:4rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-2\.5{padding-top:.625rem;padding-bottom:.625rem}.py-20{padding-top:5rem;padding-bottom:5rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.py-4{padding-top:1rem;padding-bottom:1rem}.py-6{padding-top:1.5rem;padding-bottom:1.5rem}.py-8{padding-top:2rem;padding-bottom:2rem}.pb-1{padding-bottom:.25rem}.pb-2{padding-bottom:.5rem}.pb-3{padding-bottom:.75rem}.pb-4{padding-bottom:1rem}.pl-1{padding-left:.25rem}.pl-2{padding-left:.5rem}.pl-3{padding-left:.75rem}.pl-4{padding-left:1rem}.pl-5{padding-left:1.25rem}.pl-7{padding-left:1.75rem}.pr-1{padding-right:.25rem}.pr-3{padding-right:.75rem}.pr-9{padding-right:2.25rem}.pt-1\.5{padding-top:.375rem}.pt-2{padding-top:.5rem}.pt-2\.5{padding-top:.625rem}.pt-\[12vh\]{padding-top:12vh}.text-left{text-align:left}.text-center{text-align:center}.text-right{text-align:right}.font-mono{font-family:JetBrains Mono,ui-monospace,SFMono-Regular,Menlo,Consolas,monospace}.text-2xs{font-size:.6875rem;line-height:1rem}.text-\[10px\]{font-size:10px}.text-\[13px\]{font-size:13px}.text-\[15px\]{font-size:15px}.text-base{font-size:1rem;line-height:1.5rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-xs{font-size:.75rem;line-height:1rem}.font-bold{font-weight:700}.font-medium{font-weight:500}.font-normal{font-weight:400}.font-semibold{font-weight:600}.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)}.leading-6{line-height:1.5rem}.leading-7{line-height:1.75rem}.leading-\[1\.6\]{line-height:1.6}.leading-relaxed{line-height:1.625}.tracking-wide{letter-spacing:.025em}.tracking-wider{letter-spacing:.05em}.tracking-widest{letter-spacing:.1em}.text-accent{--tw-text-opacity: 1;color:rgb(var(--c-accent) / var(--tw-text-opacity, 1))}.text-accent-dim{--tw-text-opacity: 1;color:rgb(var(--c-accent-dim) / var(--tw-text-opacity, 1))}.text-content-faint{--tw-text-opacity: 1;color:rgb(var(--c-content-faint) / var(--tw-text-opacity, 1))}.text-content-muted{--tw-text-opacity: 1;color:rgb(var(--c-content-muted) / var(--tw-text-opacity, 1))}.text-content-primary{--tw-text-opacity: 1;color:rgb(var(--c-content-primary) / var(--tw-text-opacity, 1))}.text-content-secondary{--tw-text-opacity: 1;color:rgb(var(--c-content-secondary) / var(--tw-text-opacity, 1))}.text-danger{--tw-text-opacity: 1;color:rgb(var(--c-danger) / var(--tw-text-opacity, 1))}.text-diff-addText{--tw-text-opacity: 1;color:rgb(var(--c-diff-add-text) / var(--tw-text-opacity, 1))}.text-diff-removeText{--tw-text-opacity: 1;color:rgb(var(--c-diff-remove-text) / var(--tw-text-opacity, 1))}.text-success{--tw-text-opacity: 1;color:rgb(var(--c-success) / var(--tw-text-opacity, 1))}.text-warning{--tw-text-opacity: 1;color:rgb(var(--c-warning) / var(--tw-text-opacity, 1))}.text-white{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.underline{text-decoration-line:underline}.line-through{text-decoration-line:line-through}.underline-offset-2{text-underline-offset:2px}.placeholder-content-muted::-moz-placeholder{--tw-placeholder-opacity: 1;color:rgb(var(--c-content-muted) / var(--tw-placeholder-opacity, 1))}.placeholder-content-muted::placeholder{--tw-placeholder-opacity: 1;color:rgb(var(--c-content-muted) / var(--tw-placeholder-opacity, 1))}.opacity-0{opacity:0}.opacity-100{opacity:1}.opacity-40{opacity:.4}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.opacity-70{opacity:.7}.shadow-2xl{--tw-shadow: 0 25px 50px -12px rgb(0 0 0 / .25);--tw-shadow-colored: 0 25px 50px -12px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-sm{--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-xl{--tw-shadow: 0 20px 25px -5px rgb(0 0 0 / .1), 0 8px 10px -6px rgb(0 0 0 / .1);--tw-shadow-colored: 0 20px 25px -5px var(--tw-shadow-color), 0 8px 10px -6px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.outline-none{outline:2px solid transparent;outline-offset:2px}.blur{--tw-blur: blur(8px);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)}.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(4px);-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,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-opacity{transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-transform{transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.duration-150{transition-duration:.15s}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important;scroll-behavior:auto!important}}@media(hover:none)and (pointer:coarse){[class*="group-hover:opacity-100"]{opacity:1!important}}.focus-within\:border-border-strong:focus-within{--tw-border-opacity: 1;border-color:rgb(var(--c-border-strong) / var(--tw-border-opacity, 1))}.hover\:border-border-strong:hover{--tw-border-opacity: 1;border-color:rgb(var(--c-border-strong) / var(--tw-border-opacity, 1))}.hover\:border-danger:hover{--tw-border-opacity: 1;border-color:rgb(var(--c-danger) / var(--tw-border-opacity, 1))}.hover\:bg-accent:hover{--tw-bg-opacity: 1;background-color:rgb(var(--c-accent) / var(--tw-bg-opacity, 1))}.hover\:bg-accent-dim\/50:hover{background-color:rgb(var(--c-accent-dim) / .5)}.hover\:bg-danger\/10:hover{background-color:rgb(var(--c-danger) / .1)}.hover\:bg-surface-overlay:hover{--tw-bg-opacity: 1;background-color:rgb(var(--c-surface-overlay) / var(--tw-bg-opacity, 1))}.hover\:bg-surface-overlay\/60:hover{background-color:rgb(var(--c-surface-overlay) / .6)}.hover\:bg-surface-raised:hover{--tw-bg-opacity: 1;background-color:rgb(var(--c-surface-raised) / var(--tw-bg-opacity, 1))}.hover\:text-accent:hover{--tw-text-opacity: 1;color:rgb(var(--c-accent) / var(--tw-text-opacity, 1))}.hover\:text-content-primary:hover{--tw-text-opacity: 1;color:rgb(var(--c-content-primary) / var(--tw-text-opacity, 1))}.hover\:text-content-secondary:hover{--tw-text-opacity: 1;color:rgb(var(--c-content-secondary) / var(--tw-text-opacity, 1))}.hover\:text-danger:hover{--tw-text-opacity: 1;color:rgb(var(--c-danger) / var(--tw-text-opacity, 1))}.focus\:border-accent-dim:focus{--tw-border-opacity: 1;border-color:rgb(var(--c-accent-dim) / var(--tw-border-opacity, 1))}.disabled\:cursor-default:disabled{cursor:default}.disabled\:bg-surface-overlay:disabled{--tw-bg-opacity: 1;background-color:rgb(var(--c-surface-overlay) / var(--tw-bg-opacity, 1))}.disabled\:text-content-faint:disabled{--tw-text-opacity: 1;color:rgb(var(--c-content-faint) / var(--tw-text-opacity, 1))}.disabled\:opacity-40:disabled{opacity:.4}.group\/code:hover .group-hover\/code\:opacity-100,.group\/out:hover .group-hover\/out\:opacity-100,.group:hover .group-hover\:opacity-100{opacity:1}@media(min-width:640px){.sm\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.sm\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.sm\:gap-3{gap:.75rem}.sm\:px-6{padding-left:1.5rem;padding-right:1.5rem}}@media(min-width:768px){.md\:text-\[15px\]{font-size:15px}}