@mevdragon/vidfarm-devcli 0.2.13 → 0.3.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 (200) hide show
  1. package/README.md +11 -4
  2. package/SKILL.director.md +97 -0
  3. package/SKILL.platform.md +66 -6
  4. package/dist/src/cli.js +137 -1524
  5. package/dist/src/dev-serve.js +169 -0
  6. package/package.json +5 -24
  7. package/.env.example +0 -60
  8. package/auto-create-hyperframe-templates/AUTO_CREATE_HYPERFRAME_TEMPLATES.md +0 -275
  9. package/auto-create-hyperframe-templates/extractor-system-prompt.md +0 -128
  10. package/auto-create-hyperframe-templates/input-manifest.schema.json +0 -56
  11. package/auto-create-hyperframe-templates/lambda-memory-estimator.md +0 -118
  12. package/auto-create-hyperframe-templates/production-graph.schema.json +0 -314
  13. package/auto-create-hyperframe-templates/runbook.md +0 -198
  14. package/auto-create-hyperframe-templates/scripts/create-hyperframe-template.mjs +0 -368
  15. package/auto-create-hyperframe-templates/template-plan.schema.json +0 -311
  16. package/auto-create-hyperframe-templates/template-planner-prompt.md +0 -144
  17. package/auto-create-templates/AUTO_CREATE_TEMPLATES.md +0 -599
  18. package/auto-create-templates/extractor-system-prompt.md +0 -119
  19. package/auto-create-templates/production-graph.schema.json +0 -276
  20. package/auto-create-templates/runbook.md +0 -140
  21. package/auto-create-templates/template-plan.schema.json +0 -301
  22. package/auto-create-templates/template-planner-prompt.md +0 -137
  23. package/dist/src/account-pages-legacy.js +0 -9336
  24. package/dist/src/account-pages-legacy.js.map +0 -1
  25. package/dist/src/account-pages.js +0 -61
  26. package/dist/src/account-pages.js.map +0 -1
  27. package/dist/src/app.js +0 -14023
  28. package/dist/src/app.js.map +0 -1
  29. package/dist/src/cli.js.map +0 -1
  30. package/dist/src/composition-runtime.js +0 -581
  31. package/dist/src/composition-runtime.js.map +0 -1
  32. package/dist/src/config.js +0 -140
  33. package/dist/src/config.js.map +0 -1
  34. package/dist/src/context.js +0 -492
  35. package/dist/src/context.js.map +0 -1
  36. package/dist/src/dev-app-legacy.js +0 -694
  37. package/dist/src/dev-app-legacy.js.map +0 -1
  38. package/dist/src/dev-app.js +0 -6
  39. package/dist/src/dev-app.js.map +0 -1
  40. package/dist/src/domain.js +0 -2
  41. package/dist/src/domain.js.map +0 -1
  42. package/dist/src/editor-chat-history.js +0 -82
  43. package/dist/src/editor-chat-history.js.map +0 -1
  44. package/dist/src/editor-chat.js +0 -311
  45. package/dist/src/editor-chat.js.map +0 -1
  46. package/dist/src/frontend/flockposter-cache-store.js +0 -124
  47. package/dist/src/frontend/flockposter-cache-store.js.map +0 -1
  48. package/dist/src/frontend/homepage-client.js +0 -117
  49. package/dist/src/frontend/homepage-client.js.map +0 -1
  50. package/dist/src/frontend/homepage-shared.js +0 -4
  51. package/dist/src/frontend/homepage-shared.js.map +0 -1
  52. package/dist/src/frontend/homepage-store.js +0 -28
  53. package/dist/src/frontend/homepage-store.js.map +0 -1
  54. package/dist/src/frontend/homepage-view.js +0 -260
  55. package/dist/src/frontend/homepage-view.js.map +0 -1
  56. package/dist/src/frontend/page-runtime-client.js +0 -103
  57. package/dist/src/frontend/page-runtime-client.js.map +0 -1
  58. package/dist/src/frontend/page-runtime-store.js +0 -9
  59. package/dist/src/frontend/page-runtime-store.js.map +0 -1
  60. package/dist/src/frontend/sentry.js +0 -42
  61. package/dist/src/frontend/sentry.js.map +0 -1
  62. package/dist/src/frontend/template-editor-chat.js +0 -3767
  63. package/dist/src/frontend/template-editor-chat.js.map +0 -1
  64. package/dist/src/help-page.js +0 -333
  65. package/dist/src/help-page.js.map +0 -1
  66. package/dist/src/homepage.js +0 -919
  67. package/dist/src/homepage.js.map +0 -1
  68. package/dist/src/hyperframes/composition.js +0 -180
  69. package/dist/src/hyperframes/composition.js.map +0 -1
  70. package/dist/src/index.js +0 -16
  71. package/dist/src/index.js.map +0 -1
  72. package/dist/src/instrument.js +0 -30
  73. package/dist/src/instrument.js.map +0 -1
  74. package/dist/src/lib/crypto.js +0 -45
  75. package/dist/src/lib/crypto.js.map +0 -1
  76. package/dist/src/lib/dev-log.js +0 -54
  77. package/dist/src/lib/dev-log.js.map +0 -1
  78. package/dist/src/lib/display-name.js +0 -11
  79. package/dist/src/lib/display-name.js.map +0 -1
  80. package/dist/src/lib/ids.js +0 -24
  81. package/dist/src/lib/ids.js.map +0 -1
  82. package/dist/src/lib/images.js +0 -19
  83. package/dist/src/lib/images.js.map +0 -1
  84. package/dist/src/lib/json.js +0 -15
  85. package/dist/src/lib/json.js.map +0 -1
  86. package/dist/src/lib/template-dna.js +0 -543
  87. package/dist/src/lib/template-dna.js.map +0 -1
  88. package/dist/src/lib/template-paths.js +0 -28
  89. package/dist/src/lib/template-paths.js.map +0 -1
  90. package/dist/src/lib/template-style-options.js +0 -203
  91. package/dist/src/lib/template-style-options.js.map +0 -1
  92. package/dist/src/lib/time.js +0 -7
  93. package/dist/src/lib/time.js.map +0 -1
  94. package/dist/src/lib/video-quality-harness.js +0 -60
  95. package/dist/src/lib/video-quality-harness.js.map +0 -1
  96. package/dist/src/page-runtime.js +0 -2
  97. package/dist/src/page-runtime.js.map +0 -1
  98. package/dist/src/page-shell.js +0 -2393
  99. package/dist/src/page-shell.js.map +0 -1
  100. package/dist/src/primitive-context.js +0 -299
  101. package/dist/src/primitive-context.js.map +0 -1
  102. package/dist/src/primitive-registry.js +0 -2181
  103. package/dist/src/primitive-registry.js.map +0 -1
  104. package/dist/src/primitive-sdk.js +0 -4
  105. package/dist/src/primitive-sdk.js.map +0 -1
  106. package/dist/src/primitives/remotion/html-image.js +0 -30
  107. package/dist/src/primitives/remotion/html-image.js.map +0 -1
  108. package/dist/src/primitives/remotion/media-slideshow.js +0 -60
  109. package/dist/src/primitives/remotion/media-slideshow.js.map +0 -1
  110. package/dist/src/react-page-shell.js +0 -35
  111. package/dist/src/react-page-shell.js.map +0 -1
  112. package/dist/src/ready-post-schedule-component.js +0 -1515
  113. package/dist/src/ready-post-schedule-component.js.map +0 -1
  114. package/dist/src/registry.js +0 -296
  115. package/dist/src/registry.js.map +0 -1
  116. package/dist/src/runtime.js +0 -31
  117. package/dist/src/runtime.js.map +0 -1
  118. package/dist/src/services/api-call-history.js +0 -249
  119. package/dist/src/services/api-call-history.js.map +0 -1
  120. package/dist/src/services/auth.js +0 -152
  121. package/dist/src/services/auth.js.map +0 -1
  122. package/dist/src/services/billing.js +0 -231
  123. package/dist/src/services/billing.js.map +0 -1
  124. package/dist/src/services/chat-threads.js +0 -92
  125. package/dist/src/services/chat-threads.js.map +0 -1
  126. package/dist/src/services/fork-access.js +0 -94
  127. package/dist/src/services/fork-access.js.map +0 -1
  128. package/dist/src/services/ghostcut.js +0 -132
  129. package/dist/src/services/ghostcut.js.map +0 -1
  130. package/dist/src/services/hyperframes.js +0 -1014
  131. package/dist/src/services/hyperframes.js.map +0 -1
  132. package/dist/src/services/job-capacity.js +0 -14
  133. package/dist/src/services/job-capacity.js.map +0 -1
  134. package/dist/src/services/job-logs.js +0 -197
  135. package/dist/src/services/job-logs.js.map +0 -1
  136. package/dist/src/services/jobs.js +0 -136
  137. package/dist/src/services/jobs.js.map +0 -1
  138. package/dist/src/services/media-processing.js +0 -743
  139. package/dist/src/services/media-processing.js.map +0 -1
  140. package/dist/src/services/primitive-media-lambda.js +0 -280
  141. package/dist/src/services/primitive-media-lambda.js.map +0 -1
  142. package/dist/src/services/providers.js +0 -2870
  143. package/dist/src/services/providers.js.map +0 -1
  144. package/dist/src/services/rate-limits.js +0 -237
  145. package/dist/src/services/rate-limits.js.map +0 -1
  146. package/dist/src/services/remotion.js +0 -688
  147. package/dist/src/services/remotion.js.map +0 -1
  148. package/dist/src/services/serverless-auth.js +0 -374
  149. package/dist/src/services/serverless-auth.js.map +0 -1
  150. package/dist/src/services/serverless-jobs.js +0 -1074
  151. package/dist/src/services/serverless-jobs.js.map +0 -1
  152. package/dist/src/services/serverless-provider-keys.js +0 -401
  153. package/dist/src/services/serverless-provider-keys.js.map +0 -1
  154. package/dist/src/services/serverless-records.js +0 -1086
  155. package/dist/src/services/serverless-records.js.map +0 -1
  156. package/dist/src/services/serverless-template-configs.js +0 -67
  157. package/dist/src/services/serverless-template-configs.js.map +0 -1
  158. package/dist/src/services/storage.js +0 -382
  159. package/dist/src/services/storage.js.map +0 -1
  160. package/dist/src/services/template-certification.js +0 -475
  161. package/dist/src/services/template-certification.js.map +0 -1
  162. package/dist/src/services/template-loader.js +0 -99
  163. package/dist/src/services/template-loader.js.map +0 -1
  164. package/dist/src/services/template-runtime-bundles.js +0 -217
  165. package/dist/src/services/template-runtime-bundles.js.map +0 -1
  166. package/dist/src/services/template-sources.js +0 -1017
  167. package/dist/src/services/template-sources.js.map +0 -1
  168. package/dist/src/services/video-normalization.js +0 -2
  169. package/dist/src/services/video-normalization.js.map +0 -1
  170. package/dist/src/services/webhooks.js +0 -62
  171. package/dist/src/services/webhooks.js.map +0 -1
  172. package/dist/src/template-editor-pages.js +0 -6624
  173. package/dist/src/template-editor-pages.js.map +0 -1
  174. package/dist/src/template-editor-shell.js +0 -2713
  175. package/dist/src/template-editor-shell.js.map +0 -1
  176. package/dist/src/template-sdk.js +0 -4
  177. package/dist/src/template-sdk.js.map +0 -1
  178. package/dist/src/worker.js +0 -17
  179. package/dist/src/worker.js.map +0 -1
  180. package/public/assets/homepage-app.js +0 -54
  181. package/public/assets/homepage-client-app.js +0 -80
  182. package/public/assets/page-runtime-client-app.js +0 -94
  183. package/readme.secret.md +0 -89
  184. package/templates/vidfarm_template_0000/README.md +0 -106
  185. package/templates/vidfarm_template_0000/SKILL.md +0 -266
  186. package/templates/vidfarm_template_0000/assets/Abel-Regular.ttf +0 -0
  187. package/templates/vidfarm_template_0000/assets/DMSerifDisplay-Regular.ttf +0 -0
  188. package/templates/vidfarm_template_0000/assets/Montserrat[wght].ttf +0 -0
  189. package/templates/vidfarm_template_0000/assets/SourceCodePro[wght].ttf +0 -0
  190. package/templates/vidfarm_template_0000/assets/TikTokSans-SemiBold.ttf +0 -0
  191. package/templates/vidfarm_template_0000/assets/Yesteryear-Regular.ttf +0 -0
  192. package/templates/vidfarm_template_0000/composition.json +0 -11
  193. package/templates/vidfarm_template_0000/src/lib/images.js +0 -221
  194. package/templates/vidfarm_template_0000/src/remotion/Root.js +0 -33
  195. package/templates/vidfarm_template_0000/src/remotion/index.js +0 -3
  196. package/templates/vidfarm_template_0000/src/sdk.js +0 -3
  197. package/templates/vidfarm_template_0000/src/style-options.js +0 -200
  198. package/templates/vidfarm_template_0000/src/template-dna.js +0 -9
  199. package/templates/vidfarm_template_0000/src/template.js +0 -1566
  200. package/templates/vidfarm_template_0000/template.config.json +0 -21
@@ -1,2393 +0,0 @@
1
- export function escapeHtml(value) {
2
- return value
3
- .replace(/&/g, "&")
4
- .replace(/</g, "&lt;")
5
- .replace(/>/g, "&gt;")
6
- .replace(/"/g, "&quot;");
7
- }
8
- export function escapeAttribute(value) {
9
- return escapeHtml(value).replace(/'/g, "&#39;");
10
- }
11
- export function escapeJsonForHtml(value) {
12
- return JSON.stringify(value)
13
- .replace(/</g, "\\u003c")
14
- .replace(/>/g, "\\u003e")
15
- .replace(/&/g, "\\u0026");
16
- }
17
- export function withAccountQuery(href, accountId) {
18
- if (!accountId || !href.startsWith("/")) {
19
- return href;
20
- }
21
- const url = new URL(href, "https://vidfarm.local");
22
- if (url.pathname.startsWith("/u/")) {
23
- return `${url.pathname}${url.search}${url.hash}`;
24
- }
25
- if (url.pathname === "/discover" || url.pathname.startsWith("/discover/") || url.pathname === "/help") {
26
- return `${url.pathname}${url.search}${url.hash}`;
27
- }
28
- return `/u/${encodeURIComponent(accountId)}${url.pathname}${url.search}${url.hash}`;
29
- }
30
- export function resolveAccountDisplayName(input) {
31
- const email = input?.email?.trim() || "";
32
- const displayName = input?.displayName?.trim() || "";
33
- if (displayName) {
34
- return displayName;
35
- }
36
- if (!email) {
37
- return "";
38
- }
39
- return email
40
- .split("@")[0]
41
- .replace(/[._-]+/g, " ")
42
- .replace(/\b\w/g, (match) => match.toUpperCase());
43
- }
44
- function renderNavIcon(kind) {
45
- if (kind === "discover") {
46
- return `<svg viewBox="0 0 20 20" fill="none" stroke="currentColor" stroke-width="1.7" stroke-linecap="round" stroke-linejoin="round"><path d="M10 3v4"/><path d="M10 13v4"/><path d="M3 10h4"/><path d="M13 10h4"/><path d="m5.8 5.8 2.3 2.3"/><path d="m11.9 11.9 2.3 2.3"/><path d="m14.2 5.8-2.3 2.3"/><path d="m8.1 11.9-2.3 2.3"/></svg>`;
47
- }
48
- if (kind === "library") {
49
- return `<svg viewBox="0 0 20 20" fill="none" stroke="currentColor" stroke-width="1.7" stroke-linecap="round" stroke-linejoin="round"><path d="M4.5 4.5h3v11h-3z"/><path d="M8.7 4.5h3v11h-3z"/><path d="m13.4 5.1 2.3-.6 2.2 10.7-2.3.6z"/></svg>`;
50
- }
51
- if (kind === "calendar") {
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>`;
53
- }
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>`;
67
- }
68
- export function renderPrimaryNav(input) {
69
- const items = input.loggedIn
70
- ? [
71
- { id: "discover", href: withAccountQuery("/discover", input.accountId), label: "Studio", icon: renderNavIcon("discover") },
72
- { id: "library", href: withAccountQuery("/library", input.accountId), label: "Library", icon: renderNavIcon("library") },
73
- { id: "calendar", href: withAccountQuery("/calendar", input.accountId), label: "Calendar", icon: renderNavIcon("calendar") },
74
- { id: "settings", href: withAccountQuery("/settings", input.accountId), label: "Settings", icon: renderNavIcon("settings") }
75
- ]
76
- : [
77
- { id: "discover", href: "/discover", label: "Studio", icon: renderNavIcon("discover") },
78
- { id: "login", href: "/login", label: "Login", icon: renderNavIcon("settings") }
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
- ` : "";
108
- return `
109
- <nav class="primary-nav" aria-label="Primary">
110
- ${items.map((item) => `
111
- <a class="nav-link${item.id === input.current ? " is-active" : ""}" href="${item.href}">
112
- <span class="nav-icon" aria-hidden="true">${item.icon}</span>
113
- <span>${item.label}</span>
114
- </a>
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
- ` : ""}
148
- </nav>
149
- ${logoutDialog}
150
- `;
151
- }
152
- export function renderBrandLockup(input) {
153
- const email = input?.email?.trim() || "";
154
- const derivedName = resolveAccountDisplayName(input);
155
- const href = withAccountQuery("/discover", input?.accountId);
156
- const accountMeta = email
157
- ? `<div class="brand-account-meta">${escapeHtml(derivedName)} <span>(${escapeHtml(email)})</span></div>`
158
- : "";
159
- return `
160
- <a class="brand-lockup" href="${escapeAttribute(href)}">
161
- <img class="brand-logo-image" src="/assets/logo-vidfarm.png" alt="VidFarm AI" />
162
- <div class="brand-copy">
163
- <div class="brand-title brand-title-static">VidFarm<span class="brand-title-mobile-hidden"> AI</span></div>
164
- ${accountMeta}
165
- </div>
166
- </a>
167
- `;
168
- }
169
- export function renderPageShell(input) {
170
- return `<!doctype html>
171
- <html lang="en">
172
- <head>
173
- <meta charset="utf-8" />
174
- <meta name="viewport" content="width=device-width, initial-scale=1" />
175
- <title>${escapeHtml(input.title)}</title>
176
- <link rel="icon" href="/assets/favicon.ico" sizes="any" />
177
- <link rel="preconnect" href="https://fonts.googleapis.com" />
178
- <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
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" />
180
- <style>
181
- :root {
182
- color-scheme: dark;
183
- --bg: #030603;
184
- --paper: rgba(7, 13, 7, 0.82);
185
- --paper-strong: rgba(12, 20, 12, 0.96);
186
- --panel: transparent;
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);
197
- --radius-lg: 32px;
198
- --radius-md: 26px;
199
- --radius-sm: 18px;
200
- }
201
-
202
- * {
203
- box-sizing: border-box;
204
- }
205
-
206
- html {
207
- height: 100%;
208
- min-height: 100%;
209
- overflow: hidden;
210
- }
211
-
212
- body {
213
- margin: 0;
214
- height: 100%;
215
- min-height: 100%;
216
- overflow: hidden;
217
- color: var(--ink);
218
- font-family: "Manrope", sans-serif;
219
- background:
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%);
224
- background-attachment: fixed;
225
- }
226
-
227
- body::before {
228
- content: "";
229
- position: fixed;
230
- inset: 0;
231
- pointer-events: none;
232
- background-image:
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%);
236
- background-size: 30px 30px;
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;
253
- }
254
-
255
- a {
256
- color: inherit;
257
- }
258
-
259
- button,
260
- input,
261
- select,
262
- textarea {
263
- font: inherit;
264
- }
265
-
266
- .app-shell {
267
- width: min(1980px, calc(100vw - 40px));
268
- margin: 0 auto;
269
- height: 100dvh;
270
- min-height: 0;
271
- padding: 20px 0 28px;
272
- }
273
-
274
- .app-shell.is-wide {
275
- width: min(1980px, calc(100vw - 40px));
276
- }
277
-
278
- .app-shell.is-narrow {
279
- width: min(1980px, calc(100vw - 40px));
280
- }
281
-
282
- .page-stack {
283
- display: grid;
284
- height: 100%;
285
- min-height: 0;
286
- gap: 18px;
287
- }
288
-
289
- .frame {
290
- position: relative;
291
- display: grid;
292
- grid-template-rows: auto minmax(0, 1fr);
293
- min-height: 0;
294
- overflow: hidden;
295
- border-radius: var(--radius-lg);
296
- background: var(--panel);
297
- }
298
-
299
- .frame-body {
300
- display: grid;
301
- min-height: 0;
302
- gap: 20px;
303
- padding: 14px 0 0;
304
- }
305
-
306
- .topbar {
307
- display: flex;
308
- align-items: center;
309
- justify-content: space-between;
310
- gap: 12px;
311
- min-height: 76px;
312
- padding: 10px 16px 10px 20px;
313
- border: 1px solid rgba(255, 255, 255, 0.82);
314
- border-radius: var(--radius-lg);
315
- background: var(--paper);
316
- box-shadow: var(--shadow);
317
- }
318
-
319
- .brand-lockup {
320
- display: flex;
321
- flex: 1 1 min(0, 58%);
322
- align-items: center;
323
- gap: 14px;
324
- min-width: 0;
325
- color: inherit;
326
- text-decoration: none;
327
- }
328
-
329
- .brand-lockup:hover,
330
- .brand-lockup:focus {
331
- text-decoration: none;
332
- }
333
-
334
- .brand-logo-image {
335
- display: block;
336
- width: auto;
337
- height: 44px;
338
- max-width: min(220px, 38vw);
339
- object-fit: contain;
340
- object-position: left center;
341
- flex: 0 0 auto;
342
- border-radius: 12px;
343
- }
344
-
345
- .brand-mark {
346
- display: inline-flex;
347
- align-items: center;
348
- justify-content: center;
349
- width: 38px;
350
- height: 38px;
351
- border-radius: 999px;
352
- background: #111934;
353
- color: #f3e8cd;
354
- box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.08);
355
- }
356
-
357
- .brand-mark svg {
358
- width: 20px;
359
- height: 20px;
360
- }
361
-
362
- .brand-copy {
363
- display: flex;
364
- align-items: center;
365
- gap: 10px;
366
- min-width: 0;
367
- flex-wrap: wrap;
368
- }
369
-
370
- .brand-account-meta {
371
- min-width: 0;
372
- color: rgba(116, 130, 156, 0.78);
373
- font-size: 0.94rem;
374
- line-height: 1.2;
375
- font-weight: 500;
376
- letter-spacing: -0.01em;
377
- white-space: nowrap;
378
- overflow: hidden;
379
- text-overflow: ellipsis;
380
- }
381
-
382
- .brand-account-meta span {
383
- color: rgba(116, 130, 156, 0.62);
384
- }
385
-
386
- .eyebrow {
387
- font-size: 10px;
388
- font-weight: 700;
389
- letter-spacing: 0.28em;
390
- text-transform: uppercase;
391
- color: var(--muted);
392
- }
393
-
394
- .brand-title {
395
- font-family: "Instrument Serif", serif;
396
- font-size: clamp(1.65rem, 1.85vw, 2rem);
397
- line-height: 0.92;
398
- font-weight: 400;
399
- letter-spacing: -0.05em;
400
- color: #1f2635;
401
- }
402
-
403
- .brand-title-static {
404
- font-family: "Instrument Serif", serif;
405
- font-size: clamp(1.5rem, 1.7vw, 1.85rem);
406
- line-height: 0.92;
407
- font-weight: 400;
408
- letter-spacing: -0.05em;
409
- text-transform: none;
410
- color: #1f2635;
411
- }
412
-
413
- .brand-description {
414
- min-width: 0;
415
- color: #66758d;
416
- font-size: 0.94rem;
417
- }
418
-
419
- .topbar-actions {
420
- display: flex;
421
- flex-wrap: wrap;
422
- flex: 1 1 auto;
423
- gap: 6px;
424
- justify-content: flex-end;
425
- min-width: 0;
426
- }
427
-
428
- .primary-nav {
429
- display: flex;
430
- flex-wrap: nowrap;
431
- gap: 4px;
432
- align-items: center;
433
- justify-content: flex-end;
434
- width: auto;
435
- min-width: 0;
436
- max-width: 100%;
437
- padding: 3px;
438
- border: 1px solid rgba(191, 164, 109, 0.28);
439
- border-radius: 22px;
440
- background: linear-gradient(180deg, rgba(247, 241, 230, 0.94), rgba(244, 236, 223, 0.96));
441
- box-shadow:
442
- inset 0 1px 0 rgba(255, 255, 255, 0.88),
443
- 0 8px 18px rgba(138, 102, 32, 0.08);
444
- }
445
-
446
- .nav-link {
447
- display: inline-flex;
448
- flex: 0 0 auto;
449
- align-items: center;
450
- justify-content: center;
451
- gap: 8px;
452
- min-height: 38px;
453
- padding: 0 14px;
454
- white-space: nowrap;
455
- border: 1px solid transparent;
456
- border-radius: 16px;
457
- color: #6f6451;
458
- text-decoration: none;
459
- font-size: 0.9rem;
460
- font-weight: 600;
461
- transition: background 160ms ease, color 160ms ease, border-color 160ms ease, box-shadow 160ms ease;
462
- }
463
-
464
- .nav-link:hover {
465
- color: var(--ink);
466
- }
467
-
468
- .nav-link.is-active {
469
- border-color: rgba(232, 223, 204, 0.9);
470
- background: rgba(255, 252, 247, 0.96);
471
- color: var(--ink);
472
- box-shadow: 0 8px 20px rgba(101, 73, 18, 0.08);
473
- }
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
-
564
- .nav-icon,
565
- .nav-icon svg {
566
- width: 16px;
567
- height: 16px;
568
- }
569
-
570
- .surface,
571
- .surface-hero,
572
- .surface-muted {
573
- position: relative;
574
- border-radius: var(--radius-md);
575
- background: transparent;
576
- }
577
-
578
- .surface-hero {
579
- background:
580
- radial-gradient(circle at top right, rgba(195, 159, 86, 0.14), transparent 26%),
581
- transparent;
582
- }
583
-
584
- h1,
585
- h2,
586
- h3 {
587
- margin: 0;
588
- color: #1f2635;
589
- }
590
-
591
- h1 {
592
- font-family: "Instrument Serif", serif;
593
- font-size: clamp(3rem, 5vw, 4.6rem);
594
- line-height: 0.88;
595
- font-weight: 400;
596
- letter-spacing: -0.07em;
597
- text-wrap: balance;
598
- }
599
-
600
- h2 {
601
- font-family: "Instrument Serif", serif;
602
- font-size: clamp(1.8rem, 2.8vw, 2.7rem);
603
- line-height: 0.92;
604
- font-weight: 400;
605
- letter-spacing: -0.06em;
606
- }
607
-
608
- h3 {
609
- font-size: 1.12rem;
610
- line-height: 1.2;
611
- font-weight: 600;
612
- letter-spacing: -0.03em;
613
- }
614
-
615
- p {
616
- margin: 0;
617
- color: var(--muted);
618
- line-height: 1.65;
619
- }
620
-
621
- .lede {
622
- max-width: 56ch;
623
- font-size: 0.98rem;
624
- }
625
-
626
- .hero-grid,
627
- .split-grid,
628
- .card-grid,
629
- .stats-grid,
630
- .field-grid,
631
- .toolbar {
632
- display: grid;
633
- gap: 16px;
634
- }
635
-
636
- .hero-grid {
637
- grid-template-columns: minmax(0, 1.55fr) minmax(280px, 0.85fr);
638
- align-items: stretch;
639
- }
640
-
641
- .split-grid {
642
- grid-template-columns: minmax(300px, 340px) minmax(0, 1fr);
643
- }
644
-
645
- .page-hero {
646
- display: grid;
647
- grid-template-columns: minmax(0, 1.55fr) minmax(260px, 0.85fr);
648
- gap: 18px;
649
- align-items: start;
650
- }
651
-
652
- .page-section {
653
- display: grid;
654
- gap: 14px;
655
- }
656
-
657
- .page-section-head {
658
- display: flex;
659
- align-items: end;
660
- justify-content: space-between;
661
- gap: 16px;
662
- }
663
-
664
- .metric-grid {
665
- display: grid;
666
- gap: 14px;
667
- }
668
-
669
- .metric {
670
- display: grid;
671
- gap: 8px;
672
- }
673
-
674
- .card-grid {
675
- grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
676
- }
677
-
678
- .stats-grid {
679
- grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
680
- }
681
-
682
- .field-grid.cols-2 {
683
- grid-template-columns: repeat(2, minmax(0, 1fr));
684
- }
685
-
686
- .field-grid.cols-3 {
687
- grid-template-columns: repeat(3, minmax(0, 1fr));
688
- }
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
-
739
- .stack {
740
- display: grid;
741
- gap: 16px;
742
- }
743
-
744
- .stack-lg {
745
- display: grid;
746
- gap: 22px;
747
- }
748
-
749
- .kicker {
750
- display: inline-flex;
751
- align-items: center;
752
- gap: 10px;
753
- min-height: 34px;
754
- width: max-content;
755
- max-width: 100%;
756
- align-self: start;
757
- padding: 0 14px;
758
- border: 1px solid rgba(209, 219, 233, 0.96);
759
- border-radius: 999px;
760
- background: rgba(255, 255, 255, 0.9);
761
- color: #6f7d95;
762
- font-size: 11px;
763
- font-weight: 700;
764
- letter-spacing: 0.24em;
765
- text-transform: uppercase;
766
- }
767
-
768
- .kicker.is-muted {
769
- color: var(--muted);
770
- }
771
-
772
- .button,
773
- button,
774
- .link-button,
775
- .cta-button {
776
- display: inline-flex;
777
- align-items: center;
778
- justify-content: center;
779
- gap: 10px;
780
- min-height: 46px;
781
- padding: 0 18px;
782
- border: 1px solid rgba(219, 196, 146, 0.8);
783
- border-radius: 999px;
784
- background: #dec081;
785
- color: #243041;
786
- text-decoration: none;
787
- font-size: 0.95rem;
788
- font-weight: 600;
789
- cursor: pointer;
790
- transition:
791
- transform 160ms ease,
792
- border-color 160ms ease,
793
- background 160ms ease,
794
- box-shadow 160ms ease;
795
- box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.7);
796
- }
797
-
798
- .button:hover,
799
- button:hover,
800
- .link-button:hover {
801
- transform: translateY(-1px);
802
- border-color: rgba(191, 164, 109, 0.9);
803
- box-shadow:
804
- inset 0 1px 0 rgba(255, 255, 255, 0.84),
805
- 0 12px 28px rgba(118, 89, 38, 0.15);
806
- }
807
-
808
- .button.secondary,
809
- button.secondary,
810
- .link-button.secondary {
811
- background: rgba(255, 255, 255, 0.88);
812
- color: var(--ink);
813
- }
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
-
834
- .button.ghost,
835
- button.ghost,
836
- .link-button.ghost {
837
- background: rgba(255, 255, 255, 0.34);
838
- }
839
-
840
- button[disabled] {
841
- cursor: not-allowed;
842
- opacity: 0.5;
843
- transform: none;
844
- box-shadow: none;
845
- }
846
-
847
- .input,
848
- input,
849
- select,
850
- textarea {
851
- width: 100%;
852
- border: 1px solid var(--line);
853
- border-radius: 999px;
854
- background: rgba(255, 255, 255, 0.92);
855
- color: var(--ink);
856
- padding: 14px 16px;
857
- outline: none;
858
- box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.8);
859
- }
860
-
861
- textarea {
862
- min-height: 140px;
863
- border-radius: 24px;
864
- resize: vertical;
865
- }
866
-
867
- input:focus,
868
- select:focus,
869
- textarea:focus {
870
- border-color: rgba(191, 164, 109, 0.9);
871
- box-shadow:
872
- inset 0 1px 0 rgba(255, 255, 255, 0.9),
873
- 0 0 0 4px var(--accent-soft);
874
- }
875
-
876
- label,
877
- .label {
878
- display: block;
879
- margin-bottom: 8px;
880
- color: var(--muted);
881
- font-size: 11px;
882
- font-weight: 700;
883
- letter-spacing: 0.3em;
884
- text-transform: uppercase;
885
- }
886
-
887
- .label-group {
888
- display: grid;
889
- gap: 8px;
890
- }
891
-
892
- .notice {
893
- padding: 14px 16px;
894
- border: 1px solid rgba(209, 219, 233, 0.96);
895
- border-radius: 18px;
896
- background: rgba(255, 255, 255, 0.82);
897
- color: var(--ink);
898
- }
899
-
900
- .notice-success {
901
- border-color: rgba(209, 219, 233, 0.96);
902
- background: rgba(255, 255, 255, 0.82);
903
- color: var(--ink);
904
- }
905
-
906
- .notice-error {
907
- border-color: rgba(214, 107, 107, 0.35);
908
- background: rgba(191, 38, 38, 0.1);
909
- color: #7f1d1d;
910
- }
911
-
912
- .helper,
913
- .tiny,
914
- .meta-copy {
915
- color: #7a879e;
916
- font-size: 0.94rem;
917
- }
918
-
919
- .tiny {
920
- font-size: 0.86rem;
921
- }
922
-
923
- .pill {
924
- display: inline-flex;
925
- align-items: center;
926
- gap: 8px;
927
- min-height: 34px;
928
- padding: 0 12px;
929
- border: 1px solid rgba(209, 219, 233, 0.96);
930
- border-radius: 999px;
931
- background: rgba(255, 255, 255, 0.9);
932
- color: #6f7d95;
933
- font-size: 11px;
934
- font-weight: 700;
935
- letter-spacing: 0.24em;
936
- text-transform: uppercase;
937
- }
938
-
939
- .status-pill.is-active::before,
940
- .pill.is-active::before {
941
- content: "";
942
- width: 8px;
943
- height: 8px;
944
- border-radius: 999px;
945
- background: var(--accent);
946
- box-shadow: 0 0 0 4px rgba(222, 192, 129, 0.22);
947
- }
948
-
949
- .status-row,
950
- .toolbar {
951
- display: flex;
952
- flex-wrap: wrap;
953
- align-items: center;
954
- }
955
-
956
- .toolbar,
957
- .status-row {
958
- gap: 10px;
959
- }
960
-
961
- .keyline {
962
- height: 1px;
963
- background: linear-gradient(90deg, rgba(112, 86, 34, 0), rgba(209, 219, 233, 0.96), rgba(112, 86, 34, 0));
964
- }
965
-
966
- .empty-state {
967
- padding: 18px;
968
- border: 1px dashed rgba(209, 219, 233, 0.96);
969
- border-radius: 18px;
970
- background: rgba(255, 255, 255, 0.5);
971
- color: var(--muted);
972
- }
973
-
974
- .loading-inline {
975
- display: inline-flex;
976
- align-items: center;
977
- gap: 10px;
978
- }
979
-
980
- .loading-spinner {
981
- display: inline-block;
982
- width: 16px;
983
- height: 16px;
984
- border: 2px solid rgba(36, 48, 65, 0.18);
985
- border-top-color: rgba(36, 48, 65, 0.78);
986
- border-radius: 999px;
987
- animation: vidfarm-spin 0.8s linear infinite;
988
- flex: 0 0 auto;
989
- }
990
-
991
- @keyframes vidfarm-spin {
992
- to {
993
- transform: rotate(360deg);
994
- }
995
- }
996
-
997
- code,
998
- pre {
999
- font-family: "SFMono-Regular", Menlo, Consolas, monospace;
1000
- }
1001
-
1002
- pre {
1003
- margin: 0;
1004
- border: 1px solid rgba(73, 57, 26, 0.18);
1005
- border-radius: 18px;
1006
- background: #211a12;
1007
- color: #f8eed6;
1008
- padding: 16px;
1009
- overflow: auto;
1010
- white-space: pre-wrap;
1011
- word-break: break-word;
1012
- }
1013
-
1014
- ${input.style ?? ""}
1015
-
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) {
2083
- .hero-grid,
2084
- .split-grid,
2085
- .page-hero {
2086
- grid-template-columns: 1fr;
2087
- }
2088
- }
2089
-
2090
- @media (max-width: 1024px) {
2091
- html,
2092
- body {
2093
- height: auto;
2094
- min-height: 100%;
2095
- overflow: auto;
2096
- overflow-x: hidden;
2097
- }
2098
-
2099
- .app-shell,
2100
- .app-shell.is-wide,
2101
- .app-shell.is-narrow {
2102
- width: min(100vw - 14px, 1980px);
2103
- height: auto;
2104
- min-height: 100svh;
2105
- padding-top: 8px;
2106
- padding-bottom: 18px;
2107
- }
2108
-
2109
- .page-stack,
2110
- .frame {
2111
- height: auto;
2112
- min-height: 0;
2113
- overflow: visible;
2114
- }
2115
-
2116
- .topbar {
2117
- min-height: auto;
2118
- padding: 8px;
2119
- border-radius: 24px;
2120
- align-items: center;
2121
- flex-wrap: nowrap;
2122
- gap: 8px;
2123
- }
2124
-
2125
- .brand-lockup {
2126
- flex: 1 1 auto;
2127
- width: auto;
2128
- gap: 7px;
2129
- }
2130
-
2131
- .brand-copy {
2132
- display: flex;
2133
- flex: 0 0 auto;
2134
- min-width: 0;
2135
- gap: 0;
2136
- flex-wrap: nowrap;
2137
- }
2138
-
2139
- .brand-title-static {
2140
- font-size: 1.24rem;
2141
- line-height: 1;
2142
- }
2143
-
2144
- .brand-account-meta {
2145
- display: none;
2146
- }
2147
-
2148
- .brand-title-mobile-hidden {
2149
- display: none;
2150
- }
2151
-
2152
- .topbar-actions {
2153
- flex: 0 0 auto;
2154
- width: auto;
2155
- justify-content: flex-end;
2156
- overflow: visible;
2157
- padding-bottom: 0;
2158
- scrollbar-width: none;
2159
- }
2160
-
2161
- .topbar-actions::-webkit-scrollbar {
2162
- display: none;
2163
- }
2164
-
2165
- .brand-logo-image {
2166
- height: 32px;
2167
- max-width: 38px;
2168
- }
2169
-
2170
- .primary-nav {
2171
- min-width: 0;
2172
- width: auto;
2173
- max-width: none;
2174
- flex-wrap: nowrap;
2175
- justify-content: flex-end;
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;
2187
- }
2188
-
2189
- .nav-link {
2190
- flex: 0 0 auto;
2191
- min-height: 44px;
2192
- gap: 6px;
2193
- padding: 0 12px;
2194
- border-radius: 14px;
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;
2247
- }
2248
-
2249
- .nav-link > span:not(.nav-icon) {
2250
- display: none;
2251
- }
2252
-
2253
- .nav-link > .nav-menu-label {
2254
- display: none;
2255
- }
2256
-
2257
- .nav-icon,
2258
- .nav-icon svg {
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
- }
2271
- }
2272
-
2273
- @media (max-width: 374px) {
2274
- .topbar {
2275
- gap: 6px;
2276
- }
2277
-
2278
- .brand-logo-image {
2279
- height: 30px;
2280
- max-width: 34px;
2281
- }
2282
-
2283
- .brand-lockup {
2284
- gap: 5px;
2285
- }
2286
-
2287
- .brand-title-static {
2288
- font-size: 1.08rem;
2289
- }
2290
-
2291
- .primary-nav {
2292
- gap: 3px;
2293
- }
2294
-
2295
- .nav-link {
2296
- gap: 3px;
2297
- padding: 0 6px;
2298
- font-size: 0.72rem;
2299
- }
2300
- }
2301
-
2302
- .field-grid.cols-2,
2303
- .field-grid.cols-3 {
2304
- grid-template-columns: 1fr;
2305
- }
2306
-
2307
- h1 {
2308
- font-size: clamp(2.2rem, 14vw, 3.2rem);
2309
- }
2310
- }
2311
- </style>
2312
- <script src="/assets/sentry-config.js"></script>
2313
- </head>
2314
- <body>
2315
- <main class="app-shell${input.mainClass ? ` ${escapeHtml(input.mainClass)}` : ""}">
2316
- <div class="page-stack${input.shellClass ? ` ${escapeHtml(input.shellClass)}` : ""}">
2317
- ${input.body}
2318
- </div>
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>
2387
- ${input.runtimeBoot ? `<div id="page-runtime-root" hidden></div>
2388
- <script id="page-runtime-boot" type="application/json">${escapeJsonForHtml(input.runtimeBoot)}</script>
2389
- <script type="module" src="/assets/page-runtime-client-app.js"></script>` : ""}
2390
- </body>
2391
- </html>`;
2392
- }
2393
- //# sourceMappingURL=page-shell.js.map