@ls-stack/agent-eval 0.10.0 → 0.12.0

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.
@@ -3619,8 +3619,12 @@ const llmCallMetricFormatSchema = z.enum([
3619
3619
  "json",
3620
3620
  "boolean"
3621
3621
  ]);
3622
+ /** Render formats supported by an API-call metric in the UI. */
3623
+ const apiCallMetricFormatSchema = llmCallMetricFormatSchema;
3622
3624
  /** Where an LLM-call metric is rendered inside the LLM calls tab. */
3623
3625
  const llmCallMetricPlacementSchema = z.enum(["header", "body"]);
3626
+ /** Where an API-call metric is rendered inside the API calls tab. */
3627
+ const apiCallMetricPlacementSchema = llmCallMetricPlacementSchema;
3624
3628
  /**
3625
3629
  * Schema for a single user-defined metric attached to LLM call rows.
3626
3630
  *
@@ -3650,6 +3654,34 @@ const llmCallMetricSchema = z.object({
3650
3654
  */
3651
3655
  placements: z.array(llmCallMetricPlacementSchema).nonempty().optional()
3652
3656
  });
3657
+ /**
3658
+ * Schema for a single user-defined metric attached to API call rows.
3659
+ *
3660
+ * Each metric reads `path` from the span's `attributes` and renders the value
3661
+ * with the configured `format` and `numberFormat`. `placements` controls
3662
+ * whether the metric appears as a chip on the collapsed row header, as a row
3663
+ * inside the expanded body, or both. Defaults to `['body']` when omitted.
3664
+ */
3665
+ const apiCallMetricSchema = z.object({
3666
+ /** Display label for the metric row or header chip. */
3667
+ label: z.string().min(1),
3668
+ /**
3669
+ * Optional hover tooltip shown on the metric. Useful when `label` is a
3670
+ * compact abbreviation and the full meaning needs to be surfaced on hover.
3671
+ */
3672
+ tooltip: z.string().min(1).optional(),
3673
+ /** Dot-path inside `span.attributes` used to read the value. */
3674
+ path: z.string().min(1),
3675
+ /** Render hint applied to the resolved value. Defaults to `'string'`. */
3676
+ format: apiCallMetricFormatSchema.optional(),
3677
+ /** Number presentation options applied when `format: 'number'`. */
3678
+ numberFormat: numberDisplayOptionsSchema.optional(),
3679
+ /**
3680
+ * Where the metric should appear in the API calls tab. Defaults to
3681
+ * `['body']` so metrics surface inside the expanded detail view only.
3682
+ */
3683
+ placements: z.array(apiCallMetricPlacementSchema).nonempty().optional()
3684
+ });
3653
3685
  /** Schema for the global LLM calls config block in `agent-evals.config.ts`. */
3654
3686
  const llmCallsConfigSchema = z.object({
3655
3687
  /** Span kinds treated as LLM calls. Defaults to `['llm']`. */
@@ -3688,6 +3720,30 @@ const llmCallsConfigSchema = z.object({
3688
3720
  /** Custom user-defined metrics surfaced on each LLM call. */
3689
3721
  metrics: z.array(llmCallMetricSchema).optional()
3690
3722
  });
3723
+ /** Schema for the global API calls config block in `agent-evals.config.ts`. */
3724
+ const apiCallsConfigSchema = z.object({
3725
+ /** Span kinds treated as API calls. Defaults to common API/HTTP kinds. */
3726
+ kinds: z.array(z.string().min(1)).optional(),
3727
+ /**
3728
+ * Attribute paths used to extract structured per-call fields. Each entry is
3729
+ * a dot-path inside `span.attributes`. Missing paths fall back to the
3730
+ * built-in defaults such as `method`, `url`, and `statusCode`.
3731
+ */
3732
+ attributes: z.object({
3733
+ method: z.string().optional(),
3734
+ url: z.string().optional(),
3735
+ statusCode: z.string().optional(),
3736
+ request: z.string().optional(),
3737
+ response: z.string().optional(),
3738
+ requestBody: z.string().optional(),
3739
+ responseBody: z.string().optional(),
3740
+ headers: z.string().optional(),
3741
+ durationMs: z.string().optional(),
3742
+ error: z.string().optional()
3743
+ }).optional(),
3744
+ /** Custom user-defined metrics surfaced on each API call. */
3745
+ metrics: z.array(apiCallMetricSchema).optional()
3746
+ });
3691
3747
  /** Default LLM-calls config the UI uses before the workspace fetch resolves. */
3692
3748
  const DEFAULT_LLM_CALLS_CONFIG = {
3693
3749
  kinds: ["llm"],
@@ -3715,6 +3771,28 @@ const DEFAULT_LLM_CALLS_CONFIG = {
3715
3771
  },
3716
3772
  metrics: []
3717
3773
  };
3774
+ /** Default API-calls config the UI uses before the workspace fetch resolves. */
3775
+ const DEFAULT_API_CALLS_CONFIG = {
3776
+ kinds: [
3777
+ "api",
3778
+ "http",
3779
+ "http.client",
3780
+ "fetch"
3781
+ ],
3782
+ attributes: {
3783
+ method: "method",
3784
+ url: "url",
3785
+ statusCode: "statusCode",
3786
+ request: "request",
3787
+ response: "response",
3788
+ requestBody: "requestBody",
3789
+ responseBody: "responseBody",
3790
+ headers: "headers",
3791
+ durationMs: "durationMs",
3792
+ error: "error"
3793
+ },
3794
+ metrics: []
3795
+ };
3718
3796
  /**
3719
3797
  * Resolve the user-authored LLM-calls config to a fully-defaulted shape used
3720
3798
  * by the UI to derive the LLM calls tab.
@@ -3742,6 +3820,33 @@ function resolveLlmCallsConfig(input) {
3742
3820
  }))
3743
3821
  };
3744
3822
  }
3823
+ /**
3824
+ * Resolve the user-authored API-calls config to a fully-defaulted shape used
3825
+ * by the UI to derive the API calls tab.
3826
+ *
3827
+ * - Missing or empty `kinds` falls back to common API/HTTP span kinds.
3828
+ * - Missing `attributes.<field>` falls back to the corresponding default
3829
+ * attribute path.
3830
+ * - Missing `metrics[].format` defaults to `'string'`.
3831
+ * - Missing `metrics[].placements` defaults to `['body']`.
3832
+ */
3833
+ function resolveApiCallsConfig(input) {
3834
+ return {
3835
+ kinds: input?.kinds && input.kinds.length > 0 ? [...input.kinds] : [...DEFAULT_API_CALLS_CONFIG.kinds],
3836
+ attributes: {
3837
+ ...DEFAULT_API_CALLS_CONFIG.attributes,
3838
+ ...input?.attributes
3839
+ },
3840
+ metrics: (input?.metrics ?? []).map((m) => ({
3841
+ label: m.label,
3842
+ tooltip: m.tooltip,
3843
+ path: m.path,
3844
+ format: m.format ?? "string",
3845
+ numberFormat: m.numberFormat,
3846
+ placements: m.placements ? [...m.placements] : ["body"]
3847
+ }))
3848
+ };
3849
+ }
3745
3850
  /** Zod schema for validating `agent-evals.config.ts` input. */
3746
3851
  const agentEvalsConfigSchema = z.object({
3747
3852
  workspaceRoot: z.string().optional(),
@@ -3752,6 +3857,7 @@ const agentEvalsConfigSchema = z.object({
3752
3857
  staleAfterDays: z.number().optional(),
3753
3858
  traceDisplay: traceDisplayInputConfigSchema.optional(),
3754
3859
  llmCalls: llmCallsConfigSchema.optional(),
3860
+ apiCalls: apiCallsConfigSchema.optional(),
3755
3861
  cache: z.object({
3756
3862
  enabled: z.boolean().optional(),
3757
3863
  dir: z.string().optional(),
@@ -3977,15 +4083,15 @@ function getNestedAttribute(value, path) {
3977
4083
  }
3978
4084
  //#endregion
3979
4085
  //#region ../shared/src/utils/extractLlmCalls.ts
3980
- function readNumber$1(attributes, path) {
4086
+ function readNumber$2(attributes, path) {
3981
4087
  const raw = getNestedAttribute(attributes, path);
3982
4088
  return typeof raw === "number" && Number.isFinite(raw) ? raw : null;
3983
4089
  }
3984
- function readString$1(attributes, path) {
4090
+ function readString$2(attributes, path) {
3985
4091
  const raw = getNestedAttribute(attributes, path);
3986
4092
  return typeof raw === "string" && raw.length > 0 ? raw : null;
3987
4093
  }
3988
- function computeLatencyMs(span) {
4094
+ function computeLatencyMs$1(span) {
3989
4095
  if (span.endedAt === null) return null;
3990
4096
  const started = Date.parse(span.startedAt);
3991
4097
  const ended = Date.parse(span.endedAt);
@@ -4013,13 +4119,13 @@ function readSteps(attributes, path) {
4013
4119
  stepDetails: null
4014
4120
  };
4015
4121
  }
4016
- function collectWarnings(span) {
4122
+ function collectWarnings$1(span) {
4017
4123
  const out = [];
4018
4124
  if (span.warning) out.push(span.warning);
4019
4125
  if (span.warnings) out.push(...span.warnings);
4020
4126
  return out;
4021
4127
  }
4022
- function pickError(span) {
4128
+ function pickError$1(span) {
4023
4129
  if (span.error) return span.error;
4024
4130
  if (span.errors && span.errors.length > 0) return span.errors[0] ?? null;
4025
4131
  return null;
@@ -4047,12 +4153,12 @@ function extractLlmCalls(spans, config) {
4047
4153
  for (const span of spans) {
4048
4154
  if (!kindSet.has(span.kind)) continue;
4049
4155
  const attrs = span.attributes;
4050
- const inputTokens = readNumber$1(attrs, config.attributes.inputTokens);
4051
- const outputTokens = readNumber$1(attrs, config.attributes.outputTokens);
4052
- const cachedInputTokens = readNumber$1(attrs, config.attributes.cachedInputTokens);
4053
- const cacheCreationInputTokens = readNumber$1(attrs, config.attributes.cacheCreationInputTokens);
4054
- const reasoningTokens = readNumber$1(attrs, config.attributes.reasoningTokens);
4055
- const declaredTotalTokens = readNumber$1(attrs, config.attributes.totalTokens);
4156
+ const inputTokens = readNumber$2(attrs, config.attributes.inputTokens);
4157
+ const outputTokens = readNumber$2(attrs, config.attributes.outputTokens);
4158
+ const cachedInputTokens = readNumber$2(attrs, config.attributes.cachedInputTokens);
4159
+ const cacheCreationInputTokens = readNumber$2(attrs, config.attributes.cacheCreationInputTokens);
4160
+ const reasoningTokens = readNumber$2(attrs, config.attributes.reasoningTokens);
4161
+ const declaredTotalTokens = readNumber$2(attrs, config.attributes.totalTokens);
4056
4162
  const metrics = [];
4057
4163
  for (const metric of config.metrics) {
4058
4164
  const rawValue = getNestedAttribute(attrs, metric.path);
@@ -4071,8 +4177,8 @@ function extractLlmCalls(spans, config) {
4071
4177
  name: span.name,
4072
4178
  kind: span.kind,
4073
4179
  status: span.status,
4074
- model: readString$1(attrs, config.attributes.model),
4075
- provider: readString$1(attrs, config.attributes.provider),
4180
+ model: readString$2(attrs, config.attributes.model),
4181
+ provider: readString$2(attrs, config.attributes.provider),
4076
4182
  inputTokens,
4077
4183
  outputTokens,
4078
4184
  cachedInputTokens,
@@ -4085,20 +4191,105 @@ function extractLlmCalls(spans, config) {
4085
4191
  cached: cachedInputTokens,
4086
4192
  cacheCreation: cacheCreationInputTokens
4087
4193
  }),
4088
- costUsd: readNumber$1(attrs, config.attributes.cost),
4089
- inputCostUsd: readNumber$1(attrs, config.attributes.inputCost),
4090
- outputCostUsd: readNumber$1(attrs, config.attributes.outputCost),
4091
- cachedInputCostUsd: readNumber$1(attrs, config.attributes.cachedInputCost),
4092
- cacheCreationInputCostUsd: readNumber$1(attrs, config.attributes.cacheCreationInputCost),
4093
- reasoningCostUsd: readNumber$1(attrs, config.attributes.reasoningCost),
4194
+ costUsd: readNumber$2(attrs, config.attributes.cost),
4195
+ inputCostUsd: readNumber$2(attrs, config.attributes.inputCost),
4196
+ outputCostUsd: readNumber$2(attrs, config.attributes.outputCost),
4197
+ cachedInputCostUsd: readNumber$2(attrs, config.attributes.cachedInputCost),
4198
+ cacheCreationInputCostUsd: readNumber$2(attrs, config.attributes.cacheCreationInputCost),
4199
+ reasoningCostUsd: readNumber$2(attrs, config.attributes.reasoningCost),
4094
4200
  ...readSteps(attrs, config.attributes.steps),
4095
- finishReason: readString$1(attrs, config.attributes.finishReason),
4096
- latencyMs: computeLatencyMs(span),
4201
+ finishReason: readString$2(attrs, config.attributes.finishReason),
4202
+ latencyMs: computeLatencyMs$1(span),
4097
4203
  input: getNestedAttribute(attrs, config.attributes.input),
4098
4204
  output: getNestedAttribute(attrs, config.attributes.output),
4099
4205
  reasoning: getNestedAttribute(attrs, config.attributes.reasoning),
4100
4206
  toolCalls: getNestedAttribute(attrs, config.attributes.toolCalls),
4101
4207
  metrics,
4208
+ warnings: collectWarnings$1(span),
4209
+ error: pickError$1(span)
4210
+ });
4211
+ }
4212
+ return result;
4213
+ }
4214
+ //#endregion
4215
+ //#region ../shared/src/utils/extractApiCalls.ts
4216
+ function readNumber$1(attributes, path) {
4217
+ const raw = getNestedAttribute(attributes, path);
4218
+ if (typeof raw === "number" && Number.isFinite(raw)) return raw;
4219
+ if (typeof raw !== "string") return null;
4220
+ const parsed = Number(raw);
4221
+ return Number.isFinite(parsed) ? parsed : null;
4222
+ }
4223
+ function readString$1(attributes, path) {
4224
+ const raw = getNestedAttribute(attributes, path);
4225
+ return typeof raw === "string" && raw.length > 0 ? raw : null;
4226
+ }
4227
+ function computeLatencyMs(span) {
4228
+ if (span.endedAt === null) return null;
4229
+ const started = Date.parse(span.startedAt);
4230
+ const ended = Date.parse(span.endedAt);
4231
+ if (!Number.isFinite(started) || !Number.isFinite(ended)) return null;
4232
+ const delta = ended - started;
4233
+ return delta >= 0 ? delta : null;
4234
+ }
4235
+ function collectWarnings(span) {
4236
+ const out = [];
4237
+ if (span.warning) out.push(span.warning);
4238
+ if (span.warnings) out.push(...span.warnings);
4239
+ return out;
4240
+ }
4241
+ function pickError(span) {
4242
+ if (span.error) return span.error;
4243
+ if (span.errors && span.errors.length > 0) return span.errors[0] ?? null;
4244
+ return null;
4245
+ }
4246
+ /**
4247
+ * Filter `spans` down to API calls and project each one to the structured
4248
+ * shape consumed by the API calls tab.
4249
+ *
4250
+ * Spans whose `kind` is not in `config.kinds` are dropped. Structured fields
4251
+ * (`method`, `url`, `statusCode`, etc.) are read via `getNestedAttribute` from
4252
+ * the configured paths. `durationMs` takes precedence for latency, with a
4253
+ * fallback to the span start/end timestamps. User-defined `metrics` whose path
4254
+ * resolves to `undefined` are dropped, but `null`, `0`, and `false` are
4255
+ * preserved as legitimate values worth displaying. Original span order is
4256
+ * preserved so the API calls tab matches the ordering in the Trace tab.
4257
+ */
4258
+ function extractApiCalls(spans, config) {
4259
+ const kindSet = new Set(config.kinds);
4260
+ const result = [];
4261
+ for (const span of spans) {
4262
+ if (!kindSet.has(span.kind)) continue;
4263
+ const attrs = span.attributes;
4264
+ const metrics = [];
4265
+ for (const metric of config.metrics) {
4266
+ const rawValue = getNestedAttribute(attrs, metric.path);
4267
+ if (rawValue === void 0) continue;
4268
+ metrics.push({
4269
+ label: metric.label,
4270
+ tooltip: metric.tooltip,
4271
+ rawValue,
4272
+ format: metric.format,
4273
+ numberFormat: metric.numberFormat,
4274
+ placements: metric.placements
4275
+ });
4276
+ }
4277
+ result.push({
4278
+ id: span.id,
4279
+ name: span.name,
4280
+ kind: span.kind,
4281
+ status: span.status,
4282
+ method: readString$1(attrs, config.attributes.method),
4283
+ url: readString$1(attrs, config.attributes.url),
4284
+ statusCode: readNumber$1(attrs, config.attributes.statusCode),
4285
+ latencyMs: readNumber$1(attrs, config.attributes.durationMs) ?? computeLatencyMs(span),
4286
+ request: getNestedAttribute(attrs, config.attributes.request),
4287
+ response: getNestedAttribute(attrs, config.attributes.response),
4288
+ requestBody: getNestedAttribute(attrs, config.attributes.requestBody),
4289
+ responseBody: getNestedAttribute(attrs, config.attributes.responseBody),
4290
+ headers: getNestedAttribute(attrs, config.attributes.headers),
4291
+ errorPayload: getNestedAttribute(attrs, config.attributes.error),
4292
+ metrics,
4102
4293
  warnings: collectWarnings(span),
4103
4294
  error: pickError(span)
4104
4295
  });
@@ -5756,4 +5947,4 @@ function toLastRunStatus(status) {
5756
5947
  return status === "pending" ? null : status;
5757
5948
  }
5758
5949
  //#endregion
5759
- export { evalChartAxisSchema as $, runInEvalScope as $t, deriveScopedSummaryFromCases as A, columnFormatSchema as At, llmCallsConfigSchema as B, evalSpan as Bt, updateManualScoreRequestSchema as C, traceDisplayInputConfigSchema as Ct, getNestedAttribute as D, traceSpanWarningSchema as Dt, extractLlmCalls as E, traceSpanSchema as Et, DEFAULT_LLM_CALLS_CONFIG as F, repoFileRefSchema as Ft, caseRowSchema as G, appendToEvalOutput as Gt, trialSelectionModeSchema as H, hashCacheKey as Ht, agentEvalsConfigSchema as I, runArtifactRefSchema as It, evalStatItemSchema as J, getEvalCaseInput as Jt, evalFreshnessStatusSchema as K, evalAssert as Kt, llmCallMetricFormatSchema as L, z$1 as Lt, deriveStatusFromChildStatuses as M, fileRefSchema as Mt, runManifestSchema as N, jsonCellSchema as Nt, getEvalTitle as O, cellValueSchema as Ot, runSummarySchema as P, numberDisplayOptionsSchema as Pt, evalChartAggregateSchema as Q, nextEvalId as Qt, llmCallMetricPlacementSchema as R, buildTraceTree as Rt, createRunRequestSchema as S, traceDisplayConfigSchema as St, extractCacheHits as T, traceSpanKindSchema as Tt, assertionFailureSchema as U, hashCacheKeySync as Ut, resolveLlmCallsConfig as V, evalTracer as Vt, caseDetailSchema as W, EvalAssertionError as Wt, evalSummarySchema as X, isInEvalScope as Xt, evalStatsConfigSchema as Y, incrementEvalOutput as Yt, scoreTraceSchema as Z, mergeEvalOutput as Zt, loadEvalModule as _, traceCacheRefSchema as _t, loadPersistedRunSnapshot as a, evalChartTypeSchema as at, normalizeScoreDef as b, traceAttributeDisplayPlacementSchema as bt, persistCaseDetail as c, cacheFileSchema as ct, recomputePersistedCaseStatus as d, cacheOperationTypeSchema as dt, setEvalOutput as en, evalChartBuiltinMetricSchema as et, runTouchesEval as f, cacheRecordingOpSchema as ft, setLatestRunInfoMap as g, spanCacheOptionsSchema as gt, getTargetEvalIds as h, serializedCacheSpanSchema as ht, getLatestRunInfos as i, getEvalRegistry as in, evalChartTooltipExtraSchema as it, deriveStatusFromCaseRows as j, columnKindSchema as jt, getEvalDisplayStatus as k, columnDefSchema as kt, persistRunState as l, cacheListItemSchema as lt, buildEvalSummary as m, cacheStatusSchema as mt, generateRunId as n, repoFile as nn, evalChartConfigSchema as nt, loadPersistedRunSnapshots as o, evalChartsConfigSchema as ot, resolveArtifactPath as p, cacheRecordingSchema as pt, evalStatAggregateSchema as q, getCurrentScope as qt, getLastRunStatuses as r, defineEval as rn, evalChartMetricSchema as rt, nextShortIdFromSnapshots as s, cacheEntrySchema as st, executeRun as t, setScopeCacheContext as tn, evalChartColorSchema as tt, recomputeEvalStatusesInRuns as u, cacheModeSchema as ut, loadConfig as v, traceAttributeDisplayFormatSchema as vt, sseEnvelopeSchema as w, traceSpanErrorSchema as wt, createFsCacheStore as x, traceAttributeDisplaySchema as xt, buildDeclaredColumnDefs as y, traceAttributeDisplayInputSchema as yt, llmCallMetricSchema as z, captureEvalSpanError as zt };
5950
+ export { evalFreshnessStatusSchema as $, evalAssert as $t, getEvalDisplayStatus as A, traceDisplayInputConfigSchema as At, apiCallMetricPlacementSchema as B, jsonCellSchema as Bt, updateManualScoreRequestSchema as C, spanCacheOptionsSchema as Ct, extractLlmCalls as D, traceAttributeDisplayPlacementSchema as Dt, extractApiCalls as E, traceAttributeDisplayInputSchema as Et, runSummarySchema as F, cellValueSchema as Ft, llmCallMetricSchema as G, buildTraceTree as Gt, apiCallsConfigSchema as H, repoFileRefSchema as Ht, DEFAULT_API_CALLS_CONFIG as I, columnDefSchema as It, resolveLlmCallsConfig as J, evalTracer as Jt, llmCallsConfigSchema as K, captureEvalSpanError as Kt, DEFAULT_LLM_CALLS_CONFIG as L, columnFormatSchema as Lt, deriveStatusFromCaseRows as M, traceSpanKindSchema as Mt, deriveStatusFromChildStatuses as N, traceSpanSchema as Nt, getNestedAttribute as O, traceAttributeDisplaySchema as Ot, runManifestSchema as P, traceSpanWarningSchema as Pt, caseRowSchema as Q, appendToEvalOutput as Qt, agentEvalsConfigSchema as R, columnKindSchema as Rt, createRunRequestSchema as S, serializedCacheSpanSchema as St, extractCacheHits as T, traceAttributeDisplayFormatSchema as Tt, llmCallMetricFormatSchema as U, runArtifactRefSchema as Ut, apiCallMetricSchema as V, numberDisplayOptionsSchema as Vt, llmCallMetricPlacementSchema as W, z$1 as Wt, assertionFailureSchema as X, hashCacheKeySync as Xt, trialSelectionModeSchema as Y, hashCacheKey as Yt, caseDetailSchema as Z, EvalAssertionError as Zt, loadEvalModule as _, cacheModeSchema as _t, loadPersistedRunSnapshot as a, nextEvalId as an, evalChartAggregateSchema as at, normalizeScoreDef as b, cacheRecordingSchema as bt, persistCaseDetail as c, setScopeCacheContext as cn, evalChartColorSchema as ct, recomputePersistedCaseStatus as d, getEvalRegistry as dn, evalChartTooltipExtraSchema as dt, getCurrentScope as en, evalStatAggregateSchema as et, runTouchesEval as f, evalChartTypeSchema as ft, setLatestRunInfoMap as g, cacheListItemSchema as gt, getTargetEvalIds as h, cacheFileSchema as ht, getLatestRunInfos as i, mergeEvalOutput as in, scoreTraceSchema as it, deriveScopedSummaryFromCases as j, traceSpanErrorSchema as jt, getEvalTitle as k, traceDisplayConfigSchema as kt, persistRunState as l, repoFile as ln, evalChartConfigSchema as lt, buildEvalSummary as m, cacheEntrySchema as mt, generateRunId as n, incrementEvalOutput as nn, evalStatsConfigSchema as nt, loadPersistedRunSnapshots as o, runInEvalScope as on, evalChartAxisSchema as ot, resolveArtifactPath as p, evalChartsConfigSchema as pt, resolveApiCallsConfig as q, evalSpan as qt, getLastRunStatuses as r, isInEvalScope as rn, evalSummarySchema as rt, nextShortIdFromSnapshots as s, setEvalOutput as sn, evalChartBuiltinMetricSchema as st, executeRun as t, getEvalCaseInput as tn, evalStatItemSchema as tt, recomputeEvalStatusesInRuns as u, defineEval as un, evalChartMetricSchema as ut, loadConfig as v, cacheOperationTypeSchema as vt, sseEnvelopeSchema as w, traceCacheRefSchema as wt, createFsCacheStore as x, cacheStatusSchema as xt, buildDeclaredColumnDefs as y, cacheRecordingOpSchema as yt, apiCallMetricFormatSchema as z, fileRefSchema as zt };
@@ -1,5 +1,5 @@
1
- import { n as createRunner } from "./cli-DLlRkyLH.mjs";
2
- import "./src-Bx-CV6Wo.mjs";
1
+ import { n as createRunner } from "./cli-COzPxKg2.mjs";
2
+ import "./src-OZSs693X.mjs";
3
3
  //#region ../../apps/server/src/runner.ts
4
4
  let runnerInstance = null;
5
5
  function getRunnerInstance() {
@@ -1,2 +1,2 @@
1
- import { n as initRunner, t as getRunnerInstance } from "./runner-Gtlmvm3w.mjs";
1
+ import { n as initRunner, t as getRunnerInstance } from "./runner-nQjuRZGC.mjs";
2
2
  export { getRunnerInstance, initRunner };
@@ -0,0 +1,3 @@
1
+ import "./runOrchestration-COFhQvTJ.mjs";
2
+ import "./cli-COzPxKg2.mjs";
3
+ export {};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ls-stack/agent-eval",
3
- "version": "0.10.0",
3
+ "version": "0.12.0",
4
4
  "type": "module",
5
5
  "bin": {
6
6
  "agent-evals": "./dist/bin.mjs"
@@ -1 +0,0 @@
1
- @import"https://fonts.googleapis.com/css2?family=Geist:wght@300;400;500;600;700&family=Geist+Mono:wght@400;500;600&display=swap";.json-view{display:block;color:#4d4d4d;text-align:left;--json-property: #009033;--json-index: #676dff;--json-number: #676dff;--json-string: #b2762e;--json-boolean: #dc155e;--json-null: #dc155e}.json-view .json-view--property{color:var(--json-property)}.json-view .json-view--index{color:var(--json-index)}.json-view .json-view--number{color:var(--json-number)}.json-view .json-view--string{color:var(--json-string)}.json-view .json-view--boolean{color:var(--json-boolean)}.json-view .json-view--null{color:var(--json-null)}.json-view .jv-indent{padding-left:1em}.json-view .jv-chevron{display:inline-block;vertical-align:-20%;cursor:pointer;opacity:.4;width:1em;height:1em}:is(.json-view .jv-chevron:hover,.json-view .jv-size:hover+.jv-chevron){opacity:.8}.json-view .jv-size{cursor:pointer;opacity:.4;font-size:.875em;font-style:italic;margin-left:.5em;vertical-align:-5%;line-height:1}.json-view :is(.json-view--copy,.json-view--edit),.json-view .json-view--link svg{display:none;width:1em;height:1em;margin-left:.25em;cursor:pointer}.json-view .json-view--input{width:120px;margin-left:.25em;border-radius:4px;border:1px solid currentColor;padding:0 4px;font-size:87.5%;line-height:1.25;background:transparent}.json-view .json-view--deleting{outline:1px solid #da0000;background-color:#da000011;text-decoration-line:line-through}:is(.json-view:hover,.json-view--pair:hover)>:is(.json-view--copy,.json-view--edit),:is(.json-view:hover,.json-view--pair:hover)>.json-view--link svg{display:inline-block}.json-view .jv-button{background:transparent;outline:none;border:none;cursor:pointer;color:inherit}.json-view .cursor-pointer{cursor:pointer}.json-view svg{vertical-align:-10%}.jv-size-chevron~svg{vertical-align:-16%}.json-view_a11y{color:#545454;--json-property: #aa5d00;--json-index: #007299;--json-number: #007299;--json-string: #008000;--json-boolean: #d91e18;--json-null: #d91e18}.json-view_github{color:#005cc5;--json-property: #005cc5;--json-index: #005cc5;--json-number: #005cc5;--json-string: #032f62;--json-boolean: #005cc5;--json-null: #005cc5}.json-view_vscode{color:#005cc5;--json-property: #0451a5;--json-index: #0000ff;--json-number: #0000ff;--json-string: #a31515;--json-boolean: #0000ff;--json-null: #0000ff}.json-view_atom{color:#383a42;--json-property: #e45649;--json-index: #986801;--json-number: #986801;--json-string: #50a14f;--json-boolean: #0184bc;--json-null: #0184bc}.json-view_winter-is-coming{color:#0431fa;--json-property: #3a9685;--json-index: #ae408b;--json-number: #ae408b;--json-string: #8123a9;--json-boolean: #0184bc;--json-null: #0184bc}.json-view_vitesse{color:#393a34;--json-property: #998418;--json-index: #2f798a;--json-number: #2f798a;--json-string: #b56959;--json-boolean: #1e754f;--json-null: #ab5959}.vh724ok-1{display:flex;align-items:stretch;justify-content:flex-start;height:100vh;overflow:hidden;background:#fcfcfc}.vh724ok-2{display:flex;flex-direction:column;align-items:stretch;justify-content:flex-start;flex:1;min-width:0;overflow-x:hidden;overflow-y:hidden}.vh724ok-2.vwx8nfh{overflow-x:auto}.vh724ok-3{width:100%;height:100%}.vh724ok-3.vwx8nfh{min-width:600px}.v9f9dyw-1{border-left:1px solid #e8e8eb;background:#f7f7f8;display:flex;align-items:center;justify-content:center;color:#6b6e76;font-size:12px;flex-shrink:0}.v9f9dyw-2{display:flex;flex-direction:column;align-items:stretch;justify-content:flex-start;position:relative;flex-shrink:0;border-left:1px solid #e8e8eb;background:#f7f7f8;overflow:hidden}.v9f9dyw-3{display:flex;flex-direction:column;align-items:stretch;justify-content:flex-start;gap:10px;padding:14px 18px 12px;border-bottom:1px solid #e8e8eb;background:#f7f7f8;flex-shrink:0}.v9f9dyw-4{display:flex;align-items:center;justify-content:space-between;gap:10px}.v9f9dyw-5{display:flex;align-items:center;justify-content:flex-start;gap:2px}.v9f9dyw-6{font-family:Geist Mono,JetBrains Mono,SF Mono,ui-monospace,monospace;font-size:10px;letter-spacing:.1em;text-transform:uppercase;font-weight:500;color:#6b6e76}.v9f9dyw-7{display:flex;align-items:center;justify-content:flex-start;gap:10px;min-width:0}.v9f9dyw-8{display:flex;align-items:center;justify-content:flex-start;gap:12px;min-width:0}.v9f9dyw-9{font-family:Geist Mono,JetBrains Mono,SF Mono,ui-monospace,monospace;font-feature-settings:"tnum","zero";font-size:17px;color:#0a0b0d;font-weight:600;letter-spacing:-.01em}.v9f9dyw-10{display:flex;align-items:center;justify-content:flex-start;gap:4px;border-bottom:1px solid #e8e8eb;padding:10px 14px 0;flex-shrink:0;overflow-x:auto}.v9f9dyw-11{position:relative;padding:8px 12px;background:transparent;border:none;font-size:12px;font-weight:500;color:#6b6e76;white-space:nowrap;margin-bottom:-1px;border-bottom:1.5px solid transparent}.v9f9dyw-11:hover{color:#0a0b0d}.v9f9dyw-11.v18pp08p{color:#0a0b0d;border-bottom-color:#22d3ee}.v9f9dyw-12{flex:1;overflow:auto;padding:18px 20px}.v9f9dyw-13{display:flex;flex-direction:column;align-items:stretch;justify-content:flex-start}.v9f9dyw-14{display:flex;flex-direction:column;align-items:stretch;justify-content:flex-start;gap:8px;padding:14px 0;border-bottom:1px solid #e8e8eb}.v9f9dyw-14:first-child{padding-top:0}.v9f9dyw-14:last-child{border-bottom:none;padding-bottom:0}.v9f9dyw-15{font-family:Geist Mono,JetBrains Mono,SF Mono,ui-monospace,monospace;font-size:10px;letter-spacing:.1em;text-transform:uppercase;font-weight:500;color:#6b6e76}.v9f9dyw-16{font-size:13px;color:#0a0b0d}.v9f9dyw-17{color:#dc2626}.v9f9dyw-18{font-weight:600;margin-bottom:8px}.v9f9dyw-19{font-family:Geist Mono,JetBrains Mono,SF Mono,ui-monospace,monospace;font-feature-settings:"tnum","zero";font-size:11px;white-space:pre-wrap;opacity:.8;background:#f0f0f2;border:1px solid #e8e8eb;border-radius:var(--radius-sm);padding:10px}.v9f9dyw-20{display:flex;flex-direction:column;align-items:stretch;justify-content:flex-start;gap:14px}.v9f9dyw-21{font-family:Geist Mono,JetBrains Mono,SF Mono,ui-monospace,monospace;font-size:10px;letter-spacing:.1em;text-transform:uppercase;font-weight:500;color:#6b6e76;margin-bottom:8px}.v9f9dyw-22{font-family:Geist Mono,JetBrains Mono,SF Mono,ui-monospace,monospace;font-feature-settings:"tnum","zero";font-size:13px;color:#0a0b0d;word-break:break-word}.v9f9dyw-23{color:#dc2626}.v9f9dyw-24{color:#16a34a}.v9f9dyw-25{display:flex;flex-direction:column;align-items:stretch;justify-content:flex-start;gap:12px}.v9f9dyw-26{display:flex;flex-direction:column;align-items:stretch;justify-content:flex-start;gap:8px;padding:12px 14px;background:#fcfcfc;border:1px solid #e8e8eb;border-radius:var(--radius-md)}.v9f9dyw-27{display:flex;align-items:center;justify-content:space-between;gap:10px}.v9f9dyw-28{font-size:12.5px;font-weight:600;color:#0a0b0d;letter-spacing:-.005em}.v9f9dyw-29{font-family:Geist Mono,JetBrains Mono,SF Mono,ui-monospace,monospace;font-feature-settings:"tnum","zero";font-size:13px;font-weight:500;color:#0a0b0d}.v9f9dyw-30{position:relative;height:6px;border-radius:4px;background:#f0f0f2;overflow:hidden}.v9f9dyw-31{position:absolute;left:0;top:0;bottom:0;border-radius:4px;background:#a4a7af}.v9f9dyw-31.vbz8yk8{background:#16a34a}.v9f9dyw-31.v173w9ek{background:#dc2626}.v9f9dyw-32{display:flex;align-items:center;justify-content:flex-start;gap:10px;font-size:11px;color:#6b6e76}.v9f9dyw-33{font-family:Geist Mono,JetBrains Mono,SF Mono,ui-monospace,monospace;font-size:10px;letter-spacing:.1em;text-transform:uppercase;font-weight:500;padding:2px 6px;border-radius:var(--radius-sm);background:#f0f0f2;color:#6b6e76;font-size:9.5px;letter-spacing:.04em;line-height:1.2}.v9f9dyw-33.vbz8yk8{background:#16a34a1f;color:#16a34a}.v9f9dyw-33.v173w9ek{background:#dc26261f;color:#dc2626}.v9f9dyw-34{display:flex;flex-direction:column;align-items:stretch;justify-content:flex-start;gap:18px}.v9f9dyw-35{display:flex;flex-direction:column;align-items:stretch;justify-content:flex-start;gap:10px}.v9f9dyw-36{display:flex;align-items:center;justify-content:space-between;gap:10px}.v9f9dyw-37{font-size:12.5px;font-weight:600;color:#0a0b0d}.v9f9dyw-38{display:flex;flex-direction:column;align-items:stretch;justify-content:flex-start;gap:10px;list-style:none;padding:0;margin:0}.v9f9dyw-39{display:flex;flex-direction:column;align-items:stretch;justify-content:flex-start;gap:6px;padding:12px;background:#fcfcfc;border:1px solid #e8e8eb;border-radius:var(--radius-md)}.v9f9dyw-40{color:#dc2626;font-size:12.5px;line-height:1.5}.v9f9dyw-41,.v9f9dyw-42{display:flex;flex-direction:column;align-items:stretch;justify-content:flex-start;gap:8px}.v1rexbf3-1{display:flex;flex-direction:column;align-items:stretch;justify-content:flex-start;background:#fcfcfc;border:1px solid #e8e8eb;border-radius:var(--radius-md);overflow:hidden}.v1rexbf3-2{display:flex;align-items:center;justify-content:flex-start;gap:10px;width:100%;background:transparent;border:none;padding:10px 14px;text-align:left;cursor:pointer;color:#0a0b0d}.v1rexbf3-2:hover{background:#f0f0f2}.v1rexbf3-3{display:flex;align-items:center;justify-content:flex-start;color:#6b6e76;flex-shrink:0}.v1rexbf3-4{font-family:Geist Mono,JetBrains Mono,SF Mono,ui-monospace,monospace;font-size:10px;letter-spacing:.1em;text-transform:uppercase;font-weight:500;padding:2px 6px;border-radius:var(--radius-sm);background:#16a34a26;color:#16a34a;font-size:9.5px;letter-spacing:.04em;line-height:1.2;flex-shrink:0}.v1rexbf3-5{font-family:Geist Mono,JetBrains Mono,SF Mono,ui-monospace,monospace;font-feature-settings:"tnum","zero";font-size:12.5px;color:#0a0b0d;word-break:break-word;flex:1 1 auto;min-width:0}.v1rexbf3-6{font-family:Geist Mono,JetBrains Mono,SF Mono,ui-monospace,monospace;font-feature-settings:"tnum","zero";font-size:10px;color:#6b6e76;flex-shrink:0}.v1rexbf3-7{display:flex;align-items:center;justify-content:flex-start;gap:8px;font-family:Geist Mono,JetBrains Mono,SF Mono,ui-monospace,monospace;font-feature-settings:"tnum","zero";margin-left:auto;font-size:11px;color:#6b6e76;flex-wrap:wrap;justify-content:flex-end}.v1rexbf3-8{display:flex;flex-direction:column;align-items:stretch;justify-content:flex-start;gap:12px;padding:12px 14px;border-top:1px solid #e8e8eb}.v1rexbf3-9{display:flex;align-items:center;justify-content:flex-start;gap:12px;flex-wrap:wrap;font-size:11px;color:#6b6e76}.v1rexbf3-10{display:flex;align-items:center;justify-content:flex-start;gap:4px}.v1rexbf3-11{font-family:Geist Mono,JetBrains Mono,SF Mono,ui-monospace,monospace;font-size:10px;letter-spacing:.1em;text-transform:uppercase;font-weight:500;font-size:9.5px;color:#a4a7af}.v1rexbf3-12{font-family:Geist Mono,JetBrains Mono,SF Mono,ui-monospace,monospace;font-feature-settings:"tnum","zero";font-size:11px;color:#0a0b0d;word-break:break-all}.v1rexbf3-14{font-family:Geist Mono,JetBrains Mono,SF Mono,ui-monospace,monospace;font-size:10px;letter-spacing:.1em;text-transform:uppercase;font-weight:500;color:#6b6e76;margin-bottom:8px}.v1rexbf3-15{font-family:Geist Mono,JetBrains Mono,SF Mono,ui-monospace,monospace;font-feature-settings:"tnum","zero";font-size:11.5px;color:#6b6e76}.v1rexbf3-16{font-family:Geist Mono,JetBrains Mono,SF Mono,ui-monospace,monospace;font-feature-settings:"tnum","zero";font-size:11.5px;color:#dc2626}.vqnpbvz-1{position:relative;min-width:0}.vqnpbvz-2{font-family:Geist Mono,JetBrains Mono,SF Mono,ui-monospace,monospace;font-feature-settings:"tnum","zero";font-size:12px;line-height:1.6;color:#0a0b0d;background:#fcfcfc;border:1px solid #e8e8eb;border-radius:var(--radius-md);padding:12px 14px;overflow:auto;min-width:0}.vqnpbvz-2.vh8ay32{font-size:11px;padding:10px 12px}.vqnpbvz-2.v14y6o4h{max-height:200px}.vqnpbvz-2.valvosx{max-height:320px}.vqnpbvz-2.vzt48hw{max-height:none}.vqnpbvz-2 .json-view{font-family:Geist Mono,JetBrains Mono,SF Mono,ui-monospace,monospace;font-feature-settings:"tnum","zero";color:#0a0b0d;font-size:inherit;line-height:inherit;--json-property: #0e7490;--json-index: #22d3ee;--json-number: #22d3ee;--json-string: #ea580c;--json-boolean: #dc2626;--json-null: #a4a7af}.vqnpbvz-2 .jv-size,.vqnpbvz-2 .jv-chevron{color:#a4a7af}.vqnpbvz-2 .json-view--copy,.vqnpbvz-2 .json-view--edit,.vqnpbvz-2 .json-view--link svg{color:#a4a7af}.vqnpbvz-2 .json-view--input{color:#0a0b0d}.vqnpbvz-3{display:flex;align-items:center;justify-content:flex-start;gap:4px;transition:.12s cubic-bezier(.4,0,.2,1);transition-property:background,color,border-color;position:absolute;bottom:6px;right:6px;font-family:inherit;font-size:10px;letter-spacing:.04em;text-transform:uppercase;font-weight:500;color:#6b6e76;background:#f7f7f8;border:1px solid #e8e8eb;border-radius:var(--radius-sm);padding:3px 7px;cursor:pointer}.vqnpbvz-3:hover{color:#0a0b0d;background:#ececee;border-color:#d4d4d8}.v1f0s106-1{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:14px;flex:1;height:100%;text-align:center;padding:48px}.v1f0s106-2{width:56px;height:56px;border-radius:var(--radius-md);background:#f7f7f8;border:1px solid #e8e8eb;display:flex;align-items:center;justify-content:center;color:#22d3ee;margin-bottom:4px}.v1f0s106-2>svg{width:24px;height:24px}.v1f0s106-3{font-family:Geist Mono,JetBrains Mono,SF Mono,ui-monospace,monospace;font-size:10px;letter-spacing:.1em;text-transform:uppercase;font-weight:500;color:#6b6e76}.v1f0s106-4{color:#0a0b0d;font-size:18px;font-weight:600;letter-spacing:-.01em}.v1f0s106-5{color:#6b6e76;font-size:12.5px;max-width:360px;line-height:1.55}.v1460r1i-1{white-space:pre-wrap;margin:0;font-size:13px;line-height:1.55}.v1460r1i-2{color:#0a0b0d;font-size:13px;line-height:1.55}.v1460r1i-2>:first-child{margin-top:0}.v1460r1i-2>:last-child{margin-bottom:0}.v1460r1i-2 p,.v1460r1i-2 ul,.v1460r1i-2 ol,.v1460r1i-2 blockquote,.v1460r1i-2 pre,.v1460r1i-2 table{margin:0 0 10px}.v1460r1i-2 h1,.v1460r1i-2 h2,.v1460r1i-2 h3,.v1460r1i-2 h4,.v1460r1i-2 h5,.v1460r1i-2 h6{margin:0 0 10px;color:#0a0b0d;line-height:1.25}.v1460r1i-2 h1{font-size:18px}.v1460r1i-2 h2{font-size:15px}.v1460r1i-2 h3{font-size:13.5px}.v1460r1i-2 ul,.v1460r1i-2 ol{padding-left:20px}.v1460r1i-2 li+li{margin-top:4px}.v1460r1i-2 code{font-family:Geist Mono,JetBrains Mono,SF Mono,ui-monospace,monospace;font-feature-settings:"tnum","zero";font-size:12px;background:#f0f0f2;border:1px solid #e8e8eb;border-radius:6px;padding:1px 5px}.v1460r1i-2 pre{font-family:Geist Mono,JetBrains Mono,SF Mono,ui-monospace,monospace;font-feature-settings:"tnum","zero";font-size:12px;overflow-x:auto;background:#f0f0f2;border:1px solid #e8e8eb;border-radius:var(--radius-sm);padding:12px}.v1460r1i-2 pre code{background:transparent;border:none;padding:0;font-size:inherit}.v1460r1i-2 blockquote{padding-left:12px;border-left:3px solid #e8e8eb;color:#6b6e76}.v1460r1i-2 a{color:#22d3ee;text-decoration:underline;text-underline-offset:2px}.v1460r1i-2 table{width:100%;border-collapse:collapse}.v1460r1i-2 th,.v1460r1i-2 td{border:1px solid #e8e8eb;padding:8px 10px;text-align:left;vertical-align:top}.v1460r1i-2 th{background:#f0f0f2}.v1460r1i-3{max-width:100%;border-radius:var(--radius-md)}.v1460r1i-4{width:100%}.v1460r1i-5{max-width:100%;border-radius:var(--radius-md)}.v1460r1i-6{color:#22d3ee}.v4yt9wa-1{display:flex;align-items:center;justify-content:center;transition:.24s cubic-bezier(.4,0,.2,1);transition-property:background,color;width:28px;height:28px;border-radius:var(--radius-sm);border:none;background:transparent;color:#6b6e76;flex-shrink:0}.v4yt9wa-1.van04w6{width:32px;height:32px;border-radius:var(--radius-md)}.v4yt9wa-1:hover:not(:disabled){background:#f0f0f2;color:#0a0b0d}.v4yt9wa-1:disabled{cursor:not-allowed;opacity:.5}.v4yt9wa-1>svg{width:14px;height:14px}.v4yt9wa-1.van04w6>svg{width:16px;height:16px}.v1m277ov-1{display:flex;flex-direction:column;align-items:stretch;justify-content:flex-start;background:#fcfcfc;border:1px solid #e8e8eb;border-radius:var(--radius-md);overflow:hidden}.v1m277ov-2{display:flex;align-items:center;justify-content:flex-start;gap:10px;width:100%;background:transparent;border:none;padding:10px 14px;text-align:left;cursor:pointer;color:#0a0b0d}.v1m277ov-2:hover{background:#f0f0f2}.v1m277ov-3{display:flex;align-items:center;justify-content:flex-start;color:#6b6e76;flex-shrink:0}.v1m277ov-4{font-size:12.5px;font-weight:600;letter-spacing:-.005em;color:#0a0b0d;flex-shrink:0}.v1m277ov-5{display:flex;align-items:center;justify-content:flex-start;gap:8px;font-family:Geist Mono,JetBrains Mono,SF Mono,ui-monospace,monospace;font-feature-settings:"tnum","zero";margin-left:auto;font-size:11px;color:#6b6e76;flex-wrap:wrap;justify-content:flex-end}.v1m277ov-6{display:flex;align-items:center;justify-content:flex-start;gap:4px;font-family:Geist Mono,JetBrains Mono,SF Mono,ui-monospace,monospace;font-feature-settings:"tnum","zero";font-size:11px;color:#6b6e76}.v1m277ov-7{color:#a4a7af;font-size:9.5px;letter-spacing:.04em;text-transform:uppercase}.v1m277ov-8{color:#d4d4d8}.v1m277ov-9{font-family:Geist Mono,JetBrains Mono,SF Mono,ui-monospace,monospace;font-feature-settings:"tnum","zero";display:inline-flex;align-items:center;font-size:10.5px;font-weight:500;letter-spacing:.01em;padding:2px 7px;border-radius:20px;color:#0e7490;background:#22d3ee1a}.v1m277ov-10{font-family:Geist Mono,JetBrains Mono,SF Mono,ui-monospace,monospace;font-feature-settings:"tnum","zero";display:inline-flex;align-items:center;font-size:10.5px;letter-spacing:.01em;padding:2px 7px;border-radius:20px;color:#6b6e76;background:#f0f0f2}.v1m277ov-11{margin-right:4px;color:#a4a7af}.v1m277ov-12{display:flex;flex-direction:column;align-items:stretch;justify-content:flex-start;gap:12px;padding:12px 14px;border-top:1px solid #e8e8eb}.v1m277ov-13{display:flex;align-items:center;justify-content:flex-start;gap:10px;font-family:Geist Mono,JetBrains Mono,SF Mono,ui-monospace,monospace;font-feature-settings:"tnum","zero";flex-wrap:wrap;font-size:11px;color:#6b6e76}.v1m277ov-14{display:flex;align-items:center;justify-content:flex-start;gap:12px;font-size:12px}.v1m277ov-15{font-family:Geist Mono,JetBrains Mono,SF Mono,ui-monospace,monospace;font-size:10px;letter-spacing:.1em;text-transform:uppercase;font-weight:500;color:#6b6e76;min-width:110px}.v1m277ov-16{font-family:Geist Mono,JetBrains Mono,SF Mono,ui-monospace,monospace;font-feature-settings:"tnum","zero";color:#0a0b0d;word-break:break-word}.v1m277ov-17{display:flex;flex-direction:column;align-items:stretch;justify-content:flex-start;border:1px solid #e8e8eb;border-radius:var(--radius-md);overflow:hidden}.v1m277ov-18{font-family:Geist Mono,JetBrains Mono,SF Mono,ui-monospace,monospace;font-size:10px;letter-spacing:.1em;text-transform:uppercase;font-weight:500;display:grid;grid-template-columns:1fr auto auto;gap:16px;padding:8px 12px;background:#f0f0f2;color:#6b6e76;font-size:9.5px;letter-spacing:.04em}.v1m277ov-19{display:grid;grid-template-columns:1fr auto auto;gap:16px;padding:8px 12px;align-items:baseline;border-top:1px solid #e8e8eb;font-size:12px}.v1m277ov-20{color:#0a0b0d}.v1m277ov-21{font-family:Geist Mono,JetBrains Mono,SF Mono,ui-monospace,monospace;font-feature-settings:"tnum","zero";color:#0a0b0d;text-align:right;min-width:56px}.v1m277ov-22{background:#f0f0f2;font-weight:600}.v1m277ov-23{text-align:right}.v1m277ov-24{color:#6b6e76}.v1m277ov-26{font-family:Geist Mono,JetBrains Mono,SF Mono,ui-monospace,monospace;font-size:10px;letter-spacing:.1em;text-transform:uppercase;font-weight:500;color:#6b6e76;margin-bottom:8px}.v1m277ov-27{display:flex;flex-direction:column;align-items:stretch;justify-content:flex-start;gap:6px}.v1m277ov-28{display:flex;flex-direction:column;align-items:stretch;justify-content:flex-start;gap:8px}.v1m277ov-29{display:flex;flex-direction:column;align-items:stretch;justify-content:flex-start;gap:6px;border:1px solid #e8e8eb;border-radius:var(--radius-sm);background:#f0f0f2;padding:8px 10px}.v1m277ov-30{font-family:Geist Mono,JetBrains Mono,SF Mono,ui-monospace,monospace;font-size:10px;letter-spacing:.1em;text-transform:uppercase;font-weight:500;color:#6b6e76;font-size:9.5px}.v1m277ov-31{color:#dc2626}.v1m277ov-32{font-weight:600;margin-bottom:8px}.v1m277ov-33{font-family:Geist Mono,JetBrains Mono,SF Mono,ui-monospace,monospace;font-feature-settings:"tnum","zero";font-size:11px;white-space:pre-wrap;opacity:.8;background:#f0f0f2;border:1px solid #e8e8eb;border-radius:var(--radius-sm);padding:10px}.v1m277ov-34{display:flex;flex-direction:column;align-items:stretch;justify-content:flex-start;gap:6px;color:#ea580c;font-size:12px}.v1m277ov-35{font-weight:600}.vno9i23-1{display:flex;align-items:center;justify-content:flex-start;gap:6px;font-family:Geist Mono,JetBrains Mono,SF Mono,ui-monospace,monospace;font-feature-settings:"tnum","zero";display:inline-flex;font-size:11px;font-weight:500;letter-spacing:.01em;padding:3px 8px;border-radius:20px;color:#6b6e76;background:#f0f0f2}.vno9i23-1.v1bls63k{color:#16a34a;background:#16a34a1a}.vno9i23-1.v1843cka{color:#dc2626;background:#dc26261a}.vno9i23-1.v1w33htl{color:#0e7490;background:#22d3ee1f}.vno9i23-1.v1o7znqr{color:#ea580c;background:#ea580c1a}.vno9i23-1.v1ptx2rj{color:#6b6e76;background:#e4e4e7}.vno9i23-1.vwlrmf0{color:#ea580c;background:#ea580c24}.vno9i23-1.v1mlprpv{color:#0e7490;background:#22d3ee1a}.vno9i23-2{width:5px;height:5px;border-radius:5px;flex-shrink:0;background:#a4a7af;@keyframes pulseDot{0%,to{opacity:1}50%{opacity:.4}}}.vno9i23-2.v1bls63k{background:#16a34a}.vno9i23-2.v1843cka{background:#dc2626}.vno9i23-2.v1w33htl{background:#22d3ee;animation:pulseDot 1.6s ease-in-out infinite}.vno9i23-2.v1o7znqr{background:#ea580c}.vno9i23-2.v1ptx2rj{background:#d4d4d8}.vno9i23-2.vwlrmf0{background:#ea580c}.vno9i23-2.v1mlprpv{background:#22d3ee}.v1fkevfp-1{background:#000;color:#fff;font-size:12px;line-height:1.4;padding:4px 8px;border-radius:4px;box-shadow:0 2px 8px #0006;pointer-events:none;z-index:10000;max-width:300px;white-space:pre-line;overflow-wrap:break-word}.vpbub9f-1{position:absolute;top:0;bottom:0;width:7px;right:-3px;cursor:col-resize;z-index:5;-webkit-user-select:none;user-select:none;touch-action:none}.vpbub9f-1.v1xij6d4{right:auto;left:-3px}.vpbub9f-1:after{content:"";position:absolute;top:0;bottom:0;left:3px;width:1px;background:transparent;transition:background .15s ease}.vpbub9f-1:hover:after,.vpbub9f-1.veyzh35:after{background:#22d3ee}.vxv787s-1{display:flex;gap:12px;height:100%;align-items:stretch;position:relative;min-width:0}.vxv787s-2{display:flex;flex-direction:column;flex:1;min-width:0;border:1px solid #e8e8eb;border-radius:var(--radius-md);background:#fcfcfc;overflow:hidden}.vxv787s-3{flex:1 1 0;min-width:300px;max-width:460px;overflow:auto;border:1px solid #e8e8eb;border-radius:var(--radius-md);background:#fcfcfc;padding:14px 16px}.vxv787s-4{position:absolute;inset:0 0 0 auto;width:min(420px,85%);display:flex;flex-direction:column;background:#f7f7f8;border:1px solid #d4d4d8;border-radius:var(--radius-md);box-shadow:-10px 0 28px #0a0b0d24;z-index:2}.vxv787s-5{display:flex;align-items:center;justify-content:space-between;padding:6px 8px 6px 12px;border-bottom:1px solid #e8e8eb;flex-shrink:0}.vxv787s-6{font-family:Geist Mono,JetBrains Mono,SF Mono,ui-monospace,monospace;font-feature-settings:"tnum","zero";font-size:10px;letter-spacing:.1em;text-transform:uppercase;color:#6b6e76}.vxv787s-7{overflow:auto;padding:14px 16px}.vxv787s-8{transition:.24s cubic-bezier(.4,0,.2,1);transition-property:background,color;background:none;border:none;padding:4px;border-radius:4px;display:inline-flex;align-items:center;justify-content:center;color:#6b6e76;cursor:pointer}.vxv787s-8:hover{background:#f0f0f2;color:#0a0b0d}.vxv787s-8>svg{width:14px;height:14px}.vxv787s-9{flex:1;overflow:auto;min-width:0}.vxv787s-10{display:flex;flex-direction:column;min-width:560px;padding-right:14px}.vxv787s-10.v1qsea3x{min-width:0;padding-right:0}.vxv787s-11{display:grid;grid-template-columns:minmax(200px,40%) 1fr;flex-shrink:0;border-bottom:1px solid #e8e8eb;background:#f7f7f8;height:24px;position:sticky;top:0;z-index:1}.vxv787s-11.v1qsea3x{grid-template-columns:1fr}.vxv787s-12{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:0 6px 0 10px;height:100%}.vxv787s-13{transition:.24s cubic-bezier(.4,0,.2,1);transition-property:background,color;background:none;border:none;padding:3px;border-radius:4px;display:inline-flex;align-items:center;justify-content:center;color:#6b6e76;cursor:pointer;flex-shrink:0}.vxv787s-13:hover{background:#f0f0f2;color:#0a0b0d}.vxv787s-13>svg{width:14px;height:14px}.vxv787s-14{font-family:Geist Mono,JetBrains Mono,SF Mono,ui-monospace,monospace;font-feature-settings:"tnum","zero";font-size:9.5px;letter-spacing:.1em;text-transform:uppercase;color:#a4a7af}.vxv787s-15{position:relative;padding-right:12px}.vxv787s-16{font-family:Geist Mono,JetBrains Mono,SF Mono,ui-monospace,monospace;font-feature-settings:"tnum","zero";position:absolute;top:50%;transform:translate(-50%,-50%);font-size:9.5px;font-variant-numeric:tabular-nums;color:#a4a7af;white-space:nowrap}.vxv787s-17{padding:4px 0}.vxv787s-18{transition:.24s cubic-bezier(.4,0,.2,1);transition-property:background,color;display:grid;grid-template-columns:minmax(200px,40%) 1fr;align-items:stretch;cursor:pointer;font-size:11.5px;min-height:26px;border-left:2px solid transparent;color:#6b6e76}.vxv787s-18.v1qsea3x{grid-template-columns:1fr}.vxv787s-18:hover{background:#f7f7f8;color:#0a0b0d}.vxv787s-18.vkduw8x{background:#f0f0f2;color:#0a0b0d;border-left-color:#22d3ee}.vxv787s-19{display:flex;align-items:center;justify-content:flex-start;gap:7px;min-width:0;padding-right:10px}.vxv787s-20{position:relative;height:26px;padding-right:12px;background-image:linear-gradient(to right,transparent calc(25% - 1px),#e8e8ebb3 calc(25% - 1px),#e8e8ebb3 25%,transparent 25%),linear-gradient(to right,transparent calc(50% - 1px),#e8e8ebb3 calc(50% - 1px),#e8e8ebb3 50%,transparent 50%),linear-gradient(to right,transparent calc(75% - 1px),#e8e8ebb3 calc(75% - 1px),#e8e8ebb3 75%,transparent 75%)}.vxv787s-21{position:absolute;top:7px;height:12px;min-width:2px;border-radius:3px;background:var(--trace-kind-bar-bg, #d4d4d8);border:1px solid transparent}.vxv787s-21.v1z0zxx1{background:repeating-linear-gradient(45deg,var(--trace-kind-running-strong, #22d3ee66) 0,var(--trace-kind-running-strong, #22d3ee66) 6px,var(--trace-kind-running-soft, #22d3ee26) 6px,var(--trace-kind-running-soft, #22d3ee26) 12px)}.vxv787s-21.v12vnxco{border-color:#dc2626}.vxv787s-22{position:absolute;top:50%;width:10px;height:10px;border-radius:2px;background:var(--trace-kind-bar-bg, #d4d4d8);box-shadow:0 0 0 2px #fcfcfc;transform:translate(-50%,-50%) rotate(45deg);pointer-events:none}.vxv787s-23{font-family:Geist Mono,JetBrains Mono,SF Mono,ui-monospace,monospace;font-feature-settings:"tnum","zero";position:absolute;top:5px;font-size:9.5px;font-variant-numeric:tabular-nums;color:#6b6e76;white-space:nowrap;pointer-events:none}.vxv787s-23.inside{color:#fff;font-weight:500;letter-spacing:.02em;background:#0003;padding:0 5px;line-height:12px;top:7px;height:12px;margin-right:-4px;border-radius:3px}.vxv787s-24{transition:.24s cubic-bezier(.4,0,.2,1);transition-property:transform;background:none;border:none;padding:0;display:inline-flex;width:14px;height:14px;align-items:center;justify-content:center;color:#a4a7af;flex-shrink:0;cursor:pointer}.vxv787s-24>svg{width:12px;height:12px}.vxv787s-24.v1sa0q0h>svg{transform:rotate(90deg)}.vxv787s-25{width:14px;flex-shrink:0}.vxv787s-26{font-family:Geist Mono,JetBrains Mono,SF Mono,ui-monospace,monospace;font-feature-settings:"tnum","zero";padding:2px 6px;border-radius:4px;font-size:9.5px;font-weight:600;letter-spacing:.04em;text-transform:uppercase;color:var(--trace-kind-badge-text, #6b6e76);background:var(--trace-kind-badge-bg, #f0f0f2);flex-shrink:0}.vxv787s-27{font-weight:500;font-size:11.5px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;flex:1;min-width:0}.vxv787s-28{font-family:Geist Mono,JetBrains Mono,SF Mono,ui-monospace,monospace;font-feature-settings:"tnum","zero";padding:1px 5px;border-radius:3px;font-size:9.5px;font-weight:500;letter-spacing:.04em;text-transform:uppercase;flex-shrink:0;background:#d4d4d8;color:#6b6e76}.vxv787s-28.vquhj6c{background:#16a34a26;color:#16a34a}.vxv787s-28.v1bt5ce3{background:#ea580c26;color:#ea580c}.vxv787s-28.vgubnqx{background:#22d3ee26;color:#22d3ee}.vxv787s-28.vk5fxpe{background:#d4d4d8;color:#6b6e76}.vxv787s-29{font-family:Geist Mono,JetBrains Mono,SF Mono,ui-monospace,monospace;font-feature-settings:"tnum","zero";color:#dc2626;font-size:10px;flex-shrink:0}.vxv787s-30{font-family:Geist Mono,JetBrains Mono,SF Mono,ui-monospace,monospace;font-feature-settings:"tnum","zero";color:#ea580c;font-size:10px;flex-shrink:0}.vxv787s-31{font-family:Geist Mono,JetBrains Mono,SF Mono,ui-monospace,monospace;font-feature-settings:"tnum","zero";font-size:9.5px;letter-spacing:.04em;flex-shrink:0;color:#a4a7af}.vxv787s-32{font-family:Geist Mono,JetBrains Mono,SF Mono,ui-monospace,monospace;font-feature-settings:"tnum","zero";font-size:10px;color:#6b6e76;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;flex:1 1 auto;min-width:0}.vxv787s-32:before{content:"→";color:#a4a7af;margin-right:4px}.vxv787s-33{padding:16px;color:#6b6e76;font-size:12px;text-align:center}.vn93px5-1{display:flex;flex-direction:column;align-items:stretch;justify-content:flex-start;gap:14px;font-size:12px}.vn93px5-2{font-family:Geist Mono,JetBrains Mono,SF Mono,ui-monospace,monospace;font-feature-settings:"tnum","zero";font-size:13px;font-weight:600;letter-spacing:-.005em;color:#0a0b0d}.vn93px5-3{display:flex;flex-direction:column;align-items:stretch;justify-content:flex-start;gap:6px}.vn93px5-4{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:8px 10px;background:#fcfcfc;border:1px solid #e8e8eb;border-radius:var(--radius-sm)}.vn93px5-5{font-family:Geist Mono,JetBrains Mono,SF Mono,ui-monospace,monospace;font-size:10px;letter-spacing:.1em;text-transform:uppercase;font-weight:500;color:#6b6e76}.vn93px5-6{font-family:Geist Mono,JetBrains Mono,SF Mono,ui-monospace,monospace;font-feature-settings:"tnum","zero";font-size:11.5px;color:#0a0b0d;text-align:right;max-width:60%;word-break:break-all}.vn93px5-7{display:flex;flex-direction:column;align-items:stretch;justify-content:flex-start;gap:6px}.vn93px5-8{font-family:Geist Mono,JetBrains Mono,SF Mono,ui-monospace,monospace;font-size:10px;letter-spacing:.1em;text-transform:uppercase;font-weight:500;color:#6b6e76}.vn93px5-9{font-family:Geist Mono,JetBrains Mono,SF Mono,ui-monospace,monospace;font-feature-settings:"tnum","zero";font-size:11px;line-height:1.55;white-space:pre-wrap;word-break:break-word;color:#6b6e76;background:#f7f7f8;border:1px solid #e8e8eb;padding:10px 12px;border-radius:var(--radius-sm);max-height:200px;overflow:auto}.vmrx93z-1{--vmrx93z-2: #dc2626;--vmrx93z-3: #dc26260f;--vmrx93z-4: #dc262638;display:flex;flex-direction:column;align-items:stretch;justify-content:flex-start;gap:8px;min-width:0;color:var(--vmrx93z-2);background:var(--vmrx93z-3);border:1px solid var(--vmrx93z-4);border-radius:var(--radius-sm);padding:10px 12px;overflow-wrap:anywhere}.vmrx93z-1.vc8cpou{--vmrx93z-2: #ea580c;--vmrx93z-3: #ea580c14;--vmrx93z-4: #ea580c3d}.vmrx93z-5{font-weight:600;min-width:0;overflow-wrap:anywhere}.vmrx93z-6{font-family:Geist Mono,JetBrains Mono,SF Mono,ui-monospace,monospace;font-feature-settings:"tnum","zero";font-size:10px;color:#dc2626b8;min-width:0;overflow-wrap:anywhere}.vmrx93z-6.vc8cpou{color:#ea580cc2}.vmrx93z-7{font-family:Geist Mono,JetBrains Mono,SF Mono,ui-monospace,monospace;font-size:10px;letter-spacing:.1em;text-transform:uppercase;font-weight:500;color:var(--vmrx93z-2)}.vmrx93z-8{display:flex;flex-direction:column;align-items:stretch;justify-content:flex-start;gap:4px;min-width:0}.vmrx93z-8+.vmrx93z-8{border-top:1px solid #dc26262e;padding-top:8px}.vmrx93z-8.vc8cpou+.vmrx93z-8.vc8cpou{border-top-color:#ea580c33}.vmrx93z-9{font-family:Geist Mono,JetBrains Mono,SF Mono,ui-monospace,monospace;font-feature-settings:"tnum","zero";font-size:10px;max-width:100%;white-space:pre-wrap;word-break:break-word;overflow-wrap:anywhere;opacity:.8;margin:0}.vmrx93z-10{display:flex;flex-direction:column;align-items:stretch;justify-content:flex-start;gap:6px}.vmrx93z-11{font-family:Geist Mono,JetBrains Mono,SF Mono,ui-monospace,monospace;font-size:10px;letter-spacing:.1em;text-transform:uppercase;font-weight:500;color:#6b6e76}.vmn9mpb-1{height:100%;overflow:auto}.vmn9mpb-2{display:flex;flex-direction:column;align-items:stretch;justify-content:flex-start;gap:6px;padding:22px 32px 18px;border-bottom:1px solid #e8e8eb;background:#fcfcfc;position:sticky;top:0;z-index:3}.vmn9mpb-3{display:flex;align-items:center;justify-content:space-between;gap:14px}.vmn9mpb-4{display:flex;align-items:center;justify-content:flex-start;gap:12px}.vmn9mpb-5{display:flex;align-items:center;justify-content:flex-start;gap:6px;flex-wrap:wrap}.vmn9mpb-6{display:flex;align-items:center;justify-content:flex-start;gap:5px;font-family:Geist Mono,JetBrains Mono,SF Mono,ui-monospace,monospace;font-size:10px;letter-spacing:.1em;text-transform:uppercase;font-weight:500;padding:3px 9px;border-radius:999px;background:#f0f0f2;color:#6b6e76;font-size:9.5px;line-height:1;letter-spacing:.04em}.vmn9mpb-7{font-size:11px;font-weight:600;color:#0a0b0d;letter-spacing:-.01em}.vmn9mpb-8{display:flex;align-items:center;justify-content:flex-start;gap:5px;transition:.24s cubic-bezier(.4,0,.2,1);transition-property:background,border-color,color;appearance:none;padding:3px 9px;border-radius:999px;font-size:9.5px;line-height:1;letter-spacing:.04em;text-transform:uppercase;font-weight:500;color:#6b6e76;background:#f0f0f2;border:1px solid transparent;cursor:pointer}.vmn9mpb-8:hover{background:#ececee;color:#0a0b0d}.vmn9mpb-8.v124n73o{color:#fcfcfc;background:#0a0b0d;border-color:#0a0b0d}.vmn9mpb-8.v18aowuu:not(.v124n73o){color:#16a34a;background:#16a34a14;border-color:#16a34a2e}.vmn9mpb-8.vind66p:not(.v124n73o){color:#dc2626;background:#dc262614;border-color:#dc26262e}.vmn9mpb-8.v11id82e:not(.v124n73o){color:#0e7490;background:#22d3ee1a;border-color:#22d3ee38}.vmn9mpb-8.v1i2guj2:not(.v124n73o){color:#ea580c;background:#ea580c14;border-color:#ea580c2e}.vmn9mpb-8.v12gavlj:not(.v124n73o){color:#6b6e76;background:#e4e4e7;border-color:#e8e8eb}.vmn9mpb-8.v9duj39:not(.v124n73o){color:#ea580c;background:#ea580c1a;border-color:#ea580c38}.vmn9mpb-8.vjtgbed:not(.v124n73o){color:#0e7490;background:#22d3ee17;border-color:#22d3ee33}.vmn9mpb-8.vt17xas:not(.v124n73o){color:#6b6e76;background:#f0f0f2;border-color:#e8e8eb}.vmn9mpb-9{font-size:11px;font-weight:600;letter-spacing:-.01em}.vmn9mpb-10{display:flex;flex-direction:column;align-items:stretch;justify-content:flex-start;gap:20px;padding:24px 32px 40px}.v1yv3uow-1{display:flex;align-items:center;justify-content:flex-start;gap:7px;transition:.24s cubic-bezier(.4,0,.2,1);transition-property:background,border-color,color,box-shadow;display:inline-flex;height:32px;padding:0 14px;border-radius:var(--radius-md);border:1px solid transparent;font-size:12.5px;font-weight:500;letter-spacing:-.005em;line-height:1;white-space:nowrap;-webkit-user-select:none;user-select:none}.v1yv3uow-1:disabled{cursor:not-allowed;opacity:.5}.v1yv3uow-1>svg{width:13px;height:13px;flex-shrink:0}.v1yv3uow-1.v1d37md8{background:#22d3ee;color:#0a0b0d;font-weight:600;box-shadow:0 0 0 1px #22d3ee4d,0 6px 20px -6px #22d3ee73}.v1yv3uow-1.v1d37md8:hover:not(:disabled){background:#06b6d4;box-shadow:0 0 0 1px #22d3ee73,0 8px 22px -4px #22d3ee99}.v1yv3uow-1.v1d37md8:active:not(:disabled){background:#0e7490}.v1yv3uow-1.v1kpy128{background:#f0f0f2;color:#0a0b0d;border-color:#d4d4d8}.v1yv3uow-1.v1kpy128:hover:not(:disabled){background:#ececee;border-color:#22d3ee73}.v1yv3uow-1.vhmrut{background:transparent;color:#6b6e76}.v1yv3uow-1.vhmrut:hover:not(:disabled){background:#f0f0f2;color:#0a0b0d}.v1yv3uow-1.vs705h9{background:transparent;color:#dc2626;border-color:#dc262666}.v1yv3uow-1.vs705h9:hover:not(:disabled){background:#dc262614;border-color:#dc2626}.v1d1autj-1{display:flex;flex-direction:column;align-items:stretch;justify-content:flex-start;background:transparent}.v1d1autj-1.vra3f9d{border:1px solid #e8e8eb;border-radius:var(--radius-lg);overflow:hidden;background:#fcfcfc}.v1d1autj-1.v1ofnfk9{height:100%;overflow:hidden}.v1d1autj-2{display:flex;flex-direction:column;align-items:stretch;justify-content:flex-start;padding:22px 32px;border-bottom:1px solid #e8e8eb;background:#fcfcfc}.v1d1autj-2.v16nf7cu{position:sticky;top:0;z-index:3}.v1d1autj-2.vp8tseb{cursor:pointer;padding:16px 24px}.v1d1autj-3{display:flex;align-items:center;justify-content:space-between;gap:12px;width:100%}.v1d1autj-4{margin-bottom:14px}.v1d1autj-5{display:flex;align-items:center;justify-content:flex-start;gap:12px;min-width:0;flex:1}.v1d1autj-6{display:flex;flex-direction:column;align-items:stretch;justify-content:flex-start;gap:8px;min-width:0;flex:1}.v1d1autj-7{display:flex;align-items:center;justify-content:flex-start;gap:12px;min-width:0}.v1d1autj-8{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:16px;font-weight:600;color:#0a0b0d;letter-spacing:-.02em;margin:0}.v1d1autj-8.v8omtap{font-size:30px;font-weight:600;letter-spacing:-.025em;line-height:1.1}.v1d1autj-9{font-size:12.5px;color:#6b6e76;max-width:720px;line-height:1.5}.v1d1autj-10{display:inline-flex}.v1d1autj-11{font-family:Geist Mono,JetBrains Mono,SF Mono,ui-monospace,monospace;font-feature-settings:"tnum","zero";overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:11.5px;color:#6b6e76}.v1d1autj-12{display:flex;align-items:center;justify-content:flex-start;gap:8px;flex-shrink:0}.v1d1autj-13{transition:.24s cubic-bezier(.4,0,.2,1);transition-property:transform;display:inline-flex;width:18px;height:18px;align-items:center;justify-content:center;color:#a4a7af;transform:rotate(-90deg)}.v1d1autj-13.v12vk5oa{transform:rotate(0)}.v1d1autj-13>svg{width:14px;height:14px}.v1d1autj-14{display:flex;flex-direction:column;align-items:stretch;justify-content:flex-start}.v1d1autj-14.v1dyggfg{flex:1;min-height:0;overflow:hidden}.v1d1autj-15{display:grid;grid-template-columns:repeat(auto-fit,minmax(160px,1fr));gap:1px;background:#e8e8eb;border-bottom:1px solid #e8e8eb}.v1d1autj-16{display:flex;flex-direction:column;align-items:stretch;justify-content:flex-start;gap:6px;padding:12px 16px 13px;background:#fcfcfc}.v1d1autj-17{font-family:Geist Mono,JetBrains Mono,SF Mono,ui-monospace,monospace;font-size:10px;letter-spacing:.1em;text-transform:uppercase;font-weight:500;font-size:9px;color:#6b6e76}.v1d1autj-18{font-variant-numeric:tabular-nums;font-size:20px;font-weight:500;color:#0a0b0d;letter-spacing:-.02em;line-height:1.1}.v1d1autj-18.vsjzv4v{color:#0e7490}.v1d1autj-19{display:flex;flex-direction:column;align-items:stretch;justify-content:flex-start;padding:20px 32px 24px}.v1d1autj-19:not(:last-child){border-bottom:1px solid #e8e8eb}.v1d1autj-19.v1i7hsdh{flex:1;min-height:0}.v1d1autj-20{display:flex;align-items:center;justify-content:space-between;margin-bottom:14px}.v1d1autj-20.vskhn2m{margin-bottom:0}.v1d1autj-21{display:flex;align-items:center;justify-content:flex-start;gap:8px;background:none;border:none;padding:0;margin:0;cursor:pointer;color:inherit;font:inherit;text-align:left}.v1d1autj-22{transition:.24s cubic-bezier(.4,0,.2,1);transition-property:transform;display:inline-flex;width:16px;height:16px;align-items:center;justify-content:center;color:#a4a7af;transform:rotate(-90deg)}.v1d1autj-22.v12vk5oa{transform:rotate(0)}.v1d1autj-22>svg{width:14px;height:14px}.v1d1autj-23{font-size:13.5px;font-weight:600;color:#0a0b0d;letter-spacing:-.01em}.v1d1autj-24{font-family:Geist Mono,JetBrains Mono,SF Mono,ui-monospace,monospace;font-feature-settings:"tnum","zero";font-size:10.5px;color:#6b6e76}.v1d1autj-25{display:flex;align-items:center;justify-content:flex-start;gap:4px}.vzvspbh-1{height:150px;padding:10px 14px 8px;border:1px solid #e8e8eb;border-radius:var(--radius-lg);background:#fcfcfc}.vzvspbh-2{font-family:Geist Mono,JetBrains Mono,SF Mono,ui-monospace,monospace;font-size:10px;letter-spacing:.1em;text-transform:uppercase;font-weight:500;color:#6b6e76;padding:0 2px 4px}.vzvspbh-3{display:flex;flex-direction:column;gap:4px}.vzvspbh-3+.vzvspbh-3{margin-top:16px}.vzvspbh-4{font-family:Geist Mono,JetBrains Mono,SF Mono,ui-monospace,monospace;font-feature-settings:"tnum","zero";padding:10px 12px;font-size:11px;line-height:1.5;color:#0a0b0d;min-width:160px}.vzvspbh-5{display:flex;justify-content:space-between;gap:14px}.vzvspbh-5+.vzvspbh-5{margin-top:4px}.vzvspbh-6{font-family:Geist Mono,JetBrains Mono,SF Mono,ui-monospace,monospace;font-size:10px;letter-spacing:.1em;text-transform:uppercase;font-weight:500;color:#6b6e76}.vzvspbh-7{color:#0e7490}.v1v3ddx1-1{padding:30px 24px;border:1px dashed #e8e8eb;border-radius:var(--radius-lg);text-align:center;color:#6b6e76;font-size:12.5px}.v1v3ddx1-2{border:1px solid #e8e8eb;border-radius:var(--radius-lg);background:#fcfcfc;overflow:auto}.v1v3ddx1-2.v72uwfi{flex:1;min-height:0}.v1v3ddx1-3{width:max-content;min-width:100%;border-collapse:collapse;font-size:12px;table-layout:auto}.v1v3ddx1-4{font-family:Geist Mono,JetBrains Mono,SF Mono,ui-monospace,monospace;font-size:10px;letter-spacing:.1em;text-transform:uppercase;font-weight:500;position:sticky;top:0;z-index:1;padding:10px 16px;background:#f7f7f8;box-shadow:inset 0 -1px #e8e8eb;color:#6b6e76;text-align:left;white-space:nowrap}.v1v3ddx1-4.v10rcuqw{text-align:right}.v1v3ddx1-4.vl7rjcc{padding-left:36px}.v1v3ddx1-5{transition:.24s cubic-bezier(.4,0,.2,1);transition-property:background;cursor:pointer;border-top:1px solid #e8e8eb;border-left:3px solid transparent;background:#f7f7f8}.v1v3ddx1-5:first-child{border-top:none}.v1v3ddx1-5:hover{background:#f0f0f2}.v1v3ddx1-5.v9wbf1x{background:#22d3ee0f}.v1v3ddx1-5.v9wbf1x:hover{background:#22d3ee1a}.v1v3ddx1-5.v1wi22g7{border-left-color:#22d3ee}.v1v3ddx1-6{padding:12px 16px;vertical-align:middle;white-space:nowrap;color:#0a0b0d;font-size:12px}.v1v3ddx1-6.v10rcuqw{text-align:right}.v1v3ddx1-6.vh68gi{font-family:Geist Mono,JetBrains Mono,SF Mono,ui-monospace,monospace;font-feature-settings:"tnum","zero";font-variant-numeric:tabular-nums;font-size:11.5px;color:#6b6e76}.v1v3ddx1-7{display:flex;align-items:center;justify-content:flex-start;gap:8px}.v1v3ddx1-8{transition:.24s cubic-bezier(.4,0,.2,1);transition-property:color;display:inline-flex;align-items:center;justify-content:center;padding:2px;background:transparent;border:none;cursor:pointer;color:#6b6e76}.v1v3ddx1-8:hover{color:#0a0b0d}.v1v3ddx1-9{font-family:Geist Mono,JetBrains Mono,SF Mono,ui-monospace,monospace;letter-spacing:.1em;text-transform:uppercase;font-weight:500;padding:3px 6px;border-radius:var(--radius-sm);background:#22d3ee1f;color:#0e7490;font-size:10px;letter-spacing:.04em;line-height:1}.v1v3ddx1-10{font-family:Geist Mono,JetBrains Mono,SF Mono,ui-monospace,monospace;font-feature-settings:"tnum","zero";padding:3px 6px;border-radius:var(--radius-sm);background:#f0f0f2;color:#6b6e76;font-size:10.5px;line-height:1}.v1v3ddx1-11{font-family:Geist Mono,JetBrains Mono,SF Mono,ui-monospace,monospace;letter-spacing:.1em;text-transform:uppercase;font-weight:500;padding:3px 6px;border-radius:var(--radius-sm);background:#f0f0f2;color:#6b6e76;font-size:10px;letter-spacing:.04em;line-height:1}.v1v3ddx1-12{font-size:12.5px;font-weight:500;color:#0a0b0d;letter-spacing:-.005em}.v1v3ddx1-12.v9wbf1x{color:#0e7490}.v1v3ddx1-13{transition:.24s cubic-bezier(.4,0,.2,1);transition-property:background;cursor:pointer;border-top:1px solid #e8e8eb;border-left:3px solid transparent}.v1v3ddx1-13:hover{background:#f7f7f8}.v1v3ddx1-13.v1wi22g7{border-left-color:#22d3ee}.v1v3ddx1-14{padding:10px 16px;vertical-align:middle;white-space:nowrap;color:#0a0b0d;font-size:12px}.v1v3ddx1-14.v10rcuqw{text-align:right}.v1v3ddx1-14.vh68gi{font-family:Geist Mono,JetBrains Mono,SF Mono,ui-monospace,monospace;font-feature-settings:"tnum","zero";font-variant-numeric:tabular-nums;font-size:11.5px;color:#6b6e76}.v1v3ddx1-14.vl7rjcc{padding-left:36px}.v1v3ddx1-15{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-family:Geist Mono,JetBrains Mono,SF Mono,ui-monospace,monospace;font-feature-settings:"tnum","zero";font-size:12px;color:#0a0b0d;max-width:260px}.v1v3ddx1-16{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;display:block;max-width:320px}.v1v3ddx1-17{color:#a4a7af}.v1v3ddx1-18{border-top:1px solid #e8e8eb}.v1v3ddx1-19{padding:18px;text-align:center;font-size:12px;color:#6b6e76}.v6nngvf-1{color:#a4a7af}.v6nngvf-2{display:inline-block;width:40px;height:3px;border-radius:4px;background:#f0f0f2;position:relative;overflow:hidden;margin-right:8px;vertical-align:middle}.v6nngvf-3{position:absolute;left:0;top:0;bottom:0;border-radius:4px;background:#a4a7af}.v6nngvf-3.vj3xmch{background:#16a34a}.v6nngvf-3.v1b0sr1n{background:#ea580c}.v6nngvf-3.v3vjwcw{background:#dc2626}.v6nngvf-4{font-family:Geist Mono,JetBrains Mono,SF Mono,ui-monospace,monospace;font-feature-settings:"tnum","zero";font-variant-numeric:tabular-nums;font-size:12px;color:#0a0b0d;font-weight:500}.v6nngvf-5{display:flex;align-items:center;justify-content:flex-start;display:inline-flex}.v6nngvf-6{display:flex;align-items:center;justify-content:flex-start;gap:5px;display:inline-flex;justify-content:center;min-width:54px;padding:3px 7px;border-radius:var(--radius-sm);color:#6b6e76;background:#f0f0f2;font-size:11px;font-weight:600}.v6nngvf-6.vj3xmch{color:#16a34a;background:#16a34a1a}.v6nngvf-6.v3vjwcw{color:#dc2626;background:#dc26261a}.v6nngvf-7{display:flex;align-items:center;justify-content:flex-start;gap:1px;display:inline-flex;color:#a4a7af}.v6nngvf-7>svg{width:13px;height:13px}.v6nngvf-7>.filled{color:#ea580c;fill:currentColor}.v6nngvf-8{display:flex;align-items:center;justify-content:flex-end;gap:4px}.v6nngvf-9{display:flex;align-items:center;justify-content:flex-start;gap:4px;justify-content:center;height:24px;min-width:28px;padding:0 7px;border:1px solid #d4d4d8;border-radius:var(--radius-sm);background:#fcfcfc;color:#6b6e76;font-size:11px;font-weight:600}.v6nngvf-9>svg{width:12px;height:12px}.v6nngvf-9:hover:not(:disabled){border-color:#22d3ee80;background:#f0f0f2;color:#0a0b0d}.v6nngvf-9:disabled{opacity:.6}.v6nngvf-9.vrka86m{color:#16a34a;border-color:#16a34a80;background:#16a34a1a}.v6nngvf-9.v14fx5bw{color:#dc2626;border-color:#dc262680;background:#dc26261a}.v6nngvf-10{display:flex;align-items:center;justify-content:center;width:20px;height:24px;padding:0;border:none;border-radius:var(--radius-sm);background:transparent;color:#a4a7af}.v6nngvf-10>svg{width:14px;height:14px}.v6nngvf-10:hover:not(:disabled),.v6nngvf-10.v3c191l{color:#ea580c}.v6nngvf-10.v3c191l>svg{fill:currentColor}.v6nngvf-10:disabled{opacity:.6}.v1it1iyw-1{position:relative;display:inline-flex}.v1it1iyw-2{display:flex;align-items:center;justify-content:center;transition:.24s cubic-bezier(.4,0,.2,1);transition-property:background,color,border-color;appearance:none;padding:0;width:32px;height:32px;border-radius:var(--radius-md);border:1px solid #e8e8eb;background:#fcfcfc;color:#6b6e76;line-height:0;box-shadow:0 1px 2px #00000014}.v1it1iyw-2:hover:not(:disabled){background:#f0f0f2;color:#0a0b0d;border-color:#d4d4d8}.v1it1iyw-2:disabled{cursor:not-allowed;opacity:.5}.v1it1iyw-2>svg{width:16px;height:16px}.v1it1iyw-3{display:flex;flex-direction:column;align-items:stretch;justify-content:flex-start;position:absolute;top:calc(100% + 6px);right:0;min-width:210px;background:#f7f7f8;border:1px solid #d4d4d8;box-shadow:0 14px 30px -12px #22d3ee40;z-index:40;padding:6px 0}.v1it1iyw-4{display:flex;flex-direction:column;align-items:stretch;justify-content:flex-start;gap:2px;transition:.24s cubic-bezier(.4,0,.2,1);transition-property:background,color;text-align:left;background:transparent;border:0;padding:8px 14px;color:#0a0b0d;cursor:pointer}.v1it1iyw-4:hover{background:#ececee}.v1it1iyw-4.vp2z70{color:#dc2626}.v1it1iyw-4.vp2z70:hover{background:#dc26261a}.v1it1iyw-5{font-size:12px;font-weight:600;letter-spacing:.02em}.v1it1iyw-6{font-size:11px;color:#6b6e76}.v1it1iyw-7{height:1px;background:#e8e8eb;margin:4px 0}.v1gbsfzf-1{position:relative;display:inline-flex}.v1gbsfzf-2{display:flex;align-items:center;justify-content:flex-start}.v1gbsfzf-3{display:flex;align-items:center;justify-content:flex-start;gap:8px;transition:.24s cubic-bezier(.4,0,.2,1);transition-property:background,border-color,color,box-shadow;display:inline-flex;height:28px;padding:0 14px;border-radius:0;border:1px solid transparent;font-size:11px;font-weight:600;line-height:1;white-space:nowrap;-webkit-user-select:none;user-select:none;text-transform:uppercase;letter-spacing:.14em;background:#22d3ee;color:#0a0b0d;box-shadow:0 0 0 1px #0e7490,0 6px 16px -8px #22d3ee8c}.v1gbsfzf-3>svg{width:13px;height:13px;flex-shrink:0}.v1gbsfzf-3:hover:not(:disabled){background:#06b6d4}.v1gbsfzf-3:active:not(:disabled){background:#0e7490}.v1gbsfzf-3:disabled{cursor:not-allowed;opacity:.4}.v1gbsfzf-4{transition:.24s cubic-bezier(.4,0,.2,1);transition-property:background,border-color,color;display:inline-flex;align-items:center;justify-content:center;height:28px;width:26px;margin-left:1px;border-radius:0;border:1px solid transparent;background:#22d3ee;color:#0a0b0d;box-shadow:0 0 0 1px #0e7490}.v1gbsfzf-4>svg{width:13px;height:13px;transition:transform .18s ease}.v1gbsfzf-4.v9mb724>svg{transform:rotate(180deg)}.v1gbsfzf-4:hover:not(:disabled){background:#06b6d4}.v1gbsfzf-4:disabled{cursor:not-allowed;opacity:.4}.v1gbsfzf-5{display:flex;flex-direction:column;align-items:stretch;justify-content:flex-start;position:absolute;top:calc(100% + 6px);right:0;min-width:220px;background:#f7f7f8;border:1px solid #d4d4d8;box-shadow:0 14px 30px -12px #22d3ee59;z-index:40;padding:6px 0}.v1gbsfzf-6{display:flex;flex-direction:column;align-items:stretch;justify-content:flex-start;gap:2px;transition:.24s cubic-bezier(.4,0,.2,1);transition-property:background,color;text-align:left;background:transparent;border:0;padding:8px 14px;color:#0a0b0d;cursor:pointer}.v1gbsfzf-6:hover{background:#ececee}.v1gbsfzf-6.v1g7o2ge{color:#dc2626}.v1gbsfzf-6.v1g7o2ge:hover{background:#dc26261a}.v1gbsfzf-7{font-size:12px;font-weight:600;letter-spacing:.02em}.v1gbsfzf-8{font-size:11px;color:#6b6e76}.v1gbsfzf-9{height:1px;background:#e8e8eb;margin:4px 0}.v1eplm6x-1{display:flex;align-items:center;justify-content:flex-start;gap:8px;font-family:Geist Mono,JetBrains Mono,SF Mono,ui-monospace,monospace;font-feature-settings:"tnum","zero";font-size:13px;color:#6b6e76}.v1eplm6x-2{color:#a4a7af;margin:0 6px}.v1eplm6x-3{transition:.24s cubic-bezier(.4,0,.2,1);transition-property:color;font-family:Geist Mono,JetBrains Mono,SF Mono,ui-monospace,monospace;font-feature-settings:"tnum","zero";appearance:none;background:transparent;border:none;padding:0;color:#6b6e76;cursor:pointer}.v1eplm6x-3:hover,.v1eplm6x-4{color:#0a0b0d}.vgxz95z-1{border-left:1px solid #e8e8eb;background:#f7f7f8;display:flex;align-items:center;justify-content:center;color:#6b6e76;font-size:12px;flex-shrink:0}.vgxz95z-2{display:flex;flex-direction:column;align-items:stretch;justify-content:flex-start;position:relative;flex-shrink:0;border-left:1px solid #e8e8eb;background:#f7f7f8;overflow:hidden}.vgxz95z-3{display:flex;flex-direction:column;align-items:stretch;justify-content:flex-start;gap:10px;padding:14px 18px 12px;border-bottom:1px solid #e8e8eb;background:#f7f7f8;flex-shrink:0}.vgxz95z-4{display:flex;align-items:center;justify-content:space-between;gap:10px}.vgxz95z-5{display:flex;align-items:center;justify-content:flex-start;gap:6px}.vgxz95z-6{font-family:Geist Mono,JetBrains Mono,SF Mono,ui-monospace,monospace;font-size:10px;letter-spacing:.1em;text-transform:uppercase;font-weight:500;color:#6b6e76}.vgxz95z-7{display:flex;align-items:center;justify-content:flex-start;gap:10px;min-width:0}.vgxz95z-8{font-family:Geist Mono,JetBrains Mono,SF Mono,ui-monospace,monospace;font-feature-settings:"tnum","zero";font-size:9.5px;font-weight:600;padding:3px 8px;border-radius:4px;color:#0a0b0d;background:#22d3ee}.vgxz95z-9{font-size:15px;font-weight:600;color:#0a0b0d;letter-spacing:-.01em;font-variant-numeric:tabular-nums}.vgxz95z-10{flex:1;overflow:auto;padding:16px;display:flex;flex-direction:column;align-items:stretch;justify-content:flex-start;gap:18px}.vgxz95z-11{display:flex;flex-direction:column;align-items:stretch;justify-content:flex-start;gap:8px}.vgxz95z-12{font-family:Geist Mono,JetBrains Mono,SF Mono,ui-monospace,monospace;font-size:10px;letter-spacing:.1em;text-transform:uppercase;font-weight:500;color:#6b6e76}.vgxz95z-13{display:grid;grid-template-columns:repeat(3,1fr);gap:10px}.vgxz95z-14{display:flex;flex-direction:column;align-items:stretch;justify-content:flex-start;gap:6px;padding:12px 14px;background:#fcfcfc;border:1px solid #e8e8eb;border-radius:var(--radius-md)}.vgxz95z-15{font-family:Geist Mono,JetBrains Mono,SF Mono,ui-monospace,monospace;font-size:10px;letter-spacing:.1em;text-transform:uppercase;font-weight:500;color:#6b6e76}.vgxz95z-16{font-variant-numeric:tabular-nums;font-size:18px;font-weight:500;color:#0a0b0d;letter-spacing:-.02em}.vgxz95z-16.v15guhoh{color:#0e7490}.vgxz95z-16.v1amf7no{color:#dc2626}.vgxz95z-17{display:grid;grid-template-columns:110px 1fr;gap:6px 12px;margin:0}.vgxz95z-18{font-size:12px;color:#6b6e76}.vgxz95z-19{margin:0;font-family:Geist Mono,JetBrains Mono,SF Mono,ui-monospace,monospace;font-feature-settings:"tnum","zero";font-variant-numeric:tabular-nums;font-size:11.5px;color:#0a0b0d;word-break:break-all}.vgxz95z-20{display:flex;flex-direction:column;align-items:stretch;justify-content:flex-start;border:1px solid #e8e8eb;border-radius:var(--radius-md);overflow:hidden;background:#fcfcfc}.vgxz95z-21{transition:.24s cubic-bezier(.4,0,.2,1);transition-property:background;display:flex;align-items:center;justify-content:flex-start;gap:10px;width:100%;padding:10px 12px;background:transparent;border:none;border-top:1px solid #e8e8eb;cursor:pointer;text-align:left}.vgxz95z-21:first-child{border-top:none}.vgxz95z-21:hover{background:#f0f0f2}.vgxz95z-22{display:flex;flex-direction:column;align-items:stretch;justify-content:flex-start;gap:2px;flex:1;min-width:0}.vgxz95z-23{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-family:Geist Mono,JetBrains Mono,SF Mono,ui-monospace,monospace;font-feature-settings:"tnum","zero";font-size:12px;color:#0a0b0d}.vgxz95z-24{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-family:Geist Mono,JetBrains Mono,SF Mono,ui-monospace,monospace;font-feature-settings:"tnum","zero";font-size:10.5px;color:#6b6e76}.vgxz95z-25{display:flex;align-items:center;justify-content:flex-start;gap:10px;flex-shrink:0}.vgxz95z-26{font-family:Geist Mono,JetBrains Mono,SF Mono,ui-monospace,monospace;font-feature-settings:"tnum","zero";font-variant-numeric:tabular-nums;font-size:11px;color:#6b6e76;min-width:44px;text-align:right}.vgxz95z-27{padding:18px 14px;text-align:center;font-size:11.5px;color:#6b6e76;border:1px dashed #e8e8eb;border-radius:var(--radius-md)}.v11wyrim-1{display:flex;flex-direction:column;align-items:stretch;justify-content:flex-start;flex-shrink:0;border-right:1px solid #e8e8eb;background:#f7f7f8;overflow:hidden;position:relative}.v11wyrim-2{display:flex;align-items:center;justify-content:flex-start;gap:10px;padding:14px 16px;border-bottom:1px solid #e8e8eb}.v11wyrim-3{width:26px;height:26px;background:linear-gradient(135deg,#22d3ee,#0e7490);border-radius:7px;display:grid;place-items:center;color:#0a0b0d;font-weight:700;font-size:12.5px;letter-spacing:-.02em;box-shadow:0 0 20px #22d3ee33}.v11wyrim-4{display:flex;flex-direction:column;align-items:stretch;justify-content:flex-start;gap:1px;flex:1;min-width:0}.v11wyrim-5{font-size:13px;font-weight:600;letter-spacing:-.01em;color:#0a0b0d}.v11wyrim-6{font-family:Geist Mono,JetBrains Mono,SF Mono,ui-monospace,monospace;font-size:10px;color:#6b6e76;font-variant-numeric:tabular-nums}.v11wyrim-7{display:flex;align-items:center;justify-content:flex-start;gap:6px;transition:.24s cubic-bezier(.4,0,.2,1);transition-property:background,border-color;margin:10px 12px 0;padding:0 8px;background:#f0f0f2;border:1px solid #e8e8eb;border-radius:var(--radius-sm);color:#6b6e76}.v11wyrim-7:focus-within{border-color:#22d3ee;background:#fcfcfc;color:#0a0b0d}.v11wyrim-7>svg{width:12px;height:12px;flex-shrink:0}.v11wyrim-8{flex:1;appearance:none;background:transparent;border:none;outline:none;padding:6px 0;font-size:12.5px;color:#0a0b0d;min-width:0}.v11wyrim-8::placeholder{color:#a4a7af}.v11wyrim-9{display:flex;align-items:center;justify-content:center;transition:.24s cubic-bezier(.4,0,.2,1);transition-property:background,color;width:18px;height:18px;background:transparent;border:none;border-radius:var(--radius-sm);padding:0;color:#a4a7af;cursor:pointer;flex-shrink:0}.v11wyrim-9:hover{background:#ececee;color:#0a0b0d}.v11wyrim-9>svg{width:12px;height:12px}.v11wyrim-10{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:12px 16px 6px}.v11wyrim-11{display:flex;align-items:center;justify-content:flex-start;gap:6px;flex-wrap:wrap;padding:10px 12px 0}.v11wyrim-12{display:flex;align-items:center;justify-content:flex-start;gap:5px;transition:.24s cubic-bezier(.4,0,.2,1);transition-property:background,border-color,color;appearance:none;border:1px solid #e8e8eb;border-radius:999px;background:#f0f0f2;color:#6b6e76;padding:4px 8px;font-size:10px;line-height:1;font-weight:500;text-transform:uppercase;cursor:pointer}.v11wyrim-12:hover{background:#ececee;color:#0a0b0d}.v11wyrim-12.v6lqv3n{background:#0a0b0d;border-color:#0a0b0d;color:#fcfcfc}.v11wyrim-12.v19qld18:not(.v6lqv3n){color:#16a34a;background:#16a34a14;border-color:#16a34a2e}.v11wyrim-12.v1cg0dpp:not(.v6lqv3n){color:#dc2626;background:#dc262614;border-color:#dc26262e}.v11wyrim-12.v87wrzh:not(.v6lqv3n){color:#0e7490;background:#22d3ee1a;border-color:#22d3ee38}.v11wyrim-12.vs27jp:not(.v6lqv3n){color:#ea580c;background:#ea580c14;border-color:#ea580c2e}.v11wyrim-12.vyxbtsk:not(.v6lqv3n){background:#e4e4e7}.v11wyrim-12.vfa0aud:not(.v6lqv3n){color:#ea580c;background:#ea580c1a;border-color:#ea580c38}.v11wyrim-12.vrfu41b:not(.v6lqv3n){color:#0e7490;background:#22d3ee17;border-color:#22d3ee33}.v11wyrim-12.v177364w:not(.v6lqv3n){color:#6b6e76;background:#f0f0f2;border-color:#e8e8eb}.v11wyrim-13{font-family:Geist Mono,JetBrains Mono,SF Mono,ui-monospace,monospace;font-size:10px;font-weight:650;font-variant-numeric:tabular-nums}.v11wyrim-14{font-family:Geist Mono,JetBrains Mono,SF Mono,ui-monospace,monospace;font-size:10px;letter-spacing:.1em;text-transform:uppercase;font-weight:500;transition:.24s cubic-bezier(.4,0,.2,1);transition-property:color;appearance:none;background:transparent;border:none;padding:0;color:#6b6e76;cursor:pointer}.v11wyrim-14:hover,.v11wyrim-14.v6lqv3n{color:#0a0b0d}.v11wyrim-15{display:flex;align-items:center;justify-content:flex-start;gap:4px}.v11wyrim-16{font-family:Geist Mono,JetBrains Mono,SF Mono,ui-monospace,monospace;font-size:10px;color:#a4a7af;font-variant-numeric:tabular-nums}.v11wyrim-17{display:flex;align-items:center;justify-content:center;transition:.24s cubic-bezier(.4,0,.2,1);transition-property:background,color;width:22px;height:22px;background:transparent;border:none;border-radius:var(--radius-sm);padding:0;color:#a4a7af;cursor:pointer}.v11wyrim-17:hover{background:#f0f0f2;color:#0a0b0d}.v11wyrim-17:disabled{opacity:.4;cursor:default}.v11wyrim-17>svg{width:14px;height:14px}.v11wyrim-18{flex:1;overflow:auto;padding-bottom:10px}.vwomtc5-1{padding:2px 0 10px}.vwomtc5-2{padding:20px;display:flex;flex-direction:column;align-items:flex-start;justify-content:flex-start;gap:10px}.vwomtc5-3{color:#6b6e76;font-size:11.5px;font-weight:600;letter-spacing:-.005em}.vwomtc5-4{color:#6b6e76;font-size:12px;line-height:1.5;white-space:pre-wrap}.vwomtc5-5{font-family:Geist Mono,JetBrains Mono,SF Mono,ui-monospace,monospace;font-feature-settings:"tnum","zero";display:block;width:100%;overflow:auto;color:#0a0b0d;background:#f0f0f2;border:1px solid #e8e8eb;border-radius:var(--radius-sm);padding:10px 12px}.vwomtc5-6{display:flex;align-items:center;justify-content:flex-start;gap:8px;transition:.24s cubic-bezier(.4,0,.2,1);transition-property:background,color;position:relative;width:calc(100% - 16px);margin:1px 8px;background:transparent;border:none;border-radius:var(--radius-sm);text-align:left;color:#6b6e76;font-size:12.5px;line-height:20px;min-height:30px;padding-top:5px;padding-bottom:5px;padding-right:10px;overflow:hidden}.vwomtc5-6.depth0{padding-left:10px}.vwomtc5-6.depth1{padding-left:24px}.vwomtc5-6.depth2{padding-left:38px}.vwomtc5-6.depth3{padding-left:52px}.vwomtc5-6.active{background:#f0f0f2;color:#0a0b0d}.vwomtc5-6.active:before{content:"";position:absolute;left:-8px;top:6px;bottom:6px;width:2px;background:#22d3ee;border-radius:2px}.vwomtc5-7{display:flex;align-items:center;justify-content:flex-start;gap:8px;transition:.24s cubic-bezier(.4,0,.2,1);transition-property:background,color;position:relative;width:calc(100% - 16px);margin:1px 8px;background:transparent;border:none;border-radius:var(--radius-sm);text-align:left;color:#6b6e76;font-size:12.5px;line-height:20px;min-height:30px;padding-top:5px;padding-bottom:5px;padding-right:10px;overflow:hidden;cursor:pointer}.vwomtc5-7.vhb7hne{padding-left:10px}.vwomtc5-7.v1dycipb{padding-left:24px}.vwomtc5-7.v1qfp5hv{padding-left:38px}.vwomtc5-7.v5btrph{padding-left:52px}.vwomtc5-7.viu82ah{background:#f0f0f2;color:#0a0b0d}.vwomtc5-7.viu82ah:before{content:"";position:absolute;left:-8px;top:6px;bottom:6px;width:2px;background:#22d3ee;border-radius:2px}.vwomtc5-7:not(.viu82ah):hover{background:#fcfcfc;color:#0a0b0d}.vwomtc5-8{transition:.24s cubic-bezier(.4,0,.2,1);transition-property:transform,background,color;display:inline-flex;width:18px;height:18px;align-items:center;justify-content:center;background:transparent;border:none;border-radius:var(--radius-sm);padding:0;color:#a4a7af;opacity:.8;flex-shrink:0;cursor:pointer}.vwomtc5-8:hover{background:#f0f0f2;color:#0a0b0d;opacity:1}.vwomtc5-8>svg{transition:.24s cubic-bezier(.4,0,.2,1);transition-property:transform;width:12px;height:12px}.vwomtc5-8.vk7wfis>svg{transform:rotate(90deg)}.vwomtc5-9{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex:1;font-weight:600;font-size:12.5px;color:#0a0b0d}.vwomtc5-10{color:#a4a7af;font-weight:400}.vwomtc5-11{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex:1;font-weight:500;font-size:12.5px}.vwomtc5-12{color:#a4a7af;font-weight:400}.vwomtc5-13{color:#a4a7af;font-weight:400;margin:0 4px}.vwomtc5-14{display:flex;align-items:center;justify-content:flex-start;gap:6px;flex-shrink:0}.vwomtc5-15{font-family:Geist Mono,JetBrains Mono,SF Mono,ui-monospace,monospace;font-feature-settings:"tnum","zero";font-size:10px;color:#a4a7af;font-variant-numeric:tabular-nums;flex-shrink:0}.v15ec1hr-1{height:100%;overflow:hidden;background:transparent}:root{color-scheme:light;--radius-sm: 6px;--radius-md: 8px;--radius-lg: 12px}*,*:before,*:after{box-sizing:border-box;margin:0;padding:0}html,body{height:100%;font-family:Geist,-apple-system,BlinkMacSystemFont,Inter,Segoe UI,system-ui,sans-serif;font-feature-settings:"ss01","ss03","cv11";background:#fcfcfc;color:#0a0b0d;font-size:16px;line-height:1.5;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-rendering:optimizeLegibility;letter-spacing:-.005em}#root{height:100%}::selection{background:#22d3ee4d;color:#0a0b0d}button{cursor:pointer;font-family:inherit;font-size:inherit;color:inherit;letter-spacing:inherit}input,select,textarea{font-family:inherit;font-size:inherit;color:inherit}a{color:#0e7490;text-decoration:none}a:hover{color:#22d3ee;text-decoration:underline;text-underline-offset:3px}