@mevdragon/vidfarm-devcli 0.20.6 → 0.20.9
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.
- package/.agents/skills/editor-capabilities/SKILL.md +15 -1
- package/.agents/skills/vidfarm-director/SKILL.md +106 -0
- package/.agents/skills/vidfarm-director/recipes/find-and-fork-template.md +16 -0
- package/.agents/skills/vidfarm-director/recipes/local-edit-render-approve.md +13 -0
- package/.agents/skills/vidfarm-director/recipes/onboard-a-new-director.md +13 -0
- package/.agents/skills/vidfarm-director/recipes/retheme-template.md +17 -0
- package/.agents/skills/vidfarm-director/references/assets-and-sourcing.md +117 -0
- package/.agents/skills/vidfarm-director/references/automation-and-local-dev.md +245 -0
- package/.agents/skills/vidfarm-director/references/core-workflows.md +273 -0
- package/.agents/skills/vidfarm-director/references/editor-workflows.md +365 -0
- package/.agents/skills/vidfarm-director/references/onboarding.md +28 -0
- package/.agents/skills/vidfarm-director/references/primitives.md +308 -0
- package/SKILL.director.md +517 -250
- package/dist/src/cli.js +563 -99
- package/dist/src/devcli/clips.js +29 -12
- package/dist/src/devcli/doctor.js +2 -2
- package/dist/src/devcli/local-backend.js +46 -2
- package/dist/src/services/clip-curation/cost.js +5 -1
- package/dist/src/services/clip-curation/gemini.js +14 -2
- package/dist/src/services/clip-curation/hunt.js +56 -0
- package/dist/src/services/clip-curation/index.js +1 -1
- package/dist/src/services/clip-curation/scan.js +5 -3
- package/package.json +30 -10
- package/SKILL.platform.md +0 -432
- package/demo/README.md +0 -28
- package/demo/dist/app.css +0 -1
- package/demo/dist/app.js +0 -1850
- package/demo/dist/chunks/chunk-DXB73IDG.js +0 -1
- package/demo/dist/chunks/chunk-S7OWAJDS.js +0 -36
- package/demo/dist/chunks/chunk-VTIBZ6AN.js +0 -1
- package/demo/dist/chunks/dist-ADSJKBVE.js +0 -332
- package/demo/dist/chunks/domEditingLayers-VZMLL4AP-SGHWPND4.js +0 -1
- package/demo/dist/chunks/hyperframes-player-XB65TCD6.js +0 -425
- package/demo/dist/chunks/lib-XAQ37YOE.js +0 -1
- package/demo/dist/chunks/src-TJ2QYA4U.js +0 -207
- package/demo/dist/favicon.ico +0 -0
- package/demo/dist/icons/timeline/audio.svg +0 -7
- package/demo/dist/icons/timeline/captions.svg +0 -5
- package/demo/dist/icons/timeline/composition.svg +0 -12
- package/demo/dist/icons/timeline/image.svg +0 -18
- package/demo/dist/icons/timeline/music.svg +0 -10
- package/demo/dist/icons/timeline/text.svg +0 -3
- package/demo/dist/index.html +0 -15
- package/dist/src/account-pages-legacy.js +0 -9396
- package/dist/src/account-pages.js +0 -61
- package/dist/src/app.js +0 -21603
- package/dist/src/composition-runtime.js +0 -1053
- package/dist/src/config.js +0 -217
- package/dist/src/context.js +0 -447
- package/dist/src/dev-app-legacy.js +0 -739
- package/dist/src/dev-app.js +0 -6
- package/dist/src/devcli/migrate-local.js +0 -140
- package/dist/src/devcli/sync.js +0 -368
- package/dist/src/domain.js +0 -5
- package/dist/src/editor-chat-history.js +0 -82
- package/dist/src/editor-chat.js +0 -828
- package/dist/src/editor-dark-theme.js +0 -1128
- package/dist/src/frontend/debug.js +0 -71
- package/dist/src/frontend/discover-client.js +0 -130
- package/dist/src/frontend/discover-store.js +0 -23
- package/dist/src/frontend/file-directory.js +0 -1018
- package/dist/src/frontend/flockposter-cache-store.js +0 -124
- package/dist/src/frontend/homepage-client.js +0 -446
- package/dist/src/frontend/homepage-shared.js +0 -201
- package/dist/src/frontend/homepage-store.js +0 -66
- package/dist/src/frontend/homepage-view.js +0 -705
- package/dist/src/frontend/page-runtime-client.js +0 -132
- package/dist/src/frontend/page-runtime-store.js +0 -9
- package/dist/src/frontend/sentry.js +0 -42
- package/dist/src/frontend/template-editor-chat.js +0 -4181
- package/dist/src/help-page.js +0 -346
- package/dist/src/homepage.js +0 -1458
- package/dist/src/index.js +0 -16
- package/dist/src/instrument.js +0 -30
- package/dist/src/landing-page.js +0 -384
- package/dist/src/page-runtime.js +0 -2
- package/dist/src/page-shell.js +0 -1452
- package/dist/src/primitive-context.js +0 -416
- package/dist/src/primitive-registry.js +0 -3940
- package/dist/src/primitive-sdk.js +0 -4
- package/dist/src/primitives/hyperframes-media.js +0 -108
- package/dist/src/react-page-shell.js +0 -35
- package/dist/src/ready-post-schedule-component.js +0 -1540
- package/dist/src/registry.js +0 -296
- package/dist/src/reskin/agency-page.js +0 -299
- package/dist/src/reskin/calendar-page.js +0 -568
- package/dist/src/reskin/chat-page.js +0 -942
- package/dist/src/reskin/discover-page.js +0 -1788
- package/dist/src/reskin/document.js +0 -1587
- package/dist/src/reskin/help-page.js +0 -357
- package/dist/src/reskin/index-page.js +0 -62
- package/dist/src/reskin/inpaint-clipper-page.js +0 -890
- package/dist/src/reskin/inpaint-page.js +0 -2554
- package/dist/src/reskin/inpaint-video-page.js +0 -1339
- package/dist/src/reskin/job-runs-page.js +0 -477
- package/dist/src/reskin/library-page.js +0 -1634
- package/dist/src/reskin/login-page.js +0 -262
- package/dist/src/reskin/portfolio-page.js +0 -687
- package/dist/src/reskin/pricing-page.js +0 -390
- package/dist/src/reskin/settings-page.js +0 -732
- package/dist/src/reskin/theme.js +0 -711
- package/dist/src/runtime.js +0 -35
- package/dist/src/services/api-call-history.js +0 -249
- package/dist/src/services/auth.js +0 -152
- package/dist/src/services/billing-pricing.js +0 -39
- package/dist/src/services/billing.js +0 -241
- package/dist/src/services/cast.js +0 -127
- package/dist/src/services/chat-threads.js +0 -92
- package/dist/src/services/clip-records.js +0 -250
- package/dist/src/services/clip-search.js +0 -77
- package/dist/src/services/clip-vectors.js +0 -125
- package/dist/src/services/composition-sanitize.js +0 -124
- package/dist/src/services/composition-watch.js +0 -79
- package/dist/src/services/elevenlabs.js +0 -222
- package/dist/src/services/file-directory.js +0 -117
- package/dist/src/services/fork-access.js +0 -93
- package/dist/src/services/fork-manifest.js +0 -42
- package/dist/src/services/ghostcut.js +0 -179
- package/dist/src/services/hyperframes.js +0 -3654
- package/dist/src/services/job-capacity.js +0 -14
- package/dist/src/services/job-logs.js +0 -197
- package/dist/src/services/jobs.js +0 -136
- package/dist/src/services/local-dynamo.js +0 -0
- package/dist/src/services/media-processing.js +0 -766
- package/dist/src/services/primitive-media-lambda.js +0 -280
- package/dist/src/services/providers.js +0 -2748
- package/dist/src/services/rate-limits.js +0 -262
- package/dist/src/services/scene-annotations.js +0 -32
- package/dist/src/services/serverless-auth.js +0 -382
- package/dist/src/services/serverless-jobs.js +0 -1084
- package/dist/src/services/serverless-provider-keys.js +0 -409
- package/dist/src/services/serverless-records.js +0 -1515
- package/dist/src/services/serverless-template-configs.js +0 -75
- package/dist/src/services/storage.js +0 -461
- package/dist/src/services/swipe-customize.js +0 -437
- package/dist/src/services/template-certification.js +0 -413
- package/dist/src/services/template-loader.js +0 -99
- package/dist/src/services/template-runtime-bundles.js +0 -217
- package/dist/src/services/template-sources.js +0 -1017
- package/dist/src/services/upstream.js +0 -248
- package/dist/src/services/video-normalization.js +0 -2
- package/dist/src/services/webhooks.js +0 -62
- package/dist/src/template-editor-pages.js +0 -2576
- package/dist/src/template-editor-shell.js +0 -2893
- package/dist/src/template-sdk.js +0 -4
- package/dist/src/worker.js +0 -17
- package/public/assets/discover-client-app.js +0 -1
- package/public/assets/file-directory-app.js +0 -3
- package/public/assets/homepage-app.js +0 -54
- package/public/assets/homepage-client-app.js +0 -80
- package/public/assets/page-runtime-client-app.js +0 -94
- package/public/assets/placeholders/scene-placeholder.png +0 -0
- package/src/assets/SELLING_AWARENESS_STAGES.md +0 -579
- package/src/assets/SELLING_WITH_HOOKS.md +0 -377
- package/src/assets/SELLING_WITH_VSLS.md +0 -606
- package/src/assets/favicon.ico +0 -0
- package/src/assets/logo-vidfarm.png +0 -0
|
@@ -1,262 +0,0 @@
|
|
|
1
|
-
// /reskin/login — the auth screen ported into the farmville design system,
|
|
2
|
-
// now MIGRATED to the REAL production auth (no more fake password-only form).
|
|
3
|
-
//
|
|
4
|
-
// Bare chrome (no shared top nav / footer): an auth screen owns its whole
|
|
5
|
-
// canvas, so we render just the body over a warm sunny background. A two-column
|
|
6
|
-
// composition — a sunlit brand/marketing panel on the left, a floating white
|
|
7
|
-
// auth card on the right — collapses to a single centered card on small screens.
|
|
8
|
-
//
|
|
9
|
-
// This accepts the SAME input object the live /login route already builds (via
|
|
10
|
-
// `Parameters<typeof renderLoginPage>[0]`), so the route wiring is just "call
|
|
11
|
-
// this instead of the legacy renderer". Every form posts to the REAL login
|
|
12
|
-
// endpoints with the exact field names the live login uses:
|
|
13
|
-
// • password: POST ${routePrefix}/password?mode=password {email,password}
|
|
14
|
-
// • OTP request: POST ${routePrefix}/otp/request?mode=otp {email}
|
|
15
|
-
// • OTP verify: POST ${routePrefix}/otp/verify?mode=otp {email(hidden),code,name?}
|
|
16
|
-
// routePrefix defaults to "/login" but is honored from the input (e.g. the
|
|
17
|
-
// agency-client login uses "/agency-client-login"). On success the real
|
|
18
|
-
// endpoints own the redirect (post-login return path) — we never fake it.
|
|
19
|
-
//
|
|
20
|
-
// The segmented control at the top switches between the two REAL modes
|
|
21
|
-
// (Email code = otp, Password) via honest ?mode= links, so it mirrors the
|
|
22
|
-
// live login's mode handling exactly. Design stays farmville; NO emoji.
|
|
23
|
-
import { reskinDocument, rkEscape } from "./document.js";
|
|
24
|
-
const EYE = `<svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M2 12s3.5-7 10-7 10 7 10 7-3.5 7-10 7-10-7-10-7Z"/><circle cx="12" cy="12" r="3"/></svg>`;
|
|
25
|
-
const MAIL = `<svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect x="3" y="5" width="18" height="14" rx="3"/><path d="m3.5 7 8.5 6 8.5-6"/></svg>`;
|
|
26
|
-
const LOCK = `<svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect x="4" y="10" width="16" height="10" rx="2.5"/><path d="M8 10V7a4 4 0 0 1 8 0v3"/></svg>`;
|
|
27
|
-
export function renderReskinLogin(input = {}) {
|
|
28
|
-
// Mirror the live renderer's normalization exactly.
|
|
29
|
-
const mode = input.mode === "password" ? "password" : "otp";
|
|
30
|
-
const routePrefix = input.routePrefix || "/login";
|
|
31
|
-
const rp = rkEscape(routePrefix);
|
|
32
|
-
const email = rkEscape(input.email ?? "");
|
|
33
|
-
const otpSent = Boolean(input.otpSent);
|
|
34
|
-
// REAL endpoints (same as src/account-pages-legacy.ts → renderLoginPage).
|
|
35
|
-
const PASSWORD_ACTION = `${rp}/password?mode=password`;
|
|
36
|
-
const OTP_REQUEST_ACTION = `${rp}/otp/request?mode=otp`;
|
|
37
|
-
const OTP_VERIFY_ACTION = `${rp}/otp/verify?mode=otp`;
|
|
38
|
-
const OTP_HREF = `${rp}?mode=otp`;
|
|
39
|
-
const PASSWORD_HREF = `${rp}?mode=password`;
|
|
40
|
-
const message = input.message
|
|
41
|
-
? `<div class="rk-notice rk-notice-ok rk-login-flash">${rkEscape(input.message)}</div>`
|
|
42
|
-
: "";
|
|
43
|
-
const error = input.error
|
|
44
|
-
? `<div class="rk-notice rk-notice-err rk-login-flash">${rkEscape(input.error)}</div>`
|
|
45
|
-
: "";
|
|
46
|
-
// ── segmented mode control (real ?mode= links) ──────────────────────────
|
|
47
|
-
// Hidden while verifying a code (mid-flow) — there we show "Change email".
|
|
48
|
-
const seg = otpSent
|
|
49
|
-
? ""
|
|
50
|
-
: `<div class="rk-login-seg" role="tablist" aria-label="Choose a sign-in method">
|
|
51
|
-
<span class="rk-login-seg-thumb${mode === "password" ? " is-right" : ""}"></span>
|
|
52
|
-
<a class="rk-login-seg-btn${mode === "otp" ? " is-active" : ""}" href="${OTP_HREF}" role="tab" aria-selected="${mode === "otp" ? "true" : "false"}">Email code</a>
|
|
53
|
-
<a class="rk-login-seg-btn${mode === "password" ? " is-active" : ""}" href="${PASSWORD_HREF}" role="tab" aria-selected="${mode === "password" ? "true" : "false"}">Password</a>
|
|
54
|
-
</div>`;
|
|
55
|
-
// ── header copy per state ───────────────────────────────────────────────
|
|
56
|
-
const head = mode === "password"
|
|
57
|
-
? { title: "Welcome back", sub: "Log in with your email and password." }
|
|
58
|
-
: otpSent
|
|
59
|
-
? { title: "Check your email", sub: `Enter the 6-digit code we sent${input.email ? ` to ${email}` : ""}.` }
|
|
60
|
-
: { title: "Sign in with a code", sub: "We'll email you a 6-digit code — no password to remember." };
|
|
61
|
-
// ── the auth form (three honest states) ─────────────────────────────────
|
|
62
|
-
let authPane;
|
|
63
|
-
if (mode === "password") {
|
|
64
|
-
authPane = `
|
|
65
|
-
<form class="rk-stack rk-login-form" method="post" action="${PASSWORD_ACTION}">
|
|
66
|
-
<div class="rk-field">
|
|
67
|
-
<label class="rk-label" for="rk-login-email">Email</label>
|
|
68
|
-
<input class="rk-input" id="rk-login-email" type="email" name="email" value="${email}" placeholder="you@studio.co" autocomplete="email" required autofocus />
|
|
69
|
-
</div>
|
|
70
|
-
<div class="rk-field">
|
|
71
|
-
<label class="rk-label" for="rk-login-pass">Password</label>
|
|
72
|
-
<div class="rk-input-group">
|
|
73
|
-
<input class="rk-input" id="rk-login-pass" type="password" name="password" placeholder="••••••••" autocomplete="current-password" required />
|
|
74
|
-
<button class="rk-btn rk-btn-ghost rk-btn-sm rk-login-eye" type="button" data-rk-reveal="rk-login-pass" aria-label="Show password">${EYE}</button>
|
|
75
|
-
</div>
|
|
76
|
-
</div>
|
|
77
|
-
<button class="rk-btn rk-btn-gold rk-btn-lg rk-btn-block rk-login-submit" type="submit">Log in <span class="rk-arrow">→</span></button>
|
|
78
|
-
</form>
|
|
79
|
-
|
|
80
|
-
<div class="rk-login-divider"><span>or</span></div>
|
|
81
|
-
<a class="rk-btn rk-btn-ghost rk-btn-lg rk-btn-block rk-login-alt" href="${OTP_HREF}">${MAIL} Email me a login code</a>`;
|
|
82
|
-
}
|
|
83
|
-
else if (otpSent) {
|
|
84
|
-
authPane = `
|
|
85
|
-
<form class="rk-stack rk-login-form" method="post" action="${OTP_VERIFY_ACTION}">
|
|
86
|
-
<input type="hidden" name="email" value="${email}" />
|
|
87
|
-
<div class="rk-field">
|
|
88
|
-
<label class="rk-label" for="rk-login-code">6-digit code</label>
|
|
89
|
-
<input class="rk-input rk-login-code" id="rk-login-code" name="code" inputmode="numeric" autocomplete="one-time-code" maxlength="6" pattern="[0-9]*" placeholder="000000" autofocus required />
|
|
90
|
-
</div>
|
|
91
|
-
<div class="rk-field">
|
|
92
|
-
<label class="rk-label" for="rk-login-name">Your name <span class="rk-login-optional">(optional — for new accounts)</span></label>
|
|
93
|
-
<input class="rk-input" id="rk-login-name" name="name" type="text" placeholder="Dylan Vane" autocomplete="name" />
|
|
94
|
-
</div>
|
|
95
|
-
<button class="rk-btn rk-btn-gold rk-btn-lg rk-btn-block rk-login-submit" type="submit">Verify & continue <span class="rk-arrow">→</span></button>
|
|
96
|
-
</form>
|
|
97
|
-
|
|
98
|
-
<p class="rk-login-foot"><a href="${OTP_HREF}">Use a different email</a></p>`;
|
|
99
|
-
}
|
|
100
|
-
else {
|
|
101
|
-
authPane = `
|
|
102
|
-
<form class="rk-stack rk-login-form" method="post" action="${OTP_REQUEST_ACTION}">
|
|
103
|
-
<div class="rk-field">
|
|
104
|
-
<label class="rk-label" for="rk-login-email">Email</label>
|
|
105
|
-
<input class="rk-input" id="rk-login-email" type="email" name="email" value="${email}" placeholder="you@studio.co" autocomplete="email" required autofocus />
|
|
106
|
-
</div>
|
|
107
|
-
<button class="rk-btn rk-btn-gold rk-btn-lg rk-btn-block rk-login-submit" type="submit">${MAIL} Email me a login code</button>
|
|
108
|
-
</form>
|
|
109
|
-
|
|
110
|
-
<div class="rk-login-divider"><span>or</span></div>
|
|
111
|
-
<a class="rk-btn rk-btn-ghost rk-btn-lg rk-btn-block rk-login-alt" href="${PASSWORD_HREF}">${LOCK} Use a password instead</a>`;
|
|
112
|
-
}
|
|
113
|
-
const body = `
|
|
114
|
-
<main class="rk-login">
|
|
115
|
-
<div class="rk-login-art">
|
|
116
|
-
<div class="rk-login-art-sky"></div>
|
|
117
|
-
<span class="rk-login-blob rk-login-blob-a"></span>
|
|
118
|
-
<span class="rk-login-blob rk-login-blob-b"></span>
|
|
119
|
-
<div class="rk-login-art-inner">
|
|
120
|
-
<a class="rk-brand rk-login-brand" href="/">
|
|
121
|
-
<span class="rk-brand-mark">V</span>VidFarm
|
|
122
|
-
</a>
|
|
123
|
-
<div class="rk-login-art-copy">
|
|
124
|
-
<h1 class="rk-login-hed">A week of content, made in an afternoon.</h1>
|
|
125
|
-
<p class="rk-login-lede">Sign in to spin up short-form ads from your own clips — punchy hooks, UGC energy, captions that pop.</p>
|
|
126
|
-
<ul class="rk-login-feats">
|
|
127
|
-
<li><span class="rk-login-feat-mark" aria-hidden="true"></span> Mine & tag clips automatically</li>
|
|
128
|
-
<li><span class="rk-login-feat-mark" aria-hidden="true"></span> Swipe templates into finished ads</li>
|
|
129
|
-
<li><span class="rk-login-feat-mark" aria-hidden="true"></span> Publish straight to your channels</li>
|
|
130
|
-
</ul>
|
|
131
|
-
</div>
|
|
132
|
-
<figure class="rk-login-quote rk-glass">
|
|
133
|
-
<div class="rk-login-quote-avatar">DV</div>
|
|
134
|
-
<blockquote>
|
|
135
|
-
<p>"We ship a full week of ads before lunch now. It feels like cheating."</p>
|
|
136
|
-
<figcaption>Dylan Vane · Founder, Studio Co</figcaption>
|
|
137
|
-
</blockquote>
|
|
138
|
-
</figure>
|
|
139
|
-
</div>
|
|
140
|
-
</div>
|
|
141
|
-
|
|
142
|
-
<div class="rk-login-pane">
|
|
143
|
-
<div class="rk-login-card">
|
|
144
|
-
<a class="rk-brand rk-login-card-brand" href="/">
|
|
145
|
-
<span class="rk-brand-mark">V</span>VidFarm
|
|
146
|
-
</a>
|
|
147
|
-
|
|
148
|
-
<div class="rk-login-head">
|
|
149
|
-
<h2 class="rk-login-title">${rkEscape(head.title)}</h2>
|
|
150
|
-
<p class="rk-muted">${head.sub}</p>
|
|
151
|
-
</div>
|
|
152
|
-
|
|
153
|
-
${seg}
|
|
154
|
-
${message}
|
|
155
|
-
${error}
|
|
156
|
-
${authPane}
|
|
157
|
-
</div>
|
|
158
|
-
<p class="rk-login-legal">By continuing you agree to our <a href="#">Terms</a> & <a href="#">Privacy Policy</a>.</p>
|
|
159
|
-
</div>
|
|
160
|
-
</main>`;
|
|
161
|
-
const pageCss = `
|
|
162
|
-
.rk-login{min-height:100svh;display:grid;grid-template-columns:1.05fr .95fr;
|
|
163
|
-
background:radial-gradient(120% 90% at 100% 0%,var(--rk-gold-tint) 0%,transparent 55%),var(--rk-bg)}
|
|
164
|
-
@media(max-width:920px),(max-height:600px){.rk-login{grid-template-columns:1fr}}
|
|
165
|
-
|
|
166
|
-
/* ── left: sunlit brand / marketing panel ── */
|
|
167
|
-
.rk-login-art{position:relative;overflow:hidden;display:flex;padding:56px clamp(2rem,4vw,4rem)}
|
|
168
|
-
@media(max-width:920px),(max-height:600px){.rk-login-art{display:none}}
|
|
169
|
-
.rk-login-art-sky{position:absolute;inset:0;z-index:0;background:
|
|
170
|
-
radial-gradient(72% 55% at 22% 12%,rgba(255,244,214,.96),transparent 62%),
|
|
171
|
-
radial-gradient(60% 55% at 92% 96%,rgba(255,199,56,.42),transparent 60%),
|
|
172
|
-
linear-gradient(158deg,#89ccf3 0%,#b7e0fa 42%,#ffe7c9 100%)}
|
|
173
|
-
.rk-login-blob{position:absolute;z-index:0;border-radius:var(--rk-r-full);filter:blur(2px);
|
|
174
|
-
background:rgba(255,255,255,.55)}
|
|
175
|
-
.rk-login-blob-a{width:220px;height:120px;top:16%;right:12%;box-shadow:60px 20px 0 -18px rgba(255,255,255,.5)}
|
|
176
|
-
.rk-login-blob-b{width:150px;height:84px;bottom:24%;left:-30px;background:rgba(255,255,255,.4)}
|
|
177
|
-
.rk-login-art-inner{position:relative;z-index:1;display:flex;flex-direction:column;gap:32px;
|
|
178
|
-
justify-content:space-between;width:100%;max-width:440px;margin:auto}
|
|
179
|
-
.rk-login-brand{font-size:22px;color:var(--rk-ink)}
|
|
180
|
-
.rk-login-brand .rk-brand-mark{width:30px;height:30px;font-size:17px}
|
|
181
|
-
.rk-login-art-copy{display:grid;gap:18px}
|
|
182
|
-
.rk-login-eyebrow{justify-self:start;background:rgba(255,255,255,.72);border-color:rgba(255,255,255,.9);
|
|
183
|
-
backdrop-filter:blur(6px);color:var(--rk-n-700)}
|
|
184
|
-
.rk-login-hed{font-size:clamp(2rem,3.4vw,2.9rem);line-height:1.05;letter-spacing:-.035em;color:var(--rk-ink);
|
|
185
|
-
max-width:12ch;text-wrap:balance}
|
|
186
|
-
.rk-login-lede{font-size:var(--rk-text-lg);line-height:1.5;color:var(--rk-n-700);max-width:34ch}
|
|
187
|
-
.rk-login-feats{list-style:none;margin:0;padding:0;display:grid;gap:12px}
|
|
188
|
-
.rk-login-feats li{display:flex;align-items:center;gap:11px;font-size:15px;font-weight:600;color:var(--rk-n-800)}
|
|
189
|
-
.rk-login-feat-mark{width:7px;height:7px;border-radius:var(--rk-r-full);background:var(--rk-gold-500);
|
|
190
|
-
box-shadow:0 0 0 4px var(--rk-gold-tint2);flex:none;margin:0 3px}
|
|
191
|
-
.rk-login-quote{border-radius:var(--rk-r-3xl);padding:18px 20px;display:flex;gap:14px;align-items:flex-start;
|
|
192
|
-
box-shadow:var(--rk-shadow-lg)}
|
|
193
|
-
.rk-login-quote-avatar{width:42px;height:42px;border-radius:var(--rk-r-full);flex:none;display:grid;place-items:center;
|
|
194
|
-
font-family:var(--rk-font-display);font-weight:800;font-size:15px;color:var(--rk-ink);
|
|
195
|
-
background:var(--rk-gold-500);box-shadow:var(--rk-shadow-xs)}
|
|
196
|
-
.rk-login-quote blockquote{margin:0;display:grid;gap:6px}
|
|
197
|
-
.rk-login-quote p{font-size:14px;font-weight:600;color:var(--rk-ink);line-height:1.45}
|
|
198
|
-
.rk-login-quote figcaption{font-size:12px;font-weight:600;color:var(--rk-n-600)}
|
|
199
|
-
|
|
200
|
-
/* ── right: floating auth card ── */
|
|
201
|
-
.rk-login-pane{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:16px;
|
|
202
|
-
padding:48px clamp(1.25rem,4vw,3rem)}
|
|
203
|
-
.rk-login-card{width:100%;max-width:412px;background:var(--rk-surface);border:1px solid var(--rk-border);
|
|
204
|
-
border-radius:var(--rk-r-3xl);padding:clamp(28px,3vw,40px);box-shadow:var(--rk-shadow-xl);display:grid;gap:22px}
|
|
205
|
-
.rk-login-card-brand{display:none;font-size:20px}
|
|
206
|
-
@media(max-width:920px),(max-height:600px){.rk-login-card-brand{display:inline-flex;justify-self:center}}
|
|
207
|
-
.rk-login-head{display:grid;gap:6px;text-align:center}
|
|
208
|
-
.rk-login-title{font-size:var(--rk-text-3xl);letter-spacing:-.03em}
|
|
209
|
-
.rk-login-flash{font-size:13px;padding:11px 14px}
|
|
210
|
-
|
|
211
|
-
/* segmented mode control — real ?mode= links. gold is reserved for submit, so
|
|
212
|
-
the active thumb is a plain white pill with an ink label */
|
|
213
|
-
.rk-login-seg{position:relative;display:grid;grid-template-columns:1fr 1fr;gap:2px;padding:4px;
|
|
214
|
-
background:var(--rk-n-100);border:1px solid var(--rk-border);border-radius:var(--rk-r-full)}
|
|
215
|
-
.rk-login-seg-thumb{position:absolute;z-index:0;top:4px;left:4px;width:calc(50% - 4px);height:calc(100% - 8px);
|
|
216
|
-
background:#fff;border-radius:var(--rk-r-full);box-shadow:var(--rk-shadow-sm);
|
|
217
|
-
transition:transform var(--rk-dur) var(--rk-ease)}
|
|
218
|
-
.rk-login-seg-thumb.is-right{transform:translateX(100%)}
|
|
219
|
-
.rk-login-seg-btn{position:relative;z-index:1;appearance:none;border:0;background:transparent;cursor:pointer;
|
|
220
|
-
padding:9px 12px;border-radius:var(--rk-r-full);font-family:var(--rk-font-body);font-size:14px;font-weight:600;
|
|
221
|
-
text-align:center;color:var(--rk-n-500);transition:color var(--rk-dur) var(--rk-ease)}
|
|
222
|
-
.rk-login-seg-btn.is-active{color:var(--rk-ink)}
|
|
223
|
-
|
|
224
|
-
.rk-login-form{gap:16px}
|
|
225
|
-
.rk-login-eye{padding:0 12px;color:var(--rk-n-500)}
|
|
226
|
-
.rk-login-submit{margin-top:4px}
|
|
227
|
-
.rk-login-code{font-family:var(--rk-font-mono);font-size:20px;letter-spacing:.42em;text-align:center;padding-right:0}
|
|
228
|
-
.rk-login-code::placeholder{letter-spacing:.42em}
|
|
229
|
-
.rk-login-optional{font-weight:500;color:var(--rk-text-faint)}
|
|
230
|
-
|
|
231
|
-
.rk-login-divider{display:flex;align-items:center;gap:14px;color:var(--rk-text-faint);
|
|
232
|
-
font-size:12px;font-weight:600;text-transform:uppercase;letter-spacing:.08em}
|
|
233
|
-
.rk-login-divider::before,.rk-login-divider::after{content:"";height:1px;flex:1;background:var(--rk-border)}
|
|
234
|
-
.rk-login-alt{color:var(--rk-ink)}
|
|
235
|
-
.rk-login-foot{text-align:center;font-size:14px;color:var(--rk-text-muted)}
|
|
236
|
-
.rk-login-foot a{font-weight:700;color:var(--rk-ink)}
|
|
237
|
-
.rk-login-foot a:hover{color:var(--rk-gold-700)}
|
|
238
|
-
.rk-login-legal{font-size:12px;color:var(--rk-text-faint);text-align:center;max-width:412px}
|
|
239
|
-
.rk-login-legal a{color:var(--rk-text-muted);text-decoration:underline}
|
|
240
|
-
`;
|
|
241
|
-
const script = `
|
|
242
|
-
(function(){
|
|
243
|
-
var root=document;
|
|
244
|
-
// password reveal eye (only present in password mode)
|
|
245
|
-
root.querySelectorAll('[data-rk-reveal]').forEach(function(btn){
|
|
246
|
-
btn.addEventListener('click',function(){
|
|
247
|
-
var el=root.getElementById(btn.getAttribute('data-rk-reveal'));
|
|
248
|
-
if(!el)return; el.type=el.type==='password'?'text':'password';
|
|
249
|
-
});
|
|
250
|
-
});
|
|
251
|
-
})();`;
|
|
252
|
-
return reskinDocument({
|
|
253
|
-
title: "vidfarm reskin — Login",
|
|
254
|
-
description: "Reskinned vidfarm login / sign up screen.",
|
|
255
|
-
activeSlug: "login",
|
|
256
|
-
chrome: "bare",
|
|
257
|
-
pageCss,
|
|
258
|
-
body,
|
|
259
|
-
script
|
|
260
|
-
});
|
|
261
|
-
}
|
|
262
|
-
//# sourceMappingURL=login-page.js.map
|