@usebitl/cli 0.1.12 → 0.1.14

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.
@@ -326,7 +326,8 @@ function activityOf(e) {
326
326
  const base = e.tool.summary ? `${e.tool.name}: ${e.tool.summary}` : e.tool.name;
327
327
  return e.agentId && e.agentType ? `[${e.agentType}] ${base}` : base;
328
328
  }
329
- function splitEvent(e, extra = {}) {
329
+ function splitEvent(e, enrichment = {}) {
330
+ const { resumedFrom, ...extra } = enrichment;
330
331
  const newCwd = e.nativeType === "CwdChanged" && typeof e.raw.new_cwd === "string" ? e.raw.new_cwd : void 0;
331
332
  const signal = {
332
333
  source: e.source,
@@ -338,7 +339,8 @@ function splitEvent(e, extra = {}) {
338
339
  agentId: e.agentId,
339
340
  agentNamed: e.agentId || e.agentType !== void 0 ? Boolean(e.agentType) : void 0,
340
341
  waitingReason: e.waitingReason,
341
- toolFailed: e.tool?.failed || void 0
342
+ toolFailed: e.tool?.failed || void 0,
343
+ resumedFrom
342
344
  };
343
345
  const content = {
344
346
  title: e.type === "prompt" && e.text ? oneLine(e.text, TITLE_LIMIT) : void 0,
@@ -467,7 +469,7 @@ function readCloudConfig(home = bitlHome()) {
467
469
  }
468
470
  }
469
471
  function clientVersionHeader() {
470
- const v = "0.1.12";
472
+ const v = "0.1.14";
471
473
  return v ? { "x-bitl-client": v } : {};
472
474
  }
473
475
  function resolveTarget(home = bitlHome()) {
@@ -490,11 +492,73 @@ function resolveTarget(home = bitlHome()) {
490
492
 
491
493
  // ../../shared/src/node/enrich.ts
492
494
  import { execFile } from "node:child_process";
493
- import { readFile as readFile2, stat as stat2 } from "node:fs/promises";
495
+ import { readFile as readFile3, stat as stat3 } from "node:fs/promises";
494
496
  import { homedir as homedir2 } from "node:os";
495
- import { basename, join as join3 } from "node:path";
496
- var BRANCH_TTL_MS = 6e4;
497
+ import { basename as basename2, join as join4 } from "node:path";
498
+
499
+ // ../../shared/src/node/resume.ts
500
+ import { readdir, readFile as readFile2, stat as stat2, writeFile } from "node:fs/promises";
501
+ import { basename, dirname as dirname3, join as join3 } from "node:path";
497
502
  var MAX_TRANSCRIPT_BYTES2 = 20 * 1024 * 1024;
503
+ var MAX_CANDIDATES = 200;
504
+ var CACHE_FILE = "resume-links.json";
505
+ var CACHE_LIMIT = 200;
506
+ var UUID = /"uuid":"([0-9a-f-]{36})"/g;
507
+ var messageIds = (text) => [...text.matchAll(UUID)].map((m) => m[1]);
508
+ async function findResumedFrom(transcriptPath) {
509
+ const own = basename(transcriptPath, ".jsonl");
510
+ if ((await stat2(transcriptPath)).size > MAX_TRANSCRIPT_BYTES2) return null;
511
+ const ids = messageIds(await readFile2(transcriptPath, "utf8"));
512
+ if (ids.length === 0) return void 0;
513
+ const dir = dirname3(transcriptPath);
514
+ const candidates = [];
515
+ const names = (await readdir(dir)).filter((n) => n.endsWith(".jsonl") && basename(n, ".jsonl") !== own);
516
+ for (const name of names.slice(0, MAX_CANDIDATES)) {
517
+ try {
518
+ const file = join3(dir, name);
519
+ const info2 = await stat2(file);
520
+ if (info2.size > MAX_TRANSCRIPT_BYTES2) continue;
521
+ const list = messageIds(await readFile2(file, "utf8"));
522
+ if (list.length) candidates.push({ id: basename(name, ".jsonl"), ids: new Set(list), last: list.at(-1), mtime: info2.mtimeMs });
523
+ } catch {
524
+ }
525
+ }
526
+ const ourLast = ids.at(-1);
527
+ const earlier = candidates.filter((c) => !(c.ids.has(ourLast) && c.last !== ourLast));
528
+ for (let i = ids.length - 1; i >= 0; i--) {
529
+ const id = ids[i];
530
+ const holders = earlier.filter((c) => c.ids.has(id));
531
+ if (!holders.length) continue;
532
+ const ended = holders.find((c) => c.last === id);
533
+ return (ended ?? holders.sort((a, b) => b.mtime - a.mtime)[0]).id;
534
+ }
535
+ return null;
536
+ }
537
+ async function readCache(home) {
538
+ try {
539
+ return JSON.parse(await readFile2(join3(home, CACHE_FILE), "utf8"));
540
+ } catch {
541
+ return {};
542
+ }
543
+ }
544
+ async function resumedFromFor(e, home) {
545
+ if (e.source !== "claude-code" || !e.transcriptPath) return void 0;
546
+ const cache = await readCache(home);
547
+ const hit = cache[e.sessionId];
548
+ if (hit && !hit.pending) return hit.from;
549
+ const resumed = e.nativeType === "SessionStart" && e.raw.source === "resume";
550
+ if (!resumed && !(hit?.pending && e.type === "prompt")) return void 0;
551
+ const found = await findResumedFrom(e.transcriptPath).catch(() => null);
552
+ cache[e.sessionId] = found === void 0 ? { pending: true, at: e.at } : { ...found ? { from: found } : {}, at: e.at };
553
+ const kept = Object.entries(cache).sort((a, b) => b[1].at.localeCompare(a[1].at)).slice(0, CACHE_LIMIT);
554
+ await writeFile(join3(home, CACHE_FILE), JSON.stringify(Object.fromEntries(kept))).catch(() => {
555
+ });
556
+ return found ?? void 0;
557
+ }
558
+
559
+ // ../../shared/src/node/enrich.ts
560
+ var BRANCH_TTL_MS = 6e4;
561
+ var MAX_TRANSCRIPT_BYTES3 = 20 * 1024 * 1024;
498
562
  var branchCache = /* @__PURE__ */ new Map();
499
563
  function gitBranch(cwd) {
500
564
  const hit = branchCache.get(cwd);
@@ -509,8 +573,8 @@ function gitBranch(cwd) {
509
573
  }
510
574
  async function titleFromTranscript(path) {
511
575
  try {
512
- if ((await stat2(path)).size > MAX_TRANSCRIPT_BYTES2) return void 0;
513
- const text = await readFile2(path, "utf8");
576
+ if ((await stat3(path)).size > MAX_TRANSCRIPT_BYTES3) return void 0;
577
+ const text = await readFile3(path, "utf8");
514
578
  let aiTitle;
515
579
  let customTitle;
516
580
  for (const line of text.split("\n")) {
@@ -527,12 +591,12 @@ async function titleFromTranscript(path) {
527
591
  return void 0;
528
592
  }
529
593
  }
530
- async function codexThreadName(threadId, codexHome = process.env.CODEX_HOME?.trim() || join3(homedir2(), ".codex")) {
594
+ async function codexThreadName(threadId, codexHome = process.env.CODEX_HOME?.trim() || join4(homedir2(), ".codex")) {
531
595
  try {
532
- const file = join3(codexHome, "session_index.jsonl");
533
- if ((await stat2(file)).size > MAX_TRANSCRIPT_BYTES2) return void 0;
596
+ const file = join4(codexHome, "session_index.jsonl");
597
+ if ((await stat3(file)).size > MAX_TRANSCRIPT_BYTES3) return void 0;
534
598
  let name;
535
- for (const line of (await readFile2(file, "utf8")).split("\n")) {
599
+ for (const line of (await readFile3(file, "utf8")).split("\n")) {
536
600
  if (!line.includes(threadId)) continue;
537
601
  try {
538
602
  const rec = JSON.parse(line);
@@ -557,9 +621,9 @@ async function importSqliteQuietly() {
557
621
  process.emitWarning = emitWarning;
558
622
  }
559
623
  }
560
- async function antigravityTitle(conversationId, dbPath = join3(homedir2(), ".gemini", "antigravity-cli", "conversation_summaries.db")) {
624
+ async function antigravityTitle(conversationId, dbPath = join4(homedir2(), ".gemini", "antigravity-cli", "conversation_summaries.db")) {
561
625
  try {
562
- await stat2(dbPath);
626
+ await stat3(dbPath);
563
627
  const { DatabaseSync } = await importSqliteQuietly();
564
628
  const db = new DatabaseSync(dbPath, { readOnly: true });
565
629
  try {
@@ -586,9 +650,9 @@ function gitRoot(cwd) {
586
650
  var rootCache = /* @__PURE__ */ new Map();
587
651
  async function projectName(cwd) {
588
652
  const root = await gitRoot(cwd);
589
- return basename((root ?? cwd).replace(/[\\/]+$/, ""));
653
+ return basename2((root ?? cwd).replace(/[\\/]+$/, ""));
590
654
  }
591
- async function enrichEvent(e) {
655
+ async function enrichEvent(e, home = bitlHome()) {
592
656
  const extra = {};
593
657
  const newCwd = e.nativeType === "CwdChanged" && typeof e.raw.new_cwd === "string" ? e.raw.new_cwd : void 0;
594
658
  const cwd = newCwd ?? e.cwd;
@@ -610,6 +674,11 @@ async function enrichEvent(e) {
610
674
  })
611
675
  );
612
676
  }
677
+ tasks.push(
678
+ resumedFromFor(e, home).then((from) => {
679
+ if (from) extra.resumedFrom = from;
680
+ })
681
+ );
613
682
  await Promise.all(tasks.map((t) => t.catch(() => {
614
683
  })));
615
684
  return extra;
@@ -751,7 +820,7 @@ async function prepareRaw(rec, opts = {}) {
751
820
  const filled = rec.source === "antigravity" && opts.enrich !== false ? { ...rec, payload: await fillAntigravityText(rec.payload) } : rec;
752
821
  const e = normalizeRecord(filled);
753
822
  if (!e) return null;
754
- const extra = opts.enrich === false ? {} : await enrichEvent(e);
823
+ const extra = opts.enrich === false ? {} : await enrichEvent(e, opts.home ?? bitlHome());
755
824
  const keys = opts.keys ?? await loadKeys(opts.home ?? bitlHome());
756
825
  return prepareRecord(e, sealerFor(keys), extra);
757
826
  }
@@ -19997,7 +19997,8 @@ var SignalSchema = external_exports.object({
19997
19997
  agentNamed: external_exports.boolean().optional(),
19998
19998
  waitingReason: WaitingReason.optional(),
19999
19999
  toolFailed: external_exports.boolean().optional(),
20000
- requestTag: external_exports.string().max(100).optional()
20000
+ requestTag: external_exports.string().max(100).optional(),
20001
+ resumedFrom: id.optional()
20001
20002
  });
20002
20003
  var WireRecordSchema = external_exports.object({
20003
20004
  v: external_exports.literal(WIRE_VERSION),
@@ -20061,7 +20062,7 @@ function removeCloudLogin(home = bitlHome()) {
20061
20062
  rmSync(cloudKeyPath(home), { force: true });
20062
20063
  }
20063
20064
  function clientVersionHeader() {
20064
- const v = "0.1.12";
20065
+ const v = "0.1.14";
20065
20066
  return v ? { "x-bitl-client": v } : {};
20066
20067
  }
20067
20068
  function resolveTarget(home = bitlHome()) {
@@ -20118,7 +20119,7 @@ async function latestVersion(home, now) {
20118
20119
  return latest;
20119
20120
  }
20120
20121
  var updateCommand = (install = process.env.BITL_INSTALL) => install === "npx" ? "npx @usebitl/cli@latest start" : "npm i -g @usebitl/cli";
20121
- async function checkCliUpdate(current = "0.1.12", opts = {}) {
20122
+ async function checkCliUpdate(current = "0.1.14", opts = {}) {
20122
20123
  if (!current || process.env.BITL_NO_UPDATE_CHECK === "1") return void 0;
20123
20124
  const latest = await latestVersion(opts.home ?? bitlHome(), opts.now ?? Date.now());
20124
20125
  if (!latest || compareVersions(latest, current) <= 0) return void 0;
@@ -20128,9 +20129,12 @@ async function checkCliUpdate(current = "0.1.12", opts = {}) {
20128
20129
  // ../../shared/src/node/antigravity.ts
20129
20130
  var MAX_TRANSCRIPT_BYTES = 20 * 1024 * 1024;
20130
20131
 
20131
- // ../../shared/src/node/enrich.ts
20132
+ // ../../shared/src/node/resume.ts
20132
20133
  var MAX_TRANSCRIPT_BYTES2 = 20 * 1024 * 1024;
20133
20134
 
20135
+ // ../../shared/src/node/enrich.ts
20136
+ var MAX_TRANSCRIPT_BYTES3 = 20 * 1024 * 1024;
20137
+
20134
20138
  // ../../shared/src/node/approve.ts
20135
20139
  var DEFAULT_APPROVAL_WAIT_MS = 10 * 6e4;
20136
20140
 
@@ -11,7 +11,7 @@ import {
11
11
  isEmptySession,
12
12
  parseWireRecord,
13
13
  sessionKey
14
- } from "./chunk-ERXNJMQT.mjs";
14
+ } from "./chunk-RIX6JB6S.mjs";
15
15
 
16
16
  // ../../../node_modules/.pnpm/bn.js@4.12.5/node_modules/bn.js/lib/bn.js
17
17
  var require_bn = __commonJS({
@@ -9004,6 +9004,7 @@ var PushStore = class {
9004
9004
  // ../../server/src/state.ts
9005
9005
  var STALE_AFTER_MS = 10 * 60 * 1e3;
9006
9006
  var PERMISSION_RACE_MS = 2e3;
9007
+ var QUIET_EVENTS = /* @__PURE__ */ new Set(["session_start", "session_end", "notice"]);
9007
9008
  function newSession(e) {
9008
9009
  return {
9009
9010
  key: sessionKey(e.source, e.sessionId),
@@ -9037,6 +9038,7 @@ function applyEvent(prev, e, c = {}) {
9037
9038
  else s.enc[field] = value;
9038
9039
  };
9039
9040
  if (e.at > s.lastEventAt) s.lastEventAt = e.at;
9041
+ if (s.cleared && !late && !QUIET_EVENTS.has(e.type) && e.waitingReason !== "idle") delete s.cleared;
9040
9042
  for (const field of ["cwd", "project", "gitBranch", "aiTitle", "model"]) if (c[field]) put(field, c[field]);
9041
9043
  const fromSubagent = Boolean(e.agentId) && e.type !== "subagent_start" && e.type !== "subagent_end";
9042
9044
  if (e.requestTag && e.type !== "prompt" && e.requestTag !== s.lastPromptTag) {
@@ -9230,8 +9232,21 @@ var SqlStore = class _SqlStore {
9230
9232
  return session2;
9231
9233
  }, _SqlStore.lockKey(accountId, key));
9232
9234
  this.emit({ type: "session", accountId, session, prevStatus });
9235
+ if (e.resumedFrom) return await this.linkResumed(accountId, session, sessionKey(e.source, e.resumedFrom)) ?? session;
9233
9236
  return session;
9234
9237
  }
9238
+ /**
9239
+ * `--resume` that started a new session: the earlier card leaves the board (replacedBy) and its history shows in the
9240
+ * new card's detail (resumedFrom, carrying the earlier card's own predecessors). Content can't move between cards —
9241
+ * it is sealed with each session's key — so the cards stay apart and are read together
9242
+ */
9243
+ async linkResumed(accountId, session, oldKey) {
9244
+ if (oldKey === session.key || session.resumedFrom?.includes(oldKey)) return void 0;
9245
+ const old = await this.update(accountId, oldKey, (cur) => cur.replacedBy === session.key ? null : { ...cur, replacedBy: session.key });
9246
+ if (!old) return void 0;
9247
+ const chain = [oldKey, ...old.resumedFrom ?? []].filter((k) => k !== session.key);
9248
+ return this.update(accountId, session.key, (cur) => ({ ...cur, resumedFrom: [.../* @__PURE__ */ new Set([...chain, ...cur.resumedFrom ?? []])] }));
9249
+ }
9235
9250
  getSession(accountId, key) {
9236
9251
  return _SqlStore.read(this.db.query, accountId, key);
9237
9252
  }
@@ -9291,41 +9306,59 @@ var SqlStore = class _SqlStore {
9291
9306
  acknowledge(accountId, key, now3 = /* @__PURE__ */ new Date()) {
9292
9307
  return this.update(accountId, key, (cur) => acknowledge(cur, now3));
9293
9308
  }
9294
- async deleteSession(accountId, key) {
9309
+ /** Deletes one session with its turns and events (onlyEnded: only if it is still ended, checked under lock) */
9310
+ async remove(accountId, key, onlyEnded = false) {
9295
9311
  const deleted = await this.db.transaction(async (q) => {
9296
- const { changes } = await q("DELETE FROM sessions WHERE account_id = ? AND key = ?", [accountId, key]);
9312
+ const { changes } = await q(`DELETE FROM sessions WHERE account_id = ? AND key = ?${onlyEnded ? ` AND status = 'ended'` : ""}`, [accountId, key]);
9313
+ if (changes === 0) return false;
9297
9314
  await q("DELETE FROM turns WHERE account_id = ? AND session_key = ?", [accountId, key]);
9298
9315
  await q("DELETE FROM events WHERE account_id = ? AND session_key = ?", [accountId, key]);
9299
- return changes > 0;
9316
+ return true;
9300
9317
  }, _SqlStore.lockKey(accountId, key));
9301
9318
  if (deleted) this.emit({ type: "removed", accountId, key });
9302
9319
  return deleted;
9303
9320
  }
9321
+ /** The earlier sessions a card continues go with it — they are off the board and only shown through it */
9322
+ async removePredecessors(accountId, s) {
9323
+ for (const key of s.resumedFrom ?? []) await this.remove(accountId, key);
9324
+ }
9325
+ async deleteSession(accountId, key) {
9326
+ const cur = await this.getSession(accountId, key);
9327
+ const deleted = await this.remove(accountId, key);
9328
+ if (deleted && cur) await this.removePredecessors(accountId, cur);
9329
+ return deleted;
9330
+ }
9304
9331
  /**
9305
9332
  * Deletes ended cards with their history (the board's "Ended → Clear all"). With keys, only the ended ones among them (goal-filtered view).
9306
9333
  * To spare cards revived by a new event after the list was read, the status is rechecked under lock while deleting. Returns the number deleted
9307
9334
  */
9308
9335
  async deleteEnded(accountId, keys) {
9309
- const { rows } = await this.db.query(`SELECT key FROM sessions WHERE account_id = ? AND status = 'ended' AND archived = 0`, [accountId]);
9336
+ const { rows } = await this.db.query(`SELECT data FROM sessions WHERE account_id = ? AND status = 'ended' AND archived = 0`, [accountId]);
9310
9337
  const only = keys ? new Set(keys) : null;
9311
9338
  let n = 0;
9312
9339
  for (const r of rows) {
9313
- const key = r.key;
9314
- if (only && !only.has(key)) continue;
9315
- const deleted = await this.db.transaction(async (q) => {
9316
- const { changes } = await q(`DELETE FROM sessions WHERE account_id = ? AND key = ? AND status = 'ended'`, [accountId, key]);
9317
- if (changes === 0) return false;
9318
- await q("DELETE FROM turns WHERE account_id = ? AND session_key = ?", [accountId, key]);
9319
- await q("DELETE FROM events WHERE account_id = ? AND session_key = ?", [accountId, key]);
9320
- return true;
9321
- }, _SqlStore.lockKey(accountId, key));
9322
- if (deleted) {
9340
+ const s = JSON.parse(r.data);
9341
+ if (s.replacedBy || only && !only.has(s.key)) continue;
9342
+ if (await this.remove(accountId, s.key, true)) {
9323
9343
  n++;
9324
- this.emit({ type: "removed", accountId, key });
9344
+ await this.removePredecessors(accountId, s);
9325
9345
  }
9326
9346
  }
9327
9347
  return n;
9328
9348
  }
9349
+ async clearBoard(accountId) {
9350
+ const deleted = await this.deleteEnded(accountId);
9351
+ const { rows } = await this.db.query(`SELECT key FROM sessions WHERE account_id = ? AND status != 'ended' AND archived = 0`, [accountId]);
9352
+ let cleared = 0;
9353
+ for (const r of rows) {
9354
+ await this.update(accountId, r.key, (cur) => {
9355
+ if (cur.cleared || cur.archived || cur.replacedBy) return null;
9356
+ cleared++;
9357
+ return { ...cur, cleared: true };
9358
+ });
9359
+ }
9360
+ return { deleted, cleared };
9361
+ }
9329
9362
  async sweepStale(now3 = /* @__PURE__ */ new Date()) {
9330
9363
  const { rows } = await this.db.query(`SELECT account_id, key FROM sessions WHERE status = 'running'`);
9331
9364
  let n = 0;
@@ -12114,10 +12147,10 @@ async function ingestRecord(store, accountId, body) {
12114
12147
  const rec = parseWireRecord(body);
12115
12148
  return rec ? store.ingest(accountId, rec) : null;
12116
12149
  }
12117
- function createApp({ store, webDist, account, push, approvals, goals, access = allowAll, extension }) {
12150
+ function createApp({ store, webDist, account, push, approvals, goals, access = allowAll, extension, build }) {
12118
12151
  const app = new Hono2();
12119
12152
  const resolve2 = account ?? (() => LOCAL_ACCOUNT);
12120
- app.get("/api/health", (c) => c.json({ ok: true }));
12153
+ app.get("/api/health", (c) => c.json(build ? { ok: true, build } : { ok: true }));
12121
12154
  app.get("/api/me", async (c) => c.json(extension?.me ? await extension.me(c) : { mode: "local" }));
12122
12155
  extension?.mountPublic?.(app);
12123
12156
  app.get("/api/push/key", (c) => c.json({ publicKey: push?.publicKey ?? null }));
@@ -12163,6 +12196,11 @@ function createApp({ store, webDist, account, push, approvals, goals, access = a
12163
12196
  const session = await store.getSession(accountId, key);
12164
12197
  if (!session) return c.json({ error: "not found" }, 404);
12165
12198
  const [turns, timeline] = await Promise.all([store.listTurns(accountId, key), store.listTimeline(accountId, key)]);
12199
+ for (const prev of session.resumedFrom ?? []) {
12200
+ const [t, items] = await Promise.all([store.listTurns(accountId, prev), store.listTimeline(accountId, prev)]);
12201
+ turns.push(...t);
12202
+ timeline.push(...items.map((item) => ({ ...item, sessionKey: prev })));
12203
+ }
12166
12204
  return c.json({ session, turns, timeline });
12167
12205
  });
12168
12206
  const found = (c, s) => s ? c.json(s) : c.json({ error: "not found" }, 404);
@@ -12188,6 +12226,15 @@ function createApp({ store, webDist, account, push, approvals, goals, access = a
12188
12226
  const keys = Array.isArray(body?.keys) ? body.keys.filter((k) => typeof k === "string").slice(0, 5e3) : void 0;
12189
12227
  return c.json({ deleted: await store.deleteEnded(c.var.accountId, keys) });
12190
12228
  });
12229
+ app.post("/api/board/clear", async (c) => {
12230
+ const body = await c.req.json().catch(() => ({}));
12231
+ const result = await store.clearBoard(c.var.accountId);
12232
+ let goalsDeleted = 0;
12233
+ if (body?.goals === true && goals) {
12234
+ for (const g of await goals.list(c.var.accountId, true)) if (await goals.delete(c.var.accountId, g.id)) goalsDeleted++;
12235
+ }
12236
+ return c.json({ ...result, goals: goalsDeleted });
12237
+ });
12191
12238
  app.post("/api/sessions/:key/ack", async (c) => found(c, await store.acknowledge(c.var.accountId, c.req.param("key"))));
12192
12239
  app.post(
12193
12240
  "/api/sessions/:key/archive",
@@ -12356,13 +12403,13 @@ function startPushNotifier(opts) {
12356
12403
  };
12357
12404
  const notify = async (accountId, s) => {
12358
12405
  if (!(await push.list(accountId)).length) return;
12359
- const attention = (await store.listSessions(accountId)).filter((x) => ALERT.has(x.status) && !isEmptySession(x)).length;
12406
+ const attention = (await store.listSessions(accountId)).filter((x) => ALERT.has(x.status) && !isEmptySession(x) && !x.cleared && !x.replacedBy).length;
12360
12407
  await sendAll(accountId, buildPayload(s, attention), topicOf(s.key));
12361
12408
  };
12362
12409
  const off = store.subscribe((change) => {
12363
12410
  if (change.type !== "session") return;
12364
12411
  const s = change.session;
12365
- if (!ALERT.has(s.status) || change.prevStatus === s.status || isEmptySession(s)) return;
12412
+ if (!ALERT.has(s.status) || change.prevStatus === s.status || isEmptySession(s) || s.cleared || s.replacedBy) return;
12366
12413
  const id = `${change.accountId}
12367
12414
  ${s.key}`;
12368
12415
  const t = Date.now();
package/dist/cli.mjs CHANGED
@@ -21,7 +21,7 @@ import {
21
21
  unwrapMasterKey,
22
22
  verifyPublicKey,
23
23
  wrapMasterKey
24
- } from "./chunks/chunk-ERXNJMQT.mjs";
24
+ } from "./chunks/chunk-RIX6JB6S.mjs";
25
25
 
26
26
  // ../src/index.ts
27
27
  import { homedir as homedir2 } from "node:os";
@@ -453,7 +453,7 @@ async function logout() {
453
453
  }
454
454
 
455
455
  // ../src/update.ts
456
- async function updateNotice(current = "0.1.12") {
456
+ async function updateNotice(current = "0.1.14") {
457
457
  const u = await checkCliUpdate(current);
458
458
  return u && `${t("update.available", { ...u })}
459
459
  ${t("update.changelog")}`;
@@ -609,7 +609,7 @@ async function main(argv) {
609
609
  if (String(typeof warning === "string" ? warning : warning.message).startsWith("SQLite is an experimental feature")) return;
610
610
  emitWarning(warning, ...rest2);
611
611
  });
612
- const { startServer } = await import("./chunks/src-4IUSQVOL.mjs");
612
+ const { startServer } = await import("./chunks/src-WI4MJOSQ.mjs");
613
613
  await startServer();
614
614
  console.log(t("start.pair", { url: localPairUrl() }));
615
615
  return;
@@ -631,7 +631,7 @@ async function main(argv) {
631
631
  case "--version":
632
632
  case "-v":
633
633
  case "version":
634
- console.log("0.1.12");
634
+ console.log("0.1.14");
635
635
  return;
636
636
  case "remote":
637
637
  case "away":
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@usebitl/cli",
3
- "version": "0.1.12",
3
+ "version": "0.1.14",
4
4
  "description": "BITL — see which of your AI coding agents (Claude Code, Codex, Antigravity) are waiting for you. Local board or usebitl.com",
5
5
  "type": "module",
6
6
  "bin": {
@@ -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-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-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}}}@layer theme{:root,:host{--font-sans:"Pretendard Variable", Pretendard, -apple-system, BlinkMacSystemFont, "Apple SD Gothic Neo", "Malgun Gothic", "Segoe UI", sans-serif;--font-mono:ui-monospace, "Cascadia Code", "SF Mono", Consolas, monospace;--color-red-50:oklch(97.1% .013 17.38);--color-red-100:oklch(93.6% .032 17.717);--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-100:oklch(95.4% .038 75.164);--color-orange-300:oklch(83.7% .128 66.29);--color-orange-500:oklch(70.5% .213 47.604);--color-orange-800:oklch(47% .157 37.304);--color-amber-50:oklch(98.7% .022 95.277);--color-amber-100:oklch(96.2% .059 95.617);--color-amber-200:oklch(92.4% .12 95.746);--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-amber-800:oklch(47.3% .137 46.201);--color-amber-900:oklch(41.4% .112 45.904);--color-emerald-50:oklch(97.9% .021 166.113);--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-50:oklch(97.7% .013 236.62);--color-sky-100:oklch(95.1% .026 236.824);--color-sky-300:oklch(82.8% .111 230.318);--color-sky-400:oklch(74.6% .16 232.661);--color-sky-500:oklch(68.5% .169 237.323);--color-sky-600:oklch(58.8% .158 241.966);--color-sky-700:oklch(50% .134 242.749);--color-sky-800:oklch(44.3% .11 240.79);--color-blue-600:oklch(54.6% .245 262.881);--color-violet-100:oklch(94.3% .029 294.588);--color-violet-300:oklch(81.1% .111 293.571);--color-violet-400:oklch(70.2% .183 293.541);--color-violet-500:oklch(60.6% .25 292.717);--color-violet-600:oklch(54.1% .281 293.009);--color-violet-800:oklch(43.2% .232 292.759);--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-black:#000;--color-white:#fff;--spacing:.25rem;--container-sm:24rem;--container-md:28rem;--container-lg:32rem;--container-xl:36rem;--container-2xl:42rem;--container-3xl:48rem;--container-6xl:72rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--text-base:1rem;--text-base--line-height:calc(1.5 / 1);--text-lg:1.125rem;--text-lg--line-height:calc(1.75 / 1.125);--text-xl:1.25rem;--text-xl--line-height:calc(1.75 / 1.25);--text-2xl:1.5rem;--text-2xl--line-height:calc(2 / 1.5);--text-3xl:1.875rem;--text-3xl--line-height:calc(2.25 / 1.875);--text-4xl:2.25rem;--text-4xl--line-height:calc(2.5 / 2.25);--text-5xl:3rem;--text-5xl--line-height:1;--font-weight-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--tracking-tight:-.025em;--tracking-normal:0em;--tracking-wide:.025em;--tracking-wider:.05em;--tracking-widest:.1em;--leading-tight:1.25;--leading-snug:1.375;--leading-relaxed:1.625;--radius-md:.375rem;--radius-lg:.5rem;--radius-xl:.75rem;--radius-2xl:1rem;--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{.\@container{container-type:inline-size}.pointer-events-none{pointer-events:none}.invisible{visibility:hidden}.visible{visibility:visible}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.sticky{position:sticky}.inset-0{inset:0}.inset-\[18\%\]{inset:18%}.inset-x-2{inset-inline:calc(var(--spacing) * 2)}.inset-y-0{inset-block:0}.top-0{top:0}.top-0\.5{top:calc(var(--spacing) * .5)}.top-2{top:calc(var(--spacing) * 2)}.top-9{top:calc(var(--spacing) * 9)}.top-full{top:100%}.right-0{right:0}.right-0\.5{right:calc(var(--spacing) * .5)}.right-2{right:calc(var(--spacing) * 2)}.right-3{right:calc(var(--spacing) * 3)}.right-8{right:calc(var(--spacing) * 8)}.bottom-\[max\(0\.5rem\,env\(safe-area-inset-bottom\)\)\]{bottom:max(.5rem, env(safe-area-inset-bottom))}.bottom-\[max\(1\.5rem\,env\(safe-area-inset-bottom\)\)\]{bottom:max(1.5rem, env(safe-area-inset-bottom))}.left-0\.5{left:calc(var(--spacing) * .5)}.left-1\/2{left:50%}.left-\[1\.375rem\]{left:1.375rem}.z-10{z-index:10}.z-20{z-index:20}.z-30{z-index:30}.z-40{z-index:40}.z-50{z-index:50}.z-\[60\]{z-index:60}.order-1{order:1}.order-2{order:2}.order-3{order:3}.order-4{order:4}.-mx-1{margin-inline:calc(var(--spacing) * -1)}.-mx-4{margin-inline:calc(var(--spacing) * -4)}.mx-1\.5{margin-inline:calc(var(--spacing) * 1.5)}.mx-auto{margin-inline:auto}.my-1{margin-block:var(--spacing)}.my-6{margin-block:calc(var(--spacing) * 6)}.my-8{margin-block:calc(var(--spacing) * 8)}.-mt-3{margin-top:calc(var(--spacing) * -3)}.-mt-10{margin-top:calc(var(--spacing) * -10)}.mt-0\.5{margin-top:calc(var(--spacing) * .5)}.mt-1{margin-top:var(--spacing)}.mt-1\.5{margin-top:calc(var(--spacing) * 1.5)}.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-4{margin-top:calc(var(--spacing) * 4)}.mt-5{margin-top:calc(var(--spacing) * 5)}.mt-6{margin-top:calc(var(--spacing) * 6)}.mt-7{margin-top:calc(var(--spacing) * 7)}.mt-8{margin-top:calc(var(--spacing) * 8)}.mt-10{margin-top:calc(var(--spacing) * 10)}.mt-auto{margin-top:auto}.-mr-1{margin-right:calc(var(--spacing) * -1)}.mr-1{margin-right:var(--spacing)}.-mb-px{margin-bottom:-1px}.mb-1{margin-bottom:var(--spacing)}.mb-1\.5{margin-bottom:calc(var(--spacing) * 1.5)}.mb-2{margin-bottom:calc(var(--spacing) * 2)}.mb-3{margin-bottom:calc(var(--spacing) * 3)}.mb-4{margin-bottom:calc(var(--spacing) * 4)}.mb-5{margin-bottom:calc(var(--spacing) * 5)}.ml-1{margin-left:var(--spacing)}.ml-1\.5{margin-left:calc(var(--spacing) * 1.5)}.ml-2{margin-left:calc(var(--spacing) * 2)}.ml-auto{margin-left:auto}.line-clamp-2{-webkit-line-clamp:2;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.line-clamp-\[12\]{-webkit-line-clamp:12;-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-block{display:inline-block}.inline-flex{display:inline-flex}.table{display:table}.aspect-\[9\/18\.5\]{aspect-ratio:9/18.5}.aspect-square{aspect-ratio:1}.size-1\.5{width:calc(var(--spacing) * 1.5);height:calc(var(--spacing) * 1.5)}.size-2{width:calc(var(--spacing) * 2);height:calc(var(--spacing) * 2)}.size-2\.5{width:calc(var(--spacing) * 2.5);height:calc(var(--spacing) * 2.5)}.size-3\.5{width:calc(var(--spacing) * 3.5);height:calc(var(--spacing) * 3.5)}.size-4{width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}.size-5{width:calc(var(--spacing) * 5);height:calc(var(--spacing) * 5)}.size-6{width:calc(var(--spacing) * 6);height:calc(var(--spacing) * 6)}.size-7{width:calc(var(--spacing) * 7);height:calc(var(--spacing) * 7)}.size-8{width:calc(var(--spacing) * 8);height:calc(var(--spacing) * 8)}.size-11{width:calc(var(--spacing) * 11);height:calc(var(--spacing) * 11)}.size-\[18px\]{width:18px;height:18px}.h-1{height:var(--spacing)}.h-1\.5{height:calc(var(--spacing) * 1.5)}.h-7{height:calc(var(--spacing) * 7)}.h-8{height:calc(var(--spacing) * 8)}.h-full{height:100%}.h-px{height:1px}.max-h-64{max-height:calc(var(--spacing) * 64)}.max-h-\[calc\(100dvh-2rem\)\]{max-height:calc(100dvh - 2rem)}.min-h-0{min-height:0}.min-h-dvh{min-height:100dvh}.w-12{width:calc(var(--spacing) * 12)}.w-14{width:calc(var(--spacing) * 14)}.w-44{width:calc(var(--spacing) * 44)}.w-52{width:calc(var(--spacing) * 52)}.w-60{width:calc(var(--spacing) * 60)}.w-64{width:calc(var(--spacing) * 64)}.w-full{width:100%}.max-w-2xl{max-width:var(--container-2xl)}.max-w-3xl{max-width:var(--container-3xl)}.max-w-56{max-width:calc(var(--spacing) * 56)}.max-w-\[900px\]{max-width:900px}.max-w-\[1080px\]{max-width:1080px}.max-w-\[1600px\]{max-width:1600px}.max-w-full{max-width:100%}.max-w-lg{max-width:var(--container-lg)}.max-w-md{max-width:var(--container-md)}.max-w-sm{max-width:var(--container-sm)}.max-w-xl{max-width:var(--container-xl)}.min-w-0{min-width:0}.min-w-\[640px\]{min-width:640px}.flex-1{flex:1}.shrink-0{flex-shrink:0}.basis-full{flex-basis:100%}.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-90{rotate:90deg}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.cursor-pointer{cursor:pointer}.resize-none{resize:none}.list-decimal{list-style-type:decimal}.list-disc{list-style-type:disc}.list-none{list-style-type: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-\[1\.75rem_1fr\]{grid-template-columns:1.75rem 1fr}.grid-cols-\[auto_1fr\]{grid-template-columns:auto 1fr}.grid-cols-\[repeat\(auto-fill\,minmax\(230px\,1fr\)\)\]{grid-template-columns:repeat(auto-fill,minmax(230px,1fr))}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.place-items-center{place-items:center}.content-start{align-content:flex-start}.items-center{align-items:center}.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\.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-4{gap:calc(var(--spacing) * 4)}.gap-5{gap:calc(var(--spacing) * 5)}.gap-7{gap:calc(var(--spacing) * 7)}.gap-10{gap:calc(var(--spacing) * 10)}:where(.space-y-1>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(var(--spacing) * var(--tw-space-y-reverse));margin-block-end:calc(var(--spacing) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-1\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 1.5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 1.5) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-2>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 2) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 2) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-2\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 2.5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 2.5) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-4>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 4) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 4) * calc(1 - var(--tw-space-y-reverse)))}.gap-x-2\.5{column-gap:calc(var(--spacing) * 2.5)}.gap-x-3{column-gap:calc(var(--spacing) * 3)}.gap-x-4{column-gap:calc(var(--spacing) * 4)}.gap-x-5{column-gap:calc(var(--spacing) * 5)}.gap-x-6{column-gap:calc(var(--spacing) * 6)}.gap-y-1{row-gap:var(--spacing)}.gap-y-2{row-gap:calc(var(--spacing) * 2)}.gap-y-3{row-gap:calc(var(--spacing) * 3)}: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-100>:not(:last-child)){border-color:var(--color-zinc-100)}.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-2xl{border-radius:var(--radius-2xl)}.rounded-\[10px\]{border-radius:10px}.rounded-\[30px\]{border-radius:30px}.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)}.border{border-style:var(--tw-border-style);border-width:1px}.border-2{border-style:var(--tw-border-style);border-width:2px}.border-\[7px\]{border-style:var(--tw-border-style);border-width:7px}.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-l-2{border-left-style:var(--tw-border-style);border-left-width:2px}.border-dashed{--tw-border-style:dashed;border-style:dashed}.border-\[\#1b1f29\]{border-color:#1b1f29}.border-amber-300{border-color:var(--color-amber-300)}.border-amber-500\/35{border-color:#f99c0059}@supports (color:color-mix(in lab, red, red)){.border-amber-500\/35{border-color:color-mix(in oklab, var(--color-amber-500) 35%, transparent)}}.border-amber-500\/45{border-color:#f99c0073}@supports (color:color-mix(in lab, red, red)){.border-amber-500\/45{border-color:color-mix(in oklab, var(--color-amber-500) 45%, transparent)}}.border-amber-500\/50{border-color:#f99c0080}@supports (color:color-mix(in lab, red, red)){.border-amber-500\/50{border-color:color-mix(in oklab, var(--color-amber-500) 50%, transparent)}}.border-emerald-300{border-color:var(--color-emerald-300)}.border-emerald-500\/50{border-color:#00bb7f80}@supports (color:color-mix(in lab, red, red)){.border-emerald-500\/50{border-color:color-mix(in oklab, var(--color-emerald-500) 50%, transparent)}}.border-red-200{border-color:var(--color-red-200)}.border-red-300{border-color:var(--color-red-300)}.border-red-500\/40{border-color:#fb2c3666}@supports (color:color-mix(in lab, red, red)){.border-red-500\/40{border-color:color-mix(in oklab, var(--color-red-500) 40%, transparent)}}.border-red-500\/45{border-color:#fb2c3673}@supports (color:color-mix(in lab, red, red)){.border-red-500\/45{border-color:color-mix(in oklab, var(--color-red-500) 45%, transparent)}}.border-red-500\/50{border-color:#fb2c3680}@supports (color:color-mix(in lab, red, red)){.border-red-500\/50{border-color:color-mix(in oklab, var(--color-red-500) 50%, transparent)}}.border-sky-300{border-color:var(--color-sky-300)}.border-sky-500{border-color:var(--color-sky-500)}.border-transparent{border-color:#0000}.border-white\/80{border-color:#fffc}@supports (color:color-mix(in lab, red, red)){.border-white\/80{border-color:color-mix(in oklab, var(--color-white) 80%, transparent)}}.border-zinc-100{border-color:var(--color-zinc-100)}.border-zinc-200{border-color:var(--color-zinc-200)}.border-zinc-300{border-color:var(--color-zinc-300)}.border-zinc-600{border-color:var(--color-zinc-600)}.border-zinc-900{border-color:var(--color-zinc-900)}.bg-amber-50{background-color:var(--color-amber-50)}.bg-amber-100{background-color:var(--color-amber-100)}.bg-amber-400{background-color:var(--color-amber-400)}.bg-amber-500\/10{background-color:#f99c001a}@supports (color:color-mix(in lab, red, red)){.bg-amber-500\/10{background-color:color-mix(in oklab, var(--color-amber-500) 10%, transparent)}}.bg-amber-500\/\[0\.08\]{background-color:#f99c0014}@supports (color:color-mix(in lab, red, red)){.bg-amber-500\/\[0\.08\]{background-color:color-mix(in oklab, var(--color-amber-500) 8%, transparent)}}.bg-amber-600{background-color:var(--color-amber-600)}.bg-black\/40{background-color:#0006}@supports (color:color-mix(in lab, red, red)){.bg-black\/40{background-color:color-mix(in oklab, var(--color-black) 40%, transparent)}}.bg-black\/45{background-color:#00000073}@supports (color:color-mix(in lab, red, red)){.bg-black\/45{background-color:color-mix(in oklab, var(--color-black) 45%, transparent)}}.bg-black\/90{background-color:#000000e6}@supports (color:color-mix(in lab, red, red)){.bg-black\/90{background-color:color-mix(in oklab, var(--color-black) 90%, transparent)}}.bg-emerald-50{background-color:var(--color-emerald-50)}.bg-emerald-500{background-color:var(--color-emerald-500)}.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-emerald-600{background-color:var(--color-emerald-600)}.bg-orange-100{background-color:var(--color-orange-100)}.bg-red-50{background-color:var(--color-red-50)}.bg-red-50\/60{background-color:#fef2f299}@supports (color:color-mix(in lab, red, red)){.bg-red-50\/60{background-color:color-mix(in oklab, var(--color-red-50) 60%, transparent)}}.bg-red-500{background-color:var(--color-red-500)}.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-sky-50{background-color:var(--color-sky-50)}.bg-sky-100{background-color:var(--color-sky-100)}.bg-sky-400{background-color:var(--color-sky-400)}.bg-sky-600{background-color:var(--color-sky-600)}.bg-violet-100{background-color:var(--color-violet-100)}.bg-violet-600{background-color:var(--color-violet-600)}.bg-white{background-color:var(--color-white)}.bg-white\/70{background-color:#ffffffb3}@supports (color:color-mix(in lab, red, red)){.bg-white\/70{background-color:color-mix(in oklab, var(--color-white) 70%, transparent)}}.bg-white\/95{background-color:#fffffff2}@supports (color:color-mix(in lab, red, red)){.bg-white\/95{background-color:color-mix(in oklab, var(--color-white) 95%, transparent)}}.bg-zinc-50{background-color:var(--color-zinc-50)}.bg-zinc-50\/90{background-color:#fafafae6}@supports (color:color-mix(in lab, red, red)){.bg-zinc-50\/90{background-color:color-mix(in oklab, var(--color-zinc-50) 90%, transparent)}}.bg-zinc-100{background-color:var(--color-zinc-100)}.bg-zinc-200{background-color:var(--color-zinc-200)}.bg-zinc-300{background-color:var(--color-zinc-300)}.bg-zinc-400{background-color:var(--color-zinc-400)}.bg-zinc-400\/50{background-color:#9f9fa980}@supports (color:color-mix(in lab, red, red)){.bg-zinc-400\/50{background-color:color-mix(in oklab, var(--color-zinc-400) 50%, transparent)}}.bg-zinc-900{background-color:var(--color-zinc-900)}.fill-red-500{fill:var(--color-red-500)}.stroke-none{stroke:none}.stroke-red-500{stroke:var(--color-red-500)}.object-cover{object-fit:cover}.p-1\.5{padding:calc(var(--spacing) * 1.5)}.p-2{padding:calc(var(--spacing) * 2)}.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)}.px-1{padding-inline:var(--spacing)}.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-3\.5{padding-inline:calc(var(--spacing) * 3.5)}.px-4{padding-inline:calc(var(--spacing) * 4)}.px-5{padding-inline:calc(var(--spacing) * 5)}.py-0\.5{padding-block:calc(var(--spacing) * .5)}.py-1{padding-block:var(--spacing)}.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-5{padding-block:calc(var(--spacing) * 5)}.py-6{padding-block:calc(var(--spacing) * 6)}.py-8{padding-block:calc(var(--spacing) * 8)}.py-10{padding-block:calc(var(--spacing) * 10)}.py-14{padding-block:calc(var(--spacing) * 14)}.py-px{padding-block:1px}.pt-1\.5{padding-top:calc(var(--spacing) * 1.5)}.pt-2{padding-top:calc(var(--spacing) * 2)}.pt-2\.5{padding-top:calc(var(--spacing) * 2.5)}.pt-3{padding-top:calc(var(--spacing) * 3)}.pt-4{padding-top:calc(var(--spacing) * 4)}.pt-6{padding-top:calc(var(--spacing) * 6)}.pt-8{padding-top:calc(var(--spacing) * 8)}.pt-\[max\(0\.75rem\,env\(safe-area-inset-top\)\)\]{padding-top:max(.75rem, env(safe-area-inset-top))}.pt-\[max\(1rem\,env\(safe-area-inset-top\)\)\]{padding-top:max(1rem, env(safe-area-inset-top))}.pr-2{padding-right:calc(var(--spacing) * 2)}.pr-12{padding-right:calc(var(--spacing) * 12)}.pb-0\.5{padding-bottom:calc(var(--spacing) * .5)}.pb-1{padding-bottom:var(--spacing)}.pb-3{padding-bottom:calc(var(--spacing) * 3)}.pb-4{padding-bottom:calc(var(--spacing) * 4)}.pb-6{padding-bottom:calc(var(--spacing) * 6)}.pb-10{padding-bottom:calc(var(--spacing) * 10)}.pb-16{padding-bottom:calc(var(--spacing) * 16)}.pb-\[max\(0\.75rem\,env\(safe-area-inset-bottom\)\)\]{padding-bottom:max(.75rem, env(safe-area-inset-bottom))}.pb-\[max\(1rem\,env\(safe-area-inset-bottom\)\)\]{padding-bottom:max(1rem, env(safe-area-inset-bottom))}.pl-3{padding-left:calc(var(--spacing) * 3)}.pl-5{padding-left:calc(var(--spacing) * 5)}.pl-\[26px\]{padding-left:26px}.text-center{text-align:center}.text-left{text-align:left}.align-top{vertical-align:top}.font-mono{font-family:var(--font-mono)}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--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-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\[0\.6rem\]{font-size:.6rem}.text-\[0\.7rem\]{font-size:.7rem}.text-\[0\.8rem\]{font-size:.8rem}.text-\[0\.54rem\]{font-size:.54rem}.text-\[0\.56rem\]{font-size:.56rem}.text-\[0\.58rem\]{font-size:.58rem}.text-\[0\.64rem\]{font-size:.64rem}.text-\[0\.65rem\]{font-size:.65rem}.text-\[0\.68rem\]{font-size:.68rem}.text-\[0\.72rem\]{font-size:.72rem}.text-\[0\.78rem\]{font-size:.78rem}.text-\[0\.82rem\]{font-size:.82rem}.text-\[0\.85em\]{font-size:.85em}.text-\[0\.92rem\]{font-size:.92rem}.text-\[0\.95rem\]{font-size:.95rem}.text-\[1\.0625rem\]{font-size:1.0625rem}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.leading-snug{--tw-leading:var(--leading-snug);line-height:var(--leading-snug)}.leading-tight{--tw-leading:var(--leading-tight);line-height:var(--leading-tight)}.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-tight{--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.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)}.text-balance{text-wrap:balance}.break-words{overflow-wrap:break-word}.break-all{word-break:break-all}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.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-amber-700\/70{color:#b75000b3}@supports (color:color-mix(in lab, red, red)){.text-amber-700\/70{color:color-mix(in oklab, var(--color-amber-700) 70%, transparent)}}.text-amber-800{color:var(--color-amber-800)}.text-blue-600{color:var(--color-blue-600)}.text-emerald-500{color:var(--color-emerald-500)}.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-orange-800{color:var(--color-orange-800)}.text-red-500{color:var(--color-red-500)}.text-red-600{color:var(--color-red-600)}.text-red-600\/70{color:#e40014b3}@supports (color:color-mix(in lab, red, red)){.text-red-600\/70{color:color-mix(in oklab, var(--color-red-600) 70%, transparent)}}.text-red-700{color:var(--color-red-700)}.text-red-800{color:var(--color-red-800)}.text-sky-600{color:var(--color-sky-600)}.text-sky-700{color:var(--color-sky-700)}.text-sky-800{color:var(--color-sky-800)}.text-violet-500{color:var(--color-violet-500)}.text-violet-600{color:var(--color-violet-600)}.text-violet-800{color:var(--color-violet-800)}.text-white{color:var(--color-white)}.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,)}.underline{text-decoration-line:underline}.underline-offset-2{text-underline-offset:2px}.accent-red-600{accent-color:var(--color-red-600)}.accent-sky-600{accent-color:var(--color-sky-600)}.opacity-0{opacity:0}.opacity-30{opacity:.3}.opacity-45{opacity:.45}.opacity-70{opacity:.7}.opacity-85{opacity:.85}.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-sm{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-xl{--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000001a), 0 8px 10px -6px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ring,.ring-1{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ring-2{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-zinc-900\/5{--tw-shadow-color:#18181b0d}@supports (color:color-mix(in lab, red, red)){.shadow-zinc-900\/5{--tw-shadow-color:color-mix(in oklab, color-mix(in oklab, var(--color-zinc-900) 5%, transparent) var(--tw-shadow-alpha), transparent)}}.ring-sky-500{--tw-ring-color:var(--color-sky-500)}.ring-offset-2{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color)}.ring-offset-zinc-50{--tw-ring-offset-color:var(--color-zinc-50)}.filter{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.backdrop-blur{--tw-backdrop-blur:blur(8px);-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,)}.backdrop-blur-\[2px\]{--tw-backdrop-blur:blur(2px);-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-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-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.outline-none{--tw-outline-style:none;outline-style:none}@media (hover:hover){.group-hover\:text-zinc-700:is(:where(.group):hover *){color:var(--color-zinc-700)}.hover\:border-red-400:hover{border-color:var(--color-red-400)}.hover\:border-sky-300:hover{border-color:var(--color-sky-300)}.hover\:border-zinc-300:hover{border-color:var(--color-zinc-300)}.hover\:border-zinc-400:hover{border-color:var(--color-zinc-400)}.hover\:bg-emerald-500:hover{background-color:var(--color-emerald-500)}.hover\:bg-red-50:hover{background-color:var(--color-red-50)}.hover\:bg-red-100:hover{background-color:var(--color-red-100)}.hover\:bg-red-600:hover{background-color:var(--color-red-600)}.hover\:bg-red-700:hover{background-color:var(--color-red-700)}.hover\:bg-white:hover{background-color:var(--color-white)}.hover\:bg-zinc-50:hover{background-color:var(--color-zinc-50)}.hover\:bg-zinc-100:hover{background-color:var(--color-zinc-100)}.hover\:bg-zinc-700:hover{background-color:var(--color-zinc-700)}.hover\:text-amber-900:hover{color:var(--color-amber-900)}.hover\:text-red-600:hover{color:var(--color-red-600)}.hover\:text-zinc-700:hover{color:var(--color-zinc-700)}.hover\:text-zinc-900:hover{color:var(--color-zinc-900)}.hover\:underline:hover{text-decoration-line:underline}.hover\:opacity-70:hover{opacity:.7}.hover\:opacity-100:hover{opacity:1}.hover\:shadow-md:hover{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a), 0 2px 4px -2px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}}.focus\:border-sky-500:focus{border-color:var(--color-sky-500)}.focus\:border-zinc-400:focus{border-color:var(--color-zinc-400)}.focus\:border-zinc-500:focus{border-color:var(--color-zinc-500)}.focus\:opacity-100:focus{opacity:1}.active\:bg-zinc-100:active{background-color:var(--color-zinc-100)}.disabled\:cursor-default:disabled{cursor:default}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-40:disabled{opacity:.4}.disabled\:opacity-50:disabled{opacity:.5}.disabled\:opacity-60:disabled{opacity:.6}@media (width>=40rem){.sm\:absolute{position:absolute}.sm\:right-0{right:0}.sm\:bottom-0{bottom:0}.sm\:-mx-6{margin-inline:calc(var(--spacing) * -6)}.sm\:mt-0{margin-top:0}.sm\:ml-2{margin-left:calc(var(--spacing) * 2)}.sm\:block{display:block}.sm\:grid{display:grid}.sm\:hidden{display:none}.sm\:inline{display:inline}.sm\:inline-flex{display:inline-flex}.sm\:h-\[88vh\]{height:88vh}.sm\:w-\[34rem\]{width:34rem}.sm\:w-auto{width:auto}.sm\:max-w-6xl{max-width:var(--container-6xl)}.sm\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.sm\:grid-cols-\[8rem_minmax\(0\,1fr\)\]{grid-template-columns:8rem minmax(0,1fr)}.sm\:gap-3{gap:calc(var(--spacing) * 3)}.sm\:rounded-2xl{border-radius:var(--radius-2xl)}.sm\:border{border-style:var(--tw-border-style);border-width:1px}.sm\:border-l{border-left-style:var(--tw-border-style);border-left-width:1px}.sm\:border-zinc-200{border-color:var(--color-zinc-200)}.sm\:p-6{padding:calc(var(--spacing) * 6)}.sm\:px-6{padding-inline:calc(var(--spacing) * 6)}.sm\:py-1{padding-block:var(--spacing)}.sm\:pr-16{padding-right:calc(var(--spacing) * 16)}.sm\:pr-\[35\.5rem\]{padding-right:35.5rem}.sm\:pb-12{padding-bottom:calc(var(--spacing) * 12)}.sm\:text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.sm\:opacity-0{opacity:0}@media (hover:hover){.sm\:group-hover\:opacity-100:is(:where(.group):hover *){opacity:1}}}@media (width>=48rem){.md\:inline{display:inline}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.md\:grid-cols-\[0\.9fr_1\.1fr\]{grid-template-columns:.9fr 1.1fr}.md\:border-t-0{border-top-style:var(--tw-border-style);border-top-width:0}.md\:border-l{border-left-style:var(--tw-border-style);border-left-width:1px}.md\:text-5xl{font-size:var(--text-5xl);line-height:var(--tw-leading,var(--text-5xl--line-height))}}@media (width>=64rem){.lg\:grid-cols-\[1fr_1fr\]{grid-template-columns:1fr 1fr}.lg\:items-start{align-items:flex-start}}@container (width>=42rem){.\@2xl\:order-5{order:5}.\@2xl\:w-64{width:calc(var(--spacing) * 64)}.\@2xl\:w-72{width:calc(var(--spacing) * 72)}.\@2xl\:basis-auto{flex-basis:auto}.\@2xl\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}}@container (width>=64rem){.\@5xl\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}}:where(.dark\:divide-zinc-800:where(.dark,.dark *)>:not(:last-child)){border-color:var(--color-zinc-800)}.dark\:border-amber-500\/40:where(.dark,.dark *){border-color:#f99c0066}@supports (color:color-mix(in lab, red, red)){.dark\:border-amber-500\/40:where(.dark,.dark *){border-color:color-mix(in oklab, var(--color-amber-500) 40%, transparent)}}.dark\:border-emerald-500\/40:where(.dark,.dark *){border-color:#00bb7f66}@supports (color:color-mix(in lab, red, red)){.dark\:border-emerald-500\/40:where(.dark,.dark *){border-color:color-mix(in oklab, var(--color-emerald-500) 40%, transparent)}}.dark\:border-red-500\/30:where(.dark,.dark *){border-color:#fb2c364d}@supports (color:color-mix(in lab, red, red)){.dark\:border-red-500\/30:where(.dark,.dark *){border-color:color-mix(in oklab, var(--color-red-500) 30%, transparent)}}.dark\:border-red-500\/40:where(.dark,.dark *){border-color:#fb2c3666}@supports (color:color-mix(in lab, red, red)){.dark\:border-red-500\/40:where(.dark,.dark *){border-color:color-mix(in oklab, var(--color-red-500) 40%, transparent)}}.dark\:border-red-500\/50:where(.dark,.dark *){border-color:#fb2c3680}@supports (color:color-mix(in lab, red, red)){.dark\:border-red-500\/50:where(.dark,.dark *){border-color:color-mix(in oklab, var(--color-red-500) 50%, transparent)}}.dark\:border-sky-500\/40:where(.dark,.dark *){border-color:#00a5ef66}@supports (color:color-mix(in lab, red, red)){.dark\:border-sky-500\/40:where(.dark,.dark *){border-color:color-mix(in oklab, var(--color-sky-500) 40%, transparent)}}.dark\:border-zinc-100:where(.dark,.dark *){border-color:var(--color-zinc-100)}.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-\[\#0b0d12\]:where(.dark,.dark *){background-color:#0b0d12}.dark\:bg-\[\#0b0d12\]\/90:where(.dark,.dark *){background-color:oklab(15.9279% -.000392795 -.0111319/.9)}.dark\:bg-amber-500\/10:where(.dark,.dark *){background-color:#f99c001a}@supports (color:color-mix(in lab, red, red)){.dark\:bg-amber-500\/10:where(.dark,.dark *){background-color:color-mix(in oklab, var(--color-amber-500) 10%, transparent)}}.dark\:bg-amber-500\/15:where(.dark,.dark *){background-color:#f99c0026}@supports (color:color-mix(in lab, red, red)){.dark\:bg-amber-500\/15:where(.dark,.dark *){background-color:color-mix(in oklab, var(--color-amber-500) 15%, transparent)}}.dark\:bg-amber-500\/20:where(.dark,.dark *){background-color:#f99c0033}@supports (color:color-mix(in lab, red, red)){.dark\:bg-amber-500\/20:where(.dark,.dark *){background-color:color-mix(in oklab, var(--color-amber-500) 20%, transparent)}}.dark\:bg-black\/30:where(.dark,.dark *){background-color:#0000004d}@supports (color:color-mix(in lab, red, red)){.dark\:bg-black\/30:where(.dark,.dark *){background-color:color-mix(in oklab, var(--color-black) 30%, transparent)}}.dark\:bg-emerald-500\/10:where(.dark,.dark *){background-color:#00bb7f1a}@supports (color:color-mix(in lab, red, red)){.dark\:bg-emerald-500\/10:where(.dark,.dark *){background-color:color-mix(in oklab, var(--color-emerald-500) 10%, transparent)}}.dark\:bg-orange-500\/15:where(.dark,.dark *){background-color:#fe6e0026}@supports (color:color-mix(in lab, red, red)){.dark\:bg-orange-500\/15:where(.dark,.dark *){background-color:color-mix(in oklab, var(--color-orange-500) 15%, transparent)}}.dark\:bg-red-500\/10:where(.dark,.dark *){background-color:#fb2c361a}@supports (color:color-mix(in lab, red, red)){.dark\:bg-red-500\/10:where(.dark,.dark *){background-color:color-mix(in oklab, var(--color-red-500) 10%, transparent)}}.dark\:bg-sky-500\/10:where(.dark,.dark *){background-color:#00a5ef1a}@supports (color:color-mix(in lab, red, red)){.dark\:bg-sky-500\/10:where(.dark,.dark *){background-color:color-mix(in oklab, var(--color-sky-500) 10%, transparent)}}.dark\:bg-sky-500\/15:where(.dark,.dark *){background-color:#00a5ef26}@supports (color:color-mix(in lab, red, red)){.dark\:bg-sky-500\/15:where(.dark,.dark *){background-color:color-mix(in oklab, var(--color-sky-500) 15%, transparent)}}.dark\:bg-violet-500\/15:where(.dark,.dark *){background-color:#8d54ff26}@supports (color:color-mix(in lab, red, red)){.dark\:bg-violet-500\/15:where(.dark,.dark *){background-color:color-mix(in oklab, var(--color-violet-500) 15%, transparent)}}.dark\:bg-white:where(.dark,.dark *){background-color:var(--color-white)}.dark\:bg-zinc-100:where(.dark,.dark *){background-color:var(--color-zinc-100)}.dark\:bg-zinc-600:where(.dark,.dark *){background-color:var(--color-zinc-600)}.dark\:bg-zinc-700:where(.dark,.dark *){background-color:var(--color-zinc-700)}.dark\:bg-zinc-700\/50:where(.dark,.dark *){background-color:#3f3f4680}@supports (color:color-mix(in lab, red, red)){.dark\:bg-zinc-700\/50:where(.dark,.dark *){background-color:color-mix(in oklab, var(--color-zinc-700) 50%, transparent)}}.dark\:bg-zinc-800:where(.dark,.dark *){background-color:var(--color-zinc-800)}.dark\:bg-zinc-800\/60:where(.dark,.dark *){background-color:#27272a99}@supports (color:color-mix(in lab, red, red)){.dark\:bg-zinc-800\/60:where(.dark,.dark *){background-color:color-mix(in oklab, var(--color-zinc-800) 60%, transparent)}}.dark\:bg-zinc-900:where(.dark,.dark *){background-color:var(--color-zinc-900)}.dark\:bg-zinc-900\/70:where(.dark,.dark *){background-color:#18181bb3}@supports (color:color-mix(in lab, red, red)){.dark\:bg-zinc-900\/70:where(.dark,.dark *){background-color:color-mix(in oklab, var(--color-zinc-900) 70%, transparent)}}.dark\:bg-zinc-900\/95:where(.dark,.dark *){background-color:#18181bf2}@supports (color:color-mix(in lab, red, red)){.dark\:bg-zinc-900\/95:where(.dark,.dark *){background-color:color-mix(in oklab, var(--color-zinc-900) 95%, transparent)}}.dark\:bg-zinc-950:where(.dark,.dark *){background-color:var(--color-zinc-950)}.dark\:text-amber-200:where(.dark,.dark *){color:var(--color-amber-200)}.dark\:text-amber-300:where(.dark,.dark *){color:var(--color-amber-300)}.dark\:text-amber-300\/70:where(.dark,.dark *){color:#ffd236b3}@supports (color:color-mix(in lab, red, red)){.dark\:text-amber-300\/70:where(.dark,.dark *){color:color-mix(in oklab, var(--color-amber-300) 70%, transparent)}}.dark\:text-amber-400:where(.dark,.dark *){color:var(--color-amber-400)}.dark\:text-emerald-300:where(.dark,.dark *){color:var(--color-emerald-300)}.dark\:text-emerald-400:where(.dark,.dark *){color:var(--color-emerald-400)}.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-300\/70:where(.dark,.dark *){color:#ffa3a3b3}@supports (color:color-mix(in lab, red, red)){.dark\:text-red-300\/70:where(.dark,.dark *){color:color-mix(in oklab, var(--color-red-300) 70%, transparent)}}.dark\:text-red-400:where(.dark,.dark *){color:var(--color-red-400)}.dark\:text-sky-300:where(.dark,.dark *){color:var(--color-sky-300)}.dark\:text-sky-400:where(.dark,.dark *){color:var(--color-sky-400)}.dark\:text-violet-300:where(.dark,.dark *){color:var(--color-violet-300)}.dark\:text-violet-400:where(.dark,.dark *){color:var(--color-violet-400)}.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-500:where(.dark,.dark *){color:var(--color-zinc-500)}.dark\:text-zinc-900:where(.dark,.dark *){color:var(--color-zinc-900)}.dark\:ring-offset-\[\#0b0d12\]:where(.dark,.dark *){--tw-ring-offset-color:#0b0d12}@media (hover:hover){.dark\:group-hover\:text-zinc-200:where(.dark,.dark *):is(:where(.group):hover *){color:var(--color-zinc-200)}.dark\:hover\:border-sky-700:where(.dark,.dark *):hover{border-color:var(--color-sky-700)}.dark\:hover\:border-zinc-500:where(.dark,.dark *):hover{border-color:var(--color-zinc-500)}.dark\:hover\:border-zinc-600:where(.dark,.dark *):hover{border-color:var(--color-zinc-600)}.dark\:hover\:bg-red-500\/10:where(.dark,.dark *):hover{background-color:#fb2c361a}@supports (color:color-mix(in lab, red, red)){.dark\:hover\:bg-red-500\/10:where(.dark,.dark *):hover{background-color:color-mix(in oklab, var(--color-red-500) 10%, transparent)}}.dark\:hover\:bg-white:where(.dark,.dark *):hover{background-color:var(--color-white)}.dark\:hover\:bg-zinc-800:where(.dark,.dark *):hover{background-color:var(--color-zinc-800)}.dark\:hover\:bg-zinc-900:where(.dark,.dark *):hover{background-color:var(--color-zinc-900)}.dark\:hover\:text-amber-100:where(.dark,.dark *):hover{color:var(--color-amber-100)}.dark\:hover\:text-zinc-100:where(.dark,.dark *):hover{color:var(--color-zinc-100)}.dark\:hover\:text-zinc-200:where(.dark,.dark *):hover{color:var(--color-zinc-200)}}.dark\:focus\:border-zinc-600:where(.dark,.dark *):focus{border-color:var(--color-zinc-600)}.dark\:active\:bg-zinc-800:where(.dark,.dark *):active{background-color:var(--color-zinc-800)}@media (width>=40rem){.sm\:dark\:border-zinc-800:where(.dark,.dark *){border-color:var(--color-zinc-800)}}}:root{--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}:lang(ko){word-break:keep-all;overflow-wrap:anywhere}html,body{background-color:var(--color-zinc-50);color:var(--color-zinc-900)}:is(html,body):where(.dark,.dark *){color:var(--color-zinc-100);background-color:#0b0d12}body{padding-top:env(safe-area-inset-top);padding-bottom:env(safe-area-inset-bottom)}@keyframes pulse-ring{0%{box-shadow:0 0 #f8717173}70%{box-shadow:0 0 0 8px #f8717100}to{box-shadow:0 0 #f8717100}}.pulse-ring{animation:2s infinite pulse-ring}@keyframes bitl-spin{to{transform:rotate(360deg)}}.bitl-spin{transform-origin:32px 32px;animation:1.5s linear infinite bitl-spin}@media (prefers-reduced-motion:reduce){.bitl-spin{animation:none}}button:not(:disabled),[role=button]:not(:disabled){cursor:pointer}@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-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}