@mediamonks/canopy-cli 0.7.36 → 0.7.37

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.
Files changed (35) hide show
  1. package/dist/{ai-DHLnyqfq.mjs → ai-CjvrcBIz.mjs} +2 -2
  2. package/dist/{api-C4rMhE7i.mjs → api-BPEYm9ts.mjs} +21 -0
  3. package/dist/{browse-Dycwj0V_.mjs → browse-CBelCgnW.mjs} +1 -1
  4. package/dist/{db-BB6O6085.mjs → db-CbqgjfYz.mjs} +159 -13
  5. package/dist/{deploy-Ka2lHkyy.mjs → deploy-CqCyry4o.mjs} +3 -3
  6. package/dist/{dev-BdXslHoA.mjs → dev-BtnEuAnS.mjs} +5 -5
  7. package/dist/dev-D_qzeLng.mjs +2 -0
  8. package/dist/docs/cli-db.md +30 -1
  9. package/dist/docs/data.md +11 -0
  10. package/dist/docs/platform-project-data.md +23 -3
  11. package/dist/{docs-Bb9hSk4h.mjs → docs-DvCUaI1O.mjs} +2 -2
  12. package/dist/{egress-If_Gsx_M.mjs → egress-ButFsQ2N.mjs} +2 -2
  13. package/dist/{feedback-DzEKQlP6.mjs → feedback-CIjjiEaj.mjs} +3 -3
  14. package/dist/index.mjs +30 -30
  15. package/dist/{local-Cyl39_Zu.mjs → local-BfqTheMP.mjs} +2 -2
  16. package/dist/{login-D0J5s_Ex.mjs → login-CtDWXICZ.mjs} +3 -3
  17. package/dist/{logs-DQQOawOG.mjs → logs-BltUi4Gp.mjs} +2 -2
  18. package/dist/{mcp-pNp-sbfJ.mjs → mcp-DTUJV4FT.mjs} +2 -2
  19. package/dist/{migrations-Czlcddyz.mjs → migrations-CF1iNZ7F.mjs} +1 -1
  20. package/dist/{open-DcaQKi1v.mjs → open-DXo60Ikf.mjs} +1 -1
  21. package/dist/{package-lYhex2Gp.mjs → package-BY69Tjq_.mjs} +1 -1
  22. package/dist/{projects-DQAhCZm8.mjs → projects-DPGRI-SI.mjs} +3 -3
  23. package/dist/{repo-Bb9ntNa4.mjs → repo-CKIQrrHK.mjs} +2 -2
  24. package/dist/repo-DvrIsubH.mjs +2 -0
  25. package/dist/{schedule-C5lMf3ny.mjs → schedule-DdMq5eXC.mjs} +2 -2
  26. package/dist/{secrets-BSEjZnxg.mjs → secrets-BQYaPSOT.mjs} +2 -2
  27. package/dist/{skill-BUA2uRR2.mjs → skill-B96cKy8K.mjs} +2 -2
  28. package/dist/{staging-BZVty57b.mjs → staging-CU4QrzFX.mjs} +2 -2
  29. package/dist/{token-HHlUR0CF.mjs → token-BWnLsWLg.mjs} +2 -2
  30. package/dist/{ui-C_jSc1Kz.mjs → ui-CHfKV6lG.mjs} +1 -1
  31. package/dist/{upgrade-ZSb56qBJ.mjs → upgrade-SfxmPh3F.mjs} +2 -2
  32. package/dist/{usage-CUYrWxv0.mjs → usage-Cqqvnzrf.mjs} +2 -2
  33. package/package.json +1 -1
  34. package/dist/dev-BeFX_wc5.mjs +0 -2
  35. package/dist/repo-1RQ1vBMv.mjs +0 -2
@@ -1,5 +1,5 @@
1
- import { i as apiRequest, o as withContext } from "./api-C4rMhE7i.mjs";
2
- import { r as reportErrors } from "./ui-C_jSc1Kz.mjs";
1
+ import { i as apiRequest, o as withContext } from "./api-BPEYm9ts.mjs";
2
+ import { r as reportErrors } from "./ui-CHfKV6lG.mjs";
3
3
  import { defineCommand } from "citty";
4
4
  //#region src/ai.ts
5
5
  /**
@@ -92,6 +92,26 @@ const ERROR_COPY = {
92
92
  why: "the description is invalid (at most 1000 characters)",
93
93
  fix: "Shorten the description to 1000 characters or fewer."
94
94
  },
95
+ user_session_required: {
96
+ why: "this needs your own sign-in, and a project-scoped token (dev, agent, worker, deploy) was used",
97
+ fix: "Run it yourself after `canopy login`, or use the dashboard."
98
+ },
99
+ invalid_retention: {
100
+ why: "retention must be a whole number of days from 1 to 365, or off",
101
+ fix: "Pass e.g. `--retention 30`, or `--retention off` to keep snapshots until deleted."
102
+ },
103
+ retention_shorter_than_schedule: {
104
+ why: "retention is shorter than the schedule, so some days would have no snapshot at all",
105
+ fix: "Use at least 1 day for a daily schedule and 7 for a weekly one."
106
+ },
107
+ invalid_schedule: {
108
+ why: "the schedule must be off, daily or weekly",
109
+ fix: "Pass `--schedule off`, `--schedule daily` or `--schedule weekly`."
110
+ },
111
+ invalid_retention_scope: {
112
+ why: "the retention scope must be all or scheduled",
113
+ fix: "Pass `--retention-scope all` (every snapshot) or `--retention-scope scheduled`."
114
+ },
95
115
  snapshot_not_found: {
96
116
  why: "no snapshot with that id exists for this project",
97
117
  fix: "Run `canopy db snapshots` to list available snapshots."
@@ -335,6 +355,7 @@ async function apiDataRequest(method, path, projectSlug, body, rawContentType, c
335
355
  body: body === void 0 ? void 0 : rawContentType !== void 0 ? body : JSON.stringify(body)
336
356
  });
337
357
  if (!response.ok) return fail(response, isDeployToken, method, path);
358
+ if (response.status === 204) return void 0;
338
359
  return await response.json();
339
360
  }
340
361
  //#endregion
@@ -1,5 +1,5 @@
1
1
  import { d as tryResolveProject, n as siteConfig } from "./site-DM2J10CB.mjs";
2
- import { i as apiRequest, t as ApiError } from "./api-C4rMhE7i.mjs";
2
+ import { i as apiRequest, t as ApiError } from "./api-BPEYm9ts.mjs";
3
3
  import { defineCommand } from "citty";
4
4
  //#region src/browse.ts
5
5
  /**
@@ -1,7 +1,7 @@
1
1
  import { c as resolveProject, o as projectFlagArgs } from "./site-DM2J10CB.mjs";
2
- import { i as apiRequest, n as apiDataRequest, o as withContext } from "./api-C4rMhE7i.mjs";
3
- import { a as unwrap, i as requireTty, r as reportErrors } from "./ui-C_jSc1Kz.mjs";
4
- import { n as migrateProject, r as readMigrationFiles, t as describeMigrateResult } from "./migrations-Czlcddyz.mjs";
2
+ import { i as apiRequest, n as apiDataRequest, o as withContext } from "./api-BPEYm9ts.mjs";
3
+ import { a as unwrap, i as requireTty, r as reportErrors } from "./ui-CHfKV6lG.mjs";
4
+ import { n as migrateProject, r as readMigrationFiles, t as describeMigrateResult } from "./migrations-CF1iNZ7F.mjs";
5
5
  import { defineCommand } from "citty";
6
6
  import { readFileSync, writeFileSync } from "node:fs";
7
7
  import * as p from "@clack/prompts";
@@ -12,7 +12,8 @@ import * as p from "@clack/prompts";
12
12
  *
13
13
  * pull download a fresh SQL dump of the project database
14
14
  * snapshot store a dump server-side (restorable from CLI or dashboard)
15
- * snapshots list stored snapshots
15
+ * snapshots list stored snapshots; `snapshots delete` and `snapshots settings`
16
+ * (schedule and retention, OpenSpec snapshot-schedules)
16
17
  * restore replace ALL project data from a snapshot or a local .sql file
17
18
  * migrate apply pending schema migrations (docs/13-migrations-and-drizzle.md)
18
19
  * access show or set what the app's pages may do with the database (docs/35)
@@ -84,25 +85,170 @@ const snapshotCommand = defineCommand({
84
85
  console.log(`Restore anytime with \`canopy db restore --snapshot ${created.key}\`.`);
85
86
  })
86
87
  });
87
- const snapshotsCommand = defineCommand({
88
+ /** `--retention`: a whole number of days, or off. Range is the server's call. */
89
+ function parseRetention(value) {
90
+ const v = value.trim().toLowerCase();
91
+ if (v === "off" || v === "none") return null;
92
+ if (!/^\d+$/.test(v)) throw new Error(`--retention takes a number of days or "off", not "${value}".`);
93
+ return Number(v);
94
+ }
95
+ const capitalize = (s) => s.charAt(0).toUpperCase() + s.slice(1);
96
+ /** One line on when scheduled snapshots happen, e.g. "daily at 03:00 UTC". */
97
+ function describeSchedule(settings) {
98
+ if (settings.schedule === "off") return "off";
99
+ const time = `${String(settings.slot.hour).padStart(2, "0")}:00 UTC`;
100
+ return settings.schedule === "weekly" && settings.slot.weekday ? `weekly on ${capitalize(settings.slot.weekday)} at ${time}` : `daily at ${time}`;
101
+ }
102
+ function describeRetention(settings) {
103
+ if (settings.retentionDays === null) return "off (snapshots are kept until deleted)";
104
+ const days = `${settings.retentionDays} day${settings.retentionDays === 1 ? "" : "s"}`;
105
+ return settings.retentionScope === "scheduled" ? `${days}, scheduled snapshots only` : `${days}, all snapshots (manual, scheduled, pre-migrate, pre-promote)`;
106
+ }
107
+ function describeLastRun(lastRun) {
108
+ if (!lastRun) return "never";
109
+ return lastRun.ok ? `${lastRun.at} — stored ${lastRun.detail ?? ""}`.trimEnd() : `${lastRun.at} — FAILED: ${lastRun.detail ?? "unknown error"}`;
110
+ }
111
+ function printSettings(slug, settings) {
112
+ console.log(`${slug} snapshot settings`);
113
+ console.log(` schedule ${describeSchedule(settings)}`);
114
+ console.log(` retention ${describeRetention(settings)}`);
115
+ if (settings.schedule !== "off" || settings.lastRun) console.log(` last run ${describeLastRun(settings.lastRun)}`);
116
+ }
117
+ let snapshotsSubcommandRan = false;
118
+ const snapshotsDeleteCommand = defineCommand({
88
119
  meta: {
89
- name: "snapshots",
90
- description: "List stored snapshots"
120
+ name: "delete",
121
+ description: "Delete a stored snapshot for good"
91
122
  },
92
123
  args: {
93
124
  ...projectFlagArgs,
94
- ...stagingFlagArgs
125
+ ...stagingFlagArgs,
126
+ key: {
127
+ type: "positional",
128
+ description: "Snapshot key (from `canopy db snapshots`)",
129
+ required: true
130
+ },
131
+ yes: {
132
+ type: "boolean",
133
+ default: false,
134
+ description: "Skip the confirmation"
135
+ }
136
+ },
137
+ run: reportErrors("db snapshots delete", async ({ args }) => {
138
+ snapshotsSubcommandRan = true;
139
+ const { slug } = resolveProject(args);
140
+ if (!args.yes) {
141
+ requireTty("pass --yes to delete without confirmation.");
142
+ if (!unwrap(await p.confirm({
143
+ message: `Delete snapshot ${args.key} of "${slug}"${channelNote(args)} for good? It can't be restored afterwards.`,
144
+ initialValue: false
145
+ }))) {
146
+ p.cancel("Aborted.");
147
+ return;
148
+ }
149
+ }
150
+ await withContext(apiDataRequest("DELETE", `/db/snapshots/${encodeURIComponent(args.key)}`, slug, void 0, void 0, channelOf(args)), { action: `delete snapshot ${args.key} of "${slug}"` });
151
+ p.log.success(`Deleted ${args.key}${channelNote(args)}.`);
152
+ })
153
+ });
154
+ const snapshotsSettingsCommand = defineCommand({
155
+ meta: {
156
+ name: "settings",
157
+ description: "Show or change the snapshot schedule and retention"
158
+ },
159
+ args: {
160
+ ...projectFlagArgs,
161
+ schedule: {
162
+ type: "string",
163
+ description: "off | daily | weekly"
164
+ },
165
+ retention: {
166
+ type: "string",
167
+ description: "Delete snapshots older than this many days (1–365), or off"
168
+ },
169
+ "retention-scope": {
170
+ type: "string",
171
+ description: "Which snapshots retention deletes: all (default) | scheduled"
172
+ },
173
+ yes: {
174
+ type: "boolean",
175
+ default: false,
176
+ description: "Don't ask before a retention change that deletes snapshots"
177
+ },
178
+ json: {
179
+ type: "boolean",
180
+ default: false,
181
+ description: "Print the settings as JSON"
182
+ }
95
183
  },
96
- run: reportErrors("db snapshots", async ({ args }) => {
184
+ run: reportErrors("db snapshots settings", async ({ args }) => {
185
+ snapshotsSubcommandRan = true;
97
186
  const { slug } = resolveProject(args);
98
- const { snapshots } = await apiDataRequest("GET", "/db/snapshots", slug, void 0, void 0, channelOf(args));
99
- if (snapshots.length === 0) {
100
- console.log(`No snapshots for ${slug} yet — run \`canopy db snapshot\`.`);
187
+ const path = `/projects/${slug}/snapshot-settings`;
188
+ const change = {};
189
+ if (args.schedule !== void 0) change.schedule = args.schedule.trim().toLowerCase();
190
+ if (args.retention !== void 0) change.retentionDays = parseRetention(args.retention);
191
+ if (args["retention-scope"] !== void 0) change.retentionScope = args["retention-scope"].trim().toLowerCase();
192
+ if (Object.keys(change).length === 0) {
193
+ const settings = await withContext(apiRequest("GET", path), { action: `read the snapshot settings of "${slug}"` });
194
+ if (args.json) console.log(JSON.stringify(settings, null, 2));
195
+ else printSettings(slug, settings);
196
+ return;
197
+ }
198
+ const context = { action: `change the snapshot settings of "${slug}"` };
199
+ const preview = await withContext(apiRequest("PUT", path, {
200
+ ...change,
201
+ dryRun: true
202
+ }), context);
203
+ if ((preview.wouldExpire ?? 0) > 0 && !args.yes) {
204
+ requireTty("pass --yes to apply a retention that deletes existing snapshots.");
205
+ const n = preview.wouldExpire;
206
+ if (!unwrap(await p.confirm({
207
+ message: `This deletes ${n} existing snapshot${n === 1 ? "" : "s"} of "${slug}" within the hour. Continue?`,
208
+ initialValue: false
209
+ }))) {
210
+ p.cancel("Aborted.");
211
+ return;
212
+ }
213
+ }
214
+ const settings = await withContext(apiRequest("PUT", path, change), context);
215
+ if (args.json) {
216
+ console.log(JSON.stringify(settings, null, 2));
101
217
  return;
102
218
  }
103
- for (const snapshot of snapshots) console.log(`${snapshot.key} ${formatSize(snapshot.size).padStart(9)} ${snapshot.createdAt}`);
219
+ printSettings(slug, settings);
220
+ if ((settings.wouldExpire ?? 0) > 0) console.log(`\n${settings.wouldExpire} snapshot(s) past retention will be deleted within the hour.`);
104
221
  })
105
222
  });
223
+ const listSnapshotsRun = reportErrors("db snapshots", async ({ args }) => {
224
+ const { slug } = resolveProject(args);
225
+ const [{ snapshots }, settings] = await Promise.all([apiDataRequest("GET", "/db/snapshots", slug, void 0, void 0, channelOf(args)), apiRequest("GET", `/projects/${slug}/snapshot-settings`).catch(() => null)]);
226
+ if (settings) {
227
+ console.log(`Schedule: ${describeSchedule(settings)} · retention: ${describeRetention(settings)}`);
228
+ if (settings.lastRun) console.log(`Last scheduled run: ${describeLastRun(settings.lastRun)}`);
229
+ console.log("");
230
+ }
231
+ if (snapshots.length === 0) {
232
+ console.log(`No snapshots for ${slug}${channelNote(args)} yet — run \`canopy db snapshot\`.`);
233
+ return;
234
+ }
235
+ for (const snapshot of snapshots) console.log(`${snapshot.key} ${(snapshot.kind ?? "").padEnd(11)} ${formatSize(snapshot.size).padStart(9)} ${snapshot.createdAt}`);
236
+ });
237
+ const snapshotsCommand = defineCommand({
238
+ meta: {
239
+ name: "snapshots",
240
+ description: "List stored snapshots (and delete, settings)"
241
+ },
242
+ args: {
243
+ ...projectFlagArgs,
244
+ ...stagingFlagArgs
245
+ },
246
+ subCommands: {
247
+ delete: snapshotsDeleteCommand,
248
+ settings: snapshotsSettingsCommand
249
+ },
250
+ run: (context) => snapshotsSubcommandRan ? void 0 : listSnapshotsRun(context)
251
+ });
106
252
  const restoreCommand = defineCommand({
107
253
  meta: {
108
254
  name: "restore",
@@ -1,7 +1,7 @@
1
1
  import { a as projectDirArgs, c as resolveProject, l as stagingUrl, n as siteConfig, o as projectFlagArgs, s as projectUrl, u as tryReadCanopyJson } from "./site-DM2J10CB.mjs";
2
- import { i as apiRequest, n as apiDataRequest, o as withContext, r as apiDownload } from "./api-C4rMhE7i.mjs";
3
- import { a as unwrap, r as reportErrors, t as formatDateTime } from "./ui-C_jSc1Kz.mjs";
4
- import { n as migrateProject, r as readMigrationFiles, t as describeMigrateResult } from "./migrations-Czlcddyz.mjs";
2
+ import { i as apiRequest, n as apiDataRequest, o as withContext, r as apiDownload } from "./api-BPEYm9ts.mjs";
3
+ import { a as unwrap, r as reportErrors, t as formatDateTime } from "./ui-CHfKV6lG.mjs";
4
+ import { n as migrateProject, r as readMigrationFiles, t as describeMigrateResult } from "./migrations-CF1iNZ7F.mjs";
5
5
  import { builtinModules } from "node:module";
6
6
  import { defineCommand } from "citty";
7
7
  import { mkdtempSync, readFileSync, readdirSync, rmSync, statSync, writeFileSync } from "node:fs";
@@ -1,7 +1,7 @@
1
1
  import { a as projectDirArgs, c as resolveProject, i as projectDialect, n as siteConfig, u as tryReadCanopyJson } from "./site-DM2J10CB.mjs";
2
- import { i as apiRequest, o as withContext, t as ApiError } from "./api-C4rMhE7i.mjs";
3
- import { r as reportErrors, t as formatDateTime } from "./ui-C_jSc1Kz.mjs";
4
- import { r as readMigrationFiles } from "./migrations-Czlcddyz.mjs";
2
+ import { i as apiRequest, o as withContext, t as ApiError } from "./api-BPEYm9ts.mjs";
3
+ import { r as reportErrors, t as formatDateTime } from "./ui-CHfKV6lG.mjs";
4
+ import { r as readMigrationFiles } from "./migrations-CF1iNZ7F.mjs";
5
5
  import { i as stampWorkerHeaders, n as WORKER_ATTEST_HEADER } from "./src-CxzGOEhP.mjs";
6
6
  import { n as writeDevServerRecord } from "./dev-server-file-Dk9pk4AR.mjs";
7
7
  import { createRequire } from "node:module";
@@ -251,7 +251,7 @@ async function devRemote(flags, slug) {
251
251
  async function devLocal(flags, slug) {
252
252
  let dump;
253
253
  if (flags.pull) {
254
- const { fetchProjectDump } = await import("./local-Cyl39_Zu.mjs");
254
+ const { fetchProjectDump } = await import("./local-BfqTheMP.mjs");
255
255
  console.log(`Pulling a fresh export of ${slug}${flags.staging ? " [staging]" : ""}…`);
256
256
  dump = await fetchProjectDump(slug, flags.staging ? "staging" : "live");
257
257
  }
@@ -267,7 +267,7 @@ async function devLocal(flags, slug) {
267
267
  console.log(`Note: ai/services will be unavailable — could not reach the platform (${reason}).`);
268
268
  }
269
269
  const workerAttest = randomBytes(24).toString("base64url");
270
- const { createSandbox } = await import("./local-Cyl39_Zu.mjs");
270
+ const { createSandbox } = await import("./local-BfqTheMP.mjs");
271
271
  const sandbox = await createSandbox({
272
272
  slug,
273
273
  persistDir: join(flags.dir, ".canopy", "local"),
@@ -0,0 +1,2 @@
1
+ import { n as devCommand } from "./dev-BtnEuAnS.mjs";
2
+ export { devCommand };
@@ -13,6 +13,9 @@ The habit that makes restores safe: **always `canopy db snapshot` before `canopy
13
13
  canopy db pull [--out <file>] [--project <slug>]
14
14
  canopy db snapshot [--project <slug>]
15
15
  canopy db snapshots [--project <slug>]
16
+ canopy db snapshots delete <key> [--yes] [--project <slug>]
17
+ canopy db snapshots settings [--schedule off|daily|weekly] [--retention <days>|off]
18
+ [--retention-scope all|scheduled] [--yes] [--json] [--project <slug>]
16
19
  canopy db restore [file.sql] [--snapshot <key>] [--yes] [--project <slug>]
17
20
  canopy db migrate [--plan] [--project <slug>]
18
21
  ```
@@ -37,7 +40,27 @@ Stores a dump **server-side**, restorable anytime from the CLI or the dashboard.
37
40
 
38
41
  ### canopy db snapshots
39
42
 
40
- Lists stored snapshots for the project — one line per snapshot with its key, size, and creation time. If there are none yet, it points you at `canopy db snapshot`.
43
+ Lists stored snapshots for the project — one line per snapshot with its key, kind, size, and creation time — under a line with the project's schedule, retention and last scheduled run. The kind says what made it: `manual` (you), `scheduled` (Canopy, on the schedule), `pre-migrate` or `pre-promote` (Canopy, before applying migrations). If there are none yet, it points you at `canopy db snapshot`.
44
+
45
+ ### canopy db snapshots delete
46
+
47
+ Deletes one stored snapshot for good: it can't be restored afterwards. Asks for confirmation unless `--yes` is passed. Use `--staging` for a snapshot in the staging history.
48
+
49
+ Deleting needs your own sign-in (`canopy login`). Project tokens, such as the ones `canopy dev` or an agent uses, can't delete snapshots.
50
+
51
+ ### canopy db snapshots settings
52
+
53
+ Shows or changes when Canopy takes snapshots by itself and how long snapshots are kept. With no flags it prints the current settings.
54
+
55
+ - `--schedule off|daily|weekly` — Canopy snapshots the live database once a day or once a week, at a fixed time it picks for the project (shown in UTC). The staging database is not snapshotted on a schedule.
56
+ - `--retention <days>` — delete snapshots older than this many days (1 to 365), once a day. `--retention off` keeps snapshots until you delete them. Retention works with or without a schedule, and covers both the live and the staging history.
57
+ - `--retention-scope all|scheduled` — which snapshots retention deletes: `all` (the default) includes the ones you took by hand and the ones taken before migrations; `scheduled` only deletes the ones Canopy took on the schedule.
58
+ - `--yes` — when a new retention would delete existing snapshots, the CLI says how many and asks first. `--yes` skips that.
59
+ - `--json` — print the settings as JSON.
60
+
61
+ A daily schedule needs at least 1 day of retention and a weekly one at least 7, so there is never a stretch without a snapshot. Like deleting, changing the settings needs your own sign-in.
62
+
63
+ Canopy also keeps short-lived backups of its own databases and storage for disaster recovery. Those expire on their own within 30 days and can't be restored from the CLI.
41
64
 
42
65
  ### canopy db restore
43
66
 
@@ -73,6 +96,12 @@ canopy db snapshot && canopy db pull
73
96
 
74
97
  Belt and braces before risky work: a server-side snapshot you can restore from the dashboard, plus a local dump on disk.
75
98
 
99
+ ```bash
100
+ canopy db snapshots settings --schedule daily --retention 30
101
+ ```
102
+
103
+ A daily backup, with snapshots older than 30 days deleted automatically.
104
+
76
105
  ```bash
77
106
  canopy db restore --snapshot snap-2026-08-11-1200 --yes --project my-app
78
107
  ```
package/dist/docs/data.md CHANGED
@@ -61,6 +61,17 @@ canopy db snapshots # list stored snapshots
61
61
  Snapshots live on the platform and can be restored at any time — handy before a
62
62
  risky change.
63
63
 
64
+ Canopy can also take them for you, and clean up old ones:
65
+
66
+ ```bash
67
+ canopy db snapshots settings --schedule daily --retention 30 # daily backup, keep 30 days
68
+ canopy db snapshots settings --retention-scope scheduled # never auto-delete your own
69
+ canopy db snapshots delete <key> # delete one for good
70
+ ```
71
+
72
+ The same settings are on the dashboard's Data tab. See
73
+ [`canopy db`](https://docs.canopy.website/cli/db#canopy-db-snapshots-settings) for every option.
74
+
64
75
  ## Restore — destructive
65
76
 
66
77
  > **Warning:** Restoring **replaces ALL project data**. Take a snapshot first — a snapshot taken seconds earlier
@@ -45,8 +45,28 @@ The Data tab's **Data safety** card is your undo button for data:
45
45
  confirm.
46
46
  - **Export** downloads a dump to your machine.
47
47
 
48
- Snapshots live server-side and stay available until you delete the project,
49
- so you can restore from days ago, not just from your last session.
48
+ Snapshots live server-side, so you can restore from days ago, not just from
49
+ your last session. Each one shows what made it: you, the schedule, or Canopy
50
+ before applying migrations. You can delete one you no longer need; it's gone
51
+ for good.
52
+
53
+ ## Scheduled snapshots and retention
54
+
55
+ In the same card you can have Canopy take a snapshot of the live database
56
+ **daily** or **weekly**, at a fixed time it picks for the project. You don't
57
+ need a worker or any code for it.
58
+
59
+ **Retention** deletes snapshots older than a number of days you choose, once a
60
+ day. Choose whether it applies to all snapshots or only the scheduled ones, so
61
+ your own restore points stay until you delete them. Retention also works
62
+ without a schedule. Without retention, snapshots stay until you delete them or
63
+ the project.
64
+
65
+ Changing these settings and deleting snapshots needs a project member signed
66
+ in as themselves.
67
+
68
+ Canopy also keeps short-lived backups of its own databases and storage for
69
+ disaster recovery. Those expire on their own within 30 days.
50
70
 
51
71
  > **Warning:** Restoring replaces **all** current data with the snapshot's contents. Take a fresh snapshot first
52
72
  > if there's anything recent you might want back.
@@ -58,7 +78,7 @@ Everything above is also available to you (and your coding agent) via the CLI:
58
78
  ```bash
59
79
  canopy db pull # download a fresh SQL dump
60
80
  canopy db snapshot # store a dump server-side
61
- canopy db snapshots # list stored snapshots
81
+ canopy db snapshots # list stored snapshots (delete, settings)
62
82
  canopy db restore # replace project data with a snapshot
63
83
  canopy db access # what the app's own pages may do with the database
64
84
  ```
@@ -1,7 +1,7 @@
1
- import { t as version } from "./package-lYhex2Gp.mjs";
1
+ import { t as version } from "./package-BY69Tjq_.mjs";
2
2
  import { n as siteConfig } from "./site-DM2J10CB.mjs";
3
3
  import { i as latestKnownVersion, r as compareSemver } from "./version-check-CcsA1QjI.mjs";
4
- import { r as reportErrors } from "./ui-C_jSc1Kz.mjs";
4
+ import { r as reportErrors } from "./ui-CHfKV6lG.mjs";
5
5
  import { defineCommand } from "citty";
6
6
  import { existsSync, mkdirSync, readFileSync, readdirSync, writeFileSync } from "node:fs";
7
7
  import { homedir } from "node:os";
@@ -1,6 +1,6 @@
1
1
  import { a as projectDirArgs, c as resolveProject } from "./site-DM2J10CB.mjs";
2
- import { i as apiRequest, o as withContext } from "./api-C4rMhE7i.mjs";
3
- import { a as unwrap, i as requireTty, r as reportErrors, t as formatDateTime } from "./ui-C_jSc1Kz.mjs";
2
+ import { i as apiRequest, o as withContext } from "./api-BPEYm9ts.mjs";
3
+ import { a as unwrap, i as requireTty, r as reportErrors, t as formatDateTime } from "./ui-CHfKV6lG.mjs";
4
4
  import { defineCommand } from "citty";
5
5
  import * as p from "@clack/prompts";
6
6
  //#region src/egress.ts
@@ -1,7 +1,7 @@
1
- import { t as version } from "./package-lYhex2Gp.mjs";
1
+ import { t as version } from "./package-BY69Tjq_.mjs";
2
2
  import { a as projectDirArgs, c as resolveProject, d as tryResolveProject, n as siteConfig, u as tryReadCanopyJson } from "./site-DM2J10CB.mjs";
3
- import { a as apiUpload, i as apiRequest, r as apiDownload } from "./api-C4rMhE7i.mjs";
4
- import { r as reportErrors, t as formatDateTime } from "./ui-C_jSc1Kz.mjs";
3
+ import { a as apiUpload, i as apiRequest, r as apiDownload } from "./api-BPEYm9ts.mjs";
4
+ import { r as reportErrors, t as formatDateTime } from "./ui-CHfKV6lG.mjs";
5
5
  import { defineCommand } from "citty";
6
6
  import { basename, extname, join } from "node:path";
7
7
  import { readFile, writeFile } from "node:fs/promises";
package/dist/index.mjs CHANGED
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- import { t as version } from "./package-lYhex2Gp.mjs";
2
+ import { t as version } from "./package-BY69Tjq_.mjs";
3
3
  import { r as siteHeaderLine, t as setInvocationProfile } from "./site-DM2J10CB.mjs";
4
4
  import { a as notifyOfUpdate, o as runRefresh } from "./version-check-CcsA1QjI.mjs";
5
5
  import { defineCommand, runMain } from "citty";
@@ -63,35 +63,35 @@ const main = defineCommand({
63
63
  description: "canopy — create and deploy vibecoded projects"
64
64
  },
65
65
  subCommands: {
66
- login: () => import("./login-D0J5s_Ex.mjs").then((m) => m.loginCommand),
67
- whoami: () => import("./login-D0J5s_Ex.mjs").then((m) => m.whoamiCommand),
68
- logout: () => import("./login-D0J5s_Ex.mjs").then((m) => m.logoutCommand),
69
- create: () => import("./projects-DQAhCZm8.mjs").then((m) => m.createCommand),
70
- init: () => import("./projects-DQAhCZm8.mjs").then((m) => m.initCommand),
71
- projects: () => import("./projects-DQAhCZm8.mjs").then((m) => m.projectsCommand),
72
- delete: () => import("./projects-DQAhCZm8.mjs").then((m) => m.deleteCommand),
73
- dev: () => import("./dev-BeFX_wc5.mjs").then((m) => m.devCommand),
74
- deploy: () => import("./deploy-Ka2lHkyy.mjs").then((m) => m.deployCommand),
75
- promote: () => import("./deploy-Ka2lHkyy.mjs").then((m) => m.promoteCommand),
76
- staging: () => import("./staging-BZVty57b.mjs").then((m) => m.stagingCommand),
77
- rollback: () => import("./deploy-Ka2lHkyy.mjs").then((m) => m.rollbackCommand),
78
- download: () => import("./deploy-Ka2lHkyy.mjs").then((m) => m.downloadCommand),
79
- token: () => import("./token-HHlUR0CF.mjs").then((m) => m.tokenCommand),
80
- egress: () => import("./egress-If_Gsx_M.mjs").then((m) => m.egressCommand),
81
- secrets: () => import("./secrets-BSEjZnxg.mjs").then((m) => m.secretsCommand),
82
- schedule: () => import("./schedule-C5lMf3ny.mjs").then((m) => m.scheduleCommand),
83
- feedback: () => import("./feedback-DzEKQlP6.mjs").then((m) => m.feedbackCommand),
84
- db: () => import("./db-BB6O6085.mjs").then((m) => m.dbCommand),
85
- usage: () => import("./usage-CUYrWxv0.mjs").then((m) => m.usageCommand),
86
- ai: () => import("./ai-DHLnyqfq.mjs").then((m) => m.aiCommand),
87
- open: () => import("./open-DcaQKi1v.mjs").then((m) => m.openCommand),
88
- browse: () => import("./browse-Dycwj0V_.mjs").then((m) => m.browseCommand),
89
- docs: () => import("./docs-Bb9hSk4h.mjs").then((m) => m.docsCommand),
90
- skill: () => import("./skill-BUA2uRR2.mjs").then((m) => m.skillCommand),
91
- upgrade: () => import("./upgrade-ZSb56qBJ.mjs").then((m) => m.upgradeCommand),
92
- logs: () => import("./logs-DQQOawOG.mjs").then((m) => m.logsCommand),
93
- mcp: () => import("./mcp-pNp-sbfJ.mjs").then((m) => m.mcpCommand),
94
- repo: () => import("./repo-1RQ1vBMv.mjs").then((m) => m.repoCommand)
66
+ login: () => import("./login-CtDWXICZ.mjs").then((m) => m.loginCommand),
67
+ whoami: () => import("./login-CtDWXICZ.mjs").then((m) => m.whoamiCommand),
68
+ logout: () => import("./login-CtDWXICZ.mjs").then((m) => m.logoutCommand),
69
+ create: () => import("./projects-DPGRI-SI.mjs").then((m) => m.createCommand),
70
+ init: () => import("./projects-DPGRI-SI.mjs").then((m) => m.initCommand),
71
+ projects: () => import("./projects-DPGRI-SI.mjs").then((m) => m.projectsCommand),
72
+ delete: () => import("./projects-DPGRI-SI.mjs").then((m) => m.deleteCommand),
73
+ dev: () => import("./dev-D_qzeLng.mjs").then((m) => m.devCommand),
74
+ deploy: () => import("./deploy-CqCyry4o.mjs").then((m) => m.deployCommand),
75
+ promote: () => import("./deploy-CqCyry4o.mjs").then((m) => m.promoteCommand),
76
+ staging: () => import("./staging-CU4QrzFX.mjs").then((m) => m.stagingCommand),
77
+ rollback: () => import("./deploy-CqCyry4o.mjs").then((m) => m.rollbackCommand),
78
+ download: () => import("./deploy-CqCyry4o.mjs").then((m) => m.downloadCommand),
79
+ token: () => import("./token-BWnLsWLg.mjs").then((m) => m.tokenCommand),
80
+ egress: () => import("./egress-ButFsQ2N.mjs").then((m) => m.egressCommand),
81
+ secrets: () => import("./secrets-BQYaPSOT.mjs").then((m) => m.secretsCommand),
82
+ schedule: () => import("./schedule-DdMq5eXC.mjs").then((m) => m.scheduleCommand),
83
+ feedback: () => import("./feedback-CIjjiEaj.mjs").then((m) => m.feedbackCommand),
84
+ db: () => import("./db-CbqgjfYz.mjs").then((m) => m.dbCommand),
85
+ usage: () => import("./usage-Cqqvnzrf.mjs").then((m) => m.usageCommand),
86
+ ai: () => import("./ai-CjvrcBIz.mjs").then((m) => m.aiCommand),
87
+ open: () => import("./open-DXo60Ikf.mjs").then((m) => m.openCommand),
88
+ browse: () => import("./browse-CBelCgnW.mjs").then((m) => m.browseCommand),
89
+ docs: () => import("./docs-DvCUaI1O.mjs").then((m) => m.docsCommand),
90
+ skill: () => import("./skill-B96cKy8K.mjs").then((m) => m.skillCommand),
91
+ upgrade: () => import("./upgrade-SfxmPh3F.mjs").then((m) => m.upgradeCommand),
92
+ logs: () => import("./logs-BltUi4Gp.mjs").then((m) => m.logsCommand),
93
+ mcp: () => import("./mcp-DTUJV4FT.mjs").then((m) => m.mcpCommand),
94
+ repo: () => import("./repo-DvrIsubH.mjs").then((m) => m.repoCommand)
95
95
  }
96
96
  });
97
97
  const quiet = process.argv[2] === "mcp" && process.argv[3] === "serve" || process.argv[2] === "repo" && process.argv[3] === "credential";
@@ -1,6 +1,6 @@
1
- import { n as apiDataRequest } from "./api-C4rMhE7i.mjs";
1
+ import { n as apiDataRequest } from "./api-BPEYm9ts.mjs";
2
2
  import { a as realtimeRouter, c as META_COLUMNS, l as blobRouter, n as WORKER_ATTEST_HEADER, o as dbRouter, s as hasPrivateNames } from "./src-CxzGOEhP.mjs";
3
- import { a as rewriteApiPath } from "./dev-BdXslHoA.mjs";
3
+ import { a as rewriteApiPath } from "./dev-BtnEuAnS.mjs";
4
4
  import { createRequire } from "node:module";
5
5
  import { existsSync, mkdirSync, readFileSync, readdirSync, rmSync, statSync, writeFileSync } from "node:fs";
6
6
  import { dirname, join, relative, sep } from "node:path";
@@ -1,5 +1,5 @@
1
1
  import { _ as writeConfigFile, f as clearAllProfileTokens, g as upsertProfileAuth, h as setActiveProfile, m as readConfigFile, n as siteConfig, p as listBakedProfiles, v as getBakedProfile, y as isProfileId } from "./site-DM2J10CB.mjs";
2
- import { n as openBrowser, r as reportErrors } from "./ui-C_jSc1Kz.mjs";
2
+ import { n as openBrowser, r as reportErrors } from "./ui-CHfKV6lG.mjs";
3
3
  import { n as clearRepoTokenCache } from "./repo-credential-CNDRM-tG.mjs";
4
4
  import { defineCommand } from "citty";
5
5
  import { hostname } from "node:os";
@@ -7,8 +7,8 @@ import * as p from "@clack/prompts";
7
7
  import { createHash, randomBytes } from "node:crypto";
8
8
  import { createServer } from "node:http";
9
9
  //#region ../pages/src/generated/cli-login.ts
10
- const okHtml = "<!doctype html><html lang=\"en\" data-theme=\"canopy\"><head><meta charSet=\"utf-8\"/><meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/><title>You’re signed in · Canopy</title><style>/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */\n@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-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-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-outline-style:solid;--tw-animation-delay:0s;--tw-animation-direction:normal;--tw-animation-duration:initial;--tw-animation-fill-mode:none;--tw-animation-iteration-count:1;--tw-enter-blur:0;--tw-enter-opacity:1;--tw-enter-rotate:0;--tw-enter-scale:1;--tw-enter-translate-x:0;--tw-enter-translate-y:0;--tw-exit-blur:0;--tw-exit-opacity:1;--tw-exit-rotate:0;--tw-exit-scale:1;--tw-exit-translate-x:0;--tw-exit-translate-y:0}}}@layer theme{:root,:host{--font-sans:\"Helvetica Now for Monks\", ui-sans-serif, system-ui, sans-serif;--font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;--color-red-100:#ffebf0;--color-red-200:#ffd1dd;--color-red-300:#ffa8be;--color-red-400:#ff7a9c;--color-red-500:#ff527d;--color-red-600:#ff245b;--color-red-800:#a30029;--color-red-950:#610018;--color-amber-200:#fde68a;--color-amber-950:#451a03;--color-yellow-100:#fff7db;--color-yellow-900:#7a6000;--color-green-100:#e3fcf1;--color-green-200:#b8fadd;--color-green-900:#067445;--color-green-950:#065533;--color-emerald-50:#ecfdf5;--color-emerald-100:#d1fae5;--color-emerald-200:#a7f3d0;--color-emerald-300:#6ee7b7;--color-emerald-400:#34d399;--color-emerald-500:#10b981;--color-emerald-600:#059669;--color-emerald-800:#065f46;--color-emerald-900:#064e3b;--color-emerald-950:#022c22;--color-purple-50:#faf6fd;--color-purple-300:#d6b6f1;--color-purple-400:#c598ec;--color-purple-500:#ac6de3;--color-purple-600:#8c3fd2;--color-purple-700:#7d26c9;--color-purple-900:#501881;--color-gray-800:#5d5d60;--color-neutral-50:#f5f5f4;--color-neutral-100:#e9e8e7;--color-neutral-200:#d6d4d2;--color-neutral-300:#c0beb9;--color-neutral-400:#adaaa4;--color-neutral-500:#97938c;--color-neutral-600:#837f77;--color-neutral-700:#6c6962;--color-neutral-900:#484641;--color-neutral-950:#3e3c38;--color-stone-100:#f5f5f4;--color-stone-500:#78716c;--color-stone-600:#57534e;--color-stone-700:#44403c;--color-stone-800:#292524;--color-stone-900:#1c1917;--color-stone-950:#0c0a09;--color-black:#000;--color-white:#fff;--spacing:.25rem;--container-sm:24rem;--text-xs:12px;--text-xs--line-height:16px;--text-sm:14px;--text-sm--line-height:20px;--text-2xl:24px;--text-2xl--line-height:32px;--font-weight-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--tracking-tight:-.01em;--tracking-wide:.015em;--leading-snug:1.375;--leading-normal:1.5;--leading-relaxed:1.625;--radius-md:6px;--radius-lg:8px;--radius-xl:12px;--radius-2xl:16px;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono);--color-foreground:var(--foreground);--color-primary:var(--primary);--color-primary-foreground:var(--primary-foreground);--color-muted-foreground:var(--muted-foreground);--color-destructive:var(--destructive);--color-border:var(--border);--color-ring:var(--ring);--color-card:var(--card);--color-brand:var(--brand);--color-brand-foreground:var(--brand-foreground)}}@layer base{@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)}}}*,: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;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}:root,[data-theme=monks-flow]{--background:var(--color-white);--background-emphasis:var(--color-neutral-900);--foreground:var(--color-neutral-950);--foreground-alt:var(--color-neutral-700);--foreground-subtle:var(--color-neutral-600);--primary:var(--color-neutral-900);--primary-foreground:var(--color-neutral-50);--primary-hover:var(--color-neutral-950);--secondary:#f5f3f0;--secondary-foreground:var(--color-neutral-900);--secondary-hover:#e7e2dc;--muted:var(--color-neutral-100);--muted-foreground:var(--color-neutral-500);--accent:#e7e2dc;--accent-foreground:var(--color-neutral-900);--destructive:#e11d48;--destructive-foreground:var(--color-white);--destructive-soft:var(--color-red-100);--destructive-soft-foreground:var(--color-red-800);--ghost:#fff0;--ghost-foreground:var(--color-neutral-700);--ghost-hover:#0000000d;--positive:var(--color-green-100);--positive-foreground:var(--color-green-900);--surface:var(--color-neutral-50);--surface-emphasis:var(--color-neutral-300);--surface-raised:var(--color-neutral-200);--border:var(--color-neutral-200);--border-light:var(--color-neutral-100);--border-lighter:var(--color-neutral-50);--border-strong:var(--color-neutral-400);--input:var(--color-neutral-50);--input-foreground:var(--color-neutral-950);--ring:var(--color-black);--ring-error:var(--color-red-300);--card:var(--color-white);--card-foreground:var(--color-neutral-950);--popover:var(--color-white);--popover-foreground:var(--color-neutral-950);--warning:var(--color-yellow-100);--warning-foreground:var(--color-yellow-900);--chart-1:#f54a00;--chart-2:#009689;--chart-3:#104e64;--chart-4:#ffb900;--chart-5:#fe9a00;--chart-negative:#f54a00;--chart-positive:#009689;--chart-fill:#bfdeffb3;--chart-fill-2:#aaccffb3;--chart-stroke-2:#3f8dff;--sidebar:var(--color-neutral-50);--sidebar-foreground:var(--color-gray-800);--sidebar-primary:var(--primary);--sidebar-primary-foreground:var(--primary-foreground);--sidebar-accent:var(--accent);--sidebar-accent-foreground:var(--accent-foreground);--sidebar-border:var(--color-neutral-200);--sidebar-ring:var(--ring);--backdrop:#0009;--theme-background:#f5f4f2}:root.dark:not([data-theme]),[data-theme=monks-flow].dark,[data-theme=monks-flow] .dark{--background:var(--color-stone-900);--background-emphasis:var(--color-neutral-100);--foreground:var(--color-neutral-50);--foreground-alt:var(--color-neutral-300);--foreground-subtle:var(--color-neutral-400);--primary:var(--color-neutral-50);--primary-foreground:var(--color-black);--primary-hover:var(--color-neutral-100);--secondary:var(--color-stone-700);--secondary-foreground:var(--color-neutral-100);--secondary-hover:var(--color-stone-600);--muted:var(--color-stone-800);--muted-foreground:var(--color-neutral-500);--accent:var(--color-neutral-900);--accent-foreground:var(--color-neutral-300);--destructive:var(--color-red-500);--destructive-foreground:var(--color-white);--destructive-soft:var(--color-red-950);--destructive-soft-foreground:var(--color-red-200);--ghost:#fff0;--ghost-foreground:var(--color-neutral-300);--ghost-hover:#ffffff14;--positive:var(--color-green-950);--positive-foreground:var(--color-green-200);--surface:var(--color-stone-800);--surface-emphasis:var(--color-stone-600);--surface-raised:var(--color-stone-700);--border:var(--color-stone-600);--border-light:var(--color-stone-700);--border-lighter:var(--color-stone-800);--border-strong:var(--color-stone-500);--input:var(--color-stone-800);--input-foreground:var(--color-neutral-50);--ring:var(--color-white);--ring-error:var(--color-red-400);--card:var(--color-stone-800);--card-foreground:var(--color-neutral-100);--popover:var(--color-stone-800);--popover-foreground:var(--color-neutral-100);--warning:var(--color-amber-950);--warning-foreground:var(--color-amber-200);--chart-1:#ff6b33;--chart-2:#00b3a4;--chart-3:#2196a8;--chart-4:#ffc733;--chart-5:#ffad33;--chart-negative:#ff6b33;--chart-positive:#00b3a4;--chart-fill:#3382ff40;--chart-fill-2:#5096ff33;--chart-stroke-2:#5da3ff;--sidebar:var(--color-stone-800);--sidebar-foreground:var(--color-neutral-300);--sidebar-primary:var(--primary);--sidebar-primary-foreground:var(--primary-foreground);--sidebar-accent:var(--accent);--sidebar-accent-foreground:var(--accent-foreground);--sidebar-border:var(--color-stone-700);--sidebar-ring:var(--ring);--backdrop:#000c;--theme-background:#0c0a09}[data-theme=metropolis]{--background:var(--color-white);--background-emphasis:var(--color-neutral-900);--foreground:var(--color-neutral-950);--foreground-alt:var(--color-neutral-700);--foreground-subtle:var(--color-neutral-600);--primary:var(--color-purple-600);--primary-foreground:var(--color-neutral-50);--primary-hover:var(--color-purple-700);--secondary:var(--color-neutral-100);--secondary-foreground:var(--color-neutral-900);--secondary-hover:var(--color-neutral-50);--muted:var(--color-neutral-100);--muted-foreground:var(--color-neutral-500);--accent:var(--color-purple-50);--accent-foreground:var(--color-purple-600);--destructive:var(--color-red-600);--destructive-foreground:var(--color-white);--destructive-soft:var(--color-red-100);--destructive-soft-foreground:var(--color-red-800);--ghost:#fff0;--ghost-foreground:var(--color-neutral-700);--ghost-hover:#0000000d;--positive:var(--color-green-100);--positive-foreground:var(--color-green-900);--surface:var(--color-neutral-50);--surface-emphasis:var(--color-neutral-300);--surface-raised:var(--color-neutral-200);--border:var(--color-neutral-200);--border-light:var(--color-neutral-100);--border-lighter:var(--color-neutral-50);--border-strong:var(--color-neutral-400);--input:var(--color-neutral-50);--input-foreground:var(--color-neutral-950);--ring:var(--color-neutral-300);--ring-error:var(--color-red-300);--card:var(--color-white);--card-foreground:var(--color-neutral-950);--popover:var(--color-white);--popover-foreground:var(--color-neutral-950);--warning:var(--color-yellow-100);--warning-foreground:var(--color-yellow-900);--chart-1:#f54a00;--chart-2:#009689;--chart-3:#104e64;--chart-4:#ffb900;--chart-5:#fe9a00;--chart-negative:#f54a00;--chart-positive:#009689;--chart-fill:#bfdeffb3;--chart-fill-2:#aaccffb3;--chart-stroke-2:#3f8dff;--sidebar:var(--color-neutral-50);--sidebar-foreground:var(--color-gray-800);--sidebar-primary:var(--primary);--sidebar-primary-foreground:var(--primary-foreground);--sidebar-accent:var(--accent);--sidebar-accent-foreground:var(--accent-foreground);--sidebar-border:var(--color-neutral-200);--sidebar-ring:var(--color-neutral-300);--backdrop:#0009;--theme-background:#f0f3f8}[data-theme=metropolis].dark,[data-theme=metropolis] .dark{--background:var(--color-stone-900);--background-emphasis:var(--color-neutral-100);--foreground:var(--color-neutral-50);--foreground-alt:var(--color-neutral-300);--foreground-subtle:var(--color-neutral-400);--primary:var(--color-purple-500);--primary-foreground:var(--color-white);--primary-hover:var(--color-purple-400);--secondary:var(--color-stone-700);--secondary-foreground:var(--color-neutral-100);--secondary-hover:var(--color-stone-600);--muted:var(--color-stone-800);--muted-foreground:var(--color-neutral-400);--accent:var(--color-purple-900);--accent-foreground:var(--color-purple-300);--destructive:var(--color-red-500);--destructive-foreground:var(--color-white);--destructive-soft:var(--color-red-950);--destructive-soft-foreground:var(--color-red-200);--ghost:#fff0;--ghost-foreground:var(--color-neutral-300);--ghost-hover:#ffffff14;--positive:var(--color-green-950);--positive-foreground:var(--color-green-200);--surface:var(--color-stone-800);--surface-emphasis:var(--color-stone-600);--surface-raised:var(--color-stone-700);--border:var(--color-stone-600);--border-light:var(--color-stone-700);--border-lighter:var(--color-stone-800);--border-strong:var(--color-stone-500);--input:var(--color-stone-800);--input-foreground:var(--color-neutral-50);--ring:var(--color-neutral-500);--ring-error:var(--color-red-400);--card:var(--color-stone-800);--card-foreground:var(--color-neutral-100);--popover:var(--color-stone-800);--popover-foreground:var(--color-neutral-100);--warning:var(--color-amber-950);--warning-foreground:var(--color-amber-200);--chart-1:#ff6b33;--chart-2:#00b3a4;--chart-3:#2196a8;--chart-4:#ffc733;--chart-5:#ffad33;--chart-negative:#ff6b33;--chart-positive:#00b3a4;--chart-fill:#3382ff40;--chart-fill-2:#5096ff33;--chart-stroke-2:#5da3ff;--sidebar:var(--color-stone-800);--sidebar-foreground:var(--color-neutral-300);--sidebar-primary:var(--primary);--sidebar-primary-foreground:var(--primary-foreground);--sidebar-accent:var(--accent);--sidebar-accent-foreground:var(--accent-foreground);--sidebar-border:var(--color-stone-700);--sidebar-ring:var(--color-neutral-500);--backdrop:#000c;--theme-background:#0c0a09}*{border-color:var(--border)}body{background-color:var(--background);color:var(--foreground)}button,[role=button]{cursor:pointer}:focus-visible{outline:2px solid var(--ring);outline-offset:2px}}@layer components;@layer utilities{.relative{position:relative}.mt-2{margin-top:calc(var(--spacing) * 2)}.mt-3\\.5{margin-top:calc(var(--spacing) * 3.5)}.mt-5{margin-top:calc(var(--spacing) * 5)}.mt-6{margin-top:calc(var(--spacing) * 6)}.mt-px{margin-top:1px}.mr-2{margin-right:calc(var(--spacing) * 2)}.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-5{margin-bottom:calc(var(--spacing) * 5)}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.size-4{width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}.size-5{width:calc(var(--spacing) * 5);height:calc(var(--spacing) * 5)}.size-11{width:calc(var(--spacing) * 11);height:calc(var(--spacing) * 11)}.h-11{height:calc(var(--spacing) * 11)}.min-h-svh{min-height:100svh}.w-full{width:100%}.max-w-sm{max-width:var(--container-sm)}.shrink-0{flex-shrink:0}.place-items-center{place-items:center}.items-center{align-items:center}.items-start{align-items:flex-start}.justify-center{justify-content:center}.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)}.overflow-x-auto{overflow-x:auto}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:var(--radius-2xl)}.rounded-lg{border-radius:var(--radius-lg)}.rounded-xl{border-radius:var(--radius-xl)}.rounded-r-md{border-top-right-radius:var(--radius-md);border-bottom-right-radius:var(--radius-md)}.border{border-style:var(--tw-border-style);border-width:1px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-l-2{border-left-style:var(--tw-border-style);border-left-width:2px}.border-border{border-color:var(--color-border)}.border-brand{border-color:var(--color-brand)}.border-destructive{border-color:var(--color-destructive)}.bg-\\[color-mix\\(in_oklab\\,var\\(--destructive\\)_8\\%\\,transparent\\)\\]{background-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.bg-\\[color-mix\\(in_oklab\\,var\\(--destructive\\)_8\\%\\,transparent\\)\\]{background-color:color-mix(in oklab,var(--destructive) 8%,transparent)}}.bg-\\[color-mix\\(in_oklab\\,var\\(--foreground\\)_6\\%\\,transparent\\)\\]{background-color:var(--foreground)}@supports (color:color-mix(in lab, red, red)){.bg-\\[color-mix\\(in_oklab\\,var\\(--foreground\\)_6\\%\\,transparent\\)\\]{background-color:color-mix(in oklab,var(--foreground) 6%,transparent)}}.bg-\\[var\\(--input\\)\\]{background-color:var(--input)}.bg-brand{background-color:var(--color-brand)}.bg-card{background-color:var(--color-card)}.bg-destructive{background-color:var(--color-destructive)}.bg-primary{background-color:var(--color-primary)}.p-6{padding:calc(var(--spacing) * 6)}.p-8{padding:calc(var(--spacing) * 8)}.px-1{padding-inline:var(--spacing)}.px-2\\.5{padding-inline:calc(var(--spacing) * 2.5)}.px-3\\.5{padding-inline:calc(var(--spacing) * 3.5)}.px-4{padding-inline:calc(var(--spacing) * 4)}.py-2{padding-block:calc(var(--spacing) * 2)}.py-2\\.5{padding-block:calc(var(--spacing) * 2.5)}.py-px{padding-block:1px}.pt-4{padding-top:calc(var(--spacing) * 4)}.pr-3{padding-right:calc(var(--spacing) * 3)}.pl-3{padding-left:calc(var(--spacing) * 3)}.text-center{text-align:center}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--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-\\[0\\.85em\\]{font-size:.85em}.leading-normal{--tw-leading:var(--leading-normal);line-height:var(--leading-normal)}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.leading-snug{--tw-leading:var(--leading-snug);line-height:var(--leading-snug)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-normal{--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-tight{--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.tracking-wide{--tw-tracking:var(--tracking-wide);letter-spacing:var(--tracking-wide)}.break-words{overflow-wrap:break-word}.text-\\[var\\(--card\\)\\]{color:var(--card)}.text-brand{color:var(--color-brand)}.text-brand-foreground{color:var(--color-brand-foreground)}.text-destructive{color:var(--color-destructive)}.text-foreground{color:var(--color-foreground)}.text-muted-foreground{color:var(--color-muted-foreground)}.text-primary-foreground{color:var(--color-primary-foreground)}.uppercase{text-transform:uppercase}.underline{text-decoration-line:underline}.underline-offset-2{text-underline-offset:2px}.shadow-panel{--tw-shadow:var(--panel-shadow);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.backdrop-blur-\\[10px\\]{--tw-backdrop-blur:blur(10px);-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))}.duration-150{--tw-duration:.15s;transition-duration:.15s}.select-none{-webkit-user-select:none;user-select:none}.paused{animation-play-state:paused}.running{animation-play-state:running}@media (hover:hover){.hover\\:bg-\\[var\\(--primary-hover\\)\\]:hover{background-color:var(--primary-hover)}.hover\\:text-foreground:hover{color:var(--color-foreground)}}.focus-visible\\:border-ring:focus-visible{border-color:var(--color-ring)}.focus-visible\\:outline-2:focus-visible{outline-style:var(--tw-outline-style);outline-width:2px}.focus-visible\\:outline-offset-0:focus-visible{outline-offset:0px}.focus-visible\\:outline-offset-2:focus-visible{outline-offset:2px}.focus-visible\\:outline-ring:focus-visible{outline-color:var(--color-ring)}.aria-invalid\\:border-destructive[aria-invalid=true]{border-color:var(--color-destructive)}}@property --tw-animation-delay{syntax:\"*\";inherits:false;initial-value:0s}@property --tw-animation-direction{syntax:\"*\";inherits:false;initial-value:normal}@property --tw-animation-duration{syntax:\"*\";inherits:false}@property --tw-animation-fill-mode{syntax:\"*\";inherits:false;initial-value:none}@property --tw-animation-iteration-count{syntax:\"*\";inherits:false;initial-value:1}@property --tw-enter-blur{syntax:\"*\";inherits:false;initial-value:0}@property --tw-enter-opacity{syntax:\"*\";inherits:false;initial-value:1}@property --tw-enter-rotate{syntax:\"*\";inherits:false;initial-value:0}@property --tw-enter-scale{syntax:\"*\";inherits:false;initial-value:1}@property --tw-enter-translate-x{syntax:\"*\";inherits:false;initial-value:0}@property --tw-enter-translate-y{syntax:\"*\";inherits:false;initial-value:0}@property --tw-exit-blur{syntax:\"*\";inherits:false;initial-value:0}@property --tw-exit-opacity{syntax:\"*\";inherits:false;initial-value:1}@property --tw-exit-rotate{syntax:\"*\";inherits:false;initial-value:0}@property --tw-exit-scale{syntax:\"*\";inherits:false;initial-value:1}@property --tw-exit-translate-x{syntax:\"*\";inherits:false;initial-value:0}@property --tw-exit-translate-y{syntax:\"*\";inherits:false;initial-value:0}@media (prefers-reduced-motion:reduce){:root{--duration-instant:0s;--duration-fast:0s;--duration-base:0s;--duration-slow:0s;--duration-slower:0s;--default-transition-duration:0s}[data-vaul-drawer],[data-vaul-overlay]{transition-duration:0s!important;animation-duration:0s!important}}.dark:not([data-theme]){--input:#35312f}@supports (color:color-mix(in lab, red, red)){.dark:not([data-theme]){--input:color-mix(in oklab, var(--color-stone-800) 55%, var(--color-stone-700))}}.dark:not([data-theme]){--surface:#35312f}@supports (color:color-mix(in lab, red, red)){.dark:not([data-theme]){--surface:color-mix(in oklab, var(--color-stone-800) 55%, var(--color-stone-700))}}.dark:not([data-theme]){--muted:#35312f}@supports (color:color-mix(in lab, red, red)){.dark:not([data-theme]){--muted:color-mix(in oklab, var(--color-stone-800) 55%, var(--color-stone-700))}}:root:not(.dark):not([data-theme]){--background:var(--color-neutral-50)}[data-slot=dialog-content],[data-slot=alert-dialog-content],[data-slot=sheet-content],[data-slot=drawer-content]{background-color:var(--card)}[data-slot=table-body] tr:hover{background-color:var(--accent)}@supports (color:color-mix(in lab, red, red)){[data-slot=table-body] tr:hover{background-color:color-mix(in oklab, var(--accent) 45%, transparent)}}[data-theme=canopy]{--background:#f3f7f4}@supports (color:color-mix(in lab, red, red)){[data-theme=canopy]{--background:color-mix(in oklab, var(--color-emerald-50) 22%, var(--color-stone-100))}}[data-theme=canopy]{--background-emphasis:var(--color-neutral-900);--foreground:#14201a;--foreground-alt:#3b4a42;--foreground-subtle:#5c6f64;--primary:var(--color-emerald-800);--primary-foreground:var(--color-neutral-50);--primary-hover:var(--color-emerald-900);--secondary:#eaeeeb}@supports (color:color-mix(in lab, red, red)){[data-theme=canopy]{--secondary:color-mix(in oklab, var(--color-emerald-50) 30%, var(--color-neutral-100))}}[data-theme=canopy]{--secondary-foreground:#14201a;--secondary-hover:#f1f9f4}@supports (color:color-mix(in lab, red, red)){[data-theme=canopy]{--secondary-hover:color-mix(in oklab, var(--color-emerald-50) 45%, var(--color-neutral-50))}}[data-theme=canopy]{--muted:#eaedea}@supports (color:color-mix(in lab, red, red)){[data-theme=canopy]{--muted:color-mix(in oklab, var(--color-emerald-50) 22%, var(--color-neutral-100))}}[data-theme=canopy]{--muted-foreground:#5c6f64;--accent:#eaf0ed}@supports (color:color-mix(in lab, red, red)){[data-theme=canopy]{--accent:color-mix(in oklab, var(--color-emerald-50) 40%, var(--color-neutral-100))}}[data-theme=canopy]{--accent-foreground:var(--color-emerald-800);--destructive:var(--color-red-600);--destructive-foreground:var(--color-white);--destructive-soft:var(--color-red-100);--destructive-soft-foreground:var(--color-red-800);--ghost:#fff0;--ghost-foreground:#3b4a42;--ghost-hover:#0f291d0d;--positive:var(--color-green-100);--positive-foreground:var(--color-green-900);--surface:#fcfffd}@supports (color:color-mix(in lab, red, red)){[data-theme=canopy]{--surface:color-mix(in oklab, var(--color-emerald-50) 18%, var(--color-white))}}[data-theme=canopy]{--surface-emphasis:#bacbbf}@supports (color:color-mix(in lab, red, red)){[data-theme=canopy]{--surface-emphasis:color-mix(in oklab, var(--color-emerald-200) 25%, var(--color-neutral-300))}}[data-theme=canopy]{--surface-raised:#d5ded7}@supports (color:color-mix(in lab, red, red)){[data-theme=canopy]{--surface-raised:color-mix(in oklab, var(--color-emerald-100) 25%, var(--color-neutral-200))}}[data-theme=canopy]{--border:#c8ddd1}@supports (color:color-mix(in lab, red, red)){[data-theme=canopy]{--border:color-mix(in oklab, var(--color-emerald-200) 30%, var(--color-neutral-200))}}[data-theme=canopy]{--border-light:#e3ede7}@supports (color:color-mix(in lab, red, red)){[data-theme=canopy]{--border-light:color-mix(in oklab, var(--color-emerald-100) 25%, var(--color-neutral-100))}}[data-theme=canopy]{--border-lighter:#f3f7f4}@supports (color:color-mix(in lab, red, red)){[data-theme=canopy]{--border-lighter:color-mix(in oklab, var(--color-emerald-50) 25%, var(--color-neutral-50))}}[data-theme=canopy]{--border-strong:#9abcaa}@supports (color:color-mix(in lab, red, red)){[data-theme=canopy]{--border-strong:color-mix(in oklab, var(--color-emerald-300) 30%, var(--color-neutral-400))}}[data-theme=canopy]{--input:#f2f8f4}@supports (color:color-mix(in lab, red, red)){[data-theme=canopy]{--input:color-mix(in oklab, var(--color-emerald-50) 35%, var(--color-neutral-50))}}[data-theme=canopy]{--input-foreground:#14201a;--ring:var(--color-emerald-600);--ring-error:var(--color-red-300);--card:var(--color-white);--card-foreground:#14201a;--popover:var(--color-white);--popover-foreground:#14201a;--warning:var(--color-yellow-100);--warning-foreground:var(--color-yellow-900);--sidebar:var(--color-white);--sidebar-foreground:#3b4a42;--sidebar-primary:var(--primary);--sidebar-primary-foreground:var(--primary-foreground);--sidebar-accent:var(--accent);--sidebar-accent-foreground:var(--accent-foreground);--sidebar-border:#c8ddd1}@supports (color:color-mix(in lab, red, red)){[data-theme=canopy]{--sidebar-border:color-mix(in oklab, var(--color-emerald-200) 30%, var(--color-neutral-200))}}[data-theme=canopy]{--sidebar-ring:var(--color-emerald-600);--backdrop:#0a1a1299;--theme-background:#f3f7f4}@supports (color:color-mix(in lab, red, red)){[data-theme=canopy]{--theme-background:color-mix(in oklab, var(--color-emerald-50) 22%, var(--color-stone-100))}}[data-theme=canopy].dark,[data-theme=canopy] .dark{--step:#35312f}@supports (color:color-mix(in lab, red, red)){[data-theme=canopy].dark,[data-theme=canopy] .dark{--step:color-mix(in oklab, var(--color-stone-800) 55%, var(--color-stone-700))}}[data-theme=canopy].dark,[data-theme=canopy] .dark{--panel:#23201e}@supports (color:color-mix(in lab, red, red)){[data-theme=canopy].dark,[data-theme=canopy] .dark{--panel:color-mix(in oklab, var(--color-stone-900) 45%, var(--color-stone-800))}}[data-theme=canopy].dark,[data-theme=canopy] .dark{--background:#0b0f0d}@supports (color:color-mix(in lab, red, red)){[data-theme=canopy].dark,[data-theme=canopy] .dark{--background:color-mix(in oklab, var(--color-emerald-950) 14%, var(--color-stone-950))}}[data-theme=canopy].dark,[data-theme=canopy] .dark{--background-emphasis:var(--color-neutral-100);--foreground:#e9f0ec;--foreground-alt:#c2d1c8;--foreground-subtle:#9aaba2;--primary:var(--color-emerald-500);--primary-foreground:#04140d;--primary-hover:var(--color-emerald-400);--secondary:#383c37}@supports (color:color-mix(in lab, red, red)){[data-theme=canopy].dark,[data-theme=canopy] .dark{--secondary:color-mix(in oklab, var(--color-emerald-950) 18%, var(--color-stone-700))}}[data-theme=canopy].dark,[data-theme=canopy] .dark{--secondary-foreground:#e9f0ec;--secondary-hover:#484c46}@supports (color:color-mix(in lab, red, red)){[data-theme=canopy].dark,[data-theme=canopy] .dark{--secondary-hover:color-mix(in oklab, var(--color-emerald-950) 18%, var(--color-stone-600))}}[data-theme=canopy].dark,[data-theme=canopy] .dark{--muted:#022c22}@supports (color:color-mix(in lab, red, red)){[data-theme=canopy].dark,[data-theme=canopy] .dark{--muted:color-mix(in oklab, var(--color-emerald-950) 10%, var(--step))}}[data-theme=canopy].dark,[data-theme=canopy] .dark{--muted-foreground:#9aaba2;--accent:#1b2723}@supports (color:color-mix(in lab, red, red)){[data-theme=canopy].dark,[data-theme=canopy] .dark{--accent:color-mix(in oklab, var(--color-emerald-950) 35%, var(--color-stone-800))}}[data-theme=canopy].dark,[data-theme=canopy] .dark{--accent-foreground:var(--color-emerald-300);--destructive:var(--color-red-500);--destructive-foreground:var(--color-white);--destructive-soft:var(--color-red-950);--destructive-soft-foreground:var(--color-red-200);--ghost:#fff0;--ghost-foreground:#c2d1c8;--ghost-hover:#e9f0ec14;--positive:var(--color-green-950);--positive-foreground:var(--color-green-200);--surface:#022c22}@supports (color:color-mix(in lab, red, red)){[data-theme=canopy].dark,[data-theme=canopy] .dark{--surface:color-mix(in oklab, var(--color-emerald-950) 10%, var(--step))}}[data-theme=canopy].dark,[data-theme=canopy] .dark{--surface-emphasis:#4b524b}@supports (color:color-mix(in lab, red, red)){[data-theme=canopy].dark,[data-theme=canopy] .dark{--surface-emphasis:color-mix(in oklab, var(--color-emerald-900) 15%, var(--color-stone-600))}}[data-theme=canopy].dark,[data-theme=canopy] .dark{--surface-raised:#3b423c}@supports (color:color-mix(in lab, red, red)){[data-theme=canopy].dark,[data-theme=canopy] .dark{--surface-raised:color-mix(in oklab, var(--color-emerald-900) 15%, var(--color-stone-700))}}[data-theme=canopy].dark,[data-theme=canopy] .dark{--border:#39433c}@supports (color:color-mix(in lab, red, red)){[data-theme=canopy].dark,[data-theme=canopy] .dark{--border:color-mix(in oklab, var(--color-emerald-900) 18%, var(--color-stone-700))}}[data-theme=canopy].dark,[data-theme=canopy] .dark{--border-light:#242b27}@supports (color:color-mix(in lab, red, red)){[data-theme=canopy].dark,[data-theme=canopy] .dark{--border-light:color-mix(in oklab, var(--color-emerald-900) 15%, var(--color-stone-800))}}[data-theme=canopy].dark,[data-theme=canopy] .dark{--border-lighter:#232624}@supports (color:color-mix(in lab, red, red)){[data-theme=canopy].dark,[data-theme=canopy] .dark{--border-lighter:color-mix(in oklab, var(--color-emerald-950) 15%, var(--color-stone-800))}}[data-theme=canopy].dark,[data-theme=canopy] .dark{--border-strong:#48554d}@supports (color:color-mix(in lab, red, red)){[data-theme=canopy].dark,[data-theme=canopy] .dark{--border-strong:color-mix(in oklab, var(--color-emerald-800) 18%, var(--color-stone-600))}}[data-theme=canopy].dark,[data-theme=canopy] .dark{--input:#022c22}@supports (color:color-mix(in lab, red, red)){[data-theme=canopy].dark,[data-theme=canopy] .dark{--input:color-mix(in oklab, var(--color-emerald-950) 10%, var(--step))}}[data-theme=canopy].dark,[data-theme=canopy] .dark{--input-foreground:#e9f0ec;--ring:var(--color-emerald-500);--ring-error:var(--color-red-400);--card:#022c22}@supports (color:color-mix(in lab, red, red)){[data-theme=canopy].dark,[data-theme=canopy] .dark{--card:color-mix(in oklab, var(--color-emerald-950) 7%, var(--panel))}}[data-theme=canopy].dark,[data-theme=canopy] .dark{--card-foreground:#e9f0ec;--popover:#022c22}@supports (color:color-mix(in lab, red, red)){[data-theme=canopy].dark,[data-theme=canopy] .dark{--popover:color-mix(in oklab, var(--color-emerald-950) 7%, var(--panel))}}[data-theme=canopy].dark,[data-theme=canopy] .dark{--popover-foreground:#e9f0ec;--warning:var(--color-amber-950);--warning-foreground:var(--color-amber-200);--sidebar:#022c22}@supports (color:color-mix(in lab, red, red)){[data-theme=canopy].dark,[data-theme=canopy] .dark{--sidebar:color-mix(in oklab, var(--color-emerald-950) 7%, var(--panel))}}[data-theme=canopy].dark,[data-theme=canopy] .dark{--sidebar-foreground:#c2d1c8;--sidebar-primary:var(--primary);--sidebar-primary-foreground:var(--primary-foreground);--sidebar-accent:var(--accent);--sidebar-accent-foreground:var(--accent-foreground);--sidebar-border:#242b27}@supports (color:color-mix(in lab, red, red)){[data-theme=canopy].dark,[data-theme=canopy] .dark{--sidebar-border:color-mix(in oklab, var(--color-emerald-900) 15%, var(--color-stone-800))}}[data-theme=canopy].dark,[data-theme=canopy] .dark{--sidebar-ring:var(--color-emerald-500);--backdrop:#000c;--theme-background:#0b0f0d}@supports (color:color-mix(in lab, red, red)){[data-theme=canopy].dark,[data-theme=canopy] .dark{--theme-background:color-mix(in oklab, var(--color-emerald-950) 14%, var(--color-stone-950))}}[data-theme=canopy].dark,[data-theme=canopy] .dark{--wash-a:#065f46}@supports (color:color-mix(in lab, red, red)){[data-theme=canopy].dark,[data-theme=canopy] .dark{--wash-a:color-mix(in oklab, var(--color-emerald-800) 52%, var(--background))}}@supports (color:color-mix(in lab, red, red)){[data-theme=canopy].dark,[data-theme=canopy] .dark{--wash-b:color-mix(in oklab, var(--color-emerald-900) 62%, var(--background))}}[data-theme=canopy] :is([data-slot=input-group],[data-slot=input],[data-slot=textarea],textarea){--tw-ring-offset-width:0px;--tw-ring-offset-color:transparent}[data-theme=canopy].dark body,[data-theme=canopy] .dark body{background-image:radial-gradient(1200px 720px at 8% -10%, var(--wash-a), transparent 62%), radial-gradient(1000px 620px at 96% 2%, var(--wash-b), transparent 58%);background-repeat:no-repeat;background-attachment:fixed}[data-theme=canopy] [data-slot=card]{box-shadow:none}:root{--brand:var(--color-emerald-800);--brand-foreground:var(--color-neutral-50)}[data-theme=canopy].dark,[data-theme=canopy] .dark{--brand:var(--color-emerald-400);--brand-foreground:#04140d;--primary:#e9f0ec;--primary-foreground:#101711;--primary-hover:var(--color-white)}:root{--panel-shadow:0 18px 40px -28px #14201a73}[data-theme=canopy].dark,[data-theme=canopy] .dark{--panel-shadow:0 18px 44px -26px #000000b3;--wash-a:#065f46}@supports (color:color-mix(in lab, red, red)){[data-theme=canopy].dark,[data-theme=canopy] .dark{--wash-a:color-mix(in oklab, var(--color-emerald-800) 55%, var(--background))}}[data-theme=canopy].dark,[data-theme=canopy] .dark{--wash-b:#064e3b}@supports (color:color-mix(in lab, red, red)){[data-theme=canopy].dark,[data-theme=canopy] .dark{--wash-b:color-mix(in oklab, var(--color-emerald-900) 70%, var(--background))}}@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-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-outline-style{syntax:\"*\";inherits:false;initial-value:solid}</style><script>matchMedia('(prefers-color-scheme:dark)').matches&&document.documentElement.classList.add('dark')<\/script></head><body class=\"grid min-h-svh place-items-center p-6 text-foreground\"><main class=\"w-full max-w-sm rounded-2xl border border-border bg-card p-8 shadow-panel backdrop-blur-[10px]\"><div class=\"mb-5 grid size-11 place-items-center rounded-xl bg-brand text-brand-foreground\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"lucide lucide-check size-5\" aria-hidden=\"true\"><path d=\"M20 6 9 17l-5-5\"></path></svg></div><p class=\"mb-1 text-xs font-semibold uppercase tracking-wide text-brand\">Canopy CLI</p><h1 class=\"mb-2 text-2xl font-semibold tracking-tight break-words\">You’re signed in</h1><p class=\"mt-2 text-sm leading-relaxed text-muted-foreground\">You can close this tab and return to the terminal — the CLI has your code.</p><p class=\"mt-6 border-t border-border pt-4 text-xs text-muted-foreground\">This tab only finishes the browser step — keep using the terminal for the rest.</p></main></body></html>";
11
- const failedHtml = "<!doctype html><html lang=\"en\" data-theme=\"canopy\"><head><meta charSet=\"utf-8\"/><meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/><title>Sign-in didn’t finish · Canopy</title><style>/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */\n@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-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-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-outline-style:solid;--tw-animation-delay:0s;--tw-animation-direction:normal;--tw-animation-duration:initial;--tw-animation-fill-mode:none;--tw-animation-iteration-count:1;--tw-enter-blur:0;--tw-enter-opacity:1;--tw-enter-rotate:0;--tw-enter-scale:1;--tw-enter-translate-x:0;--tw-enter-translate-y:0;--tw-exit-blur:0;--tw-exit-opacity:1;--tw-exit-rotate:0;--tw-exit-scale:1;--tw-exit-translate-x:0;--tw-exit-translate-y:0}}}@layer theme{:root,:host{--font-sans:\"Helvetica Now for Monks\", ui-sans-serif, system-ui, sans-serif;--font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;--color-red-100:#ffebf0;--color-red-200:#ffd1dd;--color-red-300:#ffa8be;--color-red-400:#ff7a9c;--color-red-500:#ff527d;--color-red-600:#ff245b;--color-red-800:#a30029;--color-red-950:#610018;--color-amber-200:#fde68a;--color-amber-950:#451a03;--color-yellow-100:#fff7db;--color-yellow-900:#7a6000;--color-green-100:#e3fcf1;--color-green-200:#b8fadd;--color-green-900:#067445;--color-green-950:#065533;--color-emerald-50:#ecfdf5;--color-emerald-100:#d1fae5;--color-emerald-200:#a7f3d0;--color-emerald-300:#6ee7b7;--color-emerald-400:#34d399;--color-emerald-500:#10b981;--color-emerald-600:#059669;--color-emerald-800:#065f46;--color-emerald-900:#064e3b;--color-emerald-950:#022c22;--color-purple-50:#faf6fd;--color-purple-300:#d6b6f1;--color-purple-400:#c598ec;--color-purple-500:#ac6de3;--color-purple-600:#8c3fd2;--color-purple-700:#7d26c9;--color-purple-900:#501881;--color-gray-800:#5d5d60;--color-neutral-50:#f5f5f4;--color-neutral-100:#e9e8e7;--color-neutral-200:#d6d4d2;--color-neutral-300:#c0beb9;--color-neutral-400:#adaaa4;--color-neutral-500:#97938c;--color-neutral-600:#837f77;--color-neutral-700:#6c6962;--color-neutral-900:#484641;--color-neutral-950:#3e3c38;--color-stone-100:#f5f5f4;--color-stone-500:#78716c;--color-stone-600:#57534e;--color-stone-700:#44403c;--color-stone-800:#292524;--color-stone-900:#1c1917;--color-stone-950:#0c0a09;--color-black:#000;--color-white:#fff;--spacing:.25rem;--container-sm:24rem;--text-xs:12px;--text-xs--line-height:16px;--text-sm:14px;--text-sm--line-height:20px;--text-2xl:24px;--text-2xl--line-height:32px;--font-weight-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--tracking-tight:-.01em;--tracking-wide:.015em;--leading-snug:1.375;--leading-normal:1.5;--leading-relaxed:1.625;--radius-md:6px;--radius-lg:8px;--radius-xl:12px;--radius-2xl:16px;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono);--color-foreground:var(--foreground);--color-primary:var(--primary);--color-primary-foreground:var(--primary-foreground);--color-muted-foreground:var(--muted-foreground);--color-destructive:var(--destructive);--color-border:var(--border);--color-ring:var(--ring);--color-card:var(--card);--color-brand:var(--brand);--color-brand-foreground:var(--brand-foreground)}}@layer base{@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)}}}*,: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;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}:root,[data-theme=monks-flow]{--background:var(--color-white);--background-emphasis:var(--color-neutral-900);--foreground:var(--color-neutral-950);--foreground-alt:var(--color-neutral-700);--foreground-subtle:var(--color-neutral-600);--primary:var(--color-neutral-900);--primary-foreground:var(--color-neutral-50);--primary-hover:var(--color-neutral-950);--secondary:#f5f3f0;--secondary-foreground:var(--color-neutral-900);--secondary-hover:#e7e2dc;--muted:var(--color-neutral-100);--muted-foreground:var(--color-neutral-500);--accent:#e7e2dc;--accent-foreground:var(--color-neutral-900);--destructive:#e11d48;--destructive-foreground:var(--color-white);--destructive-soft:var(--color-red-100);--destructive-soft-foreground:var(--color-red-800);--ghost:#fff0;--ghost-foreground:var(--color-neutral-700);--ghost-hover:#0000000d;--positive:var(--color-green-100);--positive-foreground:var(--color-green-900);--surface:var(--color-neutral-50);--surface-emphasis:var(--color-neutral-300);--surface-raised:var(--color-neutral-200);--border:var(--color-neutral-200);--border-light:var(--color-neutral-100);--border-lighter:var(--color-neutral-50);--border-strong:var(--color-neutral-400);--input:var(--color-neutral-50);--input-foreground:var(--color-neutral-950);--ring:var(--color-black);--ring-error:var(--color-red-300);--card:var(--color-white);--card-foreground:var(--color-neutral-950);--popover:var(--color-white);--popover-foreground:var(--color-neutral-950);--warning:var(--color-yellow-100);--warning-foreground:var(--color-yellow-900);--chart-1:#f54a00;--chart-2:#009689;--chart-3:#104e64;--chart-4:#ffb900;--chart-5:#fe9a00;--chart-negative:#f54a00;--chart-positive:#009689;--chart-fill:#bfdeffb3;--chart-fill-2:#aaccffb3;--chart-stroke-2:#3f8dff;--sidebar:var(--color-neutral-50);--sidebar-foreground:var(--color-gray-800);--sidebar-primary:var(--primary);--sidebar-primary-foreground:var(--primary-foreground);--sidebar-accent:var(--accent);--sidebar-accent-foreground:var(--accent-foreground);--sidebar-border:var(--color-neutral-200);--sidebar-ring:var(--ring);--backdrop:#0009;--theme-background:#f5f4f2}:root.dark:not([data-theme]),[data-theme=monks-flow].dark,[data-theme=monks-flow] .dark{--background:var(--color-stone-900);--background-emphasis:var(--color-neutral-100);--foreground:var(--color-neutral-50);--foreground-alt:var(--color-neutral-300);--foreground-subtle:var(--color-neutral-400);--primary:var(--color-neutral-50);--primary-foreground:var(--color-black);--primary-hover:var(--color-neutral-100);--secondary:var(--color-stone-700);--secondary-foreground:var(--color-neutral-100);--secondary-hover:var(--color-stone-600);--muted:var(--color-stone-800);--muted-foreground:var(--color-neutral-500);--accent:var(--color-neutral-900);--accent-foreground:var(--color-neutral-300);--destructive:var(--color-red-500);--destructive-foreground:var(--color-white);--destructive-soft:var(--color-red-950);--destructive-soft-foreground:var(--color-red-200);--ghost:#fff0;--ghost-foreground:var(--color-neutral-300);--ghost-hover:#ffffff14;--positive:var(--color-green-950);--positive-foreground:var(--color-green-200);--surface:var(--color-stone-800);--surface-emphasis:var(--color-stone-600);--surface-raised:var(--color-stone-700);--border:var(--color-stone-600);--border-light:var(--color-stone-700);--border-lighter:var(--color-stone-800);--border-strong:var(--color-stone-500);--input:var(--color-stone-800);--input-foreground:var(--color-neutral-50);--ring:var(--color-white);--ring-error:var(--color-red-400);--card:var(--color-stone-800);--card-foreground:var(--color-neutral-100);--popover:var(--color-stone-800);--popover-foreground:var(--color-neutral-100);--warning:var(--color-amber-950);--warning-foreground:var(--color-amber-200);--chart-1:#ff6b33;--chart-2:#00b3a4;--chart-3:#2196a8;--chart-4:#ffc733;--chart-5:#ffad33;--chart-negative:#ff6b33;--chart-positive:#00b3a4;--chart-fill:#3382ff40;--chart-fill-2:#5096ff33;--chart-stroke-2:#5da3ff;--sidebar:var(--color-stone-800);--sidebar-foreground:var(--color-neutral-300);--sidebar-primary:var(--primary);--sidebar-primary-foreground:var(--primary-foreground);--sidebar-accent:var(--accent);--sidebar-accent-foreground:var(--accent-foreground);--sidebar-border:var(--color-stone-700);--sidebar-ring:var(--ring);--backdrop:#000c;--theme-background:#0c0a09}[data-theme=metropolis]{--background:var(--color-white);--background-emphasis:var(--color-neutral-900);--foreground:var(--color-neutral-950);--foreground-alt:var(--color-neutral-700);--foreground-subtle:var(--color-neutral-600);--primary:var(--color-purple-600);--primary-foreground:var(--color-neutral-50);--primary-hover:var(--color-purple-700);--secondary:var(--color-neutral-100);--secondary-foreground:var(--color-neutral-900);--secondary-hover:var(--color-neutral-50);--muted:var(--color-neutral-100);--muted-foreground:var(--color-neutral-500);--accent:var(--color-purple-50);--accent-foreground:var(--color-purple-600);--destructive:var(--color-red-600);--destructive-foreground:var(--color-white);--destructive-soft:var(--color-red-100);--destructive-soft-foreground:var(--color-red-800);--ghost:#fff0;--ghost-foreground:var(--color-neutral-700);--ghost-hover:#0000000d;--positive:var(--color-green-100);--positive-foreground:var(--color-green-900);--surface:var(--color-neutral-50);--surface-emphasis:var(--color-neutral-300);--surface-raised:var(--color-neutral-200);--border:var(--color-neutral-200);--border-light:var(--color-neutral-100);--border-lighter:var(--color-neutral-50);--border-strong:var(--color-neutral-400);--input:var(--color-neutral-50);--input-foreground:var(--color-neutral-950);--ring:var(--color-neutral-300);--ring-error:var(--color-red-300);--card:var(--color-white);--card-foreground:var(--color-neutral-950);--popover:var(--color-white);--popover-foreground:var(--color-neutral-950);--warning:var(--color-yellow-100);--warning-foreground:var(--color-yellow-900);--chart-1:#f54a00;--chart-2:#009689;--chart-3:#104e64;--chart-4:#ffb900;--chart-5:#fe9a00;--chart-negative:#f54a00;--chart-positive:#009689;--chart-fill:#bfdeffb3;--chart-fill-2:#aaccffb3;--chart-stroke-2:#3f8dff;--sidebar:var(--color-neutral-50);--sidebar-foreground:var(--color-gray-800);--sidebar-primary:var(--primary);--sidebar-primary-foreground:var(--primary-foreground);--sidebar-accent:var(--accent);--sidebar-accent-foreground:var(--accent-foreground);--sidebar-border:var(--color-neutral-200);--sidebar-ring:var(--color-neutral-300);--backdrop:#0009;--theme-background:#f0f3f8}[data-theme=metropolis].dark,[data-theme=metropolis] .dark{--background:var(--color-stone-900);--background-emphasis:var(--color-neutral-100);--foreground:var(--color-neutral-50);--foreground-alt:var(--color-neutral-300);--foreground-subtle:var(--color-neutral-400);--primary:var(--color-purple-500);--primary-foreground:var(--color-white);--primary-hover:var(--color-purple-400);--secondary:var(--color-stone-700);--secondary-foreground:var(--color-neutral-100);--secondary-hover:var(--color-stone-600);--muted:var(--color-stone-800);--muted-foreground:var(--color-neutral-400);--accent:var(--color-purple-900);--accent-foreground:var(--color-purple-300);--destructive:var(--color-red-500);--destructive-foreground:var(--color-white);--destructive-soft:var(--color-red-950);--destructive-soft-foreground:var(--color-red-200);--ghost:#fff0;--ghost-foreground:var(--color-neutral-300);--ghost-hover:#ffffff14;--positive:var(--color-green-950);--positive-foreground:var(--color-green-200);--surface:var(--color-stone-800);--surface-emphasis:var(--color-stone-600);--surface-raised:var(--color-stone-700);--border:var(--color-stone-600);--border-light:var(--color-stone-700);--border-lighter:var(--color-stone-800);--border-strong:var(--color-stone-500);--input:var(--color-stone-800);--input-foreground:var(--color-neutral-50);--ring:var(--color-neutral-500);--ring-error:var(--color-red-400);--card:var(--color-stone-800);--card-foreground:var(--color-neutral-100);--popover:var(--color-stone-800);--popover-foreground:var(--color-neutral-100);--warning:var(--color-amber-950);--warning-foreground:var(--color-amber-200);--chart-1:#ff6b33;--chart-2:#00b3a4;--chart-3:#2196a8;--chart-4:#ffc733;--chart-5:#ffad33;--chart-negative:#ff6b33;--chart-positive:#00b3a4;--chart-fill:#3382ff40;--chart-fill-2:#5096ff33;--chart-stroke-2:#5da3ff;--sidebar:var(--color-stone-800);--sidebar-foreground:var(--color-neutral-300);--sidebar-primary:var(--primary);--sidebar-primary-foreground:var(--primary-foreground);--sidebar-accent:var(--accent);--sidebar-accent-foreground:var(--accent-foreground);--sidebar-border:var(--color-stone-700);--sidebar-ring:var(--color-neutral-500);--backdrop:#000c;--theme-background:#0c0a09}*{border-color:var(--border)}body{background-color:var(--background);color:var(--foreground)}button,[role=button]{cursor:pointer}:focus-visible{outline:2px solid var(--ring);outline-offset:2px}}@layer components;@layer utilities{.relative{position:relative}.mt-2{margin-top:calc(var(--spacing) * 2)}.mt-3\\.5{margin-top:calc(var(--spacing) * 3.5)}.mt-5{margin-top:calc(var(--spacing) * 5)}.mt-6{margin-top:calc(var(--spacing) * 6)}.mt-px{margin-top:1px}.mr-2{margin-right:calc(var(--spacing) * 2)}.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-5{margin-bottom:calc(var(--spacing) * 5)}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.size-4{width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}.size-5{width:calc(var(--spacing) * 5);height:calc(var(--spacing) * 5)}.size-11{width:calc(var(--spacing) * 11);height:calc(var(--spacing) * 11)}.h-11{height:calc(var(--spacing) * 11)}.min-h-svh{min-height:100svh}.w-full{width:100%}.max-w-sm{max-width:var(--container-sm)}.shrink-0{flex-shrink:0}.place-items-center{place-items:center}.items-center{align-items:center}.items-start{align-items:flex-start}.justify-center{justify-content:center}.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)}.overflow-x-auto{overflow-x:auto}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:var(--radius-2xl)}.rounded-lg{border-radius:var(--radius-lg)}.rounded-xl{border-radius:var(--radius-xl)}.rounded-r-md{border-top-right-radius:var(--radius-md);border-bottom-right-radius:var(--radius-md)}.border{border-style:var(--tw-border-style);border-width:1px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-l-2{border-left-style:var(--tw-border-style);border-left-width:2px}.border-border{border-color:var(--color-border)}.border-brand{border-color:var(--color-brand)}.border-destructive{border-color:var(--color-destructive)}.bg-\\[color-mix\\(in_oklab\\,var\\(--destructive\\)_8\\%\\,transparent\\)\\]{background-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.bg-\\[color-mix\\(in_oklab\\,var\\(--destructive\\)_8\\%\\,transparent\\)\\]{background-color:color-mix(in oklab,var(--destructive) 8%,transparent)}}.bg-\\[color-mix\\(in_oklab\\,var\\(--foreground\\)_6\\%\\,transparent\\)\\]{background-color:var(--foreground)}@supports (color:color-mix(in lab, red, red)){.bg-\\[color-mix\\(in_oklab\\,var\\(--foreground\\)_6\\%\\,transparent\\)\\]{background-color:color-mix(in oklab,var(--foreground) 6%,transparent)}}.bg-\\[var\\(--input\\)\\]{background-color:var(--input)}.bg-brand{background-color:var(--color-brand)}.bg-card{background-color:var(--color-card)}.bg-destructive{background-color:var(--color-destructive)}.bg-primary{background-color:var(--color-primary)}.p-6{padding:calc(var(--spacing) * 6)}.p-8{padding:calc(var(--spacing) * 8)}.px-1{padding-inline:var(--spacing)}.px-2\\.5{padding-inline:calc(var(--spacing) * 2.5)}.px-3\\.5{padding-inline:calc(var(--spacing) * 3.5)}.px-4{padding-inline:calc(var(--spacing) * 4)}.py-2{padding-block:calc(var(--spacing) * 2)}.py-2\\.5{padding-block:calc(var(--spacing) * 2.5)}.py-px{padding-block:1px}.pt-4{padding-top:calc(var(--spacing) * 4)}.pr-3{padding-right:calc(var(--spacing) * 3)}.pl-3{padding-left:calc(var(--spacing) * 3)}.text-center{text-align:center}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--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-\\[0\\.85em\\]{font-size:.85em}.leading-normal{--tw-leading:var(--leading-normal);line-height:var(--leading-normal)}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.leading-snug{--tw-leading:var(--leading-snug);line-height:var(--leading-snug)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-normal{--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-tight{--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.tracking-wide{--tw-tracking:var(--tracking-wide);letter-spacing:var(--tracking-wide)}.break-words{overflow-wrap:break-word}.text-\\[var\\(--card\\)\\]{color:var(--card)}.text-brand{color:var(--color-brand)}.text-brand-foreground{color:var(--color-brand-foreground)}.text-destructive{color:var(--color-destructive)}.text-foreground{color:var(--color-foreground)}.text-muted-foreground{color:var(--color-muted-foreground)}.text-primary-foreground{color:var(--color-primary-foreground)}.uppercase{text-transform:uppercase}.underline{text-decoration-line:underline}.underline-offset-2{text-underline-offset:2px}.shadow-panel{--tw-shadow:var(--panel-shadow);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.backdrop-blur-\\[10px\\]{--tw-backdrop-blur:blur(10px);-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))}.duration-150{--tw-duration:.15s;transition-duration:.15s}.select-none{-webkit-user-select:none;user-select:none}.paused{animation-play-state:paused}.running{animation-play-state:running}@media (hover:hover){.hover\\:bg-\\[var\\(--primary-hover\\)\\]:hover{background-color:var(--primary-hover)}.hover\\:text-foreground:hover{color:var(--color-foreground)}}.focus-visible\\:border-ring:focus-visible{border-color:var(--color-ring)}.focus-visible\\:outline-2:focus-visible{outline-style:var(--tw-outline-style);outline-width:2px}.focus-visible\\:outline-offset-0:focus-visible{outline-offset:0px}.focus-visible\\:outline-offset-2:focus-visible{outline-offset:2px}.focus-visible\\:outline-ring:focus-visible{outline-color:var(--color-ring)}.aria-invalid\\:border-destructive[aria-invalid=true]{border-color:var(--color-destructive)}}@property --tw-animation-delay{syntax:\"*\";inherits:false;initial-value:0s}@property --tw-animation-direction{syntax:\"*\";inherits:false;initial-value:normal}@property --tw-animation-duration{syntax:\"*\";inherits:false}@property --tw-animation-fill-mode{syntax:\"*\";inherits:false;initial-value:none}@property --tw-animation-iteration-count{syntax:\"*\";inherits:false;initial-value:1}@property --tw-enter-blur{syntax:\"*\";inherits:false;initial-value:0}@property --tw-enter-opacity{syntax:\"*\";inherits:false;initial-value:1}@property --tw-enter-rotate{syntax:\"*\";inherits:false;initial-value:0}@property --tw-enter-scale{syntax:\"*\";inherits:false;initial-value:1}@property --tw-enter-translate-x{syntax:\"*\";inherits:false;initial-value:0}@property --tw-enter-translate-y{syntax:\"*\";inherits:false;initial-value:0}@property --tw-exit-blur{syntax:\"*\";inherits:false;initial-value:0}@property --tw-exit-opacity{syntax:\"*\";inherits:false;initial-value:1}@property --tw-exit-rotate{syntax:\"*\";inherits:false;initial-value:0}@property --tw-exit-scale{syntax:\"*\";inherits:false;initial-value:1}@property --tw-exit-translate-x{syntax:\"*\";inherits:false;initial-value:0}@property --tw-exit-translate-y{syntax:\"*\";inherits:false;initial-value:0}@media (prefers-reduced-motion:reduce){:root{--duration-instant:0s;--duration-fast:0s;--duration-base:0s;--duration-slow:0s;--duration-slower:0s;--default-transition-duration:0s}[data-vaul-drawer],[data-vaul-overlay]{transition-duration:0s!important;animation-duration:0s!important}}.dark:not([data-theme]){--input:#35312f}@supports (color:color-mix(in lab, red, red)){.dark:not([data-theme]){--input:color-mix(in oklab, var(--color-stone-800) 55%, var(--color-stone-700))}}.dark:not([data-theme]){--surface:#35312f}@supports (color:color-mix(in lab, red, red)){.dark:not([data-theme]){--surface:color-mix(in oklab, var(--color-stone-800) 55%, var(--color-stone-700))}}.dark:not([data-theme]){--muted:#35312f}@supports (color:color-mix(in lab, red, red)){.dark:not([data-theme]){--muted:color-mix(in oklab, var(--color-stone-800) 55%, var(--color-stone-700))}}:root:not(.dark):not([data-theme]){--background:var(--color-neutral-50)}[data-slot=dialog-content],[data-slot=alert-dialog-content],[data-slot=sheet-content],[data-slot=drawer-content]{background-color:var(--card)}[data-slot=table-body] tr:hover{background-color:var(--accent)}@supports (color:color-mix(in lab, red, red)){[data-slot=table-body] tr:hover{background-color:color-mix(in oklab, var(--accent) 45%, transparent)}}[data-theme=canopy]{--background:#f3f7f4}@supports (color:color-mix(in lab, red, red)){[data-theme=canopy]{--background:color-mix(in oklab, var(--color-emerald-50) 22%, var(--color-stone-100))}}[data-theme=canopy]{--background-emphasis:var(--color-neutral-900);--foreground:#14201a;--foreground-alt:#3b4a42;--foreground-subtle:#5c6f64;--primary:var(--color-emerald-800);--primary-foreground:var(--color-neutral-50);--primary-hover:var(--color-emerald-900);--secondary:#eaeeeb}@supports (color:color-mix(in lab, red, red)){[data-theme=canopy]{--secondary:color-mix(in oklab, var(--color-emerald-50) 30%, var(--color-neutral-100))}}[data-theme=canopy]{--secondary-foreground:#14201a;--secondary-hover:#f1f9f4}@supports (color:color-mix(in lab, red, red)){[data-theme=canopy]{--secondary-hover:color-mix(in oklab, var(--color-emerald-50) 45%, var(--color-neutral-50))}}[data-theme=canopy]{--muted:#eaedea}@supports (color:color-mix(in lab, red, red)){[data-theme=canopy]{--muted:color-mix(in oklab, var(--color-emerald-50) 22%, var(--color-neutral-100))}}[data-theme=canopy]{--muted-foreground:#5c6f64;--accent:#eaf0ed}@supports (color:color-mix(in lab, red, red)){[data-theme=canopy]{--accent:color-mix(in oklab, var(--color-emerald-50) 40%, var(--color-neutral-100))}}[data-theme=canopy]{--accent-foreground:var(--color-emerald-800);--destructive:var(--color-red-600);--destructive-foreground:var(--color-white);--destructive-soft:var(--color-red-100);--destructive-soft-foreground:var(--color-red-800);--ghost:#fff0;--ghost-foreground:#3b4a42;--ghost-hover:#0f291d0d;--positive:var(--color-green-100);--positive-foreground:var(--color-green-900);--surface:#fcfffd}@supports (color:color-mix(in lab, red, red)){[data-theme=canopy]{--surface:color-mix(in oklab, var(--color-emerald-50) 18%, var(--color-white))}}[data-theme=canopy]{--surface-emphasis:#bacbbf}@supports (color:color-mix(in lab, red, red)){[data-theme=canopy]{--surface-emphasis:color-mix(in oklab, var(--color-emerald-200) 25%, var(--color-neutral-300))}}[data-theme=canopy]{--surface-raised:#d5ded7}@supports (color:color-mix(in lab, red, red)){[data-theme=canopy]{--surface-raised:color-mix(in oklab, var(--color-emerald-100) 25%, var(--color-neutral-200))}}[data-theme=canopy]{--border:#c8ddd1}@supports (color:color-mix(in lab, red, red)){[data-theme=canopy]{--border:color-mix(in oklab, var(--color-emerald-200) 30%, var(--color-neutral-200))}}[data-theme=canopy]{--border-light:#e3ede7}@supports (color:color-mix(in lab, red, red)){[data-theme=canopy]{--border-light:color-mix(in oklab, var(--color-emerald-100) 25%, var(--color-neutral-100))}}[data-theme=canopy]{--border-lighter:#f3f7f4}@supports (color:color-mix(in lab, red, red)){[data-theme=canopy]{--border-lighter:color-mix(in oklab, var(--color-emerald-50) 25%, var(--color-neutral-50))}}[data-theme=canopy]{--border-strong:#9abcaa}@supports (color:color-mix(in lab, red, red)){[data-theme=canopy]{--border-strong:color-mix(in oklab, var(--color-emerald-300) 30%, var(--color-neutral-400))}}[data-theme=canopy]{--input:#f2f8f4}@supports (color:color-mix(in lab, red, red)){[data-theme=canopy]{--input:color-mix(in oklab, var(--color-emerald-50) 35%, var(--color-neutral-50))}}[data-theme=canopy]{--input-foreground:#14201a;--ring:var(--color-emerald-600);--ring-error:var(--color-red-300);--card:var(--color-white);--card-foreground:#14201a;--popover:var(--color-white);--popover-foreground:#14201a;--warning:var(--color-yellow-100);--warning-foreground:var(--color-yellow-900);--sidebar:var(--color-white);--sidebar-foreground:#3b4a42;--sidebar-primary:var(--primary);--sidebar-primary-foreground:var(--primary-foreground);--sidebar-accent:var(--accent);--sidebar-accent-foreground:var(--accent-foreground);--sidebar-border:#c8ddd1}@supports (color:color-mix(in lab, red, red)){[data-theme=canopy]{--sidebar-border:color-mix(in oklab, var(--color-emerald-200) 30%, var(--color-neutral-200))}}[data-theme=canopy]{--sidebar-ring:var(--color-emerald-600);--backdrop:#0a1a1299;--theme-background:#f3f7f4}@supports (color:color-mix(in lab, red, red)){[data-theme=canopy]{--theme-background:color-mix(in oklab, var(--color-emerald-50) 22%, var(--color-stone-100))}}[data-theme=canopy].dark,[data-theme=canopy] .dark{--step:#35312f}@supports (color:color-mix(in lab, red, red)){[data-theme=canopy].dark,[data-theme=canopy] .dark{--step:color-mix(in oklab, var(--color-stone-800) 55%, var(--color-stone-700))}}[data-theme=canopy].dark,[data-theme=canopy] .dark{--panel:#23201e}@supports (color:color-mix(in lab, red, red)){[data-theme=canopy].dark,[data-theme=canopy] .dark{--panel:color-mix(in oklab, var(--color-stone-900) 45%, var(--color-stone-800))}}[data-theme=canopy].dark,[data-theme=canopy] .dark{--background:#0b0f0d}@supports (color:color-mix(in lab, red, red)){[data-theme=canopy].dark,[data-theme=canopy] .dark{--background:color-mix(in oklab, var(--color-emerald-950) 14%, var(--color-stone-950))}}[data-theme=canopy].dark,[data-theme=canopy] .dark{--background-emphasis:var(--color-neutral-100);--foreground:#e9f0ec;--foreground-alt:#c2d1c8;--foreground-subtle:#9aaba2;--primary:var(--color-emerald-500);--primary-foreground:#04140d;--primary-hover:var(--color-emerald-400);--secondary:#383c37}@supports (color:color-mix(in lab, red, red)){[data-theme=canopy].dark,[data-theme=canopy] .dark{--secondary:color-mix(in oklab, var(--color-emerald-950) 18%, var(--color-stone-700))}}[data-theme=canopy].dark,[data-theme=canopy] .dark{--secondary-foreground:#e9f0ec;--secondary-hover:#484c46}@supports (color:color-mix(in lab, red, red)){[data-theme=canopy].dark,[data-theme=canopy] .dark{--secondary-hover:color-mix(in oklab, var(--color-emerald-950) 18%, var(--color-stone-600))}}[data-theme=canopy].dark,[data-theme=canopy] .dark{--muted:#022c22}@supports (color:color-mix(in lab, red, red)){[data-theme=canopy].dark,[data-theme=canopy] .dark{--muted:color-mix(in oklab, var(--color-emerald-950) 10%, var(--step))}}[data-theme=canopy].dark,[data-theme=canopy] .dark{--muted-foreground:#9aaba2;--accent:#1b2723}@supports (color:color-mix(in lab, red, red)){[data-theme=canopy].dark,[data-theme=canopy] .dark{--accent:color-mix(in oklab, var(--color-emerald-950) 35%, var(--color-stone-800))}}[data-theme=canopy].dark,[data-theme=canopy] .dark{--accent-foreground:var(--color-emerald-300);--destructive:var(--color-red-500);--destructive-foreground:var(--color-white);--destructive-soft:var(--color-red-950);--destructive-soft-foreground:var(--color-red-200);--ghost:#fff0;--ghost-foreground:#c2d1c8;--ghost-hover:#e9f0ec14;--positive:var(--color-green-950);--positive-foreground:var(--color-green-200);--surface:#022c22}@supports (color:color-mix(in lab, red, red)){[data-theme=canopy].dark,[data-theme=canopy] .dark{--surface:color-mix(in oklab, var(--color-emerald-950) 10%, var(--step))}}[data-theme=canopy].dark,[data-theme=canopy] .dark{--surface-emphasis:#4b524b}@supports (color:color-mix(in lab, red, red)){[data-theme=canopy].dark,[data-theme=canopy] .dark{--surface-emphasis:color-mix(in oklab, var(--color-emerald-900) 15%, var(--color-stone-600))}}[data-theme=canopy].dark,[data-theme=canopy] .dark{--surface-raised:#3b423c}@supports (color:color-mix(in lab, red, red)){[data-theme=canopy].dark,[data-theme=canopy] .dark{--surface-raised:color-mix(in oklab, var(--color-emerald-900) 15%, var(--color-stone-700))}}[data-theme=canopy].dark,[data-theme=canopy] .dark{--border:#39433c}@supports (color:color-mix(in lab, red, red)){[data-theme=canopy].dark,[data-theme=canopy] .dark{--border:color-mix(in oklab, var(--color-emerald-900) 18%, var(--color-stone-700))}}[data-theme=canopy].dark,[data-theme=canopy] .dark{--border-light:#242b27}@supports (color:color-mix(in lab, red, red)){[data-theme=canopy].dark,[data-theme=canopy] .dark{--border-light:color-mix(in oklab, var(--color-emerald-900) 15%, var(--color-stone-800))}}[data-theme=canopy].dark,[data-theme=canopy] .dark{--border-lighter:#232624}@supports (color:color-mix(in lab, red, red)){[data-theme=canopy].dark,[data-theme=canopy] .dark{--border-lighter:color-mix(in oklab, var(--color-emerald-950) 15%, var(--color-stone-800))}}[data-theme=canopy].dark,[data-theme=canopy] .dark{--border-strong:#48554d}@supports (color:color-mix(in lab, red, red)){[data-theme=canopy].dark,[data-theme=canopy] .dark{--border-strong:color-mix(in oklab, var(--color-emerald-800) 18%, var(--color-stone-600))}}[data-theme=canopy].dark,[data-theme=canopy] .dark{--input:#022c22}@supports (color:color-mix(in lab, red, red)){[data-theme=canopy].dark,[data-theme=canopy] .dark{--input:color-mix(in oklab, var(--color-emerald-950) 10%, var(--step))}}[data-theme=canopy].dark,[data-theme=canopy] .dark{--input-foreground:#e9f0ec;--ring:var(--color-emerald-500);--ring-error:var(--color-red-400);--card:#022c22}@supports (color:color-mix(in lab, red, red)){[data-theme=canopy].dark,[data-theme=canopy] .dark{--card:color-mix(in oklab, var(--color-emerald-950) 7%, var(--panel))}}[data-theme=canopy].dark,[data-theme=canopy] .dark{--card-foreground:#e9f0ec;--popover:#022c22}@supports (color:color-mix(in lab, red, red)){[data-theme=canopy].dark,[data-theme=canopy] .dark{--popover:color-mix(in oklab, var(--color-emerald-950) 7%, var(--panel))}}[data-theme=canopy].dark,[data-theme=canopy] .dark{--popover-foreground:#e9f0ec;--warning:var(--color-amber-950);--warning-foreground:var(--color-amber-200);--sidebar:#022c22}@supports (color:color-mix(in lab, red, red)){[data-theme=canopy].dark,[data-theme=canopy] .dark{--sidebar:color-mix(in oklab, var(--color-emerald-950) 7%, var(--panel))}}[data-theme=canopy].dark,[data-theme=canopy] .dark{--sidebar-foreground:#c2d1c8;--sidebar-primary:var(--primary);--sidebar-primary-foreground:var(--primary-foreground);--sidebar-accent:var(--accent);--sidebar-accent-foreground:var(--accent-foreground);--sidebar-border:#242b27}@supports (color:color-mix(in lab, red, red)){[data-theme=canopy].dark,[data-theme=canopy] .dark{--sidebar-border:color-mix(in oklab, var(--color-emerald-900) 15%, var(--color-stone-800))}}[data-theme=canopy].dark,[data-theme=canopy] .dark{--sidebar-ring:var(--color-emerald-500);--backdrop:#000c;--theme-background:#0b0f0d}@supports (color:color-mix(in lab, red, red)){[data-theme=canopy].dark,[data-theme=canopy] .dark{--theme-background:color-mix(in oklab, var(--color-emerald-950) 14%, var(--color-stone-950))}}[data-theme=canopy].dark,[data-theme=canopy] .dark{--wash-a:#065f46}@supports (color:color-mix(in lab, red, red)){[data-theme=canopy].dark,[data-theme=canopy] .dark{--wash-a:color-mix(in oklab, var(--color-emerald-800) 52%, var(--background))}}@supports (color:color-mix(in lab, red, red)){[data-theme=canopy].dark,[data-theme=canopy] .dark{--wash-b:color-mix(in oklab, var(--color-emerald-900) 62%, var(--background))}}[data-theme=canopy] :is([data-slot=input-group],[data-slot=input],[data-slot=textarea],textarea){--tw-ring-offset-width:0px;--tw-ring-offset-color:transparent}[data-theme=canopy].dark body,[data-theme=canopy] .dark body{background-image:radial-gradient(1200px 720px at 8% -10%, var(--wash-a), transparent 62%), radial-gradient(1000px 620px at 96% 2%, var(--wash-b), transparent 58%);background-repeat:no-repeat;background-attachment:fixed}[data-theme=canopy] [data-slot=card]{box-shadow:none}:root{--brand:var(--color-emerald-800);--brand-foreground:var(--color-neutral-50)}[data-theme=canopy].dark,[data-theme=canopy] .dark{--brand:var(--color-emerald-400);--brand-foreground:#04140d;--primary:#e9f0ec;--primary-foreground:#101711;--primary-hover:var(--color-white)}:root{--panel-shadow:0 18px 40px -28px #14201a73}[data-theme=canopy].dark,[data-theme=canopy] .dark{--panel-shadow:0 18px 44px -26px #000000b3;--wash-a:#065f46}@supports (color:color-mix(in lab, red, red)){[data-theme=canopy].dark,[data-theme=canopy] .dark{--wash-a:color-mix(in oklab, var(--color-emerald-800) 55%, var(--background))}}[data-theme=canopy].dark,[data-theme=canopy] .dark{--wash-b:#064e3b}@supports (color:color-mix(in lab, red, red)){[data-theme=canopy].dark,[data-theme=canopy] .dark{--wash-b:color-mix(in oklab, var(--color-emerald-900) 70%, var(--background))}}@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-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-outline-style{syntax:\"*\";inherits:false;initial-value:solid}</style><script>matchMedia('(prefers-color-scheme:dark)').matches&&document.documentElement.classList.add('dark')<\/script></head><body class=\"grid min-h-svh place-items-center p-6 text-foreground\"><main class=\"w-full max-w-sm rounded-2xl border border-border bg-card p-8 shadow-panel backdrop-blur-[10px]\"><div class=\"mb-5 grid size-11 place-items-center rounded-xl bg-destructive text-[var(--card)]\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"lucide lucide-circle-alert size-5\" aria-hidden=\"true\"><circle cx=\"12\" cy=\"12\" r=\"10\"></circle><line x1=\"12\" x2=\"12\" y1=\"8\" y2=\"12\"></line><line x1=\"12\" x2=\"12.01\" y1=\"16\" y2=\"16\"></line></svg></div><p class=\"mb-1 text-xs font-semibold uppercase tracking-wide text-brand\">Canopy CLI</p><h1 class=\"mb-2 text-2xl font-semibold tracking-tight break-words\">Sign-in didn’t finish</h1><p class=\"mt-2 text-sm leading-relaxed text-muted-foreground\">Return to the terminal and run canopy login again. Reloading this page won’t help.</p><p class=\"mt-6 border-t border-border pt-4 text-xs text-muted-foreground\">If the terminal still says it’s waiting, cancel with <kbd class=\"rounded border border-border bg-[var(--input)] px-1 py-px text-[0.85em] font-normal\">Ctrl</kbd>+<kbd class=\"rounded border border-border bg-[var(--input)] px-1 py-px text-[0.85em] font-normal\">C</kbd> and try again.</p></main></body></html>";
10
+ const okHtml = "<!doctype html><html lang=\"en\" data-theme=\"canopy\"><head><meta charSet=\"utf-8\"/><meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/><title>You’re signed in · Canopy</title><style>/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */\n@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-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-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-outline-style:solid;--tw-animation-delay:0s;--tw-animation-direction:normal;--tw-animation-duration:initial;--tw-animation-fill-mode:none;--tw-animation-iteration-count:1;--tw-enter-blur:0;--tw-enter-opacity:1;--tw-enter-rotate:0;--tw-enter-scale:1;--tw-enter-translate-x:0;--tw-enter-translate-y:0;--tw-exit-blur:0;--tw-exit-opacity:1;--tw-exit-rotate:0;--tw-exit-scale:1;--tw-exit-translate-x:0;--tw-exit-translate-y:0}}}@layer theme{:root,:host{--font-sans:\"Helvetica Now for Monks\", ui-sans-serif, system-ui, sans-serif;--font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;--color-red-100:#ffebf0;--color-red-200:#ffd1dd;--color-red-300:#ffa8be;--color-red-400:#ff7a9c;--color-red-500:#ff527d;--color-red-600:#ff245b;--color-red-800:#a30029;--color-red-950:#610018;--color-amber-200:#fde68a;--color-amber-950:#451a03;--color-yellow-100:#fff7db;--color-yellow-900:#7a6000;--color-green-100:#e3fcf1;--color-green-200:#b8fadd;--color-green-900:#067445;--color-green-950:#065533;--color-emerald-50:#ecfdf5;--color-emerald-100:#d1fae5;--color-emerald-200:#a7f3d0;--color-emerald-300:#6ee7b7;--color-emerald-400:#34d399;--color-emerald-500:#10b981;--color-emerald-600:#059669;--color-emerald-800:#065f46;--color-emerald-900:#064e3b;--color-emerald-950:#022c22;--color-purple-50:#faf6fd;--color-purple-300:#d6b6f1;--color-purple-400:#c598ec;--color-purple-500:#ac6de3;--color-purple-600:#8c3fd2;--color-purple-700:#7d26c9;--color-purple-900:#501881;--color-gray-800:#5d5d60;--color-neutral-50:#f5f5f4;--color-neutral-100:#e9e8e7;--color-neutral-200:#d6d4d2;--color-neutral-300:#c0beb9;--color-neutral-400:#adaaa4;--color-neutral-500:#97938c;--color-neutral-600:#837f77;--color-neutral-700:#6c6962;--color-neutral-900:#484641;--color-neutral-950:#3e3c38;--color-stone-100:#f5f5f4;--color-stone-500:#78716c;--color-stone-600:#57534e;--color-stone-700:#44403c;--color-stone-800:#292524;--color-stone-900:#1c1917;--color-stone-950:#0c0a09;--color-black:#000;--color-white:#fff;--spacing:.25rem;--container-sm:24rem;--text-xs:12px;--text-xs--line-height:16px;--text-sm:14px;--text-sm--line-height:20px;--text-2xl:24px;--text-2xl--line-height:32px;--font-weight-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--tracking-tight:-.01em;--tracking-wide:.015em;--leading-snug:1.375;--leading-normal:1.5;--leading-relaxed:1.625;--radius-md:6px;--radius-lg:8px;--radius-xl:12px;--radius-2xl:16px;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono);--color-foreground:var(--foreground);--color-primary:var(--primary);--color-primary-foreground:var(--primary-foreground);--color-muted-foreground:var(--muted-foreground);--color-destructive:var(--destructive);--color-border:var(--border);--color-ring:var(--ring);--color-card:var(--card);--color-brand:var(--brand);--color-brand-foreground:var(--brand-foreground)}}@layer base{@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)}}}*,: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;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}:root,[data-theme=monks-flow]{--background:var(--color-white);--background-emphasis:var(--color-neutral-900);--foreground:var(--color-neutral-950);--foreground-alt:var(--color-neutral-700);--foreground-subtle:var(--color-neutral-600);--primary:var(--color-neutral-900);--primary-foreground:var(--color-neutral-50);--primary-hover:var(--color-neutral-950);--secondary:#f5f3f0;--secondary-foreground:var(--color-neutral-900);--secondary-hover:#e7e2dc;--muted:var(--color-neutral-100);--muted-foreground:var(--color-neutral-500);--accent:#e7e2dc;--accent-foreground:var(--color-neutral-900);--destructive:#e11d48;--destructive-foreground:var(--color-white);--destructive-soft:var(--color-red-100);--destructive-soft-foreground:var(--color-red-800);--ghost:#fff0;--ghost-foreground:var(--color-neutral-700);--ghost-hover:#0000000d;--positive:var(--color-green-100);--positive-foreground:var(--color-green-900);--surface:var(--color-neutral-50);--surface-emphasis:var(--color-neutral-300);--surface-raised:var(--color-neutral-200);--border:var(--color-neutral-200);--border-light:var(--color-neutral-100);--border-lighter:var(--color-neutral-50);--border-strong:var(--color-neutral-400);--input:var(--color-neutral-50);--input-foreground:var(--color-neutral-950);--ring:var(--color-black);--ring-error:var(--color-red-300);--card:var(--color-white);--card-foreground:var(--color-neutral-950);--popover:var(--color-white);--popover-foreground:var(--color-neutral-950);--warning:var(--color-yellow-100);--warning-foreground:var(--color-yellow-900);--chart-1:#f54a00;--chart-2:#009689;--chart-3:#104e64;--chart-4:#ffb900;--chart-5:#fe9a00;--chart-negative:#f54a00;--chart-positive:#009689;--chart-fill:#bfdeffb3;--chart-fill-2:#aaccffb3;--chart-stroke-2:#3f8dff;--sidebar:var(--color-neutral-50);--sidebar-foreground:var(--color-gray-800);--sidebar-primary:var(--primary);--sidebar-primary-foreground:var(--primary-foreground);--sidebar-accent:var(--accent);--sidebar-accent-foreground:var(--accent-foreground);--sidebar-border:var(--color-neutral-200);--sidebar-ring:var(--ring);--backdrop:#0009;--theme-background:#f5f4f2}:root.dark:not([data-theme]),[data-theme=monks-flow].dark,[data-theme=monks-flow] .dark{--background:var(--color-stone-900);--background-emphasis:var(--color-neutral-100);--foreground:var(--color-neutral-50);--foreground-alt:var(--color-neutral-300);--foreground-subtle:var(--color-neutral-400);--primary:var(--color-neutral-50);--primary-foreground:var(--color-black);--primary-hover:var(--color-neutral-100);--secondary:var(--color-stone-700);--secondary-foreground:var(--color-neutral-100);--secondary-hover:var(--color-stone-600);--muted:var(--color-stone-800);--muted-foreground:var(--color-neutral-500);--accent:var(--color-neutral-900);--accent-foreground:var(--color-neutral-300);--destructive:var(--color-red-500);--destructive-foreground:var(--color-white);--destructive-soft:var(--color-red-950);--destructive-soft-foreground:var(--color-red-200);--ghost:#fff0;--ghost-foreground:var(--color-neutral-300);--ghost-hover:#ffffff14;--positive:var(--color-green-950);--positive-foreground:var(--color-green-200);--surface:var(--color-stone-800);--surface-emphasis:var(--color-stone-600);--surface-raised:var(--color-stone-700);--border:var(--color-stone-600);--border-light:var(--color-stone-700);--border-lighter:var(--color-stone-800);--border-strong:var(--color-stone-500);--input:var(--color-stone-800);--input-foreground:var(--color-neutral-50);--ring:var(--color-white);--ring-error:var(--color-red-400);--card:var(--color-stone-800);--card-foreground:var(--color-neutral-100);--popover:var(--color-stone-800);--popover-foreground:var(--color-neutral-100);--warning:var(--color-amber-950);--warning-foreground:var(--color-amber-200);--chart-1:#ff6b33;--chart-2:#00b3a4;--chart-3:#2196a8;--chart-4:#ffc733;--chart-5:#ffad33;--chart-negative:#ff6b33;--chart-positive:#00b3a4;--chart-fill:#3382ff40;--chart-fill-2:#5096ff33;--chart-stroke-2:#5da3ff;--sidebar:var(--color-stone-800);--sidebar-foreground:var(--color-neutral-300);--sidebar-primary:var(--primary);--sidebar-primary-foreground:var(--primary-foreground);--sidebar-accent:var(--accent);--sidebar-accent-foreground:var(--accent-foreground);--sidebar-border:var(--color-stone-700);--sidebar-ring:var(--ring);--backdrop:#000c;--theme-background:#0c0a09}[data-theme=metropolis]{--background:var(--color-white);--background-emphasis:var(--color-neutral-900);--foreground:var(--color-neutral-950);--foreground-alt:var(--color-neutral-700);--foreground-subtle:var(--color-neutral-600);--primary:var(--color-purple-600);--primary-foreground:var(--color-neutral-50);--primary-hover:var(--color-purple-700);--secondary:var(--color-neutral-100);--secondary-foreground:var(--color-neutral-900);--secondary-hover:var(--color-neutral-50);--muted:var(--color-neutral-100);--muted-foreground:var(--color-neutral-500);--accent:var(--color-purple-50);--accent-foreground:var(--color-purple-600);--destructive:var(--color-red-600);--destructive-foreground:var(--color-white);--destructive-soft:var(--color-red-100);--destructive-soft-foreground:var(--color-red-800);--ghost:#fff0;--ghost-foreground:var(--color-neutral-700);--ghost-hover:#0000000d;--positive:var(--color-green-100);--positive-foreground:var(--color-green-900);--surface:var(--color-neutral-50);--surface-emphasis:var(--color-neutral-300);--surface-raised:var(--color-neutral-200);--border:var(--color-neutral-200);--border-light:var(--color-neutral-100);--border-lighter:var(--color-neutral-50);--border-strong:var(--color-neutral-400);--input:var(--color-neutral-50);--input-foreground:var(--color-neutral-950);--ring:var(--color-neutral-300);--ring-error:var(--color-red-300);--card:var(--color-white);--card-foreground:var(--color-neutral-950);--popover:var(--color-white);--popover-foreground:var(--color-neutral-950);--warning:var(--color-yellow-100);--warning-foreground:var(--color-yellow-900);--chart-1:#f54a00;--chart-2:#009689;--chart-3:#104e64;--chart-4:#ffb900;--chart-5:#fe9a00;--chart-negative:#f54a00;--chart-positive:#009689;--chart-fill:#bfdeffb3;--chart-fill-2:#aaccffb3;--chart-stroke-2:#3f8dff;--sidebar:var(--color-neutral-50);--sidebar-foreground:var(--color-gray-800);--sidebar-primary:var(--primary);--sidebar-primary-foreground:var(--primary-foreground);--sidebar-accent:var(--accent);--sidebar-accent-foreground:var(--accent-foreground);--sidebar-border:var(--color-neutral-200);--sidebar-ring:var(--color-neutral-300);--backdrop:#0009;--theme-background:#f0f3f8}[data-theme=metropolis].dark,[data-theme=metropolis] .dark{--background:var(--color-stone-900);--background-emphasis:var(--color-neutral-100);--foreground:var(--color-neutral-50);--foreground-alt:var(--color-neutral-300);--foreground-subtle:var(--color-neutral-400);--primary:var(--color-purple-500);--primary-foreground:var(--color-white);--primary-hover:var(--color-purple-400);--secondary:var(--color-stone-700);--secondary-foreground:var(--color-neutral-100);--secondary-hover:var(--color-stone-600);--muted:var(--color-stone-800);--muted-foreground:var(--color-neutral-400);--accent:var(--color-purple-900);--accent-foreground:var(--color-purple-300);--destructive:var(--color-red-500);--destructive-foreground:var(--color-white);--destructive-soft:var(--color-red-950);--destructive-soft-foreground:var(--color-red-200);--ghost:#fff0;--ghost-foreground:var(--color-neutral-300);--ghost-hover:#ffffff14;--positive:var(--color-green-950);--positive-foreground:var(--color-green-200);--surface:var(--color-stone-800);--surface-emphasis:var(--color-stone-600);--surface-raised:var(--color-stone-700);--border:var(--color-stone-600);--border-light:var(--color-stone-700);--border-lighter:var(--color-stone-800);--border-strong:var(--color-stone-500);--input:var(--color-stone-800);--input-foreground:var(--color-neutral-50);--ring:var(--color-neutral-500);--ring-error:var(--color-red-400);--card:var(--color-stone-800);--card-foreground:var(--color-neutral-100);--popover:var(--color-stone-800);--popover-foreground:var(--color-neutral-100);--warning:var(--color-amber-950);--warning-foreground:var(--color-amber-200);--chart-1:#ff6b33;--chart-2:#00b3a4;--chart-3:#2196a8;--chart-4:#ffc733;--chart-5:#ffad33;--chart-negative:#ff6b33;--chart-positive:#00b3a4;--chart-fill:#3382ff40;--chart-fill-2:#5096ff33;--chart-stroke-2:#5da3ff;--sidebar:var(--color-stone-800);--sidebar-foreground:var(--color-neutral-300);--sidebar-primary:var(--primary);--sidebar-primary-foreground:var(--primary-foreground);--sidebar-accent:var(--accent);--sidebar-accent-foreground:var(--accent-foreground);--sidebar-border:var(--color-stone-700);--sidebar-ring:var(--color-neutral-500);--backdrop:#000c;--theme-background:#0c0a09}*{border-color:var(--border)}body{background-color:var(--background);color:var(--foreground)}button,[role=button]{cursor:pointer}:focus-visible{outline:2px solid var(--ring);outline-offset:2px}}@layer components;@layer utilities{.relative{position:relative}.mt-2{margin-top:calc(var(--spacing) * 2)}.mt-3\\.5{margin-top:calc(var(--spacing) * 3.5)}.mt-5{margin-top:calc(var(--spacing) * 5)}.mt-6{margin-top:calc(var(--spacing) * 6)}.mt-px{margin-top:1px}.mr-2{margin-right:calc(var(--spacing) * 2)}.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-5{margin-bottom:calc(var(--spacing) * 5)}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.size-4{width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}.size-5{width:calc(var(--spacing) * 5);height:calc(var(--spacing) * 5)}.size-11{width:calc(var(--spacing) * 11);height:calc(var(--spacing) * 11)}.h-11{height:calc(var(--spacing) * 11)}.min-h-svh{min-height:100svh}.w-full{width:100%}.max-w-sm{max-width:var(--container-sm)}.shrink-0{flex-shrink:0}.place-items-center{place-items:center}.items-center{align-items:center}.items-start{align-items:flex-start}.justify-center{justify-content:center}.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)}.overflow-x-auto{overflow-x:auto}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:var(--radius-2xl)}.rounded-lg{border-radius:var(--radius-lg)}.rounded-xl{border-radius:var(--radius-xl)}.rounded-r-md{border-top-right-radius:var(--radius-md);border-bottom-right-radius:var(--radius-md)}.border{border-style:var(--tw-border-style);border-width:1px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-l-2{border-left-style:var(--tw-border-style);border-left-width:2px}.border-border{border-color:var(--color-border)}.border-brand{border-color:var(--color-brand)}.border-destructive{border-color:var(--color-destructive)}.bg-\\[color-mix\\(in_oklab\\,var\\(--destructive\\)_8\\%\\,transparent\\)\\]{background-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.bg-\\[color-mix\\(in_oklab\\,var\\(--destructive\\)_8\\%\\,transparent\\)\\]{background-color:color-mix(in oklab,var(--destructive) 8%,transparent)}}.bg-\\[color-mix\\(in_oklab\\,var\\(--foreground\\)_6\\%\\,transparent\\)\\]{background-color:var(--foreground)}@supports (color:color-mix(in lab, red, red)){.bg-\\[color-mix\\(in_oklab\\,var\\(--foreground\\)_6\\%\\,transparent\\)\\]{background-color:color-mix(in oklab,var(--foreground) 6%,transparent)}}.bg-\\[var\\(--input\\)\\]{background-color:var(--input)}.bg-brand{background-color:var(--color-brand)}.bg-card{background-color:var(--color-card)}.bg-destructive{background-color:var(--color-destructive)}.bg-primary{background-color:var(--color-primary)}.p-6{padding:calc(var(--spacing) * 6)}.p-8{padding:calc(var(--spacing) * 8)}.px-1{padding-inline:var(--spacing)}.px-2\\.5{padding-inline:calc(var(--spacing) * 2.5)}.px-3\\.5{padding-inline:calc(var(--spacing) * 3.5)}.px-4{padding-inline:calc(var(--spacing) * 4)}.py-2{padding-block:calc(var(--spacing) * 2)}.py-2\\.5{padding-block:calc(var(--spacing) * 2.5)}.py-px{padding-block:1px}.pt-4{padding-top:calc(var(--spacing) * 4)}.pr-3{padding-right:calc(var(--spacing) * 3)}.pl-3{padding-left:calc(var(--spacing) * 3)}.text-center{text-align:center}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--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-\\[0\\.85em\\]{font-size:.85em}.leading-normal{--tw-leading:var(--leading-normal);line-height:var(--leading-normal)}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.leading-snug{--tw-leading:var(--leading-snug);line-height:var(--leading-snug)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-normal{--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-tight{--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.tracking-wide{--tw-tracking:var(--tracking-wide);letter-spacing:var(--tracking-wide)}.break-words{overflow-wrap:break-word}.text-\\[var\\(--card\\)\\]{color:var(--card)}.text-brand{color:var(--color-brand)}.text-brand-foreground{color:var(--color-brand-foreground)}.text-destructive{color:var(--color-destructive)}.text-foreground{color:var(--color-foreground)}.text-muted-foreground{color:var(--color-muted-foreground)}.text-primary-foreground{color:var(--color-primary-foreground)}.uppercase{text-transform:uppercase}.underline{text-decoration-line:underline}.underline-offset-2{text-underline-offset:2px}.shadow-panel{--tw-shadow:var(--panel-shadow);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.backdrop-blur-\\[10px\\]{--tw-backdrop-blur:blur(10px);-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))}.duration-150{--tw-duration:.15s;transition-duration:.15s}.select-none{-webkit-user-select:none;user-select:none}.paused{animation-play-state:paused}.running{animation-play-state:running}@media (hover:hover){.hover\\:bg-\\[var\\(--primary-hover\\)\\]:hover{background-color:var(--primary-hover)}.hover\\:text-foreground:hover{color:var(--color-foreground)}}.focus-visible\\:border-ring:focus-visible{border-color:var(--color-ring)}.focus-visible\\:outline-2:focus-visible{outline-style:var(--tw-outline-style);outline-width:2px}.focus-visible\\:outline-offset-0:focus-visible{outline-offset:0px}.focus-visible\\:outline-offset-2:focus-visible{outline-offset:2px}.focus-visible\\:outline-ring:focus-visible{outline-color:var(--color-ring)}.aria-invalid\\:border-destructive[aria-invalid=true]{border-color:var(--color-destructive)}}@property --tw-animation-delay{syntax:\"*\";inherits:false;initial-value:0s}@property --tw-animation-direction{syntax:\"*\";inherits:false;initial-value:normal}@property --tw-animation-duration{syntax:\"*\";inherits:false}@property --tw-animation-fill-mode{syntax:\"*\";inherits:false;initial-value:none}@property --tw-animation-iteration-count{syntax:\"*\";inherits:false;initial-value:1}@property --tw-enter-blur{syntax:\"*\";inherits:false;initial-value:0}@property --tw-enter-opacity{syntax:\"*\";inherits:false;initial-value:1}@property --tw-enter-rotate{syntax:\"*\";inherits:false;initial-value:0}@property --tw-enter-scale{syntax:\"*\";inherits:false;initial-value:1}@property --tw-enter-translate-x{syntax:\"*\";inherits:false;initial-value:0}@property --tw-enter-translate-y{syntax:\"*\";inherits:false;initial-value:0}@property --tw-exit-blur{syntax:\"*\";inherits:false;initial-value:0}@property --tw-exit-opacity{syntax:\"*\";inherits:false;initial-value:1}@property --tw-exit-rotate{syntax:\"*\";inherits:false;initial-value:0}@property --tw-exit-scale{syntax:\"*\";inherits:false;initial-value:1}@property --tw-exit-translate-x{syntax:\"*\";inherits:false;initial-value:0}@property --tw-exit-translate-y{syntax:\"*\";inherits:false;initial-value:0}@media (prefers-reduced-motion:reduce){:root{--duration-instant:0s;--duration-fast:0s;--duration-base:0s;--duration-slow:0s;--duration-slower:0s;--default-transition-duration:0s}[data-vaul-drawer],[data-vaul-overlay]{transition-duration:0s!important;animation-duration:0s!important}}.dark:not([data-theme]){--input:#35312f}@supports (color:color-mix(in lab, red, red)){.dark:not([data-theme]){--input:color-mix(in oklab, var(--color-stone-800) 55%, var(--color-stone-700))}}.dark:not([data-theme]){--surface:#35312f}@supports (color:color-mix(in lab, red, red)){.dark:not([data-theme]){--surface:color-mix(in oklab, var(--color-stone-800) 55%, var(--color-stone-700))}}.dark:not([data-theme]){--muted:#35312f}@supports (color:color-mix(in lab, red, red)){.dark:not([data-theme]){--muted:color-mix(in oklab, var(--color-stone-800) 55%, var(--color-stone-700))}}:root:not(.dark):not([data-theme]){--background:var(--color-neutral-50)}[data-slot=dialog-content],[data-slot=alert-dialog-content],[data-slot=sheet-content],[data-slot=drawer-content]{background-color:var(--card)}[data-slot=select-trigger],[data-slot=textarea]{background-color:var(--input)}[data-slot=table-body] tr:hover{background-color:var(--accent)}@supports (color:color-mix(in lab, red, red)){[data-slot=table-body] tr:hover{background-color:color-mix(in oklab, var(--accent) 45%, transparent)}}[data-theme=canopy]{--background:#f3f7f4}@supports (color:color-mix(in lab, red, red)){[data-theme=canopy]{--background:color-mix(in oklab, var(--color-emerald-50) 22%, var(--color-stone-100))}}[data-theme=canopy]{--background-emphasis:var(--color-neutral-900);--foreground:#14201a;--foreground-alt:#3b4a42;--foreground-subtle:#5c6f64;--primary:var(--color-emerald-800);--primary-foreground:var(--color-neutral-50);--primary-hover:var(--color-emerald-900);--secondary:#eaeeeb}@supports (color:color-mix(in lab, red, red)){[data-theme=canopy]{--secondary:color-mix(in oklab, var(--color-emerald-50) 30%, var(--color-neutral-100))}}[data-theme=canopy]{--secondary-foreground:#14201a;--secondary-hover:#f1f9f4}@supports (color:color-mix(in lab, red, red)){[data-theme=canopy]{--secondary-hover:color-mix(in oklab, var(--color-emerald-50) 45%, var(--color-neutral-50))}}[data-theme=canopy]{--muted:#eaedea}@supports (color:color-mix(in lab, red, red)){[data-theme=canopy]{--muted:color-mix(in oklab, var(--color-emerald-50) 22%, var(--color-neutral-100))}}[data-theme=canopy]{--muted-foreground:#5c6f64;--accent:#eaf0ed}@supports (color:color-mix(in lab, red, red)){[data-theme=canopy]{--accent:color-mix(in oklab, var(--color-emerald-50) 40%, var(--color-neutral-100))}}[data-theme=canopy]{--accent-foreground:var(--color-emerald-800);--destructive:var(--color-red-600);--destructive-foreground:var(--color-white);--destructive-soft:var(--color-red-100);--destructive-soft-foreground:var(--color-red-800);--ghost:#fff0;--ghost-foreground:#3b4a42;--ghost-hover:#0f291d0d;--positive:var(--color-green-100);--positive-foreground:var(--color-green-900);--surface:#fcfffd}@supports (color:color-mix(in lab, red, red)){[data-theme=canopy]{--surface:color-mix(in oklab, var(--color-emerald-50) 18%, var(--color-white))}}[data-theme=canopy]{--surface-emphasis:#bacbbf}@supports (color:color-mix(in lab, red, red)){[data-theme=canopy]{--surface-emphasis:color-mix(in oklab, var(--color-emerald-200) 25%, var(--color-neutral-300))}}[data-theme=canopy]{--surface-raised:#d5ded7}@supports (color:color-mix(in lab, red, red)){[data-theme=canopy]{--surface-raised:color-mix(in oklab, var(--color-emerald-100) 25%, var(--color-neutral-200))}}[data-theme=canopy]{--border:#c8ddd1}@supports (color:color-mix(in lab, red, red)){[data-theme=canopy]{--border:color-mix(in oklab, var(--color-emerald-200) 30%, var(--color-neutral-200))}}[data-theme=canopy]{--border-light:#e3ede7}@supports (color:color-mix(in lab, red, red)){[data-theme=canopy]{--border-light:color-mix(in oklab, var(--color-emerald-100) 25%, var(--color-neutral-100))}}[data-theme=canopy]{--border-lighter:#f3f7f4}@supports (color:color-mix(in lab, red, red)){[data-theme=canopy]{--border-lighter:color-mix(in oklab, var(--color-emerald-50) 25%, var(--color-neutral-50))}}[data-theme=canopy]{--border-strong:#9abcaa}@supports (color:color-mix(in lab, red, red)){[data-theme=canopy]{--border-strong:color-mix(in oklab, var(--color-emerald-300) 30%, var(--color-neutral-400))}}[data-theme=canopy]{--input:#f2f8f4}@supports (color:color-mix(in lab, red, red)){[data-theme=canopy]{--input:color-mix(in oklab, var(--color-emerald-50) 35%, var(--color-neutral-50))}}[data-theme=canopy]{--input-foreground:#14201a;--ring:var(--color-emerald-600);--ring-error:var(--color-red-300);--card:var(--color-white);--card-foreground:#14201a;--popover:var(--color-white);--popover-foreground:#14201a;--warning:var(--color-yellow-100);--warning-foreground:var(--color-yellow-900);--sidebar:var(--color-white);--sidebar-foreground:#3b4a42;--sidebar-primary:var(--primary);--sidebar-primary-foreground:var(--primary-foreground);--sidebar-accent:var(--accent);--sidebar-accent-foreground:var(--accent-foreground);--sidebar-border:#c8ddd1}@supports (color:color-mix(in lab, red, red)){[data-theme=canopy]{--sidebar-border:color-mix(in oklab, var(--color-emerald-200) 30%, var(--color-neutral-200))}}[data-theme=canopy]{--sidebar-ring:var(--color-emerald-600);--backdrop:#0a1a1299;--theme-background:#f3f7f4}@supports (color:color-mix(in lab, red, red)){[data-theme=canopy]{--theme-background:color-mix(in oklab, var(--color-emerald-50) 22%, var(--color-stone-100))}}[data-theme=canopy].dark,[data-theme=canopy] .dark{--step:#35312f}@supports (color:color-mix(in lab, red, red)){[data-theme=canopy].dark,[data-theme=canopy] .dark{--step:color-mix(in oklab, var(--color-stone-800) 55%, var(--color-stone-700))}}[data-theme=canopy].dark,[data-theme=canopy] .dark{--panel:#23201e}@supports (color:color-mix(in lab, red, red)){[data-theme=canopy].dark,[data-theme=canopy] .dark{--panel:color-mix(in oklab, var(--color-stone-900) 45%, var(--color-stone-800))}}[data-theme=canopy].dark,[data-theme=canopy] .dark{--background:#0b0f0d}@supports (color:color-mix(in lab, red, red)){[data-theme=canopy].dark,[data-theme=canopy] .dark{--background:color-mix(in oklab, var(--color-emerald-950) 14%, var(--color-stone-950))}}[data-theme=canopy].dark,[data-theme=canopy] .dark{--background-emphasis:var(--color-neutral-100);--foreground:#e9f0ec;--foreground-alt:#c2d1c8;--foreground-subtle:#9aaba2;--primary:var(--color-emerald-500);--primary-foreground:#04140d;--primary-hover:var(--color-emerald-400);--secondary:#383c37}@supports (color:color-mix(in lab, red, red)){[data-theme=canopy].dark,[data-theme=canopy] .dark{--secondary:color-mix(in oklab, var(--color-emerald-950) 18%, var(--color-stone-700))}}[data-theme=canopy].dark,[data-theme=canopy] .dark{--secondary-foreground:#e9f0ec;--secondary-hover:#484c46}@supports (color:color-mix(in lab, red, red)){[data-theme=canopy].dark,[data-theme=canopy] .dark{--secondary-hover:color-mix(in oklab, var(--color-emerald-950) 18%, var(--color-stone-600))}}[data-theme=canopy].dark,[data-theme=canopy] .dark{--muted:#022c22}@supports (color:color-mix(in lab, red, red)){[data-theme=canopy].dark,[data-theme=canopy] .dark{--muted:color-mix(in oklab, var(--color-emerald-950) 10%, var(--step))}}[data-theme=canopy].dark,[data-theme=canopy] .dark{--muted-foreground:#9aaba2;--accent:#1b2723}@supports (color:color-mix(in lab, red, red)){[data-theme=canopy].dark,[data-theme=canopy] .dark{--accent:color-mix(in oklab, var(--color-emerald-950) 35%, var(--color-stone-800))}}[data-theme=canopy].dark,[data-theme=canopy] .dark{--accent-foreground:var(--color-emerald-300);--destructive:var(--color-red-500);--destructive-foreground:var(--color-white);--destructive-soft:var(--color-red-950);--destructive-soft-foreground:var(--color-red-200);--ghost:#fff0;--ghost-foreground:#c2d1c8;--ghost-hover:#e9f0ec14;--positive:var(--color-green-950);--positive-foreground:var(--color-green-200);--surface:#022c22}@supports (color:color-mix(in lab, red, red)){[data-theme=canopy].dark,[data-theme=canopy] .dark{--surface:color-mix(in oklab, var(--color-emerald-950) 10%, var(--step))}}[data-theme=canopy].dark,[data-theme=canopy] .dark{--surface-emphasis:#4b524b}@supports (color:color-mix(in lab, red, red)){[data-theme=canopy].dark,[data-theme=canopy] .dark{--surface-emphasis:color-mix(in oklab, var(--color-emerald-900) 15%, var(--color-stone-600))}}[data-theme=canopy].dark,[data-theme=canopy] .dark{--surface-raised:#3b423c}@supports (color:color-mix(in lab, red, red)){[data-theme=canopy].dark,[data-theme=canopy] .dark{--surface-raised:color-mix(in oklab, var(--color-emerald-900) 15%, var(--color-stone-700))}}[data-theme=canopy].dark,[data-theme=canopy] .dark{--border:#39433c}@supports (color:color-mix(in lab, red, red)){[data-theme=canopy].dark,[data-theme=canopy] .dark{--border:color-mix(in oklab, var(--color-emerald-900) 18%, var(--color-stone-700))}}[data-theme=canopy].dark,[data-theme=canopy] .dark{--border-light:#242b27}@supports (color:color-mix(in lab, red, red)){[data-theme=canopy].dark,[data-theme=canopy] .dark{--border-light:color-mix(in oklab, var(--color-emerald-900) 15%, var(--color-stone-800))}}[data-theme=canopy].dark,[data-theme=canopy] .dark{--border-lighter:#232624}@supports (color:color-mix(in lab, red, red)){[data-theme=canopy].dark,[data-theme=canopy] .dark{--border-lighter:color-mix(in oklab, var(--color-emerald-950) 15%, var(--color-stone-800))}}[data-theme=canopy].dark,[data-theme=canopy] .dark{--border-strong:#48554d}@supports (color:color-mix(in lab, red, red)){[data-theme=canopy].dark,[data-theme=canopy] .dark{--border-strong:color-mix(in oklab, var(--color-emerald-800) 18%, var(--color-stone-600))}}[data-theme=canopy].dark,[data-theme=canopy] .dark{--input:#022c22}@supports (color:color-mix(in lab, red, red)){[data-theme=canopy].dark,[data-theme=canopy] .dark{--input:color-mix(in oklab, var(--color-emerald-950) 10%, var(--step))}}[data-theme=canopy].dark,[data-theme=canopy] .dark{--input-foreground:#e9f0ec;--ring:var(--color-emerald-500);--ring-error:var(--color-red-400);--card:#022c22}@supports (color:color-mix(in lab, red, red)){[data-theme=canopy].dark,[data-theme=canopy] .dark{--card:color-mix(in oklab, var(--color-emerald-950) 7%, var(--panel))}}[data-theme=canopy].dark,[data-theme=canopy] .dark{--card-foreground:#e9f0ec;--popover:#022c22}@supports (color:color-mix(in lab, red, red)){[data-theme=canopy].dark,[data-theme=canopy] .dark{--popover:color-mix(in oklab, var(--color-emerald-950) 7%, var(--panel))}}[data-theme=canopy].dark,[data-theme=canopy] .dark{--popover-foreground:#e9f0ec;--warning:var(--color-amber-950);--warning-foreground:var(--color-amber-200);--sidebar:#022c22}@supports (color:color-mix(in lab, red, red)){[data-theme=canopy].dark,[data-theme=canopy] .dark{--sidebar:color-mix(in oklab, var(--color-emerald-950) 7%, var(--panel))}}[data-theme=canopy].dark,[data-theme=canopy] .dark{--sidebar-foreground:#c2d1c8;--sidebar-primary:var(--primary);--sidebar-primary-foreground:var(--primary-foreground);--sidebar-accent:var(--accent);--sidebar-accent-foreground:var(--accent-foreground);--sidebar-border:#242b27}@supports (color:color-mix(in lab, red, red)){[data-theme=canopy].dark,[data-theme=canopy] .dark{--sidebar-border:color-mix(in oklab, var(--color-emerald-900) 15%, var(--color-stone-800))}}[data-theme=canopy].dark,[data-theme=canopy] .dark{--sidebar-ring:var(--color-emerald-500);--backdrop:#000c;--theme-background:#0b0f0d}@supports (color:color-mix(in lab, red, red)){[data-theme=canopy].dark,[data-theme=canopy] .dark{--theme-background:color-mix(in oklab, var(--color-emerald-950) 14%, var(--color-stone-950))}}[data-theme=canopy].dark,[data-theme=canopy] .dark{--wash-a:#065f46}@supports (color:color-mix(in lab, red, red)){[data-theme=canopy].dark,[data-theme=canopy] .dark{--wash-a:color-mix(in oklab, var(--color-emerald-800) 52%, var(--background))}}@supports (color:color-mix(in lab, red, red)){[data-theme=canopy].dark,[data-theme=canopy] .dark{--wash-b:color-mix(in oklab, var(--color-emerald-900) 62%, var(--background))}}[data-theme=canopy] :is([data-slot=input-group],[data-slot=input],[data-slot=textarea],textarea){--tw-ring-offset-width:0px;--tw-ring-offset-color:transparent}[data-theme=canopy].dark body,[data-theme=canopy] .dark body{background-image:radial-gradient(1200px 720px at 8% -10%, var(--wash-a), transparent 62%), radial-gradient(1000px 620px at 96% 2%, var(--wash-b), transparent 58%);background-repeat:no-repeat;background-attachment:fixed}[data-theme=canopy] [data-slot=card]{box-shadow:none}:root{--brand:var(--color-emerald-800);--brand-foreground:var(--color-neutral-50)}[data-theme=canopy].dark,[data-theme=canopy] .dark{--brand:var(--color-emerald-400);--brand-foreground:#04140d;--primary:#e9f0ec;--primary-foreground:#101711;--primary-hover:var(--color-white)}:root{--panel-shadow:0 18px 40px -28px #14201a73}[data-theme=canopy].dark,[data-theme=canopy] .dark{--panel-shadow:0 18px 44px -26px #000000b3;--wash-a:#065f46}@supports (color:color-mix(in lab, red, red)){[data-theme=canopy].dark,[data-theme=canopy] .dark{--wash-a:color-mix(in oklab, var(--color-emerald-800) 55%, var(--background))}}[data-theme=canopy].dark,[data-theme=canopy] .dark{--wash-b:#064e3b}@supports (color:color-mix(in lab, red, red)){[data-theme=canopy].dark,[data-theme=canopy] .dark{--wash-b:color-mix(in oklab, var(--color-emerald-900) 70%, var(--background))}}@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-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-outline-style{syntax:\"*\";inherits:false;initial-value:solid}</style><script>matchMedia('(prefers-color-scheme:dark)').matches&&document.documentElement.classList.add('dark')<\/script></head><body class=\"grid min-h-svh place-items-center p-6 text-foreground\"><main class=\"w-full max-w-sm rounded-2xl border border-border bg-card p-8 shadow-panel backdrop-blur-[10px]\"><div class=\"mb-5 grid size-11 place-items-center rounded-xl bg-brand text-brand-foreground\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"lucide lucide-check size-5\" aria-hidden=\"true\"><path d=\"M20 6 9 17l-5-5\"></path></svg></div><p class=\"mb-1 text-xs font-semibold uppercase tracking-wide text-brand\">Canopy CLI</p><h1 class=\"mb-2 text-2xl font-semibold tracking-tight break-words\">You’re signed in</h1><p class=\"mt-2 text-sm leading-relaxed text-muted-foreground\">You can close this tab and return to the terminal — the CLI has your code.</p><p class=\"mt-6 border-t border-border pt-4 text-xs text-muted-foreground\">This tab only finishes the browser step — keep using the terminal for the rest.</p></main></body></html>";
11
+ const failedHtml = "<!doctype html><html lang=\"en\" data-theme=\"canopy\"><head><meta charSet=\"utf-8\"/><meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/><title>Sign-in didn’t finish · Canopy</title><style>/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */\n@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-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-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-outline-style:solid;--tw-animation-delay:0s;--tw-animation-direction:normal;--tw-animation-duration:initial;--tw-animation-fill-mode:none;--tw-animation-iteration-count:1;--tw-enter-blur:0;--tw-enter-opacity:1;--tw-enter-rotate:0;--tw-enter-scale:1;--tw-enter-translate-x:0;--tw-enter-translate-y:0;--tw-exit-blur:0;--tw-exit-opacity:1;--tw-exit-rotate:0;--tw-exit-scale:1;--tw-exit-translate-x:0;--tw-exit-translate-y:0}}}@layer theme{:root,:host{--font-sans:\"Helvetica Now for Monks\", ui-sans-serif, system-ui, sans-serif;--font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;--color-red-100:#ffebf0;--color-red-200:#ffd1dd;--color-red-300:#ffa8be;--color-red-400:#ff7a9c;--color-red-500:#ff527d;--color-red-600:#ff245b;--color-red-800:#a30029;--color-red-950:#610018;--color-amber-200:#fde68a;--color-amber-950:#451a03;--color-yellow-100:#fff7db;--color-yellow-900:#7a6000;--color-green-100:#e3fcf1;--color-green-200:#b8fadd;--color-green-900:#067445;--color-green-950:#065533;--color-emerald-50:#ecfdf5;--color-emerald-100:#d1fae5;--color-emerald-200:#a7f3d0;--color-emerald-300:#6ee7b7;--color-emerald-400:#34d399;--color-emerald-500:#10b981;--color-emerald-600:#059669;--color-emerald-800:#065f46;--color-emerald-900:#064e3b;--color-emerald-950:#022c22;--color-purple-50:#faf6fd;--color-purple-300:#d6b6f1;--color-purple-400:#c598ec;--color-purple-500:#ac6de3;--color-purple-600:#8c3fd2;--color-purple-700:#7d26c9;--color-purple-900:#501881;--color-gray-800:#5d5d60;--color-neutral-50:#f5f5f4;--color-neutral-100:#e9e8e7;--color-neutral-200:#d6d4d2;--color-neutral-300:#c0beb9;--color-neutral-400:#adaaa4;--color-neutral-500:#97938c;--color-neutral-600:#837f77;--color-neutral-700:#6c6962;--color-neutral-900:#484641;--color-neutral-950:#3e3c38;--color-stone-100:#f5f5f4;--color-stone-500:#78716c;--color-stone-600:#57534e;--color-stone-700:#44403c;--color-stone-800:#292524;--color-stone-900:#1c1917;--color-stone-950:#0c0a09;--color-black:#000;--color-white:#fff;--spacing:.25rem;--container-sm:24rem;--text-xs:12px;--text-xs--line-height:16px;--text-sm:14px;--text-sm--line-height:20px;--text-2xl:24px;--text-2xl--line-height:32px;--font-weight-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--tracking-tight:-.01em;--tracking-wide:.015em;--leading-snug:1.375;--leading-normal:1.5;--leading-relaxed:1.625;--radius-md:6px;--radius-lg:8px;--radius-xl:12px;--radius-2xl:16px;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono);--color-foreground:var(--foreground);--color-primary:var(--primary);--color-primary-foreground:var(--primary-foreground);--color-muted-foreground:var(--muted-foreground);--color-destructive:var(--destructive);--color-border:var(--border);--color-ring:var(--ring);--color-card:var(--card);--color-brand:var(--brand);--color-brand-foreground:var(--brand-foreground)}}@layer base{@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)}}}*,: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;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}:root,[data-theme=monks-flow]{--background:var(--color-white);--background-emphasis:var(--color-neutral-900);--foreground:var(--color-neutral-950);--foreground-alt:var(--color-neutral-700);--foreground-subtle:var(--color-neutral-600);--primary:var(--color-neutral-900);--primary-foreground:var(--color-neutral-50);--primary-hover:var(--color-neutral-950);--secondary:#f5f3f0;--secondary-foreground:var(--color-neutral-900);--secondary-hover:#e7e2dc;--muted:var(--color-neutral-100);--muted-foreground:var(--color-neutral-500);--accent:#e7e2dc;--accent-foreground:var(--color-neutral-900);--destructive:#e11d48;--destructive-foreground:var(--color-white);--destructive-soft:var(--color-red-100);--destructive-soft-foreground:var(--color-red-800);--ghost:#fff0;--ghost-foreground:var(--color-neutral-700);--ghost-hover:#0000000d;--positive:var(--color-green-100);--positive-foreground:var(--color-green-900);--surface:var(--color-neutral-50);--surface-emphasis:var(--color-neutral-300);--surface-raised:var(--color-neutral-200);--border:var(--color-neutral-200);--border-light:var(--color-neutral-100);--border-lighter:var(--color-neutral-50);--border-strong:var(--color-neutral-400);--input:var(--color-neutral-50);--input-foreground:var(--color-neutral-950);--ring:var(--color-black);--ring-error:var(--color-red-300);--card:var(--color-white);--card-foreground:var(--color-neutral-950);--popover:var(--color-white);--popover-foreground:var(--color-neutral-950);--warning:var(--color-yellow-100);--warning-foreground:var(--color-yellow-900);--chart-1:#f54a00;--chart-2:#009689;--chart-3:#104e64;--chart-4:#ffb900;--chart-5:#fe9a00;--chart-negative:#f54a00;--chart-positive:#009689;--chart-fill:#bfdeffb3;--chart-fill-2:#aaccffb3;--chart-stroke-2:#3f8dff;--sidebar:var(--color-neutral-50);--sidebar-foreground:var(--color-gray-800);--sidebar-primary:var(--primary);--sidebar-primary-foreground:var(--primary-foreground);--sidebar-accent:var(--accent);--sidebar-accent-foreground:var(--accent-foreground);--sidebar-border:var(--color-neutral-200);--sidebar-ring:var(--ring);--backdrop:#0009;--theme-background:#f5f4f2}:root.dark:not([data-theme]),[data-theme=monks-flow].dark,[data-theme=monks-flow] .dark{--background:var(--color-stone-900);--background-emphasis:var(--color-neutral-100);--foreground:var(--color-neutral-50);--foreground-alt:var(--color-neutral-300);--foreground-subtle:var(--color-neutral-400);--primary:var(--color-neutral-50);--primary-foreground:var(--color-black);--primary-hover:var(--color-neutral-100);--secondary:var(--color-stone-700);--secondary-foreground:var(--color-neutral-100);--secondary-hover:var(--color-stone-600);--muted:var(--color-stone-800);--muted-foreground:var(--color-neutral-500);--accent:var(--color-neutral-900);--accent-foreground:var(--color-neutral-300);--destructive:var(--color-red-500);--destructive-foreground:var(--color-white);--destructive-soft:var(--color-red-950);--destructive-soft-foreground:var(--color-red-200);--ghost:#fff0;--ghost-foreground:var(--color-neutral-300);--ghost-hover:#ffffff14;--positive:var(--color-green-950);--positive-foreground:var(--color-green-200);--surface:var(--color-stone-800);--surface-emphasis:var(--color-stone-600);--surface-raised:var(--color-stone-700);--border:var(--color-stone-600);--border-light:var(--color-stone-700);--border-lighter:var(--color-stone-800);--border-strong:var(--color-stone-500);--input:var(--color-stone-800);--input-foreground:var(--color-neutral-50);--ring:var(--color-white);--ring-error:var(--color-red-400);--card:var(--color-stone-800);--card-foreground:var(--color-neutral-100);--popover:var(--color-stone-800);--popover-foreground:var(--color-neutral-100);--warning:var(--color-amber-950);--warning-foreground:var(--color-amber-200);--chart-1:#ff6b33;--chart-2:#00b3a4;--chart-3:#2196a8;--chart-4:#ffc733;--chart-5:#ffad33;--chart-negative:#ff6b33;--chart-positive:#00b3a4;--chart-fill:#3382ff40;--chart-fill-2:#5096ff33;--chart-stroke-2:#5da3ff;--sidebar:var(--color-stone-800);--sidebar-foreground:var(--color-neutral-300);--sidebar-primary:var(--primary);--sidebar-primary-foreground:var(--primary-foreground);--sidebar-accent:var(--accent);--sidebar-accent-foreground:var(--accent-foreground);--sidebar-border:var(--color-stone-700);--sidebar-ring:var(--ring);--backdrop:#000c;--theme-background:#0c0a09}[data-theme=metropolis]{--background:var(--color-white);--background-emphasis:var(--color-neutral-900);--foreground:var(--color-neutral-950);--foreground-alt:var(--color-neutral-700);--foreground-subtle:var(--color-neutral-600);--primary:var(--color-purple-600);--primary-foreground:var(--color-neutral-50);--primary-hover:var(--color-purple-700);--secondary:var(--color-neutral-100);--secondary-foreground:var(--color-neutral-900);--secondary-hover:var(--color-neutral-50);--muted:var(--color-neutral-100);--muted-foreground:var(--color-neutral-500);--accent:var(--color-purple-50);--accent-foreground:var(--color-purple-600);--destructive:var(--color-red-600);--destructive-foreground:var(--color-white);--destructive-soft:var(--color-red-100);--destructive-soft-foreground:var(--color-red-800);--ghost:#fff0;--ghost-foreground:var(--color-neutral-700);--ghost-hover:#0000000d;--positive:var(--color-green-100);--positive-foreground:var(--color-green-900);--surface:var(--color-neutral-50);--surface-emphasis:var(--color-neutral-300);--surface-raised:var(--color-neutral-200);--border:var(--color-neutral-200);--border-light:var(--color-neutral-100);--border-lighter:var(--color-neutral-50);--border-strong:var(--color-neutral-400);--input:var(--color-neutral-50);--input-foreground:var(--color-neutral-950);--ring:var(--color-neutral-300);--ring-error:var(--color-red-300);--card:var(--color-white);--card-foreground:var(--color-neutral-950);--popover:var(--color-white);--popover-foreground:var(--color-neutral-950);--warning:var(--color-yellow-100);--warning-foreground:var(--color-yellow-900);--chart-1:#f54a00;--chart-2:#009689;--chart-3:#104e64;--chart-4:#ffb900;--chart-5:#fe9a00;--chart-negative:#f54a00;--chart-positive:#009689;--chart-fill:#bfdeffb3;--chart-fill-2:#aaccffb3;--chart-stroke-2:#3f8dff;--sidebar:var(--color-neutral-50);--sidebar-foreground:var(--color-gray-800);--sidebar-primary:var(--primary);--sidebar-primary-foreground:var(--primary-foreground);--sidebar-accent:var(--accent);--sidebar-accent-foreground:var(--accent-foreground);--sidebar-border:var(--color-neutral-200);--sidebar-ring:var(--color-neutral-300);--backdrop:#0009;--theme-background:#f0f3f8}[data-theme=metropolis].dark,[data-theme=metropolis] .dark{--background:var(--color-stone-900);--background-emphasis:var(--color-neutral-100);--foreground:var(--color-neutral-50);--foreground-alt:var(--color-neutral-300);--foreground-subtle:var(--color-neutral-400);--primary:var(--color-purple-500);--primary-foreground:var(--color-white);--primary-hover:var(--color-purple-400);--secondary:var(--color-stone-700);--secondary-foreground:var(--color-neutral-100);--secondary-hover:var(--color-stone-600);--muted:var(--color-stone-800);--muted-foreground:var(--color-neutral-400);--accent:var(--color-purple-900);--accent-foreground:var(--color-purple-300);--destructive:var(--color-red-500);--destructive-foreground:var(--color-white);--destructive-soft:var(--color-red-950);--destructive-soft-foreground:var(--color-red-200);--ghost:#fff0;--ghost-foreground:var(--color-neutral-300);--ghost-hover:#ffffff14;--positive:var(--color-green-950);--positive-foreground:var(--color-green-200);--surface:var(--color-stone-800);--surface-emphasis:var(--color-stone-600);--surface-raised:var(--color-stone-700);--border:var(--color-stone-600);--border-light:var(--color-stone-700);--border-lighter:var(--color-stone-800);--border-strong:var(--color-stone-500);--input:var(--color-stone-800);--input-foreground:var(--color-neutral-50);--ring:var(--color-neutral-500);--ring-error:var(--color-red-400);--card:var(--color-stone-800);--card-foreground:var(--color-neutral-100);--popover:var(--color-stone-800);--popover-foreground:var(--color-neutral-100);--warning:var(--color-amber-950);--warning-foreground:var(--color-amber-200);--chart-1:#ff6b33;--chart-2:#00b3a4;--chart-3:#2196a8;--chart-4:#ffc733;--chart-5:#ffad33;--chart-negative:#ff6b33;--chart-positive:#00b3a4;--chart-fill:#3382ff40;--chart-fill-2:#5096ff33;--chart-stroke-2:#5da3ff;--sidebar:var(--color-stone-800);--sidebar-foreground:var(--color-neutral-300);--sidebar-primary:var(--primary);--sidebar-primary-foreground:var(--primary-foreground);--sidebar-accent:var(--accent);--sidebar-accent-foreground:var(--accent-foreground);--sidebar-border:var(--color-stone-700);--sidebar-ring:var(--color-neutral-500);--backdrop:#000c;--theme-background:#0c0a09}*{border-color:var(--border)}body{background-color:var(--background);color:var(--foreground)}button,[role=button]{cursor:pointer}:focus-visible{outline:2px solid var(--ring);outline-offset:2px}}@layer components;@layer utilities{.relative{position:relative}.mt-2{margin-top:calc(var(--spacing) * 2)}.mt-3\\.5{margin-top:calc(var(--spacing) * 3.5)}.mt-5{margin-top:calc(var(--spacing) * 5)}.mt-6{margin-top:calc(var(--spacing) * 6)}.mt-px{margin-top:1px}.mr-2{margin-right:calc(var(--spacing) * 2)}.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-5{margin-bottom:calc(var(--spacing) * 5)}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.size-4{width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}.size-5{width:calc(var(--spacing) * 5);height:calc(var(--spacing) * 5)}.size-11{width:calc(var(--spacing) * 11);height:calc(var(--spacing) * 11)}.h-11{height:calc(var(--spacing) * 11)}.min-h-svh{min-height:100svh}.w-full{width:100%}.max-w-sm{max-width:var(--container-sm)}.shrink-0{flex-shrink:0}.place-items-center{place-items:center}.items-center{align-items:center}.items-start{align-items:flex-start}.justify-center{justify-content:center}.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)}.overflow-x-auto{overflow-x:auto}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:var(--radius-2xl)}.rounded-lg{border-radius:var(--radius-lg)}.rounded-xl{border-radius:var(--radius-xl)}.rounded-r-md{border-top-right-radius:var(--radius-md);border-bottom-right-radius:var(--radius-md)}.border{border-style:var(--tw-border-style);border-width:1px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-l-2{border-left-style:var(--tw-border-style);border-left-width:2px}.border-border{border-color:var(--color-border)}.border-brand{border-color:var(--color-brand)}.border-destructive{border-color:var(--color-destructive)}.bg-\\[color-mix\\(in_oklab\\,var\\(--destructive\\)_8\\%\\,transparent\\)\\]{background-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.bg-\\[color-mix\\(in_oklab\\,var\\(--destructive\\)_8\\%\\,transparent\\)\\]{background-color:color-mix(in oklab,var(--destructive) 8%,transparent)}}.bg-\\[color-mix\\(in_oklab\\,var\\(--foreground\\)_6\\%\\,transparent\\)\\]{background-color:var(--foreground)}@supports (color:color-mix(in lab, red, red)){.bg-\\[color-mix\\(in_oklab\\,var\\(--foreground\\)_6\\%\\,transparent\\)\\]{background-color:color-mix(in oklab,var(--foreground) 6%,transparent)}}.bg-\\[var\\(--input\\)\\]{background-color:var(--input)}.bg-brand{background-color:var(--color-brand)}.bg-card{background-color:var(--color-card)}.bg-destructive{background-color:var(--color-destructive)}.bg-primary{background-color:var(--color-primary)}.p-6{padding:calc(var(--spacing) * 6)}.p-8{padding:calc(var(--spacing) * 8)}.px-1{padding-inline:var(--spacing)}.px-2\\.5{padding-inline:calc(var(--spacing) * 2.5)}.px-3\\.5{padding-inline:calc(var(--spacing) * 3.5)}.px-4{padding-inline:calc(var(--spacing) * 4)}.py-2{padding-block:calc(var(--spacing) * 2)}.py-2\\.5{padding-block:calc(var(--spacing) * 2.5)}.py-px{padding-block:1px}.pt-4{padding-top:calc(var(--spacing) * 4)}.pr-3{padding-right:calc(var(--spacing) * 3)}.pl-3{padding-left:calc(var(--spacing) * 3)}.text-center{text-align:center}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--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-\\[0\\.85em\\]{font-size:.85em}.leading-normal{--tw-leading:var(--leading-normal);line-height:var(--leading-normal)}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.leading-snug{--tw-leading:var(--leading-snug);line-height:var(--leading-snug)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-normal{--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-tight{--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.tracking-wide{--tw-tracking:var(--tracking-wide);letter-spacing:var(--tracking-wide)}.break-words{overflow-wrap:break-word}.text-\\[var\\(--card\\)\\]{color:var(--card)}.text-brand{color:var(--color-brand)}.text-brand-foreground{color:var(--color-brand-foreground)}.text-destructive{color:var(--color-destructive)}.text-foreground{color:var(--color-foreground)}.text-muted-foreground{color:var(--color-muted-foreground)}.text-primary-foreground{color:var(--color-primary-foreground)}.uppercase{text-transform:uppercase}.underline{text-decoration-line:underline}.underline-offset-2{text-underline-offset:2px}.shadow-panel{--tw-shadow:var(--panel-shadow);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.backdrop-blur-\\[10px\\]{--tw-backdrop-blur:blur(10px);-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))}.duration-150{--tw-duration:.15s;transition-duration:.15s}.select-none{-webkit-user-select:none;user-select:none}.paused{animation-play-state:paused}.running{animation-play-state:running}@media (hover:hover){.hover\\:bg-\\[var\\(--primary-hover\\)\\]:hover{background-color:var(--primary-hover)}.hover\\:text-foreground:hover{color:var(--color-foreground)}}.focus-visible\\:border-ring:focus-visible{border-color:var(--color-ring)}.focus-visible\\:outline-2:focus-visible{outline-style:var(--tw-outline-style);outline-width:2px}.focus-visible\\:outline-offset-0:focus-visible{outline-offset:0px}.focus-visible\\:outline-offset-2:focus-visible{outline-offset:2px}.focus-visible\\:outline-ring:focus-visible{outline-color:var(--color-ring)}.aria-invalid\\:border-destructive[aria-invalid=true]{border-color:var(--color-destructive)}}@property --tw-animation-delay{syntax:\"*\";inherits:false;initial-value:0s}@property --tw-animation-direction{syntax:\"*\";inherits:false;initial-value:normal}@property --tw-animation-duration{syntax:\"*\";inherits:false}@property --tw-animation-fill-mode{syntax:\"*\";inherits:false;initial-value:none}@property --tw-animation-iteration-count{syntax:\"*\";inherits:false;initial-value:1}@property --tw-enter-blur{syntax:\"*\";inherits:false;initial-value:0}@property --tw-enter-opacity{syntax:\"*\";inherits:false;initial-value:1}@property --tw-enter-rotate{syntax:\"*\";inherits:false;initial-value:0}@property --tw-enter-scale{syntax:\"*\";inherits:false;initial-value:1}@property --tw-enter-translate-x{syntax:\"*\";inherits:false;initial-value:0}@property --tw-enter-translate-y{syntax:\"*\";inherits:false;initial-value:0}@property --tw-exit-blur{syntax:\"*\";inherits:false;initial-value:0}@property --tw-exit-opacity{syntax:\"*\";inherits:false;initial-value:1}@property --tw-exit-rotate{syntax:\"*\";inherits:false;initial-value:0}@property --tw-exit-scale{syntax:\"*\";inherits:false;initial-value:1}@property --tw-exit-translate-x{syntax:\"*\";inherits:false;initial-value:0}@property --tw-exit-translate-y{syntax:\"*\";inherits:false;initial-value:0}@media (prefers-reduced-motion:reduce){:root{--duration-instant:0s;--duration-fast:0s;--duration-base:0s;--duration-slow:0s;--duration-slower:0s;--default-transition-duration:0s}[data-vaul-drawer],[data-vaul-overlay]{transition-duration:0s!important;animation-duration:0s!important}}.dark:not([data-theme]){--input:#35312f}@supports (color:color-mix(in lab, red, red)){.dark:not([data-theme]){--input:color-mix(in oklab, var(--color-stone-800) 55%, var(--color-stone-700))}}.dark:not([data-theme]){--surface:#35312f}@supports (color:color-mix(in lab, red, red)){.dark:not([data-theme]){--surface:color-mix(in oklab, var(--color-stone-800) 55%, var(--color-stone-700))}}.dark:not([data-theme]){--muted:#35312f}@supports (color:color-mix(in lab, red, red)){.dark:not([data-theme]){--muted:color-mix(in oklab, var(--color-stone-800) 55%, var(--color-stone-700))}}:root:not(.dark):not([data-theme]){--background:var(--color-neutral-50)}[data-slot=dialog-content],[data-slot=alert-dialog-content],[data-slot=sheet-content],[data-slot=drawer-content]{background-color:var(--card)}[data-slot=select-trigger],[data-slot=textarea]{background-color:var(--input)}[data-slot=table-body] tr:hover{background-color:var(--accent)}@supports (color:color-mix(in lab, red, red)){[data-slot=table-body] tr:hover{background-color:color-mix(in oklab, var(--accent) 45%, transparent)}}[data-theme=canopy]{--background:#f3f7f4}@supports (color:color-mix(in lab, red, red)){[data-theme=canopy]{--background:color-mix(in oklab, var(--color-emerald-50) 22%, var(--color-stone-100))}}[data-theme=canopy]{--background-emphasis:var(--color-neutral-900);--foreground:#14201a;--foreground-alt:#3b4a42;--foreground-subtle:#5c6f64;--primary:var(--color-emerald-800);--primary-foreground:var(--color-neutral-50);--primary-hover:var(--color-emerald-900);--secondary:#eaeeeb}@supports (color:color-mix(in lab, red, red)){[data-theme=canopy]{--secondary:color-mix(in oklab, var(--color-emerald-50) 30%, var(--color-neutral-100))}}[data-theme=canopy]{--secondary-foreground:#14201a;--secondary-hover:#f1f9f4}@supports (color:color-mix(in lab, red, red)){[data-theme=canopy]{--secondary-hover:color-mix(in oklab, var(--color-emerald-50) 45%, var(--color-neutral-50))}}[data-theme=canopy]{--muted:#eaedea}@supports (color:color-mix(in lab, red, red)){[data-theme=canopy]{--muted:color-mix(in oklab, var(--color-emerald-50) 22%, var(--color-neutral-100))}}[data-theme=canopy]{--muted-foreground:#5c6f64;--accent:#eaf0ed}@supports (color:color-mix(in lab, red, red)){[data-theme=canopy]{--accent:color-mix(in oklab, var(--color-emerald-50) 40%, var(--color-neutral-100))}}[data-theme=canopy]{--accent-foreground:var(--color-emerald-800);--destructive:var(--color-red-600);--destructive-foreground:var(--color-white);--destructive-soft:var(--color-red-100);--destructive-soft-foreground:var(--color-red-800);--ghost:#fff0;--ghost-foreground:#3b4a42;--ghost-hover:#0f291d0d;--positive:var(--color-green-100);--positive-foreground:var(--color-green-900);--surface:#fcfffd}@supports (color:color-mix(in lab, red, red)){[data-theme=canopy]{--surface:color-mix(in oklab, var(--color-emerald-50) 18%, var(--color-white))}}[data-theme=canopy]{--surface-emphasis:#bacbbf}@supports (color:color-mix(in lab, red, red)){[data-theme=canopy]{--surface-emphasis:color-mix(in oklab, var(--color-emerald-200) 25%, var(--color-neutral-300))}}[data-theme=canopy]{--surface-raised:#d5ded7}@supports (color:color-mix(in lab, red, red)){[data-theme=canopy]{--surface-raised:color-mix(in oklab, var(--color-emerald-100) 25%, var(--color-neutral-200))}}[data-theme=canopy]{--border:#c8ddd1}@supports (color:color-mix(in lab, red, red)){[data-theme=canopy]{--border:color-mix(in oklab, var(--color-emerald-200) 30%, var(--color-neutral-200))}}[data-theme=canopy]{--border-light:#e3ede7}@supports (color:color-mix(in lab, red, red)){[data-theme=canopy]{--border-light:color-mix(in oklab, var(--color-emerald-100) 25%, var(--color-neutral-100))}}[data-theme=canopy]{--border-lighter:#f3f7f4}@supports (color:color-mix(in lab, red, red)){[data-theme=canopy]{--border-lighter:color-mix(in oklab, var(--color-emerald-50) 25%, var(--color-neutral-50))}}[data-theme=canopy]{--border-strong:#9abcaa}@supports (color:color-mix(in lab, red, red)){[data-theme=canopy]{--border-strong:color-mix(in oklab, var(--color-emerald-300) 30%, var(--color-neutral-400))}}[data-theme=canopy]{--input:#f2f8f4}@supports (color:color-mix(in lab, red, red)){[data-theme=canopy]{--input:color-mix(in oklab, var(--color-emerald-50) 35%, var(--color-neutral-50))}}[data-theme=canopy]{--input-foreground:#14201a;--ring:var(--color-emerald-600);--ring-error:var(--color-red-300);--card:var(--color-white);--card-foreground:#14201a;--popover:var(--color-white);--popover-foreground:#14201a;--warning:var(--color-yellow-100);--warning-foreground:var(--color-yellow-900);--sidebar:var(--color-white);--sidebar-foreground:#3b4a42;--sidebar-primary:var(--primary);--sidebar-primary-foreground:var(--primary-foreground);--sidebar-accent:var(--accent);--sidebar-accent-foreground:var(--accent-foreground);--sidebar-border:#c8ddd1}@supports (color:color-mix(in lab, red, red)){[data-theme=canopy]{--sidebar-border:color-mix(in oklab, var(--color-emerald-200) 30%, var(--color-neutral-200))}}[data-theme=canopy]{--sidebar-ring:var(--color-emerald-600);--backdrop:#0a1a1299;--theme-background:#f3f7f4}@supports (color:color-mix(in lab, red, red)){[data-theme=canopy]{--theme-background:color-mix(in oklab, var(--color-emerald-50) 22%, var(--color-stone-100))}}[data-theme=canopy].dark,[data-theme=canopy] .dark{--step:#35312f}@supports (color:color-mix(in lab, red, red)){[data-theme=canopy].dark,[data-theme=canopy] .dark{--step:color-mix(in oklab, var(--color-stone-800) 55%, var(--color-stone-700))}}[data-theme=canopy].dark,[data-theme=canopy] .dark{--panel:#23201e}@supports (color:color-mix(in lab, red, red)){[data-theme=canopy].dark,[data-theme=canopy] .dark{--panel:color-mix(in oklab, var(--color-stone-900) 45%, var(--color-stone-800))}}[data-theme=canopy].dark,[data-theme=canopy] .dark{--background:#0b0f0d}@supports (color:color-mix(in lab, red, red)){[data-theme=canopy].dark,[data-theme=canopy] .dark{--background:color-mix(in oklab, var(--color-emerald-950) 14%, var(--color-stone-950))}}[data-theme=canopy].dark,[data-theme=canopy] .dark{--background-emphasis:var(--color-neutral-100);--foreground:#e9f0ec;--foreground-alt:#c2d1c8;--foreground-subtle:#9aaba2;--primary:var(--color-emerald-500);--primary-foreground:#04140d;--primary-hover:var(--color-emerald-400);--secondary:#383c37}@supports (color:color-mix(in lab, red, red)){[data-theme=canopy].dark,[data-theme=canopy] .dark{--secondary:color-mix(in oklab, var(--color-emerald-950) 18%, var(--color-stone-700))}}[data-theme=canopy].dark,[data-theme=canopy] .dark{--secondary-foreground:#e9f0ec;--secondary-hover:#484c46}@supports (color:color-mix(in lab, red, red)){[data-theme=canopy].dark,[data-theme=canopy] .dark{--secondary-hover:color-mix(in oklab, var(--color-emerald-950) 18%, var(--color-stone-600))}}[data-theme=canopy].dark,[data-theme=canopy] .dark{--muted:#022c22}@supports (color:color-mix(in lab, red, red)){[data-theme=canopy].dark,[data-theme=canopy] .dark{--muted:color-mix(in oklab, var(--color-emerald-950) 10%, var(--step))}}[data-theme=canopy].dark,[data-theme=canopy] .dark{--muted-foreground:#9aaba2;--accent:#1b2723}@supports (color:color-mix(in lab, red, red)){[data-theme=canopy].dark,[data-theme=canopy] .dark{--accent:color-mix(in oklab, var(--color-emerald-950) 35%, var(--color-stone-800))}}[data-theme=canopy].dark,[data-theme=canopy] .dark{--accent-foreground:var(--color-emerald-300);--destructive:var(--color-red-500);--destructive-foreground:var(--color-white);--destructive-soft:var(--color-red-950);--destructive-soft-foreground:var(--color-red-200);--ghost:#fff0;--ghost-foreground:#c2d1c8;--ghost-hover:#e9f0ec14;--positive:var(--color-green-950);--positive-foreground:var(--color-green-200);--surface:#022c22}@supports (color:color-mix(in lab, red, red)){[data-theme=canopy].dark,[data-theme=canopy] .dark{--surface:color-mix(in oklab, var(--color-emerald-950) 10%, var(--step))}}[data-theme=canopy].dark,[data-theme=canopy] .dark{--surface-emphasis:#4b524b}@supports (color:color-mix(in lab, red, red)){[data-theme=canopy].dark,[data-theme=canopy] .dark{--surface-emphasis:color-mix(in oklab, var(--color-emerald-900) 15%, var(--color-stone-600))}}[data-theme=canopy].dark,[data-theme=canopy] .dark{--surface-raised:#3b423c}@supports (color:color-mix(in lab, red, red)){[data-theme=canopy].dark,[data-theme=canopy] .dark{--surface-raised:color-mix(in oklab, var(--color-emerald-900) 15%, var(--color-stone-700))}}[data-theme=canopy].dark,[data-theme=canopy] .dark{--border:#39433c}@supports (color:color-mix(in lab, red, red)){[data-theme=canopy].dark,[data-theme=canopy] .dark{--border:color-mix(in oklab, var(--color-emerald-900) 18%, var(--color-stone-700))}}[data-theme=canopy].dark,[data-theme=canopy] .dark{--border-light:#242b27}@supports (color:color-mix(in lab, red, red)){[data-theme=canopy].dark,[data-theme=canopy] .dark{--border-light:color-mix(in oklab, var(--color-emerald-900) 15%, var(--color-stone-800))}}[data-theme=canopy].dark,[data-theme=canopy] .dark{--border-lighter:#232624}@supports (color:color-mix(in lab, red, red)){[data-theme=canopy].dark,[data-theme=canopy] .dark{--border-lighter:color-mix(in oklab, var(--color-emerald-950) 15%, var(--color-stone-800))}}[data-theme=canopy].dark,[data-theme=canopy] .dark{--border-strong:#48554d}@supports (color:color-mix(in lab, red, red)){[data-theme=canopy].dark,[data-theme=canopy] .dark{--border-strong:color-mix(in oklab, var(--color-emerald-800) 18%, var(--color-stone-600))}}[data-theme=canopy].dark,[data-theme=canopy] .dark{--input:#022c22}@supports (color:color-mix(in lab, red, red)){[data-theme=canopy].dark,[data-theme=canopy] .dark{--input:color-mix(in oklab, var(--color-emerald-950) 10%, var(--step))}}[data-theme=canopy].dark,[data-theme=canopy] .dark{--input-foreground:#e9f0ec;--ring:var(--color-emerald-500);--ring-error:var(--color-red-400);--card:#022c22}@supports (color:color-mix(in lab, red, red)){[data-theme=canopy].dark,[data-theme=canopy] .dark{--card:color-mix(in oklab, var(--color-emerald-950) 7%, var(--panel))}}[data-theme=canopy].dark,[data-theme=canopy] .dark{--card-foreground:#e9f0ec;--popover:#022c22}@supports (color:color-mix(in lab, red, red)){[data-theme=canopy].dark,[data-theme=canopy] .dark{--popover:color-mix(in oklab, var(--color-emerald-950) 7%, var(--panel))}}[data-theme=canopy].dark,[data-theme=canopy] .dark{--popover-foreground:#e9f0ec;--warning:var(--color-amber-950);--warning-foreground:var(--color-amber-200);--sidebar:#022c22}@supports (color:color-mix(in lab, red, red)){[data-theme=canopy].dark,[data-theme=canopy] .dark{--sidebar:color-mix(in oklab, var(--color-emerald-950) 7%, var(--panel))}}[data-theme=canopy].dark,[data-theme=canopy] .dark{--sidebar-foreground:#c2d1c8;--sidebar-primary:var(--primary);--sidebar-primary-foreground:var(--primary-foreground);--sidebar-accent:var(--accent);--sidebar-accent-foreground:var(--accent-foreground);--sidebar-border:#242b27}@supports (color:color-mix(in lab, red, red)){[data-theme=canopy].dark,[data-theme=canopy] .dark{--sidebar-border:color-mix(in oklab, var(--color-emerald-900) 15%, var(--color-stone-800))}}[data-theme=canopy].dark,[data-theme=canopy] .dark{--sidebar-ring:var(--color-emerald-500);--backdrop:#000c;--theme-background:#0b0f0d}@supports (color:color-mix(in lab, red, red)){[data-theme=canopy].dark,[data-theme=canopy] .dark{--theme-background:color-mix(in oklab, var(--color-emerald-950) 14%, var(--color-stone-950))}}[data-theme=canopy].dark,[data-theme=canopy] .dark{--wash-a:#065f46}@supports (color:color-mix(in lab, red, red)){[data-theme=canopy].dark,[data-theme=canopy] .dark{--wash-a:color-mix(in oklab, var(--color-emerald-800) 52%, var(--background))}}@supports (color:color-mix(in lab, red, red)){[data-theme=canopy].dark,[data-theme=canopy] .dark{--wash-b:color-mix(in oklab, var(--color-emerald-900) 62%, var(--background))}}[data-theme=canopy] :is([data-slot=input-group],[data-slot=input],[data-slot=textarea],textarea){--tw-ring-offset-width:0px;--tw-ring-offset-color:transparent}[data-theme=canopy].dark body,[data-theme=canopy] .dark body{background-image:radial-gradient(1200px 720px at 8% -10%, var(--wash-a), transparent 62%), radial-gradient(1000px 620px at 96% 2%, var(--wash-b), transparent 58%);background-repeat:no-repeat;background-attachment:fixed}[data-theme=canopy] [data-slot=card]{box-shadow:none}:root{--brand:var(--color-emerald-800);--brand-foreground:var(--color-neutral-50)}[data-theme=canopy].dark,[data-theme=canopy] .dark{--brand:var(--color-emerald-400);--brand-foreground:#04140d;--primary:#e9f0ec;--primary-foreground:#101711;--primary-hover:var(--color-white)}:root{--panel-shadow:0 18px 40px -28px #14201a73}[data-theme=canopy].dark,[data-theme=canopy] .dark{--panel-shadow:0 18px 44px -26px #000000b3;--wash-a:#065f46}@supports (color:color-mix(in lab, red, red)){[data-theme=canopy].dark,[data-theme=canopy] .dark{--wash-a:color-mix(in oklab, var(--color-emerald-800) 55%, var(--background))}}[data-theme=canopy].dark,[data-theme=canopy] .dark{--wash-b:#064e3b}@supports (color:color-mix(in lab, red, red)){[data-theme=canopy].dark,[data-theme=canopy] .dark{--wash-b:color-mix(in oklab, var(--color-emerald-900) 70%, var(--background))}}@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-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-outline-style{syntax:\"*\";inherits:false;initial-value:solid}</style><script>matchMedia('(prefers-color-scheme:dark)').matches&&document.documentElement.classList.add('dark')<\/script></head><body class=\"grid min-h-svh place-items-center p-6 text-foreground\"><main class=\"w-full max-w-sm rounded-2xl border border-border bg-card p-8 shadow-panel backdrop-blur-[10px]\"><div class=\"mb-5 grid size-11 place-items-center rounded-xl bg-destructive text-[var(--card)]\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"lucide lucide-circle-alert size-5\" aria-hidden=\"true\"><circle cx=\"12\" cy=\"12\" r=\"10\"></circle><line x1=\"12\" x2=\"12\" y1=\"8\" y2=\"12\"></line><line x1=\"12\" x2=\"12.01\" y1=\"16\" y2=\"16\"></line></svg></div><p class=\"mb-1 text-xs font-semibold uppercase tracking-wide text-brand\">Canopy CLI</p><h1 class=\"mb-2 text-2xl font-semibold tracking-tight break-words\">Sign-in didn’t finish</h1><p class=\"mt-2 text-sm leading-relaxed text-muted-foreground\">Return to the terminal and run canopy login again. Reloading this page won’t help.</p><p class=\"mt-6 border-t border-border pt-4 text-xs text-muted-foreground\">If the terminal still says it’s waiting, cancel with <kbd class=\"rounded border border-border bg-[var(--input)] px-1 py-px text-[0.85em] font-normal\">Ctrl</kbd>+<kbd class=\"rounded border border-border bg-[var(--input)] px-1 py-px text-[0.85em] font-normal\">C</kbd> and try again.</p></main></body></html>";
12
12
  //#endregion
13
13
  //#region src/login-page.ts
14
14
  /**
@@ -1,6 +1,6 @@
1
1
  import { c as resolveProject, o as projectFlagArgs } from "./site-DM2J10CB.mjs";
2
- import { i as apiRequest, o as withContext } from "./api-C4rMhE7i.mjs";
3
- import { r as reportErrors } from "./ui-C_jSc1Kz.mjs";
2
+ import { i as apiRequest, o as withContext } from "./api-BPEYm9ts.mjs";
3
+ import { r as reportErrors } from "./ui-CHfKV6lG.mjs";
4
4
  import { defineCommand } from "citty";
5
5
  //#region src/logs.ts
6
6
  /**
@@ -1,6 +1,6 @@
1
- import { t as version } from "./package-lYhex2Gp.mjs";
1
+ import { t as version } from "./package-BY69Tjq_.mjs";
2
2
  import { d as tryResolveProject, l as stagingUrl, n as siteConfig, s as projectUrl } from "./site-DM2J10CB.mjs";
3
- import { i as apiRequest, t as ApiError } from "./api-C4rMhE7i.mjs";
3
+ import { i as apiRequest, t as ApiError } from "./api-BPEYm9ts.mjs";
4
4
  import { t as liveDevServer } from "./dev-server-file-Dk9pk4AR.mjs";
5
5
  import { defineCommand } from "citty";
6
6
  import { serveStdio } from "@modelcontextprotocol/server/stdio";
@@ -1,5 +1,5 @@
1
1
  import { u as tryReadCanopyJson } from "./site-DM2J10CB.mjs";
2
- import { n as apiDataRequest } from "./api-C4rMhE7i.mjs";
2
+ import { n as apiDataRequest } from "./api-BPEYm9ts.mjs";
3
3
  import { readFileSync, readdirSync } from "node:fs";
4
4
  import { join, resolve } from "node:path";
5
5
  //#region src/migrations.ts
@@ -1,5 +1,5 @@
1
1
  import { a as projectDirArgs, c as resolveProject, l as stagingUrl, s as projectUrl } from "./site-DM2J10CB.mjs";
2
- import { n as openBrowser, r as reportErrors } from "./ui-C_jSc1Kz.mjs";
2
+ import { n as openBrowser, r as reportErrors } from "./ui-CHfKV6lG.mjs";
3
3
  import { defineCommand } from "citty";
4
4
  //#region src/open.ts
5
5
  /**
@@ -1,4 +1,4 @@
1
1
  //#region package.json
2
- var version = "0.7.36";
2
+ var version = "0.7.37";
3
3
  //#endregion
4
4
  export { version as t };
@@ -1,7 +1,7 @@
1
1
  import { n as siteConfig, s as projectUrl, u as tryReadCanopyJson } from "./site-DM2J10CB.mjs";
2
- import { i as apiRequest } from "./api-C4rMhE7i.mjs";
3
- import { a as unwrap, i as requireTty, r as reportErrors } from "./ui-C_jSc1Kz.mjs";
4
- import { r as offerRepoOnCreate } from "./repo-Bb9ntNa4.mjs";
2
+ import { i as apiRequest } from "./api-BPEYm9ts.mjs";
3
+ import { a as unwrap, i as requireTty, r as reportErrors } from "./ui-CHfKV6lG.mjs";
4
+ import { r as offerRepoOnCreate } from "./repo-CKIQrrHK.mjs";
5
5
  import { defineCommand } from "citty";
6
6
  import { existsSync, mkdirSync, readFileSync, readdirSync, writeFileSync } from "node:fs";
7
7
  import { join, relative, resolve, sep } from "node:path";
@@ -1,6 +1,6 @@
1
1
  import { a as projectDirArgs, c as resolveProject, n as siteConfig, u as tryReadCanopyJson } from "./site-DM2J10CB.mjs";
2
- import { i as apiRequest, o as withContext } from "./api-C4rMhE7i.mjs";
3
- import { a as unwrap, i as requireTty, r as reportErrors, t as formatDateTime } from "./ui-C_jSc1Kz.mjs";
2
+ import { i as apiRequest, o as withContext } from "./api-BPEYm9ts.mjs";
3
+ import { a as unwrap, i as requireTty, r as reportErrors, t as formatDateTime } from "./ui-CHfKV6lG.mjs";
4
4
  import { a as parseCredentialInput, i as helperCommand, o as runCredentialHelper, r as fileTokenCache, t as RepoCredentialError } from "./repo-credential-CNDRM-tG.mjs";
5
5
  import { defineCommand } from "citty";
6
6
  import { existsSync, realpathSync } from "node:fs";
@@ -0,0 +1,2 @@
1
+ import { i as repoCommand } from "./repo-CKIQrrHK.mjs";
2
+ export { repoCommand };
@@ -1,6 +1,6 @@
1
1
  import { c as resolveProject, o as projectFlagArgs } from "./site-DM2J10CB.mjs";
2
- import { i as apiRequest, o as withContext } from "./api-C4rMhE7i.mjs";
3
- import { r as reportErrors, t as formatDateTime } from "./ui-C_jSc1Kz.mjs";
2
+ import { i as apiRequest, o as withContext } from "./api-BPEYm9ts.mjs";
3
+ import { r as reportErrors, t as formatDateTime } from "./ui-CHfKV6lG.mjs";
4
4
  import { defineCommand } from "citty";
5
5
  //#region src/schedule.ts
6
6
  /**
@@ -1,6 +1,6 @@
1
1
  import { a as projectDirArgs, c as resolveProject } from "./site-DM2J10CB.mjs";
2
- import { i as apiRequest, o as withContext } from "./api-C4rMhE7i.mjs";
3
- import { a as unwrap, r as reportErrors, t as formatDateTime } from "./ui-C_jSc1Kz.mjs";
2
+ import { i as apiRequest, o as withContext } from "./api-BPEYm9ts.mjs";
3
+ import { a as unwrap, r as reportErrors, t as formatDateTime } from "./ui-CHfKV6lG.mjs";
4
4
  import { defineCommand } from "citty";
5
5
  import * as p from "@clack/prompts";
6
6
  //#region src/secrets.ts
@@ -1,5 +1,5 @@
1
- import { t as version } from "./package-lYhex2Gp.mjs";
2
- import { r as reportErrors } from "./ui-C_jSc1Kz.mjs";
1
+ import { t as version } from "./package-BY69Tjq_.mjs";
2
+ import { r as reportErrors } from "./ui-CHfKV6lG.mjs";
3
3
  import { defineCommand } from "citty";
4
4
  import { cpSync, existsSync, mkdirSync, rmSync, symlinkSync, writeFileSync } from "node:fs";
5
5
  import { homedir } from "node:os";
@@ -1,6 +1,6 @@
1
1
  import { c as resolveProject, l as stagingUrl, o as projectFlagArgs, s as projectUrl } from "./site-DM2J10CB.mjs";
2
- import { i as apiRequest, o as withContext } from "./api-C4rMhE7i.mjs";
3
- import { a as unwrap, i as requireTty, r as reportErrors, t as formatDateTime } from "./ui-C_jSc1Kz.mjs";
2
+ import { i as apiRequest, o as withContext } from "./api-BPEYm9ts.mjs";
3
+ import { a as unwrap, i as requireTty, r as reportErrors, t as formatDateTime } from "./ui-CHfKV6lG.mjs";
4
4
  import { defineCommand } from "citty";
5
5
  import * as p from "@clack/prompts";
6
6
  //#region src/staging.ts
@@ -1,6 +1,6 @@
1
1
  import { a as projectDirArgs, c as resolveProject, o as projectFlagArgs } from "./site-DM2J10CB.mjs";
2
- import { i as apiRequest } from "./api-C4rMhE7i.mjs";
3
- import { r as reportErrors, t as formatDateTime } from "./ui-C_jSc1Kz.mjs";
2
+ import { i as apiRequest } from "./api-BPEYm9ts.mjs";
3
+ import { r as reportErrors, t as formatDateTime } from "./ui-CHfKV6lG.mjs";
4
4
  import { defineCommand } from "citty";
5
5
  const tokenCommand = defineCommand({
6
6
  meta: {
@@ -1,4 +1,4 @@
1
- import { t as ApiError } from "./api-C4rMhE7i.mjs";
1
+ import { t as ApiError } from "./api-BPEYm9ts.mjs";
2
2
  import { spawn } from "node:child_process";
3
3
  import { cancel, isCancel } from "@clack/prompts";
4
4
  //#region src/ui.ts
@@ -1,5 +1,5 @@
1
1
  import { t as PACKAGE_NAME } from "./version-check-CcsA1QjI.mjs";
2
- import { r as reportErrors } from "./ui-C_jSc1Kz.mjs";
2
+ import { r as reportErrors } from "./ui-CHfKV6lG.mjs";
3
3
  import { defineCommand } from "citty";
4
4
  import { spawn } from "node:child_process";
5
5
  import { fileURLToPath } from "node:url";
@@ -112,7 +112,7 @@ const upgradeCommand = defineCommand({
112
112
  const spec = `${PACKAGE_NAME}@${args.version ?? "latest"}`;
113
113
  const command = pmCommand(pm);
114
114
  const cmd = installArgs(pm, spec);
115
- const { skillInstalled } = await import("./skill-BUA2uRR2.mjs");
115
+ const { skillInstalled } = await import("./skill-B96cKy8K.mjs");
116
116
  const { homedir } = await import("node:os");
117
117
  const refreshGlobal = skillInstalled(homedir());
118
118
  const refreshRepo = process.cwd() !== homedir() && skillInstalled(process.cwd());
@@ -1,6 +1,6 @@
1
1
  import { c as resolveProject, o as projectFlagArgs } from "./site-DM2J10CB.mjs";
2
- import { i as apiRequest, o as withContext } from "./api-C4rMhE7i.mjs";
3
- import { r as reportErrors } from "./ui-C_jSc1Kz.mjs";
2
+ import { i as apiRequest, o as withContext } from "./api-BPEYm9ts.mjs";
3
+ import { r as reportErrors } from "./ui-CHfKV6lG.mjs";
4
4
  import { defineCommand } from "citty";
5
5
  //#region src/usage.ts
6
6
  /**
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mediamonks/canopy-cli",
3
- "version": "0.7.36",
3
+ "version": "0.7.37",
4
4
  "description": "Canopy CLI — create, develop and deploy Canopy projects.",
5
5
  "bin": {
6
6
  "canopy": "./dist/index.mjs"
@@ -1,2 +0,0 @@
1
- import { n as devCommand } from "./dev-BdXslHoA.mjs";
2
- export { devCommand };
@@ -1,2 +0,0 @@
1
- import { i as repoCommand } from "./repo-Bb9ntNa4.mjs";
2
- export { repoCommand };