esedre 0.1.6 → 0.1.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md
CHANGED
|
@@ -137,12 +137,32 @@ Commands for repository onboarding, central machine linking, and maintenance:
|
|
|
137
137
|
|
|
138
138
|
| Command | Usage | Description |
|
|
139
139
|
|---|---|---|
|
|
140
|
-
| `init` | `ese init [<path>] [--project <code>] [--name <name>] [--hub] [-y]` | Bring a project repository online
|
|
141
|
-
| `configure` | `ese configure [add <path> \| remove <
|
|
140
|
+
| `init` | `ese init [<path>] [--project <code>] [--name <name>] [--hub <name\|path>] [-y]` | Bring a project repository online, bootstrap a dedicated data hub (`--hub`), or create a project directly in a data hub (`--project <code>`). |
|
|
141
|
+
| `configure` | `ese configure [add <path> \| remove <code\|path> \| set <k> <v>]` | Inspect or mutate central configuration (`~/.esedre/config.json`). Link external project repositories or data hubs. |
|
|
142
142
|
| `upgrade` | `ese upgrade [<path>] [--force \| -f]` | Upgrade workspace configuration schema, in-repo wrappers, and agent skills. |
|
|
143
143
|
|
|
144
144
|
> **Human vs LLM Agent Workflows**: Developer Administration commands (`init`, `configure`, `upgrade`) manage system-level repository linking and central machine configuration. They are intended for human developers during initial setup. Autonomous LLM coding partners operate within the authorized workspace scope using Roadmap and Service Daemon commands (`list`, `get`, `plan`, `create`, `update`, `comment`, `snapshot`, `start`, `status`).
|
|
145
145
|
|
|
146
|
+
#### Linking External Repositories vs Data Hub Projects
|
|
147
|
+
|
|
148
|
+
Esedre cleanly separates external repository linking from centralized data hub projects:
|
|
149
|
+
* **Link Existing Repositories (`ese configure add <repoPath>`)**: Registers an external code repository in your central `projects` map (`~/.esedre/config.json`) for federated multi-repo workflows.
|
|
150
|
+
* **Create Data Hub Projects (`ese init --project <code> [--name "<name>"] [--hub <hub>]`)**: Registers a non-development or standalone project directly inside your configured ticket data hub (`dataDir`). When multiple data hubs exist, pass `--hub <name|path>` to disambiguate.
|
|
151
|
+
|
|
152
|
+
#### Unique Project Codes Across Data Hubs
|
|
153
|
+
|
|
154
|
+
Project codes must be unique across all configured data hubs. Esedre does not support duplicate project codes across data hubs. If duplicate project codes are detected across multiple hubs:
|
|
155
|
+
* The storage engine loads only the first registered location.
|
|
156
|
+
* The CLI issues a warning notifying you of the collision (`⚠️ Warning: Duplicate project code '<CODE>' detected across multiple data hubs...`).
|
|
157
|
+
* Registering a new project that matches a code already present in another hub is rejected.
|
|
158
|
+
|
|
159
|
+
#### Case-Remembering Casing & Case-Insensitive Matching
|
|
160
|
+
|
|
161
|
+
Esedre follows a strict **case-remembering but case-insensitive on matches** design across all storage, CLI, MCP, and configuration layers:
|
|
162
|
+
* **Case-Remembering Storage**: Project codes preserve their original registered casing (e.g. `Personal`, `Esedre`, `Prof`) in directory names on disk (`projects/Personal/`) and in all metadata manifests (`project.json`, `meta.json`). Ticket metadata always records the canonical remembered casing. Re-registering or re-configuring a project preserves the existing remembered casing.
|
|
163
|
+
* **Case-Insensitive Lookups & Access**: All queries, CLI flags, MCP tool calls, ticket lookups (`ese get personal-1`, `ese get PERSONAL-1`, `ese get Personal-1`), and Agent Project Allow-List permissions (`allowedProjects`) match case-insensitively.
|
|
164
|
+
* **Cross-Platform Filesystem Normalization**: To prevent split directory fragmentation on case-sensitive filesystems (such as Linux ext4 or Docker), directory resolution matches existing parent directory entries case-insensitively, automatically reusing existing directory casing regardless of input variation.
|
|
165
|
+
|
|
146
166
|
---
|
|
147
167
|
|
|
148
168
|
## 🤖 Model Context Protocol (MCP) Setup
|
|
@@ -164,7 +184,7 @@ To connect Esedre to **Google Antigravity**, **Claude Code**, **Cursor**, or any
|
|
|
164
184
|
- `esedre_list_tickets`: List tickets with optional project, status, category, or search filter.
|
|
165
185
|
- `esedre_get_ticket`: Retrieve full specification, summary, comments, revision, and content hash (`sha1`).
|
|
166
186
|
- `esedre_get_plan` & `esedre_save_plan`: Inspect and update implementation plans with optimistic concurrency (`lastHash`).
|
|
167
|
-
- `esedre_create_ticket`: Mint new roadmap tickets with project code validation (up to
|
|
187
|
+
- `esedre_create_ticket`: Mint new roadmap tickets with project code validation (up to 8 chars).
|
|
168
188
|
- `esedre_update_ticket`: Modify status, title, complexity, or effort with optimistic concurrency (`lastHash`).
|
|
169
189
|
- `esedre_add_comment`: Append developer or LLM agent verification notes.
|
|
170
190
|
|
package/dist/esedre.mjs
CHANGED
|
@@ -9,7 +9,7 @@ import fs3 from "node:fs";
|
|
|
9
9
|
import path3 from "node:path";
|
|
10
10
|
|
|
11
11
|
// src/types.ts
|
|
12
|
-
var CURRENT_ESEDRE_VERSION = "0.1.
|
|
12
|
+
var CURRENT_ESEDRE_VERSION = "0.1.7";
|
|
13
13
|
var EsedreConflictError = class extends Error {
|
|
14
14
|
constructor(ticketId, currentHash, lastHash) {
|
|
15
15
|
super(
|
|
@@ -30,8 +30,8 @@ import fs from "node:fs";
|
|
|
30
30
|
import path from "node:path";
|
|
31
31
|
import os from "node:os";
|
|
32
32
|
var DEFAULT_ESEDRE_PORT = 5674;
|
|
33
|
-
var MAX_PROJECT_CODE_LENGTH =
|
|
34
|
-
var PROJECT_CODE_REGEX = /^[a-zA-Z0-9]{1,
|
|
33
|
+
var MAX_PROJECT_CODE_LENGTH = 8;
|
|
34
|
+
var PROJECT_CODE_REGEX = /^[a-zA-Z0-9]{1,8}$/;
|
|
35
35
|
var MAX_PROJECT_NAME_LENGTH = 48;
|
|
36
36
|
function resolvePorts(config, overrides) {
|
|
37
37
|
const globalConfig = readGlobalConfig();
|
|
@@ -244,9 +244,11 @@ function removeLocationFromGlobalConfig(identifier) {
|
|
|
244
244
|
if (current.dataDir) {
|
|
245
245
|
const currentDataDirs = Array.isArray(current.dataDir) ? current.dataDir : [current.dataDir];
|
|
246
246
|
const initialLen = currentDataDirs.length;
|
|
247
|
-
const remaining = currentDataDirs.filter(
|
|
248
|
-
|
|
249
|
-
|
|
247
|
+
const remaining = currentDataDirs.filter((d) => {
|
|
248
|
+
const matchPath = path.resolve(expandHome(d)).toLowerCase() === path.resolve(expandHome(trimmed)).toLowerCase();
|
|
249
|
+
const matchBasename = path.basename(d).toLowerCase() === trimmed.toLowerCase();
|
|
250
|
+
return !matchPath && !matchBasename;
|
|
251
|
+
});
|
|
250
252
|
if (remaining.length !== initialLen) {
|
|
251
253
|
current.dataDir = remaining.length === 0 ? void 0 : remaining.length === 1 ? remaining[0] : remaining;
|
|
252
254
|
writeGlobalConfig(current);
|
|
@@ -570,6 +572,11 @@ function writeSafeFile(filePath, content) {
|
|
|
570
572
|
var FilesystemStorageAdapter = class {
|
|
571
573
|
workspaceRoot;
|
|
572
574
|
config;
|
|
575
|
+
duplicateProjectWarnings = [];
|
|
576
|
+
getDuplicateProjectWarnings() {
|
|
577
|
+
this.resolveProjectLocations();
|
|
578
|
+
return [...this.duplicateProjectWarnings];
|
|
579
|
+
}
|
|
573
580
|
constructor(workspaceRoot, config) {
|
|
574
581
|
this.workspaceRoot = workspaceRoot || this.resolveWorkspaceRoot();
|
|
575
582
|
if (config) {
|
|
@@ -601,6 +608,8 @@ var FilesystemStorageAdapter = class {
|
|
|
601
608
|
resolveProjectLocations() {
|
|
602
609
|
const locations = [];
|
|
603
610
|
const seenCodes = /* @__PURE__ */ new Set();
|
|
611
|
+
const codeToSource = /* @__PURE__ */ new Map();
|
|
612
|
+
this.duplicateProjectWarnings = [];
|
|
604
613
|
const rawDataDirs = Array.isArray(this.config.dataDir) ? [...this.config.dataDir] : this.config.dataDir ? [this.config.dataDir] : [];
|
|
605
614
|
if (rawDataDirs.length === 0) {
|
|
606
615
|
const candidateHubDirs = [
|
|
@@ -672,14 +681,27 @@ var FilesystemStorageAdapter = class {
|
|
|
672
681
|
};
|
|
673
682
|
}
|
|
674
683
|
const codeKey = desc.code.toLowerCase();
|
|
684
|
+
const sourceName = resolvedHub;
|
|
675
685
|
if (!seenCodes.has(codeKey)) {
|
|
676
686
|
seenCodes.add(codeKey);
|
|
687
|
+
codeToSource.set(codeKey, sourceName);
|
|
677
688
|
locations.push({
|
|
678
689
|
project: desc,
|
|
679
690
|
ticketsDir: projectTicketsDir,
|
|
680
691
|
sourceType: "hub",
|
|
681
692
|
hubDir: resolvedHub
|
|
682
693
|
});
|
|
694
|
+
} else {
|
|
695
|
+
const firstSource = codeToSource.get(codeKey) || "configured location";
|
|
696
|
+
if (firstSource.toLowerCase() !== sourceName.toLowerCase()) {
|
|
697
|
+
if (!this.duplicateProjectWarnings.some((w) => w.code.toLowerCase() === codeKey && w.duplicateHub.toLowerCase() === sourceName.toLowerCase())) {
|
|
698
|
+
this.duplicateProjectWarnings.push({
|
|
699
|
+
code: desc.code,
|
|
700
|
+
firstHub: firstSource,
|
|
701
|
+
duplicateHub: sourceName
|
|
702
|
+
});
|
|
703
|
+
}
|
|
704
|
+
}
|
|
683
705
|
}
|
|
684
706
|
}
|
|
685
707
|
} else {
|
|
@@ -713,8 +735,10 @@ var FilesystemStorageAdapter = class {
|
|
|
713
735
|
const isShared = descs.length > 1;
|
|
714
736
|
for (const desc of descs) {
|
|
715
737
|
const codeKey = desc.code.toLowerCase();
|
|
738
|
+
const sourceName = resolvedHub;
|
|
716
739
|
if (!seenCodes.has(codeKey)) {
|
|
717
740
|
seenCodes.add(codeKey);
|
|
741
|
+
codeToSource.set(codeKey, sourceName);
|
|
718
742
|
locations.push({
|
|
719
743
|
project: desc,
|
|
720
744
|
ticketsDir: actualTicketsDir,
|
|
@@ -722,6 +746,17 @@ var FilesystemStorageAdapter = class {
|
|
|
722
746
|
hubDir: resolvedHub,
|
|
723
747
|
isSharedDir: isShared
|
|
724
748
|
});
|
|
749
|
+
} else {
|
|
750
|
+
const firstSource = codeToSource.get(codeKey) || "configured location";
|
|
751
|
+
if (firstSource.toLowerCase() !== sourceName.toLowerCase()) {
|
|
752
|
+
if (!this.duplicateProjectWarnings.some((w) => w.code.toLowerCase() === codeKey && w.duplicateHub.toLowerCase() === sourceName.toLowerCase())) {
|
|
753
|
+
this.duplicateProjectWarnings.push({
|
|
754
|
+
code: desc.code,
|
|
755
|
+
firstHub: firstSource,
|
|
756
|
+
duplicateHub: sourceName
|
|
757
|
+
});
|
|
758
|
+
}
|
|
759
|
+
}
|
|
725
760
|
}
|
|
726
761
|
}
|
|
727
762
|
}
|
|
@@ -765,13 +800,26 @@ var FilesystemStorageAdapter = class {
|
|
|
765
800
|
};
|
|
766
801
|
}
|
|
767
802
|
const codeKey = desc.code.toLowerCase();
|
|
803
|
+
const sourceName = projectDir;
|
|
768
804
|
if (!seenCodes.has(codeKey)) {
|
|
769
805
|
seenCodes.add(codeKey);
|
|
806
|
+
codeToSource.set(codeKey, sourceName);
|
|
770
807
|
locations.push({
|
|
771
808
|
project: desc,
|
|
772
809
|
ticketsDir: actualTicketsDir,
|
|
773
810
|
sourceType: "federated"
|
|
774
811
|
});
|
|
812
|
+
} else {
|
|
813
|
+
const firstSource = codeToSource.get(codeKey) || "configured location";
|
|
814
|
+
if (firstSource.toLowerCase() !== sourceName.toLowerCase()) {
|
|
815
|
+
if (!this.duplicateProjectWarnings.some((w) => w.code.toLowerCase() === codeKey && w.duplicateHub.toLowerCase() === sourceName.toLowerCase())) {
|
|
816
|
+
this.duplicateProjectWarnings.push({
|
|
817
|
+
code: desc.code,
|
|
818
|
+
firstHub: firstSource,
|
|
819
|
+
duplicateHub: sourceName
|
|
820
|
+
});
|
|
821
|
+
}
|
|
822
|
+
}
|
|
775
823
|
}
|
|
776
824
|
}
|
|
777
825
|
}
|
|
@@ -872,17 +920,91 @@ var FilesystemStorageAdapter = class {
|
|
|
872
920
|
}
|
|
873
921
|
}
|
|
874
922
|
}
|
|
875
|
-
|
|
923
|
+
const existingHubs = [];
|
|
876
924
|
for (const dDir of rawDataDirs) {
|
|
877
925
|
const resolved = path3.resolve(this.workspaceRoot, expandHome(dDir));
|
|
878
|
-
if (fs3.existsSync(resolved)) {
|
|
879
|
-
|
|
880
|
-
|
|
926
|
+
if (fs3.existsSync(resolved) && !existingHubs.includes(resolved)) {
|
|
927
|
+
existingHubs.push(resolved);
|
|
928
|
+
}
|
|
929
|
+
}
|
|
930
|
+
let targetHub = null;
|
|
931
|
+
if (input.hub) {
|
|
932
|
+
const targetQuery = input.hub.trim();
|
|
933
|
+
const resolvedQuery = path3.resolve(this.workspaceRoot, expandHome(targetQuery)).toLowerCase();
|
|
934
|
+
const isPathLike = targetQuery.includes("/") || targetQuery.includes("\\");
|
|
935
|
+
const basenameMatches = existingHubs.filter(
|
|
936
|
+
(h) => path3.basename(h).toLowerCase() === targetQuery.toLowerCase()
|
|
937
|
+
);
|
|
938
|
+
if (!isPathLike && basenameMatches.length > 1) {
|
|
939
|
+
const list = basenameMatches.map((h) => ` \u2022 ${h}`).join("\n");
|
|
940
|
+
throw new Error(
|
|
941
|
+
`Hub name collision: Multiple configured data hubs share basename "${targetQuery}". Please specify by unambiguous path:
|
|
942
|
+
${list}`
|
|
943
|
+
);
|
|
944
|
+
} else if (basenameMatches.length === 1 && !isPathLike) {
|
|
945
|
+
targetHub = basenameMatches[0];
|
|
946
|
+
} else {
|
|
947
|
+
const exactPathMatch = existingHubs.find((h) => h.toLowerCase() === resolvedQuery);
|
|
948
|
+
if (exactPathMatch) {
|
|
949
|
+
targetHub = exactPathMatch;
|
|
950
|
+
} else if (basenameMatches.length === 1) {
|
|
951
|
+
targetHub = basenameMatches[0];
|
|
952
|
+
} else {
|
|
953
|
+
const directHubPath = path3.resolve(this.workspaceRoot, expandHome(targetQuery));
|
|
954
|
+
if (fs3.existsSync(directHubPath) && (fs3.existsSync(path3.join(directHubPath, "projects")) || fs3.existsSync(path3.join(directHubPath, "projects.json")))) {
|
|
955
|
+
targetHub = directHubPath;
|
|
956
|
+
} else {
|
|
957
|
+
const available = existingHubs.map((h) => `${path3.basename(h)} (${h})`).join(", ");
|
|
958
|
+
throw new Error(
|
|
959
|
+
`Hub "${targetQuery}" not found. Configured data hubs: ${available || "(none)"}`
|
|
960
|
+
);
|
|
961
|
+
}
|
|
962
|
+
}
|
|
963
|
+
}
|
|
964
|
+
} else {
|
|
965
|
+
if (existingHubs.length === 1) {
|
|
966
|
+
targetHub = existingHubs[0];
|
|
967
|
+
} else if (existingHubs.length > 1) {
|
|
968
|
+
const basenames = existingHubs.map((h) => path3.basename(h));
|
|
969
|
+
const hasCollision = new Set(basenames.map((b) => b.toLowerCase())).size < basenames.length;
|
|
970
|
+
const formattedList = existingHubs.map((h) => ` \u2022 ${path3.basename(h)} (${h})`).join("\n");
|
|
971
|
+
throw new Error(
|
|
972
|
+
`Multiple data hubs configured. Please specify --hub <name${hasCollision ? "|path" : ""}>:
|
|
973
|
+
${formattedList}`
|
|
974
|
+
);
|
|
881
975
|
}
|
|
882
976
|
}
|
|
883
977
|
if (targetHub) {
|
|
978
|
+
const normalizedTargetHub = path3.resolve(targetHub).toLowerCase();
|
|
979
|
+
const existingLocations = this.resolveProjectLocations();
|
|
980
|
+
const existingConflict = existingLocations.find((l) => {
|
|
981
|
+
if (l.project.code.toLowerCase() !== slug) return false;
|
|
982
|
+
if (l.sourceType === "hub" && l.hubDir) {
|
|
983
|
+
return path3.resolve(l.hubDir).toLowerCase() !== normalizedTargetHub;
|
|
984
|
+
}
|
|
985
|
+
return false;
|
|
986
|
+
});
|
|
987
|
+
if (existingConflict && existingConflict.hubDir) {
|
|
988
|
+
const conflictLoc = path3.basename(existingConflict.hubDir);
|
|
989
|
+
throw new Error(
|
|
990
|
+
`Project code "${cleanCode}" already exists in another data hub (${conflictLoc}). Duplicate project codes across hubs are not supported.`
|
|
991
|
+
);
|
|
992
|
+
}
|
|
884
993
|
const hubProjectsDir = path3.join(targetHub, "projects");
|
|
885
|
-
|
|
994
|
+
let resolvedDirName = cleanCode;
|
|
995
|
+
if (fs3.existsSync(hubProjectsDir)) {
|
|
996
|
+
try {
|
|
997
|
+
const entries = fs3.readdirSync(hubProjectsDir, { withFileTypes: true });
|
|
998
|
+
const matchedDir = entries.find(
|
|
999
|
+
(e) => e.isDirectory() && e.name.toLowerCase() === slug
|
|
1000
|
+
);
|
|
1001
|
+
if (matchedDir) {
|
|
1002
|
+
resolvedDirName = matchedDir.name;
|
|
1003
|
+
}
|
|
1004
|
+
} catch {
|
|
1005
|
+
}
|
|
1006
|
+
}
|
|
1007
|
+
const projectDir = path3.join(hubProjectsDir, resolvedDirName);
|
|
886
1008
|
const ticketsDir2 = path3.join(projectDir, "tickets");
|
|
887
1009
|
if (!fs3.existsSync(ticketsDir2)) {
|
|
888
1010
|
fs3.mkdirSync(ticketsDir2, { recursive: true });
|
|
@@ -895,12 +1017,13 @@ var FilesystemStorageAdapter = class {
|
|
|
895
1017
|
} catch {
|
|
896
1018
|
}
|
|
897
1019
|
}
|
|
1020
|
+
const resolvedCode2 = existingPJson2?.code || resolvedDirName || cleanCode;
|
|
898
1021
|
const existingProjects = await this.getProjects();
|
|
899
1022
|
const maxId = existingProjects.reduce((max, p) => Math.max(max, p.id || 0), 0);
|
|
900
1023
|
const id2 = existingPJson2?.id || maxId + 1;
|
|
901
1024
|
const projectDesc2 = {
|
|
902
1025
|
id: id2,
|
|
903
|
-
code:
|
|
1026
|
+
code: resolvedCode2,
|
|
904
1027
|
slug,
|
|
905
1028
|
name: cleanName,
|
|
906
1029
|
description: cleanDesc,
|
|
@@ -936,10 +1059,11 @@ var FilesystemStorageAdapter = class {
|
|
|
936
1059
|
} catch {
|
|
937
1060
|
}
|
|
938
1061
|
}
|
|
1062
|
+
const resolvedCode = existingPJson?.code && existingPJson.code.toLowerCase() === slug ? existingPJson.code : cleanCode;
|
|
939
1063
|
const id = existingPJson?.id || 1;
|
|
940
1064
|
const projectDesc = {
|
|
941
1065
|
id,
|
|
942
|
-
code:
|
|
1066
|
+
code: resolvedCode,
|
|
943
1067
|
slug,
|
|
944
1068
|
name: cleanName,
|
|
945
1069
|
description: cleanDesc,
|
|
@@ -966,7 +1090,7 @@ var FilesystemStorageAdapter = class {
|
|
|
966
1090
|
const locations = this.resolveProjectLocations();
|
|
967
1091
|
if (locations.length === 0) return null;
|
|
968
1092
|
const strId = String(id).trim();
|
|
969
|
-
const prefixMatch = strId.match(/^([a-zA-Z0-9]{1,
|
|
1093
|
+
const prefixMatch = strId.match(/^([a-zA-Z0-9]{1,8})[-_:](\d+)$/i);
|
|
970
1094
|
if (prefixMatch) {
|
|
971
1095
|
const code = prefixMatch[1].toLowerCase();
|
|
972
1096
|
const num2 = parseInt(prefixMatch[2], 10);
|
|
@@ -1333,6 +1457,7 @@ ${input.summary || "Summary to be defined."}
|
|
|
1333
1457
|
...existing.meta,
|
|
1334
1458
|
...updates,
|
|
1335
1459
|
id: locInfo.id,
|
|
1460
|
+
project: locInfo.loc.project.code,
|
|
1336
1461
|
updatedAt: now,
|
|
1337
1462
|
completedAt,
|
|
1338
1463
|
revision
|
|
@@ -1433,6 +1558,9 @@ var SecurityFilter = class {
|
|
|
1433
1558
|
}
|
|
1434
1559
|
target;
|
|
1435
1560
|
config;
|
|
1561
|
+
getDuplicateProjectWarnings() {
|
|
1562
|
+
return this.target.getDuplicateProjectWarnings ? this.target.getDuplicateProjectWarnings() : [];
|
|
1563
|
+
}
|
|
1436
1564
|
async getProjects() {
|
|
1437
1565
|
const projs = await this.target.getProjects();
|
|
1438
1566
|
if (!this.config.allowedProjects || this.config.allowedProjects.length === 0) {
|
|
@@ -3056,7 +3184,10 @@ function configureWorkspace(targetDir, options = {}) {
|
|
|
3056
3184
|
}
|
|
3057
3185
|
}
|
|
3058
3186
|
let config;
|
|
3059
|
-
|
|
3187
|
+
let projectCode = options.projectCode || existingRaw?.projectCode;
|
|
3188
|
+
if (existingRaw?.projectCode && options.projectCode && existingRaw.projectCode.toLowerCase() === options.projectCode.toLowerCase()) {
|
|
3189
|
+
projectCode = existingRaw.projectCode;
|
|
3190
|
+
}
|
|
3060
3191
|
const projectName = options.projectName || existingRaw?.projectName || (projectCode ? projectCode : void 0);
|
|
3061
3192
|
const dataDir = options.dataDir !== void 0 ? options.dataDir : existingRaw?.dataDir;
|
|
3062
3193
|
if (existingRaw) {
|
|
@@ -3334,7 +3465,7 @@ function createApiHandler(storage, workspaceRoot) {
|
|
|
3334
3465
|
}
|
|
3335
3466
|
if (pathname.startsWith("/api/planning/ticket/")) {
|
|
3336
3467
|
const idStr = pathname.slice("/api/planning/ticket/".length);
|
|
3337
|
-
if (!idStr || !/^([a-zA-Z0-9]{1,
|
|
3468
|
+
if (!idStr || !/^([a-zA-Z0-9]{1,8}-)?\d+$/.test(idStr)) {
|
|
3338
3469
|
sendJson(res, 400, { error: "Invalid ticket ID" });
|
|
3339
3470
|
return true;
|
|
3340
3471
|
}
|
|
@@ -3476,7 +3607,7 @@ function createApiHandler(storage, workspaceRoot) {
|
|
|
3476
3607
|
return true;
|
|
3477
3608
|
}
|
|
3478
3609
|
if (pathname === "/api/planning/create-project") {
|
|
3479
|
-
const { code, name, description, colors: colors2 } = body;
|
|
3610
|
+
const { code, name, description, colors: colors2, hub } = body;
|
|
3480
3611
|
if (!code || !name) {
|
|
3481
3612
|
sendJson(res, 400, { error: "Both code and name are required to register a project." });
|
|
3482
3613
|
return true;
|
|
@@ -3496,7 +3627,8 @@ function createApiHandler(storage, workspaceRoot) {
|
|
|
3496
3627
|
code,
|
|
3497
3628
|
name,
|
|
3498
3629
|
description,
|
|
3499
|
-
colors: colors2
|
|
3630
|
+
colors: colors2,
|
|
3631
|
+
hub
|
|
3500
3632
|
});
|
|
3501
3633
|
sendJson(res, 201, project);
|
|
3502
3634
|
return true;
|
|
@@ -3744,12 +3876,14 @@ ${colors.bold}SERVICE DAEMON COMMANDS:${colors.reset}
|
|
|
3744
3876
|
${colors.bold}mcp${colors.reset} Start the Model Context Protocol (MCP) JSON-RPC 2.0 stdio server for autonomous LLM coding agents.
|
|
3745
3877
|
|
|
3746
3878
|
${colors.bold}DEVELOPER ADMINISTRATION (Human Setup & Configuration):${colors.reset}
|
|
3747
|
-
${colors.bold}init${colors.reset} [<path>] [--project <code>] [-n|--name <name>] [--allow <c1,c2>] [--port <n>] [
|
|
3748
|
-
Bring a project repository online (.esedre footprint, wrappers, snapshot)
|
|
3879
|
+
${colors.bold}init${colors.reset} [<path>] [--project <code>] [-n|--name <name>] [--hub <name|path>] [--allow <c1,c2>] [--port <n>] [-y|--yes] [--json]
|
|
3880
|
+
Bring a project repository online (.esedre footprint, wrappers, snapshot), bootstrap a data hub (--hub), or register a project directly into an Esedre ticket data hub (--project <code>).
|
|
3881
|
+
\u2022 In-repo workspace: ese init (creates .esedre/esedre.json in current directory)
|
|
3882
|
+
\u2022 Data hub project: ese init --project <code> --name "<name>" (creates project in configured dataDir hub)
|
|
3749
3883
|
|
|
3750
3884
|
${colors.bold}configure${colors.reset} [add <path> | remove <code|path> | set <key> <val> | get <key>] [--json]
|
|
3751
3885
|
Inspect or mutate central Esedre configuration (~/.esedre/config.json).
|
|
3752
|
-
\u2022 add <path>
|
|
3886
|
+
\u2022 add <path> Link an external project repository (federated projects map) or register a data hub (dataDir)
|
|
3753
3887
|
\u2022 remove <target> Unlink a project or data hub
|
|
3754
3888
|
\u2022 set <key> <val> Update a central configuration setting
|
|
3755
3889
|
|
|
@@ -3829,6 +3963,15 @@ function parseArgs(rawArgs) {
|
|
|
3829
3963
|
if (flags["f"] && !flags["foreground"]) flags["foreground"] = flags["f"];
|
|
3830
3964
|
return { command, positionals, flags };
|
|
3831
3965
|
}
|
|
3966
|
+
function printDuplicateProjectWarnings(storage, isJson) {
|
|
3967
|
+
if (isJson) return;
|
|
3968
|
+
const warnings = storage.getDuplicateProjectWarnings ? storage.getDuplicateProjectWarnings() : [];
|
|
3969
|
+
for (const warn of warnings) {
|
|
3970
|
+
console.error(
|
|
3971
|
+
`${colors.yellow}\u26A0\uFE0F Warning: Duplicate project code '${warn.code}' detected across multiple data hubs (${path9.basename(warn.firstHub)} and ${path9.basename(warn.duplicateHub)}). Duplicate project codes across hubs are not supported; only '${path9.basename(warn.firstHub)}' is active.${colors.reset}`
|
|
3972
|
+
);
|
|
3973
|
+
}
|
|
3974
|
+
}
|
|
3832
3975
|
async function main() {
|
|
3833
3976
|
const rawArgs = process.argv.slice(2);
|
|
3834
3977
|
const { command, positionals, flags } = parseArgs(rawArgs);
|
|
@@ -3855,9 +3998,12 @@ async function main() {
|
|
|
3855
3998
|
try {
|
|
3856
3999
|
switch (command) {
|
|
3857
4000
|
case "init": {
|
|
3858
|
-
const
|
|
3859
|
-
const
|
|
3860
|
-
|
|
4001
|
+
const rawTarget = positionals[0];
|
|
4002
|
+
const targetDir = rawTarget ? path9.resolve(rawTarget) : discovered.workspaceRoot;
|
|
4003
|
+
const rawHubFlag = flags["hub"];
|
|
4004
|
+
const hubArg = typeof rawHubFlag === "string" ? rawHubFlag : void 0;
|
|
4005
|
+
const isHubRequested = Boolean(rawHubFlag);
|
|
4006
|
+
if (isHubRequested && !flags["project"] && !flags["p"]) {
|
|
3861
4007
|
const hubRes = initHub(targetDir);
|
|
3862
4008
|
try {
|
|
3863
4009
|
addLocationToGlobalConfig(targetDir);
|
|
@@ -3932,26 +4078,66 @@ ${colors.bold}Next Steps:${colors.reset}`);
|
|
|
3932
4078
|
console.error(`${colors.red}Error: ${nameVal.error}${colors.reset}`);
|
|
3933
4079
|
process.exit(1);
|
|
3934
4080
|
}
|
|
3935
|
-
const
|
|
3936
|
-
const
|
|
3937
|
-
(p) => p.code.toLowerCase() === projectCode.toLowerCase()
|
|
3938
|
-
);
|
|
4081
|
+
const isTargetHub = fs9.existsSync(path9.join(targetDir, "projects.json")) || fs9.existsSync(path9.join(targetDir, "projects")) && !fs9.existsSync(path9.join(targetDir, ".esedre", "esedre.json"));
|
|
4082
|
+
const isWorkspaceless = isHubRequested || isTargetHub || Boolean(discovered.config?.projectCode) && !rawTarget && discovered.config?.projectCode?.toLowerCase() !== projectCode.toLowerCase();
|
|
3939
4083
|
let projectNewlyRegistered = false;
|
|
3940
4084
|
let registeredProj;
|
|
3941
|
-
|
|
3942
|
-
|
|
3943
|
-
|
|
3944
|
-
|
|
3945
|
-
|
|
3946
|
-
|
|
3947
|
-
} else {
|
|
3948
|
-
registeredProj = existing;
|
|
3949
|
-
if (flags["name"] || flags["n"]) {
|
|
4085
|
+
try {
|
|
4086
|
+
const existingProjects = await storage.getProjects();
|
|
4087
|
+
const existing = existingProjects.find(
|
|
4088
|
+
(p) => p.code.toLowerCase() === projectCode.toLowerCase()
|
|
4089
|
+
);
|
|
4090
|
+
if (!existing) {
|
|
3950
4091
|
registeredProj = await rawStorage.registerProject({
|
|
3951
4092
|
code: projectCode,
|
|
3952
|
-
name: projectName
|
|
4093
|
+
name: projectName,
|
|
4094
|
+
hub: hubArg
|
|
3953
4095
|
});
|
|
4096
|
+
projectNewlyRegistered = true;
|
|
4097
|
+
} else {
|
|
4098
|
+
registeredProj = existing;
|
|
4099
|
+
if (flags["name"] || flags["n"]) {
|
|
4100
|
+
registeredProj = await rawStorage.registerProject({
|
|
4101
|
+
code: projectCode,
|
|
4102
|
+
name: projectName,
|
|
4103
|
+
hub: hubArg
|
|
4104
|
+
});
|
|
4105
|
+
}
|
|
3954
4106
|
}
|
|
4107
|
+
} catch (err) {
|
|
4108
|
+
console.error(`${colors.red}Error: ${err.message}${colors.reset}`);
|
|
4109
|
+
process.exit(1);
|
|
4110
|
+
}
|
|
4111
|
+
if (isWorkspaceless) {
|
|
4112
|
+
if (isJson) {
|
|
4113
|
+
console.log(JSON.stringify({
|
|
4114
|
+
project: registeredProj,
|
|
4115
|
+
projectNewlyRegistered,
|
|
4116
|
+
registeredInHub: true,
|
|
4117
|
+
commands: {
|
|
4118
|
+
create: `ese create --title "..." --project ${registeredProj.code}`,
|
|
4119
|
+
list: `ese list --project ${registeredProj.code}`
|
|
4120
|
+
}
|
|
4121
|
+
}, null, 2));
|
|
4122
|
+
} else {
|
|
4123
|
+
if (projectNewlyRegistered) {
|
|
4124
|
+
console.log(`${colors.bold}${colors.green}\u2714 Registered project '${registeredProj.code}' (${registeredProj.name}) in Esedre data hub!${colors.reset}`);
|
|
4125
|
+
} else {
|
|
4126
|
+
console.log(`${colors.bold}${colors.green}\u2714 Verified project '${registeredProj.code}' (${registeredProj.name}) in Esedre data hub!${colors.reset}`);
|
|
4127
|
+
}
|
|
4128
|
+
console.log(` \u2022 Code: ${registeredProj.code}`);
|
|
4129
|
+
console.log(` \u2022 Name: ${registeredProj.name}`);
|
|
4130
|
+
if (registeredProj.description) {
|
|
4131
|
+
console.log(` \u2022 Description: ${registeredProj.description}`);
|
|
4132
|
+
}
|
|
4133
|
+
console.log(`
|
|
4134
|
+
${colors.bold}Next Steps:${colors.reset}`);
|
|
4135
|
+
console.log(` 1. Create your first ticket:`);
|
|
4136
|
+
console.log(` ${colors.cyan}ese create --title "First feature" --type Feature --project ${registeredProj.code}${colors.reset}`);
|
|
4137
|
+
console.log(` 2. Inspect roadmap & tickets:`);
|
|
4138
|
+
console.log(` ${colors.cyan}ese list --project ${registeredProj.code}${colors.reset}`);
|
|
4139
|
+
}
|
|
4140
|
+
return;
|
|
3955
4141
|
}
|
|
3956
4142
|
const allowedProjects = allowArg ? allowArg.split(",").map((s) => s.trim()) : discovered.config?.allowedProjects || [projectCode];
|
|
3957
4143
|
let setupProxy = void 0;
|
|
@@ -4186,10 +4372,12 @@ ${colors.bold}Linked Projects (projects):${colors.reset}`);
|
|
|
4186
4372
|
}
|
|
4187
4373
|
console.log(`
|
|
4188
4374
|
${colors.bold}Commands:${colors.reset}`);
|
|
4189
|
-
console.log(` \u2022 Link
|
|
4190
|
-
console.log(` \u2022
|
|
4191
|
-
console.log(` \u2022
|
|
4192
|
-
console.log(` \u2022
|
|
4375
|
+
console.log(` \u2022 Link external repository: ${colors.cyan}ese configure add <repoPath>${colors.reset}`);
|
|
4376
|
+
console.log(` \u2022 Register a data hub: ${colors.cyan}ese configure add <hubPath>${colors.reset}`);
|
|
4377
|
+
console.log(` \u2022 Create hub project: ${colors.cyan}ese init --project <code> --name "<name>"${colors.reset}`);
|
|
4378
|
+
console.log(` \u2022 Unlink a project or hub: ${colors.cyan}ese configure remove <code|path>${colors.reset}`);
|
|
4379
|
+
console.log(` \u2022 Set setting value: ${colors.cyan}ese configure set <key> <value>${colors.reset}`);
|
|
4380
|
+
console.log(` \u2022 Bring new repo online: ${colors.cyan}ese init [path]${colors.reset}`);
|
|
4193
4381
|
return;
|
|
4194
4382
|
}
|
|
4195
4383
|
case "upgrade": {
|
|
@@ -4247,6 +4435,7 @@ ${colors.bold}Commands:${colors.reset}`);
|
|
|
4247
4435
|
return;
|
|
4248
4436
|
}
|
|
4249
4437
|
case "start": {
|
|
4438
|
+
printDuplicateProjectWarnings(storage, isJson);
|
|
4250
4439
|
const flagPort = flags["port"] ? parseInt(String(flags["port"]), 10) : void 0;
|
|
4251
4440
|
const ports = resolvePorts(discovered.config, { port: flagPort });
|
|
4252
4441
|
const port = ports.gateway;
|
|
@@ -4291,6 +4480,7 @@ ${colors.dim}Shutting down Esedre cluster...${colors.reset}`);
|
|
|
4291
4480
|
return;
|
|
4292
4481
|
}
|
|
4293
4482
|
case "status": {
|
|
4483
|
+
printDuplicateProjectWarnings(storage, isJson);
|
|
4294
4484
|
const flagPort = flags["port"] ? parseInt(String(flags["port"]), 10) : void 0;
|
|
4295
4485
|
const port = resolvePorts(discovered.config, { port: flagPort }).gateway;
|
|
4296
4486
|
const status = await getDaemonStatus({ port, workspaceRoot: discovered.workspaceRoot });
|
|
@@ -4328,6 +4518,7 @@ ${colors.yellow}\u26A0\uFE0F Warning: Daemon is running v${status.version}, but
|
|
|
4328
4518
|
return;
|
|
4329
4519
|
}
|
|
4330
4520
|
case "projects": {
|
|
4521
|
+
printDuplicateProjectWarnings(storage, isJson);
|
|
4331
4522
|
const projects = await storage.getProjects();
|
|
4332
4523
|
if (isJson) {
|
|
4333
4524
|
console.log(JSON.stringify(projects, null, 2));
|
|
@@ -4340,6 +4531,7 @@ ${colors.yellow}\u26A0\uFE0F Warning: Daemon is running v${status.version}, but
|
|
|
4340
4531
|
return;
|
|
4341
4532
|
}
|
|
4342
4533
|
case "list": {
|
|
4534
|
+
printDuplicateProjectWarnings(storage, isJson);
|
|
4343
4535
|
const rawProject = flags["project"];
|
|
4344
4536
|
const project = rawProject === "all" ? void 0 : rawProject || discovered.config?.projectCode || void 0;
|
|
4345
4537
|
const status = flags["status"] || void 0;
|
|
@@ -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-space-y-reverse:0;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-duration:initial;--tw-content:""}}}@layer theme{:root,:host{--font-sans:-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--color-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-amber-950:oklch(27.9% .077 45.635);--color-emerald-50:oklch(97.9% .021 166.113);--color-emerald-100:oklch(95% .052 163.051);--color-emerald-200:oklch(90.5% .093 164.15);--color-emerald-300:oklch(84.5% .143 164.978);--color-emerald-400:oklch(76.5% .177 163.223);--color-emerald-500:oklch(69.6% .17 162.48);--color-emerald-600:oklch(59.6% .145 163.225);--color-emerald-700:oklch(50.8% .118 165.612);--color-emerald-800:oklch(43.2% .095 166.913);--color-emerald-900:oklch(37.8% .077 168.94);--color-emerald-950:oklch(26.2% .051 172.552);--color-teal-50:oklch(98.4% .014 180.72);--color-teal-100:oklch(95.3% .051 180.801);--color-teal-200:oklch(91% .096 180.426);--color-teal-300:oklch(85.5% .138 181.071);--color-teal-500:oklch(70.4% .14 182.503);--color-teal-800:oklch(43.7% .078 188.216);--color-teal-950:oklch(27.7% .046 192.524);--color-cyan-100:oklch(95.6% .045 203.388);--color-cyan-200:oklch(91.7% .08 205.041);--color-cyan-300:oklch(86.5% .127 207.078);--color-cyan-400:oklch(78.9% .154 211.53);--color-cyan-500:oklch(71.5% .143 215.221);--color-cyan-600:oklch(60.9% .126 221.723);--color-cyan-700:oklch(52% .105 223.128);--color-cyan-950:oklch(30.2% .056 229.695);--color-sky-50:oklch(97.7% .013 236.62);--color-sky-100:oklch(95.1% .026 236.824);--color-sky-200:oklch(90.1% .058 230.902);--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-sky-900:oklch(39.1% .09 240.876);--color-sky-950:oklch(29.3% .066 243.157);--color-blue-100:oklch(93.2% .032 255.585);--color-blue-200:oklch(88.2% .059 254.128);--color-blue-300:oklch(80.9% .105 251.813);--color-blue-500:oklch(62.3% .214 259.815);--color-blue-950:oklch(28.2% .091 267.935);--color-indigo-50:oklch(96.2% .018 272.314);--color-indigo-100:oklch(93% .034 272.788);--color-indigo-200:oklch(87% .065 274.039);--color-indigo-300:oklch(78.5% .115 274.713);--color-indigo-400:oklch(67.3% .182 276.935);--color-indigo-500:oklch(58.5% .233 277.117);--color-indigo-600:oklch(51.1% .262 276.966);--color-indigo-700:oklch(45.7% .24 277.023);--color-indigo-900:oklch(35.9% .144 278.697);--color-indigo-950:oklch(25.7% .09 281.288);--color-purple-50:oklch(97.7% .014 308.299);--color-purple-100:oklch(94.6% .033 307.174);--color-purple-200:oklch(90.2% .063 306.703);--color-purple-300:oklch(82.7% .119 306.383);--color-purple-400:oklch(71.4% .203 305.504);--color-purple-500:oklch(62.7% .265 303.9);--color-purple-600:oklch(55.8% .288 302.321);--color-purple-700:oklch(49.6% .265 301.924);--color-purple-800:oklch(43.8% .218 303.724);--color-purple-900:oklch(38.1% .176 304.987);--color-purple-950:oklch(29.1% .149 302.717);--color-fuchsia-50:oklch(97.7% .017 320.058);--color-fuchsia-300:oklch(83.3% .145 321.434);--color-fuchsia-400:oklch(74% .238 322.16);--color-fuchsia-500:oklch(66.7% .295 322.15);--color-fuchsia-600:oklch(59.1% .293 322.896);--color-fuchsia-950:oklch(29.3% .136 325.661);--color-rose-50:oklch(96.9% .015 12.422);--color-rose-100:oklch(94.1% .03 12.58);--color-rose-200:oklch(89.2% .058 10.001);--color-rose-300:oklch(81% .117 11.638);--color-rose-400:oklch(71.2% .194 13.428);--color-rose-500:oklch(64.5% .246 16.439);--color-rose-600:oklch(58.6% .253 17.585);--color-rose-700:oklch(51.4% .222 16.935);--color-rose-800:oklch(45.5% .188 13.697);--color-rose-900:oklch(41% .159 10.272);--color-rose-950:oklch(27.1% .105 12.094);--color-slate-100:oklch(96.8% .007 247.896);--color-slate-200:oklch(92.9% .013 255.508);--color-slate-300:oklch(86.9% .022 252.894);--color-slate-400:oklch(70.4% .04 256.788);--color-slate-500:oklch(55.4% .046 257.417);--color-slate-600:oklch(44.6% .043 257.281);--color-slate-700:oklch(37.2% .044 257.287);--color-slate-800:oklch(27.9% .041 260.031);--color-slate-900:oklch(20.8% .042 265.755);--color-slate-950:oklch(12.9% .042 264.695);--color-black:#000;--color-white:#fff;--spacing:.25rem;--container-md:28rem;--container-2xl:42rem;--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);--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--tracking-tight:-.025em;--tracking-wider:.05em;--leading-tight:1.25;--leading-relaxed:1.625;--radius-md:.375rem;--radius-lg:.5rem;--radius-xl:.75rem;--radius-2xl:1rem;--radius-3xl:1.5rem;--animate-pulse:pulse 2s cubic-bezier(.4, 0, .6, 1) infinite;--blur-md:12px;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring:where(:not(iframe)){outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab, red, red)){::placeholder{color:color-mix(in oklab, currentcolor 50%, transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.pointer-events-none{pointer-events:none}.visible{visibility:visible}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.sticky{position:sticky}.inset-0{inset:0}.top-1\/2{top:50%}.top-2\.5{top:calc(var(--spacing) * 2.5)}.right-2\.5{right:calc(var(--spacing) * 2.5)}.left-3{left:calc(var(--spacing) * 3)}.z-10{z-index:10}.z-50{z-index:50}.z-\[60\]{z-index:60}.z-\[70\]{z-index:70}.z-\[80\]{z-index:80}.z-\[90\]{z-index:90}.z-\[120\]{z-index:120}.container{width:100%}@media (width>=40rem){.container{max-width:40rem}}@media (width>=48rem){.container{max-width:48rem}}@media (width>=64rem){.container{max-width:64rem}}@media (width>=80rem){.container{max-width:80rem}}@media (width>=96rem){.container{max-width:96rem}}.mx-0\.5{margin-inline:calc(var(--spacing) * .5)}.mx-auto{margin-inline:auto}.my-1{margin-block:var(--spacing)}.my-1\.5{margin-block:calc(var(--spacing) * 1.5)}.my-2{margin-block:calc(var(--spacing) * 2)}.my-3{margin-block:calc(var(--spacing) * 3)}.mt-0\.5{margin-top:calc(var(--spacing) * .5)}.mt-1{margin-top:var(--spacing)}.mt-2{margin-top:calc(var(--spacing) * 2)}.mt-2\.5{margin-top:calc(var(--spacing) * 2.5)}.mt-3{margin-top:calc(var(--spacing) * 3)}.mb-0\.5{margin-bottom:calc(var(--spacing) * .5)}.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)}.ml-2{margin-left:calc(var(--spacing) * 2)}.ml-4{margin-left:calc(var(--spacing) * 4)}.block{display:block}.contents{display:contents}.flex{display:flex}.grid{display:grid}.hidden{display:none}.hidden\!{display:none!important}.inline{display:inline}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.table{display:table}.h-1\.5{height:calc(var(--spacing) * 1.5)}.h-2{height:calc(var(--spacing) * 2)}.h-3\.5{height:calc(var(--spacing) * 3.5)}.h-7{height:calc(var(--spacing) * 7)}.h-10{height:calc(var(--spacing) * 10)}.h-12{height:calc(var(--spacing) * 12)}.h-\[20px\]{height:20px}.h-\[92vh\]{height:92vh}.h-full{height:100%}.h-screen{height:100vh}.max-h-24{max-height:calc(var(--spacing) * 24)}.max-h-36{max-height:calc(var(--spacing) * 36)}.max-h-60{max-height:calc(var(--spacing) * 60)}.max-h-72{max-height:calc(var(--spacing) * 72)}.max-h-96{max-height:calc(var(--spacing) * 96)}.max-h-\[90vh\]{max-height:90vh}.min-h-0{min-height:0}.min-h-\[44px\]{min-height:44px}.w-1{width:var(--spacing)}.w-1\.5{width:calc(var(--spacing) * 1.5)}.w-2{width:calc(var(--spacing) * 2)}.w-3{width:calc(var(--spacing) * 3)}.w-3\.5{width:calc(var(--spacing) * 3.5)}.w-5{width:calc(var(--spacing) * 5)}.w-7{width:calc(var(--spacing) * 7)}.w-10{width:calc(var(--spacing) * 10)}.w-44{width:calc(var(--spacing) * 44)}.w-48{width:calc(var(--spacing) * 48)}.w-52{width:calc(var(--spacing) * 52)}.w-80{width:calc(var(--spacing) * 80)}.w-\[20px\]{width:20px}.w-\[56px\]{width:56px}.w-\[60px\]{width:60px}.w-\[84px\]{width:84px}.w-\[95vw\]{width:95vw}.w-\[112px\]{width:112px}.w-full{width:100%}.w-screen{width:100vw}.max-w-2xl{max-width:var(--container-2xl)}.max-w-\[140px\]{max-width:140px}.max-w-md{max-width:var(--container-md)}.min-w-0{min-width:0}.flex-1{flex:1}.shrink-0{flex-shrink:0}.border-collapse{border-collapse:collapse}.-translate-x-1\/2{--tw-translate-x:calc(calc(1 / 2 * 100%) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.-translate-y-1\/2{--tw-translate-y:calc(calc(1 / 2 * 100%) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.-translate-y-full{--tw-translate-y:-100%;translate:var(--tw-translate-x) var(--tw-translate-y)}.rotate-90{rotate:90deg}.animate-pulse{animation:var(--animate-pulse)}.cursor-default{cursor:default}.cursor-ew-resize{cursor:ew-resize}.cursor-grab{cursor:grab}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.resize{resize:both}.resize-y{resize:vertical}.scrollbar-none{scrollbar-width:none}.scrollbar-thin{scrollbar-width:thin}.list-inside{list-style-position:inside}.list-disc{list-style-type:disc}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.items-start{align-items:flex-start}.items-stretch{align-items:stretch}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.justify-start{justify-content:flex-start}.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)}:where(.space-y-0\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * .5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * .5) * calc(1 - var(--tw-space-y-reverse)))}: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-3>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 3) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 3) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-3\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 3.5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 3.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)))}:where(.space-y-5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 5) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-6>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 6) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 6) * calc(1 - var(--tw-space-y-reverse)))}.self-stretch{align-self:stretch}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.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-3xl{border-radius:var(--radius-3xl)}.rounded-full{border-radius:2147483647px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.rounded-xl{border-radius:var(--radius-xl)}.rounded-t-xl{border-top-left-radius:var(--radius-xl);border-top-right-radius:var(--radius-xl)}.rounded-r{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.rounded-r-lg{border-top-right-radius:var(--radius-lg);border-bottom-right-radius:var(--radius-lg)}.border{border-style:var(--tw-border-style);border-width:1px}.border-0{border-style:var(--tw-border-style);border-width:0}.border-x{border-inline-style:var(--tw-border-style);border-inline-width:1px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-l-2{border-left-style:var(--tw-border-style);border-left-width:2px}.border-dashed{--tw-border-style:dashed;border-style:dashed}.border-\[var\(--accent-border-subtle\)\]{border-color:var(--accent-border-subtle)}.border-\[var\(--accent-primary\)\]{border-color:var(--accent-primary)}.border-\[var\(--border-accent\)\]{border-color:var(--border-accent)}.border-\[var\(--border-strong\)\]{border-color:var(--border-strong)}.border-\[var\(--border-subtle\)\],.border-\[var\(--border-subtle\)\]\/80{border-color:var(--border-subtle)}@supports (color:color-mix(in lab, red, red)){.border-\[var\(--border-subtle\)\]\/80{border-color:color-mix(in oklab, var(--border-subtle) 80%, transparent)}}.border-amber-200{border-color:var(--color-amber-200)}.border-amber-300{border-color:var(--color-amber-300)}.border-amber-500\/30{border-color:#f99c004d}@supports (color:color-mix(in lab, red, red)){.border-amber-500\/30{border-color:color-mix(in oklab, var(--color-amber-500) 30%, transparent)}}.border-amber-500\/40{border-color:#f99c0066}@supports (color:color-mix(in lab, red, red)){.border-amber-500\/40{border-color:color-mix(in oklab, var(--color-amber-500) 40%, transparent)}}.border-blue-300{border-color:var(--color-blue-300)}.border-cyan-300{border-color:var(--color-cyan-300)}.border-cyan-500\/30{border-color:#00b7d74d}@supports (color:color-mix(in lab, red, red)){.border-cyan-500\/30{border-color:color-mix(in oklab, var(--color-cyan-500) 30%, transparent)}}.border-cyan-500\/40{border-color:#00b7d766}@supports (color:color-mix(in lab, red, red)){.border-cyan-500\/40{border-color:color-mix(in oklab, var(--color-cyan-500) 40%, transparent)}}.border-emerald-200{border-color:var(--color-emerald-200)}.border-emerald-300{border-color:var(--color-emerald-300)}.border-emerald-500{border-color:var(--color-emerald-500)}.border-emerald-500\/30{border-color:#00bb7f4d}@supports (color:color-mix(in lab, red, red)){.border-emerald-500\/30{border-color:color-mix(in oklab, var(--color-emerald-500) 30%, transparent)}}.border-emerald-500\/40{border-color:#00bb7f66}@supports (color:color-mix(in lab, red, red)){.border-emerald-500\/40{border-color:color-mix(in oklab, var(--color-emerald-500) 40%, transparent)}}.border-fuchsia-300{border-color:var(--color-fuchsia-300)}.border-fuchsia-500\/30{border-color:#e12afb4d}@supports (color:color-mix(in lab, red, red)){.border-fuchsia-500\/30{border-color:color-mix(in oklab, var(--color-fuchsia-500) 30%, transparent)}}.border-fuchsia-500\/40{border-color:#e12afb66}@supports (color:color-mix(in lab, red, red)){.border-fuchsia-500\/40{border-color:color-mix(in oklab, var(--color-fuchsia-500) 40%, transparent)}}.border-indigo-200{border-color:var(--color-indigo-200)}.border-indigo-300{border-color:var(--color-indigo-300)}.border-indigo-400{border-color:var(--color-indigo-400)}.border-indigo-500\/30{border-color:#625fff4d}@supports (color:color-mix(in lab, red, red)){.border-indigo-500\/30{border-color:color-mix(in oklab, var(--color-indigo-500) 30%, transparent)}}.border-indigo-500\/40{border-color:#625fff66}@supports (color:color-mix(in lab, red, red)){.border-indigo-500\/40{border-color:color-mix(in oklab, var(--color-indigo-500) 40%, transparent)}}.border-purple-200{border-color:var(--color-purple-200)}.border-purple-300{border-color:var(--color-purple-300)}.border-purple-500\/30{border-color:#ac4bff4d}@supports (color:color-mix(in lab, red, red)){.border-purple-500\/30{border-color:color-mix(in oklab, var(--color-purple-500) 30%, transparent)}}.border-purple-500\/40{border-color:#ac4bff66}@supports (color:color-mix(in lab, red, red)){.border-purple-500\/40{border-color:color-mix(in oklab, var(--color-purple-500) 40%, transparent)}}.border-rose-200{border-color:var(--color-rose-200)}.border-rose-300{border-color:var(--color-rose-300)}.border-rose-500{border-color:var(--color-rose-500)}.border-rose-500\/30{border-color:#ff23574d}@supports (color:color-mix(in lab, red, red)){.border-rose-500\/30{border-color:color-mix(in oklab, var(--color-rose-500) 30%, transparent)}}.border-rose-500\/40{border-color:#ff235766}@supports (color:color-mix(in lab, red, red)){.border-rose-500\/40{border-color:color-mix(in oklab, var(--color-rose-500) 40%, transparent)}}.border-sky-200{border-color:var(--color-sky-200)}.border-sky-600{border-color:var(--color-sky-600)}.border-slate-200{border-color:var(--color-slate-200)}.border-slate-300{border-color:var(--color-slate-300)}.border-slate-800{border-color:var(--color-slate-800)}.border-slate-800\/80{border-color:#1d293dcc}@supports (color:color-mix(in lab, red, red)){.border-slate-800\/80{border-color:color-mix(in oklab, var(--color-slate-800) 80%, transparent)}}.border-teal-200{border-color:var(--color-teal-200)}.border-teal-300{border-color:var(--color-teal-300)}.border-transparent{border-color:#0000}.bg-\[\#f1f5f9\]{background-color:#f1f5f9}.bg-\[var\(--accent-bg-subtle\)\]{background-color:var(--accent-bg-subtle)}.bg-\[var\(--accent-primary\)\],.bg-\[var\(--accent-primary\)\]\/10{background-color:var(--accent-primary)}@supports (color:color-mix(in lab, red, red)){.bg-\[var\(--accent-primary\)\]\/10{background-color:color-mix(in oklab, var(--accent-primary) 10%, transparent)}}.bg-\[var\(--bg-app\)\]{background-color:var(--bg-app)}.bg-\[var\(--bg-input\)\]{background-color:var(--bg-input)}.bg-\[var\(--bg-main\)\]{background-color:var(--bg-main)}.bg-\[var\(--bg-surface\)\]{background-color:var(--bg-surface)}.bg-\[var\(--bg-surface-elevated\)\]{background-color:var(--bg-surface-elevated)}.bg-\[var\(--border-subtle\)\]{background-color:var(--border-subtle)}.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\/20{background-color:#f99c0033}@supports (color:color-mix(in lab, red, red)){.bg-amber-500\/20{background-color:color-mix(in oklab, var(--color-amber-500) 20%, transparent)}}.bg-black\/80{background-color:#000c}@supports (color:color-mix(in lab, red, red)){.bg-black\/80{background-color:color-mix(in oklab, var(--color-black) 80%, transparent)}}.bg-black\/85{background-color:#000000d9}@supports (color:color-mix(in lab, red, red)){.bg-black\/85{background-color:color-mix(in oklab, var(--color-black) 85%, transparent)}}.bg-blue-100{background-color:var(--color-blue-100)}.bg-cyan-100{background-color:var(--color-cyan-100)}.bg-cyan-400{background-color:var(--color-cyan-400)}.bg-cyan-500\/10{background-color:#00b7d71a}@supports (color:color-mix(in lab, red, red)){.bg-cyan-500\/10{background-color:color-mix(in oklab, var(--color-cyan-500) 10%, transparent)}}.bg-emerald-50{background-color:var(--color-emerald-50)}.bg-emerald-100{background-color:var(--color-emerald-100)}.bg-emerald-400{background-color:var(--color-emerald-400)}.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-fuchsia-50{background-color:var(--color-fuchsia-50)}.bg-fuchsia-400{background-color:var(--color-fuchsia-400)}.bg-fuchsia-500\/10{background-color:#e12afb1a}@supports (color:color-mix(in lab, red, red)){.bg-fuchsia-500\/10{background-color:color-mix(in oklab, var(--color-fuchsia-500) 10%, transparent)}}.bg-fuchsia-600{background-color:var(--color-fuchsia-600)}.bg-indigo-50{background-color:var(--color-indigo-50)}.bg-indigo-50\/50{background-color:#eef2ff80}@supports (color:color-mix(in lab, red, red)){.bg-indigo-50\/50{background-color:color-mix(in oklab, var(--color-indigo-50) 50%, transparent)}}.bg-indigo-400{background-color:var(--color-indigo-400)}.bg-indigo-500\/10{background-color:#625fff1a}@supports (color:color-mix(in lab, red, red)){.bg-indigo-500\/10{background-color:color-mix(in oklab, var(--color-indigo-500) 10%, transparent)}}.bg-indigo-600{background-color:var(--color-indigo-600)}.bg-purple-50{background-color:var(--color-purple-50)}.bg-purple-100{background-color:var(--color-purple-100)}.bg-purple-500\/10{background-color:#ac4bff1a}@supports (color:color-mix(in lab, red, red)){.bg-purple-500\/10{background-color:color-mix(in oklab, var(--color-purple-500) 10%, transparent)}}.bg-purple-600{background-color:var(--color-purple-600)}.bg-purple-600\/30{background-color:#9810fa4d}@supports (color:color-mix(in lab, red, red)){.bg-purple-600\/30{background-color:color-mix(in oklab, var(--color-purple-600) 30%, transparent)}}.bg-rose-50{background-color:var(--color-rose-50)}.bg-rose-100{background-color:var(--color-rose-100)}.bg-rose-400{background-color:var(--color-rose-400)}.bg-rose-500{background-color:var(--color-rose-500)}.bg-rose-500\/10{background-color:#ff23571a}@supports (color:color-mix(in lab, red, red)){.bg-rose-500\/10{background-color:color-mix(in oklab, var(--color-rose-500) 10%, transparent)}}.bg-rose-500\/15{background-color:#ff235726}@supports (color:color-mix(in lab, red, red)){.bg-rose-500\/15{background-color:color-mix(in oklab, var(--color-rose-500) 15%, transparent)}}.bg-rose-600{background-color:var(--color-rose-600)}.bg-sky-50{background-color:var(--color-sky-50)}.bg-sky-50\/50{background-color:#f0f9ff80}@supports (color:color-mix(in lab, red, red)){.bg-sky-50\/50{background-color:color-mix(in oklab, var(--color-sky-50) 50%, transparent)}}.bg-sky-100{background-color:var(--color-sky-100)}.bg-sky-600{background-color:var(--color-sky-600)}.bg-slate-100{background-color:var(--color-slate-100)}.bg-slate-400{background-color:var(--color-slate-400)}.bg-slate-800{background-color:var(--color-slate-800)}.bg-slate-950\/80{background-color:#020618cc}@supports (color:color-mix(in lab, red, red)){.bg-slate-950\/80{background-color:color-mix(in oklab, var(--color-slate-950) 80%, transparent)}}.bg-teal-50{background-color:var(--color-teal-50)}.bg-teal-100{background-color:var(--color-teal-100)}.bg-transparent{background-color:#0000}.object-contain{object-fit:contain}.p-0\.5{padding:calc(var(--spacing) * .5)}.p-1{padding:var(--spacing)}.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-6{padding:calc(var(--spacing) * 6)}.p-8{padding:calc(var(--spacing) * 8)}.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)}.pt-0{padding-top:0}.pt-0\.5{padding-top:calc(var(--spacing) * .5)}.pt-1{padding-top:var(--spacing)}.pt-2{padding-top:calc(var(--spacing) * 2)}.pt-2\.5{padding-top:calc(var(--spacing) * 2.5)}.pr-1{padding-right:var(--spacing)}.pr-1\.5{padding-right:calc(var(--spacing) * 1.5)}.pr-3{padding-right:calc(var(--spacing) * 3)}.pr-9{padding-right:calc(var(--spacing) * 9)}.pb-1{padding-bottom:var(--spacing)}.pb-1\.5{padding-bottom:calc(var(--spacing) * 1.5)}.pb-2{padding-bottom:calc(var(--spacing) * 2)}.pb-\[env\(safe-area-inset-bottom\)\]{padding-bottom:env(safe-area-inset-bottom)}.pl-2{padding-left:calc(var(--spacing) * 2)}.pl-3{padding-left:calc(var(--spacing) * 3)}.pl-4{padding-left:calc(var(--spacing) * 4)}.pl-9{padding-left:calc(var(--spacing) * 9)}.text-center{text-align:center}.text-left{text-align:left}.text-right{text-align:right}.align-top{vertical-align:top}.font-mono{font-family:var(--font-mono)}.font-sans{font-family:var(--font-sans)}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\[9px\]{font-size:9px}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.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-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-tight{--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.tracking-wider{--tw-tracking:var(--tracking-wider);letter-spacing:var(--tracking-wider)}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.text-\[var\(--accent-primary\)\]{color:var(--accent-primary)}.text-\[var\(--text-muted\)\]{color:var(--text-muted)}.text-\[var\(--text-primary\)\]{color:var(--text-primary)}.text-\[var\(--text-secondary\)\]{color:var(--text-secondary)}.text-amber-300{color:var(--color-amber-300)}.text-amber-400{color:var(--color-amber-400)}.text-amber-500{color:var(--color-amber-500)}.text-amber-600{color:var(--color-amber-600)}.text-amber-700{color:var(--color-amber-700)}.text-amber-800\/80{color:#953d00cc}@supports (color:color-mix(in lab, red, red)){.text-amber-800\/80{color:color-mix(in oklab, var(--color-amber-800) 80%, transparent)}}.text-amber-900{color:var(--color-amber-900)}.text-amber-950{color:var(--color-amber-950)}.text-blue-950{color:var(--color-blue-950)}.text-cyan-300{color:var(--color-cyan-300)}.text-cyan-600{color:var(--color-cyan-600)}.text-cyan-700{color:var(--color-cyan-700)}.text-cyan-950{color:var(--color-cyan-950)}.text-emerald-300{color:var(--color-emerald-300)}.text-emerald-400{color:var(--color-emerald-400)}.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-emerald-900{color:var(--color-emerald-900)}.text-emerald-950{color:var(--color-emerald-950)}.text-fuchsia-300{color:var(--color-fuchsia-300)}.text-fuchsia-950{color:var(--color-fuchsia-950)}.text-indigo-300{color:var(--color-indigo-300)}.text-indigo-400{color:var(--color-indigo-400)}.text-indigo-600{color:var(--color-indigo-600)}.text-indigo-700{color:var(--color-indigo-700)}.text-indigo-900{color:var(--color-indigo-900)}.text-indigo-950{color:var(--color-indigo-950)}.text-purple-200{color:var(--color-purple-200)}.text-purple-400{color:var(--color-purple-400)}.text-purple-600{color:var(--color-purple-600)}.text-purple-700{color:var(--color-purple-700)}.text-purple-800{color:var(--color-purple-800)}.text-purple-900{color:var(--color-purple-900)}.text-purple-950{color:var(--color-purple-950)}.text-rose-300{color:var(--color-rose-300)}.text-rose-400{color:var(--color-rose-400)}.text-rose-500{color:var(--color-rose-500)}.text-rose-600{color:var(--color-rose-600)}.text-rose-700{color:var(--color-rose-700)}.text-rose-800{color:var(--color-rose-800)}.text-rose-900{color:var(--color-rose-900)}.text-rose-950{color:var(--color-rose-950)}.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-sky-800\/80{color:#005986cc}@supports (color:color-mix(in lab, red, red)){.text-sky-800\/80{color:color-mix(in oklab, var(--color-sky-800) 80%, transparent)}}.text-sky-900{color:var(--color-sky-900)}.text-sky-950{color:var(--color-sky-950)}.text-slate-300{color:var(--color-slate-300)}.text-slate-700{color:var(--color-slate-700)}.text-slate-800{color:var(--color-slate-800)}.text-slate-900{color:var(--color-slate-900)}.text-teal-800{color:var(--color-teal-800)}.text-teal-950{color:var(--color-teal-950)}.text-white{color:var(--color-white)}.lowercase{text-transform:lowercase}.uppercase{text-transform:uppercase}.italic{font-style:italic}.line-through{text-decoration-line:line-through}.placeholder-\[var\(--text-muted\)\]::placeholder{color:var(--text-muted)}.placeholder-purple-400\/50::placeholder{color:#c07eff80}@supports (color:color-mix(in lab, red, red)){.placeholder-purple-400\/50::placeholder{color:color-mix(in oklab, var(--color-purple-400) 50%, transparent)}}.placeholder-slate-400::placeholder{color:var(--color-slate-400)}.accent-purple-500{accent-color:var(--color-purple-500)}.opacity-0{opacity:0}.opacity-40{opacity:.4}.opacity-50{opacity:.5}.opacity-70{opacity:.7}.shadow-\[var\(--accent-primary\)\]\/20{--tw-shadow-alpha:20%;--tw-shadow:var(--accent-primary);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.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-2xs{--tw-shadow:0 1px var(--tw-shadow-color,#0000000d);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-inner{--tw-shadow:inset 0 2px 4px 0 var(--tw-shadow-color,#0000000d);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-md{--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)}.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)}.shadow-xs{--tw-shadow:0 1px 2px 0 var(--tw-shadow-color,#0000000d);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-emerald-600\/20{--tw-shadow-color:#00976733}@supports (color:color-mix(in lab, red, red)){.shadow-emerald-600\/20{--tw-shadow-color:color-mix(in oklab, color-mix(in oklab, var(--color-emerald-600) 20%, transparent) var(--tw-shadow-alpha), transparent)}}.shadow-rose-600\/20{--tw-shadow-color:#e7004433}@supports (color:color-mix(in lab, red, red)){.shadow-rose-600\/20{--tw-shadow-color:color-mix(in oklab, color-mix(in oklab, var(--color-rose-600) 20%, transparent) var(--tw-shadow-alpha), transparent)}}.ring-\[var\(--accent-primary\)\]{--tw-ring-color:var(--accent-primary)}.ring-\[var\(--border-accent\)\]{--tw-ring-color:var(--border-accent)}.blur{--tw-blur:blur(8px);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,)}.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-md{--tw-backdrop-blur:blur(var(--blur-md));-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-opacity{transition-property:opacity;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))}.duration-200{--tw-duration:.2s;transition-duration:.2s}.select-none{-webkit-user-select:none;user-select:none}.select-text{-webkit-user-select:text;user-select:text}@media (hover:hover){.group-hover\:bg-\[var\(--accent-primary\)\]:is(:where(.group):hover *){background-color:var(--accent-primary)}.group-hover\:opacity-100:is(:where(.group):hover *),.group-hover\/author\:opacity-100:is(:where(.group\/author):hover *),.group-hover\/header\:opacity-100:is(:where(.group\/header):hover *){opacity:1}}.before\:font-bold:before{content:var(--tw-content);--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.before\:text-\[var\(--accent-primary\)\]:before{content:var(--tw-content);color:var(--accent-primary)}.before\:content-\[\"–\"\]:before{--tw-content:"–";content:var(--tw-content)}.before\:content-\[\"•\"\]:before{--tw-content:"•";content:var(--tw-content)}.last\:border-b-0:last-child{border-bottom-style:var(--tw-border-style);border-bottom-width:0}@media (hover:hover){.hover\:w-3:hover{width:calc(var(--spacing) * 3)}.hover\:border-\[var\(--border-accent\)\]:hover{border-color:var(--border-accent)}.hover\:border-\[var\(--border-strong\)\]:hover{border-color:var(--border-strong)}.hover\:bg-\[var\(--accent-bg-subtle\)\]:hover,.hover\:bg-\[var\(--accent-bg-subtle\)\]\/50:hover{background-color:var(--accent-bg-subtle)}@supports (color:color-mix(in lab, red, red)){.hover\:bg-\[var\(--accent-bg-subtle\)\]\/50:hover{background-color:color-mix(in oklab, var(--accent-bg-subtle) 50%, transparent)}}.hover\:bg-\[var\(--accent-bg-subtle\)\]\/80:hover{background-color:var(--accent-bg-subtle)}@supports (color:color-mix(in lab, red, red)){.hover\:bg-\[var\(--accent-bg-subtle\)\]\/80:hover{background-color:color-mix(in oklab, var(--accent-bg-subtle) 80%, transparent)}}.hover\:bg-\[var\(--bg-surface-elevated\)\]:hover{background-color:var(--bg-surface-elevated)}.hover\:bg-amber-100:hover{background-color:var(--color-amber-100)}.hover\:bg-amber-200\/70:hover{background-color:#fee685b3}@supports (color:color-mix(in lab, red, red)){.hover\:bg-amber-200\/70:hover{background-color:color-mix(in oklab, var(--color-amber-200) 70%, transparent)}}.hover\:bg-amber-500\/30:hover{background-color:#f99c004d}@supports (color:color-mix(in lab, red, red)){.hover\:bg-amber-500\/30:hover{background-color:color-mix(in oklab, var(--color-amber-500) 30%, transparent)}}.hover\:bg-blue-200\/70:hover{background-color:#bedbffb3}@supports (color:color-mix(in lab, red, red)){.hover\:bg-blue-200\/70:hover{background-color:color-mix(in oklab, var(--color-blue-200) 70%, transparent)}}.hover\:bg-cyan-200\/70:hover{background-color:#a2f4fdb3}@supports (color:color-mix(in lab, red, red)){.hover\:bg-cyan-200\/70:hover{background-color:color-mix(in oklab, var(--color-cyan-200) 70%, transparent)}}.hover\:bg-emerald-50:hover{background-color:var(--color-emerald-50)}.hover\:bg-emerald-100:hover{background-color:var(--color-emerald-100)}.hover\:bg-emerald-200\/70:hover{background-color:#a4f4cfb3}@supports (color:color-mix(in lab, red, red)){.hover\:bg-emerald-200\/70:hover{background-color:color-mix(in oklab, var(--color-emerald-200) 70%, transparent)}}.hover\:bg-emerald-500:hover{background-color:var(--color-emerald-500)}.hover\:bg-indigo-500:hover{background-color:var(--color-indigo-500)}.hover\:bg-purple-50:hover{background-color:var(--color-purple-50)}.hover\:bg-purple-100:hover{background-color:var(--color-purple-100)}.hover\:bg-purple-200\/70:hover{background-color:#e9d5ffb3}@supports (color:color-mix(in lab, red, red)){.hover\:bg-purple-200\/70:hover{background-color:color-mix(in oklab, var(--color-purple-200) 70%, transparent)}}.hover\:bg-purple-500\/10:hover{background-color:#ac4bff1a}@supports (color:color-mix(in lab, red, red)){.hover\:bg-purple-500\/10:hover{background-color:color-mix(in oklab, var(--color-purple-500) 10%, transparent)}}.hover\:bg-purple-500\/20:hover{background-color:#ac4bff33}@supports (color:color-mix(in lab, red, red)){.hover\:bg-purple-500\/20:hover{background-color:color-mix(in oklab, var(--color-purple-500) 20%, transparent)}}.hover\:bg-purple-600\/50:hover{background-color:#9810fa80}@supports (color:color-mix(in lab, red, red)){.hover\:bg-purple-600\/50:hover{background-color:color-mix(in oklab, var(--color-purple-600) 50%, transparent)}}.hover\:bg-rose-50:hover{background-color:var(--color-rose-50)}.hover\:bg-rose-200\/70:hover{background-color:#ffccd3b3}@supports (color:color-mix(in lab, red, red)){.hover\:bg-rose-200\/70:hover{background-color:color-mix(in oklab, var(--color-rose-200) 70%, transparent)}}.hover\:bg-rose-500:hover{background-color:var(--color-rose-500)}.hover\:bg-sky-100:hover{background-color:var(--color-sky-100)}.hover\:bg-sky-500:hover{background-color:var(--color-sky-500)}.hover\:bg-slate-100:hover{background-color:var(--color-slate-100)}.hover\:bg-slate-700:hover{background-color:var(--color-slate-700)}.hover\:bg-teal-200\/70:hover{background-color:#96f7e4b3}@supports (color:color-mix(in lab, red, red)){.hover\:bg-teal-200\/70:hover{background-color:color-mix(in oklab, var(--color-teal-200) 70%, transparent)}}.hover\:bg-white\/5:hover{background-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){.hover\:bg-white\/5:hover{background-color:color-mix(in oklab, var(--color-white) 5%, transparent)}}.hover\:text-\[var\(--accent-primary\)\]:hover{color:var(--accent-primary)}.hover\:text-\[var\(--text-primary\)\]:hover{color:var(--text-primary)}.hover\:text-purple-300:hover{color:var(--color-purple-300)}.hover\:text-purple-400:hover{color:var(--color-purple-400)}.hover\:text-rose-600:hover{color:var(--color-rose-600)}.hover\:text-sky-700:hover{color:var(--color-sky-700)}.hover\:underline:hover{text-decoration-line:underline}.hover\:opacity-100:hover{opacity:1}.hover\:shadow-sm:hover{--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)}.hover\:brightness-105:hover{--tw-brightness:brightness(105%);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,)}.hover\:brightness-110:hover{--tw-brightness:brightness(110%);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,)}.hover\:brightness-125:hover{--tw-brightness:brightness(125%);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,)}}.focus\:border-\[var\(--border-accent\)\]:focus{border-color:var(--border-accent)}.focus\:border-\[var\(--border-strong\)\]:focus{border-color:var(--border-strong)}.focus\:border-amber-500\/50:focus{border-color:#f99c0080}@supports (color:color-mix(in lab, red, red)){.focus\:border-amber-500\/50:focus{border-color:color-mix(in oklab, var(--color-amber-500) 50%, transparent)}}.focus\:border-purple-500:focus{border-color:var(--color-purple-500)}.focus\:border-purple-500\/50:focus{border-color:#ac4bff80}@supports (color:color-mix(in lab, red, red)){.focus\:border-purple-500\/50:focus{border-color:color-mix(in oklab, var(--color-purple-500) 50%, transparent)}}.focus\:border-sky-500:focus{border-color:var(--color-sky-500)}.focus\:ring-0:focus{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(0px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.focus\:outline-none:focus{--tw-outline-style:none;outline-style:none}.active\:cursor-grabbing:active{cursor:grabbing}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-40:disabled{opacity:.4}.disabled\:opacity-50:disabled{opacity:.5}@media (width>=40rem){.sm\:mt-0{margin-top:0}.sm\:hidden{display:none}.sm\:inline{display:inline}.sm\:w-96{width:calc(var(--spacing) * 96)}.sm\:w-auto{width:auto}.sm\:flex-1{flex:1}.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.sm\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.sm\:flex-col{flex-direction:column}.sm\:flex-row{flex-direction:row}.sm\:items-center{align-items:center}.sm\:items-end{align-items:flex-end}.sm\:justify-end{justify-content:flex-end}.sm\:gap-1\.5{gap:calc(var(--spacing) * 1.5)}.sm\:gap-2{gap:calc(var(--spacing) * 2)}.sm\:gap-3{gap:calc(var(--spacing) * 3)}.sm\:rounded-3xl{border-radius:var(--radius-3xl)}.sm\:border-t-0{border-top-style:var(--tw-border-style);border-top-width:0}.sm\:p-3{padding:calc(var(--spacing) * 3)}.sm\:p-4{padding:calc(var(--spacing) * 4)}.sm\:p-5{padding:calc(var(--spacing) * 5)}.sm\:px-2\.5{padding-inline:calc(var(--spacing) * 2.5)}.sm\:px-3{padding-inline:calc(var(--spacing) * 3)}.sm\:px-4{padding-inline:calc(var(--spacing) * 4)}.sm\:py-2{padding-block:calc(var(--spacing) * 2)}.sm\:pt-0{padding-top:0}.sm\:text-\[11px\]{font-size:11px}}@media (width>=48rem){.md\:flex{display:flex}.md\:hidden{display:none}.md\:h-full{height:100%}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:flex-row{flex-direction:row}.md\:gap-3{gap:calc(var(--spacing) * 3)}.md\:px-5{padding-inline:calc(var(--spacing) * 5)}.md\:py-3{padding-block:calc(var(--spacing) * 3)}}.dark\:border-amber-500\/30:where(.dark,.dark *){border-color:#f99c004d}@supports (color:color-mix(in lab, red, red)){.dark\:border-amber-500\/30:where(.dark,.dark *){border-color:color-mix(in oklab, var(--color-amber-500) 30%, transparent)}}.dark\:border-blue-500\/30:where(.dark,.dark *){border-color:#3080ff4d}@supports (color:color-mix(in lab, red, red)){.dark\:border-blue-500\/30:where(.dark,.dark *){border-color:color-mix(in oklab, var(--color-blue-500) 30%, transparent)}}.dark\:border-cyan-500\/30:where(.dark,.dark *){border-color:#00b7d74d}@supports (color:color-mix(in lab, red, red)){.dark\:border-cyan-500\/30:where(.dark,.dark *){border-color:color-mix(in oklab, var(--color-cyan-500) 30%, transparent)}}.dark\:border-emerald-500\/30:where(.dark,.dark *){border-color:#00bb7f4d}@supports (color:color-mix(in lab, red, red)){.dark\:border-emerald-500\/30:where(.dark,.dark *){border-color:color-mix(in oklab, var(--color-emerald-500) 30%, 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-fuchsia-500\/30:where(.dark,.dark *){border-color:#e12afb4d}@supports (color:color-mix(in lab, red, red)){.dark\:border-fuchsia-500\/30:where(.dark,.dark *){border-color:color-mix(in oklab, var(--color-fuchsia-500) 30%, transparent)}}.dark\:border-fuchsia-500\/40:where(.dark,.dark *){border-color:#e12afb66}@supports (color:color-mix(in lab, red, red)){.dark\:border-fuchsia-500\/40:where(.dark,.dark *){border-color:color-mix(in oklab, var(--color-fuchsia-500) 40%, transparent)}}.dark\:border-indigo-500\/20:where(.dark,.dark *){border-color:#625fff33}@supports (color:color-mix(in lab, red, red)){.dark\:border-indigo-500\/20:where(.dark,.dark *){border-color:color-mix(in oklab, var(--color-indigo-500) 20%, transparent)}}.dark\:border-indigo-500\/30:where(.dark,.dark *){border-color:#625fff4d}@supports (color:color-mix(in lab, red, red)){.dark\:border-indigo-500\/30:where(.dark,.dark *){border-color:color-mix(in oklab, var(--color-indigo-500) 30%, transparent)}}.dark\:border-indigo-500\/40:where(.dark,.dark *){border-color:#625fff66}@supports (color:color-mix(in lab, red, red)){.dark\:border-indigo-500\/40:where(.dark,.dark *){border-color:color-mix(in oklab, var(--color-indigo-500) 40%, transparent)}}.dark\:border-purple-500\/20:where(.dark,.dark *){border-color:#ac4bff33}@supports (color:color-mix(in lab, red, red)){.dark\:border-purple-500\/20:where(.dark,.dark *){border-color:color-mix(in oklab, var(--color-purple-500) 20%, transparent)}}.dark\:border-purple-500\/30:where(.dark,.dark *){border-color:#ac4bff4d}@supports (color:color-mix(in lab, red, red)){.dark\:border-purple-500\/30:where(.dark,.dark *){border-color:color-mix(in oklab, var(--color-purple-500) 30%, transparent)}}.dark\:border-purple-500\/40:where(.dark,.dark *){border-color:#ac4bff66}@supports (color:color-mix(in lab, red, red)){.dark\:border-purple-500\/40:where(.dark,.dark *){border-color:color-mix(in oklab, var(--color-purple-500) 40%, transparent)}}.dark\:border-rose-500\/30:where(.dark,.dark *){border-color:#ff23574d}@supports (color:color-mix(in lab, red, red)){.dark\:border-rose-500\/30:where(.dark,.dark *){border-color:color-mix(in oklab, var(--color-rose-500) 30%, transparent)}}.dark\:border-rose-500\/40:where(.dark,.dark *){border-color:#ff235766}@supports (color:color-mix(in lab, red, red)){.dark\:border-rose-500\/40:where(.dark,.dark *){border-color:color-mix(in oklab, var(--color-rose-500) 40%, transparent)}}.dark\:border-slate-600\/30:where(.dark,.dark *){border-color:#45556c4d}@supports (color:color-mix(in lab, red, red)){.dark\:border-slate-600\/30:where(.dark,.dark *){border-color:color-mix(in oklab, var(--color-slate-600) 30%, transparent)}}.dark\:border-slate-700\/40:where(.dark,.dark *){border-color:#31415866}@supports (color:color-mix(in lab, red, red)){.dark\:border-slate-700\/40:where(.dark,.dark *){border-color:color-mix(in oklab, var(--color-slate-700) 40%, transparent)}}.dark\:border-teal-500\/30:where(.dark,.dark *){border-color:#00baa74d}@supports (color:color-mix(in lab, red, red)){.dark\:border-teal-500\/30:where(.dark,.dark *){border-color:color-mix(in oklab, var(--color-teal-500) 30%, 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-blue-500\/20:where(.dark,.dark *){background-color:#3080ff33}@supports (color:color-mix(in lab, red, red)){.dark\:bg-blue-500\/20:where(.dark,.dark *){background-color:color-mix(in oklab, var(--color-blue-500) 20%, transparent)}}.dark\:bg-cyan-500\/20:where(.dark,.dark *){background-color:#00b7d733}@supports (color:color-mix(in lab, red, red)){.dark\:bg-cyan-500\/20:where(.dark,.dark *){background-color:color-mix(in oklab, var(--color-cyan-500) 20%, transparent)}}.dark\:bg-emerald-400:where(.dark,.dark *){background-color:var(--color-emerald-400)}.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-emerald-500\/20:where(.dark,.dark *){background-color:#00bb7f33}@supports (color:color-mix(in lab, red, red)){.dark\:bg-emerald-500\/20:where(.dark,.dark *){background-color:color-mix(in oklab, var(--color-emerald-500) 20%, transparent)}}.dark\:bg-emerald-950\/40:where(.dark,.dark *){background-color:#002c2266}@supports (color:color-mix(in lab, red, red)){.dark\:bg-emerald-950\/40:where(.dark,.dark *){background-color:color-mix(in oklab, var(--color-emerald-950) 40%, transparent)}}.dark\:bg-fuchsia-400:where(.dark,.dark *){background-color:var(--color-fuchsia-400)}.dark\:bg-fuchsia-500\/10:where(.dark,.dark *){background-color:#e12afb1a}@supports (color:color-mix(in lab, red, red)){.dark\:bg-fuchsia-500\/10:where(.dark,.dark *){background-color:color-mix(in oklab, var(--color-fuchsia-500) 10%, transparent)}}.dark\:bg-indigo-400:where(.dark,.dark *){background-color:var(--color-indigo-400)}.dark\:bg-indigo-500\/10:where(.dark,.dark *){background-color:#625fff1a}@supports (color:color-mix(in lab, red, red)){.dark\:bg-indigo-500\/10:where(.dark,.dark *){background-color:color-mix(in oklab, var(--color-indigo-500) 10%, transparent)}}.dark\:bg-indigo-500\/20:where(.dark,.dark *){background-color:#625fff33}@supports (color:color-mix(in lab, red, red)){.dark\:bg-indigo-500\/20:where(.dark,.dark *){background-color:color-mix(in oklab, var(--color-indigo-500) 20%, transparent)}}.dark\:bg-indigo-600:where(.dark,.dark *){background-color:var(--color-indigo-600)}.dark\:bg-indigo-600\/20:where(.dark,.dark *){background-color:#4f39f633}@supports (color:color-mix(in lab, red, red)){.dark\:bg-indigo-600\/20:where(.dark,.dark *){background-color:color-mix(in oklab, var(--color-indigo-600) 20%, transparent)}}.dark\:bg-indigo-600\/30:where(.dark,.dark *){background-color:#4f39f64d}@supports (color:color-mix(in lab, red, red)){.dark\:bg-indigo-600\/30:where(.dark,.dark *){background-color:color-mix(in oklab, var(--color-indigo-600) 30%, transparent)}}.dark\:bg-indigo-700:where(.dark,.dark *){background-color:var(--color-indigo-700)}.dark\:bg-indigo-950\/20:where(.dark,.dark *){background-color:#1e1a4d33}@supports (color:color-mix(in lab, red, red)){.dark\:bg-indigo-950\/20:where(.dark,.dark *){background-color:color-mix(in oklab, var(--color-indigo-950) 20%, transparent)}}.dark\:bg-purple-500\/20:where(.dark,.dark *){background-color:#ac4bff33}@supports (color:color-mix(in lab, red, red)){.dark\:bg-purple-500\/20:where(.dark,.dark *){background-color:color-mix(in oklab, var(--color-purple-500) 20%, transparent)}}.dark\:bg-purple-600\/30:where(.dark,.dark *){background-color:#9810fa4d}@supports (color:color-mix(in lab, red, red)){.dark\:bg-purple-600\/30:where(.dark,.dark *){background-color:color-mix(in oklab, var(--color-purple-600) 30%, transparent)}}.dark\:bg-purple-700:where(.dark,.dark *){background-color:var(--color-purple-700)}.dark\:bg-rose-500\/20:where(.dark,.dark *){background-color:#ff235733}@supports (color:color-mix(in lab, red, red)){.dark\:bg-rose-500\/20:where(.dark,.dark *){background-color:color-mix(in oklab, var(--color-rose-500) 20%, transparent)}}.dark\:bg-rose-950\/40:where(.dark,.dark *){background-color:#4d021866}@supports (color:color-mix(in lab, red, red)){.dark\:bg-rose-950\/40:where(.dark,.dark *){background-color:color-mix(in oklab, var(--color-rose-950) 40%, transparent)}}.dark\:bg-slate-800:where(.dark,.dark *){background-color:var(--color-slate-800)}.dark\:bg-slate-800\/40:where(.dark,.dark *){background-color:#1d293d66}@supports (color:color-mix(in lab, red, red)){.dark\:bg-slate-800\/40:where(.dark,.dark *){background-color:color-mix(in oklab, var(--color-slate-800) 40%, transparent)}}.dark\:bg-teal-500\/20:where(.dark,.dark *){background-color:#00baa733}@supports (color:color-mix(in lab, red, red)){.dark\:bg-teal-500\/20:where(.dark,.dark *){background-color:color-mix(in oklab, var(--color-teal-500) 20%, transparent)}}.dark\:text-\[var\(--accent-primary\)\]:where(.dark,.dark *){color:var(--accent-primary)}.dark\:text-\[var\(--text-muted\)\]:where(.dark,.dark *){color:var(--text-muted)}.dark\:text-amber-300:where(.dark,.dark *){color:var(--color-amber-300)}.dark\:text-amber-400:where(.dark,.dark *){color:var(--color-amber-400)}.dark\:text-amber-400\/80:where(.dark,.dark *){color:#fcbb00cc}@supports (color:color-mix(in lab, red, red)){.dark\:text-amber-400\/80:where(.dark,.dark *){color:color-mix(in oklab, var(--color-amber-400) 80%, transparent)}}.dark\:text-blue-300:where(.dark,.dark *){color:var(--color-blue-300)}.dark\:text-cyan-300:where(.dark,.dark *){color:var(--color-cyan-300)}.dark\:text-cyan-400:where(.dark,.dark *){color:var(--color-cyan-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-fuchsia-300:where(.dark,.dark *){color:var(--color-fuchsia-300)}.dark\:text-indigo-100:where(.dark,.dark *){color:var(--color-indigo-100)}.dark\:text-indigo-200:where(.dark,.dark *){color:var(--color-indigo-200)}.dark\:text-indigo-300:where(.dark,.dark *){color:var(--color-indigo-300)}.dark\:text-indigo-400:where(.dark,.dark *){color:var(--color-indigo-400)}.dark\:text-indigo-400\/80:where(.dark,.dark *){color:#7d87ffcc}@supports (color:color-mix(in lab, red, red)){.dark\:text-indigo-400\/80:where(.dark,.dark *){color:color-mix(in oklab, var(--color-indigo-400) 80%, transparent)}}.dark\:text-purple-100:where(.dark,.dark *){color:var(--color-purple-100)}.dark\:text-purple-200:where(.dark,.dark *){color:var(--color-purple-200)}.dark\:text-purple-300:where(.dark,.dark *){color:var(--color-purple-300)}.dark\:text-purple-400:where(.dark,.dark *){color:var(--color-purple-400)}.dark\:text-rose-300:where(.dark,.dark *){color:var(--color-rose-300)}.dark\:text-rose-400:where(.dark,.dark *){color:var(--color-rose-400)}.dark\:text-slate-400:where(.dark,.dark *){color:var(--color-slate-400)}.dark\:text-slate-600:where(.dark,.dark *){color:var(--color-slate-600)}.dark\:text-teal-300:where(.dark,.dark *){color:var(--color-teal-300)}.dark\:text-white:where(.dark,.dark *){color:var(--color-white)}.dark\:placeholder-slate-500:where(.dark,.dark *)::placeholder{color:var(--color-slate-500)}@media (hover:hover){.dark\:hover\:bg-amber-500\/30:where(.dark,.dark *):hover{background-color:#f99c004d}@supports (color:color-mix(in lab, red, red)){.dark\:hover\:bg-amber-500\/30:where(.dark,.dark *):hover{background-color:color-mix(in oklab, var(--color-amber-500) 30%, transparent)}}.dark\:hover\:bg-blue-500\/30:where(.dark,.dark *):hover{background-color:#3080ff4d}@supports (color:color-mix(in lab, red, red)){.dark\:hover\:bg-blue-500\/30:where(.dark,.dark *):hover{background-color:color-mix(in oklab, var(--color-blue-500) 30%, transparent)}}.dark\:hover\:bg-cyan-500\/30:where(.dark,.dark *):hover{background-color:#00b7d74d}@supports (color:color-mix(in lab, red, red)){.dark\:hover\:bg-cyan-500\/30:where(.dark,.dark *):hover{background-color:color-mix(in oklab, var(--color-cyan-500) 30%, transparent)}}.dark\:hover\:bg-emerald-500\/20:where(.dark,.dark *):hover{background-color:#00bb7f33}@supports (color:color-mix(in lab, red, red)){.dark\:hover\:bg-emerald-500\/20:where(.dark,.dark *):hover{background-color:color-mix(in oklab, var(--color-emerald-500) 20%, transparent)}}.dark\:hover\:bg-emerald-500\/30:where(.dark,.dark *):hover{background-color:#00bb7f4d}@supports (color:color-mix(in lab, red, red)){.dark\:hover\:bg-emerald-500\/30:where(.dark,.dark *):hover{background-color:color-mix(in oklab, var(--color-emerald-500) 30%, transparent)}}.dark\:hover\:bg-indigo-500:where(.dark,.dark *):hover{background-color:var(--color-indigo-500)}.dark\:hover\:bg-indigo-600\/30:where(.dark,.dark *):hover{background-color:#4f39f64d}@supports (color:color-mix(in lab, red, red)){.dark\:hover\:bg-indigo-600\/30:where(.dark,.dark *):hover{background-color:color-mix(in oklab, var(--color-indigo-600) 30%, transparent)}}.dark\:hover\:bg-indigo-600\/50:where(.dark,.dark *):hover{background-color:#4f39f680}@supports (color:color-mix(in lab, red, red)){.dark\:hover\:bg-indigo-600\/50:where(.dark,.dark *):hover{background-color:color-mix(in oklab, var(--color-indigo-600) 50%, transparent)}}.dark\:hover\:bg-purple-500\/20:where(.dark,.dark *):hover{background-color:#ac4bff33}@supports (color:color-mix(in lab, red, red)){.dark\:hover\:bg-purple-500\/20:where(.dark,.dark *):hover{background-color:color-mix(in oklab, var(--color-purple-500) 20%, transparent)}}.dark\:hover\:bg-purple-500\/30:where(.dark,.dark *):hover{background-color:#ac4bff4d}@supports (color:color-mix(in lab, red, red)){.dark\:hover\:bg-purple-500\/30:where(.dark,.dark *):hover{background-color:color-mix(in oklab, var(--color-purple-500) 30%, transparent)}}.dark\:hover\:bg-purple-600\/50:where(.dark,.dark *):hover{background-color:#9810fa80}@supports (color:color-mix(in lab, red, red)){.dark\:hover\:bg-purple-600\/50:where(.dark,.dark *):hover{background-color:color-mix(in oklab, var(--color-purple-600) 50%, transparent)}}.dark\:hover\:bg-rose-500\/20:where(.dark,.dark *):hover{background-color:#ff235733}@supports (color:color-mix(in lab, red, red)){.dark\:hover\:bg-rose-500\/20:where(.dark,.dark *):hover{background-color:color-mix(in oklab, var(--color-rose-500) 20%, transparent)}}.dark\:hover\:bg-rose-500\/30:where(.dark,.dark *):hover{background-color:#ff23574d}@supports (color:color-mix(in lab, red, red)){.dark\:hover\:bg-rose-500\/30:where(.dark,.dark *):hover{background-color:color-mix(in oklab, var(--color-rose-500) 30%, transparent)}}.dark\:hover\:bg-slate-900:where(.dark,.dark *):hover{background-color:var(--color-slate-900)}.dark\:hover\:bg-teal-500\/30:where(.dark,.dark *):hover{background-color:#00baa74d}@supports (color:color-mix(in lab, red, red)){.dark\:hover\:bg-teal-500\/30:where(.dark,.dark *):hover{background-color:color-mix(in oklab, var(--color-teal-500) 30%, transparent)}}.dark\:hover\:text-indigo-300:where(.dark,.dark *):hover{color:var(--color-indigo-300)}.dark\:hover\:text-rose-400:where(.dark,.dark *):hover{color:var(--color-rose-400)}}.dark\:focus\:border-indigo-500\/50:where(.dark,.dark *):focus{border-color:#625fff80}@supports (color:color-mix(in lab, red, red)){.dark\:focus\:border-indigo-500\/50:where(.dark,.dark *):focus{border-color:color-mix(in oklab, var(--color-indigo-500) 50%, transparent)}}}:root{--bg-main:#f8fafc;--bg-app:#f8fafc;--bg-card:#fff;--bg-surface:#fff;--bg-surface-elevated:#f1f5f9;--bg-input:#fff;--border-subtle:#e2e8f0;--border-strong:#cbd5e1;--border-accent:#0e749066;--accent-primary:#0284c7;--accent-bg-subtle:#0284c714;--accent-border-subtle:#0284c740;--text-primary:#0f172a;--text-secondary:#334155;--text-muted:#64748b;--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light}.dark{--bg-main:#060812;--bg-app:#060812;--bg-card:#0b0f19;--bg-surface:#0a0e1a;--bg-surface-elevated:#0f172a;--bg-input:#0b0f19;--border-subtle:#1e293b;--border-strong:#334155;--border-accent:#6366f180;--accent-primary:#818cf8;--accent-bg-subtle:#6366f11f;--accent-border-subtle:#6366f14d;--text-primary:#f8fafc;--text-secondary:#94a3b8;--text-muted:#64748b;--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}body{background-color:var(--bg-main);color:var(--text-primary);margin:0;padding:0;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif;overflow:hidden}::-webkit-scrollbar{width:6px;height:6px}::-webkit-scrollbar-track{background:0 0}::-webkit-scrollbar-thumb{background:#94a3b833;border-radius:9999px}::-webkit-scrollbar-thumb:hover{background:#94a3b859}@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-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-content{syntax:"*";inherits:false;initial-value:""}@keyframes pulse{50%{opacity:.5}}
|
|
@@ -13,7 +13,7 @@ Error generating stack: `+e.message+`
|
|
|
13
13
|
`);for(let t of e){let e=t.trim();e.startsWith(`- **Technical Detail**:`)?p.push(e.replace(/^- \*\*Technical Detail\*\*:\s*/,``)):e.startsWith(`- **Open Questions**:`)?m.push(e.replace(/^- \*\*Open Questions\*\*:\s*/,``)):e.startsWith(`- `)&&p.push(e.replace(/^- /,``))}}let g=o.match(/\*\*(?:Type|Category)\*\*:\s*([^\n]+)/i),_=g?g[1].trim():``,v=`Feature`;_.toLowerCase().includes(`bug`)?v=`Bug`:_.toLowerCase().includes(`idea`)?v=`Idea`:_.toLowerCase().includes(`tool`)?v=`Tools`:(_.toLowerCase().includes(`platform`)||_.toLowerCase().includes(`technical`))&&(v=`Platform`);let y=a.toLowerCase().includes(`(completed)`)||o.toLowerCase().includes(`status: completed`),b=t.replace(/\s*\([^)]*completed[^)]*\)/i,``).trim();i.push({id:`feature-${e}`,number:e,ticketId:String(e),title:b,type:v,category:v,complexity:n?n[1].trim():`Medium`,rationale:l,breakdown:d,technicalDetails:p.length>0?p:void 0,openQuestions:m.length>0?m:void 0,isCompleted:y?!0:void 0,featureFlag:c,projectId:void 0,project:void 0})}}}if(t){let e=r||{},t=n||{};for(let n in e){let r=e[n];if(!r)continue;let a=r.id;if(a===void 0){let e=parseInt(n.replace(/^[a-zA-Z0-9]+[-_:]/,``),10);a=isNaN(e)?parseInt(n,10):e}if(isNaN(a))continue;let o=t[n]||``,s=o.match(/(?:##|###)\s*(?:Summary|Rationale)\s*\n([\s\S]*?)(?=\n##|\n###|\n#|$)/i),c=[],l=o.match(/(?:##|###)\s*Feature Breakdown\s*\n([\s\S]*?)(?=\n##|\n###|\n#|$)/i);if(l){let e=l[1].split(`
|
|
14
14
|
`),t=``;for(let n of e){let e=n.match(/^\d+\.\s*(.*)$/);e?(t&&c.push(t),t=e[1].trim()):n.trim().startsWith(`-`)||n.trim().startsWith(`*`)||n.trim().startsWith(`•`)?t?t+=`
|
|
15
15
|
`+n.trim():c.push(n.trim().replace(/^[-*•]\s*/,``)):t&&n.trim()&&(t+=` `+n.trim())}t&&c.push(t)}let u=[],d=[],f=o.match(/(?:##|###)\s*Technical Detail & Open Questions\s*\n([\s\S]*?)(?=\n##|\n###|\n#|$)/i);if(f){let e=f[1].split(`
|
|
16
|
-
`);for(let t of e){let e=t.trim();e.startsWith(`- **Technical Detail**:`)?u.push(e.replace(/^[-*•]\s*\*\*Technical Detail\*\*:\s*/,``)):e.startsWith(`- **Open Question**:`)||e.startsWith(`* **Open Question**:`)||e.startsWith(`- **Open Questions**:`)||e.startsWith(`* **Open Questions**:`)?d.push(e.replace(/^[-*•]\s*\*\*Open Questions?\*\*:\s*/,``)):(e.startsWith(`- `)||e.startsWith(`* `)||e.startsWith(`• `))&&u.push(e.replace(/^[-*•]\s*/,``))}}let p=s?s[1].trim():!l&&!f&&o?o.trim():void 0,m=M(r.projectId??r.project)||M(1),h=m?.code||r.project||`Prof`,g=i.findIndex(e=>e.ticketId===n||e.number===a&&e.projectId===m?.id),_=g>=0?i[g]:void 0,v=o.match(/^#\s*(?:Ticket\s*#?\d+\s*:\s*|\d+\s*:\s*)?([^\n]+)/im),y=(r.title&&r.title.trim()||(v?v[1].trim():``)||_?.title||``).slice(0,48),b=o.match(/\*\*(?:Type|Category)\*\*:\s*([^\n]+)/i),x=r.type||r.category||(b?b[1].trim():void 0)||_?.type||_?.category||`Feature`,S=o.match(/\*\*Complexity\*\*:\s*([^\n]+)/i),C=r.complexity||(S?S[1].trim():void 0)||_?.complexity||`Medium`,w=o.match(/\*\*Estimated Effort\*\*:\s*([^\n]+)/i),T=r.estimatedEffort||(w?w[1].trim():void 0)||_?.estimatedEffort||`N/A`,ee=r.featureFlag||_?.featureFlag,te=r.status===`Completed`||r.status===void 0&&_?.isCompleted,E=r.status===`Rejected`||r.status===void 0&&_?.isRejected,ne={id:`feature-${h}-${a}`,number:a,ticketId:n,title:y,type:x,category:x,complexity:C,estimatedEffort:T,rationale:p||_?.rationale,breakdown:c.length>0?c:_?.breakdown||[],technicalDetails:u.length>0?u:_?.technicalDetails,openQuestions:d.length>0?d:_?.openQuestions,featureFlag:ee,projectId:m?.id,project:m?.name,isCompleted:te,isRejected:E,rawDetail:o||_?.rawDetail||void 0};g>=0?i[g]=ne:i.push(ne)}}return{plannedFeatures:i.sort((e,t)=>e.number-t.number),featureFlags:a,majorIdeas:o,rawMarkdown:e}}var nt=o((e=>{var t=Symbol.for(`react.transitional.element`),n=Symbol.for(`react.fragment`);function r(e,n,r){var i=null;if(r!==void 0&&(i=``+r),n.key!==void 0&&(i=``+n.key),`key`in n)for(var a in r={},n)a!==`key`&&(r[a]=n[a]);else r=n;return n=r.ref,{$$typeof:t,type:e,key:i,ref:n===void 0?null:n,props:r}}e.Fragment=n,e.jsx=r,e.jsxs=r})),P=o(((e,t)=>{t.exports=nt()}))(),rt=({isOpen:e,onClose:t,onConfirm:n,title:r,subtitle:i,message:a,confirmLabel:o=`Confirm`,cancelLabel:s=`Cancel`,variant:c=`warning`,icon:l,hideCancel:u=!1})=>{if((0,C.useEffect)(()=>{let n=e=>{e.key===`Escape`&&t()};return e&&window.addEventListener(`keydown`,n),()=>{window.removeEventListener(`keydown`,n)}},[e,t]),!e)return null;let d=(()=>{switch(c){case`danger`:return{iconBg:`bg-rose-500/10 border-rose-500/30 text-rose-400`,defaultIcon:(0,P.jsx)(D,{size:20}),confirmBtn:`bg-rose-600 hover:bg-rose-500 text-white shadow-rose-600/20`};case`success`:return{iconBg:`bg-emerald-500/10 border-emerald-500/30 text-emerald-400`,defaultIcon:(0,P.jsx)(oe,{size:20}),confirmBtn:`bg-emerald-600 hover:bg-emerald-500 text-white shadow-emerald-600/20`};case`info`:return{iconBg:`bg-[var(--accent-bg-subtle)] border-[var(--accent-border-subtle)] text-[var(--accent-primary)]`,defaultIcon:(0,P.jsx)(ye,{size:20}),confirmBtn:`bg-[var(--accent-primary)] hover:brightness-110 text-white shadow-lg shadow-[var(--accent-primary)]/20`};default:return{iconBg:`bg-amber-500/10 border-amber-500/30 text-amber-400`,defaultIcon:(0,P.jsx)(Ve,{size:20}),confirmBtn:`bg-[var(--accent-primary)] hover:brightness-110 text-white shadow-lg shadow-[var(--accent-primary)]/20`}}})();return(0,P.jsx)(`div`,{className:`fixed inset-0 bg-black/85 backdrop-blur-md z-[120] flex items-center justify-center p-4 animate-fade-in`,onClick:t,children:(0,P.jsxs)(`div`,{className:`bg-[var(--bg-surface)] border border-[var(--border-strong)] w-full max-w-md rounded-3xl p-6 shadow-2xl animate-in fade-in zoom-in-95 duration-200 text-[var(--text-primary)] space-y-5`,onClick:e=>e.stopPropagation(),children:[(0,P.jsxs)(`div`,{className:`flex items-start justify-between gap-3`,children:[(0,P.jsxs)(`div`,{className:`flex items-center gap-3`,children:[(0,P.jsx)(`div`,{className:`w-10 h-10 rounded-full border flex items-center justify-center shrink-0 ${d.iconBg}`,children:l||d.defaultIcon}),(0,P.jsxs)(`div`,{children:[(0,P.jsx)(`h3`,{className:`text-sm font-bold text-[var(--text-primary)]`,children:r}),i&&(0,P.jsx)(`p`,{className:`text-[10px] text-[var(--accent-primary)] font-mono`,children:i})]})]}),(0,P.jsx)(`button`,{type:`button`,onClick:t,className:`text-[var(--text-muted)] hover:text-[var(--text-primary)] p-1 rounded-lg hover:bg-[var(--bg-surface-elevated)] transition-colors cursor-pointer`,"aria-label":`Close dialog`,children:(0,P.jsx)(We,{size:18})})]}),(0,P.jsx)(`div`,{className:`text-xs text-[var(--text-secondary)] leading-relaxed whitespace-pre-wrap`,children:typeof a==`string`?(0,P.jsx)(`p`,{children:a}):a}),(0,P.jsxs)(`div`,{className:`flex flex-col-reverse sm:flex-row sm:justify-end gap-2.5 pt-2`,children:[!u&&(0,P.jsx)(`button`,{type:`button`,onClick:t,className:`w-full sm:w-auto px-4 py-2.5 rounded-xl bg-[var(--bg-input)] hover:bg-[var(--bg-surface-elevated)] border border-[var(--border-subtle)] text-[var(--text-secondary)] hover:text-[var(--text-primary)] text-xs font-semibold uppercase tracking-wider transition-all cursor-pointer min-h-[44px] flex items-center justify-center`,children:s}),(0,P.jsx)(`button`,{type:`button`,onClick:()=>{n&&n(),t()},className:`w-full sm:w-auto px-5 py-2.5 rounded-xl font-bold text-xs uppercase tracking-wider flex items-center justify-center gap-2 transition-all cursor-pointer shadow-lg min-h-[44px] ${d.confirmBtn}`,children:o})]})]})})},it=[{name:`Cyan`,badge:`border-cyan-500/30 bg-cyan-500/10 text-cyan-300`,dot:`bg-cyan-400`,border:`border-cyan-500/40`},{name:`Indigo`,badge:`border-indigo-500/30 bg-indigo-500/10 text-indigo-300`,dot:`bg-indigo-400`,border:`border-indigo-500/40`},{name:`Emerald`,badge:`border-emerald-500/30 bg-emerald-500/10 text-emerald-300`,dot:`bg-emerald-400`,border:`border-emerald-500/40`},{name:`Fuchsia`,badge:`border-fuchsia-500/30 bg-fuchsia-500/10 text-fuchsia-300`,dot:`bg-fuchsia-400`,border:`border-fuchsia-500/40`},{name:`Amber`,badge:`border-amber-500/30 bg-amber-500/10 text-amber-300`,dot:`bg-amber-400`,border:`border-amber-500/40`},{name:`Rose`,badge:`border-rose-500/30 bg-rose-500/10 text-rose-300`,dot:`bg-rose-400`,border:`border-rose-500/40`}],at=({isOpen:e,onClose:t,onCreated:n})=>{let[r,i]=(0,C.useState)(``),[a,o]=(0,C.useState)(``),[s,c]=(0,C.useState)(``),[l,u]=(0,C.useState)(0),[d,f]=(0,C.useState)(!1),[p,m]=(0,C.useState)(null),[h,g]=(0,C.useState)(!1),_=(0,C.useMemo)(()=>!!(r.trim()||a.trim()||s.trim()),[r,a,s]),v=(0,C.useCallback)(()=>{_?g(!0):t()},[_,t]);return(0,C.useEffect)(()=>{let e=e=>{e.key===`Escape`&&(h?g(!1):v())};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[h,v]),e?(0,P.jsxs)(`div`,{className:`fixed inset-0 z-[90] flex items-center justify-center p-4 bg-slate-950/80 backdrop-blur-md animate-fade-in`,onClick:v,children:[(0,P.jsxs)(`div`,{className:`w-full max-w-md bg-[var(--bg-surface-elevated)] border border-[var(--border-subtle)] rounded-2xl shadow-2xl overflow-hidden flex flex-col animate-scale-up`,onClick:e=>e.stopPropagation(),children:[(0,P.jsxs)(`div`,{className:`flex items-center justify-between p-4 border-b border-[var(--border-subtle)] bg-[var(--bg-surface)]`,children:[(0,P.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,P.jsx)(`div`,{className:`p-1.5 rounded-xl bg-[var(--accent-primary)]/10 text-[var(--accent-primary)]`,children:(0,P.jsx)(me,{size:18})}),(0,P.jsxs)(`div`,{children:[(0,P.jsx)(`h2`,{className:`text-sm font-bold text-[var(--text-primary)]`,children:`Add New Project`}),(0,P.jsxs)(`p`,{className:`text-[11px] text-[var(--text-muted)]`,children:[`Register a project with a 1-`,7,` char code`]})]})]}),(0,P.jsx)(`button`,{type:`button`,onClick:v,className:`p-1 text-[var(--text-muted)] hover:text-[var(--text-primary)] rounded-lg transition-colors cursor-pointer`,children:(0,P.jsx)(We,{size:18})})]}),(0,P.jsxs)(`form`,{onSubmit:async e=>{e.preventDefault();let i=r.trim();if(!i){m(`Project code is required.`);return}if(!RegExp(`^[a-zA-Z0-9]{1,7}$`).test(i)){m(`Project code must be 1 to 7 alphanumeric characters (e.g. CORE, ALCE, WEB).`);return}if(Xe.some(e=>e.toLowerCase()===i.toLowerCase())){m(`Project code '${i}' collides with an existing project (case-insensitive).`);return}let o=a.trim();if(!o){m(`Project name is required.`);return}if(o.length>48){m(`Project name cannot exceed 48 characters.`);return}m(null),f(!0);let c=it[l];try{let e=await fetch(`/api/planning/create-project`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({code:i,name:o,description:s.trim()||`${o} Project`,colors:c})});if(!e.ok){let t=await e.json();throw Error(t.error||`Failed to create project`)}let{project:r}=await e.json();qe.push(r),Xe.push(r.code),f(!1),n(r),t()}catch{let e={id:qe.length>0?Math.max(...qe.map(e=>e.id))+1:1,code:i,slug:o.toLowerCase().replace(/[^a-z0-9]+/g,`-`),name:o,description:s.trim()||`${o} Project`,colors:c};qe.push(e),Xe.push(e.code),f(!1),n(e),t()}},className:`p-4 space-y-3.5`,children:[p&&(0,P.jsx)(`div`,{className:`p-2.5 bg-rose-500/10 border border-rose-500/30 rounded-xl text-xs text-rose-300`,children:p}),(0,P.jsxs)(`div`,{className:`space-y-1`,children:[(0,P.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,P.jsxs)(`label`,{className:`text-xs font-bold text-[var(--text-primary)] flex items-center gap-1.5`,children:[(0,P.jsx)(me,{size:13,className:`text-[var(--accent-primary)]`}),` Project Code *`]}),(0,P.jsxs)(`span`,{className:`text-[10px] font-mono text-[var(--text-muted)]`,children:[r.length,`/`,7]})]}),(0,P.jsx)(`input`,{type:`text`,value:r,maxLength:7,onChange:e=>i(e.target.value.replace(/[^a-zA-Z0-9]/g,``)),placeholder:`e.g. CORE, ALCE, WEB`,className:`w-full p-2 bg-[var(--bg-input)] border border-[var(--border-subtle)] focus:border-[var(--border-accent)] rounded-xl text-xs font-mono font-bold text-[var(--text-primary)] placeholder-[var(--text-muted)] focus:outline-none`,required:!0,autoFocus:!0}),(0,P.jsxs)(`p`,{className:`text-[10px] text-[var(--text-muted)]`,children:[`Strictly 1 to `,7,` alphanumeric characters.`]})]}),(0,P.jsxs)(`div`,{className:`space-y-1`,children:[(0,P.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,P.jsxs)(`label`,{className:`text-xs font-bold text-[var(--text-primary)] flex items-center gap-1.5`,children:[(0,P.jsx)(A,{size:13,className:`text-[var(--accent-primary)]`}),` Project Name *`]}),(0,P.jsxs)(`span`,{className:`text-[10px] font-mono text-[var(--text-muted)]`,children:[a.length,`/`,48]})]}),(0,P.jsx)(`input`,{type:`text`,value:a,maxLength:48,onChange:e=>o(e.target.value),placeholder:`e.g. Hablaster Video Game`,className:`w-full p-2 bg-[var(--bg-input)] border border-[var(--border-subtle)] focus:border-[var(--border-accent)] rounded-xl text-xs text-[var(--text-primary)] placeholder-[var(--text-muted)] focus:outline-none`,required:!0})]}),(0,P.jsxs)(`div`,{className:`space-y-1`,children:[(0,P.jsx)(`label`,{className:`text-xs font-bold text-[var(--text-primary)]`,children:`Description`}),(0,P.jsx)(`input`,{type:`text`,value:s,maxLength:120,onChange:e=>c(e.target.value),placeholder:`Brief summary of repository or app`,className:`w-full p-2 bg-[var(--bg-input)] border border-[var(--border-subtle)] focus:border-[var(--border-accent)] rounded-xl text-xs text-[var(--text-primary)] placeholder-[var(--text-muted)] focus:outline-none`})]}),(0,P.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,P.jsxs)(`label`,{className:`text-xs font-bold text-[var(--text-primary)] flex items-center gap-1.5`,children:[(0,P.jsx)(Te,{size:13,className:`text-[var(--accent-primary)]`}),` Badge Color Palette`]}),(0,P.jsx)(`div`,{className:`grid grid-cols-3 gap-2`,children:it.map((e,t)=>(0,P.jsxs)(`button`,{type:`button`,onClick:()=>u(t),className:`p-2 rounded-xl border text-xs font-mono font-semibold flex items-center gap-1.5 transition-all cursor-pointer ${e.badge} ${l===t?`ring-2 ring-[var(--accent-primary)] shadow-md`:`opacity-70 hover:opacity-100`}`,children:[(0,P.jsx)(`span`,{className:`w-2 h-2 rounded-full ${e.dot} shrink-0`}),(0,P.jsx)(`span`,{children:e.name})]},e.name))})]}),(0,P.jsxs)(`div`,{className:`flex items-center justify-end gap-2 pt-2 border-t border-[var(--border-subtle)]`,children:[(0,P.jsx)(`button`,{type:`button`,onClick:v,className:`px-3 py-1.5 bg-slate-800 hover:bg-slate-700 text-slate-300 rounded-xl text-xs font-semibold transition-colors cursor-pointer`,children:`Cancel`}),(0,P.jsxs)(`button`,{type:`submit`,disabled:d||!r.trim()||!a.trim(),className:`px-3.5 py-1.5 bg-[var(--accent-primary)] hover:brightness-110 text-white rounded-xl text-xs font-semibold flex items-center gap-1.5 shadow-md transition-all disabled:opacity-50 cursor-pointer`,children:[(0,P.jsx)(Oe,{size:14}),(0,P.jsx)(`span`,{children:d?`Creating...`:`Create Project`})]})]})]})]}),(0,P.jsx)(rt,{isOpen:h,title:`Discard Unsaved Project?`,message:`You have entered project details. Are you sure you want to discard your changes?`,confirmLabel:`Discard`,cancelLabel:`Keep Editing`,variant:`danger`,onClose:()=>g(!1),onConfirm:()=>{g(!1),t()}})]}):null},ot=[{name:`Feature`,badgeClass:`border-indigo-500/30 bg-indigo-500/10 text-indigo-700 dark:text-indigo-300`,icon:(0,P.jsx)(Ie,{size:14,className:`text-indigo-600 dark:text-indigo-400`}),summary:`User-facing gameplay features, UI screens, calculators, and research tools.`,scope:`Enhancements that players interact with directly during day-to-day gameplay.`},{name:`Platform`,badgeClass:`border-cyan-500/30 bg-cyan-500/10 text-cyan-700 dark:text-cyan-300`,icon:(0,P.jsx)(le,{size:14,className:`text-cyan-600 dark:text-cyan-400`}),summary:`Core architecture, database/storage layers, schema migrations, CI/CD, and security.`,scope:`Foundational infrastructure that powers reliability, speed, and cross-project modularity.`},{name:`Tools`,badgeClass:`border-amber-500/30 bg-amber-500/10 text-amber-700 dark:text-amber-300`,icon:(0,P.jsx)(Ue,{size:14,className:`text-amber-600 dark:text-amber-400`}),summary:`Build tools, developer options, inspection utilities, benchmarks, test suites, and LLM agent skills.`,scope:`Internal tooling that accelerates developer workflows and pairs with LLM coding partners.`},{name:`Idea`,badgeClass:`border-purple-500/30 bg-purple-500/10 text-purple-700 dark:text-purple-300`,icon:(0,P.jsx)(xe,{size:14,className:`text-purple-600 dark:text-purple-400`}),summary:`Exploratory concepts, RFCs, and brainstorming proposals.`,scope:`Early-stage proposals requiring architectural definition or review before scheduling.`},{name:`Bug`,badgeClass:`border-rose-500/30 bg-rose-500/10 text-rose-700 dark:text-rose-300`,icon:(0,P.jsx)(ne,{size:14,className:`text-rose-600 dark:text-rose-400`}),summary:`Defect fixes, visual regression repairs, and calculation corrections.`,scope:`Resolving broken functionality, layout clipping, or unexpected application crashes.`}],st=[{name:`Planned`,color:`border-[var(--border-subtle)] bg-[var(--bg-surface)] text-[var(--text-secondary)]`,description:`Backlog ticket queued for future active planning and development.`},{name:`In Development`,color:`border-amber-500/40 bg-amber-500/10 text-amber-700 dark:text-amber-300 font-semibold`,description:`Actively being designed, developed, or verified by a developer or LLM agent.`},{name:`Completed`,color:`border-emerald-500/40 bg-emerald-500/10 text-emerald-700 dark:text-emerald-300 font-semibold`,description:`Shipped to production and verified against all automated test suites.`},{name:`Rejected`,color:`border-rose-500/40 bg-rose-500/10 text-rose-700 dark:text-rose-300 font-semibold`,description:`Dismissed or superseded proposal (preserved for historical traceability).`}],ct=[{level:`Low / Small`,hours:`0.5 – 2.0 hrs`,desc:`Single-component tweaks, localized CSS fixes, configuration updates.`},{level:`Medium`,hours:`2.0 – 5.0 hrs`,desc:`New modal dialogs, service integrations, multi-file refactoring.`},{level:`High / Large`,hours:`5.0 – 12.0+ hrs`,desc:`Architectural decoupling, dual-storage engines, major data migrations.`}],lt=({isOpen:e,onClose:t})=>((0,C.useEffect)(()=>{if(!e)return;let n=e=>{e.key===`Escape`&&t()};return window.addEventListener(`keydown`,n),()=>window.removeEventListener(`keydown`,n)},[e,t]),e?(0,P.jsx)(`div`,{id:`ticket-help-modal-overlay`,className:`fixed inset-0 z-50 bg-black/80 backdrop-blur-md flex items-center justify-center p-3 sm:p-4 animate-fade-in`,onClick:t,children:(0,P.jsxs)(`div`,{id:`ticket-help-modal-container`,className:`w-full max-w-2xl max-h-[90vh] bg-[var(--bg-surface)] border border-[var(--border-subtle)] rounded-2xl sm:rounded-3xl overflow-hidden shadow-2xl flex flex-col text-[var(--text-primary)] animate-scale-in`,onClick:e=>e.stopPropagation(),children:[(0,P.jsxs)(`div`,{className:`bg-[var(--bg-surface-elevated)] p-4 sm:p-5 border-b border-[var(--border-subtle)] flex items-center justify-between shrink-0`,children:[(0,P.jsxs)(`div`,{className:`flex items-center gap-3`,children:[(0,P.jsx)(`div`,{className:`w-10 h-10 rounded-2xl bg-[var(--accent-bg-subtle)] border border-[var(--accent-border-subtle)] flex items-center justify-center text-[var(--accent-primary)] shadow-inner shrink-0`,children:(0,P.jsx)(se,{size:20})}),(0,P.jsxs)(`div`,{children:[(0,P.jsx)(`h3`,{className:`text-base font-bold text-[var(--text-primary)]`,children:`Help & About`}),(0,P.jsx)(`p`,{className:`text-[11px] text-[var(--text-muted)]`,children:`Standard taxonomy, lifecycle workflows, sizing guidelines, and license disclosures`})]})]}),(0,P.jsx)(`button`,{type:`button`,onClick:t,className:`p-1.5 hover:bg-[var(--accent-bg-subtle)] text-[var(--text-muted)] hover:text-[var(--text-primary)] rounded-xl transition-colors cursor-pointer`,"aria-label":`Close Help Modal`,children:(0,P.jsx)(We,{size:18})})]}),(0,P.jsxs)(`div`,{className:`flex-1 overflow-y-auto p-4 sm:p-5 space-y-6 text-xs leading-relaxed`,children:[(0,P.jsxs)(`div`,{children:[(0,P.jsxs)(`div`,{className:`flex items-center gap-2 mb-3`,children:[(0,P.jsx)(be,{size:15,className:`text-[var(--accent-primary)]`}),(0,P.jsx)(`h4`,{className:`font-bold text-sm text-[var(--text-primary)]`,children:`Ticket Types (Types)`})]}),(0,P.jsx)(`div`,{className:`space-y-2.5`,children:ot.map(e=>(0,P.jsxs)(`div`,{className:`p-3 rounded-xl border border-[var(--border-subtle)] bg-[var(--bg-surface-elevated)] space-y-1.5`,children:[(0,P.jsxs)(`div`,{className:`flex items-center justify-between gap-2`,children:[(0,P.jsx)(`div`,{className:`flex items-center gap-1.5`,children:(0,P.jsxs)(`span`,{className:`inline-flex items-center gap-1 px-2 py-0.5 rounded-md text-[11px] font-bold border ${e.badgeClass}`,children:[e.icon,e.name]})}),(0,P.jsx)(`span`,{className:`text-[10px] font-mono text-[var(--text-muted)] truncate`,children:e.scope})]}),(0,P.jsx)(`p`,{className:`text-[var(--text-secondary)] text-[11px]`,children:e.summary})]},e.name))})]}),(0,P.jsxs)(`div`,{children:[(0,P.jsxs)(`div`,{className:`flex items-center gap-2 mb-3`,children:[(0,P.jsx)(k,{size:15,className:`text-[var(--accent-primary)]`}),(0,P.jsx)(`h4`,{className:`font-bold text-sm text-[var(--text-primary)]`,children:`Lifecycle Statuses`})]}),(0,P.jsx)(`div`,{className:`grid grid-cols-1 sm:grid-cols-2 gap-2.5`,children:st.map(e=>(0,P.jsxs)(`div`,{className:`p-2.5 rounded-xl border border-[var(--border-subtle)] bg-[var(--bg-surface-elevated)] space-y-1`,children:[(0,P.jsx)(`span`,{className:`inline-block px-2 py-0.5 rounded text-[10px] font-bold border ${e.color}`,children:e.name}),(0,P.jsx)(`p`,{className:`text-[11px] text-[var(--text-secondary)]`,children:e.description})]},e.name))})]}),(0,P.jsxs)(`div`,{children:[(0,P.jsxs)(`div`,{className:`flex items-center gap-2 mb-3`,children:[(0,P.jsx)(oe,{size:15,className:`text-[var(--accent-primary)]`}),(0,P.jsx)(`h4`,{className:`font-bold text-sm text-[var(--text-primary)]`,children:`Complexity & Effort Guidelines`})]}),(0,P.jsx)(`div`,{className:`grid grid-cols-1 sm:grid-cols-3 gap-2.5`,children:ct.map(e=>(0,P.jsxs)(`div`,{className:`p-2.5 rounded-xl border border-[var(--border-subtle)] bg-[var(--bg-surface-elevated)] space-y-1`,children:[(0,P.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,P.jsx)(`span`,{className:`font-bold text-[var(--text-primary)] text-xs`,children:e.level}),(0,P.jsx)(`span`,{className:`text-[10px] font-mono font-bold text-[var(--accent-primary)]`,children:e.hours})]}),(0,P.jsx)(`p`,{className:`text-[11px] text-[var(--text-muted)]`,children:e.desc})]},e.level))})]}),(0,P.jsxs)(`div`,{className:`p-3 bg-[var(--accent-bg-subtle)] border border-[var(--accent-border-subtle)] rounded-xl space-y-1 text-[11px] text-[var(--text-secondary)]`,children:[(0,P.jsxs)(`div`,{className:`flex items-center gap-1.5 text-[var(--accent-primary)] font-bold`,children:[(0,P.jsx)(Pe,{size:14}),(0,P.jsx)(`span`,{children:`Invariants & Agent Pairing Best Practices`})]}),(0,P.jsxs)(`ul`,{className:`list-disc list-inside space-y-0.5 text-[var(--text-secondary)] text-[10px] sm:text-[11px]`,children:[(0,P.jsxs)(`li`,{children:[(0,P.jsx)(`strong`,{children:`Title Limit`}),": Keep ticket titles strictly $\\le 48$ characters (`MAX_TICKET_TITLE_LENGTH = 48`)."]}),(0,P.jsxs)(`li`,{children:[(0,P.jsx)(`strong`,{children:`Summary`}),`: Write a clean 1–2 sentence elevator pitch explaining user benefit and motivation.`]}),(0,P.jsxs)(`li`,{children:[(0,P.jsx)(`strong`,{children:`Breakdown`}),`: Use clear numbered bullet points for feature requirements to guide implementation plans.`]})]})]}),(0,P.jsxs)(`div`,{className:`pt-2 border-t border-[var(--border-subtle)] space-y-3`,children:[(0,P.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,P.jsx)(ye,{size:15,className:`text-[var(--accent-primary)]`}),(0,P.jsx)(`h4`,{className:`font-bold text-sm text-[var(--text-primary)]`,children:`About & License Declarations`})]}),(0,P.jsxs)(`div`,{className:`p-3.5 rounded-xl border border-[var(--border-subtle)] bg-[var(--bg-surface-elevated)] space-y-3 text-[11px] text-[var(--text-secondary)]`,children:[(0,P.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,P.jsxs)(`div`,{children:[(0,P.jsx)(`span`,{className:`font-bold text-[var(--text-primary)] text-xs`,children:`Developer Planning & Ticketing Platform`}),(0,P.jsx)(`span`,{className:`text-[10px] text-[var(--text-muted)] font-mono ml-2`,children:`v0.1.0`})]}),(0,P.jsx)(`span`,{className:`px-2 py-0.5 rounded-full text-[10px] font-mono font-bold bg-emerald-500/10 border border-emerald-500/30 text-emerald-600 dark:text-emerald-400`,children:`MIT License`})]}),(0,P.jsx)(`p`,{className:`text-[var(--text-secondary)] text-[11px] leading-relaxed`,children:`Autonomous developer roadmap, ticketing engine, and Model Context Protocol (MCP) server for developers and LLM coding partners.`}),(0,P.jsxs)(`div`,{className:`pt-2.5 border-t border-[var(--border-subtle)] space-y-2`,children:[(0,P.jsx)(`span`,{className:`text-[10px] font-semibold text-[var(--text-muted)] uppercase tracking-wider block`,children:`Third-Party Component & Library Disclosures`}),(0,P.jsxs)(`div`,{className:`grid grid-cols-1 sm:grid-cols-2 gap-2 text-[10px] font-mono`,children:[(0,P.jsxs)(`div`,{className:`flex items-center justify-between p-2 rounded-lg bg-[var(--bg-input)] border border-[var(--border-subtle)] shadow-xs`,children:[(0,P.jsx)(`span`,{className:`text-[var(--text-primary)] font-medium`,children:`React & ReactDOM`}),(0,P.jsx)(`span`,{className:`text-emerald-600 dark:text-emerald-400 font-bold`,children:`MIT`})]}),(0,P.jsxs)(`div`,{className:`flex items-center justify-between p-2 rounded-lg bg-[var(--bg-input)] border border-[var(--border-subtle)] shadow-xs`,children:[(0,P.jsx)(`span`,{className:`text-[var(--text-primary)] font-medium`,children:`Lucide React`}),(0,P.jsx)(`span`,{className:`text-emerald-600 dark:text-emerald-400 font-bold`,children:`ISC`})]}),(0,P.jsxs)(`div`,{className:`flex items-center justify-between p-2 rounded-lg bg-[var(--bg-input)] border border-[var(--border-subtle)] shadow-xs`,children:[(0,P.jsx)(`span`,{className:`text-[var(--text-primary)] font-medium`,children:`Node.js Standard Lib`}),(0,P.jsx)(`span`,{className:`text-emerald-600 dark:text-emerald-400 font-bold`,children:`MIT / BSD`})]}),(0,P.jsxs)(`div`,{className:`flex items-center justify-between p-2 rounded-lg bg-[var(--bg-input)] border border-[var(--border-subtle)] shadow-xs`,children:[(0,P.jsx)(`span`,{className:`text-[var(--text-primary)] font-medium`,children:`TypeScript & Vite`}),(0,P.jsx)(`span`,{className:`text-emerald-600 dark:text-emerald-400 font-bold`,children:`Apache-2.0 / MIT`})]})]})]})]})]})]}),(0,P.jsx)(`div`,{className:`bg-[var(--bg-surface-elevated)] px-5 py-3 border-t border-[var(--border-subtle)] flex items-center justify-end`,children:(0,P.jsx)(`button`,{type:`button`,onClick:t,className:`px-4 py-1.5 bg-[var(--accent-primary)] hover:brightness-110 text-white text-xs font-semibold rounded-xl transition-all cursor-pointer shadow-sm`,children:`Got It`})})]})}):null),F={1:[`chat_enhanced`,`evolutions`,`multiple_teams`],2:[`frontend`,`components`,`styles`],3:[`guides`,`api_reference`,`tutorials`]},ut=({isOpen:e,onClose:t,onCreated:n,defaultAuthor:r=`Developer`,defaultProject:i,availableProjects:a,isEmbedded:o=!1})=>{let[s,c]=(0,C.useState)(``),[l,u]=(0,C.useState)(()=>i===void 0?void 0:M(i)?.id),[d,f]=(0,C.useState)(`Feature`),[p,m]=(0,C.useState)(`Medium`),[h,g]=(0,C.useState)(``),[_,v]=(0,C.useState)(``),[y,b]=(0,C.useState)(``),[x,S]=(0,C.useState)(``),[w,T]=(0,C.useState)(r),[ee,te]=(0,C.useState)(!1),[E,ne]=(0,C.useState)(!1),[re,ie]=(0,C.useState)(!1),[ae,D]=(0,C.useState)(!1),O=(0,C.useMemo)(()=>!!(s.trim()||_.trim()||y.trim()||x.trim()),[s,_,y,x]),k=(0,C.useCallback)(()=>{O?D(!0):t()},[O,t]);(0,C.useEffect)(()=>{let e=e=>{e.key===`Escape`&&(ae?D(!1):re?ie(!1):E?ne(!1):k())};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[ae,re,E,k]);let[ce,le]=(0,C.useState)(null);return C.useEffect(()=>{e&&u(i===void 0?void 0:M(i)?.id)},[e,i]),C.useEffect(()=>{let e=l===void 0?[]:F[l]||[];h&&!e.includes(h)&&g(``)},[l]),e?(0,P.jsxs)(`div`,{className:`fixed inset-0 z-50 flex items-center justify-center p-4 bg-slate-950/80 backdrop-blur-md animate-fade-in`,onClick:k,children:[(0,P.jsxs)(`div`,{className:`relative w-full max-w-2xl bg-[var(--bg-surface)] border border-[var(--border-subtle)] rounded-2xl shadow-2xl overflow-hidden flex flex-col max-h-[90vh] text-[var(--text-primary)]`,onClick:e=>e.stopPropagation(),children:[(0,P.jsxs)(`div`,{className:`flex items-center justify-between p-4 border-b border-[var(--border-subtle)] bg-[var(--bg-surface-elevated)]`,children:[(0,P.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,P.jsx)(`div`,{className:`p-2 bg-[var(--accent-bg-subtle)] text-[var(--accent-primary)] rounded-xl border border-[var(--accent-border-subtle)]`,children:(0,P.jsx)(Oe,{size:18})}),(0,P.jsxs)(`div`,{children:[(0,P.jsx)(`h3`,{className:`font-bold text-[var(--text-primary)] text-sm`,children:`Create New Developer Ticket`}),(0,P.jsx)(`p`,{className:`text-[11px] text-[var(--text-muted)]`,children:`Initialize a new ticket folder with metadata and specification`})]})]}),(0,P.jsx)(`button`,{type:`button`,onClick:k,className:`p-1.5 text-[var(--text-muted)] hover:text-[var(--text-primary)] hover:bg-[var(--accent-bg-subtle)] rounded-lg transition-colors cursor-pointer`,children:(0,P.jsx)(We,{size:18})})]}),(0,P.jsxs)(`form`,{onSubmit:async e=>{if(e.preventDefault(),!s.trim()){le(`Ticket title is required.`);return}if(l===void 0){le(`Project is required. Please select a project for this ticket.`);return}let i=j(l);if(!i){le(`Selected project is invalid or not registered.`);return}le(null),te(!0);try{let e=x.split(`
|
|
16
|
+
`);for(let t of e){let e=t.trim();e.startsWith(`- **Technical Detail**:`)?u.push(e.replace(/^[-*•]\s*\*\*Technical Detail\*\*:\s*/,``)):e.startsWith(`- **Open Question**:`)||e.startsWith(`* **Open Question**:`)||e.startsWith(`- **Open Questions**:`)||e.startsWith(`* **Open Questions**:`)?d.push(e.replace(/^[-*•]\s*\*\*Open Questions?\*\*:\s*/,``)):(e.startsWith(`- `)||e.startsWith(`* `)||e.startsWith(`• `))&&u.push(e.replace(/^[-*•]\s*/,``))}}let p=s?s[1].trim():!l&&!f&&o?o.trim():void 0,m=M(r.projectId??r.project)||M(1),h=m?.code||r.project||`Prof`,g=i.findIndex(e=>e.ticketId===n||e.number===a&&e.projectId===m?.id),_=g>=0?i[g]:void 0,v=o.match(/^#\s*(?:Ticket\s*#?\d+\s*:\s*|\d+\s*:\s*)?([^\n]+)/im),y=(r.title&&r.title.trim()||(v?v[1].trim():``)||_?.title||``).slice(0,48),b=o.match(/\*\*(?:Type|Category)\*\*:\s*([^\n]+)/i),x=r.type||r.category||(b?b[1].trim():void 0)||_?.type||_?.category||`Feature`,S=o.match(/\*\*Complexity\*\*:\s*([^\n]+)/i),C=r.complexity||(S?S[1].trim():void 0)||_?.complexity||`Medium`,w=o.match(/\*\*Estimated Effort\*\*:\s*([^\n]+)/i),T=r.estimatedEffort||(w?w[1].trim():void 0)||_?.estimatedEffort||`N/A`,ee=r.featureFlag||_?.featureFlag,te=r.status===`Completed`||r.status===void 0&&_?.isCompleted,E=r.status===`Rejected`||r.status===void 0&&_?.isRejected,ne={id:`feature-${h}-${a}`,number:a,ticketId:n,title:y,type:x,category:x,complexity:C,estimatedEffort:T,rationale:p||_?.rationale,breakdown:c.length>0?c:_?.breakdown||[],technicalDetails:u.length>0?u:_?.technicalDetails,openQuestions:d.length>0?d:_?.openQuestions,featureFlag:ee,projectId:m?.id,project:m?.name,isCompleted:te,isRejected:E,rawDetail:o||_?.rawDetail||void 0};g>=0?i[g]=ne:i.push(ne)}}return{plannedFeatures:i.sort((e,t)=>e.number-t.number),featureFlags:a,majorIdeas:o,rawMarkdown:e}}var nt=o((e=>{var t=Symbol.for(`react.transitional.element`),n=Symbol.for(`react.fragment`);function r(e,n,r){var i=null;if(r!==void 0&&(i=``+r),n.key!==void 0&&(i=``+n.key),`key`in n)for(var a in r={},n)a!==`key`&&(r[a]=n[a]);else r=n;return n=r.ref,{$$typeof:t,type:e,key:i,ref:n===void 0?null:n,props:r}}e.Fragment=n,e.jsx=r,e.jsxs=r})),P=o(((e,t)=>{t.exports=nt()}))(),rt=({isOpen:e,onClose:t,onConfirm:n,title:r,subtitle:i,message:a,confirmLabel:o=`Confirm`,cancelLabel:s=`Cancel`,variant:c=`warning`,icon:l,hideCancel:u=!1})=>{if((0,C.useEffect)(()=>{let n=e=>{e.key===`Escape`&&t()};return e&&window.addEventListener(`keydown`,n),()=>{window.removeEventListener(`keydown`,n)}},[e,t]),!e)return null;let d=(()=>{switch(c){case`danger`:return{iconBg:`bg-rose-500/10 border-rose-500/30 text-rose-400`,defaultIcon:(0,P.jsx)(D,{size:20}),confirmBtn:`bg-rose-600 hover:bg-rose-500 text-white shadow-rose-600/20`};case`success`:return{iconBg:`bg-emerald-500/10 border-emerald-500/30 text-emerald-400`,defaultIcon:(0,P.jsx)(oe,{size:20}),confirmBtn:`bg-emerald-600 hover:bg-emerald-500 text-white shadow-emerald-600/20`};case`info`:return{iconBg:`bg-[var(--accent-bg-subtle)] border-[var(--accent-border-subtle)] text-[var(--accent-primary)]`,defaultIcon:(0,P.jsx)(ye,{size:20}),confirmBtn:`bg-[var(--accent-primary)] hover:brightness-110 text-white shadow-lg shadow-[var(--accent-primary)]/20`};default:return{iconBg:`bg-amber-500/10 border-amber-500/30 text-amber-400`,defaultIcon:(0,P.jsx)(Ve,{size:20}),confirmBtn:`bg-[var(--accent-primary)] hover:brightness-110 text-white shadow-lg shadow-[var(--accent-primary)]/20`}}})();return(0,P.jsx)(`div`,{className:`fixed inset-0 bg-black/85 backdrop-blur-md z-[120] flex items-center justify-center p-4 animate-fade-in`,onClick:t,children:(0,P.jsxs)(`div`,{className:`bg-[var(--bg-surface)] border border-[var(--border-strong)] w-full max-w-md rounded-3xl p-6 shadow-2xl animate-in fade-in zoom-in-95 duration-200 text-[var(--text-primary)] space-y-5`,onClick:e=>e.stopPropagation(),children:[(0,P.jsxs)(`div`,{className:`flex items-start justify-between gap-3`,children:[(0,P.jsxs)(`div`,{className:`flex items-center gap-3`,children:[(0,P.jsx)(`div`,{className:`w-10 h-10 rounded-full border flex items-center justify-center shrink-0 ${d.iconBg}`,children:l||d.defaultIcon}),(0,P.jsxs)(`div`,{children:[(0,P.jsx)(`h3`,{className:`text-sm font-bold text-[var(--text-primary)]`,children:r}),i&&(0,P.jsx)(`p`,{className:`text-[10px] text-[var(--accent-primary)] font-mono`,children:i})]})]}),(0,P.jsx)(`button`,{type:`button`,onClick:t,className:`text-[var(--text-muted)] hover:text-[var(--text-primary)] p-1 rounded-lg hover:bg-[var(--bg-surface-elevated)] transition-colors cursor-pointer`,"aria-label":`Close dialog`,children:(0,P.jsx)(We,{size:18})})]}),(0,P.jsx)(`div`,{className:`text-xs text-[var(--text-secondary)] leading-relaxed whitespace-pre-wrap`,children:typeof a==`string`?(0,P.jsx)(`p`,{children:a}):a}),(0,P.jsxs)(`div`,{className:`flex flex-col-reverse sm:flex-row sm:justify-end gap-2.5 pt-2`,children:[!u&&(0,P.jsx)(`button`,{type:`button`,onClick:t,className:`w-full sm:w-auto px-4 py-2.5 rounded-xl bg-[var(--bg-input)] hover:bg-[var(--bg-surface-elevated)] border border-[var(--border-subtle)] text-[var(--text-secondary)] hover:text-[var(--text-primary)] text-xs font-semibold uppercase tracking-wider transition-all cursor-pointer min-h-[44px] flex items-center justify-center`,children:s}),(0,P.jsx)(`button`,{type:`button`,onClick:()=>{n&&n(),t()},className:`w-full sm:w-auto px-5 py-2.5 rounded-xl font-bold text-xs uppercase tracking-wider flex items-center justify-center gap-2 transition-all cursor-pointer shadow-lg min-h-[44px] ${d.confirmBtn}`,children:o})]})]})})},it=[{name:`Cyan`,badge:`border-cyan-500/30 bg-cyan-500/10 text-cyan-300`,dot:`bg-cyan-400`,border:`border-cyan-500/40`},{name:`Indigo`,badge:`border-indigo-500/30 bg-indigo-500/10 text-indigo-300`,dot:`bg-indigo-400`,border:`border-indigo-500/40`},{name:`Emerald`,badge:`border-emerald-500/30 bg-emerald-500/10 text-emerald-300`,dot:`bg-emerald-400`,border:`border-emerald-500/40`},{name:`Fuchsia`,badge:`border-fuchsia-500/30 bg-fuchsia-500/10 text-fuchsia-300`,dot:`bg-fuchsia-400`,border:`border-fuchsia-500/40`},{name:`Amber`,badge:`border-amber-500/30 bg-amber-500/10 text-amber-300`,dot:`bg-amber-400`,border:`border-amber-500/40`},{name:`Rose`,badge:`border-rose-500/30 bg-rose-500/10 text-rose-300`,dot:`bg-rose-400`,border:`border-rose-500/40`}],at=({isOpen:e,onClose:t,onCreated:n})=>{let[r,i]=(0,C.useState)(``),[a,o]=(0,C.useState)(``),[s,c]=(0,C.useState)(``),[l,u]=(0,C.useState)(0),[d,f]=(0,C.useState)(!1),[p,m]=(0,C.useState)(null),[h,g]=(0,C.useState)(!1),_=(0,C.useMemo)(()=>!!(r.trim()||a.trim()||s.trim()),[r,a,s]),v=(0,C.useCallback)(()=>{_?g(!0):t()},[_,t]);return(0,C.useEffect)(()=>{let e=e=>{e.key===`Escape`&&(h?g(!1):v())};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[h,v]),e?(0,P.jsxs)(`div`,{className:`fixed inset-0 z-[90] flex items-center justify-center p-4 bg-slate-950/80 backdrop-blur-md animate-fade-in`,onClick:v,children:[(0,P.jsxs)(`div`,{className:`w-full max-w-md bg-[var(--bg-surface-elevated)] border border-[var(--border-subtle)] rounded-2xl shadow-2xl overflow-hidden flex flex-col animate-scale-up`,onClick:e=>e.stopPropagation(),children:[(0,P.jsxs)(`div`,{className:`flex items-center justify-between p-4 border-b border-[var(--border-subtle)] bg-[var(--bg-surface)]`,children:[(0,P.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,P.jsx)(`div`,{className:`p-1.5 rounded-xl bg-[var(--accent-primary)]/10 text-[var(--accent-primary)]`,children:(0,P.jsx)(me,{size:18})}),(0,P.jsxs)(`div`,{children:[(0,P.jsx)(`h2`,{className:`text-sm font-bold text-[var(--text-primary)]`,children:`Add New Project`}),(0,P.jsxs)(`p`,{className:`text-[11px] text-[var(--text-muted)]`,children:[`Register a project with a 1-`,8,` char code`]})]})]}),(0,P.jsx)(`button`,{type:`button`,onClick:v,className:`p-1 text-[var(--text-muted)] hover:text-[var(--text-primary)] rounded-lg transition-colors cursor-pointer`,children:(0,P.jsx)(We,{size:18})})]}),(0,P.jsxs)(`form`,{onSubmit:async e=>{e.preventDefault();let i=r.trim();if(!i){m(`Project code is required.`);return}if(!RegExp(`^[a-zA-Z0-9]{1,8}$`).test(i)){m(`Project code must be 1 to 8 alphanumeric characters (e.g. CORE, ALCE, WEB).`);return}if(Xe.some(e=>e.toLowerCase()===i.toLowerCase())){m(`Project code '${i}' collides with an existing project (case-insensitive).`);return}let o=a.trim();if(!o){m(`Project name is required.`);return}if(o.length>48){m(`Project name cannot exceed 48 characters.`);return}m(null),f(!0);let c=it[l];try{let e=await fetch(`/api/planning/create-project`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({code:i,name:o,description:s.trim()||`${o} Project`,colors:c})});if(!e.ok){let t=await e.json();throw Error(t.error||`Failed to create project`)}let{project:r}=await e.json();qe.push(r),Xe.push(r.code),f(!1),n(r),t()}catch{let e={id:qe.length>0?Math.max(...qe.map(e=>e.id))+1:1,code:i,slug:o.toLowerCase().replace(/[^a-z0-9]+/g,`-`),name:o,description:s.trim()||`${o} Project`,colors:c};qe.push(e),Xe.push(e.code),f(!1),n(e),t()}},className:`p-4 space-y-3.5`,children:[p&&(0,P.jsx)(`div`,{className:`p-2.5 bg-rose-500/10 border border-rose-500/30 rounded-xl text-xs text-rose-300`,children:p}),(0,P.jsxs)(`div`,{className:`space-y-1`,children:[(0,P.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,P.jsxs)(`label`,{className:`text-xs font-bold text-[var(--text-primary)] flex items-center gap-1.5`,children:[(0,P.jsx)(me,{size:13,className:`text-[var(--accent-primary)]`}),` Project Code *`]}),(0,P.jsxs)(`span`,{className:`text-[10px] font-mono text-[var(--text-muted)]`,children:[r.length,`/`,8]})]}),(0,P.jsx)(`input`,{type:`text`,value:r,maxLength:8,onChange:e=>i(e.target.value.replace(/[^a-zA-Z0-9]/g,``)),placeholder:`e.g. CORE, ALCE, WEB`,className:`w-full p-2 bg-[var(--bg-input)] border border-[var(--border-subtle)] focus:border-[var(--border-accent)] rounded-xl text-xs font-mono font-bold text-[var(--text-primary)] placeholder-[var(--text-muted)] focus:outline-none`,required:!0,autoFocus:!0}),(0,P.jsxs)(`p`,{className:`text-[10px] text-[var(--text-muted)]`,children:[`Strictly 1 to `,8,` alphanumeric characters.`]})]}),(0,P.jsxs)(`div`,{className:`space-y-1`,children:[(0,P.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,P.jsxs)(`label`,{className:`text-xs font-bold text-[var(--text-primary)] flex items-center gap-1.5`,children:[(0,P.jsx)(A,{size:13,className:`text-[var(--accent-primary)]`}),` Project Name *`]}),(0,P.jsxs)(`span`,{className:`text-[10px] font-mono text-[var(--text-muted)]`,children:[a.length,`/`,48]})]}),(0,P.jsx)(`input`,{type:`text`,value:a,maxLength:48,onChange:e=>o(e.target.value),placeholder:`e.g. Hablaster Video Game`,className:`w-full p-2 bg-[var(--bg-input)] border border-[var(--border-subtle)] focus:border-[var(--border-accent)] rounded-xl text-xs text-[var(--text-primary)] placeholder-[var(--text-muted)] focus:outline-none`,required:!0})]}),(0,P.jsxs)(`div`,{className:`space-y-1`,children:[(0,P.jsx)(`label`,{className:`text-xs font-bold text-[var(--text-primary)]`,children:`Description`}),(0,P.jsx)(`input`,{type:`text`,value:s,maxLength:120,onChange:e=>c(e.target.value),placeholder:`Brief summary of repository or app`,className:`w-full p-2 bg-[var(--bg-input)] border border-[var(--border-subtle)] focus:border-[var(--border-accent)] rounded-xl text-xs text-[var(--text-primary)] placeholder-[var(--text-muted)] focus:outline-none`})]}),(0,P.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,P.jsxs)(`label`,{className:`text-xs font-bold text-[var(--text-primary)] flex items-center gap-1.5`,children:[(0,P.jsx)(Te,{size:13,className:`text-[var(--accent-primary)]`}),` Badge Color Palette`]}),(0,P.jsx)(`div`,{className:`grid grid-cols-3 gap-2`,children:it.map((e,t)=>(0,P.jsxs)(`button`,{type:`button`,onClick:()=>u(t),className:`p-2 rounded-xl border text-xs font-mono font-semibold flex items-center gap-1.5 transition-all cursor-pointer ${e.badge} ${l===t?`ring-2 ring-[var(--accent-primary)] shadow-md`:`opacity-70 hover:opacity-100`}`,children:[(0,P.jsx)(`span`,{className:`w-2 h-2 rounded-full ${e.dot} shrink-0`}),(0,P.jsx)(`span`,{children:e.name})]},e.name))})]}),(0,P.jsxs)(`div`,{className:`flex items-center justify-end gap-2 pt-2 border-t border-[var(--border-subtle)]`,children:[(0,P.jsx)(`button`,{type:`button`,onClick:v,className:`px-3 py-1.5 bg-slate-800 hover:bg-slate-700 text-slate-300 rounded-xl text-xs font-semibold transition-colors cursor-pointer`,children:`Cancel`}),(0,P.jsxs)(`button`,{type:`submit`,disabled:d||!r.trim()||!a.trim(),className:`px-3.5 py-1.5 bg-[var(--accent-primary)] hover:brightness-110 text-white rounded-xl text-xs font-semibold flex items-center gap-1.5 shadow-md transition-all disabled:opacity-50 cursor-pointer`,children:[(0,P.jsx)(Oe,{size:14}),(0,P.jsx)(`span`,{children:d?`Creating...`:`Create Project`})]})]})]})]}),(0,P.jsx)(rt,{isOpen:h,title:`Discard Unsaved Project?`,message:`You have entered project details. Are you sure you want to discard your changes?`,confirmLabel:`Discard`,cancelLabel:`Keep Editing`,variant:`danger`,onClose:()=>g(!1),onConfirm:()=>{g(!1),t()}})]}):null},ot=[{name:`Feature`,badgeClass:`border-indigo-500/30 bg-indigo-500/10 text-indigo-700 dark:text-indigo-300`,icon:(0,P.jsx)(Ie,{size:14,className:`text-indigo-600 dark:text-indigo-400`}),summary:`User-facing gameplay features, UI screens, calculators, and research tools.`,scope:`Enhancements that players interact with directly during day-to-day gameplay.`},{name:`Platform`,badgeClass:`border-cyan-500/30 bg-cyan-500/10 text-cyan-700 dark:text-cyan-300`,icon:(0,P.jsx)(le,{size:14,className:`text-cyan-600 dark:text-cyan-400`}),summary:`Core architecture, database/storage layers, schema migrations, CI/CD, and security.`,scope:`Foundational infrastructure that powers reliability, speed, and cross-project modularity.`},{name:`Tools`,badgeClass:`border-amber-500/30 bg-amber-500/10 text-amber-700 dark:text-amber-300`,icon:(0,P.jsx)(Ue,{size:14,className:`text-amber-600 dark:text-amber-400`}),summary:`Build tools, developer options, inspection utilities, benchmarks, test suites, and LLM agent skills.`,scope:`Internal tooling that accelerates developer workflows and pairs with LLM coding partners.`},{name:`Idea`,badgeClass:`border-purple-500/30 bg-purple-500/10 text-purple-700 dark:text-purple-300`,icon:(0,P.jsx)(xe,{size:14,className:`text-purple-600 dark:text-purple-400`}),summary:`Exploratory concepts, RFCs, and brainstorming proposals.`,scope:`Early-stage proposals requiring architectural definition or review before scheduling.`},{name:`Bug`,badgeClass:`border-rose-500/30 bg-rose-500/10 text-rose-700 dark:text-rose-300`,icon:(0,P.jsx)(ne,{size:14,className:`text-rose-600 dark:text-rose-400`}),summary:`Defect fixes, visual regression repairs, and calculation corrections.`,scope:`Resolving broken functionality, layout clipping, or unexpected application crashes.`}],st=[{name:`Planned`,color:`border-[var(--border-subtle)] bg-[var(--bg-surface)] text-[var(--text-secondary)]`,description:`Backlog ticket queued for future active planning and development.`},{name:`In Development`,color:`border-amber-500/40 bg-amber-500/10 text-amber-700 dark:text-amber-300 font-semibold`,description:`Actively being designed, developed, or verified by a developer or LLM agent.`},{name:`Completed`,color:`border-emerald-500/40 bg-emerald-500/10 text-emerald-700 dark:text-emerald-300 font-semibold`,description:`Shipped to production and verified against all automated test suites.`},{name:`Rejected`,color:`border-rose-500/40 bg-rose-500/10 text-rose-700 dark:text-rose-300 font-semibold`,description:`Dismissed or superseded proposal (preserved for historical traceability).`}],ct=[{level:`Low / Small`,hours:`0.5 – 2.0 hrs`,desc:`Single-component tweaks, localized CSS fixes, configuration updates.`},{level:`Medium`,hours:`2.0 – 5.0 hrs`,desc:`New modal dialogs, service integrations, multi-file refactoring.`},{level:`High / Large`,hours:`5.0 – 12.0+ hrs`,desc:`Architectural decoupling, dual-storage engines, major data migrations.`}],lt=({isOpen:e,onClose:t})=>((0,C.useEffect)(()=>{if(!e)return;let n=e=>{e.key===`Escape`&&t()};return window.addEventListener(`keydown`,n),()=>window.removeEventListener(`keydown`,n)},[e,t]),e?(0,P.jsx)(`div`,{id:`ticket-help-modal-overlay`,className:`fixed inset-0 z-50 bg-black/80 backdrop-blur-md flex items-center justify-center p-3 sm:p-4 animate-fade-in`,onClick:t,children:(0,P.jsxs)(`div`,{id:`ticket-help-modal-container`,className:`w-full max-w-2xl max-h-[90vh] bg-[var(--bg-surface)] border border-[var(--border-subtle)] rounded-2xl sm:rounded-3xl overflow-hidden shadow-2xl flex flex-col text-[var(--text-primary)] animate-scale-in`,onClick:e=>e.stopPropagation(),children:[(0,P.jsxs)(`div`,{className:`bg-[var(--bg-surface-elevated)] p-4 sm:p-5 border-b border-[var(--border-subtle)] flex items-center justify-between shrink-0`,children:[(0,P.jsxs)(`div`,{className:`flex items-center gap-3`,children:[(0,P.jsx)(`div`,{className:`w-10 h-10 rounded-2xl bg-[var(--accent-bg-subtle)] border border-[var(--accent-border-subtle)] flex items-center justify-center text-[var(--accent-primary)] shadow-inner shrink-0`,children:(0,P.jsx)(se,{size:20})}),(0,P.jsxs)(`div`,{children:[(0,P.jsx)(`h3`,{className:`text-base font-bold text-[var(--text-primary)]`,children:`Help & About`}),(0,P.jsx)(`p`,{className:`text-[11px] text-[var(--text-muted)]`,children:`Standard taxonomy, lifecycle workflows, sizing guidelines, and license disclosures`})]})]}),(0,P.jsx)(`button`,{type:`button`,onClick:t,className:`p-1.5 hover:bg-[var(--accent-bg-subtle)] text-[var(--text-muted)] hover:text-[var(--text-primary)] rounded-xl transition-colors cursor-pointer`,"aria-label":`Close Help Modal`,children:(0,P.jsx)(We,{size:18})})]}),(0,P.jsxs)(`div`,{className:`flex-1 overflow-y-auto p-4 sm:p-5 space-y-6 text-xs leading-relaxed`,children:[(0,P.jsxs)(`div`,{children:[(0,P.jsxs)(`div`,{className:`flex items-center gap-2 mb-3`,children:[(0,P.jsx)(be,{size:15,className:`text-[var(--accent-primary)]`}),(0,P.jsx)(`h4`,{className:`font-bold text-sm text-[var(--text-primary)]`,children:`Ticket Types (Types)`})]}),(0,P.jsx)(`div`,{className:`space-y-2.5`,children:ot.map(e=>(0,P.jsxs)(`div`,{className:`p-3 rounded-xl border border-[var(--border-subtle)] bg-[var(--bg-surface-elevated)] space-y-1.5`,children:[(0,P.jsxs)(`div`,{className:`flex items-center justify-between gap-2`,children:[(0,P.jsx)(`div`,{className:`flex items-center gap-1.5`,children:(0,P.jsxs)(`span`,{className:`inline-flex items-center gap-1 px-2 py-0.5 rounded-md text-[11px] font-bold border ${e.badgeClass}`,children:[e.icon,e.name]})}),(0,P.jsx)(`span`,{className:`text-[10px] font-mono text-[var(--text-muted)] truncate`,children:e.scope})]}),(0,P.jsx)(`p`,{className:`text-[var(--text-secondary)] text-[11px]`,children:e.summary})]},e.name))})]}),(0,P.jsxs)(`div`,{children:[(0,P.jsxs)(`div`,{className:`flex items-center gap-2 mb-3`,children:[(0,P.jsx)(k,{size:15,className:`text-[var(--accent-primary)]`}),(0,P.jsx)(`h4`,{className:`font-bold text-sm text-[var(--text-primary)]`,children:`Lifecycle Statuses`})]}),(0,P.jsx)(`div`,{className:`grid grid-cols-1 sm:grid-cols-2 gap-2.5`,children:st.map(e=>(0,P.jsxs)(`div`,{className:`p-2.5 rounded-xl border border-[var(--border-subtle)] bg-[var(--bg-surface-elevated)] space-y-1`,children:[(0,P.jsx)(`span`,{className:`inline-block px-2 py-0.5 rounded text-[10px] font-bold border ${e.color}`,children:e.name}),(0,P.jsx)(`p`,{className:`text-[11px] text-[var(--text-secondary)]`,children:e.description})]},e.name))})]}),(0,P.jsxs)(`div`,{children:[(0,P.jsxs)(`div`,{className:`flex items-center gap-2 mb-3`,children:[(0,P.jsx)(oe,{size:15,className:`text-[var(--accent-primary)]`}),(0,P.jsx)(`h4`,{className:`font-bold text-sm text-[var(--text-primary)]`,children:`Complexity & Effort Guidelines`})]}),(0,P.jsx)(`div`,{className:`grid grid-cols-1 sm:grid-cols-3 gap-2.5`,children:ct.map(e=>(0,P.jsxs)(`div`,{className:`p-2.5 rounded-xl border border-[var(--border-subtle)] bg-[var(--bg-surface-elevated)] space-y-1`,children:[(0,P.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,P.jsx)(`span`,{className:`font-bold text-[var(--text-primary)] text-xs`,children:e.level}),(0,P.jsx)(`span`,{className:`text-[10px] font-mono font-bold text-[var(--accent-primary)]`,children:e.hours})]}),(0,P.jsx)(`p`,{className:`text-[11px] text-[var(--text-muted)]`,children:e.desc})]},e.level))})]}),(0,P.jsxs)(`div`,{className:`p-3 bg-[var(--accent-bg-subtle)] border border-[var(--accent-border-subtle)] rounded-xl space-y-1 text-[11px] text-[var(--text-secondary)]`,children:[(0,P.jsxs)(`div`,{className:`flex items-center gap-1.5 text-[var(--accent-primary)] font-bold`,children:[(0,P.jsx)(Pe,{size:14}),(0,P.jsx)(`span`,{children:`Invariants & Agent Pairing Best Practices`})]}),(0,P.jsxs)(`ul`,{className:`list-disc list-inside space-y-0.5 text-[var(--text-secondary)] text-[10px] sm:text-[11px]`,children:[(0,P.jsxs)(`li`,{children:[(0,P.jsx)(`strong`,{children:`Title Limit`}),": Keep ticket titles strictly $\\le 48$ characters (`MAX_TICKET_TITLE_LENGTH = 48`)."]}),(0,P.jsxs)(`li`,{children:[(0,P.jsx)(`strong`,{children:`Summary`}),`: Write a clean 1–2 sentence elevator pitch explaining user benefit and motivation.`]}),(0,P.jsxs)(`li`,{children:[(0,P.jsx)(`strong`,{children:`Breakdown`}),`: Use clear numbered bullet points for feature requirements to guide implementation plans.`]})]})]}),(0,P.jsxs)(`div`,{className:`pt-2 border-t border-[var(--border-subtle)] space-y-3`,children:[(0,P.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,P.jsx)(ye,{size:15,className:`text-[var(--accent-primary)]`}),(0,P.jsx)(`h4`,{className:`font-bold text-sm text-[var(--text-primary)]`,children:`About & License Declarations`})]}),(0,P.jsxs)(`div`,{className:`p-3.5 rounded-xl border border-[var(--border-subtle)] bg-[var(--bg-surface-elevated)] space-y-3 text-[11px] text-[var(--text-secondary)]`,children:[(0,P.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,P.jsxs)(`div`,{children:[(0,P.jsx)(`span`,{className:`font-bold text-[var(--text-primary)] text-xs`,children:`Developer Planning & Ticketing Platform`}),(0,P.jsx)(`span`,{className:`text-[10px] text-[var(--text-muted)] font-mono ml-2`,children:`v0.1.0`})]}),(0,P.jsx)(`span`,{className:`px-2 py-0.5 rounded-full text-[10px] font-mono font-bold bg-emerald-500/10 border border-emerald-500/30 text-emerald-600 dark:text-emerald-400`,children:`MIT License`})]}),(0,P.jsx)(`p`,{className:`text-[var(--text-secondary)] text-[11px] leading-relaxed`,children:`Autonomous developer roadmap, ticketing engine, and Model Context Protocol (MCP) server for developers and LLM coding partners.`}),(0,P.jsxs)(`div`,{className:`pt-2.5 border-t border-[var(--border-subtle)] space-y-2`,children:[(0,P.jsx)(`span`,{className:`text-[10px] font-semibold text-[var(--text-muted)] uppercase tracking-wider block`,children:`Third-Party Component & Library Disclosures`}),(0,P.jsxs)(`div`,{className:`grid grid-cols-1 sm:grid-cols-2 gap-2 text-[10px] font-mono`,children:[(0,P.jsxs)(`div`,{className:`flex items-center justify-between p-2 rounded-lg bg-[var(--bg-input)] border border-[var(--border-subtle)] shadow-xs`,children:[(0,P.jsx)(`span`,{className:`text-[var(--text-primary)] font-medium`,children:`React & ReactDOM`}),(0,P.jsx)(`span`,{className:`text-emerald-600 dark:text-emerald-400 font-bold`,children:`MIT`})]}),(0,P.jsxs)(`div`,{className:`flex items-center justify-between p-2 rounded-lg bg-[var(--bg-input)] border border-[var(--border-subtle)] shadow-xs`,children:[(0,P.jsx)(`span`,{className:`text-[var(--text-primary)] font-medium`,children:`Lucide React`}),(0,P.jsx)(`span`,{className:`text-emerald-600 dark:text-emerald-400 font-bold`,children:`ISC`})]}),(0,P.jsxs)(`div`,{className:`flex items-center justify-between p-2 rounded-lg bg-[var(--bg-input)] border border-[var(--border-subtle)] shadow-xs`,children:[(0,P.jsx)(`span`,{className:`text-[var(--text-primary)] font-medium`,children:`Node.js Standard Lib`}),(0,P.jsx)(`span`,{className:`text-emerald-600 dark:text-emerald-400 font-bold`,children:`MIT / BSD`})]}),(0,P.jsxs)(`div`,{className:`flex items-center justify-between p-2 rounded-lg bg-[var(--bg-input)] border border-[var(--border-subtle)] shadow-xs`,children:[(0,P.jsx)(`span`,{className:`text-[var(--text-primary)] font-medium`,children:`TypeScript & Vite`}),(0,P.jsx)(`span`,{className:`text-emerald-600 dark:text-emerald-400 font-bold`,children:`Apache-2.0 / MIT`})]})]})]})]})]})]}),(0,P.jsx)(`div`,{className:`bg-[var(--bg-surface-elevated)] px-5 py-3 border-t border-[var(--border-subtle)] flex items-center justify-end`,children:(0,P.jsx)(`button`,{type:`button`,onClick:t,className:`px-4 py-1.5 bg-[var(--accent-primary)] hover:brightness-110 text-white text-xs font-semibold rounded-xl transition-all cursor-pointer shadow-sm`,children:`Got It`})})]})}):null),F={1:[`chat_enhanced`,`evolutions`,`multiple_teams`],2:[`frontend`,`components`,`styles`],3:[`guides`,`api_reference`,`tutorials`]},ut=({isOpen:e,onClose:t,onCreated:n,defaultAuthor:r=`Developer`,defaultProject:i,availableProjects:a,isEmbedded:o=!1})=>{let[s,c]=(0,C.useState)(``),[l,u]=(0,C.useState)(()=>i===void 0?void 0:M(i)?.id),[d,f]=(0,C.useState)(`Feature`),[p,m]=(0,C.useState)(`Medium`),[h,g]=(0,C.useState)(``),[_,v]=(0,C.useState)(``),[y,b]=(0,C.useState)(``),[x,S]=(0,C.useState)(``),[w,T]=(0,C.useState)(r),[ee,te]=(0,C.useState)(!1),[E,ne]=(0,C.useState)(!1),[re,ie]=(0,C.useState)(!1),[ae,D]=(0,C.useState)(!1),O=(0,C.useMemo)(()=>!!(s.trim()||_.trim()||y.trim()||x.trim()),[s,_,y,x]),k=(0,C.useCallback)(()=>{O?D(!0):t()},[O,t]);(0,C.useEffect)(()=>{let e=e=>{e.key===`Escape`&&(ae?D(!1):re?ie(!1):E?ne(!1):k())};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[ae,re,E,k]);let[ce,le]=(0,C.useState)(null);return C.useEffect(()=>{e&&u(i===void 0?void 0:M(i)?.id)},[e,i]),C.useEffect(()=>{let e=l===void 0?[]:F[l]||[];h&&!e.includes(h)&&g(``)},[l]),e?(0,P.jsxs)(`div`,{className:`fixed inset-0 z-50 flex items-center justify-center p-4 bg-slate-950/80 backdrop-blur-md animate-fade-in`,onClick:k,children:[(0,P.jsxs)(`div`,{className:`relative w-full max-w-2xl bg-[var(--bg-surface)] border border-[var(--border-subtle)] rounded-2xl shadow-2xl overflow-hidden flex flex-col max-h-[90vh] text-[var(--text-primary)]`,onClick:e=>e.stopPropagation(),children:[(0,P.jsxs)(`div`,{className:`flex items-center justify-between p-4 border-b border-[var(--border-subtle)] bg-[var(--bg-surface-elevated)]`,children:[(0,P.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,P.jsx)(`div`,{className:`p-2 bg-[var(--accent-bg-subtle)] text-[var(--accent-primary)] rounded-xl border border-[var(--accent-border-subtle)]`,children:(0,P.jsx)(Oe,{size:18})}),(0,P.jsxs)(`div`,{children:[(0,P.jsx)(`h3`,{className:`font-bold text-[var(--text-primary)] text-sm`,children:`Create New Developer Ticket`}),(0,P.jsx)(`p`,{className:`text-[11px] text-[var(--text-muted)]`,children:`Initialize a new ticket folder with metadata and specification`})]})]}),(0,P.jsx)(`button`,{type:`button`,onClick:k,className:`p-1.5 text-[var(--text-muted)] hover:text-[var(--text-primary)] hover:bg-[var(--accent-bg-subtle)] rounded-lg transition-colors cursor-pointer`,children:(0,P.jsx)(We,{size:18})})]}),(0,P.jsxs)(`form`,{onSubmit:async e=>{if(e.preventDefault(),!s.trim()){le(`Ticket title is required.`);return}if(l===void 0){le(`Project is required. Please select a project for this ticket.`);return}let i=j(l);if(!i){le(`Selected project is invalid or not registered.`);return}le(null),te(!0);try{let e=x.split(`
|
|
17
17
|
`).map(e=>e.trim()).filter(Boolean),a=await N.createTicket({title:s.trim(),projectId:i.id,project:i.name,type:d,category:d,complexity:p,featureFlag:h||void 0,rationale:_.trim(),breakdown:y.trim(),openQuestions:e,submittedBy:w.trim()||r||`Developer`});te(!1),n(a.ticketId,a.meta),t()}catch(e){console.error(`Failed to create ticket:`,e),le(e.message||`Failed to create ticket`),te(!1)}},className:`p-4 overflow-y-auto space-y-4 flex-1 font-sans bg-[var(--bg-app)]`,children:[ce&&(0,P.jsx)(`div`,{className:`p-3 bg-rose-500/15 border border-rose-500/30 rounded-xl text-xs text-rose-800 dark:text-rose-300`,children:ce}),(0,P.jsxs)(`div`,{className:`space-y-1`,children:[(0,P.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,P.jsxs)(`label`,{className:`text-xs font-bold text-[var(--text-primary)] flex items-center gap-1.5`,children:[(0,P.jsx)(A,{size:13,className:`text-[var(--accent-primary)]`}),` Ticket Title *`]}),(0,P.jsxs)(`span`,{className:`text-[10px] font-mono text-[var(--text-muted)]`,children:[s.length,`/48`]})]}),(0,P.jsx)(`input`,{type:`text`,value:s,maxLength:48,onChange:e=>c(e.target.value),placeholder:`e.g. Export User Settings & Cloud Backup Sync`,className:`w-full p-2.5 bg-[var(--bg-input)] border border-[var(--border-subtle)] focus:border-[var(--border-accent)] rounded-xl text-xs text-[var(--text-primary)] placeholder-[var(--text-muted)] focus:outline-none`,required:!0})]}),(0,P.jsxs)(`div`,{className:`grid grid-cols-1 sm:grid-cols-5 gap-2.5`,children:[(0,P.jsxs)(`div`,{className:`space-y-1`,children:[(0,P.jsxs)(`label`,{className:`text-xs font-bold text-[var(--text-primary)] flex items-center gap-1.5`,children:[(0,P.jsx)(me,{size:13,className:`text-[var(--accent-primary)]`}),` Project`]}),(0,P.jsxs)(`select`,{value:l===void 0?``:l,onChange:e=>{if(e.target.value===`__new__`){ne(!0);return}if(!e.target.value){u(void 0);return}u(Number(e.target.value))},className:`w-full p-2 bg-[var(--bg-input)] border border-[var(--border-subtle)] focus:border-[var(--border-accent)] rounded-xl text-xs text-[var(--text-primary)] focus:outline-none`,children:[l===void 0&&(0,P.jsx)(`option`,{value:``,className:`bg-[var(--bg-surface)] text-[var(--text-primary)]`,children:`Select a Project...`}),(a||qe).map(e=>(0,P.jsx)(`option`,{value:e.id,className:`bg-[var(--bg-surface)] text-[var(--text-primary)]`,children:e.name},e.id)),!o&&(0,P.jsx)(`option`,{value:`__new__`,className:`bg-[var(--bg-surface)] text-cyan-600 dark:text-cyan-400 font-semibold`,children:`+ New Project...`})]})]}),(0,P.jsxs)(`div`,{className:`space-y-1`,children:[(0,P.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,P.jsxs)(`label`,{className:`text-xs font-bold text-[var(--text-primary)] flex items-center gap-1.5`,children:[(0,P.jsx)(ze,{size:13,className:`text-[var(--accent-primary)]`}),` Type`]}),(0,P.jsx)(`button`,{type:`button`,onClick:()=>ie(!0),className:`text-[var(--text-muted)] hover:text-[var(--accent-primary)] transition-colors p-0.5 cursor-pointer`,title:`View Ticket Types Reference`,"aria-label":`View Ticket Types Reference`,children:(0,P.jsx)(se,{size:12})})]}),(0,P.jsxs)(`select`,{value:d,onChange:e=>f(e.target.value),className:`w-full p-2 bg-[var(--bg-input)] border border-[var(--border-subtle)] focus:border-[var(--border-accent)] rounded-xl text-xs text-[var(--text-primary)] focus:outline-none`,children:[(0,P.jsx)(`option`,{value:`Feature`,className:`bg-[var(--bg-surface)] text-[var(--text-primary)]`,children:`Feature`}),(0,P.jsx)(`option`,{value:`Platform`,className:`bg-[var(--bg-surface)] text-[var(--text-primary)]`,children:`Platform`}),(0,P.jsx)(`option`,{value:`Tools`,className:`bg-[var(--bg-surface)] text-[var(--text-primary)]`,children:`Tools`}),(0,P.jsx)(`option`,{value:`Idea`,className:`bg-[var(--bg-surface)] text-[var(--text-primary)]`,children:`Idea`}),(0,P.jsx)(`option`,{value:`Bug`,className:`bg-[var(--bg-surface)] text-[var(--text-primary)]`,children:`Bug`})]})]}),(0,P.jsxs)(`div`,{className:`space-y-1`,children:[(0,P.jsxs)(`label`,{className:`text-xs font-bold text-[var(--text-primary)] flex items-center gap-1.5`,children:[(0,P.jsx)(Ge,{size:13,className:`text-[var(--accent-primary)]`}),` Complexity`]}),(0,P.jsxs)(`select`,{value:p,onChange:e=>m(e.target.value),className:`w-full p-2 bg-[var(--bg-input)] border border-[var(--border-subtle)] focus:border-[var(--border-accent)] rounded-xl text-xs text-[var(--text-primary)] focus:outline-none`,children:[(0,P.jsx)(`option`,{value:`Low`,className:`bg-[var(--bg-surface)] text-[var(--text-primary)]`,children:`Low`}),(0,P.jsx)(`option`,{value:`Low-Medium`,className:`bg-[var(--bg-surface)] text-[var(--text-primary)]`,children:`Low-Medium`}),(0,P.jsx)(`option`,{value:`Medium`,className:`bg-[var(--bg-surface)] text-[var(--text-primary)]`,children:`Medium`}),(0,P.jsx)(`option`,{value:`High`,className:`bg-[var(--bg-surface)] text-[var(--text-primary)]`,children:`High`})]})]}),(0,P.jsxs)(`div`,{className:`space-y-1`,children:[(0,P.jsxs)(`label`,{className:`text-xs font-bold text-[var(--text-primary)] flex items-center gap-1.5`,children:[(0,P.jsx)(pe,{size:13,className:`text-purple-400`}),` Feature Flag`]}),(0,P.jsxs)(`select`,{value:h,onChange:e=>g(e.target.value),className:`w-full p-2 bg-[var(--bg-input)] border border-[var(--border-subtle)] focus:border-purple-500/50 rounded-xl text-xs text-purple-700 dark:text-purple-300 focus:outline-none`,children:[(0,P.jsx)(`option`,{value:``,className:`bg-[var(--bg-surface)] text-[var(--text-primary)]`,children:`None (Unflagged)`}),(l===void 0?[]:F[l]||[]).map(e=>(0,P.jsx)(`option`,{value:e,className:`bg-[var(--bg-surface)] text-[var(--text-primary)]`,children:e},e))]})]}),(0,P.jsxs)(`div`,{className:`space-y-1`,children:[(0,P.jsxs)(`label`,{className:`text-xs font-bold text-[var(--text-primary)] flex items-center gap-1.5`,children:[(0,P.jsx)(He,{size:13,className:`text-[var(--accent-primary)]`}),` Submitted By`]}),(0,P.jsx)(`input`,{type:`text`,value:w,onChange:e=>T(e.target.value),placeholder:`Developer name`,className:`w-full p-2 bg-[var(--bg-input)] border border-[var(--border-subtle)] focus:border-[var(--border-accent)] rounded-xl text-xs text-[var(--text-primary)] focus:outline-none`})]})]}),(0,P.jsxs)(`div`,{className:`space-y-1`,children:[(0,P.jsx)(`label`,{className:`text-xs font-bold text-[var(--text-primary)]`,children:`Summary / Rationale`}),(0,P.jsx)(`textarea`,{value:_,onChange:e=>v(e.target.value),placeholder:`Explain why this feature is valuable and what problem it solves...`,rows:3,className:`w-full p-2.5 bg-[var(--bg-input)] border border-[var(--border-subtle)] focus:border-[var(--border-accent)] rounded-xl text-xs text-[var(--text-primary)] placeholder-[var(--text-muted)] focus:outline-none resize-y`})]}),(0,P.jsxs)(`div`,{className:`space-y-1`,children:[(0,P.jsx)(`label`,{className:`text-xs font-bold text-[var(--text-primary)]`,children:`Feature Breakdown (One item per line or bullet)`}),(0,P.jsx)(`textarea`,{value:y,onChange:e=>b(e.target.value),placeholder:`1. Design database storage schema
|
|
18
18
|
2. Implement REST API endpoints
|
|
19
19
|
3. Add UI components and state management`,rows:3,className:`w-full p-2.5 bg-[var(--bg-input)] border border-[var(--border-subtle)] focus:border-[var(--border-accent)] rounded-xl text-xs text-[var(--text-primary)] placeholder-[var(--text-muted)] focus:outline-none resize-y font-mono`})]}),(0,P.jsxs)(`div`,{className:`space-y-1`,children:[(0,P.jsxs)(`label`,{className:`text-xs font-bold text-[var(--text-primary)] flex items-center gap-1.5`,children:[(0,P.jsx)(se,{size:13,className:`text-amber-500 dark:text-amber-400`}),` Initial Open Questions (One question per line)`]}),(0,P.jsx)(`textarea`,{value:x,onChange:e=>S(e.target.value),placeholder:`Should credentials be stored locally or synced remotely?
|
package/dist/web/index.html
CHANGED
|
@@ -9,8 +9,8 @@
|
|
|
9
9
|
<link rel="icon" type="image/png" sizes="32x32" href="./favicon-32x32.png" />
|
|
10
10
|
<link rel="icon" type="image/png" sizes="16x16" href="./favicon-16x16.png" />
|
|
11
11
|
<link rel="apple-touch-icon" sizes="180x180" href="./apple-touch-icon.png" />
|
|
12
|
-
<script type="module" crossorigin src="./assets/index-
|
|
13
|
-
<link rel="stylesheet" crossorigin href="./assets/index-
|
|
12
|
+
<script type="module" crossorigin src="./assets/index-YnX_BGF9.js"></script>
|
|
13
|
+
<link rel="stylesheet" crossorigin href="./assets/index-CfQ8qeBs.css">
|
|
14
14
|
</head>
|
|
15
15
|
<body class="bg-[#f1f5f9] text-slate-900 font-sans">
|
|
16
16
|
<div id="root"></div>
|
package/package.json
CHANGED
|
@@ -1,2 +0,0 @@
|
|
|
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-space-y-reverse:0;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-duration:initial;--tw-content:""}}}@layer theme{:root,:host{--font-sans:-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--color-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-amber-950:oklch(27.9% .077 45.635);--color-emerald-50:oklch(97.9% .021 166.113);--color-emerald-100:oklch(95% .052 163.051);--color-emerald-200:oklch(90.5% .093 164.15);--color-emerald-300:oklch(84.5% .143 164.978);--color-emerald-400:oklch(76.5% .177 163.223);--color-emerald-500:oklch(69.6% .17 162.48);--color-emerald-600:oklch(59.6% .145 163.225);--color-emerald-700:oklch(50.8% .118 165.612);--color-emerald-800:oklch(43.2% .095 166.913);--color-emerald-900:oklch(37.8% .077 168.94);--color-emerald-950:oklch(26.2% .051 172.552);--color-teal-50:oklch(98.4% .014 180.72);--color-teal-100:oklch(95.3% .051 180.801);--color-teal-200:oklch(91% .096 180.426);--color-teal-300:oklch(85.5% .138 181.071);--color-teal-500:oklch(70.4% .14 182.503);--color-teal-800:oklch(43.7% .078 188.216);--color-teal-950:oklch(27.7% .046 192.524);--color-cyan-100:oklch(95.6% .045 203.388);--color-cyan-200:oklch(91.7% .08 205.041);--color-cyan-300:oklch(86.5% .127 207.078);--color-cyan-400:oklch(78.9% .154 211.53);--color-cyan-500:oklch(71.5% .143 215.221);--color-cyan-600:oklch(60.9% .126 221.723);--color-cyan-700:oklch(52% .105 223.128);--color-cyan-950:oklch(30.2% .056 229.695);--color-sky-50:oklch(97.7% .013 236.62);--color-sky-100:oklch(95.1% .026 236.824);--color-sky-200:oklch(90.1% .058 230.902);--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-sky-900:oklch(39.1% .09 240.876);--color-sky-950:oklch(29.3% .066 243.157);--color-blue-100:oklch(93.2% .032 255.585);--color-blue-200:oklch(88.2% .059 254.128);--color-blue-300:oklch(80.9% .105 251.813);--color-blue-500:oklch(62.3% .214 259.815);--color-blue-950:oklch(28.2% .091 267.935);--color-indigo-50:oklch(96.2% .018 272.314);--color-indigo-100:oklch(93% .034 272.788);--color-indigo-200:oklch(87% .065 274.039);--color-indigo-300:oklch(78.5% .115 274.713);--color-indigo-400:oklch(67.3% .182 276.935);--color-indigo-500:oklch(58.5% .233 277.117);--color-indigo-600:oklch(51.1% .262 276.966);--color-indigo-700:oklch(45.7% .24 277.023);--color-indigo-900:oklch(35.9% .144 278.697);--color-indigo-950:oklch(25.7% .09 281.288);--color-purple-50:oklch(97.7% .014 308.299);--color-purple-100:oklch(94.6% .033 307.174);--color-purple-200:oklch(90.2% .063 306.703);--color-purple-300:oklch(82.7% .119 306.383);--color-purple-400:oklch(71.4% .203 305.504);--color-purple-500:oklch(62.7% .265 303.9);--color-purple-600:oklch(55.8% .288 302.321);--color-purple-700:oklch(49.6% .265 301.924);--color-purple-800:oklch(43.8% .218 303.724);--color-purple-900:oklch(38.1% .176 304.987);--color-purple-950:oklch(29.1% .149 302.717);--color-fuchsia-50:oklch(97.7% .017 320.058);--color-fuchsia-300:oklch(83.3% .145 321.434);--color-fuchsia-400:oklch(74% .238 322.16);--color-fuchsia-500:oklch(66.7% .295 322.15);--color-fuchsia-600:oklch(59.1% .293 322.896);--color-fuchsia-950:oklch(29.3% .136 325.661);--color-rose-50:oklch(96.9% .015 12.422);--color-rose-100:oklch(94.1% .03 12.58);--color-rose-200:oklch(89.2% .058 10.001);--color-rose-300:oklch(81% .117 11.638);--color-rose-400:oklch(71.2% .194 13.428);--color-rose-500:oklch(64.5% .246 16.439);--color-rose-600:oklch(58.6% .253 17.585);--color-rose-700:oklch(51.4% .222 16.935);--color-rose-800:oklch(45.5% .188 13.697);--color-rose-900:oklch(41% .159 10.272);--color-rose-950:oklch(27.1% .105 12.094);--color-slate-100:oklch(96.8% .007 247.896);--color-slate-200:oklch(92.9% .013 255.508);--color-slate-300:oklch(86.9% .022 252.894);--color-slate-400:oklch(70.4% .04 256.788);--color-slate-500:oklch(55.4% .046 257.417);--color-slate-600:oklch(44.6% .043 257.281);--color-slate-700:oklch(37.2% .044 257.287);--color-slate-800:oklch(27.9% .041 260.031);--color-slate-900:oklch(20.8% .042 265.755);--color-slate-950:oklch(12.9% .042 264.695);--color-black:#000;--color-white:#fff;--spacing:.25rem;--container-md:28rem;--container-2xl:42rem;--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);--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--tracking-tight:-.025em;--tracking-wider:.05em;--leading-tight:1.25;--leading-relaxed:1.625;--radius-md:.375rem;--radius-lg:.5rem;--radius-xl:.75rem;--radius-2xl:1rem;--radius-3xl:1.5rem;--animate-pulse:pulse 2s cubic-bezier(.4, 0, .6, 1) infinite;--blur-md:12px;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring:where(:not(iframe)){outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab, red, red)){::placeholder{color:color-mix(in oklab, currentcolor 50%, transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.pointer-events-none{pointer-events:none}.visible{visibility:visible}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.sticky{position:sticky}.inset-0{inset:0}.top-1\/2{top:50%}.top-2\.5{top:calc(var(--spacing) * 2.5)}.right-2\.5{right:calc(var(--spacing) * 2.5)}.left-3{left:calc(var(--spacing) * 3)}.z-10{z-index:10}.z-50{z-index:50}.z-\[60\]{z-index:60}.z-\[70\]{z-index:70}.z-\[80\]{z-index:80}.z-\[90\]{z-index:90}.z-\[120\]{z-index:120}.container{width:100%}@media (width>=40rem){.container{max-width:40rem}}@media (width>=48rem){.container{max-width:48rem}}@media (width>=64rem){.container{max-width:64rem}}@media (width>=80rem){.container{max-width:80rem}}@media (width>=96rem){.container{max-width:96rem}}.mx-0\.5{margin-inline:calc(var(--spacing) * .5)}.mx-auto{margin-inline:auto}.my-1{margin-block:var(--spacing)}.my-1\.5{margin-block:calc(var(--spacing) * 1.5)}.my-2{margin-block:calc(var(--spacing) * 2)}.my-3{margin-block:calc(var(--spacing) * 3)}.mt-0\.5{margin-top:calc(var(--spacing) * .5)}.mt-1{margin-top:var(--spacing)}.mt-2{margin-top:calc(var(--spacing) * 2)}.mt-2\.5{margin-top:calc(var(--spacing) * 2.5)}.mt-3{margin-top:calc(var(--spacing) * 3)}.mb-0\.5{margin-bottom:calc(var(--spacing) * .5)}.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)}.ml-2{margin-left:calc(var(--spacing) * 2)}.ml-4{margin-left:calc(var(--spacing) * 4)}.block{display:block}.contents{display:contents}.flex{display:flex}.grid{display:grid}.hidden{display:none}.hidden\!{display:none!important}.inline{display:inline}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.table{display:table}.h-1\.5{height:calc(var(--spacing) * 1.5)}.h-2{height:calc(var(--spacing) * 2)}.h-3\.5{height:calc(var(--spacing) * 3.5)}.h-7{height:calc(var(--spacing) * 7)}.h-10{height:calc(var(--spacing) * 10)}.h-12{height:calc(var(--spacing) * 12)}.h-\[20px\]{height:20px}.h-\[92vh\]{height:92vh}.h-full{height:100%}.h-screen{height:100vh}.max-h-24{max-height:calc(var(--spacing) * 24)}.max-h-36{max-height:calc(var(--spacing) * 36)}.max-h-60{max-height:calc(var(--spacing) * 60)}.max-h-72{max-height:calc(var(--spacing) * 72)}.max-h-96{max-height:calc(var(--spacing) * 96)}.max-h-\[90vh\]{max-height:90vh}.min-h-0{min-height:0}.min-h-\[44px\]{min-height:44px}.w-1{width:var(--spacing)}.w-1\.5{width:calc(var(--spacing) * 1.5)}.w-2{width:calc(var(--spacing) * 2)}.w-3{width:calc(var(--spacing) * 3)}.w-3\.5{width:calc(var(--spacing) * 3.5)}.w-5{width:calc(var(--spacing) * 5)}.w-7{width:calc(var(--spacing) * 7)}.w-10{width:calc(var(--spacing) * 10)}.w-44{width:calc(var(--spacing) * 44)}.w-48{width:calc(var(--spacing) * 48)}.w-52{width:calc(var(--spacing) * 52)}.w-80{width:calc(var(--spacing) * 80)}.w-\[20px\]{width:20px}.w-\[56px\]{width:56px}.w-\[60px\]{width:60px}.w-\[84px\]{width:84px}.w-\[95vw\]{width:95vw}.w-\[112px\]{width:112px}.w-full{width:100%}.w-screen{width:100vw}.max-w-2xl{max-width:var(--container-2xl)}.max-w-\[140px\]{max-width:140px}.max-w-md{max-width:var(--container-md)}.min-w-0{min-width:0}.flex-1{flex:1}.shrink-0{flex-shrink:0}.border-collapse{border-collapse:collapse}.-translate-x-1\/2{--tw-translate-x:calc(calc(1 / 2 * 100%) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.-translate-y-1\/2{--tw-translate-y:calc(calc(1 / 2 * 100%) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.-translate-y-full{--tw-translate-y:-100%;translate:var(--tw-translate-x) var(--tw-translate-y)}.rotate-90{rotate:90deg}.animate-pulse{animation:var(--animate-pulse)}.cursor-default{cursor:default}.cursor-ew-resize{cursor:ew-resize}.cursor-grab{cursor:grab}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.resize{resize:both}.resize-y{resize:vertical}.scrollbar-none{scrollbar-width:none}.scrollbar-thin{scrollbar-width:thin}.list-inside{list-style-position:inside}.list-disc{list-style-type:disc}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.items-start{align-items:flex-start}.items-stretch{align-items:stretch}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.justify-start{justify-content:flex-start}.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)}:where(.space-y-0\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * .5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * .5) * calc(1 - var(--tw-space-y-reverse)))}: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-3>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 3) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 3) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-3\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 3.5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 3.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)))}:where(.space-y-5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 5) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-6>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 6) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 6) * calc(1 - var(--tw-space-y-reverse)))}.self-stretch{align-self:stretch}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.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-3xl{border-radius:var(--radius-3xl)}.rounded-full{border-radius:2147483647px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.rounded-xl{border-radius:var(--radius-xl)}.rounded-t-xl{border-top-left-radius:var(--radius-xl);border-top-right-radius:var(--radius-xl)}.rounded-r{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.rounded-r-lg{border-top-right-radius:var(--radius-lg);border-bottom-right-radius:var(--radius-lg)}.border{border-style:var(--tw-border-style);border-width:1px}.border-0{border-style:var(--tw-border-style);border-width:0}.border-x{border-inline-style:var(--tw-border-style);border-inline-width:1px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-l-2{border-left-style:var(--tw-border-style);border-left-width:2px}.border-dashed{--tw-border-style:dashed;border-style:dashed}.border-\[var\(--accent-border-subtle\)\]{border-color:var(--accent-border-subtle)}.border-\[var\(--accent-primary\)\]{border-color:var(--accent-primary)}.border-\[var\(--border-accent\)\]{border-color:var(--border-accent)}.border-\[var\(--border-strong\)\]{border-color:var(--border-strong)}.border-\[var\(--border-subtle\)\],.border-\[var\(--border-subtle\)\]\/80{border-color:var(--border-subtle)}@supports (color:color-mix(in lab, red, red)){.border-\[var\(--border-subtle\)\]\/80{border-color:color-mix(in oklab, var(--border-subtle) 80%, transparent)}}.border-amber-200{border-color:var(--color-amber-200)}.border-amber-300{border-color:var(--color-amber-300)}.border-amber-500\/30{border-color:#f99c004d}@supports (color:color-mix(in lab, red, red)){.border-amber-500\/30{border-color:color-mix(in oklab, var(--color-amber-500) 30%, transparent)}}.border-amber-500\/40{border-color:#f99c0066}@supports (color:color-mix(in lab, red, red)){.border-amber-500\/40{border-color:color-mix(in oklab, var(--color-amber-500) 40%, transparent)}}.border-blue-300{border-color:var(--color-blue-300)}.border-cyan-300{border-color:var(--color-cyan-300)}.border-cyan-500\/30{border-color:#00b7d74d}@supports (color:color-mix(in lab, red, red)){.border-cyan-500\/30{border-color:color-mix(in oklab, var(--color-cyan-500) 30%, transparent)}}.border-cyan-500\/40{border-color:#00b7d766}@supports (color:color-mix(in lab, red, red)){.border-cyan-500\/40{border-color:color-mix(in oklab, var(--color-cyan-500) 40%, transparent)}}.border-emerald-200{border-color:var(--color-emerald-200)}.border-emerald-300{border-color:var(--color-emerald-300)}.border-emerald-500{border-color:var(--color-emerald-500)}.border-emerald-500\/30{border-color:#00bb7f4d}@supports (color:color-mix(in lab, red, red)){.border-emerald-500\/30{border-color:color-mix(in oklab, var(--color-emerald-500) 30%, transparent)}}.border-emerald-500\/40{border-color:#00bb7f66}@supports (color:color-mix(in lab, red, red)){.border-emerald-500\/40{border-color:color-mix(in oklab, var(--color-emerald-500) 40%, transparent)}}.border-fuchsia-300{border-color:var(--color-fuchsia-300)}.border-fuchsia-500\/30{border-color:#e12afb4d}@supports (color:color-mix(in lab, red, red)){.border-fuchsia-500\/30{border-color:color-mix(in oklab, var(--color-fuchsia-500) 30%, transparent)}}.border-fuchsia-500\/40{border-color:#e12afb66}@supports (color:color-mix(in lab, red, red)){.border-fuchsia-500\/40{border-color:color-mix(in oklab, var(--color-fuchsia-500) 40%, transparent)}}.border-indigo-200{border-color:var(--color-indigo-200)}.border-indigo-300{border-color:var(--color-indigo-300)}.border-indigo-400{border-color:var(--color-indigo-400)}.border-indigo-500\/30{border-color:#625fff4d}@supports (color:color-mix(in lab, red, red)){.border-indigo-500\/30{border-color:color-mix(in oklab, var(--color-indigo-500) 30%, transparent)}}.border-indigo-500\/40{border-color:#625fff66}@supports (color:color-mix(in lab, red, red)){.border-indigo-500\/40{border-color:color-mix(in oklab, var(--color-indigo-500) 40%, transparent)}}.border-purple-200{border-color:var(--color-purple-200)}.border-purple-300{border-color:var(--color-purple-300)}.border-purple-500\/30{border-color:#ac4bff4d}@supports (color:color-mix(in lab, red, red)){.border-purple-500\/30{border-color:color-mix(in oklab, var(--color-purple-500) 30%, transparent)}}.border-purple-500\/40{border-color:#ac4bff66}@supports (color:color-mix(in lab, red, red)){.border-purple-500\/40{border-color:color-mix(in oklab, var(--color-purple-500) 40%, transparent)}}.border-rose-200{border-color:var(--color-rose-200)}.border-rose-300{border-color:var(--color-rose-300)}.border-rose-500{border-color:var(--color-rose-500)}.border-rose-500\/30{border-color:#ff23574d}@supports (color:color-mix(in lab, red, red)){.border-rose-500\/30{border-color:color-mix(in oklab, var(--color-rose-500) 30%, transparent)}}.border-rose-500\/40{border-color:#ff235766}@supports (color:color-mix(in lab, red, red)){.border-rose-500\/40{border-color:color-mix(in oklab, var(--color-rose-500) 40%, transparent)}}.border-sky-200{border-color:var(--color-sky-200)}.border-sky-600{border-color:var(--color-sky-600)}.border-slate-200{border-color:var(--color-slate-200)}.border-slate-300{border-color:var(--color-slate-300)}.border-slate-800{border-color:var(--color-slate-800)}.border-slate-800\/80{border-color:#1d293dcc}@supports (color:color-mix(in lab, red, red)){.border-slate-800\/80{border-color:color-mix(in oklab, var(--color-slate-800) 80%, transparent)}}.border-teal-200{border-color:var(--color-teal-200)}.border-teal-300{border-color:var(--color-teal-300)}.border-transparent{border-color:#0000}.bg-\[\#f1f5f9\]{background-color:#f1f5f9}.bg-\[var\(--accent-bg-subtle\)\]{background-color:var(--accent-bg-subtle)}.bg-\[var\(--accent-primary\)\],.bg-\[var\(--accent-primary\)\]\/10{background-color:var(--accent-primary)}@supports (color:color-mix(in lab, red, red)){.bg-\[var\(--accent-primary\)\]\/10{background-color:color-mix(in oklab, var(--accent-primary) 10%, transparent)}}.bg-\[var\(--bg-app\)\]{background-color:var(--bg-app)}.bg-\[var\(--bg-input\)\]{background-color:var(--bg-input)}.bg-\[var\(--bg-main\)\]{background-color:var(--bg-main)}.bg-\[var\(--bg-surface\)\]{background-color:var(--bg-surface)}.bg-\[var\(--bg-surface-elevated\)\]{background-color:var(--bg-surface-elevated)}.bg-\[var\(--border-subtle\)\]{background-color:var(--border-subtle)}.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\/20{background-color:#f99c0033}@supports (color:color-mix(in lab, red, red)){.bg-amber-500\/20{background-color:color-mix(in oklab, var(--color-amber-500) 20%, transparent)}}.bg-black\/80{background-color:#000c}@supports (color:color-mix(in lab, red, red)){.bg-black\/80{background-color:color-mix(in oklab, var(--color-black) 80%, transparent)}}.bg-black\/85{background-color:#000000d9}@supports (color:color-mix(in lab, red, red)){.bg-black\/85{background-color:color-mix(in oklab, var(--color-black) 85%, transparent)}}.bg-blue-100{background-color:var(--color-blue-100)}.bg-cyan-100{background-color:var(--color-cyan-100)}.bg-cyan-400{background-color:var(--color-cyan-400)}.bg-cyan-500\/10{background-color:#00b7d71a}@supports (color:color-mix(in lab, red, red)){.bg-cyan-500\/10{background-color:color-mix(in oklab, var(--color-cyan-500) 10%, transparent)}}.bg-emerald-50{background-color:var(--color-emerald-50)}.bg-emerald-100{background-color:var(--color-emerald-100)}.bg-emerald-400{background-color:var(--color-emerald-400)}.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-fuchsia-50{background-color:var(--color-fuchsia-50)}.bg-fuchsia-400{background-color:var(--color-fuchsia-400)}.bg-fuchsia-500\/10{background-color:#e12afb1a}@supports (color:color-mix(in lab, red, red)){.bg-fuchsia-500\/10{background-color:color-mix(in oklab, var(--color-fuchsia-500) 10%, transparent)}}.bg-fuchsia-600{background-color:var(--color-fuchsia-600)}.bg-indigo-50{background-color:var(--color-indigo-50)}.bg-indigo-50\/50{background-color:#eef2ff80}@supports (color:color-mix(in lab, red, red)){.bg-indigo-50\/50{background-color:color-mix(in oklab, var(--color-indigo-50) 50%, transparent)}}.bg-indigo-400{background-color:var(--color-indigo-400)}.bg-indigo-500\/10{background-color:#625fff1a}@supports (color:color-mix(in lab, red, red)){.bg-indigo-500\/10{background-color:color-mix(in oklab, var(--color-indigo-500) 10%, transparent)}}.bg-indigo-600{background-color:var(--color-indigo-600)}.bg-purple-50{background-color:var(--color-purple-50)}.bg-purple-100{background-color:var(--color-purple-100)}.bg-purple-500\/10{background-color:#ac4bff1a}@supports (color:color-mix(in lab, red, red)){.bg-purple-500\/10{background-color:color-mix(in oklab, var(--color-purple-500) 10%, transparent)}}.bg-purple-600{background-color:var(--color-purple-600)}.bg-purple-600\/30{background-color:#9810fa4d}@supports (color:color-mix(in lab, red, red)){.bg-purple-600\/30{background-color:color-mix(in oklab, var(--color-purple-600) 30%, transparent)}}.bg-rose-50{background-color:var(--color-rose-50)}.bg-rose-100{background-color:var(--color-rose-100)}.bg-rose-400{background-color:var(--color-rose-400)}.bg-rose-500{background-color:var(--color-rose-500)}.bg-rose-500\/10{background-color:#ff23571a}@supports (color:color-mix(in lab, red, red)){.bg-rose-500\/10{background-color:color-mix(in oklab, var(--color-rose-500) 10%, transparent)}}.bg-rose-500\/15{background-color:#ff235726}@supports (color:color-mix(in lab, red, red)){.bg-rose-500\/15{background-color:color-mix(in oklab, var(--color-rose-500) 15%, transparent)}}.bg-rose-600{background-color:var(--color-rose-600)}.bg-sky-50{background-color:var(--color-sky-50)}.bg-sky-50\/50{background-color:#f0f9ff80}@supports (color:color-mix(in lab, red, red)){.bg-sky-50\/50{background-color:color-mix(in oklab, var(--color-sky-50) 50%, transparent)}}.bg-sky-100{background-color:var(--color-sky-100)}.bg-sky-600{background-color:var(--color-sky-600)}.bg-slate-100{background-color:var(--color-slate-100)}.bg-slate-400{background-color:var(--color-slate-400)}.bg-slate-800{background-color:var(--color-slate-800)}.bg-slate-950\/80{background-color:#020618cc}@supports (color:color-mix(in lab, red, red)){.bg-slate-950\/80{background-color:color-mix(in oklab, var(--color-slate-950) 80%, transparent)}}.bg-teal-50{background-color:var(--color-teal-50)}.bg-teal-100{background-color:var(--color-teal-100)}.bg-transparent{background-color:#0000}.object-contain{object-fit:contain}.p-0\.5{padding:calc(var(--spacing) * .5)}.p-1{padding:var(--spacing)}.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-6{padding:calc(var(--spacing) * 6)}.p-8{padding:calc(var(--spacing) * 8)}.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)}.pt-0{padding-top:0}.pt-0\.5{padding-top:calc(var(--spacing) * .5)}.pt-1{padding-top:var(--spacing)}.pt-2{padding-top:calc(var(--spacing) * 2)}.pt-2\.5{padding-top:calc(var(--spacing) * 2.5)}.pr-1{padding-right:var(--spacing)}.pr-1\.5{padding-right:calc(var(--spacing) * 1.5)}.pr-3{padding-right:calc(var(--spacing) * 3)}.pr-9{padding-right:calc(var(--spacing) * 9)}.pb-1{padding-bottom:var(--spacing)}.pb-1\.5{padding-bottom:calc(var(--spacing) * 1.5)}.pb-2{padding-bottom:calc(var(--spacing) * 2)}.pb-\[env\(safe-area-inset-bottom\)\]{padding-bottom:env(safe-area-inset-bottom)}.pl-2{padding-left:calc(var(--spacing) * 2)}.pl-3{padding-left:calc(var(--spacing) * 3)}.pl-4{padding-left:calc(var(--spacing) * 4)}.pl-9{padding-left:calc(var(--spacing) * 9)}.text-center{text-align:center}.text-left{text-align:left}.text-right{text-align:right}.align-top{vertical-align:top}.font-mono{font-family:var(--font-mono)}.font-sans{font-family:var(--font-sans)}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\[9px\]{font-size:9px}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.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-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-tight{--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.tracking-wider{--tw-tracking:var(--tracking-wider);letter-spacing:var(--tracking-wider)}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.text-\[var\(--accent-primary\)\]{color:var(--accent-primary)}.text-\[var\(--text-muted\)\]{color:var(--text-muted)}.text-\[var\(--text-primary\)\]{color:var(--text-primary)}.text-\[var\(--text-secondary\)\]{color:var(--text-secondary)}.text-amber-300{color:var(--color-amber-300)}.text-amber-400{color:var(--color-amber-400)}.text-amber-500{color:var(--color-amber-500)}.text-amber-600{color:var(--color-amber-600)}.text-amber-700{color:var(--color-amber-700)}.text-amber-800\/80{color:#953d00cc}@supports (color:color-mix(in lab, red, red)){.text-amber-800\/80{color:color-mix(in oklab, var(--color-amber-800) 80%, transparent)}}.text-amber-900{color:var(--color-amber-900)}.text-amber-950{color:var(--color-amber-950)}.text-blue-950{color:var(--color-blue-950)}.text-cyan-300{color:var(--color-cyan-300)}.text-cyan-600{color:var(--color-cyan-600)}.text-cyan-700{color:var(--color-cyan-700)}.text-cyan-950{color:var(--color-cyan-950)}.text-emerald-300{color:var(--color-emerald-300)}.text-emerald-400{color:var(--color-emerald-400)}.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-emerald-900{color:var(--color-emerald-900)}.text-emerald-950{color:var(--color-emerald-950)}.text-fuchsia-300{color:var(--color-fuchsia-300)}.text-fuchsia-950{color:var(--color-fuchsia-950)}.text-indigo-300{color:var(--color-indigo-300)}.text-indigo-400{color:var(--color-indigo-400)}.text-indigo-600{color:var(--color-indigo-600)}.text-indigo-700{color:var(--color-indigo-700)}.text-indigo-900{color:var(--color-indigo-900)}.text-indigo-950{color:var(--color-indigo-950)}.text-purple-200{color:var(--color-purple-200)}.text-purple-400{color:var(--color-purple-400)}.text-purple-600{color:var(--color-purple-600)}.text-purple-700{color:var(--color-purple-700)}.text-purple-800{color:var(--color-purple-800)}.text-purple-900{color:var(--color-purple-900)}.text-purple-950{color:var(--color-purple-950)}.text-rose-300{color:var(--color-rose-300)}.text-rose-400{color:var(--color-rose-400)}.text-rose-500{color:var(--color-rose-500)}.text-rose-600{color:var(--color-rose-600)}.text-rose-700{color:var(--color-rose-700)}.text-rose-800{color:var(--color-rose-800)}.text-rose-900{color:var(--color-rose-900)}.text-rose-950{color:var(--color-rose-950)}.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-sky-800\/80{color:#005986cc}@supports (color:color-mix(in lab, red, red)){.text-sky-800\/80{color:color-mix(in oklab, var(--color-sky-800) 80%, transparent)}}.text-sky-900{color:var(--color-sky-900)}.text-sky-950{color:var(--color-sky-950)}.text-slate-300{color:var(--color-slate-300)}.text-slate-700{color:var(--color-slate-700)}.text-slate-800{color:var(--color-slate-800)}.text-slate-900{color:var(--color-slate-900)}.text-teal-800{color:var(--color-teal-800)}.text-teal-950{color:var(--color-teal-950)}.text-white{color:var(--color-white)}.uppercase{text-transform:uppercase}.italic{font-style:italic}.line-through{text-decoration-line:line-through}.placeholder-\[var\(--text-muted\)\]::placeholder{color:var(--text-muted)}.placeholder-purple-400\/50::placeholder{color:#c07eff80}@supports (color:color-mix(in lab, red, red)){.placeholder-purple-400\/50::placeholder{color:color-mix(in oklab, var(--color-purple-400) 50%, transparent)}}.placeholder-slate-400::placeholder{color:var(--color-slate-400)}.accent-purple-500{accent-color:var(--color-purple-500)}.opacity-0{opacity:0}.opacity-40{opacity:.4}.opacity-50{opacity:.5}.opacity-70{opacity:.7}.shadow-\[var\(--accent-primary\)\]\/20{--tw-shadow-alpha:20%;--tw-shadow:var(--accent-primary);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.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-2xs{--tw-shadow:0 1px var(--tw-shadow-color,#0000000d);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-inner{--tw-shadow:inset 0 2px 4px 0 var(--tw-shadow-color,#0000000d);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-md{--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)}.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)}.shadow-xs{--tw-shadow:0 1px 2px 0 var(--tw-shadow-color,#0000000d);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-emerald-600\/20{--tw-shadow-color:#00976733}@supports (color:color-mix(in lab, red, red)){.shadow-emerald-600\/20{--tw-shadow-color:color-mix(in oklab, color-mix(in oklab, var(--color-emerald-600) 20%, transparent) var(--tw-shadow-alpha), transparent)}}.shadow-rose-600\/20{--tw-shadow-color:#e7004433}@supports (color:color-mix(in lab, red, red)){.shadow-rose-600\/20{--tw-shadow-color:color-mix(in oklab, color-mix(in oklab, var(--color-rose-600) 20%, transparent) var(--tw-shadow-alpha), transparent)}}.ring-\[var\(--accent-primary\)\]{--tw-ring-color:var(--accent-primary)}.ring-\[var\(--border-accent\)\]{--tw-ring-color:var(--border-accent)}.blur{--tw-blur:blur(8px);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,)}.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-md{--tw-backdrop-blur:blur(var(--blur-md));-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-opacity{transition-property:opacity;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))}.duration-200{--tw-duration:.2s;transition-duration:.2s}.select-none{-webkit-user-select:none;user-select:none}.select-text{-webkit-user-select:text;user-select:text}@media (hover:hover){.group-hover\:bg-\[var\(--accent-primary\)\]:is(:where(.group):hover *){background-color:var(--accent-primary)}.group-hover\:opacity-100:is(:where(.group):hover *),.group-hover\/author\:opacity-100:is(:where(.group\/author):hover *),.group-hover\/header\:opacity-100:is(:where(.group\/header):hover *){opacity:1}}.before\:font-bold:before{content:var(--tw-content);--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.before\:text-\[var\(--accent-primary\)\]:before{content:var(--tw-content);color:var(--accent-primary)}.before\:content-\[\"–\"\]:before{--tw-content:"–";content:var(--tw-content)}.before\:content-\[\"•\"\]:before{--tw-content:"•";content:var(--tw-content)}.last\:border-b-0:last-child{border-bottom-style:var(--tw-border-style);border-bottom-width:0}@media (hover:hover){.hover\:w-3:hover{width:calc(var(--spacing) * 3)}.hover\:border-\[var\(--border-accent\)\]:hover{border-color:var(--border-accent)}.hover\:border-\[var\(--border-strong\)\]:hover{border-color:var(--border-strong)}.hover\:bg-\[var\(--accent-bg-subtle\)\]:hover,.hover\:bg-\[var\(--accent-bg-subtle\)\]\/50:hover{background-color:var(--accent-bg-subtle)}@supports (color:color-mix(in lab, red, red)){.hover\:bg-\[var\(--accent-bg-subtle\)\]\/50:hover{background-color:color-mix(in oklab, var(--accent-bg-subtle) 50%, transparent)}}.hover\:bg-\[var\(--accent-bg-subtle\)\]\/80:hover{background-color:var(--accent-bg-subtle)}@supports (color:color-mix(in lab, red, red)){.hover\:bg-\[var\(--accent-bg-subtle\)\]\/80:hover{background-color:color-mix(in oklab, var(--accent-bg-subtle) 80%, transparent)}}.hover\:bg-\[var\(--bg-surface-elevated\)\]:hover{background-color:var(--bg-surface-elevated)}.hover\:bg-amber-100:hover{background-color:var(--color-amber-100)}.hover\:bg-amber-200\/70:hover{background-color:#fee685b3}@supports (color:color-mix(in lab, red, red)){.hover\:bg-amber-200\/70:hover{background-color:color-mix(in oklab, var(--color-amber-200) 70%, transparent)}}.hover\:bg-amber-500\/30:hover{background-color:#f99c004d}@supports (color:color-mix(in lab, red, red)){.hover\:bg-amber-500\/30:hover{background-color:color-mix(in oklab, var(--color-amber-500) 30%, transparent)}}.hover\:bg-blue-200\/70:hover{background-color:#bedbffb3}@supports (color:color-mix(in lab, red, red)){.hover\:bg-blue-200\/70:hover{background-color:color-mix(in oklab, var(--color-blue-200) 70%, transparent)}}.hover\:bg-cyan-200\/70:hover{background-color:#a2f4fdb3}@supports (color:color-mix(in lab, red, red)){.hover\:bg-cyan-200\/70:hover{background-color:color-mix(in oklab, var(--color-cyan-200) 70%, transparent)}}.hover\:bg-emerald-50:hover{background-color:var(--color-emerald-50)}.hover\:bg-emerald-100:hover{background-color:var(--color-emerald-100)}.hover\:bg-emerald-200\/70:hover{background-color:#a4f4cfb3}@supports (color:color-mix(in lab, red, red)){.hover\:bg-emerald-200\/70:hover{background-color:color-mix(in oklab, var(--color-emerald-200) 70%, transparent)}}.hover\:bg-emerald-500:hover{background-color:var(--color-emerald-500)}.hover\:bg-indigo-500:hover{background-color:var(--color-indigo-500)}.hover\:bg-purple-50:hover{background-color:var(--color-purple-50)}.hover\:bg-purple-100:hover{background-color:var(--color-purple-100)}.hover\:bg-purple-200\/70:hover{background-color:#e9d5ffb3}@supports (color:color-mix(in lab, red, red)){.hover\:bg-purple-200\/70:hover{background-color:color-mix(in oklab, var(--color-purple-200) 70%, transparent)}}.hover\:bg-purple-500\/10:hover{background-color:#ac4bff1a}@supports (color:color-mix(in lab, red, red)){.hover\:bg-purple-500\/10:hover{background-color:color-mix(in oklab, var(--color-purple-500) 10%, transparent)}}.hover\:bg-purple-500\/20:hover{background-color:#ac4bff33}@supports (color:color-mix(in lab, red, red)){.hover\:bg-purple-500\/20:hover{background-color:color-mix(in oklab, var(--color-purple-500) 20%, transparent)}}.hover\:bg-purple-600\/50:hover{background-color:#9810fa80}@supports (color:color-mix(in lab, red, red)){.hover\:bg-purple-600\/50:hover{background-color:color-mix(in oklab, var(--color-purple-600) 50%, transparent)}}.hover\:bg-rose-50:hover{background-color:var(--color-rose-50)}.hover\:bg-rose-200\/70:hover{background-color:#ffccd3b3}@supports (color:color-mix(in lab, red, red)){.hover\:bg-rose-200\/70:hover{background-color:color-mix(in oklab, var(--color-rose-200) 70%, transparent)}}.hover\:bg-rose-500:hover{background-color:var(--color-rose-500)}.hover\:bg-sky-100:hover{background-color:var(--color-sky-100)}.hover\:bg-sky-500:hover{background-color:var(--color-sky-500)}.hover\:bg-slate-100:hover{background-color:var(--color-slate-100)}.hover\:bg-slate-700:hover{background-color:var(--color-slate-700)}.hover\:bg-teal-200\/70:hover{background-color:#96f7e4b3}@supports (color:color-mix(in lab, red, red)){.hover\:bg-teal-200\/70:hover{background-color:color-mix(in oklab, var(--color-teal-200) 70%, transparent)}}.hover\:bg-white\/5:hover{background-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){.hover\:bg-white\/5:hover{background-color:color-mix(in oklab, var(--color-white) 5%, transparent)}}.hover\:text-\[var\(--accent-primary\)\]:hover{color:var(--accent-primary)}.hover\:text-\[var\(--text-primary\)\]:hover{color:var(--text-primary)}.hover\:text-purple-300:hover{color:var(--color-purple-300)}.hover\:text-purple-400:hover{color:var(--color-purple-400)}.hover\:text-rose-600:hover{color:var(--color-rose-600)}.hover\:text-sky-700:hover{color:var(--color-sky-700)}.hover\:underline:hover{text-decoration-line:underline}.hover\:opacity-100:hover{opacity:1}.hover\:shadow-sm:hover{--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)}.hover\:brightness-105:hover{--tw-brightness:brightness(105%);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,)}.hover\:brightness-110:hover{--tw-brightness:brightness(110%);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,)}.hover\:brightness-125:hover{--tw-brightness:brightness(125%);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,)}}.focus\:border-\[var\(--border-accent\)\]:focus{border-color:var(--border-accent)}.focus\:border-\[var\(--border-strong\)\]:focus{border-color:var(--border-strong)}.focus\:border-amber-500\/50:focus{border-color:#f99c0080}@supports (color:color-mix(in lab, red, red)){.focus\:border-amber-500\/50:focus{border-color:color-mix(in oklab, var(--color-amber-500) 50%, transparent)}}.focus\:border-purple-500:focus{border-color:var(--color-purple-500)}.focus\:border-purple-500\/50:focus{border-color:#ac4bff80}@supports (color:color-mix(in lab, red, red)){.focus\:border-purple-500\/50:focus{border-color:color-mix(in oklab, var(--color-purple-500) 50%, transparent)}}.focus\:border-sky-500:focus{border-color:var(--color-sky-500)}.focus\:ring-0:focus{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(0px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.focus\:outline-none:focus{--tw-outline-style:none;outline-style:none}.active\:cursor-grabbing:active{cursor:grabbing}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-40:disabled{opacity:.4}.disabled\:opacity-50:disabled{opacity:.5}@media (width>=40rem){.sm\:mt-0{margin-top:0}.sm\:hidden{display:none}.sm\:inline{display:inline}.sm\:w-96{width:calc(var(--spacing) * 96)}.sm\:w-auto{width:auto}.sm\:flex-1{flex:1}.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.sm\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.sm\:flex-col{flex-direction:column}.sm\:flex-row{flex-direction:row}.sm\:items-center{align-items:center}.sm\:items-end{align-items:flex-end}.sm\:justify-end{justify-content:flex-end}.sm\:gap-1\.5{gap:calc(var(--spacing) * 1.5)}.sm\:gap-2{gap:calc(var(--spacing) * 2)}.sm\:gap-3{gap:calc(var(--spacing) * 3)}.sm\:rounded-3xl{border-radius:var(--radius-3xl)}.sm\:border-t-0{border-top-style:var(--tw-border-style);border-top-width:0}.sm\:p-3{padding:calc(var(--spacing) * 3)}.sm\:p-4{padding:calc(var(--spacing) * 4)}.sm\:p-5{padding:calc(var(--spacing) * 5)}.sm\:px-2\.5{padding-inline:calc(var(--spacing) * 2.5)}.sm\:px-3{padding-inline:calc(var(--spacing) * 3)}.sm\:px-4{padding-inline:calc(var(--spacing) * 4)}.sm\:py-2{padding-block:calc(var(--spacing) * 2)}.sm\:pt-0{padding-top:0}.sm\:text-\[11px\]{font-size:11px}}@media (width>=48rem){.md\:flex{display:flex}.md\:hidden{display:none}.md\:h-full{height:100%}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:flex-row{flex-direction:row}.md\:gap-3{gap:calc(var(--spacing) * 3)}.md\:px-5{padding-inline:calc(var(--spacing) * 5)}.md\:py-3{padding-block:calc(var(--spacing) * 3)}}.dark\:border-amber-500\/30:where(.dark,.dark *){border-color:#f99c004d}@supports (color:color-mix(in lab, red, red)){.dark\:border-amber-500\/30:where(.dark,.dark *){border-color:color-mix(in oklab, var(--color-amber-500) 30%, transparent)}}.dark\:border-blue-500\/30:where(.dark,.dark *){border-color:#3080ff4d}@supports (color:color-mix(in lab, red, red)){.dark\:border-blue-500\/30:where(.dark,.dark *){border-color:color-mix(in oklab, var(--color-blue-500) 30%, transparent)}}.dark\:border-cyan-500\/30:where(.dark,.dark *){border-color:#00b7d74d}@supports (color:color-mix(in lab, red, red)){.dark\:border-cyan-500\/30:where(.dark,.dark *){border-color:color-mix(in oklab, var(--color-cyan-500) 30%, transparent)}}.dark\:border-emerald-500\/30:where(.dark,.dark *){border-color:#00bb7f4d}@supports (color:color-mix(in lab, red, red)){.dark\:border-emerald-500\/30:where(.dark,.dark *){border-color:color-mix(in oklab, var(--color-emerald-500) 30%, 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-fuchsia-500\/30:where(.dark,.dark *){border-color:#e12afb4d}@supports (color:color-mix(in lab, red, red)){.dark\:border-fuchsia-500\/30:where(.dark,.dark *){border-color:color-mix(in oklab, var(--color-fuchsia-500) 30%, transparent)}}.dark\:border-fuchsia-500\/40:where(.dark,.dark *){border-color:#e12afb66}@supports (color:color-mix(in lab, red, red)){.dark\:border-fuchsia-500\/40:where(.dark,.dark *){border-color:color-mix(in oklab, var(--color-fuchsia-500) 40%, transparent)}}.dark\:border-indigo-500\/20:where(.dark,.dark *){border-color:#625fff33}@supports (color:color-mix(in lab, red, red)){.dark\:border-indigo-500\/20:where(.dark,.dark *){border-color:color-mix(in oklab, var(--color-indigo-500) 20%, transparent)}}.dark\:border-indigo-500\/30:where(.dark,.dark *){border-color:#625fff4d}@supports (color:color-mix(in lab, red, red)){.dark\:border-indigo-500\/30:where(.dark,.dark *){border-color:color-mix(in oklab, var(--color-indigo-500) 30%, transparent)}}.dark\:border-indigo-500\/40:where(.dark,.dark *){border-color:#625fff66}@supports (color:color-mix(in lab, red, red)){.dark\:border-indigo-500\/40:where(.dark,.dark *){border-color:color-mix(in oklab, var(--color-indigo-500) 40%, transparent)}}.dark\:border-purple-500\/20:where(.dark,.dark *){border-color:#ac4bff33}@supports (color:color-mix(in lab, red, red)){.dark\:border-purple-500\/20:where(.dark,.dark *){border-color:color-mix(in oklab, var(--color-purple-500) 20%, transparent)}}.dark\:border-purple-500\/30:where(.dark,.dark *){border-color:#ac4bff4d}@supports (color:color-mix(in lab, red, red)){.dark\:border-purple-500\/30:where(.dark,.dark *){border-color:color-mix(in oklab, var(--color-purple-500) 30%, transparent)}}.dark\:border-purple-500\/40:where(.dark,.dark *){border-color:#ac4bff66}@supports (color:color-mix(in lab, red, red)){.dark\:border-purple-500\/40:where(.dark,.dark *){border-color:color-mix(in oklab, var(--color-purple-500) 40%, transparent)}}.dark\:border-rose-500\/30:where(.dark,.dark *){border-color:#ff23574d}@supports (color:color-mix(in lab, red, red)){.dark\:border-rose-500\/30:where(.dark,.dark *){border-color:color-mix(in oklab, var(--color-rose-500) 30%, transparent)}}.dark\:border-rose-500\/40:where(.dark,.dark *){border-color:#ff235766}@supports (color:color-mix(in lab, red, red)){.dark\:border-rose-500\/40:where(.dark,.dark *){border-color:color-mix(in oklab, var(--color-rose-500) 40%, transparent)}}.dark\:border-slate-600\/30:where(.dark,.dark *){border-color:#45556c4d}@supports (color:color-mix(in lab, red, red)){.dark\:border-slate-600\/30:where(.dark,.dark *){border-color:color-mix(in oklab, var(--color-slate-600) 30%, transparent)}}.dark\:border-slate-700\/40:where(.dark,.dark *){border-color:#31415866}@supports (color:color-mix(in lab, red, red)){.dark\:border-slate-700\/40:where(.dark,.dark *){border-color:color-mix(in oklab, var(--color-slate-700) 40%, transparent)}}.dark\:border-teal-500\/30:where(.dark,.dark *){border-color:#00baa74d}@supports (color:color-mix(in lab, red, red)){.dark\:border-teal-500\/30:where(.dark,.dark *){border-color:color-mix(in oklab, var(--color-teal-500) 30%, 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-blue-500\/20:where(.dark,.dark *){background-color:#3080ff33}@supports (color:color-mix(in lab, red, red)){.dark\:bg-blue-500\/20:where(.dark,.dark *){background-color:color-mix(in oklab, var(--color-blue-500) 20%, transparent)}}.dark\:bg-cyan-500\/20:where(.dark,.dark *){background-color:#00b7d733}@supports (color:color-mix(in lab, red, red)){.dark\:bg-cyan-500\/20:where(.dark,.dark *){background-color:color-mix(in oklab, var(--color-cyan-500) 20%, transparent)}}.dark\:bg-emerald-400:where(.dark,.dark *){background-color:var(--color-emerald-400)}.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-emerald-500\/20:where(.dark,.dark *){background-color:#00bb7f33}@supports (color:color-mix(in lab, red, red)){.dark\:bg-emerald-500\/20:where(.dark,.dark *){background-color:color-mix(in oklab, var(--color-emerald-500) 20%, transparent)}}.dark\:bg-emerald-950\/40:where(.dark,.dark *){background-color:#002c2266}@supports (color:color-mix(in lab, red, red)){.dark\:bg-emerald-950\/40:where(.dark,.dark *){background-color:color-mix(in oklab, var(--color-emerald-950) 40%, transparent)}}.dark\:bg-fuchsia-400:where(.dark,.dark *){background-color:var(--color-fuchsia-400)}.dark\:bg-fuchsia-500\/10:where(.dark,.dark *){background-color:#e12afb1a}@supports (color:color-mix(in lab, red, red)){.dark\:bg-fuchsia-500\/10:where(.dark,.dark *){background-color:color-mix(in oklab, var(--color-fuchsia-500) 10%, transparent)}}.dark\:bg-indigo-400:where(.dark,.dark *){background-color:var(--color-indigo-400)}.dark\:bg-indigo-500\/10:where(.dark,.dark *){background-color:#625fff1a}@supports (color:color-mix(in lab, red, red)){.dark\:bg-indigo-500\/10:where(.dark,.dark *){background-color:color-mix(in oklab, var(--color-indigo-500) 10%, transparent)}}.dark\:bg-indigo-500\/20:where(.dark,.dark *){background-color:#625fff33}@supports (color:color-mix(in lab, red, red)){.dark\:bg-indigo-500\/20:where(.dark,.dark *){background-color:color-mix(in oklab, var(--color-indigo-500) 20%, transparent)}}.dark\:bg-indigo-600:where(.dark,.dark *){background-color:var(--color-indigo-600)}.dark\:bg-indigo-600\/20:where(.dark,.dark *){background-color:#4f39f633}@supports (color:color-mix(in lab, red, red)){.dark\:bg-indigo-600\/20:where(.dark,.dark *){background-color:color-mix(in oklab, var(--color-indigo-600) 20%, transparent)}}.dark\:bg-indigo-600\/30:where(.dark,.dark *){background-color:#4f39f64d}@supports (color:color-mix(in lab, red, red)){.dark\:bg-indigo-600\/30:where(.dark,.dark *){background-color:color-mix(in oklab, var(--color-indigo-600) 30%, transparent)}}.dark\:bg-indigo-700:where(.dark,.dark *){background-color:var(--color-indigo-700)}.dark\:bg-indigo-950\/20:where(.dark,.dark *){background-color:#1e1a4d33}@supports (color:color-mix(in lab, red, red)){.dark\:bg-indigo-950\/20:where(.dark,.dark *){background-color:color-mix(in oklab, var(--color-indigo-950) 20%, transparent)}}.dark\:bg-purple-500\/20:where(.dark,.dark *){background-color:#ac4bff33}@supports (color:color-mix(in lab, red, red)){.dark\:bg-purple-500\/20:where(.dark,.dark *){background-color:color-mix(in oklab, var(--color-purple-500) 20%, transparent)}}.dark\:bg-purple-600\/30:where(.dark,.dark *){background-color:#9810fa4d}@supports (color:color-mix(in lab, red, red)){.dark\:bg-purple-600\/30:where(.dark,.dark *){background-color:color-mix(in oklab, var(--color-purple-600) 30%, transparent)}}.dark\:bg-purple-700:where(.dark,.dark *){background-color:var(--color-purple-700)}.dark\:bg-rose-500\/20:where(.dark,.dark *){background-color:#ff235733}@supports (color:color-mix(in lab, red, red)){.dark\:bg-rose-500\/20:where(.dark,.dark *){background-color:color-mix(in oklab, var(--color-rose-500) 20%, transparent)}}.dark\:bg-rose-950\/40:where(.dark,.dark *){background-color:#4d021866}@supports (color:color-mix(in lab, red, red)){.dark\:bg-rose-950\/40:where(.dark,.dark *){background-color:color-mix(in oklab, var(--color-rose-950) 40%, transparent)}}.dark\:bg-slate-800:where(.dark,.dark *){background-color:var(--color-slate-800)}.dark\:bg-slate-800\/40:where(.dark,.dark *){background-color:#1d293d66}@supports (color:color-mix(in lab, red, red)){.dark\:bg-slate-800\/40:where(.dark,.dark *){background-color:color-mix(in oklab, var(--color-slate-800) 40%, transparent)}}.dark\:bg-teal-500\/20:where(.dark,.dark *){background-color:#00baa733}@supports (color:color-mix(in lab, red, red)){.dark\:bg-teal-500\/20:where(.dark,.dark *){background-color:color-mix(in oklab, var(--color-teal-500) 20%, transparent)}}.dark\:text-\[var\(--accent-primary\)\]:where(.dark,.dark *){color:var(--accent-primary)}.dark\:text-\[var\(--text-muted\)\]:where(.dark,.dark *){color:var(--text-muted)}.dark\:text-amber-300:where(.dark,.dark *){color:var(--color-amber-300)}.dark\:text-amber-400:where(.dark,.dark *){color:var(--color-amber-400)}.dark\:text-amber-400\/80:where(.dark,.dark *){color:#fcbb00cc}@supports (color:color-mix(in lab, red, red)){.dark\:text-amber-400\/80:where(.dark,.dark *){color:color-mix(in oklab, var(--color-amber-400) 80%, transparent)}}.dark\:text-blue-300:where(.dark,.dark *){color:var(--color-blue-300)}.dark\:text-cyan-300:where(.dark,.dark *){color:var(--color-cyan-300)}.dark\:text-cyan-400:where(.dark,.dark *){color:var(--color-cyan-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-fuchsia-300:where(.dark,.dark *){color:var(--color-fuchsia-300)}.dark\:text-indigo-100:where(.dark,.dark *){color:var(--color-indigo-100)}.dark\:text-indigo-200:where(.dark,.dark *){color:var(--color-indigo-200)}.dark\:text-indigo-300:where(.dark,.dark *){color:var(--color-indigo-300)}.dark\:text-indigo-400:where(.dark,.dark *){color:var(--color-indigo-400)}.dark\:text-indigo-400\/80:where(.dark,.dark *){color:#7d87ffcc}@supports (color:color-mix(in lab, red, red)){.dark\:text-indigo-400\/80:where(.dark,.dark *){color:color-mix(in oklab, var(--color-indigo-400) 80%, transparent)}}.dark\:text-purple-100:where(.dark,.dark *){color:var(--color-purple-100)}.dark\:text-purple-200:where(.dark,.dark *){color:var(--color-purple-200)}.dark\:text-purple-300:where(.dark,.dark *){color:var(--color-purple-300)}.dark\:text-purple-400:where(.dark,.dark *){color:var(--color-purple-400)}.dark\:text-rose-300:where(.dark,.dark *){color:var(--color-rose-300)}.dark\:text-rose-400:where(.dark,.dark *){color:var(--color-rose-400)}.dark\:text-slate-400:where(.dark,.dark *){color:var(--color-slate-400)}.dark\:text-slate-600:where(.dark,.dark *){color:var(--color-slate-600)}.dark\:text-teal-300:where(.dark,.dark *){color:var(--color-teal-300)}.dark\:text-white:where(.dark,.dark *){color:var(--color-white)}.dark\:placeholder-slate-500:where(.dark,.dark *)::placeholder{color:var(--color-slate-500)}@media (hover:hover){.dark\:hover\:bg-amber-500\/30:where(.dark,.dark *):hover{background-color:#f99c004d}@supports (color:color-mix(in lab, red, red)){.dark\:hover\:bg-amber-500\/30:where(.dark,.dark *):hover{background-color:color-mix(in oklab, var(--color-amber-500) 30%, transparent)}}.dark\:hover\:bg-blue-500\/30:where(.dark,.dark *):hover{background-color:#3080ff4d}@supports (color:color-mix(in lab, red, red)){.dark\:hover\:bg-blue-500\/30:where(.dark,.dark *):hover{background-color:color-mix(in oklab, var(--color-blue-500) 30%, transparent)}}.dark\:hover\:bg-cyan-500\/30:where(.dark,.dark *):hover{background-color:#00b7d74d}@supports (color:color-mix(in lab, red, red)){.dark\:hover\:bg-cyan-500\/30:where(.dark,.dark *):hover{background-color:color-mix(in oklab, var(--color-cyan-500) 30%, transparent)}}.dark\:hover\:bg-emerald-500\/20:where(.dark,.dark *):hover{background-color:#00bb7f33}@supports (color:color-mix(in lab, red, red)){.dark\:hover\:bg-emerald-500\/20:where(.dark,.dark *):hover{background-color:color-mix(in oklab, var(--color-emerald-500) 20%, transparent)}}.dark\:hover\:bg-emerald-500\/30:where(.dark,.dark *):hover{background-color:#00bb7f4d}@supports (color:color-mix(in lab, red, red)){.dark\:hover\:bg-emerald-500\/30:where(.dark,.dark *):hover{background-color:color-mix(in oklab, var(--color-emerald-500) 30%, transparent)}}.dark\:hover\:bg-indigo-500:where(.dark,.dark *):hover{background-color:var(--color-indigo-500)}.dark\:hover\:bg-indigo-600\/30:where(.dark,.dark *):hover{background-color:#4f39f64d}@supports (color:color-mix(in lab, red, red)){.dark\:hover\:bg-indigo-600\/30:where(.dark,.dark *):hover{background-color:color-mix(in oklab, var(--color-indigo-600) 30%, transparent)}}.dark\:hover\:bg-indigo-600\/50:where(.dark,.dark *):hover{background-color:#4f39f680}@supports (color:color-mix(in lab, red, red)){.dark\:hover\:bg-indigo-600\/50:where(.dark,.dark *):hover{background-color:color-mix(in oklab, var(--color-indigo-600) 50%, transparent)}}.dark\:hover\:bg-purple-500\/20:where(.dark,.dark *):hover{background-color:#ac4bff33}@supports (color:color-mix(in lab, red, red)){.dark\:hover\:bg-purple-500\/20:where(.dark,.dark *):hover{background-color:color-mix(in oklab, var(--color-purple-500) 20%, transparent)}}.dark\:hover\:bg-purple-500\/30:where(.dark,.dark *):hover{background-color:#ac4bff4d}@supports (color:color-mix(in lab, red, red)){.dark\:hover\:bg-purple-500\/30:where(.dark,.dark *):hover{background-color:color-mix(in oklab, var(--color-purple-500) 30%, transparent)}}.dark\:hover\:bg-purple-600\/50:where(.dark,.dark *):hover{background-color:#9810fa80}@supports (color:color-mix(in lab, red, red)){.dark\:hover\:bg-purple-600\/50:where(.dark,.dark *):hover{background-color:color-mix(in oklab, var(--color-purple-600) 50%, transparent)}}.dark\:hover\:bg-rose-500\/20:where(.dark,.dark *):hover{background-color:#ff235733}@supports (color:color-mix(in lab, red, red)){.dark\:hover\:bg-rose-500\/20:where(.dark,.dark *):hover{background-color:color-mix(in oklab, var(--color-rose-500) 20%, transparent)}}.dark\:hover\:bg-rose-500\/30:where(.dark,.dark *):hover{background-color:#ff23574d}@supports (color:color-mix(in lab, red, red)){.dark\:hover\:bg-rose-500\/30:where(.dark,.dark *):hover{background-color:color-mix(in oklab, var(--color-rose-500) 30%, transparent)}}.dark\:hover\:bg-slate-900:where(.dark,.dark *):hover{background-color:var(--color-slate-900)}.dark\:hover\:bg-teal-500\/30:where(.dark,.dark *):hover{background-color:#00baa74d}@supports (color:color-mix(in lab, red, red)){.dark\:hover\:bg-teal-500\/30:where(.dark,.dark *):hover{background-color:color-mix(in oklab, var(--color-teal-500) 30%, transparent)}}.dark\:hover\:text-indigo-300:where(.dark,.dark *):hover{color:var(--color-indigo-300)}.dark\:hover\:text-rose-400:where(.dark,.dark *):hover{color:var(--color-rose-400)}}.dark\:focus\:border-indigo-500\/50:where(.dark,.dark *):focus{border-color:#625fff80}@supports (color:color-mix(in lab, red, red)){.dark\:focus\:border-indigo-500\/50:where(.dark,.dark *):focus{border-color:color-mix(in oklab, var(--color-indigo-500) 50%, transparent)}}}:root{--bg-main:#f8fafc;--bg-app:#f8fafc;--bg-card:#fff;--bg-surface:#fff;--bg-surface-elevated:#f1f5f9;--bg-input:#fff;--border-subtle:#e2e8f0;--border-strong:#cbd5e1;--border-accent:#0e749066;--accent-primary:#0284c7;--accent-bg-subtle:#0284c714;--accent-border-subtle:#0284c740;--text-primary:#0f172a;--text-secondary:#334155;--text-muted:#64748b;--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light}.dark{--bg-main:#060812;--bg-app:#060812;--bg-card:#0b0f19;--bg-surface:#0a0e1a;--bg-surface-elevated:#0f172a;--bg-input:#0b0f19;--border-subtle:#1e293b;--border-strong:#334155;--border-accent:#6366f180;--accent-primary:#818cf8;--accent-bg-subtle:#6366f11f;--accent-border-subtle:#6366f14d;--text-primary:#f8fafc;--text-secondary:#94a3b8;--text-muted:#64748b;--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}body{background-color:var(--bg-main);color:var(--text-primary);margin:0;padding:0;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif;overflow:hidden}::-webkit-scrollbar{width:6px;height:6px}::-webkit-scrollbar-track{background:0 0}::-webkit-scrollbar-thumb{background:#94a3b833;border-radius:9999px}::-webkit-scrollbar-thumb:hover{background:#94a3b859}@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-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-content{syntax:"*";inherits:false;initial-value:""}@keyframes pulse{50%{opacity:.5}}
|