rivet-design 0.26.1 → 0.27.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 (122) hide show
  1. package/bin/rivet.js +13 -0
  2. package/dist/agent-variants/PreviewRuntime.js +20 -7
  3. package/dist/agent-variants/WorkerExecutorService.d.ts +0 -2
  4. package/dist/agent-variants/WorkerExecutorService.js +0 -18
  5. package/dist/agent-variants/WorktreeOrchestrator.testHelpers.js +0 -8
  6. package/dist/agent-variants/contracts.d.ts +1001 -4868
  7. package/dist/agent-variants/contracts.js +1 -121
  8. package/dist/agent-variants/index.d.ts +1 -1
  9. package/dist/agent-variants/variantsTelemetry.d.ts +4 -8
  10. package/dist/agent-variants/variantsTelemetry.js +3 -0
  11. package/dist/agent-variants/workItemInput.d.ts +386 -386
  12. package/dist/cli/commands/contextRequest.js +1 -1
  13. package/dist/cli/commands/guidanceReferences.d.ts +2 -2
  14. package/dist/cli/commands/guidanceVerifierPackage.d.ts +2 -2
  15. package/dist/cli/commands/mcpServe.js +1 -0
  16. package/dist/cli/commands/serve.js +2 -0
  17. package/dist/cli/editorSession.d.ts +1 -13
  18. package/dist/cli/handoff.d.ts +1 -0
  19. package/dist/cli/handoff.js +20 -4
  20. package/dist/cli/router.js +1 -0
  21. package/dist/cli/runtimeInterruption.d.ts +2 -16
  22. package/dist/cli/telemetry.d.ts +10 -0
  23. package/dist/cli/telemetry.js +37 -1
  24. package/dist/config/pluginMetrics.js +36 -1
  25. package/dist/hosts/workerDefaults.d.ts +0 -11
  26. package/dist/hosts/workerDefaults.js +1 -30
  27. package/dist/index-core.d.ts +0 -1
  28. package/dist/index.d.ts +19 -0
  29. package/dist/index.js +15 -6
  30. package/dist/install/automaticCliUpdate.d.ts +1 -0
  31. package/dist/install/automaticCliUpdate.js +32 -22
  32. package/dist/install/channelCli.d.ts +1 -1
  33. package/dist/install/channelCli.js +11 -6
  34. package/dist/install/channelManager.d.ts +5 -2
  35. package/dist/install/globalBootstrap.d.ts +5 -3
  36. package/dist/install/globalBootstrap.js +21 -9
  37. package/dist/install/npmCommand.d.ts +15 -0
  38. package/dist/install/npmCommand.js +59 -0
  39. package/dist/routes/agentVariants.js +3 -14
  40. package/dist/routes/library/browserAccess.js +6 -2
  41. package/dist/routes/library/guidance.js +3 -1
  42. package/dist/routes/library/middleware.js +15 -9
  43. package/dist/routes/library/navigation.js +3 -1
  44. package/dist/routes/library/profiles.js +5 -5
  45. package/dist/routes/library/projects.js +17 -7
  46. package/dist/routes/library/referenceOnboarding.js +4 -2
  47. package/dist/routes/library/schemas.d.ts +2 -15
  48. package/dist/routes/telemetry.js +1 -1
  49. package/dist/routes/variantRequestSchema.d.ts +4 -4
  50. package/dist/routes/variantRequestSchema.js +7 -2
  51. package/dist/server.js +8 -0
  52. package/dist/services/AuthService.d.ts +3 -56
  53. package/dist/services/AuthService.js +0 -28
  54. package/dist/services/ConfigManager.d.ts +0 -2
  55. package/dist/services/ConfigManager.js +0 -14
  56. package/dist/services/DependencyPreparationService.js +57 -19
  57. package/dist/services/GuidanceVerifierRunner.js +4 -4
  58. package/dist/services/HubDiscovery.d.ts +1 -9
  59. package/dist/services/IntegrationsClient.d.ts +16 -16
  60. package/dist/services/MCPOnboardingTelemetry.d.ts +0 -14
  61. package/dist/services/MCPOnboardingTelemetry.js +0 -62
  62. package/dist/services/ProjectPackageManager.d.ts +5 -0
  63. package/dist/services/ProjectPackageManager.js +33 -11
  64. package/dist/services/ProjectRegistry.d.ts +5 -24
  65. package/dist/services/TelemetryService.d.ts +9 -64
  66. package/dist/services/TelemetryService.js +10 -113
  67. package/dist/services/TreeStore.d.ts +0 -2
  68. package/dist/services/TreeStore.js +0 -24
  69. package/dist/services/WorktreeManager.js +5 -0
  70. package/dist/services/profiles/DesignProfiles.d.ts +180 -125
  71. package/dist/services/profiles/DesignProfiles.js +16 -8
  72. package/dist/services/profiles/ProfilePlanning.d.ts +38 -38
  73. package/dist/services/profiles/ReferenceReader.d.ts +14 -14
  74. package/dist/services/profiles/modelContract.js +4 -4
  75. package/dist/storage/library/ProjectPreviewCache.d.ts +1 -13
  76. package/dist/storage/profiles/ProfilePlans.d.ts +137 -137
  77. package/dist/storage/profiles/ProfileRecords.d.ts +62 -37
  78. package/dist/storage/profiles/planSchema.d.ts +40 -40
  79. package/dist/storage/profiles/schema.d.ts +16 -16
  80. package/dist/types/api-responses.d.ts +174 -0
  81. package/dist/types/api-responses.js +108 -0
  82. package/dist/types/cosmos-profile.d.ts +17 -105
  83. package/dist/types/cosmos.d.ts +48 -266
  84. package/dist/types/design-library.d.ts +230 -61
  85. package/dist/types/design-library.js +38 -1
  86. package/dist/types/design-profile.d.ts +220 -529
  87. package/dist/types/design-profile.js +5 -1
  88. package/dist/types/guidance-references.d.ts +68 -316
  89. package/dist/types/guidance-verifier.d.ts +69 -560
  90. package/dist/types/guidance-verifier.js +15 -2
  91. package/dist/types/guidance.d.ts +182 -1643
  92. package/dist/types/guidance.js +4 -1
  93. package/dist/types/project-library.d.ts +60 -30
  94. package/dist/types/project-library.js +32 -1
  95. package/dist/types/reference-connectors.d.ts +38 -162
  96. package/dist/types/reference-onboarding.d.ts +144 -878
  97. package/dist/types/reference-pages.d.ts +27 -139
  98. package/dist/types/x-bookmarks.d.ts +40 -296
  99. package/dist/utils/devServerError.d.ts +5 -0
  100. package/dist/utils/devServerError.js +4 -0
  101. package/dist/utils/displayLocale.d.ts +0 -1
  102. package/dist/utils/displayLocale.js +1 -3
  103. package/dist/utils/failureReason.d.ts +16 -0
  104. package/dist/utils/failureReason.js +106 -0
  105. package/dist/utils/hostedLogPrivacy.d.ts +1 -0
  106. package/dist/utils/hostedLogPrivacy.js +10 -4
  107. package/dist/utils/skills/claude-skill.d.ts +1 -1
  108. package/dist/utils/skills/claude-skill.js +1 -1
  109. package/dist/utils/skills/cli-guidance.d.ts +1 -1
  110. package/dist/utils/skills/cli-guidance.js +3 -3
  111. package/dist/utils/skills/cursor-rules.d.ts +1 -1
  112. package/dist/utils/skills/cursor-rules.js +1 -1
  113. package/package.json +5 -5
  114. package/src/ui/dist/assets/LibraryEntry-RI9Lc7P3.js +37 -0
  115. package/src/ui/dist/assets/main-D0UmAaUe.css +1 -0
  116. package/src/ui/dist/assets/main-DgrLzS5j.js +497 -0
  117. package/src/ui/dist/index.html +2 -2
  118. package/dist/types/change-types.d.ts +0 -66
  119. package/dist/types/change-types.js +0 -3
  120. package/src/ui/dist/assets/LibraryEntry-Cr4GFYXW.js +0 -37
  121. package/src/ui/dist/assets/main-W3oTuTTl.css +0 -1
  122. package/src/ui/dist/assets/main-tPO1OCpZ.js +0 -439
@@ -0,0 +1,106 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.failureReasonCodeProperties = exports.failureReasonProperties = exports.failureReason = exports.failureReasonCode = exports.FAILURE_REASON_CODES = void 0;
4
+ const errnoCode_1 = require("./errnoCode");
5
+ const errorMessage_1 = require("./errorMessage");
6
+ const devServerError_1 = require("./devServerError");
7
+ const hostedLogPrivacy_1 = require("./hostedLogPrivacy");
8
+ const DEPENDENCY_REASON_CODES = [
9
+ 'multiple_lockfiles',
10
+ 'unsupported_package_manager',
11
+ 'invalid_package_manager_field',
12
+ 'invalid_manifest',
13
+ 'invalid_workspace',
14
+ 'path_outside_workspace',
15
+ 'dangling_symlink',
16
+ 'version_unreadable',
17
+ 'version_mismatch',
18
+ 'no_install_command',
19
+ 'install_failed',
20
+ 'installer_unstoppable',
21
+ 'inputs_changed',
22
+ ];
23
+ const ERRNO_REASON_CODES = [
24
+ 'ENOENT',
25
+ 'EACCES',
26
+ 'EPERM',
27
+ 'EEXIST',
28
+ 'ENOTDIR',
29
+ 'EISDIR',
30
+ 'ELOOP',
31
+ 'ENOSPC',
32
+ 'EMFILE',
33
+ 'EADDRINUSE',
34
+ 'ECONNREFUSED',
35
+ 'ECONNRESET',
36
+ 'ETIMEDOUT',
37
+ 'EBUSY',
38
+ 'ENOTSUP',
39
+ 'EINVAL',
40
+ 'ENOTEMPTY',
41
+ 'EROFS',
42
+ 'EAI_AGAIN',
43
+ ];
44
+ const GENERAL_REASON_CODES = ['timeout', 'aborted', 'unknown'];
45
+ exports.FAILURE_REASON_CODES = [
46
+ ...DEPENDENCY_REASON_CODES,
47
+ ...ERRNO_REASON_CODES,
48
+ ...GENERAL_REASON_CODES,
49
+ ];
50
+ const REASON_DETAIL_LIMIT = 400;
51
+ const REDACTION_INPUT_LIMIT = 4_000;
52
+ const ABSOLUTE_PATH = /(?<![\w.:/\\])\/(?:[\w.@+~-]+\/)+[\w.@+~-]*/g;
53
+ const REASON_CODES = new Set(exports.FAILURE_REASON_CODES);
54
+ const ERRNO_CODES = new Set(ERRNO_REASON_CODES);
55
+ const ERROR_NAME_REASON_CODES = new Map([
56
+ ['AbortError', 'aborted'],
57
+ ['TimeoutError', 'timeout'],
58
+ ]);
59
+ const propertyOf = (error, key) => typeof error === 'object' && error !== null
60
+ ? Reflect.get(error, key)
61
+ : undefined;
62
+ const isFailureReasonCode = (value) => typeof value === 'string' && REASON_CODES.has(value);
63
+ const isErrnoReasonCode = (value) => value !== undefined && ERRNO_CODES.has(value);
64
+ const failureReasonCode = (error) => {
65
+ const declared = propertyOf(error, 'reasonCode');
66
+ if (isFailureReasonCode(declared))
67
+ return declared;
68
+ const code = (0, errnoCode_1.errnoCode)(error);
69
+ if (isErrnoReasonCode(code))
70
+ return code;
71
+ return (ERROR_NAME_REASON_CODES.get(String(propertyOf(error, 'name'))) ?? 'unknown');
72
+ };
73
+ exports.failureReasonCode = failureReasonCode;
74
+ const failureText = (error) => {
75
+ if (!(0, devServerError_1.isDevServerStartError)(error))
76
+ return (0, errorMessage_1.errorMessage)(error);
77
+ return error.summary ?? '';
78
+ };
79
+ const failureDetail = (error) => (0, hostedLogPrivacy_1.redactSensitiveText)(failureText(error)
80
+ .slice(-REDACTION_INPUT_LIMIT)
81
+ .replace(/\s+/g, ' ')
82
+ .trim())
83
+ .replace(ABSOLUTE_PATH, '[redacted]')
84
+ .slice(-REASON_DETAIL_LIMIT)
85
+ .trim() || undefined;
86
+ const failureReason = (error) => {
87
+ const reasonDetail = failureDetail(error);
88
+ return {
89
+ reasonCode: (0, exports.failureReasonCode)(error),
90
+ ...(reasonDetail ? { reasonDetail } : {}),
91
+ };
92
+ };
93
+ exports.failureReason = failureReason;
94
+ const failureReasonProperties = (error) => {
95
+ if (error === undefined)
96
+ return {};
97
+ const { reasonCode, reasonDetail } = (0, exports.failureReason)(error);
98
+ return {
99
+ reason_code: reasonCode,
100
+ ...(reasonDetail ? { reason_detail: reasonDetail } : {}),
101
+ };
102
+ };
103
+ exports.failureReasonProperties = failureReasonProperties;
104
+ const failureReasonCodeProperties = (error) => error === undefined ? {} : { reason_code: (0, exports.failureReasonCode)(error) };
105
+ exports.failureReasonCodeProperties = failureReasonCodeProperties;
106
+ //# sourceMappingURL=failureReason.js.map
@@ -1,2 +1,3 @@
1
+ export declare const redactSensitiveText: (text: string) => string;
1
2
  export declare const hostedLogValues: (message: unknown, values: unknown[]) => unknown[];
2
3
  //# sourceMappingURL=hostedLogPrivacy.d.ts.map
@@ -1,19 +1,25 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.hostedLogValues = void 0;
3
+ exports.hostedLogValues = exports.redactSensitiveText = void 0;
4
4
  const DETAILS_OMITTED = '[details omitted]';
5
5
  const MAX_LABEL_LENGTH = 2_048;
6
6
  const HOSTED_LABEL_REDACTIONS = [
7
7
  /(?:https?|wss?):\/\/[^\s"'<>]+/gi,
8
8
  /\bBearer\s+[^\s,;"']+/gi,
9
9
  /\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,}\b/gi,
10
- /(?:[A-Z]:[\\/]|\/)(?:Users|home|private|tmp|var|opt|workspace)[\\/][^\s"'<>]+/gi,
11
- /\b(?:sk-|sb_secret_|phx_|ghp_|gho_)[A-Za-z0-9_-]+/g,
10
+ /(?:[A-Z]:[\\/]|\/)(?:Users|home|private|tmp|var|opt|workspace|Volumes|root|mnt|srv)[\\/][^\s"'<>]+/gi,
11
+ /\b[A-Z]:[\\/][^\s"'<>]+/gi,
12
+ /\b[\w.-]{0,32}(?:token|secret|password|passwd|api[_-]?key)[\w.-]{0,32}["']?\s{0,3}[=:]\s{0,3}["']?[^\s,;"'<>]{1,256}/gi,
13
+ /\b(?:sk-|sk_live_|sk_test_|rk_live_|rk_test_|sb_secret_|phx_|ghp_|gho_|ghs_|ghu_|github_pat_|glpat-|xox[abprs]-)[A-Za-z0-9_-]+/g,
14
+ /\bnpm_[A-Za-z0-9]{36}\b/g,
15
+ /\bAKIA[0-9A-Z]{16}\b/g,
12
16
  /\beyJ[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+/g,
13
17
  ];
18
+ const redactSensitiveText = (text) => HOSTED_LABEL_REDACTIONS.reduce((current, pattern) => current.replace(pattern, '[redacted]'), text);
19
+ exports.redactSensitiveText = redactSensitiveText;
14
20
  const hostedLogValues = (message, values) => {
15
21
  const label = typeof message === 'string' ? message : DETAILS_OMITTED;
16
- const redacted = HOSTED_LABEL_REDACTIONS.reduce((current, pattern) => current.replace(pattern, '[redacted]'), label).slice(0, MAX_LABEL_LENGTH);
22
+ const redacted = (0, exports.redactSensitiveText)(label).slice(0, MAX_LABEL_LENGTH);
17
23
  return [
18
24
  redacted,
19
25
  ...values.map((value) => {
@@ -1,4 +1,4 @@
1
- export declare const CLAUDE_SKILL_VERSION = 61;
1
+ export declare const CLAUDE_SKILL_VERSION = 62;
2
2
  export declare const CLAUDE_SKILL_DIR = "rivet";
3
3
  export declare const CLAUDE_SKILL_FILENAME = "SKILL.md";
4
4
  export declare const CLAUDE_SKILL_CONTENT: string;
@@ -2,7 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.CLAUDE_SKILL_CONTENT = exports.CLAUDE_SKILL_FILENAME = exports.CLAUDE_SKILL_DIR = exports.CLAUDE_SKILL_VERSION = void 0;
4
4
  const cli_guidance_1 = require("./cli-guidance");
5
- exports.CLAUDE_SKILL_VERSION = 61;
5
+ exports.CLAUDE_SKILL_VERSION = 62;
6
6
  const CLAUDE_SKILL_VERSION_MARKER = `[//]: # (rivet-skill-version: ${exports.CLAUDE_SKILL_VERSION})`;
7
7
  exports.CLAUDE_SKILL_DIR = 'rivet';
8
8
  exports.CLAUDE_SKILL_FILENAME = 'SKILL.md';
@@ -1,4 +1,4 @@
1
- export declare const CLI_GUIDANCE_VERSION = 57;
1
+ export declare const CLI_GUIDANCE_VERSION = 58;
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
@@ -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 = 57;
5
+ exports.CLI_GUIDANCE_VERSION = 58;
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
 
@@ -75,9 +75,9 @@ Translate "ignore my motion principles for this run" into \`--exclude-guidance '
75
75
 
76
76
  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_get_exploration\` with \`workId\` 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.
77
77
 
78
- **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_get_design_context\` with \`instructionIds: ["<id>"]\` and \`includeChecks: true\`). 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 CLI packet has \`execution: "host_required"\`. The MCP read returns the saved checking recipe and metadata. Neither read has checked the output.
78
+ **Custom verification on demand.** First bind the user-selected page, screen, or components and the requested rules or properties to the target from the user's app or \`variants get\`. 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_get_design_context\` with \`instructionIds: ["<id>"]\` and \`includeChecks: true\`). Its \`sourceDigest\` binds the saved text and reference metadata; URL and directory contents remain live and are not frozen by this digest. Inspect only source files and actual references directly needed for those bound assertions, without copying them into persistent context. Expand inspection only to resolve a concrete unresolved assertion. Do not scan the whole project or unrelated routes unless the user explicitly requests broader verification. The CLI packet has \`execution: "host_required"\`. The MCP read returns the saved checking recipe and metadata. Neither read has checked the output.
79
79
 
80
- Identify the target from the user's app or \`variants get\`. Choose verification tools for the actual browser, simulator, or other target. Do not assume a URL, DOM, CSS, or Playwright. Use the host's available tools for that target; unavailable tools or inaccessible targets mean unable to verify. Keep reusable assertions separate from target-specific bindings and execution steps, and record applicability when a rule requires a particular platform. 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. For CLI packets follow \`nextAction\`. For MCP use the returned source digest and saved recipe to determine whether to create or revise a recipe. Execute a recipe only when the user requests verification and authorizes its required privileges. 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.
80
+ Choose verification tools for the actual browser, simulator, or other target. Do not assume a URL, DOM, CSS, or Playwright. Use the host's available tools for that target; unavailable tools or inaccessible targets mean unable to verify. Keep reusable assertions separate from target-specific bindings and execution steps, and record applicability when a rule requires a particular platform. 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. For CLI packets follow \`nextAction\`. For a Markdown-only recipe, use the host's tools directly; never call \`context verify\` or \`rivet_run_design_check\`. Do not automatically author, prove, or save an executable package for a one-off check. For MCP use the returned source digest and saved recipe to determine whether to create or revise a recipe. Execute a recipe only when the user requests verification and authorizes its required privileges. 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. If a tool or runtime fails, stop and report the actual error, including its normalized reason when available. Do not retry an unchanged check or automatically regenerate its recipe or package.
81
81
 
82
82
  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_save_design_check\` with \`contextId\`, \`recipeFile\`, and \`sourceDigest\`). 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_remove_design_check\` with \`contextId\`). 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.
83
83
 
@@ -1,4 +1,4 @@
1
- export declare const CURSOR_RULES_VERSION = 57;
1
+ export declare const CURSOR_RULES_VERSION = 58;
2
2
  export declare const CURSOR_RULES_FILENAME = "rivet.mdc";
3
3
  export declare const CURSOR_RULES_CONTENT: string;
4
4
  //# sourceMappingURL=cursor-rules.d.ts.map
@@ -2,7 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.CURSOR_RULES_CONTENT = exports.CURSOR_RULES_FILENAME = exports.CURSOR_RULES_VERSION = void 0;
4
4
  const cli_guidance_1 = require("./cli-guidance");
5
- exports.CURSOR_RULES_VERSION = 57;
5
+ exports.CURSOR_RULES_VERSION = 58;
6
6
  exports.CURSOR_RULES_FILENAME = 'rivet.mdc';
7
7
  const CURSOR_RULES_VERSION_MARKER = `rivet-rules-version: ${exports.CURSOR_RULES_VERSION}`;
8
8
  exports.CURSOR_RULES_CONTENT = `---
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "rivet-design",
3
- "version": "0.26.1",
3
+ "version": "0.27.0",
4
4
  "description": "Local visual web development tool with AI-powered code modification",
5
5
  "main": "dist/index.js",
6
6
  "workspaces": [
@@ -80,7 +80,7 @@
80
80
  "dotenv": "^17.4.2",
81
81
  "drizzle-orm": "1.0.0-rc.4",
82
82
  "express": "^5.2.1",
83
- "glob": "^11.0.3",
83
+ "glob": "^14.0.2",
84
84
  "http-proxy-middleware": "^3.0.5",
85
85
  "js-yaml": "^4.1.1",
86
86
  "loglevel": "^1.9.2",
@@ -92,7 +92,7 @@
92
92
  "posthog-node": "^5.52.4",
93
93
  "simple-git": "^4.0.2",
94
94
  "typescript": "^5.1.6",
95
- "zod": "^3.24.1"
95
+ "zod": "^4.6.7"
96
96
  },
97
97
  "devDependencies": {
98
98
  "@anthropic-ai/sdk": "^0.74.0",
@@ -121,7 +121,7 @@
121
121
  "eslint-config-prettier": "^10.1.8",
122
122
  "eslint-plugin-react": "^7.37.5",
123
123
  "eslint-plugin-react-hooks": "^5.2.0",
124
- "globals": "^14.0.0",
124
+ "globals": "^17.14.0",
125
125
  "husky": "^9.1.7",
126
126
  "jest": "^30.1.3",
127
127
  "jest-environment-jsdom": "^30.2.0",
@@ -212,5 +212,5 @@
212
212
  "rivetPlugin": {
213
213
  "toolContract": "intent-v2"
214
214
  },
215
- "gitHead": "c4c287a9215f2936c79e05ddce775dfbba251bb4"
215
+ "gitHead": "3efd8a49dc50fdc302b9b2152238a2b79d3e899e"
216
216
  }
@@ -0,0 +1,37 @@
1
+ var ze=t=>{throw TypeError(t)};var we=(t,s,r)=>s.has(t)||ze("Cannot "+r);var k=(t,s,r)=>(we(t,s,"read from private field"),r?r.call(t):s.get(t)),V=(t,s,r)=>s.has(t)?ze("Cannot add the same private member more than once"):s instanceof WeakSet?s.add(t):s.set(t,r),q=(t,s,r,i)=>(we(t,s,"write to private field"),i?i.call(t,r):s.set(t,r),r),W=(t,s,r)=>(we(t,s,"access private method"),r);import{S as Rt,n as je,s as It,r as Ct,Q as Ye,u as Pe,a as Pt,b as Et,c as u,e as Lt,d as At,f as Ot,g as Mt,h as $e,i as Tt,j as Dt,k as re,l as le,m as qt,o as e,B as G,p as Ne,P as zt,q as $t,t as Ft,v as Ht,w as Ut,X as Je,D as Xe,x as Ze,y as et,z as tt,A as st,C as rt,E as Kt,F as at,G as Fe,H as Qt,I as Bt,J as Vt,K as Wt,L as Z,M as be,N as z,R as Gt,O as it,T as se,U as Yt,V as Jt,W as ce,Y as Xt,Z as ie,_ as U,$ as nt,a0 as ye,a1 as Zt,a2 as es,a3 as H,a4 as ot,a5 as ts,a6 as de,a7 as ss,a8 as Se,a9 as rs,aa as He,ab as as,ac as is,ad as ns,ae as os,af as cs,ag as ls,ah as ds,ai as us,aj as hs,ak as ms,al as ps,am as xs,an as fs,ao as bs,ap as ct,aq as ys,ar as vs,as as gs,at as ws,au as js,av as Ns,aw as Ss,ax as ks}from"./main-DgrLzS5j.js";function Ue(t,s){const r=new Set(s);return t.filter(i=>!r.has(i))}var ne,F,oe,ee,Q,te,ue,he,me,pe,L,ke,_e,lt,Re,Ie,Ce,Ge,_s=(Ge=class extends Rt{constructor(s,r,i){super();V(this,L);V(this,ne);V(this,F);V(this,oe);V(this,ee);V(this,Q);V(this,te);V(this,ue);V(this,he);V(this,me);V(this,pe,[]);q(this,ne,s),q(this,ee,i),q(this,oe,[]),q(this,Q,[]),q(this,F,[]),this.setQueries(r)}onSubscribe(){this.listeners.size===1&&k(this,Q).forEach(s=>{s.subscribe(r=>{W(this,L,Ie).call(this,s,r)})})}onUnsubscribe(){this.listeners.size||this.destroy()}destroy(){this.listeners=new Set,k(this,Q).forEach(s=>{s.destroy()})}setQueries(s,r){q(this,oe,s),q(this,ee,r),je.batch(()=>{const i=k(this,Q),n=W(this,L,Re).call(this,k(this,oe));n.forEach(h=>h.observer.setOptions(h.defaultedQueryOptions));const o=n.map(h=>h.observer),a=o.map(h=>h.getCurrentResult()),l=i.length!==o.length,m=o.some((h,g)=>h!==i[g]),y=l||m,v=y?!0:a.some((h,g)=>{const w=k(this,F)[g];return!w||!It(h,w)});!y&&!v||(y&&(q(this,pe,n),q(this,Q,o)),q(this,F,a),this.hasListeners()&&(y&&(Ue(i,o).forEach(h=>{h.destroy()}),Ue(o,i).forEach(h=>{h.subscribe(g=>{W(this,L,Ie).call(this,h,g)})})),W(this,L,Ce).call(this)))})}getCurrentResult(){return k(this,F)}getQueries(){return k(this,Q).map(s=>s.getCurrentQuery())}getObservers(){return k(this,Q)}getOptimisticResult(s,r){const i=W(this,L,Re).call(this,s),n=i.map(a=>a.observer.getOptimisticResult(a.defaultedQueryOptions)),o=i.map(a=>a.defaultedQueryOptions.queryHash);return[n,a=>W(this,L,_e).call(this,a??n,r,o),()=>W(this,L,ke).call(this,n,i)]}},ne=new WeakMap,F=new WeakMap,oe=new WeakMap,ee=new WeakMap,Q=new WeakMap,te=new WeakMap,ue=new WeakMap,he=new WeakMap,me=new WeakMap,pe=new WeakMap,L=new WeakSet,ke=function(s,r){const i=new Set;return r.map((n,o)=>{const a=s[o];return n.defaultedQueryOptions.notifyOnChangeProps?a:n.observer.trackResult(a,l=>{i.has(l)||(i.add(l),r.forEach(m=>{m.observer.trackProp(l)}))})})},_e=function(s,r,i){if(r){const n=k(this,me),o=i!==void 0&&n!==void 0&&(n.length!==i.length||i.some((a,l)=>a!==n[l]));return(k(this,F)!==k(this,he)||o||r!==k(this,ue))&&(q(this,ue,r),q(this,he,k(this,F)),i!==void 0&&q(this,me,i),q(this,te,Ct(k(this,te),r(s)))),k(this,te)}return s},lt=function(){var s;return!((s=k(this,ee))!=null&&s.combine)||k(this,Q).some((r,i)=>{var n;return r.options.suspense&&((n=k(this,F)[i])==null?void 0:n.data)===void 0})},Re=function(s){const r=new Map;k(this,Q).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 s.forEach(n=>{var l;const o=k(this,ne).defaultQueryOptions(n),a=((l=r.get(o.queryHash))==null?void 0:l.shift())??new Ye(k(this,ne),o);i.push({defaultedQueryOptions:o,observer:a})}),i},Ie=function(s,r){const i=k(this,Q).indexOf(s);i!==-1&&(q(this,F,k(this,F).slice()),k(this,F)[i]=r,W(this,L,Ce).call(this))},Ce=function(){var s;if(this.hasListeners()){const r=W(this,L,lt).call(this),i=k(this,te),n=r?i:W(this,L,_e).call(this,W(this,L,ke).call(this,k(this,F),k(this,pe)),(s=k(this,ee))==null?void 0:s.combine);(r||i!==n)&&je.batch(()=>{this.listeners.forEach(o=>{o(k(this,F))})})}},Ge);function Rs({queries:t,...s},r){const i=Pe(),n=Pt(),o=Et(),a=s.subscribed!==!1,l=u.useMemo(()=>t.map(N=>{const p=i.defaultQueryOptions(N);return p._optimisticResults=n?"isRestoring":a?"optimistic":void 0,p}),[t,i,n,a]);l.forEach(N=>{Lt(N);const p=i.getQueryCache().get(N.queryHash);At(N,o,p)}),Ot(o);const[m]=u.useState(()=>new _s(i,l,s)),[y,v,h]=m.getOptimisticResult(l,s.combine);u.useEffect(()=>{m.setQueries(l,s)},[l,s,m]);const g=!n&&a;u.useSyncExternalStore(u.useCallback(N=>g?m.subscribe(je.batchCalls(N)):Mt,[m,g]),()=>m.getCurrentResult(),()=>m.getCurrentResult());const w=y.some((N,p)=>$e(l[p],N))?y.flatMap((N,p)=>{const j=l[p];if(j&&$e(j,N)){const T=new Ye(i,j);return Tt(j,T,o)}return[]}):[];if(w.length>0)throw Promise.all(w);const R=y.find((N,p)=>{const j=l[p];return j&&Dt({result:N,errorResetBoundary:o,throwOnError:j.throwOnError,query:i.getQueryCache().get(j.queryHash),suspense:j.suspense})});if(R)throw R.error;return v(h())}/**
2
+ * @license lucide-react v1.68.0 - ISC
3
+ *
4
+ * This source code is licensed under the ISC license.
5
+ * See the LICENSE file in the root directory of this source tree.
6
+ */const dt={name:"arrow-up-right",size:24,node:[["path",{d:"M7 7h10v10",key:"1tivn9"}],["path",{d:"M7 17 17 7",key:"1vkiza"}]]};dt.node;const ut=re(dt);/**
7
+ * @license lucide-react v1.68.0 - ISC
8
+ *
9
+ * This source code is licensed under the ISC license.
10
+ * See the LICENSE file in the root directory of this source tree.
11
+ */const ht={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"}]]};ht.node;const Is=re(ht);/**
12
+ * @license lucide-react v1.68.0 - ISC
13
+ *
14
+ * This source code is licensed under the ISC license.
15
+ * See the LICENSE file in the root directory of this source tree.
16
+ */const mt={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"]};mt.node;const Cs=re(mt);/**
17
+ * @license lucide-react v1.68.0 - ISC
18
+ *
19
+ * This source code is licensed under the ISC license.
20
+ * See the LICENSE file in the root directory of this source tree.
21
+ */const pt={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"}]]};pt.node;const Ke=re(pt);/**
22
+ * @license lucide-react v1.68.0 - ISC
23
+ *
24
+ * This source code is licensed under the ISC license.
25
+ * See the LICENSE file in the root directory of this source tree.
26
+ */const xt={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"}]]};xt.node;const Ps=re(xt);/**
27
+ * @license lucide-react v1.68.0 - ISC
28
+ *
29
+ * This source code is licensed under the ISC license.
30
+ * See the LICENSE file in the root directory of this source tree.
31
+ */const ft={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"}]]};ft.node;const Es=re(ft);/**
32
+ * @license lucide-react v1.68.0 - ISC
33
+ *
34
+ * This source code is licensed under the ISC license.
35
+ * See the LICENSE file in the root directory of this source tree.
36
+ */const bt={name:"loader-circle",size:24,node:[["path",{d:"M21 12a9 9 0 1 1-6.219-8.56",key:"13zald"}]],aliases:["loader-2"]};bt.node;const yt=re(bt),Ls=({project:t,onRename:s,onRemove:r,onSetPinned:i})=>{const n=le(),o=u.useRef(null),a=u.useRef(null),l=u.useRef(null),[m,y]=u.useState(!1),[v,h]=u.useState(!1),g=!!t.pinnedAt,[w,R]=u.useState(null),[N,p]=u.useState(t.name),[j,T]=u.useState(!1),[f,S]=u.useState(null),{containerRef:C,onKeyDown:O}=qt();let Y=w==="rename"?"Save name":"Remove from projects";j&&(Y="Saving…"),u.useEffect(()=>{var M;if(v||!l.current)return;const x=l.current==="button"?a:o;l.current=null,(M=x.current)==null||M.focus()},[v]);const A=x=>{y(x),n==null||n.capture(x?"library_project_menu_opened":"library_project_menu_closed")},E=async x=>{if(!v){l.current=x,h(!0),n==null||n.capture("library_project_pin_clicked",{is_pinning:!g,method:x});try{await i(t.id,!g)}catch(M){at.error(Fe(M,"Could not save pin. Try again."))}finally{h(!1)}}},B=x=>{A(!1),p(t.name),S(null),R(x),n==null||n.capture("library_project_action_opened",{action:x})},K=x=>{n==null||n.capture("library_project_action_closed",{action:w,outcome:x}),R(null)},_=async()=>{if(!(j||!w||w==="rename"&&!N.trim())){T(!0),S(null);try{w==="rename"?await s(t.id,N.trim()):await r(t.id),K("completed")}catch(x){S(Fe(x,"Could not save changes. Try again."))}finally{T(!1)}}};return e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:`flex items-center gap-0.5 group-hover/project:pointer-events-auto group-hover/project:opacity-100 has-[:focus-visible]:pointer-events-auto has-[:focus-visible]:opacity-100 [@media(hover:none)]:pointer-events-auto [@media(hover:none)]:opacity-100 ${m?"pointer-events-auto opacity-100":"pointer-events-none opacity-0"}`,children:[e.jsx(G,{ref:a,type:"button",variant:"ghost",size:"icon-compact",title:g?"Unpin project":"Pin project","aria-label":`${g?"Unpin":"Pin"} ${t.name}`,"aria-pressed":g,disabled:v,onClick:()=>{E("button")},children:e.jsx(Ne,{weight:g?"fill":"bold",size:16,"aria-hidden":!0})}),e.jsxs(zt,{open:m,onOpenChange:A,children:[e.jsx($t,{asChild:!0,children:e.jsx(G,{ref:o,type:"button",variant:"ghost",size:"icon-compact","aria-label":`Actions for ${t.name}`,children:e.jsx(Cs,{size:16,"aria-hidden":!0})})}),e.jsx(Ft,{children:e.jsxs(Ht,{"data-rivet-private":!0,ref:C,onKeyDown:O,role:"menu","aria-label":"Project actions",align:"start",sideOffset:4,onCloseAutoFocus:x=>{w&&x.preventDefault()},className:"ph-no-capture bg-surface-2 text-content z-ui-primary min-w-44 rounded-lg p-1 shadow-lg",children:[e.jsxs("button",{type:"button",role:"menuitem","data-menu-item":!0,disabled:v,onClick:()=>{A(!1),E("menu")},className:"hover:bg-hover focus:bg-hover flex w-full items-center gap-2 rounded-md px-3 py-2 text-xs focus:outline-none disabled:opacity-50",children:[e.jsx(Ne,{size:14,weight:g?"fill":"bold","aria-hidden":!0}),g?"Unpin":"Pin"]}),e.jsxs("button",{type:"button",role:"menuitem","data-menu-item":!0,onClick:()=>B("rename"),className:"hover:bg-hover focus:bg-hover flex w-full items-center gap-2 rounded-md px-3 py-2 text-xs focus:outline-none",children:[e.jsx(Ut,{size:14,"aria-hidden":!0}),"Rename"]}),e.jsxs("button",{type:"button",role:"menuitem","data-menu-item":!0,onClick:()=>B("remove"),className:"hover:bg-hover focus:bg-hover flex w-full items-center gap-2 rounded-md px-3 py-2 text-xs focus:outline-none",children:[e.jsx(Je,{size:14,"aria-hidden":!0}),"Remove from projects"]})]})})]})]}),e.jsx(Xe,{open:w!==null,onOpenChange:x=>{!x&&!j&&K("cancelled")},children:e.jsxs(Ze,{children:[e.jsx(et,{className:"z-modal fixed inset-0 bg-black/60"}),e.jsxs(tt,{"data-rivet-private":!0,onCloseAutoFocus:x=>{var M;x.preventDefault(),(M=o.current)==null||M.focus()},className:"ph-no-capture bg-surface-2 text-content z-ui-secondary fixed top-1/2 left-1/2 w-[calc(100%-2rem)] max-w-sm -translate-x-1/2 -translate-y-1/2 rounded-xl p-6 shadow-lg",children:[e.jsx(st,{className:"text-base font-medium break-words",children:w==="rename"?"Rename project":`Remove “${t.name}” from projects?`}),e.jsx(rt,{className:"mt-2 text-sm leading-6 text-white/60",children:w==="rename"?"Choose a display name for this project. Its folder name will stay the same.":"Your folders and saved variants will remain on this computer. Open the project again to restore it."}),e.jsxs("form",{onSubmit:x=>{x.preventDefault(),_()},children:[w==="rename"?e.jsxs("label",{className:"mt-5 block text-xs text-white/70",children:["Project name",e.jsx("input",{autoFocus:!0,value:N,onChange:x=>p(x.target.value),maxLength:Kt,disabled:j,className:"mt-2 w-full rounded-lg border border-white/15 bg-white/5 px-3 py-2 text-sm text-white outline-none focus:border-white/50"})]}):null,f?e.jsx("p",{role:"alert",className:"mt-4 text-xs text-red-300",children:f}):null,e.jsxs("div",{className:"mt-6 flex justify-end gap-2",children:[e.jsx(G,{type:"button",variant:"ghost",disabled:j,onClick:()=>K("cancelled"),children:"Cancel"}),e.jsx(G,{type:"submit",variant:"secondary",disabled:j||w==="rename"&&!N.trim(),children:Y})]})]})]})]})})]})},vt=6e4,gt=60*vt,ve=24*gt,As=7*ve,Os=30*ve,Ms=365*ve,Ts=[["year",Ms],["month",Os],["week",As],["day",ve],["hour",gt],["minute",vt]],Ds=new Intl.RelativeTimeFormat("en",{numeric:"always"}),qs=t=>{const s=new Map;for(const r of t??[]){const i=Date.parse(r.createdAt);if(!Number.isFinite(i))continue;const n=s.get(r.projectId);(n===void 0||i>n)&&s.set(r.projectId,i)}return s},zs=({projects:t,latestEdits:s})=>[...t].sort((r,i)=>{if(r.pinnedAt&&!i.pinnedAt)return-1;if(i.pinnedAt&&!r.pinnedAt)return 1;if(r.pinnedAt&&i.pinnedAt)return r.pinnedAt.localeCompare(i.pinnedAt)||r.id.localeCompare(i.id);const n=s.get(r.id),o=s.get(i.id);return n===void 0&&o!==void 0?1:o===void 0&&n!==void 0?-1:(o??0)-(n??0)||r.name.localeCompare(i.name)||r.id.localeCompare(i.id)}),$s=({editedAt:t,now:s})=>{const r=Math.max(0,s-t);for(const[i,n]of Ts)if(r>=n)return`Edited ${Ds.format(-Math.floor(r/n),i)}`;return"Edited just now"},wt=u.createContext(null),Fs=({navigation:t,onBrowseProjects:s,controls:r,isHeaderVisible:i=!0,children:n})=>{const[o,a]=u.useState(null);return e.jsxs(wt.Provider,{value:o,children:[i?e.jsxs("div",{className:"grid shrink-0 grid-cols-[auto_minmax(0,1fr)] items-center gap-4 px-10 py-5 max-sm:px-5 sm:grid-cols-[auto_minmax(0,1fr)_auto]",children:[e.jsx("button",{onClick:s,"aria-label":"Projects",className:"flex items-center",children:e.jsx("img",{src:Qt,alt:"","aria-hidden":!0,draggable:!1,className:"h-8 w-8"})}),e.jsx("div",{ref:a,className:"col-span-2 row-start-2 flex min-w-0 items-center gap-3 sm:col-span-1 sm:col-start-2 sm:row-start-1",children:r}),e.jsx("div",{className:"col-start-2 row-start-1 justify-self-end sm:col-start-3",children:t})]}):null,n]})},jt=({children:t})=>{const s=u.useContext(wt);return s?Bt.createPortal(t,s):null},Ee=({label:t,value:s,onChange:r,onBlur:i,isDisabled:n=!1})=>e.jsxs("label",{className:"flex w-64 min-w-0 items-center gap-2 rounded-lg border border-white/[0.08] bg-white/[0.02] px-3 py-2.5 text-white/35 max-sm:flex-1",children:[e.jsx(Vt,{size:14,className:"shrink-0","aria-hidden":!0}),e.jsx("input",{type:"search","aria-label":t,placeholder:`${t}…`,value:s,onChange:o=>r==null?void 0:r(o.target.value),onBlur:i,disabled:n,className:"min-w-0 flex-1 bg-transparent text-xs text-white outline-none placeholder:text-white/30 disabled:opacity-40 [&::-webkit-search-cancel-button]:hidden"})]}),Hs=({projects:t,variants:s,historyError:r,onRetryHistory:i,projectPreviews:n={},selectedProjectId:o,onSelectProject:a,onBrowseLibrary:l,onOpenProject:m,onRenameProject:y,onRemoveProject:v,onSetProjectPinned:h,isOpeningProject:g=!1,projectOpenError:w,onSearchCompleted:R,accountMenu:N,navigation:p,view:j="library",children:T})=>{const[f,S]=u.useState(""),C=o===null||T===void 0,O=u.useRef(null),Y=qs(s),A=Date.now(),E=t.find(_=>_.id===o),B=new Map;if(s)for(const _ of t)_.historyIssue||B.set(_.id,0);for(const{projectId:_}of s??[]){const x=B.get(_);x!==void 0&&B.set(_,x+1)}const K=zs({projects:t.filter(_=>_.name.toLowerCase().includes(f.toLowerCase())),latestEdits:Y});return e.jsx("div",{className:"ph-no-capture bg-background text-foreground flex h-screen min-h-0","data-rivet-private":!0,children:e.jsx("main",{className:"relative flex min-w-0 flex-1 flex-col overflow-hidden",children:e.jsxs(Fs,{navigation:p,onBrowseProjects:l,isHeaderVisible:C,controls:j==="library"?e.jsx(Ee,{label:"Search projects",value:f,onChange:S,onBlur:()=>R==null?void 0:R(f.length)}):null,children:[w?e.jsx("p",{role:"alert",className:"px-10 pt-5 text-xs text-red-200",children:w}):null,T!==void 0?T:e.jsxs("div",{className:"min-h-0 flex-1 overflow-y-auto px-10 pb-10 max-sm:px-5",children:[e.jsx("h1",{ref:O,tabIndex:-1,className:"sr-only",children:"Projects"}),e.jsx("div",{className:"mb-9 flex items-center justify-end",children:e.jsx(G,{onClick:()=>m(),variant:"secondary",disabled:g,leadingIcon:Ke,className:"shrink-0",children:"Open project…"})}),r?e.jsxs("div",{role:"alert",className:"mb-6 flex items-center gap-3 text-xs text-white/60",children:[e.jsx("span",{children:r}),e.jsx("button",{onClick:i,className:"shrink-0 underline underline-offset-4",children:"Retry history"})]}):null,E!=null&&E.issue?e.jsx("p",{role:"alert",className:"mb-6 rounded-lg border border-amber-200/10 bg-amber-200/[0.03] p-4 text-xs leading-6 text-white/70",children:E.issue}):null,E&&!E.isAvailable?e.jsxs("div",{className:"mb-6 flex items-center justify-between gap-4 rounded-lg border border-amber-200/10 bg-amber-200/[0.03] p-4 text-xs text-white/60",children:[e.jsxs("span",{children:["Locate ",E.name,"’s working folder to open its workspace."]}),e.jsx("button",{disabled:g,onClick:()=>m(E.id),className:"shrink-0 text-white underline decoration-white/30 underline-offset-4",children:"Locate folder"})]}):null,e.jsxs("div",{className:"grid items-start gap-x-6 gap-y-8 sm:grid-cols-2",children:[K.map(_=>{const x=B.get(_.id);let M="Loading variants…";x!==void 0?M=`${x.toLocaleString()} ${x===1?"variant":"variants"}`:(r||_.historyIssue)&&(M="Variants unavailable");const d=Y.get(_.id);let I="No edits yet";r||_.historyIssue?I="Edit history unavailable":s===void 0?I="Loading edits…":x&&(I="Edit date unavailable");const $=n[_.id];return e.jsxs("div",{className:"group/project grid min-w-0",children:[e.jsxs("button",{onClick:()=>{S(""),a(_.id)},className:"group col-start-1 row-span-2 row-start-1 -m-2 grid w-[calc(100%+1rem)] min-w-0 grid-rows-subgrid rounded-2xl p-2 text-left hover:bg-white/[0.06] focus-visible:bg-white/[0.06] focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-4 focus-visible:outline-white/60",children:[e.jsx("span",{className:"group-hover:border-border relative block aspect-video overflow-hidden rounded-xl border border-white/[0.08] bg-white/[0.02]",children:$?e.jsx("img",{src:$.dataUrl,alt:`${_.name} — ${$.label}`,draggable:!1,className:"h-full w-full object-cover object-top"}):null}),e.jsxs("span",{className:"mt-3 block pr-16",children:[e.jsxs("span",{className:"flex min-w-0 items-center gap-1.5 text-sm font-medium",children:[_.pinnedAt?e.jsx(Ne,{size:12,weight:"fill","aria-hidden":!0,className:"text-content-muted shrink-0"}):null,e.jsx("span",{className:"truncate",children:_.name})]}),e.jsxs("span",{className:"mt-2 flex min-w-0 flex-wrap items-center gap-x-3 gap-y-1 text-xs text-white/40 group-hover:text-white/65 group-focus-visible:text-white/65",children:[d!==void 0?e.jsx("time",{dateTime:new Date(d).toISOString(),title:new Date(d).toLocaleString(),children:$s({editedAt:d,now:A})}):e.jsx("span",{children:I}),e.jsx("span",{className:"shrink-0",children:M})]}),_.isAvailable?null:e.jsx("span",{className:"mt-2 block text-xs text-amber-200/65",children:"Folder unavailable"})]})]}),e.jsx("div",{className:"z-content col-start-1 row-start-2 mt-3 self-center justify-self-end",children:e.jsx(Ls,{project:_,onRename:y,onSetPinned:h,onRemove:async J=>{var ae;await v(J),(ae=O.current)==null||ae.focus()}})})]},_.id)}),K.length===0?e.jsxs("div",{className:"col-span-full flex min-h-80 flex-col items-center justify-center rounded-xl border border-dashed border-white/10 px-8 text-center",children:[e.jsx(Ke,{size:26,className:"mb-5 text-white/25"}),e.jsx("h2",{className:"text-sm font-medium",children:f?"No matching projects":"Add your projects"}),e.jsx("p",{className:"mt-2 max-w-sm text-xs leading-6 text-white/40",children:f?"Try another project name.":"Open an existing project to add it as a project here"}),f?null:e.jsx(G,{onClick:()=>m(),variant:"secondary",disabled:g,className:"mt-5",children:"Open project"})]}):null]})]}),C&&N?e.jsx("footer",{className:"border-main-border bg-main-light shrink-0 border-t px-2.5 py-2.5",children:N}):null]})})})},Nt=8,Qe=1,Us=({children:t})=>e.jsx("ul",{className:"grid grid-cols-1 items-start gap-x-5 min-[400px]:grid-cols-2 md:grid-cols-3 xl:grid-cols-4 2xl:grid-cols-5",style:{gridAutoRows:`${Nt}px`},children:t}),Ks=({children:t})=>{const[s,r]=u.useState(Qe),i=u.useRef(null),n=u.useCallback(o=>{var l;if((l=i.current)==null||l.disconnect(),!o)return;const a=()=>r(Math.max(Qe,Math.ceil(o.getBoundingClientRect().height/Nt)));a(),i.current=new ResizeObserver(a),i.current.observe(o)},[]);return e.jsx("li",{className:"min-w-0",style:{gridRowEnd:`span ${s}`},children:e.jsx("div",{ref:n,className:"relative pb-8",children:t})})},Qs=async({profileId:t,referenceId:s,hash:r,signal:i})=>{const n=await Wt(`/api/library/profile/references/${encodeURIComponent(s)}/media/${r}?${new URLSearchParams({profileId:t})}`,{signal:i});if(!n.ok)throw new Error("Image unavailable");return n.blob()},Bs="200px",St=({profileId:t,referenceId:s,hash:r,title:i,isDetail:n=!1})=>{const[o,a]=u.useState(!1),[l,m]=u.useState(!1),y=u.useRef(null),v=u.useCallback(w=>{var R;(R=y.current)==null||R.disconnect(),w&&(y.current=new IntersectionObserver(N=>{var p;N.some(j=>j.isIntersecting)&&(a(!0),(p=y.current)==null||p.disconnect())},{rootMargin:Bs}),y.current.observe(w))},[]),h=Z({queryKey:z.designLibraryImage({profileId:t,referenceId:s,hash:r}),queryFn:async({signal:w})=>{const R=await Qs({profileId:t,referenceId:s,hash:r,signal:w});return new Promise((N,p)=>{const j=new FileReader;j.onload=()=>typeof j.result=="string"?N(j.result):p(new Error("Image unavailable")),j.onerror=()=>p(new Error("Image unavailable")),j.readAsDataURL(R)})},enabled:o,staleTime:1/0,gcTime:0,retry:!1}),g=!!h.data&&!l;return e.jsxs("div",{ref:v,className:be("flex items-center justify-center overflow-hidden bg-white/[0.025]",n?"min-h-32":null,!n&&!g?"aspect-[4/3]":null),children:[h.isError||l?e.jsxs("span",{className:"flex items-center gap-2 p-5 text-xs text-white/35",children:[e.jsx(Ps,{size:16,"aria-hidden":!0}),"Image unavailable"]}):null,h.data&&!l?e.jsx("img",{src:h.data,alt:i,onError:()=>m(!0),className:n?"max-h-[65vh] w-full object-contain":"block h-auto w-full"}):null,!h.data&&!h.isError?e.jsx("span",{className:"text-xs text-white/25",children:"Loading image…"}):null]})},Vs={arena:"Are.na",cosmos:"Cosmos",pinterest:"Pinterest",x:"X",image:"Uploaded image",text:"Saved text",variant:"Saved direction",pdf:"PDF"},Ws=({provider:t})=>e.jsxs("span",{className:"inline-flex items-center gap-1.5",children:[t==="arena"||t==="cosmos"||t==="pinterest"||t==="x"?e.jsx(Gt,{provider:t,className:"h-3.5 w-3.5"}):null,Vs[t]]}),Gs=({label:t,onCopy:s,referenceCount:r=1})=>{const i=le(),[n,o]=u.useState("idle"),a=async()=>{o("copying");try{await s(),o("copied"),i==null||i.capture("library_reference_copy_completed",{reference_count:r,copy_kind:"agent"})}catch{o("failed"),at.error("Could not copy. Check clipboard access and try again."),i==null||i.capture("library_reference_copy_failed",{reference_count:r,copy_kind:"agent"})}},l=n==="copied"?it:Is,m=n==="copied"?"Copied":t;return e.jsxs(e.Fragment,{children:[e.jsx(G,{variant:"secondary",size:"compact",leadingIcon:l,disabled:n==="copying",onClick:()=>void a(),"aria-label":m,"aria-live":"polite",children:e.jsxs("span",{className:"grid whitespace-nowrap",children:[e.jsx("span",{"aria-hidden":!0,className:"invisible col-start-1 row-start-1",children:t}),e.jsx("span",{className:"col-start-1 row-start-1",children:m})]})}),n==="failed"?e.jsx("span",{role:"alert",className:"sr-only",children:"Could not copy. Check clipboard access and try again."}):null]})},kt=se({id:U(),title:U(),provider:nt,isIncluded:ye()}),Ys=Yt.extend({sourceIds:ce(U()),observation:Jt.nullable()}),Js=se({profileId:U(),revision:ie(),isEnabled:ye(),sources:ce(kt),references:ce(Ys)});se({query:U().trim().min(2).max(1e3),sourceId:U().min(1).max(200).optional(),limit:ie().int().min(1).max(100).default(24),runtime:Xt.default("codex")});const Xs=se({profileId:U(),query:U(),coverage:se({saved:ie(),analyzed:ie(),indexed:ie()}),results:ce(se({id:U(),key:U(),title:U(),provider:nt,url:U().optional(),description:U().nullable(),imageCount:ie(),sources:ce(kt),isIncluded:ye()}))}),_t=50,Be=12,Zs=U().regex(/^[a-f0-9]{12,64}@[1-9][0-9]*$/).refine(t=>Number.isSafeInteger(Number(t.split("@")[1])),"Invalid reference revision"),er=se({profileId:U().uuid(),keys:ce(Zs).min(1).max(_t),isDetailed:ye().default(!1)}),tr=t=>{const s=new Map;for(const r of t){const i=r.id.slice(0,Be);s.set(i,(s.get(i)??0)+1)}return new Map(t.map(r=>{const i=r.id.slice(0,Be),n=s.get(i)===1?i:r.id;return[r.id,`${n}@${r.revision}`]}))},sr=({profileId:t,referenceKeys:s})=>{const r=er.parse({profileId:t,keys:s});return["rivet","profile","reference",r.profileId,...r.keys].join(" ")},Le=t=>{const s=t.referenceKeys.length===1?"Copy to agent":`Copy ${t.referenceKeys.length} to agent`;return e.jsx(Gs,{label:s,referenceCount:t.referenceKeys.length,onCopy:()=>navigator.clipboard.writeText(sr(t))})},rr=({profileId:t,reference:s,sources:r,referenceKey:i,children:n})=>{var m,y;const o=le(),a=s.title||"Untitled reference",l=s.url&&/^https?:\/\//i.test(s.url)?s.url:void 0;return e.jsxs(Xe,{onOpenChange:v=>o==null?void 0:o.capture(v?"library_reference_opened":"library_reference_closed",{provider:s.provider,media_count:s.media.length}),children:[e.jsx(Zt,{asChild:!0,children:n}),e.jsxs(Ze,{children:[e.jsx(et,{className:"fixed inset-0 z-50 bg-black/55"}),e.jsxs(tt,{className:"ph-no-capture bg-background text-foreground fixed inset-y-0 right-0 z-50 flex w-full max-w-2xl flex-col border-l border-white/10 shadow-2xl outline-none","data-rivet-private":!0,children:[e.jsxs("header",{className:"flex items-start justify-between gap-6 border-b border-white/[0.07] px-7 py-6",children:[e.jsxs("div",{className:"min-w-0",children:[e.jsx(rt,{className:"mb-2 text-xs text-white/40",children:e.jsx(Ws,{provider:s.provider})}),e.jsx(st,{className:"text-lg leading-snug font-medium tracking-tight break-words",children:a})]}),e.jsx(es,{asChild:!0,children:e.jsx(G,{variant:"ghost",size:"icon-compact","aria-label":"Close reference",children:e.jsx(Je,{size:18})})})]}),e.jsx("div",{className:"border-b border-white/[0.07] px-7 py-4",children:e.jsx(Le,{profileId:t,referenceKeys:[i]},s.revision)}),e.jsxs("div",{className:"min-h-0 flex-1 space-y-7 overflow-y-auto px-7 py-6",children:[s.media.map(v=>e.jsx(St,{profileId:t,referenceId:s.id,hash:v.hash,title:a,isDetail:!0},v.hash)),s.text?e.jsx("p",{className:"text-sm leading-7 break-words whitespace-pre-wrap text-white/70",children:s.text}):null,s.note?e.jsxs("section",{children:[e.jsx("h3",{className:"mb-2 text-xs font-medium text-white/45",children:"Your note"}),e.jsx("p",{className:"text-sm leading-7 break-words whitespace-pre-wrap text-white/75",children:s.note})]}):null,e.jsxs("section",{children:[e.jsx("h3",{className:"mb-2 text-xs font-medium text-white/45",children:((m=s.observation)==null?void 0:m.evidence)==="preference"?"Your preference":"Rivet’s analysis"}),e.jsx("p",{className:"text-sm leading-7 break-words whitespace-pre-wrap text-white/75",children:((y=s.observation)==null?void 0:y.description)??s.unsupportedReason??"No analysis saved yet."})]}),e.jsxs("section",{children:[e.jsx("h3",{className:"mb-3 text-xs font-medium text-white/45",children:"Saved in"}),e.jsx("ul",{className:"space-y-2",children:r.filter(v=>s.sourceIds.includes(v.id)).map(v=>e.jsxs("li",{className:"flex flex-wrap items-center justify-between gap-2 rounded-md bg-white/[0.035] px-3 py-2.5 text-xs",children:[e.jsx("span",{children:v.title}),v.isIncluded?null:e.jsx("span",{className:"text-white/35",children:"Excluded from generation"})]},v.id))})]}),l?e.jsxs("a",{href:l,target:"_blank",rel:"noopener noreferrer",onClick:()=>o==null?void 0:o.capture("library_reference_original_opened",{provider:s.provider}),className:"inline-flex items-center gap-1 text-xs text-white/70 underline-offset-4 hover:underline",children:["Open original",e.jsx(ut,{size:14,"aria-hidden":!0})]}):null]})]})]})]})},Ve="opacity-0 group-hover/card:opacity-100 group-focus-within/card:opacity-100 [@media(hover:none)]:opacity-100",ar="pointer-events-none group-hover/card:pointer-events-auto group-focus-within/card:pointer-events-auto [@media(hover:none)]:pointer-events-auto",ir=({profileId:t,reference:s,sources:r,referenceKey:i,isSelected:n,isSelectionDisabled:o,onSelect:a})=>{var y;const l=s.title||"Untitled reference",m=s.media[0];return e.jsxs("div",{className:"group/card relative",children:[e.jsx(rr,{profileId:t,reference:s,sources:r,referenceKey:i,children:e.jsx("button",{"aria-label":`Inspect ${l}`,className:"block w-full overflow-hidden text-left outline-none focus-visible:ring-2 focus-visible:ring-white/50 focus-visible:ring-offset-4 focus-visible:ring-offset-background",children:m?e.jsx(St,{profileId:t,referenceId:s.id,hash:m.hash,title:l},m.hash):e.jsxs("div",{className:"min-h-44 border border-white/10 bg-white/[0.03] p-5 pb-14",children:[e.jsx("p",{className:"text-sm font-medium text-white/80",children:l}),e.jsx("p",{className:"mt-3 line-clamp-3 text-xs leading-5 text-white/45",children:((y=s.observation)==null?void 0:y.description)??s.text})]})})}),e.jsx("div",{"aria-hidden":!0,className:be("pointer-events-none absolute inset-0 bg-black/40",Ve)}),e.jsxs("div",{className:be("absolute inset-x-0 bottom-0 z-10 flex items-center justify-between gap-2 p-2",n?null:Ve,n?null:ar),children:[e.jsxs("label",{className:"relative shrink-0 cursor-pointer",title:n?"Deselect":"Select",children:[e.jsx("input",{type:"checkbox","aria-label":`Select ${l}`,checked:n,disabled:o,onChange:a,className:"peer absolute inset-0 h-full w-full cursor-pointer opacity-0 disabled:cursor-default"}),e.jsx("span",{className:be("flex h-7 w-7 items-center justify-center rounded-full border shadow-sm peer-focus-visible:ring-2 peer-focus-visible:ring-white peer-focus-visible:ring-offset-2 peer-disabled:opacity-40",n?"border-orange-400 bg-orange-500 text-white":"border-white/35 bg-black/60 text-white/70"),children:e.jsx(it,{size:14,"aria-hidden":!0})})]}),e.jsx(Le,{profileId:t,referenceKeys:[i]},s.revision)]})]})},xe=24,nr="200px",or=350,cr=100,lr=({snapshot:t})=>{var M;const s=le(),[r,i]=u.useState(""),[n,o]=u.useState(""),a=u.useRef(null),[l,m]=u.useState(""),[y,v]=u.useState(xe),[h,g]=u.useState([]),w=u.useRef(null),R=tr(t.references),N=t.references.filter(d=>d.media.length>0),p=Z({queryKey:z.designReferenceSearch({profileId:t.profileId,revision:t.revision,references:t.references.map(({id:d,revision:I,sourceIds:$})=>[d,I,$]),search:n,sourceId:l}),queryFn:({signal:d})=>H("/profile/search",{schema:Xs,method:"POST",body:{query:n,sourceId:l||void 0,limit:cr},signal:d}),enabled:n.length>=2&&t.references.length>0,retry:!1}),j=t.references.filter(d=>h.includes(d.id)),T=j.flatMap(d=>{const I=R.get(d.id);return I?[I]:[]}),f=r.trim(),S=f.length>=2,C=S&&t.references.length>0&&(n!==f||p.isLoading),O=S&&!C&&p.isError,Y=new Map(t.references.map(d=>[d.id,d])),A=S?(((M=p.data)==null?void 0:M.results)??[]).flatMap(({id:d})=>{const I=Y.get(d);return I?[I]:[]}):N.filter(d=>!l||d.sourceIds.includes(l)),E=N.length>0,B=A.length,K=t.references.length>0?"No images yet":"Your library starts here",_=u.useCallback(d=>{var I;(I=w.current)==null||I.disconnect(),d&&(w.current=new IntersectionObserver($=>{var J;$.some(ae=>ae.isIntersecting)&&((J=w.current)==null||J.disconnect(),v(Math.min(y+xe,B)))},{root:d.parentElement,rootMargin:nr}),w.current.observe(d))},[y,B]),x=d=>{const I=j.map(J=>J.id),$=I.includes(d)?I.filter(J=>J!==d):[...I,d];g($),s==null||s.capture("library_reference_selection_changed",{selected_count:$.length})};return e.jsxs("div",{className:"ph-no-capture flex min-h-0 flex-1 flex-col","data-rivet-private":!0,children:[e.jsx(jt,{children:e.jsx(Ee,{label:"Search references",value:r,onChange:d=>{i(d),a.current&&clearTimeout(a.current),a.current=setTimeout(()=>o(d.trim()),or),v(xe)},onBlur:()=>{var d;return s==null?void 0:s.capture("library_reference_search_completed",{query_length:r.length,result_count:S?((d=p.data)==null?void 0:d.results.length)??0:A.length})}})}),e.jsxs("div",{className:"min-h-0 flex-1 overflow-y-auto px-10 pb-10 max-sm:px-5",children:[!t.isEnabled&&E?e.jsx("p",{className:"mb-5 text-xs text-white/40",children:"Automatic use is paused. Your saved references are still here."}):null,E?e.jsx("div",{className:"mb-7 flex flex-wrap items-center gap-3",children:e.jsxs("select",{"aria-label":"Source",value:l,onChange:d=>{m(d.target.value),v(xe),s==null||s.capture("library_reference_source_filtered",{is_filtered:!!d.target.value})},className:"bg-background max-w-64 rounded-lg border border-white/[0.08] px-3 py-2.5 text-xs text-white/60 focus-visible:outline-2",children:[e.jsx("option",{value:"",children:"All sources"}),t.sources.map(d=>e.jsx("option",{value:d.id,children:d.title},d.id))]})}):null,T.length?e.jsxs("div",{className:"bg-background sticky top-0 z-20 mb-6 flex flex-wrap items-center gap-3 rounded-lg border border-white/10 p-3 shadow-lg",children:[e.jsxs("span",{className:"text-xs text-white/50",children:[T.length," selected"]}),e.jsx(Le,{profileId:t.profileId,referenceKeys:T},T.join(" ")),e.jsx(G,{variant:"ghost",size:"compact",onClick:()=>{g([]),s==null||s.capture("library_reference_selection_changed",{selected_count:0})},children:"Clear selection"})]}):null,S&&p.data&&p.data.coverage.analyzed<p.data.coverage.saved?e.jsxs("p",{role:"status",className:"mb-5 text-xs text-white/45",children:[p.data.coverage.analyzed," of"," ",p.data.coverage.saved," references analyzed; results may be incomplete."]}):null,C?e.jsx("p",{role:"status",className:"py-10 text-center text-xs text-white/45",children:"Searching references…"}):null,O?e.jsxs("div",{role:"alert",className:"py-10 text-center text-xs text-white/50",children:[e.jsxs("p",{children:["Search is unavailable: ",p.error.message]}),e.jsx(G,{variant:"ghost",onClick:()=>{s==null||s.capture("library_reference_search_retry"),p.refetch()},children:"Try again"})]}):null,!C&&!O&&A.length?e.jsx(Us,{children:A.slice(0,y).map(d=>{const I=R.get(d.id);return I?e.jsx(Ks,{children:e.jsx(ir,{profileId:t.profileId,reference:d,sources:t.sources,referenceKey:I,isSelected:h.includes(d.id),isSelectionDisabled:!h.includes(d.id)&&T.length>=_t,onSelect:()=>x(d.id)})},d.id):null})}):null,!C&&!O&&!A.length?e.jsxs("div",{className:"flex min-h-72 flex-col items-center justify-center rounded-xl border border-dashed border-white/[0.08] px-6 text-center",children:[e.jsx(Es,{size:28,strokeWidth:1,className:"mb-5 text-white/25","aria-hidden":!0}),e.jsx("h2",{className:"text-sm text-white/75",children:E||S?"No references found":K}),e.jsx("p",{className:"mt-2 max-w-sm text-xs leading-6 text-white/35",children:E||S?"Try another search or choose a different source.":"Ask your agent to save a design reference with an image to your library. It will appear here, ready to browse."})]}):null,!C&&!O&&A.length>y?e.jsx("div",{ref:_,role:"status",className:"py-8 text-center text-xs text-white/35",children:"Loading more references…"}):null]})]})},dr=1e4,ur=({onBrowseProjects:t})=>{var a,l;const s=ot(),r=le(),i=Z({queryKey:z.designLibrary((a=s.data)==null?void 0:a.userId,(l=s.data)==null?void 0:l.isAuthenticated),queryFn:({signal:m})=>H("/profile/library",{schema:Js,signal:m}),enabled:!s.isPending,refetchInterval:dr,gcTime:0,retry:!1}),n=()=>{r==null||r.capture("library_reference_retry"),i.refetch()},o=e.jsx(jt,{children:e.jsx(Ee,{label:"Search references",value:"",isDisabled:!0})});return i.isError&&!i.data?e.jsxs("div",{className:"flex min-h-0 flex-1 flex-col",children:[o,e.jsxs("div",{className:"m-auto max-w-md px-8 text-center",children:[e.jsx("h1",{className:"mb-3 text-lg font-medium",children:"References"}),e.jsx("p",{role:"alert",className:"text-sm text-white/50",children:i.error.message}),e.jsx("div",{className:"mt-5 flex justify-center gap-3",children:e.jsx(G,{variant:"ghost",onClick:t,children:"Projects"})})]})]}):i.data?e.jsxs("div",{className:"flex min-h-0 flex-1 flex-col",children:[i.isError?e.jsxs("div",{role:"alert",className:"flex items-center justify-between gap-4 border-b border-white/10 px-8 py-3 text-xs text-white/50",children:[e.jsx("span",{children:"Could not refresh. Showing the last saved results."}),e.jsx(G,{variant:"ghost",onClick:n,children:"Try again"})]}):null,e.jsx(lr,{snapshot:i.data},i.data.profileId)]}):e.jsxs("div",{className:"flex min-h-0 flex-1 flex-col",children:[o,e.jsx("p",{role:"status",className:"m-auto text-xs text-white/40",children:"Loading references…"})]})},hr=({view:t,onNavigate:s})=>e.jsx("nav",{"aria-label":"Library",className:"flex items-center gap-1 rounded-lg bg-white/[0.03] p-1",children:["library","references"].map(r=>e.jsx("a",{href:r==="library"?"/rivet/library":"/rivet/library/references","aria-current":t===r?"page":void 0,onClick:i=>{i.metaKey||i.ctrlKey||i.shiftKey||i.altKey||(i.preventDefault(),s(r))},className:ts("rounded-md px-3 py-2 text-xs focus-visible:outline-2 focus-visible:outline-offset-2",t===r?"bg-white/[0.08] text-white":"text-white/45 hover:text-white/80"),children:r==="library"?"Projects":"References"},r))}),mr=()=>{const t=Pe(),s=async o=>{await t.cancelQueries({queryKey:z.projectLibrary.all}),t.setQueryData(z.projectLibrary.projects,a=>a&&{projects:o(a.projects)}),t.setQueriesData({queryKey:z.projectLibrary.histories},a=>{if(!a)return a;const l=o(a.projects),m=new Set(l.map(({id:y})=>y));return{projects:l,variants:a.variants.filter(({projectId:y})=>m.has(y))}}),t.invalidateQueries({queryKey:z.projectLibrary.all})},r=de({mutationFn:({projectId:o,name:a})=>H(`/projects/${encodeURIComponent(o)}`,{schema:Se,method:"PATCH",body:{name:a}}),onSuccess:({project:o})=>s(a=>a.map(l=>l.id===o.id?{...l,name:o.name}:l))}),i=de({mutationFn:({projectId:o,isPinned:a})=>H(`/projects/${encodeURIComponent(o)}/pin`,{schema:Se,method:a?"PUT":"DELETE"}),onSuccess:({project:o})=>s(a=>a.map(l=>l.id===o.id?{...l,pinnedAt:o.pinnedAt}:l))}),n=de({mutationFn:o=>H(`/projects/${encodeURIComponent(o)}`,{schema:ss,method:"DELETE"}),onSuccess:async(o,a)=>{await s(l=>l.filter(({id:m})=>m!==a)),await t.cancelQueries({queryKey:z.libraryProjectPreview.project(a)}),t.removeQueries({queryKey:z.libraryProjectPreview.project(a)})}});return{setProjectPinned:async(o,a)=>{await i.mutateAsync({projectId:o,isPinned:a})},renameProject:async(o,a)=>{await r.mutateAsync({projectId:o,name:a})},removeProject:async o=>{await n.mutateAsync(o)}}},We=2500,pr=500,xr=6e4,fr=[],br=[],fe=({error:t,retry:s})=>e.jsxs("div",{className:"m-auto max-w-md px-8 text-center",children:[e.jsx("p",{className:"text-sm text-white/70",children:t.message}),e.jsx("button",{onClick:s,className:"mt-5 rounded-lg border border-white/15 px-4 py-2 text-xs text-white/70",children:"Try again"})]}),yr=()=>{var Ae,Oe,Me,Te,De,qe;const t=le();rs(ot().data);const s=Pe(),{renameProject:r,removeProject:i,setProjectPinned:n}=mr(),o=u.useRef(),[a,l]=u.useState(()=>He(new URL(window.location.href))),[m]=u.useState(()=>crypto.randomUUID()),y=u.useRef(0),v=u.useRef(null),h=Z({queryKey:z.projectLibrary.projects,queryFn:({signal:c})=>H("/projects",{schema:ps,signal:c}),refetchInterval:We,retry:!1}),g=((Ae=h.data)==null?void 0:Ae.projects)??fr,w=g.map(({id:c,projectPath:b})=>({id:c,projectPath:b})).sort((c,b)=>c.id.localeCompare(b.id)),R=Z({queryKey:z.projectLibrary.history(w),queryFn:({signal:c})=>H("",{schema:xs,signal:c}),placeholderData:c=>{if(!c)return;const b=new Map(c.projects.map(({id:D,projectPath:X})=>[D,X]));if(!g.every(({id:D,projectPath:X})=>b.get(D)===X))return;const P=new Set(g.map(({id:D})=>D));return{projects:c.projects.filter(({id:D})=>P.has(D)),variants:c.variants.filter(({projectId:D})=>P.has(D))}},enabled:g.length>0,refetchInterval:We,retry:!1}),N=new Map((Oe=R.data)==null?void 0:Oe.projects.map(c=>[c.id,c])),p=g.map(c=>{const b=N.get(c.id);return{...c,issue:b?b.issue:c.issue,historyIssue:b?b.historyIssue:c.historyIssue}}),j=((Me=R.data)==null?void 0:Me.variants)??br,T=Rs({queries:p.map(c=>({queryKey:z.libraryProjectPreview.thumbnail(c.id,c.projectPath),queryFn:({signal:b})=>H(`/projects/${c.id}/thumbnail`,{schema:ms,signal:b}),enabled:a.kind==="library",refetchInterval:xr,retry:!1}))}),f=p.find(c=>c.id===a.projectId),S=j.find(c=>c.projectId===a.projectId&&c.sessionId===a.sessionId&&c.variantId===a.variantId),C=u.useCallback(c=>{window.history.pushState(null,"",as(c)),l(c)},[]);u.useEffect(()=>{f?o.current=f.id:h.isSuccess&&!h.isFetching&&a.projectId===o.current&&a.projectId&&(o.current=void 0,C({kind:"library"}))},[f,a.projectId,h.isSuccess,h.isFetching,C]),u.useEffect(()=>{const c=()=>l(He(new URL(window.location.href)));return window.addEventListener("popstate",c),()=>window.removeEventListener("popstate",c)},[]),u.useEffect(()=>{const c=new AbortController;let b;const P=async()=>{try{const D=await H(`/views/${m}`,{schema:cs,method:"PUT",body:{isFocused:document.visibilityState==="visible"&&document.hasFocus()},signal:c.signal});for(const X of D.navigations){if(c.signal.aborted)return;if(X.sequence>y.current){let ge="library";X.projectId&&(ge="workspace"),X.variantId&&(ge="preview"),C({...X,kind:ge}),y.current=X.sequence}await H(`/views/${m}/acknowledgements`,{schema:ls,method:"POST",body:{sequence:X.sequence},signal:c.signal})}}catch{}c.signal.aborted||(b=setTimeout(()=>{P()},pr))};return P(),()=>{c.abort(),clearTimeout(b)}},[m,C]);const O=Z({queryKey:z.libraryWorkspace(a.projectId),queryFn:()=>H(`/projects/${a.projectId}/runtime`,{schema:fs,method:"POST"}),enabled:a.kind==="workspace"&&!!a.projectId&&(f==null?void 0:f.isAvailable)===!0,retry:!1,refetchOnWindowFocus:!1}),Y=O.data?new URL(O.data.editorUrl).origin:null;u.useEffect(()=>{if(a.kind!=="workspace"||!Y)return;const c=b=>{!v.current||b.source!==v.current.contentWindow||b.origin!==Y||b.data!==ds||(t==null||t.capture("library_view_changed",{view:"projects"}),C({kind:"library"}))};return window.addEventListener("message",c),()=>window.removeEventListener("message",c)},[a.kind,Y,C,t]);const A=Z({queryKey:z.libraryPreview({projectId:a.projectId,sessionId:a.sessionId,variantId:a.variantId}),queryFn:()=>H(`/projects/${a.projectId}/variants/${a.sessionId}/${a.variantId}/preview`,{schema:bs,method:"POST"}),enabled:a.kind==="preview"&&!!(S!=null&&S.hasStaticPreview),retry:!1,refetchOnWindowFocus:!1}),E=de({mutationFn:c=>H(`/projects/${a.projectId}/variants/${a.sessionId}/${a.variantId}`,{schema:us,method:"PATCH",body:{label:c}}),onSuccess:()=>s.invalidateQueries({queryKey:z.projectLibrary.all})}),B=c=>{const b=p.find(P=>P.id===c);t==null||t.capture("library_project_selected",{project_id:c,workspace_available:(b==null?void 0:b.isAvailable)??!1}),C({kind:"workspace",projectId:c})},K=de({mutationFn:async c=>{const{projectPath:b}=await H("/folder-selections",{schema:hs,method:"POST"});return b===null?null:H(c?`/projects/${c}/workspace`:"/projects",{schema:Se,method:c?"PATCH":"POST",body:{projectPath:b}})},onSuccess:c=>{c&&(s.invalidateQueries({queryKey:z.projectLibrary.all}),t==null||t.capture("library_project_selected",{project_id:c.project.id,workspace_available:c.project.isAvailable}),C({kind:"workspace",projectId:c.project.id}))},onSettled:(c,b,P)=>{t==null||t.capture("library_open_project_closed",{is_relink:!!P})}}),_=c=>{K.isPending||(t==null||t.capture("library_open_project_opened",{is_relink:!!c}),K.mutate(c))},x=()=>{t==null||t.capture("library_view_changed",{view:"projects"}),C({kind:"library"})},M=()=>{t==null||t.capture("library_view_changed",{view:"workspace"}),C({...a,kind:"workspace"})},d=()=>{t==null||t.capture("library_history_retry"),R.refetch()};let I;if(a.kind==="workspace"&&(f==null?void 0:f.isAvailable)!==!1||a.kind==="preview"){let c=!1,b=e.jsxs("div",{className:"m-auto flex items-center gap-2 text-xs text-white/40",children:[e.jsx(yt,{size:14,className:"animate-spin"}),"Opening ",(f==null?void 0:f.name)??"project","…"]});if(h.data&&!f||R.data&&a.variantId&&!S)b=e.jsx("div",{className:"m-auto text-sm text-white/60",children:"This project or direction is no longer in your library."});else if(a.kind==="preview"&&R.error&&!R.data)b=e.jsx(fe,{error:R.error,retry:d});else if(a.kind==="workspace"&&O.error)b=e.jsx(fe,{error:O.error,retry:()=>{O.refetch()}});else if(a.kind==="workspace"&&O.data){c=!0;const P=new URL(O.data.editorUrl);P.searchParams.set("library","1"),P.searchParams.set("libraryOrigin",window.location.origin),a.sessionId&&a.variantId&&(P.searchParams.set("historySession",a.sessionId),P.searchParams.set("historyVariant",a.variantId)),b=e.jsx("iframe",{ref:v,title:`${(f==null?void 0:f.name)??"Project"} workspace`,src:P.toString(),allow:"clipboard-write","data-rivet-private":!0,className:"ph-no-capture min-h-0 w-full flex-1 border-0"},P.toString())}else a.kind==="preview"&&A.error?b=e.jsx(fe,{error:A.error,retry:()=>{A.refetch()}}):a.kind==="preview"&&A.data?b=e.jsx("iframe",{title:`${(S==null?void 0:S.label)??"Saved direction"} preview`,src:A.data.url,sandbox:"allow-scripts allow-same-origin allow-forms allow-popups",className:"min-h-0 w-full flex-1 border-0 bg-white"}):a.kind==="preview"&&S&&!S.hasStaticPreview&&(b=e.jsxs("div",{className:"m-auto max-w-sm text-center",children:[e.jsx("p",{className:"text-sm",children:S.hasInteractivePreview?"Open this direction in its workspace":"This direction contains saved code changes"}),e.jsx("p",{className:"mt-2 text-xs leading-6 text-white/40",children:S.hasInteractivePreview?"Rivet will start the preview with this project’s dependencies and configuration.":"Open the project to continue working with its saved history."}),e.jsx("button",{onClick:M,disabled:(f==null?void 0:f.isAvailable)===!1,className:"mt-5 rounded-lg bg-white px-4 py-2.5 text-xs font-medium text-black disabled:opacity-30",children:"Open workspace"})]}));I=e.jsxs(e.Fragment,{children:[a.kind==="preview"?e.jsxs("header",{className:"flex h-14 shrink-0 items-center gap-3 border-b border-white/[0.07] px-5",children:[e.jsx("button",{"aria-label":"Back to projects",onClick:x,className:"rounded p-1.5 text-white/45 hover:bg-white/5",children:e.jsx(is,{size:15})}),e.jsx("span",{className:"text-xs text-white/40",children:f==null?void 0:f.name}),S?e.jsxs(e.Fragment,{children:[e.jsx("span",{className:"text-white/20",children:"/"}),e.jsxs("form",{onSubmit:P=>{P.preventDefault();const D=new FormData(P.currentTarget);E.mutate(String(D.get("label")))},className:"flex min-w-0 flex-1 gap-2",children:[e.jsx("input",{name:"label","aria-label":"Direction name",defaultValue:S.label,className:"max-w-xs min-w-0 flex-1 bg-transparent text-xs text-white/80 outline-none"}),e.jsx("button",{disabled:E.isPending,className:"text-[10px] text-white/30 hover:text-white",children:"Rename"})]},`${S.projectId}:${S.variantId}`)]}):e.jsx("span",{className:"flex-1"}),a.kind==="preview"?e.jsxs("button",{onClick:M,disabled:(f==null?void 0:f.isAvailable)===!1,className:"flex items-center gap-1.5 rounded-md border border-white/10 px-3 py-1.5 text-[11px] text-white/70 disabled:opacity-30",children:["Edit in project",e.jsx(ut,{size:12})]}):null]}):null,a.kind==="workspace"&&!c?e.jsx("button",{onClick:x,className:"absolute top-5 left-5 rounded px-2 py-1 text-xs text-white/50 hover:bg-white/5 hover:text-white",children:"Projects"}):null,E.error?e.jsx("p",{role:"alert",className:"px-5 py-2 text-xs text-red-200",children:E.error.message}):null,b]})}let $=I;h.error&&!h.data?$=e.jsx(fe,{error:h.error,retry:()=>{h.refetch()}}):h.isPending&&($=e.jsx("div",{role:"status",className:"m-auto text-xs text-white/40",children:"Loading projects…"}));const J=a.kind==="references"?"references":"library",ae=e.jsx(hr,{view:J,onNavigate:c=>{t==null||t.capture("library_view_changed",{view:c==="references"?"references":"projects"}),C({kind:c})}});return a.kind==="references"&&($=e.jsx(ur,{onBrowseProjects:x})),e.jsxs(e.Fragment,{children:[e.jsx(Hs,{projects:p,variants:(Te=R.data)==null?void 0:Te.variants,historyError:(De=R.error)==null?void 0:De.message,onRetryHistory:d,projectPreviews:Object.fromEntries(p.map((c,b)=>{var P,D;return[c.id,(D=(P=T[b])==null?void 0:P.data)==null?void 0:D.preview]})),selectedProjectId:a.projectId??null,onSelectProject:B,onBrowseLibrary:x,navigation:ae,view:J,onOpenProject:_,onRenameProject:r,onRemoveProject:i,onSetProjectPinned:n,accountMenu:e.jsx(ns,{side:"top",align:"start"}),isOpeningProject:K.isPending,projectOpenError:(qe=K.error)==null?void 0:qe.message,onSearchCompleted:c=>t==null?void 0:t.capture("library_search_completed",{query_length:c}),children:$}),e.jsx(os,{position:"bottom-right",theme:"dark"})]})},vr=async t=>{const s=ks(),r=await ws("/api/library/browser-sessions",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(t)});if(!r.ok){const i=js.safeParse(await r.json().catch(()=>null));throw new Error(i.success?i.data.error:"Could not start a library session.")}Ns(Ss(await r.json()),s)},gr=()=>{const t=u.useSyncExternalStore(ct,vs),{startLogin:s,isStartingLogin:r,loginError:i}=gs("library",vr);return e.jsx("main",{className:"flex min-h-screen items-center justify-center bg-[#111215] px-6 text-white",children:e.jsxs("div",{className:"w-full max-w-sm rounded-2xl border border-white/10 bg-white/[0.04] p-8 text-center shadow-2xl",children:[e.jsx("h1",{className:"text-2xl font-semibold tracking-tight",children:"Rivet"}),e.jsx("p",{className:"mt-3 text-sm leading-6 text-white/60",children:"Sign in to open your project library on this computer."}),e.jsxs("button",{type:"button",onClick:()=>void s(),disabled:r,className:"mt-7 inline-flex h-10 w-full items-center justify-center gap-2 rounded-lg bg-white px-4 text-sm font-medium text-black disabled:opacity-60",children:[r?e.jsx(yt,{size:16,className:"animate-spin"}):null,r?"Connecting…":"Continue with Google"]}),i||t?e.jsx("p",{role:"alert",className:"mt-4 text-sm text-red-300",children:i??t}):null]})})},Nr=()=>u.useSyncExternalStore(ct,ys)?e.jsx(yr,{}):e.jsx(gr,{});export{Nr as default};
37
+ //# sourceMappingURL=LibraryEntry-RI9Lc7P3.js.map
@@ -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.4 | MIT License | https://tailwindcss.com */@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:block))) 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-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:2147483647px}.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\/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-\[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}:is(:where(.group\/card):focus-within .group-focus-within\/card\:pointer-events-auto){pointer-events:auto}:is(:where(.group\/card):focus-within .group-focus-within\/card\:opacity-100){opacity:1}@media(hover:hover){:is(:where(.group):hover .group-hover\:pointer-events-auto){pointer-events:auto}:is(:where(.group):hover .group-hover\:border-border){border-color:var(--border)}:is(:where(.group):hover .group-hover\:text-white\/65){color:#ffffffa6}@supports (color:color-mix(in lab,red,red)){:is(:where(.group):hover .group-hover\:text-white\/65){color:color-mix(in oklab,var(--color-white) 65%,transparent)}}:is(:where(.group):hover .group-hover\:opacity-100){opacity:1}:is(:where(.group\/button):hover .group-hover\/button\:bg-hover){background-color:var(--hover)}:is(:where(.group\/button):hover .group-hover\/button\:shadow-\[0_0_0_1px_var\(--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)}:is(:where(.group\/button):hover .group-hover\/button\:\[--btn-bg\:color-mix\(in_oklab\,var\(--accent\)_80\%\,var\(--background\)\)\]){--btn-bg:var(--accent)}@supports (color:color-mix(in lab,red,red)){:is(:where(.group\/button):hover .group-hover\/button\:\[--btn-bg\:color-mix\(in_oklab\,var\(--accent\)_80\%\,var\(--background\)\)\]){--btn-bg:color-mix(in oklab,var(--accent) 80%,var(--background))}}:is(:where(.group\/button):hover .group-hover\/button\:\[--btn-bg\:color-mix\(in_oklab\,var\(--foreground\)_90\%\,var\(--background\)\)\]){--btn-bg:var(--foreground)}@supports (color:color-mix(in lab,red,red)){:is(:where(.group\/button):hover .group-hover\/button\:\[--btn-bg\:color-mix\(in_oklab\,var\(--foreground\)_90\%\,var\(--background\)\)\]){--btn-bg:color-mix(in oklab,var(--foreground) 90%,var(--background))}}:is(:where(.group\/card):hover .group-hover\/card\:pointer-events-auto){pointer-events:auto}:is(:where(.group\/card):hover .group-hover\/card\:opacity-100){opacity:1}:is(:where(.group\/project):hover .group-hover\/project\:pointer-events-auto){pointer-events:auto}:is(:where(.group\/project):hover .group-hover\/project\:opacity-100){opacity:1}:is(:where(.group\/resize):hover .group-hover\/resize\:w-0\.5){width:calc(var(--spacing) * .5)}:is(:where(.group\/resize):hover .group-hover\/resize\:bg-content-muted){background-color:#d1d5db}}:is(:where(.group):focus-visible .group-focus-visible\:text-white\/65){color:#ffffffa6}@supports (color:color-mix(in lab,red,red)){:is(:where(.group):focus-visible .group-focus-visible\:text-white\/65){color:color-mix(in oklab,var(--color-white) 65%,transparent)}}:is(:where(.group\/button):active .group-active\/button\:bg-active){background-color:var(--active)}:is(:where(.group\/button):active .group-active\/button\:shadow-\[0_0_0_0px_var\(--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)}:is(:where(.group\/button):active .group-active\/button\:shadow-\[0_0_0_0px_var\(--border\)\,inset_0_0_0_1px_var\(--border\)\]){--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)}:is(:where(.group\/button):active .group-active\/button\:shadow-\[0_0_0_0px_var\(--btn-bg\)\]){--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)}:is(:where(.group\/button):active .group-active\/button\:\[transition-duration\:80ms\,80ms\]){transition-duration:80ms,80ms}:is(:where(.group\/button):active .group-active\/button\:\[--btn-bg\:color-mix\(in_oklab\,var\(--foreground\)_80\%\,var\(--background\)\)\]){--btn-bg:var(--foreground)}@supports (color:color-mix(in lab,red,red)){:is(:where(.group\/button):active .group-active\/button\:\[--btn-bg\:color-mix\(in_oklab\,var\(--foreground\)_80\%\,var\(--background\)\)\]){--btn-bg:color-mix(in oklab,var(--foreground) 80%,var(--background))}}:is(:where(.group\/button):active .group-active\/button\:\[--btn-bg\:var\(--accent\)\]){--btn-bg:var(--accent)}:is(:where(.group\/button)[aria-expanded=true] .group-aria-expanded\/button\:bg-active){background-color:var(--active)}:is(:where(.group\/button)[aria-expanded=true] .group-aria-expanded\/button\:shadow-\[0_0_0_0px_var\(--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)}:is(:where(.group\/button)[aria-pressed=true] .group-aria-pressed\/button\:bg-active){background-color:var(--active)}:is(:where(.group\/button)[aria-pressed=true] .group-aria-pressed\/button\:shadow-\[0_0_0_0px_var\(--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)}:is(:where(.peer):focus-visible~.peer-focus-visible\: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)}:is(:where(.peer):focus-visible~.peer-focus-visible\:ring-white){--tw-ring-color:var(--color-white)}:is(:where(.peer):focus-visible~.peer-focus-visible\:ring-offset-2){--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset, ) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color)}:is(:where(.peer):disabled~.peer-disabled\:opacity-40){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}}