rivet-design 0.22.0 → 0.23.0

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 (218) hide show
  1. package/bin/rivet.js +6 -0
  2. package/dist/agent-variants/SessionStore.d.ts +2 -21
  3. package/dist/agent-variants/SessionStore.d.ts.map +1 -1
  4. package/dist/agent-variants/SessionStore.js +15 -279
  5. package/dist/agent-variants/SessionStore.js.map +1 -1
  6. package/dist/agent-variants/WorktreeOrchestrator.d.ts +0 -3
  7. package/dist/agent-variants/WorktreeOrchestrator.d.ts.map +1 -1
  8. package/dist/agent-variants/WorktreeOrchestrator.js +1 -62
  9. package/dist/agent-variants/WorktreeOrchestrator.js.map +1 -1
  10. package/dist/agent-variants/WorktreeOrchestrator.testHelpers.d.ts.map +1 -1
  11. package/dist/agent-variants/WorktreeOrchestrator.testHelpers.js +0 -12
  12. package/dist/agent-variants/WorktreeOrchestrator.testHelpers.js.map +1 -1
  13. package/dist/agent-variants/contracts.d.ts +896 -2423
  14. package/dist/agent-variants/contracts.d.ts.map +1 -1
  15. package/dist/agent-variants/contracts.js +2 -84
  16. package/dist/agent-variants/contracts.js.map +1 -1
  17. package/dist/agent-variants/directionBriefs.d.ts +7 -0
  18. package/dist/agent-variants/directionBriefs.d.ts.map +1 -0
  19. package/dist/agent-variants/directionBriefs.js +51 -0
  20. package/dist/agent-variants/directionBriefs.js.map +1 -0
  21. package/dist/agent-variants/index.d.ts +1 -1
  22. package/dist/agent-variants/index.d.ts.map +1 -1
  23. package/dist/agent-variants/runPlan.d.ts +0 -1
  24. package/dist/agent-variants/runPlan.d.ts.map +1 -1
  25. package/dist/agent-variants/runPlan.js +0 -4
  26. package/dist/agent-variants/runPlan.js.map +1 -1
  27. package/dist/agent-variants/sourceContext.d.ts +0 -2
  28. package/dist/agent-variants/sourceContext.d.ts.map +1 -1
  29. package/dist/agent-variants/sourceContext.js +1 -35
  30. package/dist/agent-variants/sourceContext.js.map +1 -1
  31. package/dist/agent-variants/variantsTelemetry.d.ts +0 -3
  32. package/dist/agent-variants/variantsTelemetry.d.ts.map +1 -1
  33. package/dist/agent-variants/variantsTelemetry.js.map +1 -1
  34. package/dist/agent-variants/workItemInput.d.ts +470 -470
  35. package/dist/cli/commands/context.d.ts +3 -1
  36. package/dist/cli/commands/context.d.ts.map +1 -1
  37. package/dist/cli/commands/context.js +38 -1
  38. package/dist/cli/commands/context.js.map +1 -1
  39. package/dist/cli/commands/contextRequest.d.ts +1 -0
  40. package/dist/cli/commands/contextRequest.d.ts.map +1 -1
  41. package/dist/cli/commands/contextRequest.js +65 -5
  42. package/dist/cli/commands/contextRequest.js.map +1 -1
  43. package/dist/cli/commands/guidanceReferences.d.ts +1 -0
  44. package/dist/cli/commands/guidanceReferences.d.ts.map +1 -1
  45. package/dist/cli/commands/guidanceReferences.js +5 -4
  46. package/dist/cli/commands/guidanceReferences.js.map +1 -1
  47. package/dist/cli/commands/guidanceVerifierPackage.d.ts +9 -0
  48. package/dist/cli/commands/guidanceVerifierPackage.d.ts.map +1 -0
  49. package/dist/cli/commands/guidanceVerifierPackage.js +41 -0
  50. package/dist/cli/commands/guidanceVerifierPackage.js.map +1 -0
  51. package/dist/cli/commands/mcpServe.d.ts +1 -0
  52. package/dist/cli/commands/mcpServe.d.ts.map +1 -1
  53. package/dist/cli/commands/mcpServe.js +457 -326
  54. package/dist/cli/commands/mcpServe.js.map +1 -1
  55. package/dist/cli/commands/variants.js +2 -2
  56. package/dist/cli/commands/variants.js.map +1 -1
  57. package/dist/cli/handoffStore.d.ts +0 -1
  58. package/dist/cli/handoffStore.d.ts.map +1 -1
  59. package/dist/cli/handoffStore.js +1 -11
  60. package/dist/cli/handoffStore.js.map +1 -1
  61. package/dist/cli/router.d.ts +3 -1
  62. package/dist/cli/router.d.ts.map +1 -1
  63. package/dist/cli/router.js +4 -3
  64. package/dist/cli/router.js.map +1 -1
  65. package/dist/config/flags.d.ts +0 -3
  66. package/dist/config/flags.d.ts.map +1 -1
  67. package/dist/config/flags.js +0 -1
  68. package/dist/config/flags.js.map +1 -1
  69. package/dist/hosts/workerDefaults.d.ts +0 -1
  70. package/dist/hosts/workerDefaults.d.ts.map +1 -1
  71. package/dist/hosts/workerDefaults.js +1 -2
  72. package/dist/hosts/workerDefaults.js.map +1 -1
  73. package/dist/index-core.d.ts +1 -2
  74. package/dist/index-core.d.ts.map +1 -1
  75. package/dist/index-core.js +1 -3
  76. package/dist/index-core.js.map +1 -1
  77. package/dist/mcp/changeBatchClassification.d.ts +1 -11
  78. package/dist/mcp/changeBatchClassification.d.ts.map +1 -1
  79. package/dist/mcp/changeBatchClassification.js +0 -38
  80. package/dist/mcp/changeBatchClassification.js.map +1 -1
  81. package/dist/routes/library/guidance.d.ts.map +1 -1
  82. package/dist/routes/library/guidance.js +7 -0
  83. package/dist/routes/library/guidance.js.map +1 -1
  84. package/dist/server.d.ts +0 -1
  85. package/dist/server.d.ts.map +1 -1
  86. package/dist/server.js +1 -3
  87. package/dist/server.js.map +1 -1
  88. package/dist/services/AuthService.d.ts +4 -10
  89. package/dist/services/AuthService.d.ts.map +1 -1
  90. package/dist/services/AuthService.js +1 -116
  91. package/dist/services/AuthService.js.map +1 -1
  92. package/dist/services/GuidanceVerifierRunner.d.ts +15 -0
  93. package/dist/services/GuidanceVerifierRunner.d.ts.map +1 -0
  94. package/dist/services/GuidanceVerifierRunner.js +373 -0
  95. package/dist/services/GuidanceVerifierRunner.js.map +1 -0
  96. package/dist/services/HubDiscovery.d.ts +2 -2
  97. package/dist/services/IntegrationsClient.d.ts +3 -3
  98. package/dist/services/MCPOnboardingTelemetry.d.ts +0 -2
  99. package/dist/services/MCPOnboardingTelemetry.d.ts.map +1 -1
  100. package/dist/services/MCPOnboardingTelemetry.js +1 -78
  101. package/dist/services/MCPOnboardingTelemetry.js.map +1 -1
  102. package/dist/services/OperatingSystemServices.d.ts.map +1 -1
  103. package/dist/services/OperatingSystemServices.js +12 -5
  104. package/dist/services/OperatingSystemServices.js.map +1 -1
  105. package/dist/services/ProjectRegistry.d.ts +2 -2
  106. package/dist/services/TelemetryService.d.ts +1 -9
  107. package/dist/services/TelemetryService.d.ts.map +1 -1
  108. package/dist/services/TelemetryService.js +0 -28
  109. package/dist/services/TelemetryService.js.map +1 -1
  110. package/dist/services/VariantGenerationService.d.ts +1 -9
  111. package/dist/services/VariantGenerationService.d.ts.map +1 -1
  112. package/dist/services/VariantGenerationService.js +16 -140
  113. package/dist/services/VariantGenerationService.js.map +1 -1
  114. package/dist/services/VariantRunService.d.ts +0 -6
  115. package/dist/services/VariantRunService.d.ts.map +1 -1
  116. package/dist/services/VariantRunService.js +1 -28
  117. package/dist/services/VariantRunService.js.map +1 -1
  118. package/dist/services/VariantsRuntime.d.ts.map +1 -1
  119. package/dist/services/VariantsRuntime.js +0 -1
  120. package/dist/services/VariantsRuntime.js.map +1 -1
  121. package/dist/services/accessTokenRefresh.d.ts +0 -3
  122. package/dist/services/accessTokenRefresh.d.ts.map +1 -1
  123. package/dist/services/accessTokenRefresh.js +1 -33
  124. package/dist/services/accessTokenRefresh.js.map +1 -1
  125. package/dist/services/guidanceDelivery.d.ts +0 -5
  126. package/dist/services/guidanceDelivery.d.ts.map +1 -1
  127. package/dist/services/guidanceDelivery.js +1 -20
  128. package/dist/services/guidanceDelivery.js.map +1 -1
  129. package/dist/services/guidanceReferences.d.ts.map +1 -1
  130. package/dist/services/guidanceReferences.js +2 -76
  131. package/dist/services/guidanceReferences.js.map +1 -1
  132. package/dist/services/profiles/DesignProfiles.d.ts +31 -16
  133. package/dist/services/profiles/DesignProfiles.d.ts.map +1 -1
  134. package/dist/services/profiles/DesignProfiles.js +71 -17
  135. package/dist/services/profiles/DesignProfiles.js.map +1 -1
  136. package/dist/services/profiles/ProfilePlanning.d.ts +5 -5
  137. package/dist/services/profiles/ReferenceReader.d.ts +2 -2
  138. package/dist/services/profiles/profileContext.d.ts +1 -1
  139. package/dist/services/retainedTextFiles.d.ts +8 -0
  140. package/dist/services/retainedTextFiles.d.ts.map +1 -0
  141. package/dist/services/retainedTextFiles.js +95 -0
  142. package/dist/services/retainedTextFiles.js.map +1 -0
  143. package/dist/services/staticProjectTarget.d.ts +0 -1
  144. package/dist/services/staticProjectTarget.d.ts.map +1 -1
  145. package/dist/services/staticProjectTarget.js +1 -5
  146. package/dist/services/staticProjectTarget.js.map +1 -1
  147. package/dist/services/templates/designCatalog.d.ts +0 -4
  148. package/dist/services/templates/designCatalog.d.ts.map +1 -1
  149. package/dist/services/templates/designCatalog.js +1 -27
  150. package/dist/services/templates/designCatalog.js.map +1 -1
  151. package/dist/storage/profiles/ProfilePlans.d.ts +18 -18
  152. package/dist/storage/profiles/ProfileRecords.d.ts +52 -3
  153. package/dist/storage/profiles/ProfileRecords.d.ts.map +1 -1
  154. package/dist/storage/profiles/ProfileRecords.js +74 -17
  155. package/dist/storage/profiles/ProfileRecords.js.map +1 -1
  156. package/dist/storage/profiles/guidanceVerifier.d.ts +3 -0
  157. package/dist/storage/profiles/guidanceVerifier.d.ts.map +1 -0
  158. package/dist/storage/profiles/guidanceVerifier.js +30 -0
  159. package/dist/storage/profiles/guidanceVerifier.js.map +1 -0
  160. package/dist/storage/profiles/migrations.d.ts +2 -2
  161. package/dist/storage/profiles/migrations.d.ts.map +1 -1
  162. package/dist/storage/profiles/migrations.js +3 -0
  163. package/dist/storage/profiles/migrations.js.map +1 -1
  164. package/dist/storage/profiles/planSchema.d.ts +5 -5
  165. package/dist/storage/profiles/schema.d.ts +28 -1
  166. package/dist/storage/profiles/schema.d.ts.map +1 -1
  167. package/dist/storage/profiles/schema.js +1 -0
  168. package/dist/storage/profiles/schema.js.map +1 -1
  169. package/dist/types/change-types.d.ts +0 -25
  170. package/dist/types/change-types.d.ts.map +1 -1
  171. package/dist/types/cosmos-profile.d.ts +12 -12
  172. package/dist/types/cosmos.d.ts +20 -20
  173. package/dist/types/design-profile.d.ts +16 -16
  174. package/dist/types/guidance-references.d.ts +16 -0
  175. package/dist/types/guidance-references.d.ts.map +1 -1
  176. package/dist/types/guidance-references.js +44 -30
  177. package/dist/types/guidance-references.js.map +1 -1
  178. package/dist/types/guidance-verifier.d.ts +265 -0
  179. package/dist/types/guidance-verifier.d.ts.map +1 -0
  180. package/dist/types/guidance-verifier.js +71 -0
  181. package/dist/types/guidance-verifier.js.map +1 -0
  182. package/dist/types/guidance.d.ts +436 -21
  183. package/dist/types/guidance.d.ts.map +1 -1
  184. package/dist/types/guidance.js +13 -2
  185. package/dist/types/guidance.js.map +1 -1
  186. package/dist/types/reference-connectors.d.ts +20 -20
  187. package/dist/types/reference-onboarding.d.ts +48 -48
  188. package/dist/types/variant-reference.d.ts +4 -4
  189. package/dist/types/x-bookmarks.d.ts +10 -10
  190. package/dist/utils/skills/cli-guidance.d.ts +1 -1
  191. package/dist/utils/skills/cli-guidance.d.ts.map +1 -1
  192. package/dist/utils/skills/cli-guidance.js +19 -6
  193. package/dist/utils/skills/cli-guidance.js.map +1 -1
  194. package/dist/utils/skills/codex-skill.d.ts +1 -1
  195. package/dist/utils/skills/codex-skill.d.ts.map +1 -1
  196. package/dist/utils/skills/codex-skill.js +1 -1
  197. package/package.json +1 -2
  198. package/src/ui/dist/assets/{LibraryEntry-CjxmVfhv.js → LibraryEntry-B9ZkJUtN.js} +8 -8
  199. package/src/ui/dist/assets/main-CXP-A-qy.css +1 -0
  200. package/src/ui/dist/assets/{main-CdSzrhWD.js → main-Dls3YqrM.js} +144 -144
  201. package/src/ui/dist/index.html +2 -2
  202. package/dist/agent-variants/directionAuthoring.d.ts +0 -27
  203. package/dist/agent-variants/directionAuthoring.d.ts.map +0 -1
  204. package/dist/agent-variants/directionAuthoring.js +0 -380
  205. package/dist/agent-variants/directionAuthoring.js.map +0 -1
  206. package/dist/services/ComponentSearchService.d.ts +0 -13
  207. package/dist/services/ComponentSearchService.d.ts.map +0 -1
  208. package/dist/services/ComponentSearchService.js +0 -167
  209. package/dist/services/ComponentSearchService.js.map +0 -1
  210. package/dist/types/style-manipulation-types.d.ts +0 -63
  211. package/dist/types/style-manipulation-types.d.ts.map +0 -1
  212. package/dist/types/style-manipulation-types.js +0 -68
  213. package/dist/types/style-manipulation-types.js.map +0 -1
  214. package/dist/types/token-types.d.ts +0 -24
  215. package/dist/types/token-types.d.ts.map +0 -1
  216. package/dist/types/token-types.js +0 -3
  217. package/dist/types/token-types.js.map +0 -1
  218. package/src/ui/dist/assets/main-DVb3ws41.css +0 -1
@@ -49,8 +49,8 @@ export declare const XBookmarkSchema: z.ZodObject<{
49
49
  altText: string | null;
50
50
  }>, "many">;
51
51
  }, "strip", z.ZodTypeAny, {
52
- id: string;
53
52
  text: string;
53
+ id: string;
54
54
  media: {
55
55
  url: string;
56
56
  representation: "image" | "video-cover";
@@ -65,8 +65,8 @@ export declare const XBookmarkSchema: z.ZodObject<{
65
65
  links: string[];
66
66
  unavailableVideoCount: number;
67
67
  }, {
68
- id: string;
69
68
  text: string;
69
+ id: string;
70
70
  media: {
71
71
  url: string;
72
72
  representation: "image" | "video-cover";
@@ -117,8 +117,8 @@ export declare const XBookmarksPageSchema: z.ZodObject<{
117
117
  altText: string | null;
118
118
  }>, "many">;
119
119
  }, "strip", z.ZodTypeAny, {
120
- id: string;
121
120
  text: string;
121
+ id: string;
122
122
  media: {
123
123
  url: string;
124
124
  representation: "image" | "video-cover";
@@ -133,8 +133,8 @@ export declare const XBookmarksPageSchema: z.ZodObject<{
133
133
  links: string[];
134
134
  unavailableVideoCount: number;
135
135
  }, {
136
- id: string;
137
136
  text: string;
137
+ id: string;
138
138
  media: {
139
139
  url: string;
140
140
  representation: "image" | "video-cover";
@@ -153,8 +153,8 @@ export declare const XBookmarksPageSchema: z.ZodObject<{
153
153
  }, "strip", z.ZodTypeAny, {
154
154
  nextCursor: string | null;
155
155
  bookmarks: {
156
- id: string;
157
156
  text: string;
157
+ id: string;
158
158
  media: {
159
159
  url: string;
160
160
  representation: "image" | "video-cover";
@@ -172,8 +172,8 @@ export declare const XBookmarksPageSchema: z.ZodObject<{
172
172
  }, {
173
173
  nextCursor: string | null;
174
174
  bookmarks: {
175
- id: string;
176
175
  text: string;
176
+ id: string;
177
177
  media: {
178
178
  url: string;
179
179
  representation: "image" | "video-cover";
@@ -225,8 +225,8 @@ export declare const XBookmarksResultSchema: z.ZodDiscriminatedUnion<"status", [
225
225
  altText: string | null;
226
226
  }>, "many">;
227
227
  }, "strip", z.ZodTypeAny, {
228
- id: string;
229
228
  text: string;
229
+ id: string;
230
230
  media: {
231
231
  url: string;
232
232
  representation: "image" | "video-cover";
@@ -241,8 +241,8 @@ export declare const XBookmarksResultSchema: z.ZodDiscriminatedUnion<"status", [
241
241
  links: string[];
242
242
  unavailableVideoCount: number;
243
243
  }, {
244
- id: string;
245
244
  text: string;
245
+ id: string;
246
246
  media: {
247
247
  url: string;
248
248
  representation: "image" | "video-cover";
@@ -277,8 +277,8 @@ export declare const XBookmarksResultSchema: z.ZodDiscriminatedUnion<"status", [
277
277
  status: "ok";
278
278
  nextCursor: string | null;
279
279
  bookmarks: {
280
- id: string;
281
280
  text: string;
281
+ id: string;
282
282
  media: {
283
283
  url: string;
284
284
  representation: "image" | "video-cover";
@@ -302,8 +302,8 @@ export declare const XBookmarksResultSchema: z.ZodDiscriminatedUnion<"status", [
302
302
  status: "ok";
303
303
  nextCursor: string | null;
304
304
  bookmarks: {
305
- id: string;
306
305
  text: string;
306
+ id: string;
307
307
  media: {
308
308
  url: string;
309
309
  representation: "image" | "video-cover";
@@ -1,4 +1,4 @@
1
- export declare const CLI_GUIDANCE_VERSION = 49;
1
+ export declare const CLI_GUIDANCE_VERSION = 51;
2
2
  export declare const CLI_GUIDANCE_BODY: string;
3
3
  export declare const CLI_GUIDANCE_DESCRIPTION = "Rivet \u2014 open the visual editor or explore design directions for a web app.";
4
4
  //# sourceMappingURL=cli-guidance.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"cli-guidance.d.ts","sourceRoot":"","sources":["../../../src/utils/skills/cli-guidance.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,oBAAoB,KAAK,CAAC;AAIvC,eAAO,MAAM,iBAAiB,QAqFmc,CAAC;AAEle,eAAO,MAAM,wBAAwB,oFACyC,CAAC"}
1
+ {"version":3,"file":"cli-guidance.d.ts","sourceRoot":"","sources":["../../../src/utils/skills/cli-guidance.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,oBAAoB,KAAK,CAAC;AAIvC,eAAO,MAAM,iBAAiB,QAkGmc,CAAC;AAEle,eAAO,MAAM,wBAAwB,oFACyC,CAAC"}
@@ -2,7 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.CLI_GUIDANCE_DESCRIPTION = exports.CLI_GUIDANCE_BODY = exports.CLI_GUIDANCE_VERSION = void 0;
4
4
  const displayLocale_1 = require("../displayLocale");
5
- exports.CLI_GUIDANCE_VERSION = 49;
5
+ exports.CLI_GUIDANCE_VERSION = 51;
6
6
  const DISPLAY_LOCALE = (0, displayLocale_1.resolveDisplayLocale)();
7
7
  exports.CLI_GUIDANCE_BODY = `Rivet helps you **explore multiple design directions** for a web app. You drive it by running \`rivet\` CLI commands. Every command prints exactly one JSON envelope on stdout (\`{ schemaVersion, ok, command, data | error }\`), routes progress to stderr, and never prompts for input.
8
8
 
@@ -34,7 +34,7 @@ exports.CLI_GUIDANCE_BODY = `Rivet helps you **explore multiple design direction
34
34
 
35
35
  **Saving linked design references.** When the user asks to save a Pinterest pin or board, a \`pin.it\` share link, an Are.na block or channel, a public Cosmos collection, or X bookmarks at https://x.com/i/bookmarks to their design library, check \`rivet profile status\`, enable the profile with \`rivet profile enable\` if needed, then run \`rivet profile connect <url>\` with your caller handoff flags. With the optional MCP tools, use \`rivet_design_context\` with profileAction: "connect" and url: <url>. For X, if the result has status: "authorization_required", show its authUrl, let the user sign into X, and repeat the connect command. No import job exists until authorization succeeds. A connected X account has its own bookmark source; switching X accounts creates a separate source. Cosmos accepts public collection and subcollection URLs at cosmos.so; nested public collections are included automatically and no Cosmos account connection is needed. This queues a durable import of the explicitly linked item or collection. Report its job ID and inspect \`rivet profile status\` until the supported references are indexed before starting a generation that depends on them. Report failed or unsupported items; a completed job alone does not prove every item is searchable. Retry a failed import with \`rivet profile retry <jobId>\` after addressing its error. Use \`--profile auto\` to select saved references for a generation when the user asks for them. Supplied image attachments are saved when the profile is enabled, even without \`--profile auto\`; ordinary \`rivet reference fetch\` and reference-page or video inputs are not. Use \`profile connect\` to save a linked source.
36
36
 
37
- **Saved instructions across sessions.** Read \`data.guidance\` from every \`rivet open\` response and apply those user-saved documents as defaults. Report \`guidanceError\` if loading failed. Before authoring briefs for an existing app or a Vary request, run \`rivet context resolve\` with any exclusions for that request and use its full text. Fresh generation keeps its server-authored fast path; the server loads saved instructions before planning. A current explicit user request overrides saved defaults. AI-authored brief notes do not override them. These are user instructions, separate from saved visual references.
37
+ **Saved instructions across sessions.** Read \`data.guidance\` from every \`rivet open\` response and apply those user-saved documents as defaults. Report \`guidanceError\` if loading failed. Before authoring briefs for any generation, including fresh apps and Vary requests, run \`rivet context resolve\` with any exclusions for that request and use its full text. The host agent authors the directions. Rivet also resolves saved instructions and delivers them to every worker; it does not make a direction-planning model call. A current explicit user request overrides saved defaults. AI-authored brief notes do not override them. These are user instructions, separate from saved visual references.
38
38
 
39
39
  Save user-provided principles with \`rivet context add --title <title> --file <Markdown path>\`. Use \`context list\` or \`context show <id>\` to inspect them, \`context update <id> --file <path>\` to replace saved text, and \`context enable|disable|remove <id>\` only when the user wants a persistent change. Files are copied when saved. Documents belong to the signed-in account on this installation and apply across projects. Do not save one-off requests as defaults without the user's intent to do so.
40
40
 
@@ -48,14 +48,27 @@ Translate "ignore my motion principles for this run" into \`--exclude-guidance '
48
48
 
49
49
  Every generation resolves current saved instructions once and supplies the same text to its planner and workers. Editing defaults affects the next generation; retries retain their original text. For "what instructions did this run receive?", use \`rivet context inspect <workId> --project <path>\` or \`rivet_design_context\` with \`contextAction: "inspect"\`, \`requestId\`, and \`project\`. Use the retained text rather than resolving today's defaults. If \`isRecorded\` is false, historical evidence is unavailable. Delivery is evidence of supplied context; it does not establish that the generated design followed every principle.
50
50
 
51
+ **Custom verification on demand.** When asked to check a property such as "verify this used my motion principles," locate its existing context document with \`context list\`/\`show\`. Save missing user-provided principles or pointers through \`context add\` when the user wants them in context; do not invent principles or ingest source snapshots. Retrieve only the selected document with \`rivet context verifier <id>\` (MCP: \`rivet_design_context\`, \`contextAction: "verifier"\`, \`contextId\`). Its \`sourceDigest\` binds the saved text and reference metadata; URL and directory contents remain live and are not frozen by this digest. Inspect the actual relevant references without copying them into persistent context. The packet has \`execution: "host_required"\`: retrieval has not checked the output.
52
+
53
+ Identify the target from the user's app or \`variants get\`. For an earlier generation, read \`context inspect <workId>\` before claiming the source was delivered. Disclose missing receipts, changed principles, and live-source limitations. A current-source assessment does not establish historical compliance. Follow the packet's \`nextAction\`: create a temporary recipe when missing, revise it when stale, or execute the saved recipe when ready. Keep recipes short and specific about applicability, actions, observable assertions, and evidence. Use code inspection for source-level rules and real interaction for behavioral rules; a screenshot alone cannot verify motion timing or reduced-motion behavior. Execute the recipe once and write a uniquely named local report containing target identity, context ID/digest, each check, evidence locations, and pass/fail/unable-to-verify outcomes. Missing evidence is unable to verify, not a pass. Report failures without silently repairing the app.
54
+
55
+ After showing the actual result, offer to save a reusable recipe unless the user already requested reuse. With that agreement, run \`rivet context update <id> --verifier <Markdown path> --source-digest <packet digest>\` (MCP: \`rivet_design_context\` with \`contextAction: "update"\`, \`contextId\`, \`contextVerifier\`, \`contextSourceDigest\`). A source-change conflict requires retrieving the source and revising the recipe before saving. Source edits and verifier saves are separate updates. Remove just the recipe with \`context update <id> --remove-verifier\` (MCP: \`rivet_design_context\` with \`contextAction: "update"\`, \`contextId\`, and \`removeContextVerifier: true\`). Saved verifiers run only when requested; saving does not schedule checks or enable automatic reruns. The source retains its existing generation defaults, while recipe text stays out of planning and worker context.
56
+
57
+
58
+ For reusable executable checks, author an optional package with a named \`verify(input)\` export in a retained \`.mjs\` entrypoint. Store only authored verifier code and helpers, never a source-repository snapshot. A local JSON manifest is \`{runtime:"node",entrypoint:"verify.mjs",files:[{name:"verify.mjs",path:"./verify.mjs"}]}\`. Paths resolve relative to the manifest. Use Node built-ins, retained relative imports, and \`await import(input.modules.playwright)\` for Rivet's installed Playwright ESM module. Rivet installs no dependencies or browser. Inputs are \`source\` (prepared saved context), \`projectPath\`, \`target\` (opaque target JSON), \`evidenceDirectory\`, and \`modules.playwright\`. The code executes locally with the invoking CLI's permissions and environment, not a sandbox. Only run trusted authored code when the user requests verification.
59
+
60
+ Read expected brand values from the independent source. Bind target elements and modes explicitly in package-specific JSON rather than derive expected values from the app being checked. For color, distinguish Mapped-token provenance from rendered color, including pseudo-element paint. For spacing, bind semantic gaps or padding and density rather than check arbitrary multiples. For typography, compare the complete role and establish that the intended font loaded. Missing or ambiguous targets and unavailable prerequisites must be blocked. Prove the package on a compliant target and intentional violations before saving it for reuse.
61
+
62
+ The export returns \`{checks:[{id,category,status:"pass"|"fail"|"blocked",rule,target,expected,observed,evidence?:["relative-file.png"]}]}\`. IDs must be unique, checks nonempty, expected/observed bounded JSON, and referenced evidence real regular files inside \`evidenceDirectory\`. Save with \`context update <id> --verifier <Markdown path> --verifier-package <manifest.json> --source-digest <packet digest>\`. Run with \`rivet context verify <id> --project <absolute target> --input <target.json>\`; MCP \`rivet_design_context\` forwards \`contextAction: "verify"\`, \`contextId\`, \`project\`, \`contextVerifierInput\`. Saving through MCP adds \`contextVerifierPackage\`. A recipe-only update preserves the saved package for the same source digest; changed source requires a replacement package or explicit verifier removal before a Markdown-only save. Rivet bounds runtime/output, cleans up the process tree even after normal returns, and derives fail before blocked before pass. A pass exits 0; fail or blocked exits 1 with the completed report in \`error.details\`. Runtime errors have \`execution: "error"\` and a normalized reason. Report runtime failures separately from assertion failures. Missing/stale recipes and recipes without packages do not execute. Retrieval still runs no checks. Ordinary reads and generation exclude executable code as well as Markdown recipes. Saving adds no automatic gate, dependency install or source maintenance.
63
+
51
64
  ## Commands
52
65
 
53
- - \`rivet context <add|list|show|update|enable|disable|remove|resolve|inspect>\` manages saved instructions without model calls. \`add\` requires \`--title\` and either \`--file\` or a nonempty \`--references\` manifest; a URL-only reference needs no Markdown file. \`resolve\` accepts \`--guidance auto|off\` or \`--exclude-guidance <JSON IDs>\`. \`inspect <workId>\` reads the project's retained generation context. Markdown is preserved in full. Relay any \`guidanceWarning.message\` without blocking the request or changing the selected documents. The warning uses UTF-8 bytes, not a model token estimate. Context uploads above the 50 MiB HTTP request limit fail without saving; split or reduce the upload to retry.
66
+ - \`rivet context <add|list|show|update|enable|disable|remove|resolve|inspect|verifier|verify>\` manages saved instructions without model calls. \`add\` requires \`--title\` and either \`--file\` or a nonempty \`--references\` manifest; a URL-only reference needs no Markdown file. \`resolve\` accepts \`--guidance auto|off\` or \`--exclude-guidance <JSON IDs>\`. \`inspect <workId>\` reads the project's retained generation context. Markdown is preserved in full. Relay any \`guidanceWarning.message\` without blocking the request or changing the selected documents. The warning uses UTF-8 bytes, not a model token estimate. Context uploads above the 50 MiB HTTP request limit fail without saving; split or reduce the upload to retry.
54
67
 
55
68
  - \`rivet open [--project <path>] [--agent claude|codex|cursor] [--rivet-port N] [--user-port N] [--framework nextjs|vite|cra|remix|svelte|static] [--entry <path>] [--no-browser] [--no-git]\` — start or attach the project's editor server (idempotent; returns \`editorUrl\`). It detects the app, attaches to an already-running dev server, or starts one from the app's standard \`dev\`/\`start\`/\`serve\`/\`storybook\` script when possible. Follow the browser behavior above for interactive work.
56
69
  - **Attach, don't rebuild.** If the user's dev server is already running (including Storybook — component-library teams often run only Storybook), pass \`--user-port <port>\` to attach directly: this skips detection and never starts a second server. Auto-detection scans common ports (3000, 5173, 6006, …), but an explicit \`--user-port\` is always the most reliable path — when in doubt, ask the user which port their app is on, or start the dev server yourself first and pass its port.
57
70
  - **Rivet never installs dependencies.** If \`open\` fails because the app's start command failed, the error carries the exact command and its output. YOU own the fix: diagnose the output, run the project's install yourself if dependencies are missing, or start the dev server yourself — then re-run \`rivet open --user-port <port>\`. Do not retry \`rivet open\` unchanged expecting a different result.
58
- - \`rivet variants start --project <path> --instruction <text> [--run-label <text>] [--briefs <json>] [--count N] [--fidelity low|medium|high] [--element <selector>] [--files <json>] [--fresh] [--profile auto|off] [--context-images <json>] [--reference-pages <json>] [--reference-videos <json>] [--target <sessionId>:<variantId>] [--worker-provider claude|codex|cursor] [--worker-model <id>]\` — explore design directions. For existing-app and \`--target\` starts, agent invocations MUST pass an AI-authored 1–3 word batch label through \`rivet_variants\` \`runLabel\` or CLI \`--run-label\`, plus one AI-authored brief per direction; \`briefs.length\` sets the count. FRESH (\`--fresh\`) starts are different: OMIT briefs and run-label and pass \`--count\` — Rivet prepares all reference context and authors the directions server-side, which starts workers immediately. Use \`--files\` for already-known project paths and \`--target\` to Vary an existing direction. Returns a \`workId\` and \`nextAction\` after workspace provisioning.
71
+ - \`rivet variants start --project <path> --instruction <text> [--run-label <text>] [--briefs <json>] [--count N] [--fidelity low|medium|high] [--element <selector>] [--files <json>] [--fresh] [--profile auto|off] [--context-images <json>] [--reference-pages <json>] [--reference-videos <json>] [--target <sessionId>:<variantId>] [--worker-provider claude|codex|cursor] [--worker-model <id>]\` — explore design directions. For every start, including fresh apps and \`--target\` requests, agent invocations MUST pass an AI-authored 1–3 word batch label through \`rivet_variants\` \`runLabel\` or CLI \`--run-label\`, plus one AI-authored brief per direction; \`briefs.length\` sets the count. Fresh starts use the same host-authored briefs and batch label; Rivet prepares reference context for the workers without calling a planning model. Use \`--files\` for already-known project paths and \`--target\` to Vary an existing direction. Returns a \`workId\` and \`nextAction\` after workspace provisioning.
59
72
  - \`rivet variants complete <workId> --project <path> [--session <sessionId>] [--status succeeded|failed|cancelled] [--output <json>] [--error <message>]\` — report one host-agent work item complete after you edit its assigned workspace. Static artifacts are read from disk; do not send them through \`--output\`.
60
73
  - \`rivet wait <workId> --project <path> [--timeout <seconds>]\` — bounded block until a work id settles (exit 5 on timeout; re-issue or check status).
61
74
  - \`rivet status --project <path> [--watch]\` — session, resolved runner, active run, and the variants snapshot. \`--watch\` streams NDJSON.
@@ -74,7 +87,7 @@ Every generation resolves current saved instructions once and supplies the same
74
87
 
75
88
  ## Typical flows
76
89
 
77
- Before every agent-initiated EXISTING-APP or \`--target\` variants start, author a 1–3 word batch label plus one or more direction briefs as \`[{"label":"…","body":"…"}]\`. (Fresh \`--fresh\` starts skip this entirely — see the fresh flow below.) Write the user-visible \`runLabel\`, brief \`label\`, and brief \`body\` naturally in ${DISPLAY_LOCALE}, the computer's preferred display locale. The batch label summarizes the shared request and is passed through \`runLabel\` (MCP) or \`--run-label\` (CLI). Each brief \`label\` names what that direction concretely changes, not a vibe or numbered placeholder. Each \`body\` is a concise subtitle describing that direction. Add an optional \`notes\` string per brief for richer implementation intent (design tokens, motion specs, constraints) — it is delivered verbatim to that direction's worker and never shown in UI chips. Use one brief for a single visualization when the user wants Rivet's visualization framework without divergent ideas. For multiple directions, make every brief meaningfully different. Pass the array through the \`rivet_variants\` \`briefs\` field or CLI \`--briefs <json>\`, and omit \`--count\` because the array length is authoritative. Human-direct CLI calls may omit the batch label and briefs and use Rivet's deterministic fallback.
90
+ Before every agent-initiated variants start, including fresh apps and \`--target\` requests, author a 1–3 word batch label plus one or more direction briefs as \`[{"label":"…","body":"…"}]\`. Write the user-visible \`runLabel\`, brief \`label\`, and brief \`body\` naturally in ${DISPLAY_LOCALE}, the computer's preferred display locale. The batch label summarizes the shared request and is passed through \`runLabel\` (MCP) or \`--run-label\` (CLI). Each brief \`label\` names what that direction concretely changes, not a vibe or numbered placeholder. Each \`body\` is a concise subtitle describing that direction. Add an optional \`notes\` string per brief for richer implementation intent (design tokens, motion specs, constraints) — it is delivered verbatim to that direction's worker and never shown in UI chips. Use one brief for a single visualization when the user wants Rivet's visualization framework without divergent ideas. For multiple directions, make every brief meaningfully different. Pass the array through the \`rivet_variants\` \`briefs\` field or CLI \`--briefs <json>\`, and omit \`--count\` because the array length is authoritative. Human-direct CLI calls may omit the batch label and briefs and use Rivet's deterministic fallback.
78
91
 
79
92
  Existing app:
80
93
  1. \`rivet open --project <path> --caller-agent cursor --caller-model <model> --caller-session <id>\` → note \`editorUrl\`, \`sessionId\`, and \`resolvedRunner\`.
@@ -83,7 +96,7 @@ Existing app:
83
96
  4. The briefing file ends with the item's exact \`completeCommand\`: the worker runs \`rivet variants complete <workId> --project <path> --session <sessionId>\` itself as its final step, the moment its workspace is done. Completions are never held back or batched by the coordinator — and because workers self-report, the coordinator does NOT poll status while workers run: check \`rivet status\` once after workers return (or on a single ≥60s wakeup), only to confirm terminal states and surface failures. Rivet reads static HTML from \`workspace.entryPath\` and captures git-worktree changes itself. Do not send inline HTML or repeat project context in the completion payload. If the result says \`requeuedForRegeneration\`, poll status for the renewed lease, address its QA summary, and complete that item once more. If a worker cannot complete it, use \`--status failed --error <message>\`.
84
97
  5. Show the user the \`editorUrl\` to compare directions; \`rivet variants commit <variantId> --project <path>\` when they pick one.
85
98
 
86
- Fresh 0-to-1 (the fast path — go straight to the start call): create or use an empty directory, run \`rivet open --project <path> ...\`, then IMMEDIATELY run \`rivet variants start --project <path> --fresh --instruction "build a SaaS landing page" --count 3 ...\` with the user's references passed raw. OMIT \`--briefs\` and \`--run-label\`: Rivet authors the directions server-side, and every second you spend reading references or writing briefs delays the build. Pass local reference images via \`--context-images '["/abs/path.png"]'\` (\`rivet_variants\` \`contextImages\`) — Rivet copies them into the run context and every worker views them natively. Pass reference page URLs via \`--reference-pages '["https://example.com"]'\` (\`referencePages\`) — Rivet renders each page server-side for design evidence + a screenshot; never capture evidence or screenshot pages yourself. Pass local reference videos via \`--reference-videos '["/abs/clip.mp4"]'\` (\`referenceVideos\`) — Rivet samples keyframes server-side; never run ffmpeg yourself. Never substitute a prose description of media you can pass directly.
99
+ Fresh 0-to-1: create or use an empty directory and run \`rivet open --project <path> ...\`. Resolve the selected saved instructions with \`rivet context resolve\`, then author a batch label and one distinct brief per direction from the user's request, supplied references, and saved instructions. Include concrete section, layout, typography, and interaction choices in each brief's notes. Run \`rivet variants start --project <path> --fresh --instruction "build a SaaS landing page" --run-label "Landing layouts" --briefs '<json>' ...\`, omitting \`--count\` because the briefs set the count. Rivet uses those briefs directly without a hosted planning call. Pass local reference images via \`--context-images '["/abs/path.png"]'\` (\`rivet_variants\` \`contextImages\`) — Rivet copies them into the run context and every worker views them natively. Pass reference page URLs via \`--reference-pages '["https://example.com"]'\` (\`referencePages\`) — Rivet renders each page server-side for design evidence + a screenshot; never capture evidence or screenshot pages yourself. Pass local reference videos via \`--reference-videos '["/abs/clip.mp4"]'\` (\`referenceVideos\`) — Rivet samples keyframes server-side; never run ffmpeg yourself. Never substitute a prose description of media you can pass directly.
87
100
 
88
101
  Vary an existing direction: after status/list gives you \`sessionId\` and \`variantId\`, author a batch label and two distinct delta briefs by default, then run \`rivet variants start --project <path> --target <sessionId>:<variantId> --instruction "make this calmer" --run-label "Calmer direction" --briefs '<json>' ...\`. Include \`--files '["src/known-target.tsx"]'\` when the relevant files are already known. Explicit briefs/counts remain authoritative.
89
102
 
@@ -1 +1 @@
1
- {"version":3,"file":"cli-guidance.js","sourceRoot":"","sources":["../../../src/utils/skills/cli-guidance.ts"],"names":[],"mappings":";;;AAAA,oDAAwD;AAE3C,QAAA,oBAAoB,GAAG,EAAE,CAAC;AAEvC,MAAM,cAAc,GAAG,IAAA,oCAAoB,GAAE,CAAC;AAEjC,QAAA,iBAAiB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+UAsE8S,cAAc;;;;;;;;;;;;;;;ieAeoI,CAAC;AAErd,QAAA,wBAAwB,GACnC,4EAA4E,CAAC"}
1
+ {"version":3,"file":"cli-guidance.js","sourceRoot":"","sources":["../../../src/utils/skills/cli-guidance.ts"],"names":[],"mappings":";;;AAAA,oDAAwD;AAE3C,QAAA,oBAAoB,GAAG,EAAE,CAAC;AAEvC,MAAM,cAAc,GAAG,IAAA,oCAAoB,GAAE,CAAC;AAEjC,QAAA,iBAAiB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;wRAmFuP,cAAc;;;;;;;;;;;;;;;ieAe2L,CAAC;AAErd,QAAA,wBAAwB,GACnC,4EAA4E,CAAC"}
@@ -1,3 +1,3 @@
1
1
  export declare const CODEX_SKILL_MARKER = "[//]: # (managed-by: rivet install codex)";
2
- export declare const CODEX_SKILL_CONTENT = "---\nname: rivet\ndescription: Open Rivet for the current project when asked or invoked as $rivet.\n---\n\n[//]: # (managed-by: rivet install codex)\n\n# Open Rivet\n\nOpen the current project when the user invokes `$rivet` alone. Use the current directory unless they specify another project.\n\nBefore the first Rivet command in this conversation, run `rivet version status` with the caller flags below. Report installed and published versions; if an update is available, run `rivet update` and report whether it caught up. Report check or update failures, then continue if the installed CLI works.\n\nRun the installed CLI as a standalone shell command:\n\n```sh\nrivet open --project \"<absolute project path>\" --caller-agent codex --caller-model \"<your actual model>\"\n```\n\nReplace the placeholders with the actual path and model. Include `--caller-session` when the current session ID is available. If another host invokes this skill, use its actual caller agent instead of codex.\n\nIn the local ChatGPT desktop app, run `rivet open --no-browser` with the project and caller flags when its in-app browser reaches localhost, then open the returned `data.editorUrl` (including its fragment) with the browser tool. Otherwise run `rivet open` without `--no-browser` to launch the system browser. To switch browsers later, open the existing URL in the requested browser without rerunning `rivet open`; clarify ambiguous terms such as \"native\". Attach to an already-running app with `--user-port <port>`.\n\nRead the returned JSON envelope. On success, share `data.editorUrl`; if browser navigation or launch failed, tell the user to open that link manually. On failure, explain the reported error and address its cause before retrying. If sign-in is required, use Rivet's available login tool or ask the user to run `rivet login` in their own terminal.\n\nRead `data.guidance` as the user's saved defaults for this conversation. Report `data.guidanceError` if context could not load. Before authoring direction briefs for later generations, run `rivet context resolve` and apply the returned text. A current explicit user request overrides those defaults. For a one-run exclusion, pass `--exclude-guidance '[\"<documentId>\"]'` to both resolve and variants start, or `--guidance off` to exclude all saved instructions. Keep fresh generation on its server-authored fast path. Rivet resolves saved instructions before planning each generation.\n\nOpening Rivet alone does not request variant generation. If the user also asks for design work, open Rivet first and then follow their request using the installed Rivet CLI guidance.\n";
2
+ export declare const CODEX_SKILL_CONTENT = "---\nname: rivet\ndescription: Open Rivet for the current project when asked or invoked as $rivet.\n---\n\n[//]: # (managed-by: rivet install codex)\n\n# Open Rivet\n\nOpen the current project when the user invokes `$rivet` alone. Use the current directory unless they specify another project.\n\nBefore the first Rivet command in this conversation, run `rivet version status` with the caller flags below. Report installed and published versions; if an update is available, run `rivet update` and report whether it caught up. Report check or update failures, then continue if the installed CLI works.\n\nRun the installed CLI as a standalone shell command:\n\n```sh\nrivet open --project \"<absolute project path>\" --caller-agent codex --caller-model \"<your actual model>\"\n```\n\nReplace the placeholders with the actual path and model. Include `--caller-session` when the current session ID is available. If another host invokes this skill, use its actual caller agent instead of codex.\n\nIn the local ChatGPT desktop app, run `rivet open --no-browser` with the project and caller flags when its in-app browser reaches localhost, then open the returned `data.editorUrl` (including its fragment) with the browser tool. Otherwise run `rivet open` without `--no-browser` to launch the system browser. To switch browsers later, open the existing URL in the requested browser without rerunning `rivet open`; clarify ambiguous terms such as \"native\". Attach to an already-running app with `--user-port <port>`.\n\nRead the returned JSON envelope. On success, share `data.editorUrl`; if browser navigation or launch failed, tell the user to open that link manually. On failure, explain the reported error and address its cause before retrying. If sign-in is required, use Rivet's available login tool or ask the user to run `rivet login` in their own terminal.\n\nRead `data.guidance` as the user's saved defaults for this conversation. Report `data.guidanceError` if context could not load. Before authoring direction briefs for later generations, run `rivet context resolve` and apply the returned text. A current explicit user request overrides those defaults. For a one-run exclusion, pass `--exclude-guidance '[\"<documentId>\"]'` to both resolve and variants start, or `--guidance off` to exclude all saved instructions. For every variants start, including fresh apps, author a batch label and one brief per direction, then pass them with `--run-label` and `--briefs`. Rivet delivers the selected saved instructions to workers without a direction-planning model call.\n\nOpening Rivet alone does not request variant generation. If the user also asks for design work, open Rivet first and then follow their request using the installed Rivet CLI guidance.\n";
3
3
  //# sourceMappingURL=codex-skill.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"codex-skill.d.ts","sourceRoot":"","sources":["../../../src/utils/skills/codex-skill.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,kBAAkB,8CAA8C,CAAC;AAE9E,eAAO,MAAM,mBAAmB,mlFA4B/B,CAAC"}
1
+ {"version":3,"file":"codex-skill.d.ts","sourceRoot":"","sources":["../../../src/utils/skills/codex-skill.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,kBAAkB,8CAA8C,CAAC;AAE9E,eAAO,MAAM,mBAAmB,+sFA4B/B,CAAC"}
@@ -27,7 +27,7 @@ In the local ChatGPT desktop app, run \`rivet open --no-browser\` with the proje
27
27
 
28
28
  Read the returned JSON envelope. On success, share \`data.editorUrl\`; if browser navigation or launch failed, tell the user to open that link manually. On failure, explain the reported error and address its cause before retrying. If sign-in is required, use Rivet's available login tool or ask the user to run \`rivet login\` in their own terminal.
29
29
 
30
- Read \`data.guidance\` as the user's saved defaults for this conversation. Report \`data.guidanceError\` if context could not load. Before authoring direction briefs for later generations, run \`rivet context resolve\` and apply the returned text. A current explicit user request overrides those defaults. For a one-run exclusion, pass \`--exclude-guidance '["<documentId>"]'\` to both resolve and variants start, or \`--guidance off\` to exclude all saved instructions. Keep fresh generation on its server-authored fast path. Rivet resolves saved instructions before planning each generation.
30
+ Read \`data.guidance\` as the user's saved defaults for this conversation. Report \`data.guidanceError\` if context could not load. Before authoring direction briefs for later generations, run \`rivet context resolve\` and apply the returned text. A current explicit user request overrides those defaults. For a one-run exclusion, pass \`--exclude-guidance '["<documentId>"]'\` to both resolve and variants start, or \`--guidance off\` to exclude all saved instructions. For every variants start, including fresh apps, author a batch label and one brief per direction, then pass them with \`--run-label\` and \`--briefs\`. Rivet delivers the selected saved instructions to workers without a direction-planning model call.
31
31
 
32
32
  Opening Rivet alone does not request variant generation. If the user also asks for design work, open Rivet first and then follow their request using the installed Rivet CLI guidance.
33
33
  `;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "rivet-design",
3
- "version": "0.22.0",
3
+ "version": "0.23.0",
4
4
  "description": "Local visual web development tool with AI-powered code modification",
5
5
  "main": "dist/index.js",
6
6
  "workspaces": [
@@ -109,7 +109,6 @@
109
109
  "@typescript-eslint/parser": "^8.44.0",
110
110
  "@vitejs/plugin-react": "^4.2.1",
111
111
  "autoprefixer": "^10.4.16",
112
- "csstype": "^3.2.2",
113
112
  "dockerfile-ast": "^0.7.1",
114
113
  "eslint": "^9.36.0",
115
114
  "eslint-config-prettier": "^10.1.8",
@@ -1,35 +1,35 @@
1
- var Be=s=>{throw TypeError(s)};var Ee=(s,t,r)=>t.has(s)||Be("Cannot "+r);var h=(s,t,r)=>(Ee(s,t,"read from private field"),r?r.call(s):t.get(s)),z=(s,t,r)=>t.has(s)?Be("Cannot add the same private member more than once"):t instanceof WeakSet?t.add(s):t.set(s,r),L=(s,t,r,i)=>(Ee(s,t,"write to private field"),i?i.call(s,r):t.set(s,r),r),A=(s,t,r)=>(Ee(s,t,"access private method"),r);import{S as lt,s as ct,h as Ve,g as Kt,n as fe,r as Qt,Q as dt,u as _e,a as Bt,b as Vt,c as d,e as Gt,d as Yt,f as Wt,i as ut,j as Ge,k as Jt,l as Xt,m as Zt,o as ce,p as me,q as es,t as e,B as J,v as Pe,P as ts,w as ss,x as rs,y as is,z as as,X as ht,D as mt,A as pt,C as xt,E as ft,F as bt,G as yt,H as gt,I as Ye,J as ns,K as os,L as ls,M as cs,N as ne,O as Se,R as ds,T as vt,U as ee,V as Y,W as x,Y as re,Z as H,_ as wt,$ as us,a0 as hs,a1 as ms,a2 as ps,a3 as xs,a4 as fs,a5 as bs,a6 as ys,a7 as B,a8 as gs,a9 as vs,aa as We,ab as ws,ac as js,ad as Ns,ae as ks,af as Ss,ag as jt,ah as _s,ai as Is,aj as Rs,ak as Cs,al as Es,am as Ps}from"./main-CdSzrhWD.js";var ie,ae,U,ye,se,pe,Te,nt,Ts=(nt=class extends lt{constructor(t,r){super();z(this,se);z(this,ie);z(this,ae);z(this,U);z(this,ye);L(this,ie,t),this.setOptions(r),this.bindMethods(),A(this,se,pe).call(this)}bindMethods(){this.mutate=this.mutate.bind(this),this.reset=this.reset.bind(this)}setOptions(t){var i;const r=this.options;this.options=h(this,ie).defaultMutationOptions(t),ct(this.options,r)||h(this,ie).getMutationCache().notify({type:"observerOptionsUpdated",mutation:h(this,U),observer:this}),r!=null&&r.mutationKey&&this.options.mutationKey&&Ve(r.mutationKey)!==Ve(this.options.mutationKey)?this.reset():((i=h(this,U))==null?void 0:i.state.status)==="pending"&&h(this,U).setOptions(this.options)}onSubscribe(){this.listeners.size===1&&h(this,U)&&(h(this,U).addObserver(this),A(this,se,pe).call(this))}onUnsubscribe(){var t;this.hasListeners()||(t=h(this,U))==null||t.removeObserver(this)}onMutationUpdate(t){A(this,se,pe).call(this),A(this,se,Te).call(this,t)}getCurrentResult(){return h(this,ae)}reset(){var t;(t=h(this,U))==null||t.removeObserver(this),L(this,U,void 0),A(this,se,pe).call(this),A(this,se,Te).call(this)}mutate(t,r){var i;return L(this,ye,r),(i=h(this,U))==null||i.removeObserver(this),L(this,U,h(this,ie).getMutationCache().build(h(this,ie),this.options)),h(this,U).addObserver(this),h(this,U).execute(t)}},ie=new WeakMap,ae=new WeakMap,U=new WeakMap,ye=new WeakMap,se=new WeakSet,pe=function(){var r;const t=((r=h(this,U))==null?void 0:r.state)??Kt();L(this,ae,{...t,isPending:t.status==="pending",isSuccess:t.status==="success",isError:t.status==="error",isIdle:t.status==="idle",mutate:this.mutate,reset:this.reset})},Te=function(t){fe.batch(()=>{var i,n,o,a;const r=h(this,ye);if(r&&this.hasListeners()){const l=h(this,ae).variables,m=h(this,ae).context,f={client:h(this,ie),meta:this.options.meta,mutationKey:this.options.mutationKey};if((t==null?void 0:t.type)==="success"){try{(i=r.onSuccess)==null||i.call(r,t.data,l,m,f)}catch(b){Promise.reject(b)}try{(n=r.onSettled)==null||n.call(r,t.data,null,l,m,f)}catch(b){Promise.reject(b)}}else if((t==null?void 0:t.type)==="error"){try{(o=r.onError)==null||o.call(r,t.error,l,m,f)}catch(b){Promise.reject(b)}try{(a=r.onSettled)==null||a.call(r,void 0,t.error,l,m,f)}catch(b){Promise.reject(b)}}}this.listeners.forEach(l=>{l(h(this,ae))})})},nt);function Je(s,t){const r=new Set(t);return s.filter(i=>!r.has(i))}var ue,Q,he,oe,G,le,ge,ve,we,je,O,Le,Oe,Nt,Me,Ae,De,ot,Ls=(ot=class extends lt{constructor(t,r,i){super();z(this,O);z(this,ue);z(this,Q);z(this,he);z(this,oe);z(this,G);z(this,le);z(this,ge);z(this,ve);z(this,we);z(this,je,[]);L(this,ue,t),L(this,oe,i),L(this,he,[]),L(this,G,[]),L(this,Q,[]),this.setQueries(r)}onSubscribe(){this.listeners.size===1&&h(this,G).forEach(t=>{t.subscribe(r=>{A(this,O,Ae).call(this,t,r)})})}onUnsubscribe(){this.listeners.size||this.destroy()}destroy(){this.listeners=new Set,h(this,G).forEach(t=>{t.destroy()})}setQueries(t,r){L(this,he,t),L(this,oe,r),fe.batch(()=>{const i=h(this,G),n=A(this,O,Me).call(this,h(this,he));n.forEach(p=>p.observer.setOptions(p.defaultedQueryOptions));const o=n.map(p=>p.observer),a=o.map(p=>p.getCurrentResult()),l=i.length!==o.length,m=o.some((p,j)=>p!==i[j]),f=l||m,b=f?!0:a.some((p,j)=>{const N=h(this,Q)[j];return!N||!ct(p,N)});!f&&!b||(f&&(L(this,je,n),L(this,G,o)),L(this,Q,a),this.hasListeners()&&(f&&(Je(i,o).forEach(p=>{p.destroy()}),Je(o,i).forEach(p=>{p.subscribe(j=>{A(this,O,Ae).call(this,p,j)})})),A(this,O,De).call(this)))})}getCurrentResult(){return h(this,Q)}getQueries(){return h(this,G).map(t=>t.getCurrentQuery())}getObservers(){return h(this,G)}getOptimisticResult(t,r){const i=A(this,O,Me).call(this,t),n=i.map(a=>a.observer.getOptimisticResult(a.defaultedQueryOptions)),o=i.map(a=>a.defaultedQueryOptions.queryHash);return[n,a=>A(this,O,Oe).call(this,a??n,r,o),()=>A(this,O,Le).call(this,n,i)]}},ue=new WeakMap,Q=new WeakMap,he=new WeakMap,oe=new WeakMap,G=new WeakMap,le=new WeakMap,ge=new WeakMap,ve=new WeakMap,we=new WeakMap,je=new WeakMap,O=new WeakSet,Le=function(t,r){const i=new Set;return r.map((n,o)=>{const a=t[o];return n.defaultedQueryOptions.notifyOnChangeProps?a:n.observer.trackResult(a,l=>{i.has(l)||(i.add(l),r.forEach(m=>{m.observer.trackProp(l)}))})})},Oe=function(t,r,i){if(r){const n=h(this,we),o=i!==void 0&&n!==void 0&&(n.length!==i.length||i.some((a,l)=>a!==n[l]));return(h(this,Q)!==h(this,ve)||o||r!==h(this,ge))&&(L(this,ge,r),L(this,ve,h(this,Q)),i!==void 0&&L(this,we,i),L(this,le,Qt(h(this,le),r(t)))),h(this,le)}return t},Nt=function(){var t;return!((t=h(this,oe))!=null&&t.combine)||h(this,G).some((r,i)=>{var n;return r.options.suspense&&((n=h(this,Q)[i])==null?void 0:n.data)===void 0})},Me=function(t){const r=new Map;h(this,G).forEach(n=>{const o=n.options.queryHash;if(!o)return;const a=r.get(o);a?a.push(n):r.set(o,[n])});const i=[];return t.forEach(n=>{var l;const o=h(this,ue).defaultQueryOptions(n),a=((l=r.get(o.queryHash))==null?void 0:l.shift())??new dt(h(this,ue),o);i.push({defaultedQueryOptions:o,observer:a})}),i},Ae=function(t,r){const i=h(this,G).indexOf(t);i!==-1&&(L(this,Q,h(this,Q).slice()),h(this,Q)[i]=r,A(this,O,De).call(this))},De=function(){var t;if(this.hasListeners()){const r=A(this,O,Nt).call(this),i=h(this,le),n=r?i:A(this,O,Oe).call(this,A(this,O,Le).call(this,h(this,Q),h(this,je)),(t=h(this,oe))==null?void 0:t.combine);(r||i!==n)&&fe.batch(()=>{this.listeners.forEach(o=>{o(h(this,Q))})})}},ot);function Os({queries:s,...t},r){const i=_e(),n=Bt(),o=Vt(),a=t.subscribed!==!1,l=d.useMemo(()=>s.map(S=>{const y=i.defaultQueryOptions(S);return y._optimisticResults=n?"isRestoring":a?"optimistic":void 0,y}),[s,i,n,a]);l.forEach(S=>{Gt(S);const y=i.getQueryCache().get(S.queryHash);Yt(S,o,y)}),Wt(o);const[m]=d.useState(()=>new Ls(i,l,t)),[f,b,p]=m.getOptimisticResult(l,t.combine),j=!n&&a;d.useSyncExternalStore(d.useCallback(S=>j?m.subscribe(fe.batchCalls(S)):ut,[m,j]),()=>m.getCurrentResult(),()=>m.getCurrentResult()),d.useEffect(()=>{m.setQueries(l,t)},[l,t,m]);const N=f.some((S,y)=>Ge(l[y],S))?f.flatMap((S,y)=>{const k=l[y];if(k&&Ge(k,S)){const $=new dt(i,k);return Jt(k,$,o)}return[]}):[];if(N.length>0)throw Promise.all(N);const R=f.find((S,y)=>{const k=l[y];return k&&Xt({result:S,errorResetBoundary:o,throwOnError:k.throwOnError,query:i.getQueryCache().get(k.queryHash),suspense:k.suspense})});if(R)throw R.error;return b(p())}function xe(s,t){const r=_e(),[i]=d.useState(()=>new Ts(r,s));d.useEffect(()=>{i.setOptions(s)},[i,s]);const n=d.useSyncExternalStore(d.useCallback(a=>i.subscribe(fe.batchCalls(a)),[i]),()=>i.getCurrentResult(),()=>i.getCurrentResult()),o=d.useCallback((...a)=>{i.mutate(a[0],a[1]).catch(ut)},[i]);if(n.error&&Zt(i.options.throwOnError,[n.error]))throw n.error;return{...n,mutate:o,mutateAsync:n.mutate}}/**
2
- * @license lucide-react v1.60.0 - ISC
1
+ var Be=s=>{throw TypeError(s)};var Ee=(s,t,r)=>t.has(s)||Be("Cannot "+r);var h=(s,t,r)=>(Ee(s,t,"read from private field"),r?r.call(s):t.get(s)),z=(s,t,r)=>t.has(s)?Be("Cannot add the same private member more than once"):t instanceof WeakSet?t.add(s):t.set(s,r),L=(s,t,r,i)=>(Ee(s,t,"write to private field"),i?i.call(s,r):t.set(s,r),r),A=(s,t,r)=>(Ee(s,t,"access private method"),r);import{S as lt,s as ct,h as Ve,g as Kt,n as fe,r as Qt,Q as dt,u as _e,a as Bt,b as Vt,c as d,e as Gt,d as Yt,f as Wt,i as ut,j as Ge,k as Jt,l as Xt,m as Zt,o as ce,p as me,q as es,t as e,B as J,v as Pe,P as ts,w as ss,x as rs,y as is,z as as,X as ht,D as mt,A as pt,C as xt,E as ft,F as bt,G as yt,H as gt,I as Ye,J as ns,K as os,L as ls,M as cs,N as ne,O as Se,R as ds,T as vt,U as ee,V as Y,W as x,Y as re,Z as H,_ as wt,$ as us,a0 as hs,a1 as ms,a2 as ps,a3 as xs,a4 as fs,a5 as bs,a6 as ys,a7 as B,a8 as gs,a9 as vs,aa as We,ab as ws,ac as js,ad as Ns,ae as ks,af as Ss,ag as jt,ah as _s,ai as Is,aj as Rs,ak as Cs,al as Es,am as Ps}from"./main-Dls3YqrM.js";var ie,ae,U,ye,se,pe,Te,nt,Ts=(nt=class extends lt{constructor(t,r){super();z(this,se);z(this,ie);z(this,ae);z(this,U);z(this,ye);L(this,ie,t),this.setOptions(r),this.bindMethods(),A(this,se,pe).call(this)}bindMethods(){this.mutate=this.mutate.bind(this),this.reset=this.reset.bind(this)}setOptions(t){var i;const r=this.options;this.options=h(this,ie).defaultMutationOptions(t),ct(this.options,r)||h(this,ie).getMutationCache().notify({type:"observerOptionsUpdated",mutation:h(this,U),observer:this}),r!=null&&r.mutationKey&&this.options.mutationKey&&Ve(r.mutationKey)!==Ve(this.options.mutationKey)?this.reset():((i=h(this,U))==null?void 0:i.state.status)==="pending"&&h(this,U).setOptions(this.options)}onSubscribe(){this.listeners.size===1&&h(this,U)&&(h(this,U).addObserver(this),A(this,se,pe).call(this))}onUnsubscribe(){var t;this.hasListeners()||(t=h(this,U))==null||t.removeObserver(this)}onMutationUpdate(t){A(this,se,pe).call(this),A(this,se,Te).call(this,t)}getCurrentResult(){return h(this,ae)}reset(){var t;(t=h(this,U))==null||t.removeObserver(this),L(this,U,void 0),A(this,se,pe).call(this),A(this,se,Te).call(this)}mutate(t,r){var i;return L(this,ye,r),(i=h(this,U))==null||i.removeObserver(this),L(this,U,h(this,ie).getMutationCache().build(h(this,ie),this.options)),h(this,U).addObserver(this),h(this,U).execute(t)}},ie=new WeakMap,ae=new WeakMap,U=new WeakMap,ye=new WeakMap,se=new WeakSet,pe=function(){var r;const t=((r=h(this,U))==null?void 0:r.state)??Kt();L(this,ae,{...t,isPending:t.status==="pending",isSuccess:t.status==="success",isError:t.status==="error",isIdle:t.status==="idle",mutate:this.mutate,reset:this.reset})},Te=function(t){fe.batch(()=>{var i,n,o,a;const r=h(this,ye);if(r&&this.hasListeners()){const l=h(this,ae).variables,m=h(this,ae).context,f={client:h(this,ie),meta:this.options.meta,mutationKey:this.options.mutationKey};if((t==null?void 0:t.type)==="success"){try{(i=r.onSuccess)==null||i.call(r,t.data,l,m,f)}catch(b){Promise.reject(b)}try{(n=r.onSettled)==null||n.call(r,t.data,null,l,m,f)}catch(b){Promise.reject(b)}}else if((t==null?void 0:t.type)==="error"){try{(o=r.onError)==null||o.call(r,t.error,l,m,f)}catch(b){Promise.reject(b)}try{(a=r.onSettled)==null||a.call(r,void 0,t.error,l,m,f)}catch(b){Promise.reject(b)}}}this.listeners.forEach(l=>{l(h(this,ae))})})},nt);function Je(s,t){const r=new Set(t);return s.filter(i=>!r.has(i))}var ue,Q,he,oe,G,le,ge,ve,we,je,O,Le,Oe,Nt,Me,Ae,De,ot,Ls=(ot=class extends lt{constructor(t,r,i){super();z(this,O);z(this,ue);z(this,Q);z(this,he);z(this,oe);z(this,G);z(this,le);z(this,ge);z(this,ve);z(this,we);z(this,je,[]);L(this,ue,t),L(this,oe,i),L(this,he,[]),L(this,G,[]),L(this,Q,[]),this.setQueries(r)}onSubscribe(){this.listeners.size===1&&h(this,G).forEach(t=>{t.subscribe(r=>{A(this,O,Ae).call(this,t,r)})})}onUnsubscribe(){this.listeners.size||this.destroy()}destroy(){this.listeners=new Set,h(this,G).forEach(t=>{t.destroy()})}setQueries(t,r){L(this,he,t),L(this,oe,r),fe.batch(()=>{const i=h(this,G),n=A(this,O,Me).call(this,h(this,he));n.forEach(p=>p.observer.setOptions(p.defaultedQueryOptions));const o=n.map(p=>p.observer),a=o.map(p=>p.getCurrentResult()),l=i.length!==o.length,m=o.some((p,j)=>p!==i[j]),f=l||m,b=f?!0:a.some((p,j)=>{const N=h(this,Q)[j];return!N||!ct(p,N)});!f&&!b||(f&&(L(this,je,n),L(this,G,o)),L(this,Q,a),this.hasListeners()&&(f&&(Je(i,o).forEach(p=>{p.destroy()}),Je(o,i).forEach(p=>{p.subscribe(j=>{A(this,O,Ae).call(this,p,j)})})),A(this,O,De).call(this)))})}getCurrentResult(){return h(this,Q)}getQueries(){return h(this,G).map(t=>t.getCurrentQuery())}getObservers(){return h(this,G)}getOptimisticResult(t,r){const i=A(this,O,Me).call(this,t),n=i.map(a=>a.observer.getOptimisticResult(a.defaultedQueryOptions)),o=i.map(a=>a.defaultedQueryOptions.queryHash);return[n,a=>A(this,O,Oe).call(this,a??n,r,o),()=>A(this,O,Le).call(this,n,i)]}},ue=new WeakMap,Q=new WeakMap,he=new WeakMap,oe=new WeakMap,G=new WeakMap,le=new WeakMap,ge=new WeakMap,ve=new WeakMap,we=new WeakMap,je=new WeakMap,O=new WeakSet,Le=function(t,r){const i=new Set;return r.map((n,o)=>{const a=t[o];return n.defaultedQueryOptions.notifyOnChangeProps?a:n.observer.trackResult(a,l=>{i.has(l)||(i.add(l),r.forEach(m=>{m.observer.trackProp(l)}))})})},Oe=function(t,r,i){if(r){const n=h(this,we),o=i!==void 0&&n!==void 0&&(n.length!==i.length||i.some((a,l)=>a!==n[l]));return(h(this,Q)!==h(this,ve)||o||r!==h(this,ge))&&(L(this,ge,r),L(this,ve,h(this,Q)),i!==void 0&&L(this,we,i),L(this,le,Qt(h(this,le),r(t)))),h(this,le)}return t},Nt=function(){var t;return!((t=h(this,oe))!=null&&t.combine)||h(this,G).some((r,i)=>{var n;return r.options.suspense&&((n=h(this,Q)[i])==null?void 0:n.data)===void 0})},Me=function(t){const r=new Map;h(this,G).forEach(n=>{const o=n.options.queryHash;if(!o)return;const a=r.get(o);a?a.push(n):r.set(o,[n])});const i=[];return t.forEach(n=>{var l;const o=h(this,ue).defaultQueryOptions(n),a=((l=r.get(o.queryHash))==null?void 0:l.shift())??new dt(h(this,ue),o);i.push({defaultedQueryOptions:o,observer:a})}),i},Ae=function(t,r){const i=h(this,G).indexOf(t);i!==-1&&(L(this,Q,h(this,Q).slice()),h(this,Q)[i]=r,A(this,O,De).call(this))},De=function(){var t;if(this.hasListeners()){const r=A(this,O,Nt).call(this),i=h(this,le),n=r?i:A(this,O,Oe).call(this,A(this,O,Le).call(this,h(this,Q),h(this,je)),(t=h(this,oe))==null?void 0:t.combine);(r||i!==n)&&fe.batch(()=>{this.listeners.forEach(o=>{o(h(this,Q))})})}},ot);function Os({queries:s,...t},r){const i=_e(),n=Bt(),o=Vt(),a=t.subscribed!==!1,l=d.useMemo(()=>s.map(S=>{const y=i.defaultQueryOptions(S);return y._optimisticResults=n?"isRestoring":a?"optimistic":void 0,y}),[s,i,n,a]);l.forEach(S=>{Gt(S);const y=i.getQueryCache().get(S.queryHash);Yt(S,o,y)}),Wt(o);const[m]=d.useState(()=>new Ls(i,l,t)),[f,b,p]=m.getOptimisticResult(l,t.combine),j=!n&&a;d.useSyncExternalStore(d.useCallback(S=>j?m.subscribe(fe.batchCalls(S)):ut,[m,j]),()=>m.getCurrentResult(),()=>m.getCurrentResult()),d.useEffect(()=>{m.setQueries(l,t)},[l,t,m]);const N=f.some((S,y)=>Ge(l[y],S))?f.flatMap((S,y)=>{const k=l[y];if(k&&Ge(k,S)){const $=new dt(i,k);return Jt(k,$,o)}return[]}):[];if(N.length>0)throw Promise.all(N);const R=f.find((S,y)=>{const k=l[y];return k&&Xt({result:S,errorResetBoundary:o,throwOnError:k.throwOnError,query:i.getQueryCache().get(k.queryHash),suspense:k.suspense})});if(R)throw R.error;return b(p())}function xe(s,t){const r=_e(),[i]=d.useState(()=>new Ts(r,s));d.useEffect(()=>{i.setOptions(s)},[i,s]);const n=d.useSyncExternalStore(d.useCallback(a=>i.subscribe(fe.batchCalls(a)),[i]),()=>i.getCurrentResult(),()=>i.getCurrentResult()),o=d.useCallback((...a)=>{i.mutate(a[0],a[1]).catch(ut)},[i]);if(n.error&&Zt(i.options.throwOnError,[n.error]))throw n.error;return{...n,mutate:o,mutateAsync:n.mutate}}/**
2
+ * @license lucide-react v1.61.0 - ISC
3
3
  *
4
4
  * This source code is licensed under the ISC license.
5
5
  * See the LICENSE file in the root directory of this source tree.
6
6
  */const kt={name:"arrow-up-right",size:24,node:[["path",{d:"M7 7h10v10",key:"1tivn9"}],["path",{d:"M7 17 17 7",key:"1vkiza"}]]};kt.node;const St=ce(kt);/**
7
- * @license lucide-react v1.60.0 - ISC
7
+ * @license lucide-react v1.61.0 - ISC
8
8
  *
9
9
  * This source code is licensed under the ISC license.
10
10
  * See the LICENSE file in the root directory of this source tree.
11
11
  */const _t={name:"clipboard-copy",size:24,node:[["rect",{width:"8",height:"4",x:"8",y:"2",rx:"1",ry:"1",key:"tgr4d6"}],["path",{d:"M8 4H6a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2v-2",key:"4jdomd"}],["path",{d:"M16 4h2a2 2 0 0 1 2 2v4",key:"3hqy98"}],["path",{d:"M21 14H11",key:"1bme5i"}],["path",{d:"m15 10-4 4 4 4",key:"5dvupr"}]]};_t.node;const Ms=ce(_t);/**
12
- * @license lucide-react v1.60.0 - ISC
12
+ * @license lucide-react v1.61.0 - ISC
13
13
  *
14
14
  * This source code is licensed under the ISC license.
15
15
  * See the LICENSE file in the root directory of this source tree.
16
16
  */const It={name:"ellipsis",size:24,node:[["circle",{cx:"12",cy:"12",r:"1",key:"41hilf"}],["circle",{cx:"19",cy:"12",r:"1",key:"1wjl8i"}],["circle",{cx:"5",cy:"12",r:"1",key:"1pcz8c"}]],aliases:["more-horizontal"]};It.node;const As=ce(It);/**
17
- * @license lucide-react v1.60.0 - ISC
17
+ * @license lucide-react v1.61.0 - ISC
18
18
  *
19
19
  * This source code is licensed under the ISC license.
20
20
  * See the LICENSE file in the root directory of this source tree.
21
21
  */const Rt={name:"folder-open",size:24,node:[["path",{d:"m6 14 1.5-2.9A2 2 0 0 1 9.24 10H20a2 2 0 0 1 1.94 2.5l-1.54 6a2 2 0 0 1-1.95 1.5H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h3.9a2 2 0 0 1 1.69.9l.81 1.2a2 2 0 0 0 1.67.9H18a2 2 0 0 1 2 2v2",key:"usdka0"}]]};Rt.node;const Xe=ce(Rt);/**
22
- * @license lucide-react v1.60.0 - ISC
22
+ * @license lucide-react v1.61.0 - ISC
23
23
  *
24
24
  * This source code is licensed under the ISC license.
25
25
  * See the LICENSE file in the root directory of this source tree.
26
26
  */const Ct={name:"image-off",size:24,node:[["line",{x1:"2",x2:"22",y1:"2",y2:"22",key:"a6p6uj"}],["path",{d:"M10.41 10.41a2 2 0 1 1-2.83-2.83",key:"1bzlo9"}],["line",{x1:"13.5",x2:"6",y1:"13.5",y2:"21",key:"1q0aeu"}],["line",{x1:"18",x2:"21",y1:"12",y2:"15",key:"5mozeu"}],["path",{d:"M3.59 3.59A1.99 1.99 0 0 0 3 5v14a2 2 0 0 0 2 2h14c.55 0 1.052-.22 1.41-.59",key:"mmje98"}],["path",{d:"M21 15V5a2 2 0 0 0-2-2H9",key:"43el77"}]]};Ct.node;const Ds=ce(Ct);/**
27
- * @license lucide-react v1.60.0 - ISC
27
+ * @license lucide-react v1.61.0 - ISC
28
28
  *
29
29
  * This source code is licensed under the ISC license.
30
30
  * See the LICENSE file in the root directory of this source tree.
31
31
  */const Et={name:"images",size:24,node:[["path",{d:"m22 11-1.296-1.296a2.4 2.4 0 0 0-3.408 0L11 16",key:"9kzy35"}],["path",{d:"M4 8a2 2 0 0 0-2 2v10a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2",key:"1t0f0t"}],["circle",{cx:"13",cy:"7",r:"1",fill:"currentColor",key:"1obus6"}],["rect",{x:"8",y:"2",width:"14",height:"14",rx:"2",key:"1gvhby"}]]};Et.node;const qs=ce(Et);/**
32
- * @license lucide-react v1.60.0 - ISC
32
+ * @license lucide-react v1.61.0 - ISC
33
33
  *
34
34
  * This source code is licensed under the ISC license.
35
35
  * See the LICENSE file in the root directory of this source tree.
@@ -0,0 +1 @@
1
+ .la-scene{overflow:hidden;isolation:isolate;background:radial-gradient(130% 120% at 50% 42%,#fff 60%,#f0efec)}.la-obj{position:absolute;top:0;left:0;transform-origin:50% 50%;will-change:transform,opacity,filter;-webkit-user-select:none;user-select:none;pointer-events:none}.la-obj img{display:block;width:100%;height:auto;filter:drop-shadow(0 10px 12px rgba(40,33,28,.22)) drop-shadow(0 2px 3px rgba(40,33,28,.18))}.la-logo-stage{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);pointer-events:none}.la-mark{position:absolute;top:0;left:0;width:100%;height:100%}/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-space-y-reverse:0;--tw-divide-y-reverse:0;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-duration:initial;--tw-ease:initial;--tw-scale-x:1;--tw-scale-y:1;--tw-scale-z:1}}}@layer theme{:root,:host{--font-sans:-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--color-red-200:oklch(88.5% .062 18.334);--color-red-300:oklch(80.8% .114 19.571);--color-red-500:oklch(63.7% .237 25.331);--color-orange-400:oklch(75% .183 55.934);--color-orange-500:oklch(70.5% .213 47.604);--color-amber-200:oklch(92.4% .12 95.746);--color-emerald-500:oklch(69.6% .17 162.48);--color-sky-400:oklch(74.6% .16 232.661);--color-neutral-900:oklch(20.5% 0 none);--color-black:#000;--color-white:#fff;--spacing:.25rem;--container-xs:20rem;--container-sm:24rem;--container-md:28rem;--container-2xl:42rem;--container-3xl:48rem;--container-5xl:64rem;--container-6xl:72rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--text-base:1rem;--text-base--line-height: 1.5 ;--text-lg:1.125rem;--text-lg--line-height:calc(1.75 / 1.125);--text-xl:1.25rem;--text-xl--line-height:calc(1.75 / 1.25);--text-2xl:1.5rem;--text-2xl--line-height:calc(2 / 1.5);--text-3xl:1.875rem;--text-3xl--line-height: 1.2 ;--text-4xl:2.25rem;--text-4xl--line-height:calc(2.5 / 2.25);--font-weight-medium:500;--font-weight-semibold:600;--tracking-tight:-.025em;--tracking-wide:.025em;--leading-snug:1.375;--leading-relaxed:1.625;--radius-md:.375rem;--radius-lg:.5rem;--radius-xl:.75rem;--radius-2xl:1rem;--radius-3xl:1.5rem;--ease-out:cubic-bezier(0, 0, .2, 1);--ease-in-out:cubic-bezier(.4, 0, .2, 1);--animate-spin:spin 1s linear infinite;--animate-pulse:pulse 2s cubic-bezier(.4, 0, .6, 1) infinite;--aspect-video:16 / 9;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;-moz-tab-size:4;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;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]){-webkit-appearance:button;-moz-appearance:button;appearance:button}::file-selector-button{-webkit-appearance:button;-moz-appearance:button;appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}*,:after,:before{border-color:var(--color-main-border,#232328)}}@layer components;@layer utilities{.pointer-events-auto{pointer-events:auto}.pointer-events-none{pointer-events:none}.collapse{visibility:collapse}.invisible{visibility:hidden}.visible{visibility:visible}.sr-only{clip-path:inset(50%);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.sticky{position:sticky}.inset-0{top:0;right:0;bottom:0;left:0}.inset-px{top:1px;right:1px;bottom:1px;left:1px}.inset-x-0{inset-inline:0}.inset-y-0{inset-block:0}.top-0{top:0}.top-1\.5{top:calc(var(--spacing) * 1.5)}.top-1\/2{top:50%}.top-2{top:calc(var(--spacing) * 2)}.top-5{top:calc(var(--spacing) * 5)}.right-0{right:0}.right-1{right:var(--spacing)}.right-2{right:calc(var(--spacing) * 2)}.bottom-0{bottom:0}.left-0{left:0}.left-1{left:var(--spacing)}.left-1\/2{left:50%}.left-2{left:calc(var(--spacing) * 2)}.left-5{left:calc(var(--spacing) * 5)}.isolate{isolation:isolate}.z-0{z-index:0}.z-10{z-index:10}.z-20{z-index:20}.z-30{z-index:30}.z-40{z-index:40}.z-50{z-index:50}.z-\[60\]{z-index:60}.z-\[70\]{z-index:70}.z-\[100\]{z-index:100}.z-content{z-index:10}.z-max{z-index:999999}.z-modal{z-index:30}.z-tooltip{z-index:70}.z-ui-primary{z-index:50}.z-ui-secondary{z-index:40}.order-first{order:-9999}.col-span-2{grid-column:span 2/span 2}.col-span-full{grid-column:1/-1}.col-start-1{grid-column-start:1}.col-start-2{grid-column-start:2}.row-span-2{grid-row:span 2/span 2}.row-start-1{grid-row-start:1}.row-start-2{grid-row-start:2}.container{width:100%}@media(min-width:40rem){.container{max-width:40rem}}@media(min-width:48rem){.container{max-width:48rem}}@media(min-width:64rem){.container{max-width:64rem}}@media(min-width:80rem){.container{max-width:80rem}}@media(min-width:96rem){.container{max-width:96rem}}.-m-2{margin:calc(var(--spacing) * -2)}.m-auto{margin:auto}.-mx-2{margin-inline:calc(var(--spacing) * -2)}.mx-auto{margin-inline:auto}.mt-0\.5{margin-top:calc(var(--spacing) * .5)}.mt-1{margin-top:var(--spacing)}.mt-1\.5{margin-top:calc(var(--spacing) * 1.5)}.mt-2{margin-top:calc(var(--spacing) * 2)}.mt-3{margin-top:calc(var(--spacing) * 3)}.mt-4{margin-top:calc(var(--spacing) * 4)}.mt-5{margin-top:calc(var(--spacing) * 5)}.mt-6{margin-top:calc(var(--spacing) * 6)}.mt-7{margin-top:calc(var(--spacing) * 7)}.mr-1{margin-right:var(--spacing)}.mb-2{margin-bottom:calc(var(--spacing) * 2)}.mb-3{margin-bottom:calc(var(--spacing) * 3)}.mb-4{margin-bottom:calc(var(--spacing) * 4)}.mb-5{margin-bottom:calc(var(--spacing) * 5)}.mb-6{margin-bottom:calc(var(--spacing) * 6)}.mb-7{margin-bottom:calc(var(--spacing) * 7)}.mb-9{margin-bottom:calc(var(--spacing) * 9)}.ml-3{margin-left:calc(var(--spacing) * 3)}.scrollbar-hide{-ms-overflow-style:none;scrollbar-width:none}.scrollbar-hide::-webkit-scrollbar{display:none}.line-clamp-2{-webkit-line-clamp:2;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.line-clamp-3{-webkit-line-clamp:3;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.block{display:block}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-flex{display:inline-flex}.inline-grid{display:inline-grid}.table{display:table}.aspect-\[4\/3\]{aspect-ratio:4/3}.aspect-video{aspect-ratio:var(--aspect-video)}.h-0\.5{height:calc(var(--spacing) * .5)}.h-1{height:var(--spacing)}.h-2\.5{height:calc(var(--spacing) * 2.5)}.h-3{height:calc(var(--spacing) * 3)}.h-3\.5{height:calc(var(--spacing) * 3.5)}.h-4{height:calc(var(--spacing) * 4)}.h-5{height:calc(var(--spacing) * 5)}.h-6{height:calc(var(--spacing) * 6)}.h-7{height:calc(var(--spacing) * 7)}.h-8{height:calc(var(--spacing) * 8)}.h-9{height:calc(var(--spacing) * 9)}.h-10{height:calc(var(--spacing) * 10)}.h-11{height:calc(var(--spacing) * 11)}.h-14{height:calc(var(--spacing) * 14)}.h-16{height:calc(var(--spacing) * 16)}.h-44{height:calc(var(--spacing) * 44)}.h-56{height:calc(var(--spacing) * 56)}.h-auto{height:auto}.h-full{height:100%}.h-px{height:1px}.h-screen{height:100vh}.max-h-40{max-height:calc(var(--spacing) * 40)}.max-h-60{max-height:calc(var(--spacing) * 60)}.max-h-64{max-height:calc(var(--spacing) * 64)}.max-h-\[65vh\]{max-height:65vh}.max-h-\[min\(680px\,calc\(100vh-32px\)\)\]{max-height:min(680px,100vh - 32px)}.min-h-0{min-height:0}.min-h-8{min-height:calc(var(--spacing) * 8)}.min-h-32{min-height:calc(var(--spacing) * 32)}.min-h-44{min-height:calc(var(--spacing) * 44)}.min-h-72{min-height:calc(var(--spacing) * 72)}.min-h-80{min-height:calc(var(--spacing) * 80)}.min-h-\[64px\]{min-height:64px}.min-h-screen{min-height:100vh}.w-0\.5{width:calc(var(--spacing) * .5)}.w-1{width:var(--spacing)}.w-2{width:calc(var(--spacing) * 2)}.w-3{width:calc(var(--spacing) * 3)}.w-3\.5{width:calc(var(--spacing) * 3.5)}.w-4{width:calc(var(--spacing) * 4)}.w-5{width:calc(var(--spacing) * 5)}.w-6{width:calc(var(--spacing) * 6)}.w-7{width:calc(var(--spacing) * 7)}.w-8{width:calc(var(--spacing) * 8)}.w-9{width:calc(var(--spacing) * 9)}.w-11{width:calc(var(--spacing) * 11)}.w-12{width:calc(var(--spacing) * 12)}.w-16{width:calc(var(--spacing) * 16)}.w-24{width:calc(var(--spacing) * 24)}.w-28{width:calc(var(--spacing) * 28)}.w-64{width:calc(var(--spacing) * 64)}.w-72{width:calc(var(--spacing) * 72)}.w-\[360px\]{width:360px}.w-\[440px\]{width:440px}.w-\[calc\(100\%\+1rem\)\]{width:calc(100% + 1rem)}.w-\[calc\(100\%-2rem\)\]{width:calc(100% - 2rem)}.w-\[min\(440px\,calc\(100vw-32px\)\)\]{width:min(440px,100vw - 32px)}.w-auto{width:auto}.w-full{width:100%}.w-px{width:1px}.max-w-2xl{max-width:var(--container-2xl)}.max-w-3xl{max-width:var(--container-3xl)}.max-w-5xl{max-width:var(--container-5xl)}.max-w-6xl{max-width:var(--container-6xl)}.max-w-40{max-width:calc(var(--spacing) * 40)}.max-w-60{max-width:calc(var(--spacing) * 60)}.max-w-64{max-width:calc(var(--spacing) * 64)}.max-w-\[8rem\]{max-width:8rem}.max-w-\[14rem\]{max-width:14rem}.max-w-full{max-width:100%}.max-w-md{max-width:var(--container-md)}.max-w-sm{max-width:var(--container-sm)}.max-w-xs{max-width:var(--container-xs)}.min-w-0{min-width:0}.min-w-44{min-width:calc(var(--spacing) * 44)}.min-w-\[140px\]{min-width:140px}.min-w-\[160px\]{min-width:160px}.min-w-\[180px\]{min-width:180px}.flex-1{flex:1}.flex-none{flex:none}.flex-shrink-0,.shrink-0{flex-shrink:0}.grow{flex-grow:1}.-translate-x-1\/2{--tw-translate-x: -50% ;translate:var(--tw-translate-x) var(--tw-translate-y)}.-translate-y-1\/2{--tw-translate-y: -50% ;translate:var(--tw-translate-x) var(--tw-translate-y)}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.animate-pulse{animation:var(--animate-pulse)}.animate-spin{animation:var(--animate-spin)}.cursor-auto{cursor:auto}.cursor-col-resize{cursor:col-resize}.cursor-default{cursor:default}.cursor-grab{cursor:grab}.cursor-grabbing{cursor:grabbing}.cursor-pointer{cursor:pointer}.cursor-text{cursor:text}.touch-none{touch-action:none}.resize{resize:both}.resize-none{resize:none}.\[scrollbar-gutter\:stable\]{scrollbar-gutter:stable}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-\[auto_minmax\(0\,1fr\)\]{grid-template-columns:auto minmax(0,1fr)}.grid-cols-\[minmax\(140px\,1fr\)_minmax\(110px\,auto\)_minmax\(220px\,2fr\)\]{grid-template-columns:minmax(140px,1fr) minmax(110px,auto) minmax(220px,2fr)}.grid-rows-subgrid{grid-template-rows:subgrid}.flex-col{flex-direction:column}.flex-row{flex-direction:row}.flex-nowrap{flex-wrap:nowrap}.flex-wrap{flex-wrap:wrap}.place-items-center{place-items:center}.items-center{align-items:center}.items-start{align-items:flex-start}.items-stretch{align-items:stretch}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.gap-0\.5{gap:calc(var(--spacing) * .5)}.gap-1{gap:var(--spacing)}.gap-1\.5{gap:calc(var(--spacing) * 1.5)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-2\.5{gap:calc(var(--spacing) * 2.5)}.gap-3{gap:calc(var(--spacing) * 3)}.gap-4{gap:calc(var(--spacing) * 4)}.gap-5{gap:calc(var(--spacing) * 5)}.gap-6{gap:calc(var(--spacing) * 6)}.gap-8{gap:calc(var(--spacing) * 8)}.gap-10{gap:calc(var(--spacing) * 10)}.gap-\[inherit\]{gap:inherit}:where(.space-y-0\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * .5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * .5) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-1>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(var(--spacing) * var(--tw-space-y-reverse));margin-block-end:calc(var(--spacing) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-2>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 2) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 2) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-4>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 4) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 4) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-6>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 6) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 6) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-7>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 7) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 7) * calc(1 - var(--tw-space-y-reverse)))}.gap-x-3{column-gap:calc(var(--spacing) * 3)}.gap-x-5{column-gap:calc(var(--spacing) * 5)}.gap-x-6{column-gap:calc(var(--spacing) * 6)}.gap-y-1{row-gap:var(--spacing)}.gap-y-8{row-gap:calc(var(--spacing) * 8)}:where(.divide-y>:not(:last-child)){--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(1px * var(--tw-divide-y-reverse));border-bottom-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)))}:where(.divide-border>:not(:last-child)){border-color:var(--border)}:where(.divide-main-border>:not(:last-child)){border-color:#232328}.self-center{align-self:center}.justify-self-end{justify-self:flex-end}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:var(--radius-2xl)}.rounded-3xl{border-radius:var(--radius-3xl)}.rounded-\[10px\]{border-radius:10px}.rounded-\[20px\]{border-radius:20px}.rounded-\[22px\]{border-radius:22px}.rounded-\[inherit\]{border-radius:inherit}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.rounded-xl{border-radius:var(--radius-xl)}.rounded-t-lg{border-top-left-radius:var(--radius-lg);border-top-right-radius:var(--radius-lg)}.rounded-l-md{border-top-left-radius:var(--radius-md);border-bottom-left-radius:var(--radius-md)}.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-0{border-style:var(--tw-border-style);border-width:0}.border-2{border-style:var(--tw-border-style);border-width:2px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-l{border-left-style:var(--tw-border-style);border-left-width:1px}.border-dashed{--tw-border-style:dashed;border-style:dashed}.border-none{--tw-border-style:none;border-style:none}.border-\[\#6B97FF\]{border-color:#6b97ff}.border-accent-success\/40{border-color:#10b98166}.border-accent-warning\/40{border-color:#f59e0b66}.border-accent\/40{border-color:var(--accent)}@supports (color:color-mix(in lab,red,red)){.border-accent\/40{border-color:color-mix(in oklab,var(--accent) 40%,transparent)}}.border-amber-200\/10{border-color:#fee6851a}@supports (color:color-mix(in lab,red,red)){.border-amber-200\/10{border-color:color-mix(in oklab,var(--color-amber-200) 10%,transparent)}}.border-black\/10{border-color:#0000001a}@supports (color:color-mix(in lab,red,red)){.border-black\/10{border-color:color-mix(in oklab,var(--color-black) 10%,transparent)}}.border-border{border-color:var(--border)}.border-content-muted\/30{border-color:#d1d5db4d}.border-content-muted\/40{border-color:#d1d5db66}.border-current{border-color:currentColor}.border-divider{border-color:#4b5563}.border-hover{border-color:var(--hover)}.border-main-border{border-color:#232328}.border-orange-400{border-color:var(--color-orange-400)}.border-primary\/40{border-color:#f306}.border-white\/10{border-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.border-white\/10{border-color:color-mix(in oklab,var(--color-white) 10%,transparent)}}.border-white\/15{border-color:#ffffff26}@supports (color:color-mix(in lab,red,red)){.border-white\/15{border-color:color-mix(in oklab,var(--color-white) 15%,transparent)}}.border-white\/20{border-color:#fff3}@supports (color:color-mix(in lab,red,red)){.border-white\/20{border-color:color-mix(in oklab,var(--color-white) 20%,transparent)}}.border-white\/35{border-color:#ffffff59}@supports (color:color-mix(in lab,red,red)){.border-white\/35{border-color:color-mix(in oklab,var(--color-white) 35%,transparent)}}.border-white\/\[0\.07\]{border-color:#ffffff12}@supports (color:color-mix(in lab,red,red)){.border-white\/\[0\.07\]{border-color:color-mix(in oklab,var(--color-white) 7%,transparent)}}.border-white\/\[0\.08\]{border-color:#ffffff14}@supports (color:color-mix(in lab,red,red)){.border-white\/\[0\.08\]{border-color:color-mix(in oklab,var(--color-white) 8%,transparent)}}.border-t-transparent{border-top-color:#0000}.bg-\[\#1c1c20\]{background-color:#1c1c20}.bg-\[\#111215\]{background-color:#111215}.bg-\[\#b1b1b1\]{background-color:#b1b1b1}.bg-\[var\(--btn-bg\)\]{background-color:var(--btn-bg)}.bg-accent{background-color:var(--accent)}.bg-accent-error{background-color:#ef4444}.bg-accent-success{background-color:#10b981}.bg-accent-success\/10{background-color:#10b9811a}.bg-accent-warning{background-color:#f59e0b}.bg-accent-warning\/10{background-color:#f59e0b1a}.bg-accent\/10{background-color:var(--accent)}@supports (color:color-mix(in lab,red,red)){.bg-accent\/10{background-color:color-mix(in oklab,var(--accent) 10%,transparent)}}.bg-accent\/20{background-color:var(--accent)}@supports (color:color-mix(in lab,red,red)){.bg-accent\/20{background-color:color-mix(in oklab,var(--accent) 20%,transparent)}}.bg-amber-200\/\[0\.03\]{background-color:#fee68508}@supports (color:color-mix(in lab,red,red)){.bg-amber-200\/\[0\.03\]{background-color:color-mix(in oklab,var(--color-amber-200) 3%,transparent)}}.bg-background{background-color:var(--background)}.bg-black\/40{background-color:#0006}@supports (color:color-mix(in lab,red,red)){.bg-black\/40{background-color:color-mix(in oklab,var(--color-black) 40%,transparent)}}.bg-black\/55{background-color:#0000008c}@supports (color:color-mix(in lab,red,red)){.bg-black\/55{background-color:color-mix(in oklab,var(--color-black) 55%,transparent)}}.bg-black\/60{background-color:#0009}@supports (color:color-mix(in lab,red,red)){.bg-black\/60{background-color:color-mix(in oklab,var(--color-black) 60%,transparent)}}.bg-border{background-color:var(--border)}.bg-card{background-color:var(--card)}.bg-content-muted{background-color:#d1d5db}.bg-current{background-color:currentColor}.bg-divider{background-color:#4b5563}.bg-foreground{background-color:var(--foreground)}.bg-hover{background-color:var(--hover)}.bg-input{background-color:var(--input)}.bg-main{background-color:#1c1c20}.bg-main-hover{background-color:#404040}.bg-main-input{background-color:#2e2e2e}.bg-main-input\/40{background-color:#2e2e2e66}.bg-main-light{background-color:#1e1e22}.bg-main\/90{background-color:#1c1c20e6}.bg-muted{background-color:var(--muted)}.bg-muted-foreground\/10{background-color:var(--muted-foreground)}@supports (color:color-mix(in lab,red,red)){.bg-muted-foreground\/10{background-color:color-mix(in oklab,var(--muted-foreground) 10%,transparent)}}.bg-muted-foreground\/15{background-color:var(--muted-foreground)}@supports (color:color-mix(in lab,red,red)){.bg-muted-foreground\/15{background-color:color-mix(in oklab,var(--muted-foreground) 15%,transparent)}}.bg-neutral-900{background-color:var(--color-neutral-900)}.bg-orange-500{background-color:var(--color-orange-500)}.bg-popover{background-color:var(--popover)}.bg-primary{background-color:#f30}.bg-primary\/10{background-color:#ff33001a}.bg-red-500\/10{background-color:#fb2c361a}@supports (color:color-mix(in lab,red,red)){.bg-red-500\/10{background-color:color-mix(in oklab,var(--color-red-500) 10%,transparent)}}.bg-red-500\/15{background-color:#fb2c3626}@supports (color:color-mix(in lab,red,red)){.bg-red-500\/15{background-color:color-mix(in oklab,var(--color-red-500) 15%,transparent)}}.bg-secondary{background-color:var(--secondary)}.bg-selected{background-color:var(--selected)}.bg-surface-1{background-color:var(--surface-1)}.bg-surface-2{background-color:var(--surface-2)}.bg-surface-3{background-color:var(--surface-3)}.bg-surface-4{background-color:var(--surface-4)}.bg-surface-5{background-color:var(--surface-5)}.bg-surface-6{background-color:var(--surface-6)}.bg-transparent{background-color:#0000}.bg-white{background-color:var(--color-white)}.bg-white\/5{background-color:#ffffff0d}@supports (color:color-mix(in lab,red,red)){.bg-white\/5{background-color:color-mix(in oklab,var(--color-white) 5%,transparent)}}.bg-white\/15{background-color:#ffffff26}@supports (color:color-mix(in lab,red,red)){.bg-white\/15{background-color:color-mix(in oklab,var(--color-white) 15%,transparent)}}.bg-white\/\[0\.02\]{background-color:#ffffff05}@supports (color:color-mix(in lab,red,red)){.bg-white\/\[0\.02\]{background-color:color-mix(in oklab,var(--color-white) 2%,transparent)}}.bg-white\/\[0\.03\]{background-color:#ffffff08}@supports (color:color-mix(in lab,red,red)){.bg-white\/\[0\.03\]{background-color:color-mix(in oklab,var(--color-white) 3%,transparent)}}.bg-white\/\[0\.04\]{background-color:#ffffff0a}@supports (color:color-mix(in lab,red,red)){.bg-white\/\[0\.04\]{background-color:color-mix(in oklab,var(--color-white) 4%,transparent)}}.bg-white\/\[0\.08\]{background-color:#ffffff14}@supports (color:color-mix(in lab,red,red)){.bg-white\/\[0\.08\]{background-color:color-mix(in oklab,var(--color-white) 8%,transparent)}}.bg-white\/\[0\.012\]{background-color:#ffffff03}@supports (color:color-mix(in lab,red,red)){.bg-white\/\[0\.012\]{background-color:color-mix(in oklab,var(--color-white) 1.2%,transparent)}}.bg-white\/\[0\.025\]{background-color:#ffffff06}@supports (color:color-mix(in lab,red,red)){.bg-white\/\[0\.025\]{background-color:color-mix(in oklab,var(--color-white) 2.5%,transparent)}}.bg-white\/\[0\.035\]{background-color:#ffffff09}@supports (color:color-mix(in lab,red,red)){.bg-white\/\[0\.035\]{background-color:color-mix(in oklab,var(--color-white) 3.5%,transparent)}}.object-contain{object-fit:contain}.object-cover{object-fit:cover}.object-top{object-position:top}.p-0{padding:0}.p-0\.5{padding:calc(var(--spacing) * .5)}.p-1{padding:var(--spacing)}.p-1\.5{padding:calc(var(--spacing) * 1.5)}.p-2{padding:calc(var(--spacing) * 2)}.p-3{padding:calc(var(--spacing) * 3)}.p-4{padding:calc(var(--spacing) * 4)}.p-5{padding:calc(var(--spacing) * 5)}.p-6{padding:calc(var(--spacing) * 6)}.p-8{padding:calc(var(--spacing) * 8)}.px-1{padding-inline:var(--spacing)}.px-1\.5{padding-inline:calc(var(--spacing) * 1.5)}.px-2{padding-inline:calc(var(--spacing) * 2)}.px-2\.5{padding-inline:calc(var(--spacing) * 2.5)}.px-3{padding-inline:calc(var(--spacing) * 3)}.px-3\.5{padding-inline:calc(var(--spacing) * 3.5)}.px-4{padding-inline:calc(var(--spacing) * 4)}.px-5{padding-inline:calc(var(--spacing) * 5)}.px-6{padding-inline:calc(var(--spacing) * 6)}.px-7{padding-inline:calc(var(--spacing) * 7)}.px-8{padding-inline:calc(var(--spacing) * 8)}.px-10{padding-inline:calc(var(--spacing) * 10)}.py-0\.5{padding-block:calc(var(--spacing) * .5)}.py-1{padding-block:var(--spacing)}.py-1\.5{padding-block:calc(var(--spacing) * 1.5)}.py-2{padding-block:calc(var(--spacing) * 2)}.py-2\.5{padding-block:calc(var(--spacing) * 2.5)}.py-3{padding-block:calc(var(--spacing) * 3)}.py-3\.5{padding-block:calc(var(--spacing) * 3.5)}.py-4{padding-block:calc(var(--spacing) * 4)}.py-5{padding-block:calc(var(--spacing) * 5)}.py-6{padding-block:calc(var(--spacing) * 6)}.py-8{padding-block:calc(var(--spacing) * 8)}.py-10{padding-block:calc(var(--spacing) * 10)}.pt-1{padding-top:var(--spacing)}.pt-2{padding-top:calc(var(--spacing) * 2)}.pt-3{padding-top:calc(var(--spacing) * 3)}.pt-5{padding-top:calc(var(--spacing) * 5)}.pt-8{padding-top:calc(var(--spacing) * 8)}.pr-1\.5{padding-right:calc(var(--spacing) * 1.5)}.pr-2{padding-right:calc(var(--spacing) * 2)}.pr-3{padding-right:calc(var(--spacing) * 3)}.pr-5{padding-right:calc(var(--spacing) * 5)}.pr-8{padding-right:calc(var(--spacing) * 8)}.pr-12{padding-right:calc(var(--spacing) * 12)}.pr-16{padding-right:calc(var(--spacing) * 16)}.pb-1{padding-bottom:var(--spacing)}.pb-2{padding-bottom:calc(var(--spacing) * 2)}.pb-3{padding-bottom:calc(var(--spacing) * 3)}.pb-8{padding-bottom:calc(var(--spacing) * 8)}.pb-10{padding-bottom:calc(var(--spacing) * 10)}.pb-12{padding-bottom:calc(var(--spacing) * 12)}.pb-14{padding-bottom:calc(var(--spacing) * 14)}.pb-\[14vh\]{padding-bottom:14vh}.pl-2{padding-left:calc(var(--spacing) * 2)}.pl-3{padding-left:calc(var(--spacing) * 3)}.pl-7{padding-left:calc(var(--spacing) * 7)}.pl-\[33px\]{padding-left:33px}.text-center{text-align:center}.text-left{text-align:left}.font-main{font-family:Satoshi,Inter,system-ui,-apple-system,Segoe UI,sans-serif}.font-mono{font-family:var(--font-mono)}.font-sans{font-family:var(--font-sans)}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.text-4xl{font-size:var(--text-4xl);line-height:var(--tw-leading,var(--text-4xl--line-height))}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\[9px\]{font-size:9px}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.text-\[12px\]{font-size:12px}.text-\[13px\]{font-size:13px}.leading-5{--tw-leading:calc(var(--spacing) * 5);line-height:calc(var(--spacing) * 5)}.leading-6{--tw-leading:calc(var(--spacing) * 6);line-height:calc(var(--spacing) * 6)}.leading-7{--tw-leading:calc(var(--spacing) * 7);line-height:calc(var(--spacing) * 7)}.leading-none{--tw-leading:1;line-height:1}.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-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-\[0\.14em\]{--tw-tracking:.14em;letter-spacing:.14em}.tracking-\[0\.16em\]{--tw-tracking:.16em;letter-spacing:.16em}.tracking-\[0\.18em\]{--tw-tracking:.18em;letter-spacing:.18em}.tracking-\[0\.22em\]{--tw-tracking:.22em;letter-spacing:.22em}.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}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.text-\[\#18181b\]{color:#18181b}.text-\[\#71717a\]{color:#71717a}.text-\[\#e60023\]{color:#e60023}.text-accent{color:var(--accent)}.text-accent-success{color:#10b981}.text-accent-warning{color:#f59e0b}.text-amber-200\/65{color:#fee685a6}@supports (color:color-mix(in lab,red,red)){.text-amber-200\/65{color:color-mix(in oklab,var(--color-amber-200) 65%,transparent)}}.text-background{color:var(--background)}.text-black{color:var(--color-black)}.text-content{color:#fff}.text-content-muted{color:#d1d5db}.text-content-subtle{color:#9ca3af}.text-emerald-500{color:var(--color-emerald-500)}.text-foreground{color:var(--foreground)}.text-muted-foreground{color:var(--muted-foreground)}.text-primary{color:#f30}.text-red-200{color:var(--color-red-200)}.text-red-300{color:var(--color-red-300)}.text-red-500{color:var(--color-red-500)}.text-secondary-foreground{color:var(--secondary-foreground)}.text-sky-400{color:var(--color-sky-400)}.text-white{color:var(--color-white)}.text-white\/20{color:#fff3}@supports (color:color-mix(in lab,red,red)){.text-white\/20{color:color-mix(in oklab,var(--color-white) 20%,transparent)}}.text-white\/25{color:#ffffff40}@supports (color:color-mix(in lab,red,red)){.text-white\/25{color:color-mix(in oklab,var(--color-white) 25%,transparent)}}.text-white\/30{color:#ffffff4d}@supports (color:color-mix(in lab,red,red)){.text-white\/30{color:color-mix(in oklab,var(--color-white) 30%,transparent)}}.text-white\/35{color:#ffffff59}@supports (color:color-mix(in lab,red,red)){.text-white\/35{color:color-mix(in oklab,var(--color-white) 35%,transparent)}}.text-white\/40{color:#fff6}@supports (color:color-mix(in lab,red,red)){.text-white\/40{color:color-mix(in oklab,var(--color-white) 40%,transparent)}}.text-white\/45{color:#ffffff73}@supports (color:color-mix(in lab,red,red)){.text-white\/45{color:color-mix(in oklab,var(--color-white) 45%,transparent)}}.text-white\/50{color:#ffffff80}@supports (color:color-mix(in lab,red,red)){.text-white\/50{color:color-mix(in oklab,var(--color-white) 50%,transparent)}}.text-white\/60{color:#fff9}@supports (color:color-mix(in lab,red,red)){.text-white\/60{color:color-mix(in oklab,var(--color-white) 60%,transparent)}}.text-white\/70{color:#ffffffb3}@supports (color:color-mix(in lab,red,red)){.text-white\/70{color:color-mix(in oklab,var(--color-white) 70%,transparent)}}.text-white\/75{color:#ffffffbf}@supports (color:color-mix(in lab,red,red)){.text-white\/75{color:color-mix(in oklab,var(--color-white) 75%,transparent)}}.text-white\/80{color:#fffc}@supports (color:color-mix(in lab,red,red)){.text-white\/80{color:color-mix(in oklab,var(--color-white) 80%,transparent)}}.uppercase{text-transform:uppercase}.tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.underline{text-decoration-line:underline}.decoration-white\/30{text-decoration-color:#ffffff4d}@supports (color:color-mix(in lab,red,red)){.decoration-white\/30{-webkit-text-decoration-color:color-mix(in oklab,var(--color-white) 30%,transparent);text-decoration-color:color-mix(in oklab,var(--color-white) 30%,transparent)}}.underline-offset-4{text-underline-offset:4px}.placeholder-content-subtle::placeholder{color:#9ca3af}.opacity-0{opacity:0}.opacity-100{opacity:1}.shadow{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-2xl{--tw-shadow:0 25px 50px -12px var(--tw-shadow-color,#00000040);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_0_0_1px_transparent\]{--tw-shadow:0 0 0 1px var(--tw-shadow-color,transparent);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_0_0_1px_var\(--border\)\,inset_0_0_0_0px_var\(--border\)\]{--tw-shadow:0 0 0 1px var(--tw-shadow-color,var(--border)), inset 0 0 0 0px var(--tw-shadow-color,var(--border));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_0_0_1px_var\(--btn-bg\)\]{--tw-shadow:0 0 0 1px var(--tw-shadow-color,var(--btn-bg));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_2px_8px_rgba\(0\,0\,0\,0\.2\)\,0_4px_16px_rgba\(0\,0\,0\,0\.1\)\]{--tw-shadow:0 2px 8px var(--tw-shadow-color,#0003), 0 4px 16px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_4px_12px_rgba\(0\,0\,0\,0\.28\)\,0_10px_24px_rgba\(0\,0\,0\,0\.16\)\]{--tw-shadow:0 4px 12px var(--tw-shadow-color,#00000047), 0 10px 24px var(--tw-shadow-color,#00000029);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_8px_24px_rgba\(40\,33\,28\,0\.14\)\]{--tw-shadow:0 8px 24px var(--tw-shadow-color,#28211c24);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a), 0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-sm{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-surface-3{--tw-shadow:var(--shadow-surface-3);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-surface-4{--tw-shadow:var(--shadow-surface-4);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring,.ring-1{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-2{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-content-muted\/30{--tw-ring-color:oklab(87.1681% -.00188759 -.00914592/.3)}.ring-content-muted\/70{--tw-ring-color:oklab(87.1681% -.00188759 -.00914592/.7)}.ring-secondary{--tw-ring-color:var(--secondary)}.outline,.outline-1{outline-style:var(--tw-outline-style);outline-width:1px}.outline-transparent{outline-color:#0000}.blur{--tw-blur:blur(8px);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.brightness-0{--tw-brightness:brightness(0%);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.invert{--tw-invert:invert(100%);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[background-color\,box-shadow\]{transition-property:background-color,box-shadow;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[box-shadow\,background-color\]{transition-property:box-shadow,background-color;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[color\,font-variation-settings\]{transition-property:color,font-variation-settings;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[color\,stroke-width\]{transition-property:color,stroke-width;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[outline-color\]{transition-property:outline-color;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-shadow{transition-property:box-shadow;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.duration-80{--tw-duration:80ms;transition-duration:80ms}.duration-150{--tw-duration:.15s;transition-duration:.15s}.\[transition-duration\:180ms\,80ms\]{transition-duration:.18s,80ms}.ease-in-out{--tw-ease:var(--ease-in-out);transition-timing-function:var(--ease-in-out)}.ease-out{--tw-ease:var(--ease-out);transition-timing-function:var(--ease-out)}.\[transition-timing-function\:cubic-bezier\(0\.23\,1\,0\.32\,1\)\,ease\]{transition-timing-function:cubic-bezier(.23,1,.32,1),ease}.outline-none{--tw-outline-style:none;outline-style:none}.select-none{-webkit-user-select:none;user-select:none}.select-text{-webkit-user-select:text;user-select:text}.\[--btn-bg\:var\(--accent\)\]{--btn-bg:var(--accent)}.\[--btn-bg\:var\(--foreground\)\]{--btn-bg:var(--foreground)}.\[text-box\:trim-both_cap_alphabetic\]{text-box:trim-both cap alphabetic}.group-focus-within\/card\:pointer-events-auto:is(:where(.group\/card):focus-within *){pointer-events:auto}.group-focus-within\/card\:opacity-100:is(:where(.group\/card):focus-within *){opacity:1}@media(hover:hover){.group-hover\:pointer-events-auto:is(:where(.group):hover *){pointer-events:auto}.group-hover\:border-border:is(:where(.group):hover *){border-color:var(--border)}.group-hover\:text-white\/65:is(:where(.group):hover *){color:#ffffffa6}@supports (color:color-mix(in lab,red,red)){.group-hover\:text-white\/65:is(:where(.group):hover *){color:color-mix(in oklab,var(--color-white) 65%,transparent)}}.group-hover\:opacity-100:is(:where(.group):hover *){opacity:1}.group-hover\/button\:bg-hover:is(:where(.group\/button):hover *){background-color:var(--hover)}.group-hover\/button\:shadow-\[0_0_0_1px_var\(--hover\)\]:is(:where(.group\/button):hover *){--tw-shadow:0 0 0 1px var(--tw-shadow-color,var(--hover));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.group-hover\/button\:\[--btn-bg\:color-mix\(in_oklab\,var\(--accent\)_80\%\,var\(--background\)\)\]:is(:where(.group\/button):hover *){--btn-bg:var(--accent)}@supports (color:color-mix(in lab,red,red)){.group-hover\/button\:\[--btn-bg\:color-mix\(in_oklab\,var\(--accent\)_80\%\,var\(--background\)\)\]:is(:where(.group\/button):hover *){--btn-bg:color-mix(in oklab,var(--accent) 80%,var(--background))}}.group-hover\/button\:\[--btn-bg\:color-mix\(in_oklab\,var\(--foreground\)_90\%\,var\(--background\)\)\]:is(:where(.group\/button):hover *){--btn-bg:var(--foreground)}@supports (color:color-mix(in lab,red,red)){.group-hover\/button\:\[--btn-bg\:color-mix\(in_oklab\,var\(--foreground\)_90\%\,var\(--background\)\)\]:is(:where(.group\/button):hover *){--btn-bg:color-mix(in oklab,var(--foreground) 90%,var(--background))}}.group-hover\/card\:pointer-events-auto:is(:where(.group\/card):hover *){pointer-events:auto}.group-hover\/card\:opacity-100:is(:where(.group\/card):hover *){opacity:1}.group-hover\/project\:pointer-events-auto:is(:where(.group\/project):hover *){pointer-events:auto}.group-hover\/project\:opacity-100:is(:where(.group\/project):hover *){opacity:1}.group-hover\/resize\:w-0\.5:is(:where(.group\/resize):hover *){width:calc(var(--spacing) * .5)}.group-hover\/resize\:bg-content-muted:is(:where(.group\/resize):hover *){background-color:#d1d5db}}.group-focus-visible\:text-white\/65:is(:where(.group):focus-visible *){color:#ffffffa6}@supports (color:color-mix(in lab,red,red)){.group-focus-visible\:text-white\/65:is(:where(.group):focus-visible *){color:color-mix(in oklab,var(--color-white) 65%,transparent)}}.group-active\/button\:bg-active:is(:where(.group\/button):active *){background-color:var(--active)}.group-active\/button\:shadow-\[0_0_0_0px_var\(--active\)\]:is(:where(.group\/button):active *){--tw-shadow:0 0 0 0px var(--tw-shadow-color,var(--active));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.group-active\/button\:shadow-\[0_0_0_0px_var\(--border\)\,inset_0_0_0_1px_var\(--border\)\]:is(:where(.group\/button):active *){--tw-shadow:0 0 0 0px var(--tw-shadow-color,var(--border)), inset 0 0 0 1px var(--tw-shadow-color,var(--border));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.group-active\/button\:shadow-\[0_0_0_0px_var\(--btn-bg\)\]:is(:where(.group\/button):active *){--tw-shadow:0 0 0 0px var(--tw-shadow-color,var(--btn-bg));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.group-active\/button\:\[transition-duration\:80ms\,80ms\]:is(:where(.group\/button):active *){transition-duration:80ms,80ms}.group-active\/button\:\[--btn-bg\:color-mix\(in_oklab\,var\(--foreground\)_80\%\,var\(--background\)\)\]:is(:where(.group\/button):active *){--btn-bg:var(--foreground)}@supports (color:color-mix(in lab,red,red)){.group-active\/button\:\[--btn-bg\:color-mix\(in_oklab\,var\(--foreground\)_80\%\,var\(--background\)\)\]:is(:where(.group\/button):active *){--btn-bg:color-mix(in oklab,var(--foreground) 80%,var(--background))}}.group-active\/button\:\[--btn-bg\:var\(--accent\)\]:is(:where(.group\/button):active *){--btn-bg:var(--accent)}.group-aria-expanded\/button\:bg-active:is(:where(.group\/button)[aria-expanded=true] *){background-color:var(--active)}.group-aria-expanded\/button\:shadow-\[0_0_0_0px_var\(--active\)\]:is(:where(.group\/button)[aria-expanded=true] *){--tw-shadow:0 0 0 0px var(--tw-shadow-color,var(--active));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.group-aria-pressed\/button\:bg-active:is(:where(.group\/button)[aria-pressed=true] *){background-color:var(--active)}.group-aria-pressed\/button\:shadow-\[0_0_0_0px_var\(--active\)\]:is(:where(.group\/button)[aria-pressed=true] *){--tw-shadow:0 0 0 0px var(--tw-shadow-color,var(--active));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.peer-focus-visible\:ring-2:is(:where(.peer):focus-visible~*){--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.peer-focus-visible\:ring-white:is(:where(.peer):focus-visible~*){--tw-ring-color:var(--color-white)}.peer-focus-visible\:ring-offset-2:is(:where(.peer):focus-visible~*){--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color)}.peer-disabled\:opacity-40:is(:where(.peer):disabled~*){opacity:.4}.placeholder\:text-content-muted::placeholder{color:#d1d5db}.placeholder\:text-white\/30::placeholder{color:#ffffff4d}@supports (color:color-mix(in lab,red,red)){.placeholder\:text-white\/30::placeholder{color:color-mix(in oklab,var(--color-white) 30%,transparent)}}.focus-within\:outline-white\/20:focus-within{outline-color:#fff3}@supports (color:color-mix(in lab,red,red)){.focus-within\:outline-white\/20:focus-within{outline-color:color-mix(in oklab,var(--color-white) 20%,transparent)}}@media(hover:hover){.hover\:scale-110:hover{--tw-scale-x:110%;--tw-scale-y:110%;--tw-scale-z:110%;scale:var(--tw-scale-x) var(--tw-scale-y)}.hover\:border-content-muted\/50:hover{border-color:#d1d5db80}.hover\:bg-\[\#2a2a2a\]:hover{background-color:#2a2a2a}.hover\:bg-\[\#faf9f7\]:hover{background-color:#faf9f7}.hover\:bg-accent:hover{background-color:var(--accent)}.hover\:bg-hover:hover{background-color:var(--hover)}.hover\:bg-main-border:hover{background-color:#232328}.hover\:bg-main-hover:hover{background-color:#404040}.hover\:bg-main-input:hover{background-color:#2e2e2e}.hover\:bg-main-input\/80:hover{background-color:#2e2e2ecc}.hover\:bg-main-light:hover{background-color:#1e1e22}.hover\:bg-main\/80:hover{background-color:#1c1c20cc}.hover\:bg-red-500\/25:hover{background-color:#fb2c3640}@supports (color:color-mix(in lab,red,red)){.hover\:bg-red-500\/25:hover{background-color:color-mix(in oklab,var(--color-red-500) 25%,transparent)}}.hover\:bg-surface-3:hover{background-color:var(--surface-3)}.hover\:bg-white\/5:hover{background-color:#ffffff0d}@supports (color:color-mix(in lab,red,red)){.hover\:bg-white\/5:hover{background-color:color-mix(in oklab,var(--color-white) 5%,transparent)}}.hover\:bg-white\/\[0\.03\]:hover{background-color:#ffffff08}@supports (color:color-mix(in lab,red,red)){.hover\:bg-white\/\[0\.03\]:hover{background-color:color-mix(in oklab,var(--color-white) 3%,transparent)}}.hover\:bg-white\/\[0\.06\]:hover{background-color:#ffffff0f}@supports (color:color-mix(in lab,red,red)){.hover\:bg-white\/\[0\.06\]:hover{background-color:color-mix(in oklab,var(--color-white) 6%,transparent)}}.hover\:text-content:hover{color:#fff}.hover\:text-foreground:hover{color:var(--foreground)}.hover\:text-white:hover{color:var(--color-white)}.hover\:text-white\/80:hover{color:#fffc}@supports (color:color-mix(in lab,red,red)){.hover\:text-white\/80:hover{color:color-mix(in oklab,var(--color-white) 80%,transparent)}}.hover\:underline:hover{text-decoration-line:underline}}.focus\:border-secondary:focus{border-color:var(--secondary)}.focus\:border-white\/50:focus{border-color:#ffffff80}@supports (color:color-mix(in lab,red,red)){.focus\:border-white\/50:focus{border-color:color-mix(in oklab,var(--color-white) 50%,transparent)}}.focus\:bg-hover:focus{background-color:var(--hover)}.focus\:ring-1:focus{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus\:ring-content-muted\/40:focus{--tw-ring-color:oklab(87.1681% -.00188759 -.00914592/.4)}.focus\:ring-content-muted\/50:focus{--tw-ring-color:oklab(87.1681% -.00188759 -.00914592/.5)}.focus\:outline-none:focus{--tw-outline-style:none;outline-style:none}.focus-visible\:bg-hover:focus-visible{background-color:var(--hover)}.focus-visible\:bg-white\/\[0\.06\]:focus-visible{background-color:#ffffff0f}@supports (color:color-mix(in lab,red,red)){.focus-visible\:bg-white\/\[0\.06\]:focus-visible{background-color:color-mix(in oklab,var(--color-white) 6%,transparent)}}.focus-visible\:ring-1:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus-visible\:ring-2:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus-visible\:ring-\[\#6B97FF\]:focus-visible{--tw-ring-color:#6b97ff}.focus-visible\:ring-\[color\:var\(--focus-ring\,\#6B97FF\)\]:focus-visible{--tw-ring-color:var(--focus-ring,#6b97ff)}.focus-visible\:ring-content-muted\/40:focus-visible{--tw-ring-color:oklab(87.1681% -.00188759 -.00914592/.4)}.focus-visible\:ring-white\/50:focus-visible{--tw-ring-color:#ffffff80}@supports (color:color-mix(in lab,red,red)){.focus-visible\:ring-white\/50:focus-visible{--tw-ring-color:color-mix(in oklab, var(--color-white) 50%, transparent)}}.focus-visible\:ring-white\/75:focus-visible{--tw-ring-color:#ffffffbf}@supports (color:color-mix(in lab,red,red)){.focus-visible\:ring-white\/75:focus-visible{--tw-ring-color:color-mix(in oklab, var(--color-white) 75%, transparent)}}.focus-visible\:ring-offset-0:focus-visible{--tw-ring-offset-width:0px;--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color)}.focus-visible\:ring-offset-4:focus-visible{--tw-ring-offset-width:4px;--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color)}.focus-visible\:ring-offset-background:focus-visible{--tw-ring-offset-color:var(--background)}.focus-visible\:outline:focus-visible{outline-style:var(--tw-outline-style);outline-width:1px}.focus-visible\:outline-2:focus-visible{outline-style:var(--tw-outline-style);outline-width:2px}.focus-visible\:-outline-offset-2:focus-visible{outline-offset:-2px}.focus-visible\:outline-offset-2:focus-visible{outline-offset:2px}.focus-visible\:outline-offset-4:focus-visible{outline-offset:4px}.focus-visible\:outline-content:focus-visible{outline-color:#fff}.focus-visible\:outline-white\/60:focus-visible{outline-color:#fff9}@supports (color:color-mix(in lab,red,red)){.focus-visible\:outline-white\/60:focus-visible{outline-color:color-mix(in oklab,var(--color-white) 60%,transparent)}}.focus-visible\:outline-none:focus-visible{--tw-outline-style:none;outline-style:none}.focus-visible\:ring-inset:focus-visible{--tw-ring-inset:inset}.active\:scale-95:active{--tw-scale-x:95%;--tw-scale-y:95%;--tw-scale-z:95%;scale:var(--tw-scale-x) var(--tw-scale-y)}.active\:cursor-grabbing:active{cursor:grabbing}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:cursor-default:disabled{cursor:default}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-30:disabled{opacity:.3}.disabled\:opacity-40:disabled{opacity:.4}.disabled\:opacity-50:disabled{opacity:.5}.disabled\:opacity-60:disabled{opacity:.6}.has-\[\:focus-visible\]\:pointer-events-auto:has(:focus-visible){pointer-events:auto}.has-\[\:focus-visible\]\:opacity-100:has(:focus-visible){opacity:1}.aria-expanded\:text-foreground[aria-expanded=true],.aria-pressed\:text-foreground[aria-pressed=true]{color:var(--foreground)}.data-\[disabled\]\:opacity-50[data-disabled]{opacity:.5}@media(prefers-reduced-motion:no-preference){.motion-safe\:animate-\[spinner-move_2s_linear_infinite\,spinner-dash_4s_ease-in-out_infinite\]{animation:2s linear infinite spinner-move,4s ease-in-out infinite spinner-dash}}@media(prefers-reduced-motion:reduce){.motion-reduce\:transition-none{transition-property:none}}@media not all and (min-width:40rem){.max-sm\:flex-1{flex:1}.max-sm\:px-5{padding-inline:calc(var(--spacing) * 5)}}@media(min-width:400px){.min-\[400px\]\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}}@media(min-width:40rem){.sm\:col-span-1{grid-column:span 1/span 1}.sm\:col-span-3{grid-column:span 3/span 3}.sm\:col-start-2{grid-column-start:2}.sm\:col-start-3{grid-column-start:3}.sm\:row-start-1{grid-row-start:1}.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.sm\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.sm\:grid-cols-\[auto_minmax\(0\,1fr\)_auto\]{grid-template-columns:auto minmax(0,1fr) auto}}@media(min-width:48rem){.md\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}}@media(min-width:64rem){.lg\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.lg\:grid-cols-\[1fr_1fr\]{grid-template-columns:1fr 1fr}.lg\:flex-row{flex-direction:row}.lg\:items-end{align-items:flex-end}.lg\:justify-between{justify-content:space-between}.lg\:px-8{padding-inline:calc(var(--spacing) * 8)}}@media(min-width:80rem){.xl\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}}@media(min-width:96rem){.\32xl\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}}@media(prefers-color-scheme:dark){.dark\:bg-accent\/12{background-color:var(--accent)}@supports (color:color-mix(in lab,red,red)){.dark\:bg-accent\/12{background-color:color-mix(in oklab,var(--accent) 12%,transparent)}}}.\[\&_svg\]\:h-3\.5 svg{height:calc(var(--spacing) * 3.5)}.\[\&_svg\]\:h-4 svg{height:calc(var(--spacing) * 4)}.\[\&_svg\]\:w-3\.5 svg{width:calc(var(--spacing) * 3.5)}.\[\&_svg\]\:w-4 svg{width:calc(var(--spacing) * 4)}.\[\&\:\:-webkit-search-cancel-button\]\:hidden::-webkit-search-cancel-button{display:none}@media(hover:none){.\[\@media\(hover\:none\)\]\:pointer-events-auto{pointer-events:auto}.\[\@media\(hover\:none\)\]\:opacity-100{opacity:1}}}:root{--background:#1c1c20;--foreground:#fff;--card:#1e1e22;--card-foreground:#fff;--bg-main:#1c1c20;--main-border:#232328;--popover:var(--surface-4);--popover-foreground:#fff;--primary:#f30;--primary-foreground:#fff;--secondary:#2e2e2e;--secondary-foreground:#fff;--muted:#2e2e2e;--muted-foreground:#9ca3af;--accent:#333;--accent-foreground:#fff;--selected:#404040;--border:#ffffff1f;--input:#404040;--ring:#404040;--destructive:#ef4444;--destructive-foreground:#fff;--destructive-light:#450a0a;--hover:#ffffff0f;--active:#ffffff1a;--checker-a:#1f1f1f;--checker-b:#2a2a2a;--surface-1:#1c1c20;--surface-2:#232328;--surface-3:#2a2a30;--surface-4:#313138;--surface-5:#383840;--surface-6:#3f3f48;--surface-7:#464650;--surface-8:#4d4d58;--dm-hi-base:#ffffff03;--dm-hi-mid:#ffffff05;--dm-hi-high:#ffffff0a;--dm-hi-peak:#ffffff0f;--dm-ring-base:#ffffff05;--dm-ring-mid:#ffffff0a;--dm-ring-high:#ffffff0f;--dm-drop:#0000002e;--shadow-surface-1:inset 0 0 0 1px var(--dm-ring-base);--shadow-surface-2:inset 0 1px 0 0 var(--dm-hi-base), inset 0 0 0 1px var(--dm-ring-base), 0 1px 1px -.5px var(--dm-drop);--shadow-surface-3:inset 0 1px 0 0 var(--dm-hi-mid), inset 0 0 0 1px var(--dm-ring-base), 0 0 0 1px #0000001f, 0 1px 1px -.5px var(--dm-drop), 0 3px 3px -1.5px var(--dm-drop);--shadow-surface-4:inset 0 1px 0 0 var(--dm-hi-mid), inset 0 0 0 1px var(--dm-ring-mid), 0 0 0 1px #00000024, 0 1px 1px -.5px var(--dm-drop), 0 3px 3px -1.5px var(--dm-drop), 0 6px 6px -3px var(--dm-drop);--shadow-surface-5:inset 0 1px 0 0 var(--dm-hi-high), inset 0 0 0 1px var(--dm-ring-mid), 0 0 0 1px #00000029, 0 1px 1px -.5px var(--dm-drop), 0 3px 3px -1.5px var(--dm-drop), 0 6px 6px -3px var(--dm-drop), 0 12px 12px -6px var(--dm-drop);--shadow-surface-6:inset 0 1px 0 0 var(--dm-hi-high), inset 0 0 0 1px var(--dm-ring-high), 0 0 0 1px #0000002e, 0 1px 1px -.5px var(--dm-drop), 0 3px 3px -1.5px var(--dm-drop), 0 6px 6px -3px var(--dm-drop), 0 12px 12px -6px var(--dm-drop), 0 24px 24px -12px var(--dm-drop);--shadow-surface-7:inset 0 1px 0 0 var(--dm-hi-peak), inset 0 0 0 1px var(--dm-ring-high), 0 0 0 1px #0003, 0 1px 1px -.5px var(--dm-drop), 0 3px 3px -1.5px var(--dm-drop), 0 6px 6px -3px var(--dm-drop), 0 12px 12px -6px var(--dm-drop), 0 24px 24px -12px var(--dm-drop), 0 48px 48px -24px var(--dm-drop);--shadow-surface-8:inset 0 1px 0 0 var(--dm-hi-peak), inset 0 0 0 1px var(--dm-ring-high), 0 0 0 1px #00000038, 0 1px 1px -.5px var(--dm-drop), 0 3px 3px -1.5px var(--dm-drop), 0 6px 6px -3px var(--dm-drop), 0 12px 12px -6px var(--dm-drop), 0 24px 24px -12px var(--dm-drop), 0 48px 48px -24px var(--dm-drop), 0 96px 96px -48px var(--dm-drop)}html,body{background-color:var(--background);overflow:hidden}body{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-rendering:optimizelegibility;font-family:Satoshi,Inter,system-ui,sans-serif}@font-face{font-family:Satoshi;src:url(/fonts/Satoshi-Variable.woff2)format("woff2-variations");font-weight:300 900;font-style:normal;font-display:swap}@font-face{font-family:Satoshi;src:url(/fonts/Satoshi-VariableItalic.woff2)format("woff2-variations");font-weight:300 900;font-style:italic;font-display:swap}@font-face{font-family:Goldman;src:url(/fonts/Goldman-Regular.woff2)format("woff2");font-weight:400;font-style:normal;font-display:swap}@font-face{font-family:Goldman;src:url(/fonts/Goldman-Bold.woff2)format("woff2");font-weight:700;font-style:normal;font-display:swap}@keyframes rivet-token-highlight{0%{transform:scale(1.05);box-shadow:0 0 0 2px #facc15,0 0 0 6px #facc1580}50%{transform:scale(1.02);box-shadow:0 0 0 2px #facc15,0 0 0 8px #facc1599}to{transform:scale(1);box-shadow:0 0 #facc1500,0 0 #facc1500}}*{scrollbar-width:thin;scrollbar-color:#404040 transparent}::-webkit-scrollbar{width:8px;height:8px}::-webkit-scrollbar-track{background:0 0;border-radius:4px}::-webkit-scrollbar-thumb{background:#3a3a3f padding-box padding-box;border:2px solid #0000;border-radius:4px}::-webkit-scrollbar-thumb:hover{background:#505058 padding-box padding-box;border:2px solid #0000}::-webkit-scrollbar-corner{background:0 0}.markdown-content{color:#fff;word-break:break-word;overflow-wrap:anywhere;min-width:0;font-size:.875rem;line-height:1.625}.markdown-content h1,.markdown-content h2,.markdown-content h3,.markdown-content h4,.markdown-content h5,.markdown-content h6{color:#fff;margin-top:1rem;margin-bottom:.25rem;font-weight:600;line-height:1.3}.markdown-content h1{font-size:1.25rem}.markdown-content h2{font-size:1.125rem}.markdown-content h3{font-size:1rem}.markdown-content p{margin:.5rem 0}.markdown-content strong{color:#fff;font-weight:600}.markdown-content em{font-style:italic}.markdown-content a{color:#60a5fa;text-decoration:underline}.markdown-content a:hover{color:#93bbfd}.markdown-content ul,.markdown-content ol{margin:.5rem 0;padding-left:1.25rem}.markdown-content ul{list-style-type:disc}.markdown-content ol{list-style-type:decimal}.markdown-content li{margin:.25rem 0}.markdown-content li>ul,.markdown-content li>ol{margin:0}.markdown-inline-code{color:#e5e7eb;overflow-wrap:anywhere;background:#ffffff1a;border-radius:.25rem;padding:.125rem .375rem;font-family:ui-monospace,SFMono-Regular,SF Mono,Menlo,monospace;font-size:.8125rem}.markdown-content blockquote{color:#9ca3af;border-left:3px solid #4b5563;margin:.5rem 0;padding-left:.75rem}.markdown-content table{border-collapse:collapse;width:100%;margin:.5rem 0;font-size:.8125rem}.markdown-content th,.markdown-content td{text-align:left;border:1px solid #4b5563;padding:.375rem .625rem}.markdown-content th{color:#fff;background:#ffffff0d;font-weight:600}.markdown-content hr{border:none;border-top:1px solid #4b5563;margin:.75rem 0}.markdown-content del{color:#9ca3af;text-decoration:line-through}.markdown-content>:first-child{margin-top:0}.markdown-content>:last-child{margin-bottom:0}@keyframes rivet-sparkle-scroll{0%{transform:translateY(0)}to{transform:translateY(-6em)}}.rivet-sparkle-strip{animation:.9s steps(6,end) infinite rivet-sparkle-scroll}@media(prefers-reduced-motion:reduce){.rivet-sparkle-strip{animation:none}}.rivet-skeleton{background-color:#a3a3aa14;position:relative;overflow:hidden}.rivet-skeleton:after{content:"";background:linear-gradient(100deg,#0000 20%,#ffffff0f,#0000 80%);animation:1.6s ease-in-out infinite rivet-skeleton-sweep;position:absolute;top:0;right:0;bottom:0;left:0;transform:translate(-100%)}@keyframes rivet-skeleton-sweep{to{transform:translate(100%)}}@media(prefers-reduced-motion:reduce){.rivet-skeleton:after{animation:none}}@keyframes shimmer{0%{background-position:0 0}to{background-position:100% 0}}.shimmer-text{-webkit-text-fill-color:transparent;color:#0000;background:linear-gradient(90deg,#a3a3a3,#a3a3a3 35%,#525252,#a3a3a3 65%,#a3a3a3) 0 0/300% 100%;-webkit-background-clip:text;background-clip:text;animation:1.5s ease-in-out infinite shimmer}.glass-panel{-webkit-backdrop-filter:blur(20px);background:#ffffff04;border:1px solid #ffffff08}.active-push:active{transition:transform .1s;transform:scale(.98)}:root{--variant-split-ease:cubic-bezier(.4, 0, .2, 1);--variant-split-accent:var(--color-primary,#f30);--variant-split-zone-bg:#26262aeb;--variant-split-zone-border:#ffffff0a;--variant-split-zone-shadow:0 30px 60px -20px #0000008c, 0 0 90px 10px #ffdca00d}.variant-preview-region{isolation:isolate}.variant-preview-primary{transition:filter .2s var(--variant-split-ease)}.variant-preview-region.is-dragging .variant-preview-primary{filter:brightness(.92)saturate(.92)}.variant-preview-region.is-dragging iframe{pointer-events:none}.variant-preview-atmosphere{pointer-events:none;opacity:0;z-index:30;transition:opacity .2s var(--variant-split-ease);background:radial-gradient(60% 50%,#0000,#00000059);position:absolute;top:0;right:0;bottom:0;left:0}.variant-preview-region.is-dragging .variant-preview-atmosphere{opacity:1}.variant-drop-zones{pointer-events:none;z-index:50;position:absolute;top:16px;right:16px;bottom:16px;left:16px}.variant-drop-zone{background:var(--variant-split-zone-bg);border:1px solid var(--variant-split-zone-border);pointer-events:auto;opacity:0;filter:blur(12px);width:14%;min-width:130px;max-width:180px;box-shadow:var(--variant-split-zone-shadow);transition:opacity .32s var(--variant-split-ease),transform .32s var(--variant-split-ease),filter .32s var(--variant-split-ease),box-shadow .24s var(--variant-split-ease);border-radius:14px;justify-content:center;align-items:center;display:flex;position:absolute;top:0;bottom:0;transform:scale(.94)}.variant-drop-zone.is-left{left:8px}.variant-drop-zone.is-right{right:8px}.variant-drop-zones.is-visible .variant-drop-zone{opacity:1;filter:blur();transform:scale(1)}.variant-drop-zones.is-exiting .variant-drop-zone{opacity:0;filter:blur(8px);transition:opacity .2s var(--variant-split-ease),transform .2s var(--variant-split-ease),filter .2s var(--variant-split-ease);transform:scale(.97)}.variant-drop-zone.is-disabled{opacity:.6;filter:blur(2px)saturate(.6)}.variant-drop-zone-inner{opacity:0;filter:blur(4px);transition:opacity .22s var(--variant-split-ease),transform .22s var(--variant-split-ease),filter .22s var(--variant-split-ease);flex-direction:column;justify-content:center;align-items:center;gap:12px;display:flex;position:absolute;top:0;right:0;bottom:0;left:0;transform:translateY(6px)}.variant-drop-zones.is-visible .variant-drop-zone-inner{opacity:1;filter:blur();transition-delay:.18s;transform:translateY(0)}.variant-drop-zone.is-hover .variant-drop-zone-caption{color:var(--variant-split-accent)}.variant-drop-zone-icon{border:1.5px solid #ffffff73;border-radius:6px;width:36px;height:28px;position:relative;overflow:hidden}.variant-drop-zone-icon:after{content:"";background:#ffffff73;width:1.5px;position:absolute;top:0;bottom:0}.variant-drop-zone-icon.is-left:after{left:11px}.variant-drop-zone-icon.is-right:after{right:11px}.variant-drop-zone-icon.is-left:before{content:"";background:#ffffff14;width:11px;position:absolute;top:0;bottom:0;left:0}.variant-drop-zone-icon.is-right:before{content:"";background:#ffffff14;width:11px;position:absolute;top:0;bottom:0;right:0}.variant-drop-zone.is-hover .variant-drop-zone-icon{border-color:var(--variant-split-accent)}.variant-drop-zone.is-hover .variant-drop-zone-icon:after,.variant-drop-zone.is-hover .variant-drop-zone-icon.is-left:before,.variant-drop-zone.is-hover .variant-drop-zone-icon.is-right:before{background:var(--variant-split-accent)}@supports (color:color-mix(in lab,red,red)){.variant-drop-zone.is-hover .variant-drop-zone-icon.is-left:before,.variant-drop-zone.is-hover .variant-drop-zone-icon.is-right:before{background:color-mix(in srgb,var(--variant-split-accent) 22%,transparent)}}.variant-drop-zone-caption{letter-spacing:.02em;color:#fff9;text-align:center;max-width:80%;font-size:11.5px;line-height:1.35}.variant-drop-zone-border{border:2px dashed var(--variant-split-accent);opacity:0;transition:opacity .24s var(--variant-split-ease);pointer-events:none;border-radius:10px;position:absolute;top:4px;right:4px;bottom:4px;left:4px}.variant-drop-zone.is-hover .variant-drop-zone-border{opacity:1}.variant-drop-zone-preview{display:none}.variant-drag-ghost{pointer-events:none;z-index:60;background:#1f1f21f5;border:1px solid #ffffff0f;border-radius:10px;padding:8px 12px;position:fixed;top:0;left:0;box-shadow:inset 0 0 0 1px #ffffff05,0 24px 60px -10px #0009,0 0 80px 10px #ffdc8c0f}.variant-drag-ghost-body{flex-direction:column;min-width:0;display:flex}.variant-drag-ghost-row{align-items:center;gap:8px;min-width:0;display:flex}.variant-drag-ghost-title{color:#ffffffeb;white-space:nowrap;text-overflow:ellipsis;flex:1;min-width:0;font-size:13px;font-weight:500;overflow:hidden}.variant-drag-ghost-tag{white-space:nowrap;border-radius:4px;flex-shrink:0;padding:1px 6px;font-size:10px;font-weight:500}.variant-drag-ghost-desc{color:#ffffff80;-webkit-line-clamp:2;-webkit-box-orient:vertical;margin-top:2px;font-size:12px;line-height:1.35;display:-webkit-box;overflow:hidden}.variant-split-secondary{border-left:1px solid var(--main-border,#ffffff0f);background:var(--bg-main,#0d0d0e);min-width:0;animation:variantSplitSecondaryEnter .42s var(--variant-split-ease) both;flex-direction:column;flex:1 1 0;display:flex;position:relative}.variant-preview-region.is-split>.variant-preview-row>.variant-preview-primary{border-right:1px solid var(--main-border,#ffffff0f)}@keyframes variantSplitSecondaryEnter{0%{opacity:0}to{opacity:1}}.variant-split-secondary-toolbar{background:var(--bg-main);border-bottom:1px solid var(--main-border);color:#9ca3af;flex:0 0 32px;justify-content:space-between;align-items:center;height:32px;padding:0 10px;font-size:11.5px;display:flex}.variant-split-secondary-label{white-space:nowrap;text-overflow:ellipsis;min-width:0;overflow:hidden}.variant-split-secondary-close{-webkit-appearance:none;-moz-appearance:none;appearance:none;color:#ffffff8c;cursor:pointer;transition:color .14s var(--variant-split-ease),background-color .14s var(--variant-split-ease);background:0 0;border:none;border-radius:4px;justify-content:center;align-items:center;padding:4px;display:inline-flex}.variant-split-secondary-close:hover{color:#fff;background:#404040}.variant-split-secondary-iframe{background:#fff;border:0;flex:1;width:100%;height:100%}@media(prefers-reduced-motion:reduce){.variant-drop-zone,.variant-drop-zone-inner,.variant-drop-zone-preview,.variant-drop-zone-border,.variant-preview-primary,.variant-preview-atmosphere,.variant-split-secondary,.variant-split-secondary-close{filter:none!important;transition-duration:80ms!important;animation-duration:80ms!important;transform:none!important}.variant-drop-zones.is-visible .variant-drop-zone-inner{transition-delay:0s}}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-divide-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-ordinal{syntax:"*";inherits:false}@property --tw-slashed-zero{syntax:"*";inherits:false}@property --tw-numeric-figure{syntax:"*";inherits:false}@property --tw-numeric-spacing{syntax:"*";inherits:false}@property --tw-numeric-fraction{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@property --tw-scale-x{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-y{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-z{syntax:"*";inherits:false;initial-value:1}@keyframes spin{to{transform:rotate(360deg)}}@keyframes pulse{50%{opacity:.5}}@keyframes spinner-move{to{stroke-dashoffset:-100px}}@keyframes spinner-dash{0%,to{stroke-dasharray:15 85}50%{stroke-dasharray:40 60}}