@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.
- package/adapters/dist/core.mjs +86 -17
- package/dist/chunks/{chunk-ERXNJMQT.mjs → chunk-RIX6JB6S.mjs} +8 -4
- package/dist/chunks/{src-4IUSQVOL.mjs → src-WI4MJOSQ.mjs} +67 -20
- package/dist/cli.mjs +4 -4
- package/package.json +1 -1
- package/web/assets/index-BRI9Dc0z.css +2 -0
- package/web/assets/index-Cry_RPpK.js +9 -0
- package/web/index.html +2 -2
- package/web/sw.js +1 -1
- package/web/assets/index-DTnW4H6T.js +0 -9
- package/web/assets/index-P_OV048r.css +0 -2
package/adapters/dist/core.mjs
CHANGED
|
@@ -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,
|
|
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.
|
|
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
|
|
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
|
|
496
|
-
|
|
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
|
|
513
|
-
const text = await
|
|
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() ||
|
|
594
|
+
async function codexThreadName(threadId, codexHome = process.env.CODEX_HOME?.trim() || join4(homedir2(), ".codex")) {
|
|
531
595
|
try {
|
|
532
|
-
const file =
|
|
533
|
-
if ((await
|
|
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
|
|
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 =
|
|
624
|
+
async function antigravityTitle(conversationId, dbPath = join4(homedir2(), ".gemini", "antigravity-cli", "conversation_summaries.db")) {
|
|
561
625
|
try {
|
|
562
|
-
await
|
|
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
|
|
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.
|
|
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.
|
|
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/
|
|
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-
|
|
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
|
-
|
|
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(
|
|
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
|
|
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
|
|
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
|
|
9314
|
-
if (only && !only.has(key)) continue;
|
|
9315
|
-
|
|
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.
|
|
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-
|
|
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.
|
|
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-
|
|
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.
|
|
634
|
+
console.log("0.1.14");
|
|
635
635
|
return;
|
|
636
636
|
case "remote":
|
|
637
637
|
case "away":
|
package/package.json
CHANGED
|
@@ -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}
|