@mevdragon/vidfarm-devcli 0.2.12 → 0.2.13

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 (199) hide show
  1. package/.env.example +37 -1
  2. package/README.md +27 -183
  3. package/SKILL.director.md +293 -0
  4. package/SKILL.platform.md +312 -0
  5. package/auto-create-hyperframe-templates/AUTO_CREATE_HYPERFRAME_TEMPLATES.md +275 -0
  6. package/auto-create-hyperframe-templates/extractor-system-prompt.md +128 -0
  7. package/auto-create-hyperframe-templates/input-manifest.schema.json +56 -0
  8. package/auto-create-hyperframe-templates/lambda-memory-estimator.md +118 -0
  9. package/auto-create-hyperframe-templates/production-graph.schema.json +314 -0
  10. package/auto-create-hyperframe-templates/runbook.md +198 -0
  11. package/auto-create-hyperframe-templates/scripts/create-hyperframe-template.mjs +368 -0
  12. package/auto-create-hyperframe-templates/template-plan.schema.json +311 -0
  13. package/auto-create-hyperframe-templates/template-planner-prompt.md +144 -0
  14. package/auto-create-templates/AUTO_CREATE_TEMPLATES.md +116 -0
  15. package/auto-create-templates/extractor-system-prompt.md +6 -1
  16. package/auto-create-templates/template-plan.schema.json +73 -2
  17. package/auto-create-templates/template-planner-prompt.md +62 -1
  18. package/dist/src/account-pages-legacy.js +361 -89
  19. package/dist/src/account-pages-legacy.js.map +1 -0
  20. package/dist/src/account-pages.js +13 -3
  21. package/dist/src/account-pages.js.map +1 -0
  22. package/dist/src/app.js +7060 -946
  23. package/dist/src/app.js.map +1 -0
  24. package/dist/src/cli.js +110 -29
  25. package/dist/src/cli.js.map +1 -0
  26. package/dist/src/composition-runtime.js +581 -0
  27. package/dist/src/composition-runtime.js.map +1 -0
  28. package/dist/src/config.js +69 -11
  29. package/dist/src/config.js.map +1 -0
  30. package/dist/src/context.js +280 -21
  31. package/dist/src/context.js.map +1 -0
  32. package/dist/src/dev-app-legacy.js +18 -17
  33. package/dist/src/dev-app-legacy.js.map +1 -0
  34. package/dist/src/dev-app.js +1 -0
  35. package/dist/src/dev-app.js.map +1 -0
  36. package/dist/src/domain.js +2 -1
  37. package/dist/src/domain.js.map +1 -0
  38. package/dist/src/editor-chat-history.js +10 -0
  39. package/dist/src/editor-chat-history.js.map +1 -0
  40. package/dist/src/editor-chat.js +133 -24
  41. package/dist/src/editor-chat.js.map +1 -0
  42. package/dist/src/frontend/flockposter-cache-store.js +10 -2
  43. package/dist/src/frontend/flockposter-cache-store.js.map +1 -0
  44. package/dist/src/frontend/homepage-client.js +6 -3
  45. package/dist/src/frontend/homepage-client.js.map +1 -0
  46. package/dist/src/frontend/homepage-shared.js +1 -0
  47. package/dist/src/frontend/homepage-shared.js.map +1 -0
  48. package/dist/src/frontend/homepage-store.js +1 -0
  49. package/dist/src/frontend/homepage-store.js.map +1 -0
  50. package/dist/src/frontend/homepage-view.js +131 -18
  51. package/dist/src/frontend/homepage-view.js.map +1 -0
  52. package/dist/src/frontend/page-runtime-client.js +5 -2
  53. package/dist/src/frontend/page-runtime-client.js.map +1 -0
  54. package/dist/src/frontend/page-runtime-store.js +1 -0
  55. package/dist/src/frontend/page-runtime-store.js.map +1 -0
  56. package/dist/src/frontend/sentry.js +42 -0
  57. package/dist/src/frontend/sentry.js.map +1 -0
  58. package/dist/src/frontend/template-editor-chat.js +1719 -213
  59. package/dist/src/frontend/template-editor-chat.js.map +1 -0
  60. package/dist/src/help-page.js +333 -0
  61. package/dist/src/help-page.js.map +1 -0
  62. package/dist/src/homepage.js +169 -47
  63. package/dist/src/homepage.js.map +1 -0
  64. package/dist/src/hyperframes/composition.js +180 -0
  65. package/dist/src/hyperframes/composition.js.map +1 -0
  66. package/dist/src/index.js +1 -0
  67. package/dist/src/index.js.map +1 -0
  68. package/dist/src/instrument.js +30 -0
  69. package/dist/src/instrument.js.map +1 -0
  70. package/dist/src/lib/crypto.js +1 -0
  71. package/dist/src/lib/crypto.js.map +1 -0
  72. package/dist/src/lib/dev-log.js +54 -0
  73. package/dist/src/lib/dev-log.js.map +1 -0
  74. package/dist/src/lib/display-name.js +11 -0
  75. package/dist/src/lib/display-name.js.map +1 -0
  76. package/dist/src/lib/ids.js +21 -1
  77. package/dist/src/lib/ids.js.map +1 -0
  78. package/dist/src/lib/images.js +1 -0
  79. package/dist/src/lib/images.js.map +1 -0
  80. package/dist/src/lib/json.js +1 -0
  81. package/dist/src/lib/json.js.map +1 -0
  82. package/dist/src/lib/template-dna.js +1 -0
  83. package/dist/src/lib/template-dna.js.map +1 -0
  84. package/dist/src/lib/template-paths.js +1 -0
  85. package/dist/src/lib/template-paths.js.map +1 -0
  86. package/dist/src/lib/template-style-options.js +29 -3
  87. package/dist/src/lib/template-style-options.js.map +1 -0
  88. package/dist/src/lib/time.js +1 -0
  89. package/dist/src/lib/time.js.map +1 -0
  90. package/dist/src/lib/video-quality-harness.js +60 -0
  91. package/dist/src/lib/video-quality-harness.js.map +1 -0
  92. package/dist/src/page-runtime.js +1 -0
  93. package/dist/src/page-runtime.js.map +1 -0
  94. package/dist/src/page-shell.js +1501 -49
  95. package/dist/src/page-shell.js.map +1 -0
  96. package/dist/src/primitive-context.js +144 -8
  97. package/dist/src/primitive-context.js.map +1 -0
  98. package/dist/src/primitive-registry.js +1919 -78
  99. package/dist/src/primitive-registry.js.map +1 -0
  100. package/dist/src/primitive-sdk.js +1 -0
  101. package/dist/src/primitive-sdk.js.map +1 -0
  102. package/dist/src/primitives/remotion/html-image.js +3 -1
  103. package/dist/src/primitives/remotion/html-image.js.map +1 -0
  104. package/dist/src/primitives/remotion/media-slideshow.js +60 -0
  105. package/dist/src/primitives/remotion/media-slideshow.js.map +1 -0
  106. package/dist/src/react-page-shell.js +1 -0
  107. package/dist/src/react-page-shell.js.map +1 -0
  108. package/dist/src/ready-post-schedule-component.js +1 -0
  109. package/dist/src/ready-post-schedule-component.js.map +1 -0
  110. package/dist/src/registry.js +237 -24
  111. package/dist/src/registry.js.map +1 -0
  112. package/dist/src/runtime.js +3 -0
  113. package/dist/src/runtime.js.map +1 -0
  114. package/dist/src/services/api-call-history.js +4 -0
  115. package/dist/src/services/api-call-history.js.map +1 -0
  116. package/dist/src/services/auth.js +40 -50
  117. package/dist/src/services/auth.js.map +1 -0
  118. package/dist/src/services/billing.js +20 -44
  119. package/dist/src/services/billing.js.map +1 -0
  120. package/dist/src/services/chat-threads.js +10 -6
  121. package/dist/src/services/chat-threads.js.map +1 -0
  122. package/dist/src/services/fork-access.js +94 -0
  123. package/dist/src/services/fork-access.js.map +1 -0
  124. package/dist/src/services/ghostcut.js +132 -0
  125. package/dist/src/services/ghostcut.js.map +1 -0
  126. package/dist/src/services/hyperframes.js +1014 -0
  127. package/dist/src/services/hyperframes.js.map +1 -0
  128. package/dist/src/services/job-capacity.js +14 -0
  129. package/dist/src/services/job-capacity.js.map +1 -0
  130. package/dist/src/services/job-logs.js +4 -0
  131. package/dist/src/services/job-logs.js.map +1 -0
  132. package/dist/src/services/jobs.js +99 -91
  133. package/dist/src/services/jobs.js.map +1 -0
  134. package/dist/src/services/media-processing.js +743 -0
  135. package/dist/src/services/media-processing.js.map +1 -0
  136. package/dist/src/services/primitive-media-lambda.js +280 -0
  137. package/dist/src/services/primitive-media-lambda.js.map +1 -0
  138. package/dist/src/services/providers.js +1560 -178
  139. package/dist/src/services/providers.js.map +1 -0
  140. package/dist/src/services/rate-limits.js +3 -2
  141. package/dist/src/services/rate-limits.js.map +1 -0
  142. package/dist/src/services/remotion.js +495 -92
  143. package/dist/src/services/remotion.js.map +1 -0
  144. package/dist/src/services/serverless-auth.js +374 -0
  145. package/dist/src/services/serverless-auth.js.map +1 -0
  146. package/dist/src/services/serverless-jobs.js +1074 -0
  147. package/dist/src/services/serverless-jobs.js.map +1 -0
  148. package/dist/src/services/serverless-provider-keys.js +401 -0
  149. package/dist/src/services/serverless-provider-keys.js.map +1 -0
  150. package/dist/src/services/serverless-records.js +1086 -0
  151. package/dist/src/services/serverless-records.js.map +1 -0
  152. package/dist/src/services/serverless-template-configs.js +67 -0
  153. package/dist/src/services/serverless-template-configs.js.map +1 -0
  154. package/dist/src/services/storage.js +170 -35
  155. package/dist/src/services/storage.js.map +1 -0
  156. package/dist/src/services/template-certification.js +295 -3
  157. package/dist/src/services/template-certification.js.map +1 -0
  158. package/dist/src/services/template-loader.js +45 -1
  159. package/dist/src/services/template-loader.js.map +1 -0
  160. package/dist/src/services/template-runtime-bundles.js +217 -0
  161. package/dist/src/services/template-runtime-bundles.js.map +1 -0
  162. package/dist/src/services/template-sources.js +452 -87
  163. package/dist/src/services/template-sources.js.map +1 -0
  164. package/dist/src/services/video-normalization.js +2 -0
  165. package/dist/src/services/video-normalization.js.map +1 -0
  166. package/dist/src/services/webhooks.js +7 -6
  167. package/dist/src/services/webhooks.js.map +1 -0
  168. package/dist/src/template-editor-pages.js +5637 -1322
  169. package/dist/src/template-editor-pages.js.map +1 -0
  170. package/dist/src/template-editor-shell.js +1376 -170
  171. package/dist/src/template-editor-shell.js.map +1 -0
  172. package/dist/src/template-sdk.js +1 -0
  173. package/dist/src/template-sdk.js.map +1 -0
  174. package/dist/src/worker.js +11 -226
  175. package/dist/src/worker.js.map +1 -0
  176. package/package.json +47 -12
  177. package/public/assets/homepage-client-app.js +34 -8
  178. package/public/assets/page-runtime-client-app.js +44 -18
  179. package/readme.secret.md +89 -0
  180. package/templates/vidfarm_template_0000/README.md +106 -0
  181. package/templates/vidfarm_template_0000/SKILL.md +266 -0
  182. package/templates/vidfarm_template_0000/assets/Abel-Regular.ttf +0 -0
  183. package/templates/vidfarm_template_0000/assets/DMSerifDisplay-Regular.ttf +0 -0
  184. package/templates/vidfarm_template_0000/assets/Montserrat[wght].ttf +0 -0
  185. package/templates/vidfarm_template_0000/assets/SourceCodePro[wght].ttf +0 -0
  186. package/templates/vidfarm_template_0000/assets/TikTokSans-SemiBold.ttf +0 -0
  187. package/templates/vidfarm_template_0000/assets/Yesteryear-Regular.ttf +0 -0
  188. package/templates/vidfarm_template_0000/composition.json +11 -0
  189. package/templates/vidfarm_template_0000/src/lib/images.js +221 -0
  190. package/templates/vidfarm_template_0000/src/remotion/Root.js +33 -0
  191. package/templates/vidfarm_template_0000/src/remotion/index.js +3 -0
  192. package/templates/vidfarm_template_0000/src/sdk.js +3 -0
  193. package/templates/vidfarm_template_0000/src/style-options.js +200 -0
  194. package/templates/vidfarm_template_0000/src/template-dna.js +9 -0
  195. package/templates/vidfarm_template_0000/src/template.js +1566 -0
  196. package/templates/vidfarm_template_0000/template.config.json +21 -0
  197. package/GETTING_STARTED.developers.md +0 -87
  198. package/SKILL.developer.md +0 -1186
  199. package/dist/src/db.js +0 -2007
@@ -22,6 +22,9 @@ export function withAccountQuery(href, accountId) {
22
22
  if (url.pathname.startsWith("/u/")) {
23
23
  return `${url.pathname}${url.search}${url.hash}`;
24
24
  }
25
+ if (url.pathname === "/discover" || url.pathname.startsWith("/discover/") || url.pathname === "/help") {
26
+ return `${url.pathname}${url.search}${url.hash}`;
27
+ }
25
28
  return `/u/${encodeURIComponent(accountId)}${url.pathname}${url.search}${url.hash}`;
26
29
  }
27
30
  export function resolveAccountDisplayName(input) {
@@ -48,20 +51,60 @@ function renderNavIcon(kind) {
48
51
  if (kind === "calendar") {
49
52
  return `<svg viewBox="0 0 20 20" fill="none" stroke="currentColor" stroke-width="1.7" stroke-linecap="round" stroke-linejoin="round"><circle cx="10" cy="10" r="7.2"/><path d="M10 6.3v4.1l2.8 1.7"/></svg>`;
50
53
  }
51
- return `<svg viewBox="0 0 20 20" fill="none" stroke="currentColor" stroke-width="1.7" stroke-linecap="round" stroke-linejoin="round"><path d="M14.8 15.2a5.4 5.4 0 1 0-9.6 0"/><circle cx="10" cy="6.8" r="3.1"/></svg>`;
54
+ if (kind === "chat") {
55
+ return `<svg viewBox="0 0 20 20" fill="none" stroke="currentColor" stroke-width="1.7" stroke-linecap="round" stroke-linejoin="round"><path d="M4.2 5.2a2 2 0 0 1 2-2h7.6a2 2 0 0 1 2 2v5.6a2 2 0 0 1-2 2H9.2l-4.1 3.1v-3.1a2 2 0 0 1-.9-1.7Z"/><path d="M7.3 7.1h5.4"/><path d="M7.3 9.6h3.7"/></svg>`;
56
+ }
57
+ if (kind === "settings") {
58
+ return `<svg viewBox="0 0 20 20" fill="none" stroke="currentColor" stroke-width="1.7" stroke-linecap="round" stroke-linejoin="round"><path d="M14.8 15.2a5.4 5.4 0 1 0-9.6 0"/><circle cx="10" cy="6.8" r="3.1"/></svg>`;
59
+ }
60
+ if (kind === "help") {
61
+ return `<svg viewBox="0 0 20 20" fill="none" stroke="currentColor" stroke-width="1.7" stroke-linecap="round" stroke-linejoin="round"><circle cx="10" cy="10" r="7.2"/><path d="M8.1 8a2.2 2.2 0 1 1 3.7 1.6c-.8.7-1.4 1.1-1.4 2.2"/><path d="M10 14.8h.01"/></svg>`;
62
+ }
63
+ return `<svg viewBox="0 0 20 20" fill="currentColor"><circle cx="4.2" cy="10" r="1.45"/><circle cx="10" cy="10" r="1.45"/><circle cx="15.8" cy="10" r="1.45"/></svg>`;
64
+ }
65
+ function renderMenuIcon() {
66
+ return `<svg viewBox="0 0 20 20" fill="none" stroke="currentColor" stroke-width="1.9" stroke-linecap="round"><path d="M3.5 5.5h13"/><path d="M3.5 10h13"/><path d="M3.5 14.5h13"/></svg>`;
52
67
  }
53
68
  export function renderPrimaryNav(input) {
54
69
  const items = input.loggedIn
55
70
  ? [
56
- { id: "discover", href: withAccountQuery("/discover", input.accountId), label: "Discover", icon: renderNavIcon("discover") },
71
+ { id: "discover", href: withAccountQuery("/discover", input.accountId), label: "Studio", icon: renderNavIcon("discover") },
57
72
  { id: "library", href: withAccountQuery("/library", input.accountId), label: "Library", icon: renderNavIcon("library") },
58
73
  { id: "calendar", href: withAccountQuery("/calendar", input.accountId), label: "Calendar", icon: renderNavIcon("calendar") },
59
74
  { id: "settings", href: withAccountQuery("/settings", input.accountId), label: "Settings", icon: renderNavIcon("settings") }
60
75
  ]
61
76
  : [
62
- { id: "discover", href: "/discover", label: "Discover", icon: renderNavIcon("discover") },
77
+ { id: "discover", href: "/discover", label: "Studio", icon: renderNavIcon("discover") },
63
78
  { id: "login", href: "/login", label: "Login", icon: renderNavIcon("settings") }
64
79
  ];
80
+ const menuItems = input.loggedIn
81
+ ? [
82
+ { id: "job-runs", href: withAccountQuery("/job-runs", input.accountId), label: "Render Runs" },
83
+ { id: "inpaint", href: withAccountQuery("/inpaint", input.accountId), label: "Image Tools" },
84
+ { id: "help", href: "/help", label: "Help" },
85
+ { id: "logout", action: "logout", label: "Log Out" }
86
+ ]
87
+ : [
88
+ { id: "help", href: "/help", label: "Help" },
89
+ { id: "login", href: "/login", label: "Login" }
90
+ ];
91
+ const mobileMenuPrimaryItems = items.filter((item) => !menuItems.some((menuItem) => menuItem.id === item.id));
92
+ const logoutDialog = input.loggedIn ? `
93
+ <dialog class="logout-dialog" data-logout-dialog>
94
+ <div class="logout-dialog-head">
95
+ <div class="label logout-dialog-kicker">Log out</div>
96
+ <h3>Log out of this browser?</h3>
97
+ <p>This clears the stored developer key, workspace access, and local session state for the current browser.</p>
98
+ </div>
99
+ <div class="toolbar logout-dialog-actions">
100
+ <button type="button" class="secondary" data-close-logout-dialog>Cancel</button>
101
+ <form method="post" action="/logout" data-logout-form>
102
+ <input type="hidden" name="account" value="${escapeAttribute(input.accountId ?? "")}" />
103
+ <button type="submit" class="danger">Yes, log out</button>
104
+ </form>
105
+ </div>
106
+ </dialog>
107
+ ` : "";
65
108
  return `
66
109
  <nav class="primary-nav" aria-label="Primary">
67
110
  ${items.map((item) => `
@@ -70,7 +113,40 @@ export function renderPrimaryNav(input) {
70
113
  <span>${item.label}</span>
71
114
  </a>
72
115
  `).join("")}
116
+ ${menuItems.map((item) => `
117
+ ${"href" in item ? `
118
+ <a class="nav-link nav-mobile-extra${item.id === input.current ? " is-active" : ""}" href="${escapeAttribute(item.href ?? "#")}">
119
+ <span>${escapeHtml(item.label)}</span>
120
+ </a>
121
+ ` : `
122
+ <button type="button" class="nav-link nav-mobile-extra nav-action-link" data-open-logout-dialog>
123
+ <span>${escapeHtml(item.label)}</span>
124
+ </button>
125
+ `}
126
+ `).join("")}
127
+ ${menuItems.length ? `
128
+ <details class="nav-menu">
129
+ <summary class="nav-link nav-menu-trigger" aria-label="Open navigation menu">
130
+ <span class="nav-icon nav-menu-desktop-icon" aria-hidden="true">${renderNavIcon("more")}</span>
131
+ <span class="nav-icon nav-menu-mobile-icon" aria-hidden="true">${renderMenuIcon()}</span>
132
+ <span class="nav-menu-label">Menu</span>
133
+ </summary>
134
+ <div class="nav-menu-panel" role="menu">
135
+ ${mobileMenuPrimaryItems.map((item) => `
136
+ <a class="nav-menu-item nav-menu-mobile-only${item.id === input.current ? " is-active" : ""}" role="menuitem" href="${escapeAttribute(item.href ?? "#")}">${escapeHtml(item.label)}</a>
137
+ `).join("")}
138
+ ${menuItems.map((item) => `
139
+ ${"href" in item ? `
140
+ <a class="nav-menu-item${item.id === input.current ? " is-active" : ""}" role="menuitem" href="${escapeAttribute(item.href ?? "#")}">${escapeHtml(item.label)}</a>
141
+ ` : `
142
+ <button type="button" class="nav-menu-item nav-menu-button" role="menuitem" data-open-logout-dialog>${escapeHtml(item.label)}</button>
143
+ `}
144
+ `).join("")}
145
+ </div>
146
+ </details>
147
+ ` : ""}
73
148
  </nav>
149
+ ${logoutDialog}
74
150
  `;
75
151
  }
76
152
  export function renderBrandLockup(input) {
@@ -100,24 +176,24 @@ export function renderPageShell(input) {
100
176
  <link rel="icon" href="/assets/favicon.ico" sizes="any" />
101
177
  <link rel="preconnect" href="https://fonts.googleapis.com" />
102
178
  <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
103
- <link href="https://fonts.googleapis.com/css2?family=Instrument+Serif:ital@0;1&family=Manrope:wght@400;500;600;700;800&display=swap" rel="stylesheet" />
179
+ <link href="https://fonts.googleapis.com/css2?family=Bebas+Neue&family=Instrument+Serif:ital@0;1&family=JetBrains+Mono:wght@500;600;700;800&family=Manrope:wght@400;500;600;700;800&display=swap" rel="stylesheet" />
104
180
  <style>
105
181
  :root {
106
- color-scheme: light;
107
- --bg: #f8f4eb;
108
- --paper: rgba(255, 252, 247, 0.88);
109
- --paper-strong: rgba(255, 252, 247, 0.96);
182
+ color-scheme: dark;
183
+ --bg: #030603;
184
+ --paper: rgba(7, 13, 7, 0.82);
185
+ --paper-strong: rgba(12, 20, 12, 0.96);
110
186
  --panel: transparent;
111
- --panel-muted: rgba(250, 245, 234, 0.9);
112
- --ink: #2f3748;
113
- --muted: #74829c;
114
- --line: rgba(209, 219, 233, 0.9);
115
- --line-strong: rgba(191, 164, 109, 0.42);
116
- --accent: #dec081;
117
- --accent-deep: #243041;
118
- --accent-soft: rgba(222, 192, 129, 0.18);
119
- --shadow: 0 24px 80px rgba(15, 23, 42, 0.08);
120
- --shadow-soft: 0 16px 36px rgba(148, 109, 42, 0.08);
187
+ --panel-muted: rgba(18, 28, 15, 0.82);
188
+ --ink: #fff9d7;
189
+ --muted: #a6b39b;
190
+ --line: rgba(210, 255, 110, 0.2);
191
+ --line-strong: rgba(248, 210, 74, 0.46);
192
+ --accent: #d7ff46;
193
+ --accent-deep: #0b1209;
194
+ --accent-soft: rgba(215, 255, 70, 0.16);
195
+ --shadow: 0 28px 90px rgba(0, 0, 0, 0.5);
196
+ --shadow-soft: 0 18px 42px rgba(0, 0, 0, 0.32);
121
197
  --radius-lg: 32px;
122
198
  --radius-md: 26px;
123
199
  --radius-sm: 18px;
@@ -141,10 +217,10 @@ export function renderPageShell(input) {
141
217
  color: var(--ink);
142
218
  font-family: "Manrope", sans-serif;
143
219
  background:
144
- radial-gradient(circle at 12% 18%, rgba(222, 192, 129, 0.28), transparent 24%),
145
- radial-gradient(circle at 84% 12%, rgba(123, 92, 29, 0.12), transparent 22%),
146
- linear-gradient(180deg, rgba(255, 255, 255, 0.65), rgba(255, 255, 255, 0)),
147
- linear-gradient(145deg, #f8f4eb 0%, #f1e7d3 52%, #e9dbba 100%);
220
+ radial-gradient(circle at 14% 14%, rgba(65, 255, 109, 0.2), transparent 26%),
221
+ radial-gradient(circle at 84% 8%, rgba(255, 216, 75, 0.18), transparent 28%),
222
+ radial-gradient(circle at 72% 82%, rgba(91, 146, 255, 0.12), transparent 24%),
223
+ linear-gradient(145deg, #020402 0%, #071006 46%, #171603 100%);
148
224
  background-attachment: fixed;
149
225
  }
150
226
 
@@ -154,10 +230,26 @@ export function renderPageShell(input) {
154
230
  inset: 0;
155
231
  pointer-events: none;
156
232
  background-image:
157
- linear-gradient(rgba(96, 74, 36, 0.035) 1px, transparent 1px),
158
- linear-gradient(90deg, rgba(96, 74, 36, 0.035) 1px, transparent 1px);
233
+ linear-gradient(rgba(223, 255, 118, 0.055) 1px, transparent 1px),
234
+ linear-gradient(90deg, rgba(223, 255, 118, 0.045) 1px, transparent 1px),
235
+ linear-gradient(115deg, transparent 0 47%, rgba(255, 222, 88, 0.04) 48% 52%, transparent 53% 100%);
159
236
  background-size: 30px 30px;
160
- mask-image: linear-gradient(180deg, rgba(0, 0, 0, 0.38), transparent 86%);
237
+ mask-image: linear-gradient(180deg, rgba(0, 0, 0, 0.72), transparent 88%);
238
+ }
239
+
240
+ body::after {
241
+ content: "";
242
+ position: fixed;
243
+ inset: auto -10% -18% -10%;
244
+ height: 34vh;
245
+ pointer-events: none;
246
+ background:
247
+ repeating-linear-gradient(90deg, rgba(215, 255, 70, 0.18) 0 2px, transparent 2px 72px),
248
+ linear-gradient(180deg, transparent, rgba(215, 255, 70, 0.08));
249
+ filter: blur(0.2px);
250
+ opacity: 0.45;
251
+ transform: perspective(520px) rotateX(58deg);
252
+ transform-origin: bottom center;
161
253
  }
162
254
 
163
255
  a {
@@ -380,6 +472,95 @@ export function renderPageShell(input) {
380
472
  box-shadow: 0 8px 20px rgba(101, 73, 18, 0.08);
381
473
  }
382
474
 
475
+ .nav-menu {
476
+ position: relative;
477
+ flex: 0 0 auto;
478
+ }
479
+
480
+ .nav-menu > summary {
481
+ list-style: none;
482
+ cursor: pointer;
483
+ }
484
+
485
+ .nav-menu > summary::-webkit-details-marker {
486
+ display: none;
487
+ }
488
+
489
+ .nav-menu-trigger {
490
+ min-width: 34px;
491
+ padding: 0 8px;
492
+ color: rgba(111, 100, 81, 0.68);
493
+ }
494
+
495
+ .nav-menu-trigger:hover,
496
+ .nav-menu[open] > .nav-menu-trigger {
497
+ color: rgba(47, 55, 72, 0.82);
498
+ }
499
+
500
+ .nav-menu-label {
501
+ display: none;
502
+ }
503
+
504
+ .nav-menu-mobile-icon,
505
+ .nav-menu-mobile-only {
506
+ display: none;
507
+ }
508
+
509
+ .nav-menu-panel {
510
+ position: absolute;
511
+ z-index: 40;
512
+ top: calc(100% + 8px);
513
+ right: 0;
514
+ display: grid;
515
+ width: max-content;
516
+ min-width: 142px;
517
+ padding: 6px;
518
+ border: 1px solid rgba(191, 164, 109, 0.3);
519
+ border-radius: 14px;
520
+ background: rgba(255, 252, 247, 0.98);
521
+ box-shadow: 0 18px 38px rgba(81, 58, 20, 0.15);
522
+ }
523
+
524
+ .nav-menu-item {
525
+ display: flex;
526
+ align-items: center;
527
+ justify-content: flex-start;
528
+ width: 100%;
529
+ min-height: 34px;
530
+ padding: 0 10px;
531
+ border: 0;
532
+ border-radius: 10px;
533
+ background: transparent;
534
+ color: #5d6a80;
535
+ font-size: 0.88rem;
536
+ font-weight: 700;
537
+ font-family: inherit;
538
+ text-align: left;
539
+ text-decoration: none;
540
+ white-space: nowrap;
541
+ cursor: pointer;
542
+ }
543
+
544
+ .nav-menu-item:hover,
545
+ .nav-menu-item.is-active {
546
+ background: rgba(244, 236, 223, 0.86);
547
+ color: var(--ink);
548
+ }
549
+
550
+ .nav-menu-item.nav-menu-mobile-only {
551
+ display: none;
552
+ }
553
+
554
+ .nav-action-link {
555
+ border: 1px solid transparent;
556
+ background: transparent;
557
+ font-family: inherit;
558
+ }
559
+
560
+ .nav-mobile-extra {
561
+ display: none;
562
+ }
563
+
383
564
  .nav-icon,
384
565
  .nav-icon svg {
385
566
  width: 16px;
@@ -506,6 +687,55 @@ export function renderPageShell(input) {
506
687
  grid-template-columns: repeat(3, minmax(0, 1fr));
507
688
  }
508
689
 
690
+ .logout-dialog {
691
+ width: min(28rem, calc(100vw - 1.5rem));
692
+ padding: 0;
693
+ border: 1px solid rgba(235, 195, 195, 0.96);
694
+ border-radius: 30px;
695
+ background: rgba(255, 250, 250, 0.98);
696
+ box-shadow: 0 28px 72px rgba(113, 30, 30, 0.16);
697
+ }
698
+
699
+ .logout-dialog::backdrop {
700
+ background: rgba(36, 24, 24, 0.24);
701
+ backdrop-filter: blur(8px);
702
+ }
703
+
704
+ .logout-dialog-head {
705
+ display: grid;
706
+ gap: 12px;
707
+ padding: 24px 24px 20px;
708
+ border-bottom: 1px solid rgba(235, 195, 195, 0.96);
709
+ background: rgba(148, 47, 47, 0.05);
710
+ }
711
+
712
+ .logout-dialog-kicker {
713
+ margin-bottom: 0;
714
+ color: #a33f3f;
715
+ }
716
+
717
+ .logout-dialog-head h3 {
718
+ margin: 0;
719
+ font-size: 2rem;
720
+ line-height: 0.95;
721
+ letter-spacing: -0.05em;
722
+ color: #571d1d;
723
+ }
724
+
725
+ .logout-dialog-head p {
726
+ margin: 0;
727
+ color: rgba(109, 36, 36, 0.8);
728
+ }
729
+
730
+ .logout-dialog-actions {
731
+ justify-content: flex-end;
732
+ padding: 20px 24px 24px;
733
+ }
734
+
735
+ .logout-dialog-actions form {
736
+ margin: 0;
737
+ }
738
+
509
739
  .stack {
510
740
  display: grid;
511
741
  gap: 16px;
@@ -582,6 +812,25 @@ export function renderPageShell(input) {
582
812
  color: var(--ink);
583
813
  }
584
814
 
815
+ .button.danger,
816
+ button.danger {
817
+ border-color: rgba(192, 90, 90, 0.42);
818
+ background: #9f3d3d;
819
+ color: #fff8f8;
820
+ }
821
+
822
+ .button.danger:hover,
823
+ button.danger:hover {
824
+ border-color: rgba(160, 58, 58, 0.62);
825
+ box-shadow: 0 12px 28px rgba(128, 38, 38, 0.18);
826
+ }
827
+
828
+ .nav-menu-button:hover,
829
+ .nav-action-link:hover {
830
+ transform: none;
831
+ box-shadow: none;
832
+ }
833
+
585
834
  .button.ghost,
586
835
  button.ghost,
587
836
  .link-button.ghost {
@@ -764,7 +1013,1073 @@ export function renderPageShell(input) {
764
1013
 
765
1014
  ${input.style ?? ""}
766
1015
 
767
- @media (max-width: 767px) {
1016
+ /* HyperFrames render-bay skin. Kept after page CSS so old surfaces cannot leak through visually. */
1017
+ .frame {
1018
+ overflow: visible;
1019
+ }
1020
+
1021
+ .frame-body {
1022
+ position: relative;
1023
+ z-index: 1;
1024
+ }
1025
+
1026
+ .topbar {
1027
+ position: relative;
1028
+ z-index: 40;
1029
+ border: 1px solid rgba(215, 255, 70, 0.22);
1030
+ background:
1031
+ linear-gradient(135deg, rgba(10, 18, 9, 0.92), rgba(15, 18, 5, 0.84)),
1032
+ radial-gradient(circle at 10% 0%, rgba(215, 255, 70, 0.14), transparent 36%);
1033
+ box-shadow:
1034
+ inset 0 1px 0 rgba(255, 255, 255, 0.08),
1035
+ 0 24px 68px rgba(0, 0, 0, 0.44);
1036
+ backdrop-filter: blur(18px);
1037
+ }
1038
+
1039
+ .brand-lockup::before {
1040
+ content: "";
1041
+ width: 10px;
1042
+ height: 10px;
1043
+ border-radius: 999px;
1044
+ background: #d7ff46;
1045
+ box-shadow: 0 0 0 5px rgba(215, 255, 70, 0.12), 0 0 26px rgba(215, 255, 70, 0.64);
1046
+ flex: 0 0 auto;
1047
+ }
1048
+
1049
+ .brand-logo-image {
1050
+ filter: saturate(1.12) contrast(1.08);
1051
+ }
1052
+
1053
+ .brand-title,
1054
+ .brand-title-static,
1055
+ h1,
1056
+ h2 {
1057
+ color: var(--ink);
1058
+ font-family: "Bebas Neue", "Instrument Serif", serif;
1059
+ font-weight: 400;
1060
+ letter-spacing: 0.01em;
1061
+ text-transform: uppercase;
1062
+ }
1063
+
1064
+ h3 {
1065
+ color: var(--ink);
1066
+ }
1067
+
1068
+ p,
1069
+ .brand-account-meta,
1070
+ .brand-account-meta span,
1071
+ .helper,
1072
+ .tiny,
1073
+ .meta-copy {
1074
+ color: var(--muted);
1075
+ }
1076
+
1077
+ .primary-nav {
1078
+ position: relative;
1079
+ z-index: 45;
1080
+ border: 1px solid rgba(215, 255, 70, 0.18);
1081
+ background:
1082
+ linear-gradient(180deg, rgba(18, 28, 15, 0.72), rgba(6, 12, 6, 0.78)),
1083
+ repeating-linear-gradient(90deg, rgba(215, 255, 70, 0.07) 0 1px, transparent 1px 38px);
1084
+ box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.06);
1085
+ }
1086
+
1087
+ .nav-link,
1088
+ .nav-menu-trigger,
1089
+ .nav-menu-item {
1090
+ color: rgba(255, 249, 215, 0.72);
1091
+ font-family: "JetBrains Mono", "SFMono-Regular", monospace;
1092
+ font-size: 0.78rem;
1093
+ font-weight: 700;
1094
+ letter-spacing: 0.02em;
1095
+ }
1096
+
1097
+ .nav-link:hover,
1098
+ .nav-menu-trigger:hover,
1099
+ .nav-menu[open] > .nav-menu-trigger {
1100
+ color: var(--ink);
1101
+ }
1102
+
1103
+ .nav-link.is-active,
1104
+ .nav-menu-item.is-active {
1105
+ border-color: rgba(215, 255, 70, 0.42);
1106
+ background: rgba(215, 255, 70, 0.12);
1107
+ color: #f8ffd6;
1108
+ box-shadow: 0 0 0 1px rgba(215, 255, 70, 0.08), 0 10px 28px rgba(0, 0, 0, 0.28);
1109
+ }
1110
+
1111
+ .nav-menu-panel,
1112
+ .logout-dialog,
1113
+ .notice,
1114
+ .empty-state {
1115
+ z-index: 80;
1116
+ border-color: rgba(215, 255, 70, 0.22);
1117
+ background: rgba(8, 14, 8, 0.96);
1118
+ color: var(--ink);
1119
+ box-shadow: 0 26px 70px rgba(0, 0, 0, 0.52);
1120
+ }
1121
+
1122
+ .surface,
1123
+ .surface-hero,
1124
+ .surface-muted,
1125
+ .page-section,
1126
+ .developer-panel,
1127
+ .settings-pane,
1128
+ .library-shell,
1129
+ .help-shell,
1130
+ .discover-shell,
1131
+ .calendar-shell,
1132
+ .custom-inpaint-panel,
1133
+ .custom-inpaint-stage,
1134
+ .custom-inpaint-output,
1135
+ .editor-inpaint-panel,
1136
+ .history-toolbar,
1137
+ .history-group,
1138
+ .history-subgroup,
1139
+ .history-linked-job,
1140
+ .history-media-modal,
1141
+ .editor-hero,
1142
+ .editor-section,
1143
+ .editor-panel,
1144
+ .editor-modal,
1145
+ .editor-media-modal,
1146
+ .editor-inpaint-modal,
1147
+ .vf-editor-chat-http-card,
1148
+ .vf-editor-chat-http-modal,
1149
+ .library-post,
1150
+ .library-options-panel,
1151
+ .calendar-main,
1152
+ .calendar-sidebar,
1153
+ .calendar-day-panel,
1154
+ .calendar-schedule-modal,
1155
+ .help-details {
1156
+ border-color: rgba(215, 255, 70, 0.18) !important;
1157
+ background:
1158
+ linear-gradient(180deg, rgba(13, 22, 11, 0.9), rgba(6, 11, 6, 0.9)),
1159
+ radial-gradient(circle at 12% 0%, rgba(215, 255, 70, 0.1), transparent 30%) !important;
1160
+ color: var(--ink);
1161
+ box-shadow: var(--shadow-soft);
1162
+ }
1163
+
1164
+ .surface-hero,
1165
+ .editor-hero,
1166
+ .discover-shell {
1167
+ position: relative;
1168
+ overflow: hidden;
1169
+ }
1170
+
1171
+ .surface-hero::after,
1172
+ .editor-hero::after,
1173
+ .discover-shell::after {
1174
+ content: "";
1175
+ position: absolute;
1176
+ inset: auto 20px 18px 20px;
1177
+ height: 8px;
1178
+ border-radius: 999px;
1179
+ background: repeating-linear-gradient(90deg, rgba(215, 255, 70, 0.9) 0 18px, rgba(215, 255, 70, 0.2) 18px 22px, transparent 22px 54px);
1180
+ opacity: 0.4;
1181
+ pointer-events: none;
1182
+ }
1183
+
1184
+ .button,
1185
+ button,
1186
+ .link-button,
1187
+ .cta-button,
1188
+ .history-filter-button,
1189
+ .history-action-link,
1190
+ .editor-history-button,
1191
+ .vf-editor-chat-new-thread,
1192
+ .vf-editor-chat-history-toggle,
1193
+ .vf-editor-chat-history-close,
1194
+ .vf-editor-chat-back-button {
1195
+ border-color: rgba(215, 255, 70, 0.42);
1196
+ background: linear-gradient(180deg, #e8ff63, #bddf26);
1197
+ color: #071006;
1198
+ font-family: "JetBrains Mono", "SFMono-Regular", monospace;
1199
+ font-weight: 800;
1200
+ letter-spacing: -0.02em;
1201
+ box-shadow:
1202
+ inset 0 1px 0 rgba(255, 255, 255, 0.48),
1203
+ 0 12px 28px rgba(174, 219, 32, 0.18);
1204
+ }
1205
+
1206
+ .button:hover,
1207
+ button:hover,
1208
+ .link-button:hover,
1209
+ .cta-button:hover,
1210
+ .history-filter-button:hover,
1211
+ .history-action-link:hover,
1212
+ .editor-history-button:hover {
1213
+ border-color: rgba(248, 210, 74, 0.74);
1214
+ box-shadow:
1215
+ inset 0 1px 0 rgba(255, 255, 255, 0.54),
1216
+ 0 14px 34px rgba(215, 255, 70, 0.24);
1217
+ }
1218
+
1219
+ .button.secondary,
1220
+ button.secondary,
1221
+ .link-button.secondary,
1222
+ .history-filter-button:not(.is-primary),
1223
+ .editor-history-button:not(.is-primary),
1224
+ .discover-media-modal-action,
1225
+ .history-media-modal-source,
1226
+ .editor-media-modal-source {
1227
+ border-color: rgba(255, 249, 215, 0.16);
1228
+ background: rgba(255, 249, 215, 0.08);
1229
+ color: rgba(255, 249, 215, 0.88);
1230
+ box-shadow: none;
1231
+ }
1232
+
1233
+ .input,
1234
+ input,
1235
+ select,
1236
+ textarea {
1237
+ border-color: rgba(215, 255, 70, 0.22);
1238
+ background: rgba(0, 0, 0, 0.34);
1239
+ color: var(--ink);
1240
+ box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.05);
1241
+ }
1242
+
1243
+ input::placeholder,
1244
+ textarea::placeholder {
1245
+ color: rgba(166, 179, 155, 0.66);
1246
+ }
1247
+
1248
+ input:focus,
1249
+ select:focus,
1250
+ textarea:focus {
1251
+ border-color: rgba(215, 255, 70, 0.74);
1252
+ box-shadow: 0 0 0 4px rgba(215, 255, 70, 0.13);
1253
+ }
1254
+
1255
+ label,
1256
+ .label,
1257
+ .kicker,
1258
+ .eyebrow,
1259
+ .pill,
1260
+ .pill-tag,
1261
+ .history-chip,
1262
+ .editor-pill,
1263
+ .vf-editor-chat-kicker,
1264
+ .vf-editor-chat-tracer-label,
1265
+ .vf-editor-chat-http-label {
1266
+ color: rgba(215, 255, 70, 0.82);
1267
+ font-family: "JetBrains Mono", "SFMono-Regular", monospace;
1268
+ letter-spacing: 0.18em;
1269
+ }
1270
+
1271
+ .pill,
1272
+ .pill-tag,
1273
+ .history-chip,
1274
+ .editor-pill,
1275
+ .vf-editor-chat-tracer-chip,
1276
+ .vf-editor-chat-thread-chip {
1277
+ border-color: rgba(215, 255, 70, 0.18);
1278
+ background: rgba(215, 255, 70, 0.08);
1279
+ color: rgba(255, 249, 215, 0.86);
1280
+ }
1281
+
1282
+ pre,
1283
+ code,
1284
+ .vf-editor-chat-http-pre {
1285
+ border-color: rgba(215, 255, 70, 0.18);
1286
+ background: rgba(0, 0, 0, 0.48);
1287
+ color: #e8ff9b;
1288
+ }
1289
+
1290
+ .discover-shell {
1291
+ border: 1px solid rgba(215, 255, 70, 0.22);
1292
+ background:
1293
+ radial-gradient(circle at 9% 12%, rgba(215, 255, 70, 0.12), transparent 30%),
1294
+ linear-gradient(135deg, rgba(9, 15, 8, 0.96), rgba(3, 6, 3, 0.94)) !important;
1295
+ box-shadow: 0 34px 100px rgba(0, 0, 0, 0.5);
1296
+ }
1297
+
1298
+ .discover-sidebar {
1299
+ border-right-color: rgba(215, 255, 70, 0.18);
1300
+ background:
1301
+ linear-gradient(180deg, rgba(16, 27, 12, 0.94), rgba(4, 8, 4, 0.9)),
1302
+ repeating-linear-gradient(0deg, rgba(215, 255, 70, 0.06) 0 1px, transparent 1px 44px) !important;
1303
+ }
1304
+
1305
+ .discover-filter-block {
1306
+ padding: 18px;
1307
+ border: 1px solid rgba(215, 255, 70, 0.16);
1308
+ border-radius: 20px;
1309
+ background: rgba(0, 0, 0, 0.22);
1310
+ }
1311
+
1312
+ .bookmarks-row,
1313
+ .switch-shell,
1314
+ .discover-filter-panel > summary {
1315
+ border-color: rgba(215, 255, 70, 0.18);
1316
+ background: rgba(0, 0, 0, 0.26);
1317
+ color: rgba(255, 249, 215, 0.82);
1318
+ }
1319
+
1320
+ .switch-shell[data-active="true"],
1321
+ .switch-input:checked + .switch-knob {
1322
+ background: #d7ff46;
1323
+ }
1324
+
1325
+ .discover-results {
1326
+ background:
1327
+ linear-gradient(90deg, transparent 0 21px, rgba(215, 255, 70, 0.08) 21px 22px, transparent 22px 100%),
1328
+ linear-gradient(180deg, rgba(0, 0, 0, 0.12), transparent);
1329
+ background-size: 44px 100%, auto;
1330
+ }
1331
+
1332
+ .discover-count {
1333
+ color: rgba(215, 255, 70, 0.72);
1334
+ background: linear-gradient(180deg, rgba(5, 9, 5, 0.98), rgba(5, 9, 5, 0));
1335
+ font-family: "JetBrains Mono", "SFMono-Regular", monospace;
1336
+ letter-spacing: 0.02em;
1337
+ }
1338
+
1339
+ .discover-card {
1340
+ position: relative;
1341
+ overflow: hidden;
1342
+ border-color: rgba(215, 255, 70, 0.2);
1343
+ background:
1344
+ linear-gradient(90deg, rgba(215, 255, 70, 0.09) 0 1px, transparent 1px 100%),
1345
+ linear-gradient(180deg, rgba(17, 28, 13, 0.94), rgba(4, 8, 4, 0.94)) !important;
1346
+ background-size: 58px 100%, auto !important;
1347
+ box-shadow: 0 22px 60px rgba(0, 0, 0, 0.46);
1348
+ }
1349
+
1350
+ .discover-card::before {
1351
+ content: "TIMELINE LAYERS";
1352
+ position: absolute;
1353
+ top: 14px;
1354
+ right: 20px;
1355
+ color: rgba(215, 255, 70, 0.46);
1356
+ font-family: "JetBrains Mono", "SFMono-Regular", monospace;
1357
+ font-size: 0.65rem;
1358
+ font-weight: 800;
1359
+ letter-spacing: 0.22em;
1360
+ }
1361
+
1362
+ .discover-card-media {
1363
+ border-color: rgba(215, 255, 70, 0.18);
1364
+ background:
1365
+ linear-gradient(45deg, rgba(255, 255, 255, 0.025) 25%, transparent 25%),
1366
+ linear-gradient(-45deg, rgba(255, 255, 255, 0.025) 25%, transparent 25%),
1367
+ #050905;
1368
+ background-size: 24px 24px;
1369
+ box-shadow: inset 0 0 0 1px rgba(255, 249, 215, 0.04);
1370
+ }
1371
+
1372
+ .discover-card-media::after {
1373
+ content: "";
1374
+ position: absolute;
1375
+ left: 16px;
1376
+ right: 16px;
1377
+ bottom: 16px;
1378
+ height: 5px;
1379
+ border-radius: 999px;
1380
+ background: linear-gradient(90deg, #d7ff46 0 26%, rgba(215, 255, 70, 0.2) 26% 64%, rgba(248, 210, 74, 0.78) 64% 100%);
1381
+ opacity: 0.78;
1382
+ }
1383
+
1384
+ .discover-card-title-wrap h2,
1385
+ .library-post-title,
1386
+ .history-title,
1387
+ .editor-title,
1388
+ .vf-editor-chat-empty h2,
1389
+ .vf-editor-chat-disabled h2 {
1390
+ color: var(--ink);
1391
+ }
1392
+
1393
+ .discover-card-meta,
1394
+ .discover-card-body p,
1395
+ .editor-note,
1396
+ .history-linked-job-meta,
1397
+ .library-post-meta,
1398
+ .vf-editor-chat-empty p,
1399
+ .vf-editor-chat-disabled p {
1400
+ color: rgba(201, 215, 188, 0.78);
1401
+ }
1402
+
1403
+ .difficulty-pill,
1404
+ .difficulty-pill[data-difficulty="hard"],
1405
+ .difficulty-pill[data-difficulty="expert"] {
1406
+ border-color: rgba(248, 210, 74, 0.42);
1407
+ background: rgba(248, 210, 74, 0.12);
1408
+ color: #ffe878;
1409
+ }
1410
+
1411
+ .copy-inline[data-state="done"] {
1412
+ border-color: rgba(215, 255, 70, 0.5);
1413
+ background: rgba(215, 255, 70, 0.12);
1414
+ color: var(--ink);
1415
+ }
1416
+
1417
+ .editor-floating-nav {
1418
+ border-color: rgba(215, 255, 70, 0.24);
1419
+ background: rgba(5, 10, 5, 0.9);
1420
+ box-shadow: 0 24px 70px rgba(0, 0, 0, 0.52);
1421
+ backdrop-filter: blur(18px);
1422
+ }
1423
+
1424
+ .editor-back-link {
1425
+ border-color: rgba(215, 255, 70, 0.42);
1426
+ background: #d7ff46;
1427
+ color: #071006;
1428
+ }
1429
+
1430
+ .editor-nav-title,
1431
+ .vf-editor-chat-brainstorm-title,
1432
+ .vf-editor-chat-header-title,
1433
+ .vf-editor-chat-header-subtitle,
1434
+ .vf-editor-chat-thread-chip-title,
1435
+ .vf-editor-chat-http-url,
1436
+ .editor-media-modal-title {
1437
+ color: var(--ink);
1438
+ }
1439
+
1440
+ .editor-chat-panel,
1441
+ .vf-editor-chat-thread,
1442
+ .vf-editor-chat-history-pane,
1443
+ .vf-editor-chat-header,
1444
+ .vf-editor-chat-empty,
1445
+ .vf-editor-chat-disabled,
1446
+ .vf-editor-chat-bubble,
1447
+ .vf-editor-chat-thread-chip,
1448
+ .vf-editor-chat-thread-menu {
1449
+ border-color: rgba(215, 255, 70, 0.16);
1450
+ background:
1451
+ linear-gradient(180deg, rgba(12, 20, 10, 0.96), rgba(4, 8, 4, 0.96)) !important;
1452
+ color: var(--ink);
1453
+ }
1454
+
1455
+ .vf-editor-chat-message.is-assistant .vf-editor-chat-bubble {
1456
+ border-color: rgba(215, 255, 70, 0.18);
1457
+ background: rgba(255, 249, 215, 0.08) !important;
1458
+ }
1459
+
1460
+ .vf-editor-chat-message.is-user .vf-editor-chat-bubble {
1461
+ background: rgba(215, 255, 70, 0.14) !important;
1462
+ }
1463
+
1464
+ .vf-editor-chat-composer,
1465
+ .vf-editor-chat-input-shell {
1466
+ border-color: rgba(215, 255, 70, 0.2);
1467
+ background: rgba(0, 0, 0, 0.32);
1468
+ }
1469
+
1470
+ .history-card,
1471
+ .history-subgroup,
1472
+ .history-linked-job,
1473
+ .library-post,
1474
+ .help-details,
1475
+ .settings-pane,
1476
+ .developer-panel {
1477
+ box-shadow: 0 18px 48px rgba(0, 0, 0, 0.36);
1478
+ }
1479
+
1480
+ .history-card-path,
1481
+ .history-linked-job-title,
1482
+ .history-card-time,
1483
+ .library-content-box,
1484
+ .calendar-ribbon-title,
1485
+ .calendar-post-title {
1486
+ color: var(--ink);
1487
+ }
1488
+
1489
+ .library-toolbar,
1490
+ .calendar-toolbar,
1491
+ .history-options-popover {
1492
+ border-color: rgba(215, 255, 70, 0.18);
1493
+ background: rgba(6, 11, 6, 0.94);
1494
+ }
1495
+
1496
+ .library-post[data-selected="true"] {
1497
+ border-color: rgba(215, 255, 70, 0.48);
1498
+ box-shadow: 0 0 0 1px rgba(215, 255, 70, 0.16), 0 18px 52px rgba(0, 0, 0, 0.42);
1499
+ }
1500
+
1501
+ .discover-media-modal,
1502
+ .custom-inpaint-lightbox-dialog,
1503
+ .logout-dialog-head {
1504
+ border-color: rgba(215, 255, 70, 0.18);
1505
+ background: rgba(8, 14, 8, 0.98);
1506
+ }
1507
+
1508
+ .discover-media-modal-head h2,
1509
+ .custom-inpaint-lightbox-title,
1510
+ .logout-dialog-head h3 {
1511
+ color: var(--ink);
1512
+ }
1513
+
1514
+ .discover-media-modal-stage,
1515
+ .custom-inpaint-lightbox-stage,
1516
+ .editor-media-modal-body {
1517
+ background: #020402;
1518
+ }
1519
+
1520
+ .auth-frame {
1521
+ overflow: visible;
1522
+ }
1523
+
1524
+ .auth-layout {
1525
+ align-items: stretch;
1526
+ overflow: auto;
1527
+ padding-bottom: 22px;
1528
+ }
1529
+
1530
+ .auth-shell-panel {
1531
+ position: relative;
1532
+ overflow: hidden;
1533
+ border-color: rgba(215, 255, 70, 0.22) !important;
1534
+ background:
1535
+ radial-gradient(circle at 12% 8%, rgba(215, 255, 70, 0.12), transparent 30%),
1536
+ linear-gradient(135deg, rgba(9, 15, 8, 0.96), rgba(3, 6, 3, 0.94)) !important;
1537
+ color: var(--ink);
1538
+ box-shadow: 0 34px 100px rgba(0, 0, 0, 0.5);
1539
+ }
1540
+
1541
+ .auth-shell-inner {
1542
+ min-height: min(680px, calc(100dvh - 148px));
1543
+ }
1544
+
1545
+ .auth-shell-copy {
1546
+ border-right-color: rgba(215, 255, 70, 0.18) !important;
1547
+ background:
1548
+ linear-gradient(180deg, rgba(16, 27, 12, 0.82), rgba(4, 8, 4, 0.68)),
1549
+ repeating-linear-gradient(0deg, rgba(215, 255, 70, 0.06) 0 1px, transparent 1px 44px) !important;
1550
+ }
1551
+
1552
+ .auth-copy-stack .label,
1553
+ .auth-plan-kicker,
1554
+ .mode-switch a {
1555
+ color: #e8ff63 !important;
1556
+ }
1557
+
1558
+ .auth-plan-card,
1559
+ .auth-shell,
1560
+ .form-panel {
1561
+ border-color: rgba(215, 255, 70, 0.18) !important;
1562
+ background: rgba(0, 0, 0, 0.26) !important;
1563
+ color: var(--ink);
1564
+ }
1565
+
1566
+ .auth-plan-card.featured {
1567
+ border-color: rgba(248, 210, 74, 0.42) !important;
1568
+ background:
1569
+ linear-gradient(180deg, rgba(248, 210, 74, 0.12), rgba(0, 0, 0, 0.24)) !important;
1570
+ }
1571
+
1572
+ .auth-plan-card p,
1573
+ .auth-shell p,
1574
+ .form-panel p {
1575
+ color: rgba(201, 215, 188, 0.78) !important;
1576
+ }
1577
+
1578
+ .auth-plan-name,
1579
+ .auth-plan-price strong,
1580
+ .auth-plan-features span,
1581
+ .form-panel label {
1582
+ color: var(--ink) !important;
1583
+ }
1584
+
1585
+ .form-panel input,
1586
+ .auth-shell input {
1587
+ border-color: rgba(215, 255, 70, 0.22) !important;
1588
+ background: rgba(0, 0, 0, 0.32) !important;
1589
+ color: var(--ink) !important;
1590
+ }
1591
+
1592
+ /* Dark surface normalization for legacy pages that still ship light local CSS. */
1593
+ .app-shell h1,
1594
+ .app-shell h2,
1595
+ .app-shell .history-title,
1596
+ .app-shell .settings-sidebar h1,
1597
+ .app-shell .calendar-ribbon-title {
1598
+ font-family: "Bebas Neue", "Arial Narrow", sans-serif !important;
1599
+ font-weight: 400 !important;
1600
+ letter-spacing: 0.01em !important;
1601
+ text-transform: uppercase !important;
1602
+ }
1603
+
1604
+ .auth-login-frame .auth-shell-inner {
1605
+ grid-template-columns: minmax(360px, 0.66fr) minmax(0, 1fr) !important;
1606
+ align-items: stretch;
1607
+ }
1608
+
1609
+ .auth-login-frame .auth-shell-form {
1610
+ order: 1;
1611
+ align-items: stretch;
1612
+ justify-content: stretch;
1613
+ padding: clamp(20px, 3vw, 34px);
1614
+ border: 1px solid rgba(215, 255, 70, 0.2);
1615
+ border-radius: 28px;
1616
+ background:
1617
+ radial-gradient(circle at 16% 12%, rgba(215, 255, 70, 0.12), transparent 34%),
1618
+ rgba(0, 0, 0, 0.26);
1619
+ }
1620
+
1621
+ .auth-login-frame .auth-shell-copy {
1622
+ order: 2;
1623
+ padding: clamp(18px, 2.2vw, 28px);
1624
+ border-right: 0 !important;
1625
+ border-left: 1px solid rgba(215, 255, 70, 0.14);
1626
+ }
1627
+
1628
+ .auth-login-frame .auth-shell {
1629
+ display: grid;
1630
+ width: 100%;
1631
+ align-content: center;
1632
+ }
1633
+
1634
+ .auth-login-frame .auth-plan-grid {
1635
+ max-height: min(54dvh, 520px);
1636
+ overflow: auto;
1637
+ padding-right: 6px;
1638
+ }
1639
+
1640
+ .auth-shell-form .form-panel {
1641
+ padding: clamp(22px, 3vw, 34px);
1642
+ border-radius: 24px;
1643
+ }
1644
+
1645
+ .auth-shell-form .form-panel h2 {
1646
+ font-size: clamp(3rem, 6vw, 5.4rem);
1647
+ line-height: 0.85;
1648
+ }
1649
+
1650
+ .auth-frame .price-panel,
1651
+ .auth-frame .auth-plan-features span,
1652
+ .settings-frame .settings-nav-panel > summary,
1653
+ .settings-frame .flockposter-dialog,
1654
+ .settings-frame .channel-menu,
1655
+ .settings-frame .channel-menu-panel {
1656
+ border-color: rgba(215, 255, 70, 0.18) !important;
1657
+ background:
1658
+ linear-gradient(180deg, rgba(13, 22, 11, 0.94), rgba(6, 11, 6, 0.94)) !important;
1659
+ color: var(--ink) !important;
1660
+ }
1661
+
1662
+ .auth-login-frame .auth-shell-panel {
1663
+ place-items: stretch;
1664
+ overflow: auto;
1665
+ }
1666
+
1667
+ .auth-login-frame .auth-shell-inner {
1668
+ min-height: 0;
1669
+ }
1670
+
1671
+ .settings-shell,
1672
+ .calendar-shell,
1673
+ .calendar-rail,
1674
+ .calendar-stage,
1675
+ .library-toolbar,
1676
+ .history-toolbar,
1677
+ .custom-inpaint-workbench,
1678
+ .vf-editor-chat-shell {
1679
+ color: var(--ink) !important;
1680
+ }
1681
+
1682
+ .settings-shell,
1683
+ .calendar-shell {
1684
+ border-color: rgba(215, 255, 70, 0.2) !important;
1685
+ background:
1686
+ linear-gradient(135deg, rgba(10, 18, 9, 0.94), rgba(3, 6, 3, 0.96)),
1687
+ radial-gradient(circle at 8% 8%, rgba(215, 255, 70, 0.12), transparent 32%) !important;
1688
+ box-shadow: 0 32px 90px rgba(0, 0, 0, 0.52) !important;
1689
+ }
1690
+
1691
+ .settings-sidebar,
1692
+ .settings-content,
1693
+ .calendar-rail,
1694
+ .calendar-stage {
1695
+ border-color: rgba(215, 255, 70, 0.16) !important;
1696
+ background:
1697
+ linear-gradient(180deg, rgba(14, 24, 11, 0.9), rgba(3, 7, 3, 0.92)),
1698
+ repeating-linear-gradient(0deg, rgba(215, 255, 70, 0.045) 0 1px, transparent 1px 42px) !important;
1699
+ }
1700
+
1701
+ .profile-card,
1702
+ .files-card,
1703
+ .settings-panel,
1704
+ .key-card,
1705
+ .attachment-card,
1706
+ .price-panel,
1707
+ .developer-panel,
1708
+ .wallet-panel,
1709
+ .wallet-history,
1710
+ .wallet-history-item,
1711
+ .wallet-history-empty,
1712
+ .file-card,
1713
+ .developer-card,
1714
+ .channel-card,
1715
+ .provider-key-card,
1716
+ .email-avatar-preview,
1717
+ .files-dropzone,
1718
+ .file-popconfirm,
1719
+ .settings-flash,
1720
+ .agency-list-card,
1721
+ .agency-account-card,
1722
+ .library-post,
1723
+ .library-options-panel,
1724
+ .library-row-menu,
1725
+ .library-content-box,
1726
+ .library-empty,
1727
+ .history-card,
1728
+ .history-group,
1729
+ .history-subgroup,
1730
+ .history-linked-job,
1731
+ .history-options-popover,
1732
+ .history-output-preview,
1733
+ .history-preview-empty,
1734
+ .history-summary-preview,
1735
+ .history-summary-preview-more,
1736
+ .history-mobile-details summary::after,
1737
+ .calendar-channel-card,
1738
+ .calendar-empty-card,
1739
+ .calendar-board,
1740
+ .calendar-weekdays,
1741
+ .calendar-grid,
1742
+ .calendar-cell,
1743
+ .calendar-day-post,
1744
+ .calendar-day-hero,
1745
+ .calendar-post-pill,
1746
+ .calendar-view-tabs,
1747
+ .calendar-nav,
1748
+ .custom-inpaint-upload,
1749
+ .custom-inpaint-history,
1750
+ .custom-inpaint-history-item,
1751
+ .custom-inpaint-history-empty,
1752
+ .custom-inpaint-history-popconfirm,
1753
+ .custom-inpaint-settings,
1754
+ .custom-inpaint-output,
1755
+ .editor-inpaint-toolbar,
1756
+ .editor-inpaint-color-row,
1757
+ .editor-inpaint-global,
1758
+ .editor-inpaint-prompt-field,
1759
+ .editor-inpaint-attachment-chip,
1760
+ .vf-editor-chat-footer,
1761
+ .vf-editor-chat-composer,
1762
+ .vf-editor-chat-input-shell,
1763
+ .vf-editor-chat-empty-prompts button {
1764
+ border-color: rgba(215, 255, 70, 0.18) !important;
1765
+ background:
1766
+ linear-gradient(180deg, rgba(16, 27, 12, 0.88), rgba(4, 8, 4, 0.9)),
1767
+ radial-gradient(circle at 0% 0%, rgba(215, 255, 70, 0.08), transparent 34%) !important;
1768
+ color: var(--ink) !important;
1769
+ box-shadow: 0 16px 44px rgba(0, 0, 0, 0.34) !important;
1770
+ }
1771
+
1772
+ .wallet-hero {
1773
+ border-color: rgba(248, 210, 74, 0.32) !important;
1774
+ background:
1775
+ linear-gradient(135deg, rgba(248, 210, 74, 0.16), rgba(215, 255, 70, 0.08)),
1776
+ rgba(0, 0, 0, 0.26) !important;
1777
+ }
1778
+
1779
+ .settings-nav-item,
1780
+ .library-options summary,
1781
+ .library-row-menu button,
1782
+ .library-row-menu a,
1783
+ .history-filter-button,
1784
+ .history-toolbar-back,
1785
+ .calendar-tab,
1786
+ .calendar-nav button,
1787
+ .calendar-ribbon-refresh,
1788
+ .calendar-refresh-button,
1789
+ .vf-editor-chat-empty-prompts button {
1790
+ border-color: rgba(215, 255, 70, 0.24) !important;
1791
+ background: rgba(255, 249, 215, 0.07) !important;
1792
+ color: rgba(255, 249, 215, 0.86) !important;
1793
+ box-shadow: none !important;
1794
+ }
1795
+
1796
+ .settings-nav-item.is-active,
1797
+ .calendar-tab.is-active,
1798
+ .calendar-day-chip.is-selected,
1799
+ .history-filter-button.is-primary {
1800
+ border-color: rgba(215, 255, 70, 0.66) !important;
1801
+ background: linear-gradient(180deg, #e8ff63, #bddf26) !important;
1802
+ color: #071006 !important;
1803
+ box-shadow: 0 12px 28px rgba(215, 255, 70, 0.18) !important;
1804
+ }
1805
+
1806
+ .settings-nav-item-danger {
1807
+ color: #ffb5a7 !important;
1808
+ }
1809
+
1810
+ .wallet-balance-label,
1811
+ .history-toolbar .label-group label,
1812
+ .library-options-panel label,
1813
+ .library-selection-count,
1814
+ .calendar-post-meta,
1815
+ .calendar-cell-more,
1816
+ .editor-inpaint-label,
1817
+ .custom-inpaint-status,
1818
+ .vf-editor-chat-history-kicker,
1819
+ .vf-editor-chat-kicker {
1820
+ color: rgba(215, 255, 70, 0.72) !important;
1821
+ }
1822
+
1823
+ .wallet-balance-amount,
1824
+ .wallet-history-item-title,
1825
+ .files-dropzone-title,
1826
+ .file-card-copy h3,
1827
+ .developer-card-titleline h3,
1828
+ .history-group-head h2,
1829
+ .history-subgroup-head h3,
1830
+ .history-path,
1831
+ .history-linked-job-title,
1832
+ .library-post-title,
1833
+ .library-content-details summary,
1834
+ .calendar-channel-name,
1835
+ .calendar-day-post-top,
1836
+ .calendar-empty-title,
1837
+ .custom-inpaint-history-title,
1838
+ .vf-editor-chat-input {
1839
+ color: var(--ink) !important;
1840
+ }
1841
+
1842
+ .wallet-history-item-meta,
1843
+ .files-dropzone-copy p,
1844
+ .file-popconfirm p,
1845
+ .profile-id-inline,
1846
+ .history-toolbar-copy .tiny,
1847
+ .history-card-time,
1848
+ .history-mobile-details summary,
1849
+ .history-linked-job-meta,
1850
+ .library-post-meta span,
1851
+ .custom-inpaint-history-subtitle,
1852
+ .vf-editor-chat-input::placeholder {
1853
+ color: rgba(201, 215, 188, 0.72) !important;
1854
+ }
1855
+
1856
+ .wallet-history-item-amount.is-credit,
1857
+ .history-chip.is-success,
1858
+ .calendar-status.sent,
1859
+ .calendar-post-pill.sent,
1860
+ .custom-inpaint-status[data-tone="success"] {
1861
+ color: #abff9b !important;
1862
+ border-color: rgba(171, 255, 155, 0.28) !important;
1863
+ }
1864
+
1865
+ .wallet-history-item-amount.is-debit,
1866
+ .history-chip.is-error,
1867
+ .calendar-status.error,
1868
+ .calendar-post-pill.error,
1869
+ .custom-inpaint-status[data-tone="error"] {
1870
+ color: #ff9f91 !important;
1871
+ border-color: rgba(255, 159, 145, 0.28) !important;
1872
+ }
1873
+
1874
+ .history-chip,
1875
+ .history-method,
1876
+ .library-post-meta span,
1877
+ .calendar-status,
1878
+ .calendar-today-badge {
1879
+ border-color: rgba(215, 255, 70, 0.18) !important;
1880
+ background: rgba(215, 255, 70, 0.08) !important;
1881
+ color: rgba(255, 249, 215, 0.86) !important;
1882
+ }
1883
+
1884
+ .calendar-board {
1885
+ overflow: hidden;
1886
+ }
1887
+
1888
+ .calendar-weekdays,
1889
+ .calendar-grid {
1890
+ border-color: rgba(215, 255, 70, 0.16) !important;
1891
+ }
1892
+
1893
+ .calendar-cell {
1894
+ box-shadow: inset 1px 0 0 rgba(215, 255, 70, 0.09), inset 0 1px 0 rgba(215, 255, 70, 0.09) !important;
1895
+ }
1896
+
1897
+ .calendar-cell.is-outside {
1898
+ opacity: 0.56;
1899
+ }
1900
+
1901
+ .calendar-day-chip {
1902
+ color: rgba(255, 249, 215, 0.92) !important;
1903
+ }
1904
+
1905
+ .calendar-day-chip.is-muted {
1906
+ color: rgba(201, 215, 188, 0.42) !important;
1907
+ }
1908
+
1909
+ .calendar-channel-card.is-selected {
1910
+ border-color: rgba(248, 210, 74, 0.42) !important;
1911
+ background:
1912
+ linear-gradient(180deg, rgba(248, 210, 74, 0.12), rgba(4, 8, 4, 0.88)) !important;
1913
+ }
1914
+
1915
+ .calendar-avatar,
1916
+ .calendar-platform-avatar,
1917
+ .file-card-art,
1918
+ .history-summary-preview-fallback {
1919
+ border-color: rgba(215, 255, 70, 0.18) !important;
1920
+ background: rgba(255, 249, 215, 0.08) !important;
1921
+ color: var(--ink) !important;
1922
+ }
1923
+
1924
+ .custom-inpaint-stage,
1925
+ .editor-inpaint-canvas-wrap {
1926
+ background:
1927
+ radial-gradient(circle at center, rgba(215, 255, 70, 0.05), transparent 44%),
1928
+ rgba(0, 0, 0, 0.32) !important;
1929
+ }
1930
+
1931
+ .custom-inpaint-upload {
1932
+ border-style: dashed !important;
1933
+ }
1934
+
1935
+ .editor-inpaint-prompt,
1936
+ .editor-inpaint-provider select,
1937
+ .vf-editor-chat-input,
1938
+ .settings-frame input,
1939
+ .settings-frame textarea,
1940
+ .settings-frame select,
1941
+ .calendar-frame input,
1942
+ .calendar-frame select,
1943
+ .history-toolbar input,
1944
+ .history-toolbar select,
1945
+ .library-search,
1946
+ .library-options input,
1947
+ .library-options select {
1948
+ border-color: rgba(215, 255, 70, 0.24) !important;
1949
+ background: rgba(0, 0, 0, 0.38) !important;
1950
+ color: var(--ink) !important;
1951
+ }
1952
+
1953
+ .editor-inpaint-color-picker {
1954
+ background: transparent !important;
1955
+ box-shadow: 0 0 0 1px rgba(215, 255, 70, 0.2) !important;
1956
+ }
1957
+
1958
+ .vf-editor-chat-footer {
1959
+ border-top: 1px solid rgba(215, 255, 70, 0.18) !important;
1960
+ }
1961
+
1962
+ .frame :is(
1963
+ .calendar-weekday,
1964
+ .calendar-day-view,
1965
+ .calendar-empty,
1966
+ .calendar-ribbon,
1967
+ .calendar-ribbon-channel,
1968
+ .history-http-action,
1969
+ .history-output-previews,
1970
+ .vf-editor-chat-http-card,
1971
+ .vf-editor-chat-http-modal,
1972
+ .vf-editor-chat-http-modal-header,
1973
+ .vf-editor-chat-http-body,
1974
+ .vf-editor-chat-http-pre,
1975
+ .custom-inpaint-panel-head,
1976
+ .custom-inpaint-tool-head,
1977
+ .editor-inpaint-color-row[data-active="true"]
1978
+ ) {
1979
+ border-color: rgba(215, 255, 70, 0.18) !important;
1980
+ background: rgba(6, 11, 6, 0.9) !important;
1981
+ color: var(--ink) !important;
1982
+ }
1983
+
1984
+ .frame :is(
1985
+ .calendar-nav-title,
1986
+ .calendar-day-date,
1987
+ .calendar-post-title,
1988
+ .vf-editor-chat-http-url,
1989
+ .vf-editor-chat-http-modal-url,
1990
+ .vf-editor-chat-http-status,
1991
+ .vf-editor-chat-http-expand
1992
+ ) {
1993
+ color: var(--ink) !important;
1994
+ }
1995
+
1996
+ .frame :is(
1997
+ .calendar-channel-handle-inline,
1998
+ .calendar-ribbon-channel-handle,
1999
+ .calendar-day-post-summary,
2000
+ .custom-inpaint-history-empty,
2001
+ .vf-editor-chat-http-label,
2002
+ .vf-editor-chat-http-meta
2003
+ ) {
2004
+ color: rgba(201, 215, 188, 0.78) !important;
2005
+ }
2006
+
2007
+ .vf-editor-chat-empty-prompts div,
2008
+ .vf-editor-chat-attachment,
2009
+ .vf-editor-chat-composer-attachment-item,
2010
+ .vf-editor-chat-http-pill {
2011
+ border-color: rgba(215, 255, 70, 0.18) !important;
2012
+ background: rgba(0, 0, 0, 0.34) !important;
2013
+ color: var(--ink) !important;
2014
+ }
2015
+
2016
+ .vf-editor-chat-attach-button,
2017
+ .vf-editor-chat-send-button,
2018
+ .editor-inpaint-attach-button,
2019
+ .custom-inpaint-history-icon,
2020
+ .custom-inpaint-history-check,
2021
+ .editor-inpaint-color-remove {
2022
+ border-color: rgba(215, 255, 70, 0.22) !important;
2023
+ background: rgba(255, 249, 215, 0.08) !important;
2024
+ color: var(--ink) !important;
2025
+ box-shadow: none !important;
2026
+ }
2027
+
2028
+ @media (max-width: 900px) {
2029
+ .auth-login-frame .auth-shell-inner {
2030
+ grid-template-columns: 1fr !important;
2031
+ }
2032
+
2033
+ .auth-login-frame .auth-shell-copy {
2034
+ border-left: 0 !important;
2035
+ border-top: 1px solid rgba(215, 255, 70, 0.14);
2036
+ }
2037
+ }
2038
+
2039
+ .frame h1,
2040
+ .frame h2,
2041
+ .frame h3,
2042
+ .frame summary,
2043
+ .frame [class$="-title"],
2044
+ .frame [class*="-title "],
2045
+ .frame [class*="-title"],
2046
+ .frame [class*="-head"] h1,
2047
+ .frame [class*="-head"] h2,
2048
+ .frame [class*="-head"] h3,
2049
+ .editor-workbench h1,
2050
+ .editor-workbench h2,
2051
+ .editor-workbench h3,
2052
+ .editor-workbench [class*="-title"],
2053
+ .vf-editor-chat-shell h1,
2054
+ .vf-editor-chat-shell h2,
2055
+ .vf-editor-chat-shell h3 {
2056
+ color: var(--ink) !important;
2057
+ }
2058
+
2059
+ .frame p,
2060
+ .frame [class*="-meta"],
2061
+ .frame [class*="-note"],
2062
+ .frame [class*="-desc"],
2063
+ .frame [class*="-subtitle"],
2064
+ .frame [class*="-empty"],
2065
+ .editor-workbench p,
2066
+ .editor-workbench [class*="-meta"],
2067
+ .editor-workbench [class*="-note"],
2068
+ .editor-workbench [class*="-desc"],
2069
+ .editor-workbench [class*="-subtitle"],
2070
+ .vf-editor-chat-shell p,
2071
+ .vf-editor-chat-shell [class*="-preview"],
2072
+ .vf-editor-chat-shell [class*="-tracers"] {
2073
+ color: rgba(201, 215, 188, 0.78) !important;
2074
+ }
2075
+
2076
+ .frame a:not(.button):not(.cta-button):not(.link-button),
2077
+ .editor-workbench a:not(.button):not(.cta-button):not(.link-button),
2078
+ .vf-editor-chat-shell a:not(.button):not(.cta-button):not(.link-button) {
2079
+ color: #e8ff63;
2080
+ }
2081
+
2082
+ @media (max-width: 1024px) {
768
2083
  .hero-grid,
769
2084
  .split-grid,
770
2085
  .page-hero {
@@ -772,7 +2087,7 @@ export function renderPageShell(input) {
772
2087
  }
773
2088
  }
774
2089
 
775
- @media (max-width: 767px) {
2090
+ @media (max-width: 1024px) {
776
2091
  html,
777
2092
  body {
778
2093
  height: auto;
@@ -808,7 +2123,7 @@ export function renderPageShell(input) {
808
2123
  }
809
2124
 
810
2125
  .brand-lockup {
811
- flex: 0 0 auto;
2126
+ flex: 1 1 auto;
812
2127
  width: auto;
813
2128
  gap: 7px;
814
2129
  }
@@ -835,7 +2150,7 @@ export function renderPageShell(input) {
835
2150
  }
836
2151
 
837
2152
  .topbar-actions {
838
- flex: 1 1 auto;
2153
+ flex: 0 0 auto;
839
2154
  width: auto;
840
2155
  justify-content: flex-end;
841
2156
  overflow: visible;
@@ -855,36 +2170,104 @@ export function renderPageShell(input) {
855
2170
  .primary-nav {
856
2171
  min-width: 0;
857
2172
  width: auto;
858
- max-width: 100%;
2173
+ max-width: none;
859
2174
  flex-wrap: nowrap;
860
2175
  justify-content: flex-end;
861
- gap: 2px;
862
- padding: 2px;
863
- border-radius: 18px;
864
- overflow: hidden;
2176
+ gap: 0;
2177
+ padding: 0;
2178
+ border: 0;
2179
+ border-radius: 0;
2180
+ background: transparent;
2181
+ box-shadow: none;
2182
+ overflow: visible;
2183
+ }
2184
+
2185
+ .primary-nav > .nav-link {
2186
+ display: none;
865
2187
  }
866
2188
 
867
2189
  .nav-link {
868
- flex: 0 1 auto;
869
- min-height: 34px;
870
- gap: 4px;
871
- padding: 0 6px;
2190
+ flex: 0 0 auto;
2191
+ min-height: 44px;
2192
+ gap: 6px;
2193
+ padding: 0 12px;
872
2194
  border-radius: 14px;
873
- font-size: 0.68rem;
2195
+ font-size: 0.86rem;
2196
+ }
2197
+
2198
+ .nav-mobile-extra {
2199
+ display: none;
2200
+ }
2201
+
2202
+ .nav-menu {
2203
+ display: block;
2204
+ }
2205
+
2206
+ .nav-menu-trigger {
2207
+ min-width: 44px;
2208
+ width: 44px;
2209
+ height: 44px;
2210
+ padding: 0;
2211
+ border: 1px solid rgba(191, 164, 109, 0.32);
2212
+ border-radius: 15px;
2213
+ background: rgba(255, 252, 247, 0.96);
2214
+ color: var(--ink);
2215
+ box-shadow: 0 8px 18px rgba(138, 102, 32, 0.1);
2216
+ }
2217
+
2218
+ .nav-menu-desktop-icon {
2219
+ display: none;
2220
+ }
2221
+
2222
+ .nav-menu-mobile-icon {
2223
+ display: inline-flex;
2224
+ }
2225
+
2226
+ .nav-menu-panel {
2227
+ top: calc(100% + 10px);
2228
+ right: 0;
2229
+ width: min(82vw, 260px);
2230
+ min-width: 190px;
2231
+ max-height: calc(100svh - 92px);
2232
+ overflow: auto;
2233
+ padding: 8px;
2234
+ border-radius: 16px;
2235
+ box-shadow: 0 20px 46px rgba(81, 58, 20, 0.18);
2236
+ }
2237
+
2238
+ .nav-menu-item {
2239
+ min-height: 42px;
2240
+ padding: 0 12px;
2241
+ border-radius: 12px;
2242
+ font-size: 0.88rem;
2243
+ }
2244
+
2245
+ .nav-menu-item.nav-menu-mobile-only {
2246
+ display: flex;
874
2247
  }
875
2248
 
876
2249
  .nav-link > span:not(.nav-icon) {
877
- display: inline;
878
- min-width: 0;
879
- overflow: visible;
880
- text-overflow: clip;
881
- white-space: nowrap;
2250
+ display: none;
2251
+ }
2252
+
2253
+ .nav-link > .nav-menu-label {
2254
+ display: none;
882
2255
  }
883
2256
 
884
2257
  .nav-icon,
885
2258
  .nav-icon svg {
886
- width: 12px;
887
- height: 12px;
2259
+ width: 18px;
2260
+ height: 18px;
2261
+ }
2262
+
2263
+ @media (max-width: 560px) {
2264
+ .primary-nav > .nav-link {
2265
+ display: none;
2266
+ }
2267
+
2268
+ .primary-nav > .nav-link > span:not(.nav-icon) {
2269
+ display: none;
2270
+ }
888
2271
  }
889
2272
 
890
2273
  @media (max-width: 374px) {
@@ -906,13 +2289,13 @@ export function renderPageShell(input) {
906
2289
  }
907
2290
 
908
2291
  .primary-nav {
909
- gap: 1px;
2292
+ gap: 3px;
910
2293
  }
911
2294
 
912
2295
  .nav-link {
913
2296
  gap: 3px;
914
- padding: 0 4px;
915
- font-size: 0.62rem;
2297
+ padding: 0 6px;
2298
+ font-size: 0.72rem;
916
2299
  }
917
2300
  }
918
2301
 
@@ -926,6 +2309,7 @@ export function renderPageShell(input) {
926
2309
  }
927
2310
  }
928
2311
  </style>
2312
+ <script src="/assets/sentry-config.js"></script>
929
2313
  </head>
930
2314
  <body>
931
2315
  <main class="app-shell${input.mainClass ? ` ${escapeHtml(input.mainClass)}` : ""}">
@@ -933,9 +2317,77 @@ export function renderPageShell(input) {
933
2317
  ${input.body}
934
2318
  </div>
935
2319
  </main>
2320
+ <script>
2321
+ (() => {
2322
+ const logoutDialog = document.querySelector("[data-logout-dialog]");
2323
+ const logoutForm = document.querySelector("[data-logout-form]");
2324
+ const openLogoutButtons = document.querySelectorAll("[data-open-logout-dialog]");
2325
+ const closeLogoutButtons = document.querySelectorAll("[data-close-logout-dialog]");
2326
+
2327
+ function clearLogoutAccountCache() {
2328
+ if (!(logoutForm instanceof HTMLFormElement)) {
2329
+ return;
2330
+ }
2331
+ const account = String(new FormData(logoutForm).get("account") || "").trim();
2332
+ if (!account) {
2333
+ return;
2334
+ }
2335
+ try {
2336
+ const registryIndexKey = "vidfarm:agency:accounts:index";
2337
+ const rawIds = window.localStorage.getItem(registryIndexKey);
2338
+ const ids = rawIds ? JSON.parse(rawIds) : [];
2339
+ if (Array.isArray(ids)) {
2340
+ window.localStorage.setItem(registryIndexKey, JSON.stringify(ids.filter((value) => value !== account)));
2341
+ }
2342
+ window.localStorage.removeItem("vidfarm:agency:account_" + account);
2343
+ window.localStorage.removeItem("vidfarm:flockposter-cache:v1_" + account);
2344
+ window.localStorage.removeItem("vidfarm:discover-bookmarks:v1_" + account);
2345
+ } catch {
2346
+ // Ignore storage failures.
2347
+ }
2348
+ }
2349
+
2350
+ if (logoutDialog instanceof HTMLDialogElement && openLogoutButtons.length) {
2351
+ openLogoutButtons.forEach((button) => {
2352
+ button.addEventListener("click", () => {
2353
+ if (!logoutDialog.open) {
2354
+ logoutDialog.showModal();
2355
+ }
2356
+ });
2357
+ });
2358
+ closeLogoutButtons.forEach((button) => {
2359
+ button.addEventListener("click", () => logoutDialog.close());
2360
+ });
2361
+ logoutDialog.addEventListener("click", (event) => {
2362
+ const rect = logoutDialog.getBoundingClientRect();
2363
+ const isBackdropClick =
2364
+ event.clientX < rect.left ||
2365
+ event.clientX > rect.right ||
2366
+ event.clientY < rect.top ||
2367
+ event.clientY > rect.bottom;
2368
+ if (isBackdropClick) {
2369
+ logoutDialog.close();
2370
+ }
2371
+ });
2372
+ } else if (openLogoutButtons.length && logoutForm instanceof HTMLFormElement) {
2373
+ openLogoutButtons.forEach((button) => {
2374
+ button.addEventListener("click", () => {
2375
+ if (window.confirm("Log out of this browser and clear local workspace access?")) {
2376
+ logoutForm.requestSubmit();
2377
+ }
2378
+ });
2379
+ });
2380
+ }
2381
+
2382
+ if (logoutForm instanceof HTMLFormElement) {
2383
+ logoutForm.addEventListener("submit", clearLogoutAccountCache);
2384
+ }
2385
+ })();
2386
+ </script>
936
2387
  ${input.runtimeBoot ? `<div id="page-runtime-root" hidden></div>
937
2388
  <script id="page-runtime-boot" type="application/json">${escapeJsonForHtml(input.runtimeBoot)}</script>
938
2389
  <script type="module" src="/assets/page-runtime-client-app.js"></script>` : ""}
939
2390
  </body>
940
2391
  </html>`;
941
2392
  }
2393
+ //# sourceMappingURL=page-shell.js.map