@testsmith/api-spector 0.0.7 → 0.0.8

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.
@@ -3,7 +3,7 @@
3
3
  const promises = require("fs/promises");
4
4
  const path = require("path");
5
5
  const undici = require("undici");
6
- const scriptRunner = require("./chunks/script-runner-CmdLWmKN.js");
6
+ const requestHandler = require("./chunks/request-handler-C1b53aHR.js");
7
7
  require("crypto");
8
8
  require("vm");
9
9
  require("dayjs");
@@ -150,7 +150,7 @@ async function loadEnvironments(workspace, dir) {
150
150
  }
151
151
  return envs;
152
152
  }
153
- async function executeRequest(req, collectionVars, envVars, globals, verbose) {
153
+ async function executeRequest(req, collectionVars, envVars, globals, verbose, tls) {
154
154
  const base = {
155
155
  requestId: req.id,
156
156
  name: req.name,
@@ -164,7 +164,7 @@ async function executeRequest(req, collectionVars, envVars, globals, verbose) {
164
164
  let updatedGlobals = { ...globals };
165
165
  let preScriptError;
166
166
  if (req.preRequestScript?.trim()) {
167
- const r = await scriptRunner.runScript(req.preRequestScript, {
167
+ const r = await requestHandler.runScript(req.preRequestScript, {
168
168
  envVars: { ...envVars },
169
169
  collectionVars: { ...collectionVars },
170
170
  globals: { ...globals },
@@ -175,41 +175,41 @@ async function executeRequest(req, collectionVars, envVars, globals, verbose) {
175
175
  updatedEnvVars = r.updatedEnvVars;
176
176
  updatedCollectionVars = r.updatedCollectionVars;
177
177
  updatedGlobals = r.updatedGlobals;
178
- scriptRunner.patchGlobals(r.updatedGlobals);
179
- await scriptRunner.persistGlobals();
178
+ requestHandler.patchGlobals(r.updatedGlobals);
179
+ await requestHandler.persistGlobals();
180
180
  if (verbose && r.consoleOutput.length) r.consoleOutput.forEach((l) => console.log(color(` [pre] ${l}`, C.gray)));
181
181
  if (r.error) console.error(color(` [pre-script error] ${r.error}`, C.red));
182
182
  }
183
- const vars = scriptRunner.mergeVars(updatedEnvVars, updatedCollectionVars, updatedGlobals, localVars);
184
- const resolvedUrl = scriptRunner.buildUrl(req.url, req.params, vars);
183
+ const vars = requestHandler.mergeVars(updatedEnvVars, updatedCollectionVars, updatedGlobals, localVars);
184
+ const resolvedUrl = requestHandler.buildUrl(req.url, req.params, vars);
185
185
  base.resolvedUrl = resolvedUrl;
186
186
  const start = Date.now();
187
187
  try {
188
188
  const authH = {};
189
189
  if (req.auth.type === "bearer") {
190
190
  let token = req.auth.token ?? "";
191
- if (!token && req.auth.tokenSecretRef) token = await scriptRunner.getSecret(req.auth.tokenSecretRef) ?? "";
192
- if (token) authH["Authorization"] = `Bearer ${scriptRunner.interpolate(token, vars)}`;
191
+ if (!token && req.auth.tokenSecretRef) token = await requestHandler.getSecret(req.auth.tokenSecretRef) ?? "";
192
+ if (token) authH["Authorization"] = `Bearer ${requestHandler.interpolate(token, vars)}`;
193
193
  }
194
194
  const headers = new undici.Headers();
195
195
  for (const h of req.headers) {
196
- if (h.enabled && h.key) headers.set(scriptRunner.interpolate(h.key, vars), scriptRunner.interpolate(h.value, vars));
196
+ if (h.enabled && h.key) headers.set(requestHandler.interpolate(h.key, vars), requestHandler.interpolate(h.value, vars));
197
197
  }
198
198
  for (const [k, v] of Object.entries(authH)) headers.set(k, v);
199
199
  let body;
200
200
  if (req.body.mode === "json" && req.body.json) {
201
- body = scriptRunner.interpolate(req.body.json, vars);
201
+ body = requestHandler.interpolate(req.body.json, vars);
202
202
  if (!headers.has("content-type")) headers.set("Content-Type", "application/json");
203
203
  } else if (req.body.mode === "raw" && req.body.raw) {
204
- body = scriptRunner.interpolate(req.body.raw, vars);
204
+ body = requestHandler.interpolate(req.body.raw, vars);
205
205
  if (!headers.has("content-type")) headers.set("Content-Type", req.body.rawContentType ?? "text/plain");
206
206
  } else if (req.body.mode === "graphql" && req.body.graphql) {
207
207
  const gql = req.body.graphql;
208
- const gqlBody = { query: scriptRunner.interpolate(gql.query, vars) };
208
+ const gqlBody = { query: requestHandler.interpolate(gql.query, vars) };
209
209
  const rawVars = gql.variables?.trim();
210
210
  if (rawVars) {
211
211
  try {
212
- gqlBody.variables = JSON.parse(scriptRunner.interpolate(rawVars, vars));
212
+ gqlBody.variables = JSON.parse(requestHandler.interpolate(rawVars, vars));
213
213
  } catch {
214
214
  }
215
215
  }
@@ -217,10 +217,12 @@ async function executeRequest(req, collectionVars, envVars, globals, verbose) {
217
217
  body = JSON.stringify(gqlBody);
218
218
  if (!headers.has("content-type")) headers.set("Content-Type", "application/json");
219
219
  }
220
+ const dispatcher = await requestHandler.buildDispatcher(void 0, tls);
220
221
  const fetchResp = await undici.fetch(resolvedUrl, {
221
222
  method: req.method,
222
223
  headers,
223
- body: ["GET", "HEAD"].includes(req.method) ? void 0 : body
224
+ body: ["GET", "HEAD"].includes(req.method) ? void 0 : body,
225
+ ...dispatcher ? { dispatcher } : {}
224
226
  });
225
227
  const responseBody = await fetchResp.text();
226
228
  const durationMs = Date.now() - start;
@@ -240,7 +242,7 @@ async function executeRequest(req, collectionVars, envVars, globals, verbose) {
240
242
  let consoleOutput = [];
241
243
  let postScriptError;
242
244
  if (req.postRequestScript?.trim()) {
243
- const r = await scriptRunner.runScript(req.postRequestScript, {
245
+ const r = await requestHandler.runScript(req.postRequestScript, {
244
246
  envVars: updatedEnvVars,
245
247
  collectionVars: updatedCollectionVars,
246
248
  globals: updatedGlobals,
@@ -250,8 +252,8 @@ async function executeRequest(req, collectionVars, envVars, globals, verbose) {
250
252
  testResults = r.testResults;
251
253
  consoleOutput = r.consoleOutput;
252
254
  postScriptError = r.error;
253
- scriptRunner.patchGlobals(r.updatedGlobals);
254
- await scriptRunner.persistGlobals();
255
+ requestHandler.patchGlobals(r.updatedGlobals);
256
+ await requestHandler.persistGlobals();
255
257
  if (verbose && r.consoleOutput.length) r.consoleOutput.forEach((l) => console.log(color(` [post] ${l}`, C.gray)));
256
258
  }
257
259
  const allPassed = testResults.every((t) => t.passed);
@@ -311,7 +313,7 @@ async function main() {
311
313
  console.error(color(`Error: could not read workspace file: ${wsPath}`, C.red));
312
314
  process.exit(1);
313
315
  }
314
- await scriptRunner.loadGlobals(wsDir);
316
+ await requestHandler.loadGlobals(wsDir);
315
317
  const collections = await loadCollections(workspace, wsDir);
316
318
  const environments = await loadEnvironments(workspace, wsDir);
317
319
  const env = envName ? environments.find((e) => e.name.toLowerCase() === envName.toLowerCase()) ?? null : null;
@@ -334,12 +336,14 @@ async function main() {
334
336
  const items = collectTagged(col.rootFolder, col.requests, col.collectionVariables ?? {}, filterTags);
335
337
  if (items.length === 0) continue;
336
338
  if (!firstColName) firstColName = col.name;
337
- const envVars = await scriptRunner.buildEnvVars(env);
338
- const globals = scriptRunner.getGlobals();
339
+ const envVars = await requestHandler.buildEnvVars(env);
340
+ const globals = requestHandler.getGlobals();
339
341
  console.log(color(` ┌ ${col.name}`, C.bold, C.white));
342
+ const workspaceTls = workspace.settings?.tls;
343
+ const effectiveTls = col.tls ? { ...workspaceTls, ...col.tls } : workspaceTls;
340
344
  let bailed = false;
341
345
  for (const item of items) {
342
- const result = await executeRequest(item.request, item.collectionVars, envVars, globals, verbose);
346
+ const result = await executeRequest(item.request, item.collectionVars, envVars, globals, verbose, effectiveTls);
343
347
  printResult(result, verbose);
344
348
  allResults.push(result);
345
349
  summary.total++;
@@ -13597,6 +13597,11 @@ const useStore = create()(
13597
13597
  s.collections[id2].data.dataSet = ds;
13598
13598
  s.collections[id2].dirty = true;
13599
13599
  }),
13600
+ updateCollectionTls: (id2, tls) => set2((s) => {
13601
+ if (!s.collections[id2]) return;
13602
+ s.collections[id2].data.tls = tls;
13603
+ s.collections[id2].dirty = true;
13604
+ }),
13600
13605
  // ── Folder CRUD ───────────────────────────────────────────────────────────
13601
13606
  addFolder: (collectionId, parentFolderId, name2) => set2((s) => {
13602
13607
  const col = s.collections[collectionId]?.data;
@@ -14478,6 +14483,119 @@ function FolderAuthPanel({ auth, onChange }) {
14478
14483
  ] }) })
14479
14484
  ] });
14480
14485
  }
14486
+ function CollectionSettingsModal({ collection, onClose }) {
14487
+ const updateCollectionTls = useStore((s) => s.updateCollectionTls);
14488
+ const existing = collection.tls;
14489
+ const [caCertPath, setCaCertPath] = reactExports.useState(existing?.caCertPath ?? "");
14490
+ const [clientCertPath, setClientCertPath] = reactExports.useState(existing?.clientCertPath ?? "");
14491
+ const [clientKeyPath, setClientKeyPath] = reactExports.useState(existing?.clientKeyPath ?? "");
14492
+ const [rejectUnauthorized, setRejectUnauthorized] = reactExports.useState(existing?.rejectUnauthorized !== false);
14493
+ function save() {
14494
+ const hasAny = caCertPath.trim() || clientCertPath.trim() || clientKeyPath.trim();
14495
+ updateCollectionTls(collection.id, hasAny ? {
14496
+ caCertPath: caCertPath.trim() || void 0,
14497
+ clientCertPath: clientCertPath.trim() || void 0,
14498
+ clientKeyPath: clientKeyPath.trim() || void 0,
14499
+ rejectUnauthorized
14500
+ } : void 0);
14501
+ onClose();
14502
+ }
14503
+ return /* @__PURE__ */ jsxRuntimeExports.jsx(
14504
+ "div",
14505
+ {
14506
+ className: "fixed inset-0 bg-black/50 z-50 flex items-start justify-center pt-16",
14507
+ onClick: onClose,
14508
+ children: /* @__PURE__ */ jsxRuntimeExports.jsxs(
14509
+ "div",
14510
+ {
14511
+ className: "w-[480px] bg-surface-900 border border-surface-800 rounded-lg shadow-2xl flex flex-col max-h-[80vh]",
14512
+ onClick: (e) => e.stopPropagation(),
14513
+ children: [
14514
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center justify-between px-4 py-2.5 border-b border-surface-800 shrink-0", children: [
14515
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
14516
+ /* @__PURE__ */ jsxRuntimeExports.jsx("h2", { className: "text-sm font-semibold", children: "Collection settings" }),
14517
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("p", { className: "text-[10px] text-surface-600 mt-0.5", children: [
14518
+ collection.name,
14519
+ " — TLS overrides for all requests in this collection"
14520
+ ] })
14521
+ ] }),
14522
+ /* @__PURE__ */ jsxRuntimeExports.jsx("button", { onClick: onClose, className: "text-surface-400 hover:text-white text-lg leading-none", children: "×" })
14523
+ ] }),
14524
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "px-4 py-3 flex-1 overflow-y-auto text-xs flex flex-col gap-3", children: [
14525
+ /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-surface-500", children: "These settings override the workspace-level TLS configuration for every request in this collection. Leave all paths empty to inherit from the workspace." }),
14526
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex flex-col gap-1", children: [
14527
+ /* @__PURE__ */ jsxRuntimeExports.jsx("label", { className: "text-[10px] uppercase tracking-wider text-surface-600 font-medium", children: "CA Certificate path" }),
14528
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
14529
+ "input",
14530
+ {
14531
+ value: caCertPath,
14532
+ onChange: (e) => setCaCertPath(e.target.value),
14533
+ placeholder: "/path/to/ca.crt (leave empty to inherit)",
14534
+ className: "bg-surface-800 border border-surface-700 rounded px-2.5 py-1.5 focus:outline-none focus:border-blue-500 font-mono placeholder-surface-600"
14535
+ }
14536
+ )
14537
+ ] }),
14538
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex flex-col gap-1", children: [
14539
+ /* @__PURE__ */ jsxRuntimeExports.jsx("label", { className: "text-[10px] uppercase tracking-wider text-surface-600 font-medium", children: "Client certificate path" }),
14540
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
14541
+ "input",
14542
+ {
14543
+ value: clientCertPath,
14544
+ onChange: (e) => setClientCertPath(e.target.value),
14545
+ placeholder: "/path/to/client.crt (leave empty to inherit)",
14546
+ className: "bg-surface-800 border border-surface-700 rounded px-2.5 py-1.5 focus:outline-none focus:border-blue-500 font-mono placeholder-surface-600"
14547
+ }
14548
+ )
14549
+ ] }),
14550
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex flex-col gap-1", children: [
14551
+ /* @__PURE__ */ jsxRuntimeExports.jsx("label", { className: "text-[10px] uppercase tracking-wider text-surface-600 font-medium", children: "Client key path" }),
14552
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
14553
+ "input",
14554
+ {
14555
+ value: clientKeyPath,
14556
+ onChange: (e) => setClientKeyPath(e.target.value),
14557
+ placeholder: "/path/to/client.key (leave empty to inherit)",
14558
+ className: "bg-surface-800 border border-surface-700 rounded px-2.5 py-1.5 focus:outline-none focus:border-blue-500 font-mono placeholder-surface-600"
14559
+ }
14560
+ )
14561
+ ] }),
14562
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("label", { className: "flex items-center gap-2 cursor-pointer", children: [
14563
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
14564
+ "input",
14565
+ {
14566
+ type: "checkbox",
14567
+ checked: rejectUnauthorized,
14568
+ onChange: (e) => setRejectUnauthorized(e.target.checked),
14569
+ className: "accent-blue-500"
14570
+ }
14571
+ ),
14572
+ /* @__PURE__ */ jsxRuntimeExports.jsx("span", { children: "Reject unauthorized / self-signed certificates" })
14573
+ ] })
14574
+ ] }),
14575
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex gap-2 px-4 py-3 border-t border-surface-800 shrink-0", children: [
14576
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
14577
+ "button",
14578
+ {
14579
+ onClick: save,
14580
+ className: "px-4 py-1.5 bg-blue-600 hover:bg-blue-500 rounded text-xs font-medium transition-colors",
14581
+ children: "Save"
14582
+ }
14583
+ ),
14584
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
14585
+ "button",
14586
+ {
14587
+ onClick: onClose,
14588
+ className: "px-4 py-1.5 bg-surface-800 hover:bg-surface-700 rounded text-xs transition-colors",
14589
+ children: "Cancel"
14590
+ }
14591
+ )
14592
+ ] })
14593
+ ]
14594
+ }
14595
+ )
14596
+ }
14597
+ );
14598
+ }
14481
14599
  function InlineEdit({
14482
14600
  value,
14483
14601
  onCommit,
@@ -14760,6 +14878,7 @@ function CollectionNode({
14760
14878
  }) {
14761
14879
  const [expanded, setExpanded] = reactExports.useState(true);
14762
14880
  const [renaming, setRenaming] = reactExports.useState(false);
14881
+ const [showSettings, setShowSettings] = reactExports.useState(false);
14763
14882
  const [expandCtrl, setExpandCtrl] = reactExports.useState({ value: true, seq: 0 });
14764
14883
  function expandAll() {
14765
14884
  setExpandCtrl((c) => ({ value: true, seq: c.seq + 1 }));
@@ -14796,6 +14915,10 @@ function CollectionNode({
14796
14915
  /* @__PURE__ */ jsxRuntimeExports.jsx(IconBtn, { title: "Expand all folders", onClick: expandAll, alwaysVisible: true, children: /* @__PURE__ */ jsxRuntimeExports.jsx(ExpandAllIcon, {}) }),
14797
14916
  /* @__PURE__ */ jsxRuntimeExports.jsx(IconBtn, { title: "Collapse all folders", onClick: collapseAll, alwaysVisible: true, children: /* @__PURE__ */ jsxRuntimeExports.jsx(CollapseAllIcon, {}) }),
14798
14917
  /* @__PURE__ */ jsxRuntimeExports.jsx(IconBtn, { title: "Collection data (iterations)", onClick: onSelectCollection, alwaysVisible: true, children: /* @__PURE__ */ jsxRuntimeExports.jsx(TableIcon, {}) }),
14918
+ /* @__PURE__ */ jsxRuntimeExports.jsx(IconBtn, { title: "Collection settings (TLS)", onClick: (e) => {
14919
+ e.stopPropagation();
14920
+ setShowSettings(true);
14921
+ }, alwaysVisible: true, children: /* @__PURE__ */ jsxRuntimeExports.jsx(GearIcon, {}) }),
14799
14922
  /* @__PURE__ */ jsxRuntimeExports.jsx(IconBtn, { title: "Add request", onClick: () => onAddRequest(col.rootFolder.id), alwaysVisible: true, children: /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-xs", children: "+" }) }),
14800
14923
  /* @__PURE__ */ jsxRuntimeExports.jsx(IconBtn, { title: "Add folder", onClick: () => onAddFolder(col.rootFolder.id, "New Folder"), alwaysVisible: true, children: /* @__PURE__ */ jsxRuntimeExports.jsx(FolderIcon, {}) }),
14801
14924
  /* @__PURE__ */ jsxRuntimeExports.jsx(IconBtn, { title: "Rename", onClick: () => setRenaming(true), alwaysVisible: true, children: /* @__PURE__ */ jsxRuntimeExports.jsx(PencilIcon, {}) }),
@@ -14825,7 +14948,8 @@ function CollectionNode({
14825
14948
  onUpdateRequestTags,
14826
14949
  onRunFolder
14827
14950
  }
14828
- )
14951
+ ),
14952
+ showSettings && /* @__PURE__ */ jsxRuntimeExports.jsx(CollectionSettingsModal, { collection: col, onClose: () => setShowSettings(false) })
14829
14953
  ] });
14830
14954
  }
14831
14955
  function FolderRow({
@@ -15068,6 +15192,12 @@ function ExpandAllIcon() {
15068
15192
  function CollapseAllIcon() {
15069
15193
  return /* @__PURE__ */ jsxRuntimeExports.jsx("svg", { className: "w-3 h-3", fill: "none", stroke: "currentColor", strokeWidth: 2, viewBox: "0 0 24 24", children: /* @__PURE__ */ jsxRuntimeExports.jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M4 6h16M4 12h8M4 18h16M21 12l-3-3-3 3" }) });
15070
15194
  }
15195
+ function GearIcon() {
15196
+ return /* @__PURE__ */ jsxRuntimeExports.jsxs("svg", { className: "w-3 h-3", fill: "none", stroke: "currentColor", strokeWidth: 2, viewBox: "0 0 24 24", children: [
15197
+ /* @__PURE__ */ jsxRuntimeExports.jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M10.325 4.317c.426-1.756 2.924-1.756 3.35 0a1.724 1.724 0 002.573 1.066c1.543-.94 3.31.826 2.37 2.37a1.724 1.724 0 001.065 2.572c1.756.426 1.756 2.924 0 3.35a1.724 1.724 0 00-1.066 2.573c.94 1.543-.826 3.31-2.37 2.37a1.724 1.724 0 00-2.572 1.065c-.426 1.756-2.924 1.756-3.35 0a1.724 1.724 0 00-2.573-1.066c-1.543.94-3.31-.826-2.37-2.37a1.724 1.724 0 00-1.065-2.572c-1.756-.426-1.756-2.924 0-3.35a1.724 1.724 0 001.066-2.573c-.94-1.543.826-3.31 2.37-2.37.996.608 2.296.07 2.572-1.065z" }),
15198
+ /* @__PURE__ */ jsxRuntimeExports.jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M15 12a3 3 0 11-6 0 3 3 0 016 0z" })
15199
+ ] });
15200
+ }
15071
15201
  function ParamsTab({ request, onChange }) {
15072
15202
  return /* @__PURE__ */ jsxRuntimeExports.jsx(
15073
15203
  KVTable,
@@ -49096,6 +49226,7 @@ function RequestBuilder({ request }) {
49096
49226
  const addHistoryEntry = useStore((s) => s.addHistoryEntry);
49097
49227
  const applyScriptUpdates = useStore((s) => s.applyScriptUpdates);
49098
49228
  const workspaceSettings = useStore((s) => s.workspace?.settings);
49229
+ const collectionTls = useStore((s) => activeCollectionId ? s.collections[activeCollectionId]?.data.tls : void 0);
49099
49230
  const activeAppTab = useStore((s) => s.tabs.find((t2) => t2.id === s.activeTabId));
49100
49231
  const isSending = activeAppTab?.isSending ?? false;
49101
49232
  const activeTab = activeAppTab?.requestTab ?? "params";
@@ -49130,7 +49261,7 @@ function RequestBuilder({ request }) {
49130
49261
  collectionVars,
49131
49262
  globals,
49132
49263
  proxy: workspaceSettings?.proxy,
49133
- tls: workspaceSettings?.tls,
49264
+ tls: collectionTls ? { ...workspaceSettings?.tls, ...collectionTls } : workspaceSettings?.tls,
49134
49265
  piiMaskPatterns: workspaceSettings?.piiMaskPatterns
49135
49266
  });
49136
49267
  setTabResponse(activeTabId, result.response, result.scriptResult, result.sentRequest);
@@ -53963,7 +54094,7 @@ function App() {
53963
54094
  /* @__PURE__ */ jsxRuntimeExports.jsx("span", { style: { color: "#6aa3c8" }, children: "Spector" }),
53964
54095
  /* @__PURE__ */ jsxRuntimeExports.jsxs("span", { className: "ml-2 text-[10px] font-normal opacity-50", children: [
53965
54096
  "v",
53966
- "0.0.7"
54097
+ "0.0.8"
53967
54098
  ] })
53968
54099
  ] }) }),
53969
54100
  /* @__PURE__ */ jsxRuntimeExports.jsx(Toolbar, { onOpenDocs: () => setDocsModalOpen(true) }),
@@ -0,0 +1,2 @@
1
+ /*! tailwindcss v4.2.2 | MIT License | https://tailwindcss.com */
2
+ @layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-space-y-reverse:0;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-ease:initial;--tw-scale-x:1;--tw-scale-y:1;--tw-scale-z:1}}}@layer theme{:root,:host{--font-sans:ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--color-red-200:oklch(88.5% .062 18.334);--color-red-300:oklch(80.8% .114 19.571);--color-red-400:oklch(70.4% .191 22.216);--color-red-500:oklch(63.7% .237 25.331);--color-red-600:oklch(57.7% .245 27.325);--color-red-700:oklch(50.5% .213 27.518);--color-red-800:oklch(44.4% .177 26.899);--color-red-900:oklch(39.6% .141 25.723);--color-red-950:oklch(25.8% .092 26.042);--color-orange-400:oklch(75% .183 55.934);--color-orange-500:oklch(70.5% .213 47.604);--color-amber-300:oklch(87.9% .169 91.605);--color-amber-400:oklch(82.8% .189 84.429);--color-amber-600:oklch(66.6% .179 58.318);--color-amber-700:oklch(55.5% .163 48.998);--color-yellow-800:oklch(47.6% .114 61.907);--color-yellow-950:oklch(28.6% .066 53.813);--color-emerald-300:oklch(84.5% .143 164.978);--color-emerald-400:var(--ts-green-400);--color-emerald-500:oklch(69.6% .17 162.48);--color-emerald-600:oklch(59.6% .145 163.225);--color-emerald-700:oklch(50.8% .118 165.612);--color-emerald-800:var(--ts-green-800);--color-emerald-900:var(--ts-green-900);--color-emerald-950:oklch(26.2% .051 172.552);--color-cyan-200:oklch(91.7% .08 205.041);--color-cyan-400:oklch(78.9% .154 211.53);--color-cyan-700:oklch(52% .105 223.128);--color-blue-200:oklch(88.2% .059 254.128);--color-blue-300:oklch(80.9% .105 251.813);--color-blue-400:var(--ts-blue-400);--color-blue-500:var(--ts-blue-500);--color-blue-600:var(--ts-blue-600);--color-blue-700:var(--ts-blue-700);--color-blue-800:oklch(42.4% .199 265.638);--color-blue-900:oklch(37.9% .146 265.522);--color-blue-950:oklch(28.2% .091 267.935);--color-purple-400:oklch(71.4% .203 305.504);--color-gray-300:oklch(87.2% .01 258.338);--color-gray-400:oklch(70.7% .022 261.325);--color-black:#000;--color-white:#fff;--spacing:.25rem;--container-xs:20rem;--container-sm:24rem;--container-4xl:56rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--text-base:1rem;--text-base--line-height:calc(1.5 / 1);--text-lg:1.125rem;--text-lg--line-height:calc(1.75 / 1.125);--text-2xl:1.5rem;--text-2xl--line-height:calc(2 / 1.5);--text-4xl:2.25rem;--text-4xl--line-height:calc(2.5 / 2.25);--font-weight-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--tracking-normal:0em;--tracking-wide:.025em;--tracking-wider:.05em;--tracking-widest:.1em;--leading-relaxed:1.625;--radius-sm:.25rem;--radius-lg:.5rem;--radius-xl:.75rem;--ease-in-out:cubic-bezier(.4, 0, .2, 1);--animate-pulse:pulse 2s cubic-bezier(.4, 0, .6, 1) infinite;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono);--color-surface-100:var(--surface-100);--color-surface-200:var(--surface-200);--color-surface-400:var(--surface-400);--color-surface-500:var(--surface-500);--color-surface-700:var(--surface-700);--color-surface-800:var(--surface-800);--color-surface-900:var(--surface-900);--color-surface-950:var(--surface-950)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab, red, red)){::placeholder{color:color-mix(in oklab, currentcolor 50%, transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.pointer-events-none{pointer-events:none}.visible{visibility:visible}.sr-only{clip-path:inset(50%);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.sticky{position:sticky}.inset-0{inset:calc(var(--spacing) * 0)}.start{inset-inline-start:var(--spacing)}.end{inset-inline-end:var(--spacing)}.top-0{top:calc(var(--spacing) * 0)}.top-1{top:calc(var(--spacing) * 1)}.top-full{top:100%}.right-0{right:calc(var(--spacing) * 0)}.right-1{right:calc(var(--spacing) * 1)}.left-0{left:calc(var(--spacing) * 0)}.left-1\/2{left:50%}.z-50{z-index:50}.z-\[60\]{z-index:60}.z-\[200\]{z-index:200}.z-\[300\]{z-index:300}.col-1{grid-column:1}.col-2{grid-column:2}.mx-0\.5{margin-inline:calc(var(--spacing) * .5)}.mx-1{margin-inline:calc(var(--spacing) * 1)}.mx-3{margin-inline:calc(var(--spacing) * 3)}.mx-4{margin-inline:calc(var(--spacing) * 4)}.mx-auto{margin-inline:auto}.my-2{margin-block:calc(var(--spacing) * 2)}.mt-0\.5{margin-top:calc(var(--spacing) * .5)}.mt-1{margin-top:calc(var(--spacing) * 1)}.mt-2{margin-top:calc(var(--spacing) * 2)}.mt-4{margin-top:calc(var(--spacing) * 4)}.mt-px{margin-top:1px}.mr-1{margin-right:calc(var(--spacing) * 1)}.-mb-px{margin-bottom:-1px}.mb-1{margin-bottom:calc(var(--spacing) * 1)}.mb-1\.5{margin-bottom:calc(var(--spacing) * 1.5)}.mb-2{margin-bottom:calc(var(--spacing) * 2)}.ml-0\.5{margin-left:calc(var(--spacing) * .5)}.ml-1{margin-left:calc(var(--spacing) * 1)}.ml-1\.5{margin-left:calc(var(--spacing) * 1.5)}.ml-2{margin-left:calc(var(--spacing) * 2)}.ml-4{margin-left:calc(var(--spacing) * 4)}.ml-auto{margin-left:auto}.block{display:block}.contents{display:contents}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-block{display:inline-block}.table{display:table}.h-1\.5{height:calc(var(--spacing) * 1.5)}.h-2{height:calc(var(--spacing) * 2)}.h-3{height:calc(var(--spacing) * 3)}.h-3\.5{height:calc(var(--spacing) * 3.5)}.h-4{height:calc(var(--spacing) * 4)}.h-7{height:calc(var(--spacing) * 7)}.h-10{height:calc(var(--spacing) * 10)}.h-24{height:calc(var(--spacing) * 24)}.h-full{height:100%}.h-screen{height:100vh}.max-h-44{max-height:calc(var(--spacing) * 44)}.max-h-80{max-height:calc(var(--spacing) * 80)}.max-h-\[45vh\]{max-height:45vh}.max-h-\[70vh\]{max-height:70vh}.max-h-\[80vh\]{max-height:80vh}.min-h-0{min-height:calc(var(--spacing) * 0)}.min-h-\[160px\]{min-height:160px}.w-1\.5{width:calc(var(--spacing) * 1.5)}.w-2{width:calc(var(--spacing) * 2)}.w-3{width:calc(var(--spacing) * 3)}.w-3\.5{width:calc(var(--spacing) * 3.5)}.w-4{width:calc(var(--spacing) * 4)}.w-5{width:calc(var(--spacing) * 5)}.w-6{width:calc(var(--spacing) * 6)}.w-7{width:calc(var(--spacing) * 7)}.w-8{width:calc(var(--spacing) * 8)}.w-10{width:calc(var(--spacing) * 10)}.w-12{width:calc(var(--spacing) * 12)}.w-14{width:calc(var(--spacing) * 14)}.w-16{width:calc(var(--spacing) * 16)}.w-20{width:calc(var(--spacing) * 20)}.w-24{width:calc(var(--spacing) * 24)}.w-28{width:calc(var(--spacing) * 28)}.w-32{width:calc(var(--spacing) * 32)}.w-36{width:calc(var(--spacing) * 36)}.w-44{width:calc(var(--spacing) * 44)}.w-48{width:calc(var(--spacing) * 48)}.w-52{width:calc(var(--spacing) * 52)}.w-56{width:calc(var(--spacing) * 56)}.w-64{width:calc(var(--spacing) * 64)}.w-72{width:calc(var(--spacing) * 72)}.w-\[420px\]{width:420px}.w-\[480px\]{width:480px}.w-\[500px\]{width:500px}.w-\[520px\]{width:520px}.w-\[560px\]{width:560px}.w-\[680px\]{width:680px}.w-\[780px\]{width:780px}.w-full{width:100%}.w-px{width:1px}.max-w-4xl{max-width:var(--container-4xl)}.max-w-\[60px\]{max-width:60px}.max-w-\[64px\]{max-width:64px}.max-w-\[120px\]{max-width:120px}.max-w-\[140px\]{max-width:140px}.max-w-\[180px\]{max-width:180px}.max-w-\[200px\]{max-width:200px}.max-w-\[260px\]{max-width:260px}.max-w-\[420px\]{max-width:420px}.max-w-sm{max-width:var(--container-sm)}.max-w-xs{max-width:var(--container-xs)}.min-w-0{min-width:calc(var(--spacing) * 0)}.min-w-\[72px\]{min-width:72px}.min-w-\[100px\]{min-width:100px}.min-w-\[120px\]{min-width:120px}.min-w-\[160px\]{min-width:160px}.min-w-\[220px\]{min-width:220px}.min-w-\[260px\]{min-width:260px}.flex-1{flex:1}.flex-shrink-0,.shrink-0{flex-shrink:0}.border-collapse{border-collapse:collapse}.-translate-x-1\/2{--tw-translate-x:calc(calc(1 / 2 * 100%) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.rotate-180{rotate:180deg}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.animate-pulse{animation:var(--animate-pulse)}.cursor-default{cursor:default}.cursor-pointer{cursor:pointer}.resize-none{resize:none}.resize-y{resize:vertical}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-baseline{align-items:baseline}.items-center{align-items:center}.items-end{align-items:flex-end}.items-start{align-items:flex-start}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.gap-0{gap:calc(var(--spacing) * 0)}.gap-0\.5{gap:calc(var(--spacing) * .5)}.gap-1{gap:calc(var(--spacing) * 1)}.gap-1\.5{gap:calc(var(--spacing) * 1.5)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-3{gap:calc(var(--spacing) * 3)}.gap-4{gap:calc(var(--spacing) * 4)}.gap-6{gap:calc(var(--spacing) * 6)}:where(.space-y-1>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 1) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 1) * calc(1 - var(--tw-space-y-reverse)))}.self-end{align-self:flex-end}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-x-hidden{overflow-x:hidden}.overflow-y-auto{overflow-y:auto}.rounded{border-radius:.25rem}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-sm{border-radius:var(--radius-sm)}.rounded-xl{border-radius:var(--radius-xl)}.rounded-r{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.border{border-style:var(--tw-border-style);border-width:1px}.border-x{border-inline-style:var(--tw-border-style);border-inline-width:1px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-b-2{border-bottom-style:var(--tw-border-style);border-bottom-width:2px}.border-l{border-left-style:var(--tw-border-style);border-left-width:1px}.border-l-2{border-left-style:var(--tw-border-style);border-left-width:2px}.border-blue-500{border-color:var(--color-blue-500)}.border-blue-700{border-color:var(--color-blue-700)}.border-blue-800{border-color:var(--color-blue-800)}.border-blue-800\/40{border-color:#193cb866}@supports (color:color-mix(in lab, red, red)){.border-blue-800\/40{border-color:color-mix(in oklab, var(--color-blue-800) 40%, transparent)}}.border-blue-800\/50{border-color:#193cb880}@supports (color:color-mix(in lab, red, red)){.border-blue-800\/50{border-color:color-mix(in oklab, var(--color-blue-800) 50%, transparent)}}.border-emerald-700{border-color:var(--color-emerald-700)}.border-emerald-800,.border-emerald-800\/30{border-color:var(--color-emerald-800)}@supports (color:color-mix(in lab, red, red)){.border-emerald-800\/30{border-color:color-mix(in oklab, var(--color-emerald-800) 30%, transparent)}}.border-emerald-800\/50{border-color:var(--color-emerald-800)}@supports (color:color-mix(in lab, red, red)){.border-emerald-800\/50{border-color:color-mix(in oklab, var(--color-emerald-800) 50%, transparent)}}.border-red-600{border-color:var(--color-red-600)}.border-red-700{border-color:var(--color-red-700)}.border-red-700\/50{border-color:#bf000f80}@supports (color:color-mix(in lab, red, red)){.border-red-700\/50{border-color:color-mix(in oklab, var(--color-red-700) 50%, transparent)}}.border-red-800{border-color:var(--color-red-800)}.border-red-800\/50{border-color:#9f071280}@supports (color:color-mix(in lab, red, red)){.border-red-800\/50{border-color:color-mix(in oklab, var(--color-red-800) 50%, transparent)}}.border-red-800\/60{border-color:#9f071299}@supports (color:color-mix(in lab, red, red)){.border-red-800\/60{border-color:color-mix(in oklab, var(--color-red-800) 60%, transparent)}}.border-surface-700{border-color:var(--color-surface-700)}.border-surface-800,.border-surface-800\/40{border-color:var(--color-surface-800)}@supports (color:color-mix(in lab, red, red)){.border-surface-800\/40{border-color:color-mix(in oklab, var(--color-surface-800) 40%, transparent)}}.border-surface-800\/50{border-color:var(--color-surface-800)}@supports (color:color-mix(in lab, red, red)){.border-surface-800\/50{border-color:color-mix(in oklab, var(--color-surface-800) 50%, transparent)}}.border-surface-800\/60{border-color:var(--color-surface-800)}@supports (color:color-mix(in lab, red, red)){.border-surface-800\/60{border-color:color-mix(in oklab, var(--color-surface-800) 60%, transparent)}}.border-transparent{border-color:#0000}.border-white\/10{border-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){.border-white\/10{border-color:color-mix(in oklab, var(--color-white) 10%, transparent)}}.border-yellow-800{border-color:var(--color-yellow-800)}.border-b-blue-500{border-bottom-color:var(--color-blue-500)}.bg-\[\#1e1b2e\]{background-color:#1e1b2e}.bg-amber-400{background-color:var(--color-amber-400)}.bg-amber-700{background-color:var(--color-amber-700)}.bg-black\/50{background-color:#00000080}@supports (color:color-mix(in lab, red, red)){.bg-black\/50{background-color:color-mix(in oklab, var(--color-black) 50%, transparent)}}.bg-black\/60{background-color:#0009}@supports (color:color-mix(in lab, red, red)){.bg-black\/60{background-color:color-mix(in oklab, var(--color-black) 60%, transparent)}}.bg-blue-400{background-color:var(--color-blue-400)}.bg-blue-600{background-color:var(--color-blue-600)}.bg-blue-700{background-color:var(--color-blue-700)}.bg-blue-900\/20{background-color:#1c398e33}@supports (color:color-mix(in lab, red, red)){.bg-blue-900\/20{background-color:color-mix(in oklab, var(--color-blue-900) 20%, transparent)}}.bg-blue-900\/30{background-color:#1c398e4d}@supports (color:color-mix(in lab, red, red)){.bg-blue-900\/30{background-color:color-mix(in oklab, var(--color-blue-900) 30%, transparent)}}.bg-blue-900\/50{background-color:#1c398e80}@supports (color:color-mix(in lab, red, red)){.bg-blue-900\/50{background-color:color-mix(in oklab, var(--color-blue-900) 50%, transparent)}}.bg-blue-950\/40{background-color:#16245666}@supports (color:color-mix(in lab, red, red)){.bg-blue-950\/40{background-color:color-mix(in oklab, var(--color-blue-950) 40%, transparent)}}.bg-blue-950\/50{background-color:#16245680}@supports (color:color-mix(in lab, red, red)){.bg-blue-950\/50{background-color:color-mix(in oklab, var(--color-blue-950) 50%, transparent)}}.bg-cyan-700{background-color:var(--color-cyan-700)}.bg-emerald-400{background-color:var(--color-emerald-400)}.bg-emerald-500{background-color:var(--color-emerald-500)}.bg-emerald-700{background-color:var(--color-emerald-700)}.bg-emerald-900\/20{background-color:var(--color-emerald-900)}@supports (color:color-mix(in lab, red, red)){.bg-emerald-900\/20{background-color:color-mix(in oklab, var(--color-emerald-900) 20%, transparent)}}.bg-emerald-900\/30{background-color:var(--color-emerald-900)}@supports (color:color-mix(in lab, red, red)){.bg-emerald-900\/30{background-color:color-mix(in oklab, var(--color-emerald-900) 30%, transparent)}}.bg-emerald-900\/40{background-color:var(--color-emerald-900)}@supports (color:color-mix(in lab, red, red)){.bg-emerald-900\/40{background-color:color-mix(in oklab, var(--color-emerald-900) 40%, transparent)}}.bg-emerald-900\/50{background-color:var(--color-emerald-900)}@supports (color:color-mix(in lab, red, red)){.bg-emerald-900\/50{background-color:color-mix(in oklab, var(--color-emerald-900) 50%, transparent)}}.bg-emerald-950\/30{background-color:#002c224d}@supports (color:color-mix(in lab, red, red)){.bg-emerald-950\/30{background-color:color-mix(in oklab, var(--color-emerald-950) 30%, transparent)}}.bg-orange-500{background-color:var(--color-orange-500)}.bg-red-500{background-color:var(--color-red-500)}.bg-red-700{background-color:var(--color-red-700)}.bg-red-800{background-color:var(--color-red-800)}.bg-red-900\/20{background-color:#82181a33}@supports (color:color-mix(in lab, red, red)){.bg-red-900\/20{background-color:color-mix(in oklab, var(--color-red-900) 20%, transparent)}}.bg-red-900\/30{background-color:#82181a4d}@supports (color:color-mix(in lab, red, red)){.bg-red-900\/30{background-color:color-mix(in oklab, var(--color-red-900) 30%, transparent)}}.bg-red-900\/40{background-color:#82181a66}@supports (color:color-mix(in lab, red, red)){.bg-red-900\/40{background-color:color-mix(in oklab, var(--color-red-900) 40%, transparent)}}.bg-red-900\/50{background-color:#82181a80}@supports (color:color-mix(in lab, red, red)){.bg-red-900\/50{background-color:color-mix(in oklab, var(--color-red-900) 50%, transparent)}}.bg-red-950{background-color:var(--color-red-950)}.bg-red-950\/20{background-color:#46080933}@supports (color:color-mix(in lab, red, red)){.bg-red-950\/20{background-color:color-mix(in oklab, var(--color-red-950) 20%, transparent)}}.bg-red-950\/30{background-color:#4608094d}@supports (color:color-mix(in lab, red, red)){.bg-red-950\/30{background-color:color-mix(in oklab, var(--color-red-950) 30%, transparent)}}.bg-red-950\/50{background-color:#46080980}@supports (color:color-mix(in lab, red, red)){.bg-red-950\/50{background-color:color-mix(in oklab, var(--color-red-950) 50%, transparent)}}.bg-surface-700{background-color:var(--color-surface-700)}.bg-surface-800{background-color:var(--color-surface-800)}.bg-surface-900,.bg-surface-900\/60{background-color:var(--color-surface-900)}@supports (color:color-mix(in lab, red, red)){.bg-surface-900\/60{background-color:color-mix(in oklab, var(--color-surface-900) 60%, transparent)}}.bg-surface-950,.bg-surface-950\/50{background-color:var(--color-surface-950)}@supports (color:color-mix(in lab, red, red)){.bg-surface-950\/50{background-color:color-mix(in oklab, var(--color-surface-950) 50%, transparent)}}.bg-transparent{background-color:#0000}.bg-yellow-950{background-color:var(--color-yellow-950)}.p-0\.5{padding:calc(var(--spacing) * .5)}.p-2{padding:calc(var(--spacing) * 2)}.p-3{padding:calc(var(--spacing) * 3)}.p-4{padding:calc(var(--spacing) * 4)}.p-5{padding:calc(var(--spacing) * 5)}.p-6{padding:calc(var(--spacing) * 6)}.p-8{padding:calc(var(--spacing) * 8)}.px-0\.5{padding-inline:calc(var(--spacing) * .5)}.px-1{padding-inline:calc(var(--spacing) * 1)}.px-1\.5{padding-inline:calc(var(--spacing) * 1.5)}.px-2{padding-inline:calc(var(--spacing) * 2)}.px-2\.5{padding-inline:calc(var(--spacing) * 2.5)}.px-3{padding-inline:calc(var(--spacing) * 3)}.px-4{padding-inline:calc(var(--spacing) * 4)}.px-5{padding-inline:calc(var(--spacing) * 5)}.px-6{padding-inline:calc(var(--spacing) * 6)}.py-0\.5{padding-block:calc(var(--spacing) * .5)}.py-1{padding-block:calc(var(--spacing) * 1)}.py-1\.5{padding-block:calc(var(--spacing) * 1.5)}.py-2{padding-block:calc(var(--spacing) * 2)}.py-2\.5{padding-block:calc(var(--spacing) * 2.5)}.py-3{padding-block:calc(var(--spacing) * 3)}.py-4{padding-block:calc(var(--spacing) * 4)}.py-6{padding-block:calc(var(--spacing) * 6)}.py-8{padding-block:calc(var(--spacing) * 8)}.py-px{padding-block:1px}.pt-1{padding-top:calc(var(--spacing) * 1)}.pt-3{padding-top:calc(var(--spacing) * 3)}.pt-16{padding-top:calc(var(--spacing) * 16)}.pt-20{padding-top:calc(var(--spacing) * 20)}.pt-\[20vh\]{padding-top:20vh}.pr-1{padding-right:calc(var(--spacing) * 1)}.pr-2{padding-right:calc(var(--spacing) * 2)}.pr-4{padding-right:calc(var(--spacing) * 4)}.pb-1{padding-bottom:calc(var(--spacing) * 1)}.pb-1\.5{padding-bottom:calc(var(--spacing) * 1.5)}.pb-2{padding-bottom:calc(var(--spacing) * 2)}.pb-3{padding-bottom:calc(var(--spacing) * 3)}.pl-1{padding-left:calc(var(--spacing) * 1)}.pl-2{padding-left:calc(var(--spacing) * 2)}.text-center{text-align:center}.text-left{text-align:left}.text-right{text-align:right}.align-top{vertical-align:top}.font-mono{font-family:var(--font-mono)}.font-sans{font-family:var(--font-sans)}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.text-4xl{font-size:var(--text-4xl);line-height:var(--tw-leading,var(--text-4xl--line-height))}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\[9px\]{font-size:9px}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.leading-4{--tw-leading:calc(var(--spacing) * 4);line-height:calc(var(--spacing) * 4)}.leading-5{--tw-leading:calc(var(--spacing) * 5);line-height:calc(var(--spacing) * 5)}.leading-none{--tw-leading:1;line-height:1}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-normal{--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-normal{--tw-tracking:var(--tracking-normal);letter-spacing:var(--tracking-normal)}.tracking-wide{--tw-tracking:var(--tracking-wide);letter-spacing:var(--tracking-wide)}.tracking-wider{--tw-tracking:var(--tracking-wider);letter-spacing:var(--tracking-wider)}.tracking-widest{--tw-tracking:var(--tracking-widest);letter-spacing:var(--tracking-widest)}.break-all{word-break:break-all}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.text-\[var\(--text-primary\)\]{color:var(--text-primary)}.text-amber-300{color:var(--color-amber-300)}.text-amber-400{color:var(--color-amber-400)}.text-amber-600{color:var(--color-amber-600)}.text-blue-200{color:var(--color-blue-200)}.text-blue-300{color:var(--color-blue-300)}.text-blue-400,.text-blue-400\/60{color:var(--color-blue-400)}@supports (color:color-mix(in lab, red, red)){.text-blue-400\/60{color:color-mix(in oklab, var(--color-blue-400) 60%, transparent)}}.text-blue-500{color:var(--color-blue-500)}.text-cyan-200{color:var(--color-cyan-200)}.text-cyan-400{color:var(--color-cyan-400)}.text-emerald-300{color:var(--color-emerald-300)}.text-emerald-400,.text-emerald-400\/80{color:var(--color-emerald-400)}@supports (color:color-mix(in lab, red, red)){.text-emerald-400\/80{color:color-mix(in oklab, var(--color-emerald-400) 80%, transparent)}}.text-emerald-500{color:var(--color-emerald-500)}.text-gray-300{color:var(--color-gray-300)}.text-gray-400{color:var(--color-gray-400)}.text-orange-400{color:var(--color-orange-400)}.text-purple-400{color:var(--color-purple-400)}.text-red-200{color:var(--color-red-200)}.text-red-300{color:var(--color-red-300)}.text-red-400{color:var(--color-red-400)}.text-red-500{color:var(--color-red-500)}.text-surface-100{color:var(--color-surface-100)}.text-surface-200{color:var(--color-surface-200)}.text-surface-400{color:var(--color-surface-400)}.text-surface-500{color:var(--color-surface-500)}.text-surface-700{color:var(--color-surface-700)}.text-white{color:var(--color-white)}.capitalize{text-transform:capitalize}.normal-case{text-transform:none}.uppercase{text-transform:uppercase}.italic{font-style:italic}.placeholder-surface-700::placeholder{color:var(--color-surface-700)}.accent-blue-500{accent-color:var(--color-blue-500)}.opacity-0{opacity:0}.opacity-30{opacity:.3}.opacity-50{opacity:.5}.shadow{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-2xl{--tw-shadow:0 25px 50px -12px var(--tw-shadow-color,#00000040);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a), 0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-xl{--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000001a), 0 8px 10px -6px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ring-1{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ring-red-500{--tw-ring-color:var(--color-red-500)}.filter{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.ease-in-out{--tw-ease:var(--ease-in-out);transition-timing-function:var(--ease-in-out)}.select-all{-webkit-user-select:all;user-select:all}.select-none{-webkit-user-select:none;user-select:none}.\[writing-mode\:vertical-rl\]{writing-mode:vertical-rl}@media (hover:hover){.group-hover\:flex:is(:where(.group):hover *){display:flex}.group-hover\:opacity-100:is(:where(.group):hover *){opacity:1}.group-hover\/tip\:block:is(:where(.group\/tip):hover *){display:block}}.last\:border-0:last-child{border-style:var(--tw-border-style);border-width:0}@media (hover:hover){.hover\:scale-150:hover{--tw-scale-x:150%;--tw-scale-y:150%;--tw-scale-z:150%;scale:var(--tw-scale-x) var(--tw-scale-y)}.hover\:border-blue-500:hover{border-color:var(--color-blue-500)}.hover\:border-surface-500:hover{border-color:var(--color-surface-500)}.hover\:bg-blue-500:hover{background-color:var(--color-blue-500)}.hover\:bg-blue-600:hover{background-color:var(--color-blue-600)}.hover\:bg-emerald-600:hover{background-color:var(--color-emerald-600)}.hover\:bg-red-600:hover{background-color:var(--color-red-600)}.hover\:bg-red-800:hover{background-color:var(--color-red-800)}.hover\:bg-red-900\/40:hover{background-color:#82181a66}@supports (color:color-mix(in lab, red, red)){.hover\:bg-red-900\/40:hover{background-color:color-mix(in oklab, var(--color-red-900) 40%, transparent)}}.hover\:bg-red-950\/50:hover{background-color:#46080980}@supports (color:color-mix(in lab, red, red)){.hover\:bg-red-950\/50:hover{background-color:color-mix(in oklab, var(--color-red-950) 50%, transparent)}}.hover\:bg-surface-700:hover{background-color:var(--color-surface-700)}.hover\:bg-surface-800:hover,.hover\:bg-surface-800\/20:hover{background-color:var(--color-surface-800)}@supports (color:color-mix(in lab, red, red)){.hover\:bg-surface-800\/20:hover{background-color:color-mix(in oklab, var(--color-surface-800) 20%, transparent)}}.hover\:bg-surface-800\/30:hover{background-color:var(--color-surface-800)}@supports (color:color-mix(in lab, red, red)){.hover\:bg-surface-800\/30:hover{background-color:color-mix(in oklab, var(--color-surface-800) 30%, transparent)}}.hover\:bg-surface-800\/40:hover{background-color:var(--color-surface-800)}@supports (color:color-mix(in lab, red, red)){.hover\:bg-surface-800\/40:hover{background-color:color-mix(in oklab, var(--color-surface-800) 40%, transparent)}}.hover\:bg-surface-800\/50:hover{background-color:var(--color-surface-800)}@supports (color:color-mix(in lab, red, red)){.hover\:bg-surface-800\/50:hover{background-color:color-mix(in oklab, var(--color-surface-800) 50%, transparent)}}.hover\:bg-surface-800\/60:hover{background-color:var(--color-surface-800)}@supports (color:color-mix(in lab, red, red)){.hover\:bg-surface-800\/60:hover{background-color:color-mix(in oklab, var(--color-surface-800) 60%, transparent)}}.hover\:bg-surface-900\/50:hover{background-color:var(--color-surface-900)}@supports (color:color-mix(in lab, red, red)){.hover\:bg-surface-900\/50:hover{background-color:color-mix(in oklab, var(--color-surface-900) 50%, transparent)}}.hover\:text-\[var\(--text-primary\)\]:hover{color:var(--text-primary)}.hover\:text-blue-300:hover{color:var(--color-blue-300)}.hover\:text-blue-400:hover{color:var(--color-blue-400)}.hover\:text-emerald-400:hover{color:var(--color-emerald-400)}.hover\:text-red-300:hover{color:var(--color-red-300)}.hover\:text-red-400:hover{color:var(--color-red-400)}.hover\:text-surface-200:hover{color:var(--color-surface-200)}.hover\:text-surface-400:hover{color:var(--color-surface-400)}.hover\:text-white:hover{color:var(--color-white)}}.focus\:border-blue-500:focus{border-color:var(--color-blue-500)}.focus\:ring-1:focus{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.focus\:ring-blue-500:focus{--tw-ring-color:var(--color-blue-500)}.focus\:ring-red-500:focus{--tw-ring-color:var(--color-red-500)}.focus\:outline-none:focus{--tw-outline-style:none;outline-style:none}.disabled\:bg-surface-700:disabled{background-color:var(--color-surface-700)}.disabled\:bg-surface-800:disabled{background-color:var(--color-surface-800)}.disabled\:text-surface-400:disabled{color:var(--color-surface-400)}.disabled\:text-surface-500:disabled{color:var(--color-surface-500)}.disabled\:opacity-30:disabled{opacity:.3}.disabled\:opacity-40:disabled{opacity:.4}.disabled\:opacity-50:disabled{opacity:.5}@media (min-width:64rem){.lg\:block{display:block}}}:root{--ts-blue-400:#6aa3c8;--ts-blue-500:#3d7fb2;--ts-blue-600:#205d96;--ts-blue-700:#1a4e7e;--ts-green-400:#9fc93c;--ts-green-800:#4a5e1d;--ts-green-900:#2d3a12;--drag-region:28px;--surface-50:#f0eff4;--surface-100:#dddce3;--surface-200:#c4c2cb;--surface-400:#9d9aa8;--surface-500:#7a7785;--surface-700:#615e6d;--surface-800:#3d3b48;--surface-900:#312f3b;--surface-950:#272630;--text-primary:#e4e3ea;--text-muted:#9d9aa8;--bg-app:#272630;--border:#3d3b48}:root.light{--surface-50:#272630;--surface-100:#312f3b;--surface-200:#3d3b48;--surface-400:#615e6d;--surface-500:#716e7b;--surface-700:#908e9a;--surface-800:#c4c2cb;--surface-900:#d5d3dc;--surface-950:#e2e0e9;--text-primary:#1c1b24;--text-muted:#615e6d;--bg-app:#e2e0e9;--border:#c4c2cb;--ts-green-400:#567818}*{box-sizing:border-box}body{background:var(--bg-app);color:var(--text-primary);margin:0;padding:0;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif;font-size:13px;overflow:hidden}.drag-region{-webkit-app-region:drag;height:var(--drag-region)}.no-drag{-webkit-app-region:no-drag}::-webkit-scrollbar{width:6px;height:6px}::-webkit-scrollbar-track{background:0 0}::-webkit-scrollbar-thumb{background:var(--border);border-radius:3px}.cm-editor{height:100%}.cm-scroller{overflow:auto}:root.light .text-white,:root.light .hover\:text-white:hover{color:var(--text-primary)!important}:root.light .bg-blue-500,:root.light .bg-blue-600,:root.light .bg-blue-700,:root.light .hover\:bg-blue-500:hover,:root.light .hover\:bg-blue-600:hover,:root.light .bg-emerald-600,:root.light .bg-red-600,:root.light .bg-amber-600,:root.light .bg-orange-600{color:#fff!important}:root.light input::placeholder,:root.light textarea::placeholder{opacity:1;color:var(--text-muted)!important}:root.light .bg-surface-800{background-color:var(--surface-800)}:root.light option{color:#1c1b24;background:#d5d3dc}:root.light .text-red-300{color:#b91c1c!important}:root.light .text-red-400{color:#dc2626!important}:root.light .text-red-500{color:#991b1b!important}:root.light .bg-red-900\/30{background-color:#fee2e2!important}:root.light .bg-red-900\/20{background-color:#fef2f2!important}:root.light .border-red-700,:root.light .border-red-800{border-color:#fca5a5!important}:root.light .text-emerald-300{color:#15803d!important}:root.light .text-emerald-400{color:#16a34a!important}:root.light .bg-emerald-900\/20{background-color:#f0fdf4!important}:root.light .bg-emerald-900\/30{background-color:#dcfce7!important}:root.light .border-emerald-800,:root.light .border-emerald-700{border-color:#86efac!important}:root.light .text-amber-300{color:#b45309!important}:root.light .text-amber-400{color:#d97706!important}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@property --tw-scale-x{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-y{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-z{syntax:"*";inherits:false;initial-value:1}@keyframes pulse{50%{opacity:.5}}
@@ -5,8 +5,8 @@
5
5
  <meta charset="UTF-8" />
6
6
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
7
7
  <title>api Spector</title>
8
- <script type="module" crossorigin src="./assets/index-x-2wMDPZ.js"></script>
9
- <link rel="stylesheet" crossorigin href="./assets/index-DRGkbz0a.css">
8
+ <script type="module" crossorigin src="./assets/index-CNACdUVN.js"></script>
9
+ <link rel="stylesheet" crossorigin href="./assets/index-Dmfghjyp.css">
10
10
  </head>
11
11
 
12
12
  <body>
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@testsmith/api-spector",
3
3
  "productName": "api Spector",
4
- "version": "0.0.7",
4
+ "version": "0.0.8",
5
5
  "description": "Local-first API testing tool to inspect, test and mock APIs",
6
6
  "repository": {
7
7
  "type": "git",