aisubs 0.3.6 → 0.3.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,12 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.3.7 - 2026-09-16
4
+
5
+ - Improve provider compatibility, proxy handling, and request normalization.
6
+ - Harden dashboard account flows, modal interactions, and stale-load handling.
7
+ - Add regression coverage for compatibility, proxy headers, authentication, and
8
+ dashboard behavior.
9
+
3
10
  ## 0.3.6 - 2026-09-15
4
11
 
5
12
  - Preserve provider cache controls and cache usage across OpenAI-compatible,
package/dist/auth.d.ts CHANGED
@@ -53,6 +53,7 @@ export declare class SubscriptionAuth {
53
53
  error: string | null;
54
54
  } | null;
55
55
  cancelLoginAttempt(id: string): boolean;
56
+ private cancelAttempt;
56
57
  status(provider: ProviderId, options?: {
57
58
  validate?: boolean;
58
59
  account?: string;
package/dist/auth.js CHANGED
@@ -162,14 +162,19 @@ export class SubscriptionAuth {
162
162
  }
163
163
  const epoch = this.advance(scope);
164
164
  for (const attempt of this.attempts.values()) {
165
- if (attempt.scope === scope && attempt.state === "pending")
166
- attempt.abort.abort();
165
+ if (attempt.scope === scope)
166
+ this.cancelAttempt(attempt);
167
167
  }
168
168
  const abort = new AbortController();
169
169
  const providerOptions = { ...options };
170
170
  delete providerOptions.account;
171
171
  delete providerOptions.replace;
172
172
  const login = await adapter.startLogin(abort.signal, providerOptions);
173
+ if (this.generation(scope) !== epoch) {
174
+ abort.abort();
175
+ void login.complete.catch(() => { });
176
+ throw new Error("Login cancelled");
177
+ }
173
178
  const id = crypto.randomUUID();
174
179
  let record;
175
180
  const promise = login.complete
@@ -199,6 +204,7 @@ export class SubscriptionAuth {
199
204
  provider,
200
205
  accountKey,
201
206
  scope,
207
+ generation: epoch,
202
208
  state: "pending",
203
209
  error: null,
204
210
  abort,
@@ -218,10 +224,7 @@ export class SubscriptionAuth {
218
224
  return record.error;
219
225
  },
220
226
  wait: () => record.promise,
221
- cancel: () => {
222
- this.advance(scope);
223
- abort.abort();
224
- },
227
+ cancel: () => this.cancelAttempt(record),
225
228
  };
226
229
  }
227
230
  expireLoginAttempt(id) {
@@ -243,10 +246,17 @@ export class SubscriptionAuth {
243
246
  const attempt = this.attempts.get(id);
244
247
  if (!attempt || attempt.state !== "pending")
245
248
  return false;
246
- this.advance(attempt.scope);
247
- attempt.abort.abort();
249
+ this.cancelAttempt(attempt);
248
250
  return true;
249
251
  }
252
+ cancelAttempt(attempt) {
253
+ if (attempt.state !== "pending")
254
+ return;
255
+ if (this.generation(attempt.scope) === attempt.generation)
256
+ this.advance(attempt.scope);
257
+ attempt.state = "cancelled";
258
+ attempt.abort.abort();
259
+ }
250
260
  async status(provider, options = {}) {
251
261
  const accountKey = normalizeAccountKey(options.account);
252
262
  if (options.validate)
@@ -277,8 +287,8 @@ export class SubscriptionAuth {
277
287
  for (const refresh of this.refreshes.get(scope) ?? [])
278
288
  refresh.abort();
279
289
  for (const attempt of this.attempts.values()) {
280
- if (attempt.scope === scope && attempt.state === "pending")
281
- attempt.abort.abort();
290
+ if (attempt.scope === scope)
291
+ this.cancelAttempt(attempt);
282
292
  }
283
293
  await this.store.delete(scope);
284
294
  }
package/dist/cli.js CHANGED
File without changes
@@ -43,7 +43,7 @@ function text(value) {
43
43
  return { type: "text", text: value };
44
44
  if (!isRecord(value))
45
45
  return null;
46
- const content = stringValue(value.text);
46
+ const content = typeof value.text === "string" ? value.text : undefined;
47
47
  return content == null ? null : { type: "text", text: content, ...cacheControl(value) };
48
48
  }
49
49
  function imageUrl(value) {
@@ -187,6 +187,9 @@ function responseTools(value) {
187
187
  }
188
188
  function parseResponses(body) {
189
189
  const raw = json(body);
190
+ if (raw.previous_response_id != null || raw.background === true) {
191
+ throw new CompatibilityError("Stored or background Responses require native Responses support", "unsupported_feature");
192
+ }
190
193
  const messages = [];
191
194
  if (typeof raw.instructions === "string") {
192
195
  messages.push({ role: "developer", content: [{ type: "text", text: raw.instructions }] });
@@ -231,13 +234,16 @@ function parseResponses(body) {
231
234
  else if (value.type === "item_reference") {
232
235
  throw new CompatibilityError("item_reference requires native Responses support", "unsupported_feature");
233
236
  }
234
- else {
237
+ else if (value.type == null || value.type === "message") {
235
238
  const role = stringValue(value.role) ?? "user";
236
239
  if (!["system", "developer", "user", "assistant"].includes(role)) {
237
240
  throw new CompatibilityError(`Unsupported Responses role: ${role}`);
238
241
  }
239
242
  messages.push({ role: role, content: openAiParts(value.content) });
240
243
  }
244
+ else {
245
+ throw new CompatibilityError(`Unsupported Responses input item: ${String(value.type)}`, "unsupported_feature");
246
+ }
241
247
  }
242
248
  }
243
249
  else if (input != null)
@@ -249,7 +255,9 @@ function parseResponses(body) {
249
255
  stream: raw.stream === true,
250
256
  messages,
251
257
  tools: responseTools(raw.tools),
252
- toolChoice: raw.tool_choice,
258
+ toolChoice: isRecord(raw.tool_choice) && raw.tool_choice.type === "function"
259
+ ? { type: "function", function: { name: raw.tool_choice.name } }
260
+ : raw.tool_choice,
253
261
  maxTokens: numberValue(raw.max_output_tokens),
254
262
  temperature: numberValue(raw.temperature),
255
263
  topP: numberValue(raw.top_p),
@@ -348,7 +356,13 @@ function parseAnthropic(body) {
348
356
  stream: raw.stream === true,
349
357
  messages,
350
358
  tools,
351
- toolChoice: raw.tool_choice,
359
+ toolChoice: isRecord(raw.tool_choice)
360
+ ? raw.tool_choice.type === "tool"
361
+ ? { type: "function", function: { name: raw.tool_choice.name } }
362
+ : raw.tool_choice.type === "any"
363
+ ? "required"
364
+ : raw.tool_choice.type
365
+ : raw.tool_choice,
352
366
  maxTokens: numberValue(raw.max_tokens),
353
367
  temperature: numberValue(raw.temperature),
354
368
  topP: numberValue(raw.top_p),
@@ -360,6 +374,7 @@ function parseAnthropic(body) {
360
374
  function parseGoogle(body, model, stream = false) {
361
375
  const raw = json(body);
362
376
  const messages = [];
377
+ const pendingCalls = [];
363
378
  if (isRecord(raw.systemInstruction)) {
364
379
  const parts = Array.isArray(raw.systemInstruction.parts) ? raw.systemInstruction.parts : [];
365
380
  messages.push({
@@ -392,16 +407,23 @@ function parseGoogle(body, model, stream = false) {
392
407
  content.push({ type: "image", url: stringValue(part.fileData.fileUri) ?? "" });
393
408
  }
394
409
  else if (isRecord(part.functionCall)) {
395
- toolCalls.push({
396
- id: `call_${crypto.randomUUID()}`,
410
+ const call = {
411
+ id: stringValue(part.functionCall.id) ?? `call_${crypto.randomUUID()}`,
397
412
  name: stringValue(part.functionCall.name) ?? "function",
398
413
  arguments: JSON.stringify(part.functionCall.args ?? {}),
399
- });
414
+ };
415
+ toolCalls.push(call);
416
+ pendingCalls.push(call);
400
417
  }
401
418
  else if (isRecord(part.functionResponse)) {
419
+ const result = part.functionResponse;
420
+ const callIndex = pendingCalls.findIndex((call) => typeof result.id === "string" ? call.id === result.id : call.name === result.name);
421
+ const call = callIndex < 0 ? undefined : pendingCalls.splice(callIndex, 1)[0];
422
+ if (!call)
423
+ throw new CompatibilityError("Function response has no matching function call");
402
424
  messages.push({
403
425
  role: "tool",
404
- toolCallId: stringValue(part.functionResponse.name),
426
+ toolCallId: call.id,
405
427
  content: [{ type: "text", text: JSON.stringify(part.functionResponse.response ?? {}) }],
406
428
  });
407
429
  }
@@ -703,6 +725,7 @@ function googlePart(part) {
703
725
  : { inlineData: { mimeType: "application/octet-stream", data: part.data ?? "" } };
704
726
  }
705
727
  function toGoogle(request) {
728
+ const callNames = new Map(request.messages.flatMap((message) => (message.toolCalls ?? []).map((call) => [call.id, call.name])));
706
729
  const system = request.messages
707
730
  .filter((message) => message.role === "system" || message.role === "developer")
708
731
  .flatMap((message) => message.content.map(googlePart));
@@ -712,15 +735,19 @@ function toGoogle(request) {
712
735
  const parts = message.role === "tool" ? [] : message.content.map(googlePart);
713
736
  for (const call of message.toolCalls ?? [])
714
737
  parts.push({ functionCall: { name: call.name, args: JSON.parse(call.arguments || "{}") } });
715
- if (message.role === "tool")
738
+ if (message.role === "tool") {
739
+ const name = message.toolCallId ? callNames.get(message.toolCallId) : undefined;
740
+ if (!name)
741
+ throw new CompatibilityError("Tool result has no matching function call");
716
742
  parts.push({
717
743
  functionResponse: {
718
- name: message.toolCallId ?? "function",
744
+ name,
719
745
  response: {
720
746
  result: message.content.map((part) => (part.type === "text" ? part.text : part)),
721
747
  },
722
748
  },
723
749
  });
750
+ }
724
751
  return { role: message.role === "assistant" ? "model" : "user", parts };
725
752
  });
726
753
  const schema = isRecord(request.responseFormat) && isRecord(request.responseFormat.json_schema)
@@ -793,6 +820,10 @@ function parseChatResult(raw, model) {
793
820
  };
794
821
  }
795
822
  function parseResponsesResult(raw, model) {
823
+ if (raw.status === "failed" || raw.error != null) {
824
+ const error = isRecord(raw.error) ? stringValue(raw.error.message) : undefined;
825
+ throw new CompatibilityError(error ?? "Provider response failed", "provider_error", 502);
826
+ }
796
827
  const content = [];
797
828
  const toolCalls = [];
798
829
  let refusal;
@@ -832,13 +863,7 @@ function parseResponsesResult(raw, model) {
832
863
  content,
833
864
  toolCalls,
834
865
  refusal,
835
- finishReason: toolCalls.length
836
- ? "tool_calls"
837
- : raw.status === "incomplete"
838
- ? "length"
839
- : raw.status === "failed"
840
- ? "error"
841
- : "stop",
866
+ finishReason: raw.status === "incomplete" ? "length" : toolCalls.length ? "tool_calls" : "stop",
842
867
  usage: usage(numberValue(details?.input_tokens), numberValue(details?.output_tokens), numberValue(inputDetails?.cached_tokens), numberValue(outputDetails?.reasoning_tokens), numberValue(inputDetails?.cache_write_tokens)),
843
868
  };
844
869
  }
@@ -1134,11 +1159,7 @@ function responsesToChatStream(upstream, model) {
1134
1159
  const toolIndexes = new Map();
1135
1160
  const emit = (controller, delta, finishReason = null, rawUsage) => {
1136
1161
  const usage = rawUsage
1137
- ? {
1138
- prompt_tokens: rawUsage.input_tokens,
1139
- completion_tokens: rawUsage.output_tokens,
1140
- total_tokens: rawUsage.total_tokens,
1141
- }
1162
+ ? resultToChat(parseResponsesResult({ usage: rawUsage }, model)).usage
1142
1163
  : undefined;
1143
1164
  controller.enqueue(encoder.encode(`data: ${JSON.stringify({
1144
1165
  id: `chatcmpl_${stringValue(response.id) ?? crypto.randomUUID()}`,
@@ -1163,120 +1184,108 @@ function responsesToChatStream(upstream, model) {
1163
1184
  start(controller);
1164
1185
  finished = true;
1165
1186
  const incomplete = response.status === "incomplete";
1166
- emit(controller, {}, hasToolCalls ? "tool_calls" : incomplete ? "length" : "stop", isRecord(response.usage) ? response.usage : undefined);
1187
+ emit(controller, {}, incomplete ? "length" : hasToolCalls ? "tool_calls" : "stop", isRecord(response.usage) ? response.usage : undefined);
1167
1188
  controller.enqueue(encoder.encode("data: [DONE]\n\n"));
1168
1189
  };
1169
- let upstreamReader;
1170
- const body = new ReadableStream({
1171
- async start(controller) {
1172
- const reader = upstream.body.getReader();
1173
- upstreamReader = reader;
1174
- const decoder = new TextDecoder();
1175
- let buffer = "";
1176
- const handle = (raw) => {
1177
- const data = raw
1178
- .split(/\r?\n/)
1179
- .filter((line) => line.startsWith("data:"))
1180
- .map((line) => line.slice(5).trim())
1181
- .join("\n");
1182
- if (!data || data === "[DONE]")
1183
- return;
1184
- const event = JSON.parse(data);
1185
- if (!isRecord(event))
1186
- return;
1187
- const completed = isRecord(event.response) ? event.response : undefined;
1188
- if (event.type === "response.created" && completed)
1189
- response = completed;
1190
- if (event.type === "response.output_text.delta") {
1191
- start(controller);
1192
- emit(controller, { content: stringValue(event.delta) ?? "" });
1193
- }
1194
- if (event.type === "response.refusal.delta") {
1195
- start(controller);
1196
- emit(controller, { refusal: stringValue(event.delta) ?? "" });
1197
- }
1198
- const outputIndex = numberValue(event.output_index) ?? toolIndexes.size;
1199
- if (event.type === "response.output_item.added" &&
1200
- isRecord(event.item) &&
1201
- event.item.type === "function_call") {
1202
- start(controller);
1203
- hasToolCalls = true;
1204
- const index = toolIndexes.size;
1205
- toolIndexes.set(outputIndex, index);
1206
- emit(controller, {
1207
- tool_calls: [
1208
- {
1209
- index,
1210
- id: stringValue(event.item.call_id) ??
1211
- stringValue(event.item.id) ??
1212
- `call_${crypto.randomUUID()}`,
1213
- type: "function",
1214
- function: {
1215
- name: stringValue(event.item.name) ?? "function",
1216
- arguments: stringValue(event.item.arguments) ?? "",
1217
- },
1218
- },
1219
- ],
1220
- });
1221
- }
1222
- if (event.type === "response.function_call_arguments.delta") {
1223
- start(controller);
1224
- hasToolCalls = true;
1225
- emit(controller, {
1226
- tool_calls: [
1227
- {
1228
- index: toolIndexes.get(outputIndex) ?? 0,
1229
- function: { arguments: stringValue(event.delta) ?? "" },
1230
- },
1231
- ],
1232
- });
1233
- }
1234
- if (event.type === "response.completed" || event.type === "response.incomplete") {
1235
- finish(controller, completed);
1236
- }
1237
- if (event.type === "response.failed" || event.type === "error") {
1238
- const detail = isRecord(event.error)
1239
- ? stringValue(event.error.message)
1240
- : "Provider stream failed";
1241
- controller.enqueue(encoder.encode(`data: ${JSON.stringify({
1242
- error: {
1243
- message: detail ?? "Provider stream failed",
1244
- type: "provider_error",
1245
- code: "provider_error",
1246
- },
1247
- })}\n\n`));
1248
- finished = true;
1249
- }
1250
- };
1251
- try {
1252
- for (;;) {
1253
- const { done, value } = await reader.read();
1254
- buffer += decoder.decode(value, { stream: !done });
1255
- for (let end = buffer.search(/\r?\n\r?\n/); end !== -1; end = buffer.search(/\r?\n\r?\n/)) {
1256
- const raw = buffer.slice(0, end);
1257
- buffer = buffer.slice(end).replace(/^\r?\n\r?\n/, "");
1258
- handle(raw);
1259
- }
1260
- if (done)
1261
- break;
1262
- }
1263
- if (buffer)
1264
- handle(buffer);
1265
- finish(controller);
1266
- controller.close();
1267
- }
1268
- catch (error) {
1269
- controller.error(error);
1270
- }
1271
- finally {
1272
- reader.releaseLock();
1273
- upstreamReader = undefined;
1274
- }
1190
+ const decoder = new TextDecoder();
1191
+ let buffer = "";
1192
+ const body = upstream.body.pipeThrough(new TransformStream({
1193
+ transform(chunk, controller) {
1194
+ buffer += decoder.decode(chunk, { stream: true });
1195
+ consume(controller);
1275
1196
  },
1276
- cancel(reason) {
1277
- return upstreamReader?.cancel(reason);
1197
+ flush(controller) {
1198
+ buffer += decoder.decode();
1199
+ consume(controller);
1200
+ if (buffer)
1201
+ handle(buffer, controller);
1202
+ if (!finished)
1203
+ throw new Error("Provider stream ended before a terminal response event");
1278
1204
  },
1279
- });
1205
+ }));
1206
+ const handle = (raw, controller) => {
1207
+ if (finished)
1208
+ return;
1209
+ const data = raw
1210
+ .split(/\r?\n/)
1211
+ .filter((line) => line.startsWith("data:"))
1212
+ .map((line) => line.slice(5).trim())
1213
+ .join("\n");
1214
+ if (!data || data === "[DONE]")
1215
+ return;
1216
+ const event = JSON.parse(data);
1217
+ if (!isRecord(event))
1218
+ return;
1219
+ const completed = isRecord(event.response) ? event.response : undefined;
1220
+ if (event.type === "response.created" && completed)
1221
+ response = completed;
1222
+ if (event.type === "response.output_text.delta") {
1223
+ start(controller);
1224
+ emit(controller, { content: stringValue(event.delta) ?? "" });
1225
+ }
1226
+ if (event.type === "response.refusal.delta") {
1227
+ start(controller);
1228
+ emit(controller, { refusal: stringValue(event.delta) ?? "" });
1229
+ }
1230
+ const outputIndex = numberValue(event.output_index) ?? toolIndexes.size;
1231
+ if (event.type === "response.output_item.added" &&
1232
+ isRecord(event.item) &&
1233
+ event.item.type === "function_call") {
1234
+ start(controller);
1235
+ hasToolCalls = true;
1236
+ const index = toolIndexes.size;
1237
+ toolIndexes.set(outputIndex, index);
1238
+ emit(controller, {
1239
+ tool_calls: [
1240
+ {
1241
+ index,
1242
+ id: stringValue(event.item.call_id) ??
1243
+ stringValue(event.item.id) ??
1244
+ `call_${crypto.randomUUID()}`,
1245
+ type: "function",
1246
+ function: {
1247
+ name: stringValue(event.item.name) ?? "function",
1248
+ arguments: stringValue(event.item.arguments) ?? "",
1249
+ },
1250
+ },
1251
+ ],
1252
+ });
1253
+ }
1254
+ if (event.type === "response.function_call_arguments.delta") {
1255
+ start(controller);
1256
+ hasToolCalls = true;
1257
+ emit(controller, {
1258
+ tool_calls: [
1259
+ {
1260
+ index: toolIndexes.get(outputIndex) ?? 0,
1261
+ function: { arguments: stringValue(event.delta) ?? "" },
1262
+ },
1263
+ ],
1264
+ });
1265
+ }
1266
+ if (event.type === "response.completed" || event.type === "response.incomplete") {
1267
+ finish(controller, completed);
1268
+ }
1269
+ if (event.type === "response.failed" || event.type === "error") {
1270
+ const failure = event.error ?? completed?.error;
1271
+ const detail = isRecord(failure) ? stringValue(failure.message) : stringValue(event.message);
1272
+ controller.enqueue(encoder.encode(`data: ${JSON.stringify({
1273
+ error: {
1274
+ message: detail ?? "Provider stream failed",
1275
+ type: "provider_error",
1276
+ code: "provider_error",
1277
+ },
1278
+ })}\n\n`));
1279
+ finished = true;
1280
+ }
1281
+ };
1282
+ function consume(controller) {
1283
+ for (let end = buffer.search(/\r?\n\r?\n/); end !== -1; end = buffer.search(/\r?\n\r?\n/)) {
1284
+ const raw = buffer.slice(0, end);
1285
+ buffer = buffer.slice(end).replace(/^\r?\n\r?\n/, "");
1286
+ handle(raw, controller);
1287
+ }
1288
+ }
1280
1289
  return new Response(body, {
1281
1290
  headers: {
1282
1291
  "content-type": "text/event-stream; charset=utf-8",
@@ -1416,7 +1425,7 @@ async function upstreamResult(response, protocol, model) {
1416
1425
  const body = await response.text();
1417
1426
  let raw;
1418
1427
  if (protocol === "responses" && /(^|\n)data:/.test(body)) {
1419
- let completed = {};
1428
+ let completed;
1420
1429
  let outputText = "";
1421
1430
  const calls = new Map();
1422
1431
  for (const frame of body.split(/\r?\n\r?\n/)) {
@@ -1449,11 +1458,22 @@ async function upstreamResult(response, protocol, model) {
1449
1458
  if (call)
1450
1459
  call.arguments += stringValue(event.delta) ?? "";
1451
1460
  }
1452
- if (event.type === "response.completed" && isRecord(event.response))
1453
- completed = event.response;
1454
- if ((event.type === "response.failed" || event.type === "error") && isRecord(event.response))
1455
- completed = event.response;
1461
+ if ((event.type === "response.completed" || event.type === "response.incomplete") &&
1462
+ isRecord(event.response))
1463
+ completed = {
1464
+ ...event.response,
1465
+ status: event.type === "response.incomplete" ? "incomplete" : event.response.status,
1466
+ };
1467
+ if (event.type === "response.failed" || event.type === "error") {
1468
+ const failure = event.error ?? (isRecord(event.response) ? event.response.error : undefined);
1469
+ const message = isRecord(failure)
1470
+ ? stringValue(failure.message)
1471
+ : stringValue(event.message);
1472
+ throw new CompatibilityError(message ?? "Provider stream failed", "provider_error", 502);
1473
+ }
1456
1474
  }
1475
+ if (!completed)
1476
+ throw new CompatibilityError("Provider stream ended before a terminal response event", "provider_error", 502);
1457
1477
  const output = Array.isArray(completed.output) ? [...completed.output] : [];
1458
1478
  if (outputText && !output.some((item) => isRecord(item) && item.type === "message")) {
1459
1479
  output.push({
@@ -0,0 +1,2 @@
1
+ /*! tailwindcss v4.3.3 | 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-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-divide-y-reverse:0;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0}}}@layer theme{:root,:host{--font-sans:-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", Arial, 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-orange-300:oklch(83.7% .128 66.29);--color-orange-500:oklch(70.5% .213 47.604);--color-orange-600:oklch(64.6% .222 41.116);--color-amber-300:oklch(87.9% .169 91.605);--color-amber-400:oklch(82.8% .189 84.429);--color-amber-500:oklch(76.9% .188 70.08);--color-amber-600:oklch(66.6% .179 58.318);--color-amber-700:oklch(55.5% .163 48.998);--color-emerald-200:oklch(90.5% .093 164.15);--color-emerald-300:oklch(84.5% .143 164.978);--color-emerald-400:oklch(76.5% .177 163.223);--color-emerald-500:oklch(69.6% .17 162.48);--color-emerald-600:oklch(59.6% .145 163.225);--color-emerald-700:oklch(50.8% .118 165.612);--color-emerald-800:oklch(43.2% .095 166.913);--color-sky-300:oklch(82.8% .111 230.318);--color-blue-300:oklch(80.9% .105 251.813);--color-blue-500:oklch(62.3% .214 259.815);--color-blue-600:oklch(54.6% .245 262.881);--color-blue-700:oklch(48.8% .243 264.376);--color-violet-300:oklch(81.1% .111 293.571);--color-violet-500:oklch(60.6% .25 292.717);--color-violet-600:oklch(54.1% .281 293.009);--color-fuchsia-300:oklch(83.3% .145 321.434);--color-zinc-50:oklch(98.5% 0 none);--color-zinc-100:oklch(96.7% .001 286.375);--color-zinc-200:oklch(92% .004 286.32);--color-zinc-300:oklch(87.1% .006 286.286);--color-zinc-400:oklch(70.5% .015 286.067);--color-zinc-500:oklch(55.2% .016 285.938);--color-zinc-600:oklch(44.2% .017 285.786);--color-zinc-700:oklch(37% .013 285.805);--color-zinc-800:oklch(27.4% .006 286.033);--color-zinc-900:oklch(21% .006 285.885);--color-zinc-950:oklch(14.1% .005 285.823);--color-stone-400:oklch(70.9% .01 56.259);--color-stone-500:oklch(55.3% .013 58.071);--color-white:#fff;--spacing:.25rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--text-lg:1.125rem;--text-lg--line-height:calc(1.75 / 1.125);--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--font-weight-black:900;--tracking-tight:-.025em;--radius-md:.375rem;--radius-lg:.5rem;--radius-xl:.75rem;--animate-spin:spin 1s linear infinite;--animate-pulse:pulse 2s cubic-bezier(.4, 0, .6, 1) infinite;--blur-sm:8px;--blur-xl:24px;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", Arial, 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;-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:where(:not(iframe)){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-auto{pointer-events:auto}.pointer-events-none{pointer-events:none}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.sticky{position:sticky}.inset-0{inset:0}.inset-x-\[14px\]{inset-inline:14px}.top-0{top:0}.top-3{top:calc(var(--spacing) * 3)}.top-\[14px\]{top:14px}.right-2\.5{right:calc(var(--spacing) * 2.5)}.right-3{right:calc(var(--spacing) * 3)}.z-20{z-index:20}.col-span-full{grid-column:1/-1}.col-start-1{grid-column-start:1}.col-start-2{grid-column-start:2}.row-start-1{grid-row-start:1}.row-start-2{grid-row-start:2}.m-0{margin:0}.m-\[-18px\]{margin:-18px}.mx-auto{margin-inline:auto}.my-3{margin-block:calc(var(--spacing) * 3)}.mt-0\.5{margin-top:calc(var(--spacing) * .5)}.mt-1{margin-top:var(--spacing)}.mt-2{margin-top:calc(var(--spacing) * 2)}.mt-2\.5{margin-top:calc(var(--spacing) * 2.5)}.mt-3{margin-top:calc(var(--spacing) * 3)}.mt-5{margin-top:calc(var(--spacing) * 5)}.mt-\[18px\]{margin-top:18px}.mt-auto{margin-top:auto}.mt-px{margin-top:1px}.mb-0\.5{margin-bottom:calc(var(--spacing) * .5)}.mb-1{margin-bottom:var(--spacing)}.mb-2{margin-bottom:calc(var(--spacing) * 2)}.mb-3{margin-bottom:calc(var(--spacing) * 3)}.mb-4{margin-bottom:calc(var(--spacing) * 4)}.mb-5{margin-bottom:calc(var(--spacing) * 5)}.mb-6{margin-bottom:calc(var(--spacing) * 6)}.mb-\[18px\]{margin-bottom:18px}.mb-\[22px\]{margin-bottom:22px}.line-clamp-2{-webkit-line-clamp:2;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.block{display:block}.contents{display:contents}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline-flex{display:inline-flex}.size-2{width:calc(var(--spacing) * 2);height:calc(var(--spacing) * 2)}.size-5{width:calc(var(--spacing) * 5);height:calc(var(--spacing) * 5)}.size-6{width:calc(var(--spacing) * 6);height:calc(var(--spacing) * 6)}.size-7{width:calc(var(--spacing) * 7);height:calc(var(--spacing) * 7)}.size-9{width:calc(var(--spacing) * 9);height:calc(var(--spacing) * 9)}.size-\[30px\]{width:30px;height:30px}.size-\[38px\]{width:38px;height:38px}.size-\[54px\]{width:54px;height:54px}.size-\[58px\]{width:58px;height:58px}.h-3{height:calc(var(--spacing) * 3)}.h-9{height:calc(var(--spacing) * 9)}.h-10{height:calc(var(--spacing) * 10)}.h-44{height:calc(var(--spacing) * 44)}.h-\[3px\]{height:3px}.h-\[30px\]{height:30px}.h-\[34px\]{height:34px}.h-dvh{height:100dvh}.h-full{height:100%}.max-h-48{max-height:calc(var(--spacing) * 48)}.max-h-\[92dvh\]{max-height:92dvh}.max-h-\[510px\]{max-height:510px}.max-h-none{max-height:none}.min-h-6{min-height:calc(var(--spacing) * 6)}.min-h-7{min-height:calc(var(--spacing) * 7)}.min-h-8{min-height:calc(var(--spacing) * 8)}.min-h-9{min-height:calc(var(--spacing) * 9)}.min-h-10{min-height:calc(var(--spacing) * 10)}.min-h-12{min-height:calc(var(--spacing) * 12)}.min-h-72{min-height:calc(var(--spacing) * 72)}.min-h-\[43px\]{min-height:43px}.min-h-\[54px\]{min-height:54px}.min-h-\[58px\]{min-height:58px}.min-h-\[60px\]{min-height:60px}.min-h-\[390px\]{min-height:390px}.min-h-\[420px\]{min-height:420px}.min-h-dvh{min-height:100dvh}.w-fit{width:fit-content}.w-full{width:100%}.w-px{width:1px}.max-w-\[330px\]{max-width:330px}.max-w-\[390px\]{max-width:390px}.max-w-\[420px\]{max-width:420px}.max-w-\[520px\]{max-width:520px}.max-w-\[560px\]{max-width:560px}.max-w-\[630px\]{max-width:630px}.max-w-\[700px\]{max-width:700px}.max-w-\[900px\]{max-width:900px}.max-w-\[1180px\]{max-width:1180px}.max-w-none{max-width:none}.min-w-0{min-width:0}.flex-1{flex:1}.shrink-0{flex-shrink:0}.border-collapse{border-collapse:collapse}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.animate-pulse{animation:var(--animate-pulse)}.animate-spin{animation:var(--animate-spin)}.cursor-pointer{cursor:pointer}.list-none{list-style-type:none}.appearance-none{appearance:none}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.grid-cols-\[1fr_auto\]{grid-template-columns:1fr auto}.grid-cols-\[minmax\(0\,1fr\)_auto\]{grid-template-columns:minmax(0,1fr) auto}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.place-items-center{place-items:center}.items-center{align-items:center}.items-start{align-items:flex-start}.items-stretch{align-items:stretch}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.gap-0\.5{gap:calc(var(--spacing) * .5)}.gap-1{gap:var(--spacing)}.gap-1\.5{gap:calc(var(--spacing) * 1.5)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-2\.5{gap:calc(var(--spacing) * 2.5)}.gap-3{gap:calc(var(--spacing) * 3)}.gap-3\.5{gap:calc(var(--spacing) * 3.5)}.gap-4{gap:calc(var(--spacing) * 4)}.gap-5{gap:calc(var(--spacing) * 5)}.gap-6{gap:calc(var(--spacing) * 6)}.gap-7{gap:calc(var(--spacing) * 7)}.gap-\[18px\]{gap:18px}.gap-px{gap:1px}.gap-x-3{column-gap:calc(var(--spacing) * 3)}.gap-y-2{row-gap:calc(var(--spacing) * 2)}:where(.divide-y>:not(:last-child)){--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(1px * var(--tw-divide-y-reverse));border-bottom-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)))}:where(.divide-zinc-200>:not(:last-child)){border-color:var(--color-zinc-200)}.justify-self-end{justify-self:flex-end}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.rounded{border-radius:.25rem}.rounded-\[10px\]{border-radius:10px}.rounded-full{border-radius:2147483647px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.rounded-xl{border-radius:var(--radius-xl)}.rounded-t-xl{border-top-left-radius:var(--radius-xl);border-top-right-radius:var(--radius-xl)}.border{border-style:var(--tw-border-style);border-width:1px}.border-0{border-style:var(--tw-border-style);border-width:0}.border-t{border-top-style:var(--tw-border-style);border-top-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-amber-600\/40{border-color:#dd740066}@supports (color:color-mix(in lab, red, red)){.border-amber-600\/40{border-color:color-mix(in oklab, var(--color-amber-600) 40%, transparent)}}.border-blue-600\/40{border-color:#155dfc66}@supports (color:color-mix(in lab, red, red)){.border-blue-600\/40{border-color:color-mix(in oklab, var(--color-blue-600) 40%, transparent)}}.border-emerald-500\/30{border-color:#00bb7f4d}@supports (color:color-mix(in lab, red, red)){.border-emerald-500\/30{border-color:color-mix(in oklab, var(--color-emerald-500) 30%, transparent)}}.border-emerald-500\/40{border-color:#00bb7f66}@supports (color:color-mix(in lab, red, red)){.border-emerald-500\/40{border-color:color-mix(in oklab, var(--color-emerald-500) 40%, transparent)}}.border-emerald-600\/40{border-color:#00976766}@supports (color:color-mix(in lab, red, red)){.border-emerald-600\/40{border-color:color-mix(in oklab, var(--color-emerald-600) 40%, transparent)}}.border-orange-500\/40{border-color:#fe6e0066}@supports (color:color-mix(in lab, red, red)){.border-orange-500\/40{border-color:color-mix(in oklab, var(--color-orange-500) 40%, transparent)}}.border-red-500\/30{border-color:#fb2c364d}@supports (color:color-mix(in lab, red, red)){.border-red-500\/30{border-color:color-mix(in oklab, var(--color-red-500) 30%, transparent)}}.border-red-600\/40{border-color:#e4001466}@supports (color:color-mix(in lab, red, red)){.border-red-600\/40{border-color:color-mix(in oklab, var(--color-red-600) 40%, transparent)}}.border-stone-400\/40{border-color:#a6a09b66}@supports (color:color-mix(in lab, red, red)){.border-stone-400\/40{border-color:color-mix(in oklab, var(--color-stone-400) 40%, transparent)}}.border-transparent{border-color:#0000}.border-violet-500\/40{border-color:#8d54ff66}@supports (color:color-mix(in lab, red, red)){.border-violet-500\/40{border-color:color-mix(in oklab, var(--color-violet-500) 40%, transparent)}}.border-white\/5{border-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){.border-white\/5{border-color:color-mix(in oklab, var(--color-white) 5%, transparent)}}.border-white\/10{border-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){.border-white\/10{border-color:color-mix(in oklab, var(--color-white) 10%, transparent)}}.border-white\/15{border-color:#ffffff26}@supports (color:color-mix(in lab, red, red)){.border-white\/15{border-color:color-mix(in oklab, var(--color-white) 15%, transparent)}}.border-white\/20{border-color:#fff3}@supports (color:color-mix(in lab, red, red)){.border-white\/20{border-color:color-mix(in oklab, var(--color-white) 20%, transparent)}}.border-zinc-200{border-color:var(--color-zinc-200)}.border-zinc-200\/80{border-color:#e4e4e7cc}@supports (color:color-mix(in lab, red, red)){.border-zinc-200\/80{border-color:color-mix(in oklab, var(--color-zinc-200) 80%, transparent)}}.border-zinc-300{border-color:var(--color-zinc-300)}.border-zinc-400\/40{border-color:#9f9fa966}@supports (color:color-mix(in lab, red, red)){.border-zinc-400\/40{border-color:color-mix(in oklab, var(--color-zinc-400) 40%, transparent)}}.border-zinc-700{border-color:var(--color-zinc-700)}.bg-amber-400{background-color:var(--color-amber-400)}.bg-amber-500{background-color:var(--color-amber-500)}.bg-amber-500\/10{background-color:#f99c001a}@supports (color:color-mix(in lab, red, red)){.bg-amber-500\/10{background-color:color-mix(in oklab, var(--color-amber-500) 10%, transparent)}}.bg-blue-500\/10{background-color:#3080ff1a}@supports (color:color-mix(in lab, red, red)){.bg-blue-500\/10{background-color:color-mix(in oklab, var(--color-blue-500) 10%, transparent)}}.bg-current{background-color:currentColor}.bg-emerald-400{background-color:var(--color-emerald-400)}.bg-emerald-500\/10{background-color:#00bb7f1a}@supports (color:color-mix(in lab, red, red)){.bg-emerald-500\/10{background-color:color-mix(in oklab, var(--color-emerald-500) 10%, transparent)}}.bg-orange-500\/10{background-color:#fe6e001a}@supports (color:color-mix(in lab, red, red)){.bg-orange-500\/10{background-color:color-mix(in oklab, var(--color-orange-500) 10%, transparent)}}.bg-red-500\/10{background-color:#fb2c361a}@supports (color:color-mix(in lab, red, red)){.bg-red-500\/10{background-color:color-mix(in oklab, var(--color-red-500) 10%, transparent)}}.bg-red-600{background-color:var(--color-red-600)}.bg-stone-500\/10{background-color:#79716b1a}@supports (color:color-mix(in lab, red, red)){.bg-stone-500\/10{background-color:color-mix(in oklab, var(--color-stone-500) 10%, transparent)}}.bg-transparent{background-color:#0000}.bg-violet-500\/10{background-color:#8d54ff1a}@supports (color:color-mix(in lab, red, red)){.bg-violet-500\/10{background-color:color-mix(in oklab, var(--color-violet-500) 10%, transparent)}}.bg-white{background-color:var(--color-white)}.bg-white\/5{background-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){.bg-white\/5{background-color:color-mix(in oklab, var(--color-white) 5%, transparent)}}.bg-white\/80{background-color:#fffc}@supports (color:color-mix(in lab, red, red)){.bg-white\/80{background-color:color-mix(in oklab, var(--color-white) 80%, transparent)}}.bg-zinc-50{background-color:var(--color-zinc-50)}.bg-zinc-100{background-color:var(--color-zinc-100)}.bg-zinc-100\/50{background-color:#f4f4f580}@supports (color:color-mix(in lab, red, red)){.bg-zinc-100\/50{background-color:color-mix(in oklab, var(--color-zinc-100) 50%, transparent)}}.bg-zinc-100\/70{background-color:#f4f4f5b3}@supports (color:color-mix(in lab, red, red)){.bg-zinc-100\/70{background-color:color-mix(in oklab, var(--color-zinc-100) 70%, transparent)}}.bg-zinc-200{background-color:var(--color-zinc-200)}.bg-zinc-300{background-color:var(--color-zinc-300)}.bg-zinc-500\/10{background-color:#71717b1a}@supports (color:color-mix(in lab, red, red)){.bg-zinc-500\/10{background-color:color-mix(in oklab, var(--color-zinc-500) 10%, transparent)}}.bg-zinc-900{background-color:var(--color-zinc-900)}.bg-zinc-950{background-color:var(--color-zinc-950)}.\[mask-image\:url\(\'\/logos\/anthropic\.svg\'\)\]{-webkit-mask-image:url(/logos/anthropic.svg);mask-image:url(/logos/anthropic.svg)}.\[mask-image\:url\(\'\/logos\/github-copilot\.svg\'\)\]{-webkit-mask-image:url(/logos/github-copilot.svg);mask-image:url(/logos/github-copilot.svg)}.\[mask-image\:url\(\'\/logos\/openai\.svg\'\)\]{-webkit-mask-image:url(/logos/openai.svg);mask-image:url(/logos/openai.svg)}.\[mask-image\:url\(\'\/logos\/xai\.svg\'\)\]{-webkit-mask-image:url(/logos/xai.svg);mask-image:url(/logos/xai.svg)}.\[mask-size\:contain\]{-webkit-mask-size:contain;mask-size:contain}.\[mask-position\:center\]{-webkit-mask-position:50%;mask-position:50%}.\[mask-repeat\:no-repeat\]{-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.p-0{padding:0}.p-0\.5{padding:calc(var(--spacing) * .5)}.p-2\.5{padding:calc(var(--spacing) * 2.5)}.p-3{padding:calc(var(--spacing) * 3)}.p-3\.5{padding:calc(var(--spacing) * 3.5)}.p-4{padding:calc(var(--spacing) * 4)}.p-5{padding:calc(var(--spacing) * 5)}.p-6{padding:calc(var(--spacing) * 6)}.p-9{padding:calc(var(--spacing) * 9)}.p-\[18px\]{padding:18px}.p-\[22px\]{padding:22px}.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-3\.5{padding-inline:calc(var(--spacing) * 3.5)}.px-4{padding-inline:calc(var(--spacing) * 4)}.px-\[18px\]{padding-inline:18px}.py-0{padding-block:0}.py-1{padding-block:var(--spacing)}.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-3\.5{padding-block:calc(var(--spacing) * 3.5)}.py-4{padding-block:calc(var(--spacing) * 4)}.pt-8{padding-top:calc(var(--spacing) * 8)}.pt-24{padding-top:calc(var(--spacing) * 24)}.pt-\[62px\]{padding-top:62px}.pt-\[106px\]{padding-top:106px}.pr-2{padding-right:calc(var(--spacing) * 2)}.pr-8{padding-right:calc(var(--spacing) * 8)}.pr-\[18px\]{padding-right:18px}.pb-12{padding-bottom:calc(var(--spacing) * 12)}.pl-1{padding-left:var(--spacing)}.pl-3{padding-left:calc(var(--spacing) * 3)}.pl-5{padding-left:calc(var(--spacing) * 5)}.text-center{text-align:center}.text-left{text-align:left}.text-right{text-align:right}.font-mono{font-family:var(--font-mono)}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.text-\[13px\]{font-size:13px}.text-\[19px\]{font-size:19px}.text-\[clamp\(26px\,3vw\,36px\)\]{font-size:clamp(26px,3vw,36px)}.text-\[clamp\(28px\,3vw\,36px\)\]{font-size:clamp(28px,3vw,36px)}.leading-\[1\.05\]{--tw-leading:1.05;line-height:1.05}.leading-\[1\.7\]{--tw-leading:1.7;line-height:1.7}.leading-\[1\.08\]{--tw-leading:1.08;line-height:1.08}.leading-none{--tw-leading:1;line-height:1}.font-black{--tw-font-weight:var(--font-weight-black);font-weight:var(--font-weight-black)}.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-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-\[-0\.05em\]{--tw-tracking:-.05em;letter-spacing:-.05em}.tracking-\[-0\.045em\]{--tw-tracking:-.045em;letter-spacing:-.045em}.tracking-\[0\.1em\]{--tw-tracking:.1em;letter-spacing:.1em}.tracking-\[0\.05em\]{--tw-tracking:.05em;letter-spacing:.05em}.tracking-tight{--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.wrap-break-word{overflow-wrap:break-word}.break-all{word-break:break-all}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.\[tab-size\:2\]{tab-size:2}.text-amber-300{color:var(--color-amber-300)}.text-amber-600{color:var(--color-amber-600)}.text-amber-700{color:var(--color-amber-700)}.text-blue-700{color:var(--color-blue-700)}.text-emerald-300{color:var(--color-emerald-300)}.text-emerald-300\/70{color:#5ee9b5b3}@supports (color:color-mix(in lab, red, red)){.text-emerald-300\/70{color:color-mix(in oklab, var(--color-emerald-300) 70%, transparent)}}.text-emerald-600{color:var(--color-emerald-600)}.text-emerald-700{color:var(--color-emerald-700)}.text-emerald-800{color:var(--color-emerald-800)}.text-fuchsia-300{color:var(--color-fuchsia-300)}.text-inherit{color:inherit}.text-orange-600{color:var(--color-orange-600)}.text-red-300{color:var(--color-red-300)}.text-red-600{color:var(--color-red-600)}.text-red-700{color:var(--color-red-700)}.text-red-800{color:var(--color-red-800)}.text-sky-300{color:var(--color-sky-300)}.text-violet-600{color:var(--color-violet-600)}.text-white{color:var(--color-white)}.text-zinc-50{color:var(--color-zinc-50)}.text-zinc-100{color:var(--color-zinc-100)}.text-zinc-200{color:var(--color-zinc-200)}.text-zinc-300{color:var(--color-zinc-300)}.text-zinc-400{color:var(--color-zinc-400)}.text-zinc-500{color:var(--color-zinc-500)}.text-zinc-600{color:var(--color-zinc-600)}.text-zinc-700{color:var(--color-zinc-700)}.text-zinc-800{color:var(--color-zinc-800)}.text-zinc-900{color:var(--color-zinc-900)}.uppercase{text-transform:uppercase}.not-italic{font-style:normal}.tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.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-sm{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.invert{--tw-invert:invert(100%);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.backdrop-blur-xl{--tw-backdrop-blur:blur(var(--blur-xl));-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.outline-none{--tw-outline-style:none;outline-style:none}.group-open\:rotate-90:is(:where(.group):is([open],:popover-open,:open) *){rotate:90deg}.placeholder\:text-zinc-500::placeholder{color:var(--color-zinc-500)}.backdrop\:bg-zinc-950\/35::backdrop{background-color:#09090b59}@supports (color:color-mix(in lab, red, red)){.backdrop\:bg-zinc-950\/35::backdrop{background-color:color-mix(in oklab, var(--color-zinc-950) 35%, transparent)}}.backdrop\:backdrop-blur-sm::backdrop{--tw-backdrop-blur:blur(var(--blur-sm));-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.open\:grid:is([open],:popover-open,:open){display:grid}.open\:place-items-center:is([open],:popover-open,:open){place-items:center}@media (hover:hover){.hover\:-translate-y-0\.5:hover{--tw-translate-y:calc(var(--spacing) * -.5);translate:var(--tw-translate-x) var(--tw-translate-y)}.hover\:-translate-y-px:hover{--tw-translate-y:-1px;translate:var(--tw-translate-x) var(--tw-translate-y)}.hover\:border-red-500\/50:hover{border-color:#fb2c3680}@supports (color:color-mix(in lab, red, red)){.hover\:border-red-500\/50:hover{border-color:color-mix(in oklab, var(--color-red-500) 50%, transparent)}}.hover\:border-white\/30:hover{border-color:#ffffff4d}@supports (color:color-mix(in lab, red, red)){.hover\:border-white\/30:hover{border-color:color-mix(in oklab, var(--color-white) 30%, transparent)}}.hover\:border-zinc-200:hover{border-color:var(--color-zinc-200)}.hover\:border-zinc-300:hover{border-color:var(--color-zinc-300)}.hover\:bg-red-700:hover{background-color:var(--color-red-700)}.hover\:bg-zinc-100:hover{background-color:var(--color-zinc-100)}.hover\:bg-zinc-700:hover{background-color:var(--color-zinc-700)}.hover\:text-red-600:hover{color:var(--color-red-600)}.hover\:text-white:hover{color:var(--color-white)}.hover\:text-zinc-50:hover{color:var(--color-zinc-50)}.hover\:text-zinc-900:hover{color:var(--color-zinc-900)}.hover\:text-zinc-950:hover{color:var(--color-zinc-950)}.hover\:shadow-lg:hover{--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)}}.focus\:border-zinc-500:focus{border-color:var(--color-zinc-500)}.focus\:ring-3:focus{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.focus\:ring-zinc-300\/50:focus{--tw-ring-color:#d4d4d880}@supports (color:color-mix(in lab, red, red)){.focus\:ring-zinc-300\/50:focus{--tw-ring-color:color-mix(in oklab, var(--color-zinc-300) 50%, transparent)}}.active\:translate-y-px:active{--tw-translate-y:1px;translate:var(--tw-translate-x) var(--tw-translate-y)}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:opacity-50:disabled{opacity:.5}.aria-pressed\:bg-zinc-900[aria-pressed=true]{background-color:var(--color-zinc-900)}.aria-pressed\:text-zinc-50[aria-pressed=true]{color:var(--color-zinc-50)}.aria-selected\:border-zinc-100[aria-selected=true]{border-color:var(--color-zinc-100)}.aria-selected\:text-zinc-50[aria-selected=true]{color:var(--color-zinc-50)}@media (width>=40rem){.sm\:inset-x-\[18px\]{inset-inline:18px}.sm\:top-4{top:calc(var(--spacing) * 4)}.sm\:col-auto{grid-column:auto}.sm\:row-auto{grid-row:auto}.sm\:mb-7{margin-bottom:calc(var(--spacing) * 7)}.sm\:flex{display:flex}.sm\:inline{display:inline}.sm\:max-h-\[calc\(100dvh-48px\)\]{max-height:calc(100dvh - 48px)}.sm\:w-\[220px\]{width:220px}.sm\:w-auto{width:auto}.sm\:min-w-\[190px\]{min-width:190px}.sm\:flex-none{flex:none}.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.sm\:grid-cols-\[130px_1fr\]{grid-template-columns:130px 1fr}.sm\:grid-cols-\[minmax\(0\,1fr\)_160px\]{grid-template-columns:minmax(0,1fr) 160px}.sm\:grid-cols-\[minmax\(0\,1fr\)_auto_auto_auto\]{grid-template-columns:minmax(0,1fr) auto auto auto}.sm\:flex-row{flex-direction:row}.sm\:items-center{align-items:center}.sm\:items-end{align-items:flex-end}.sm\:gap-5{gap:calc(var(--spacing) * 5)}.sm\:rounded-xl{border-radius:var(--radius-xl)}.sm\:p-6{padding:calc(var(--spacing) * 6)}.sm\:px-6{padding-inline:calc(var(--spacing) * 6)}.sm\:pt-\[22px\]{padding-top:22px}.sm\:pr-\[116px\]{padding-right:116px}.sm\:pb-16{padding-bottom:calc(var(--spacing) * 16)}}@media (width>=48rem){.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:grid-cols-\[minmax\(220px\,1fr\)_minmax\(240px\,380px\)_auto\]{grid-template-columns:minmax(220px,1fr) minmax(240px,380px) auto}.md\:items-center{align-items:center}.md\:justify-end{justify-content:flex-end}.md\:border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.md\:border-b-0{border-bottom-style:var(--tw-border-style);border-bottom-width:0}}@media (width>=64rem){.lg\:grid-cols-\[minmax\(250px\,\.36fr\)_minmax\(0\,1fr\)\]{grid-template-columns:minmax(250px,.36fr) minmax(0,1fr)}}.dark\:block:where(.dark,.dark *){display:block}.dark\:hidden:where(.dark,.dark *){display:none}:where(.dark\:divide-zinc-700:where(.dark,.dark *)>:not(:last-child)){border-color:var(--color-zinc-700)}:where(.dark\:divide-zinc-800:where(.dark,.dark *)>:not(:last-child)){border-color:var(--color-zinc-800)}.dark\:border-stone-500\/40:where(.dark,.dark *){border-color:#79716b66}@supports (color:color-mix(in lab, red, red)){.dark\:border-stone-500\/40:where(.dark,.dark *){border-color:color-mix(in oklab, var(--color-stone-500) 40%, transparent)}}.dark\:border-white\/20:where(.dark,.dark *){border-color:#fff3}@supports (color:color-mix(in lab, red, red)){.dark\:border-white\/20:where(.dark,.dark *){border-color:color-mix(in oklab, var(--color-white) 20%, transparent)}}.dark\:border-zinc-700:where(.dark,.dark *){border-color:var(--color-zinc-700)}.dark\:border-zinc-800:where(.dark,.dark *){border-color:var(--color-zinc-800)}.dark\:bg-stone-400\/10:where(.dark,.dark *){background-color:#a6a09b1a}@supports (color:color-mix(in lab, red, red)){.dark\:bg-stone-400\/10:where(.dark,.dark *){background-color:color-mix(in oklab, var(--color-stone-400) 10%, transparent)}}.dark\:bg-white\/5:where(.dark,.dark *){background-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){.dark\:bg-white\/5:where(.dark,.dark *){background-color:color-mix(in oklab, var(--color-white) 5%, transparent)}}.dark\:bg-zinc-100:where(.dark,.dark *){background-color:var(--color-zinc-100)}.dark\:bg-zinc-700:where(.dark,.dark *){background-color:var(--color-zinc-700)}.dark\:bg-zinc-800:where(.dark,.dark *){background-color:var(--color-zinc-800)}.dark\:bg-zinc-800\/40:where(.dark,.dark *){background-color:#27272a66}@supports (color:color-mix(in lab, red, red)){.dark\:bg-zinc-800\/40:where(.dark,.dark *){background-color:color-mix(in oklab, var(--color-zinc-800) 40%, transparent)}}.dark\:bg-zinc-800\/50:where(.dark,.dark *){background-color:#27272a80}@supports (color:color-mix(in lab, red, red)){.dark\:bg-zinc-800\/50:where(.dark,.dark *){background-color:color-mix(in oklab, var(--color-zinc-800) 50%, transparent)}}.dark\:bg-zinc-900:where(.dark,.dark *){background-color:var(--color-zinc-900)}.dark\:bg-zinc-900\/80:where(.dark,.dark *){background-color:#18181bcc}@supports (color:color-mix(in lab, red, red)){.dark\:bg-zinc-900\/80:where(.dark,.dark *){background-color:color-mix(in oklab, var(--color-zinc-900) 80%, transparent)}}.dark\:bg-zinc-950:where(.dark,.dark *){background-color:var(--color-zinc-950)}.dark\:text-amber-300:where(.dark,.dark *){color:var(--color-amber-300)}.dark\:text-blue-300:where(.dark,.dark *){color:var(--color-blue-300)}.dark\:text-emerald-200:where(.dark,.dark *){color:var(--color-emerald-200)}.dark\:text-emerald-300:where(.dark,.dark *){color:var(--color-emerald-300)}.dark\:text-orange-300:where(.dark,.dark *){color:var(--color-orange-300)}.dark\:text-red-200:where(.dark,.dark *){color:var(--color-red-200)}.dark\:text-red-300:where(.dark,.dark *){color:var(--color-red-300)}.dark\:text-red-400:where(.dark,.dark *){color:var(--color-red-400)}.dark\:text-violet-300:where(.dark,.dark *){color:var(--color-violet-300)}.dark\:text-zinc-50:where(.dark,.dark *){color:var(--color-zinc-50)}.dark\:text-zinc-100:where(.dark,.dark *){color:var(--color-zinc-100)}.dark\:text-zinc-200:where(.dark,.dark *){color:var(--color-zinc-200)}.dark\:text-zinc-300:where(.dark,.dark *){color:var(--color-zinc-300)}.dark\:text-zinc-400:where(.dark,.dark *){color:var(--color-zinc-400)}.dark\:text-zinc-900:where(.dark,.dark *){color:var(--color-zinc-900)}.dark\:invert-0:where(.dark,.dark *){--tw-invert:invert(0%);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,)}.dark\:placeholder\:text-zinc-400:where(.dark,.dark *)::placeholder{color:var(--color-zinc-400)}@media (hover:hover){.dark\:hover\:border-zinc-600:where(.dark,.dark *):hover{border-color:var(--color-zinc-600)}.dark\:hover\:border-zinc-700:where(.dark,.dark *):hover{border-color:var(--color-zinc-700)}.dark\:hover\:bg-zinc-300:where(.dark,.dark *):hover{background-color:var(--color-zinc-300)}.dark\:hover\:bg-zinc-800:where(.dark,.dark *):hover{background-color:var(--color-zinc-800)}.dark\:hover\:text-red-400:where(.dark,.dark *):hover{color:var(--color-red-400)}.dark\:hover\:text-zinc-50:where(.dark,.dark *):hover{color:var(--color-zinc-50)}}.dark\:focus\:border-zinc-500:where(.dark,.dark *):focus{border-color:var(--color-zinc-500)}.dark\:focus\:ring-zinc-700:where(.dark,.dark *):focus{--tw-ring-color:var(--color-zinc-700)}.dark\:aria-pressed\:bg-zinc-100:where(.dark,.dark *)[aria-pressed=true]{background-color:var(--color-zinc-100)}.dark\:aria-pressed\:text-zinc-900:where(.dark,.dark *)[aria-pressed=true]{color:var(--color-zinc-900)}.\[\&_dd\]\:m-0 dd{margin:0}.\[\&_dd\]\:text-\[10px\] dd{font-size:10px}.\[\&_dd\]\:text-\[11px\] dd{font-size:11px}.\[\&_dd\]\:font-semibold dd{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.\[\&_dd\]\:wrap-break-word dd{overflow-wrap:break-word}.\[\&_dt\]\:mb-1 dt{margin-bottom:var(--spacing)}.\[\&_dt\]\:text-\[9px\] dt{font-size:9px}.\[\&_dt\]\:font-bold dt{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.\[\&_dt\]\:tracking-\[0\.05em\] dt{--tw-tracking:.05em;letter-spacing:.05em}.\[\&_dt\]\:text-zinc-500 dt{color:var(--color-zinc-500)}.\[\&_dt\]\:uppercase dt{text-transform:uppercase}.dark\:\[\&_dt\]\:text-zinc-400:where(.dark,.dark *) dt{color:var(--color-zinc-400)}.\[\&\:\:-webkit-details-marker\]\:hidden::-webkit-details-marker{display:none}.\[\&\>div\]\:min-w-0>div{min-width:0}.\[\&\>div\]\:border-t>div{border-top-style:var(--tw-border-style);border-top-width:1px}.\[\&\>div\]\:border-zinc-200>div{border-color:var(--color-zinc-200)}.\[\&\>div\]\:p-4>div{padding:calc(var(--spacing) * 4)}.dark\:\[\&\>div\]\:border-zinc-800:where(.dark,.dark *)>div{border-color:var(--color-zinc-800)}@media (width>=40rem){.\[\&\>div\:nth-child\(-n\+2\)\]\:sm\:border-t-0>div:nth-child(-n+2){border-top-style:var(--tw-border-style);border-top-width:0}.\[\&\>div\:nth-child\(even\)\]\:sm\:border-l>div:nth-child(2n){border-left-style:var(--tw-border-style);border-left-width:1px}.\[\&\>div\:nth-child\(even\)\]\:sm\:border-zinc-200>div:nth-child(2n){border-color:var(--color-zinc-200)}.dark\:\[\&\>div\:nth-child\(even\)\]\:sm\:border-zinc-800:where(.dark,.dark *)>div:nth-child(2n){border-color:var(--color-zinc-800)}.\[\&\>div\:nth-child\(n\+3\)\]\:sm\:border-t>div:nth-child(n+3){border-top-style:var(--tw-border-style);border-top-width:1px}.\[\&\>div\:nth-child\(n\+3\)\]\:sm\:border-zinc-200>div:nth-child(n+3){border-color:var(--color-zinc-200)}.dark\:\[\&\>div\:nth-child\(n\+3\)\]\:sm\:border-zinc-800:where(.dark,.dark *)>div:nth-child(n+3){border-color:var(--color-zinc-800)}.\[\&\>div\:nth-child\(odd\)\]\:sm\:border-r>div:nth-child(odd){border-right-style:var(--tw-border-style);border-right-width:1px}}}body:has(dialog[open]){overflow:hidden}@media (prefers-reduced-motion:reduce){*,:before,:after{scroll-behavior:auto!important;transition:none!important;animation:none!important}}@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-divide-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-ordinal{syntax:"*";inherits:false}@property --tw-slashed-zero{syntax:"*";inherits:false}@property --tw-numeric-figure{syntax:"*";inherits:false}@property --tw-numeric-spacing{syntax:"*";inherits:false}@property --tw-numeric-fraction{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@property --tw-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}@keyframes spin{to{transform:rotate(360deg)}}@keyframes pulse{50%{opacity:.5}}