@mevdragon/vidfarm-devcli 0.15.0 → 0.17.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 (37) hide show
  1. package/.agents/skills/farmville-saas-ux/SKILL.md +156 -0
  2. package/.agents/skills/farmville-saas-ux/assets/starter.html +294 -0
  3. package/.agents/skills/farmville-saas-ux/references/components.md +340 -0
  4. package/.agents/skills/farmville-saas-ux/references/porting-guide.md +121 -0
  5. package/.agents/skills/farmville-saas-ux/references/tokens.md +271 -0
  6. package/.agents/skills/vidfarm-media/SKILL.md +2 -1
  7. package/.agents/skills/vidfarm-media/references/tts.md +20 -1
  8. package/demo/dist/app.css +1 -1
  9. package/demo/dist/app.js +74 -74
  10. package/dist/src/account-pages-legacy.js +2 -2
  11. package/dist/src/app.js +682 -12
  12. package/dist/src/config.js +13 -0
  13. package/dist/src/editor-chat.js +3 -2
  14. package/dist/src/frontend/homepage-client.js +211 -2
  15. package/dist/src/frontend/homepage-shared.js +197 -0
  16. package/dist/src/frontend/homepage-store.js +39 -1
  17. package/dist/src/frontend/homepage-view.js +150 -5
  18. package/dist/src/homepage.js +234 -18
  19. package/dist/src/landing-page.js +367 -0
  20. package/dist/src/primitive-registry.js +278 -2
  21. package/dist/src/reskin/agency-page.js +255 -0
  22. package/dist/src/reskin/calendar-page.js +252 -0
  23. package/dist/src/reskin/chat-page.js +414 -0
  24. package/dist/src/reskin/discover-page.js +380 -0
  25. package/dist/src/reskin/document.js +74 -0
  26. package/dist/src/reskin/help-page.js +318 -0
  27. package/dist/src/reskin/index-page.js +62 -0
  28. package/dist/src/reskin/job-runs-page.js +249 -0
  29. package/dist/src/reskin/library-page.js +515 -0
  30. package/dist/src/reskin/login-page.js +225 -0
  31. package/dist/src/reskin/pricing-page.js +359 -0
  32. package/dist/src/reskin/settings-page.js +353 -0
  33. package/dist/src/reskin/theme.js +265 -0
  34. package/dist/src/services/serverless-records.js +63 -0
  35. package/dist/src/services/swipe-customize.js +434 -0
  36. package/package.json +1 -1
  37. package/public/assets/homepage-client-app.js +23 -23
@@ -0,0 +1,340 @@
1
+ # Farmville SaaS — Component Recipes
2
+
3
+ Copy-paste HTML + CSS for every signature component. All of them reference the tokens in `tokens.md`
4
+ (paste that `:root` block first). Class names are plain so you can port them into React/Vue/Tailwind
5
+ easily. `assets/starter.html` assembles most of these into one working page.
6
+
7
+ ## Table of contents
8
+ 1. Floating glass pill nav
9
+ 2. Pill buttons (charcoal, gold, ghost, arrow)
10
+ 3. Pill badges / eyebrows
11
+ 4. Illustrated hero (+ 3 background tiers)
12
+ 5. Soft cards & feature-card grid
13
+ 6. Colored icon tiles
14
+ 7. Workflow / node chips
15
+ 8. Logo cloud (grayscale trust bar)
16
+ 9. Review / stat cards
17
+ 10. Integration grid
18
+ 11. Warm-dark footer
19
+ 12. Form fields (the product's own surface)
20
+
21
+ ---
22
+
23
+ ## 1. Floating glass pill nav
24
+
25
+ Detached, frosted, hairline-bordered, softly shadowed pill with margin from the top edge.
26
+
27
+ ```html
28
+ <header class="nav-wrap">
29
+ <nav class="nav glass">
30
+ <a class="brand" href="/">Fillout</a>
31
+ <ul class="nav-links">
32
+ <li><a href="#">Products <span class="caret">⌄</span></a></li>
33
+ <li><a href="#">Templates <span class="caret">⌄</span></a></li>
34
+ <li><a href="#">Integrations <span class="caret">⌄</span></a></li>
35
+ <li><a href="#">Pricing</a></li>
36
+ </ul>
37
+ <div class="nav-cta">
38
+ <a class="link-quiet" href="#">Log in</a>
39
+ <a class="btn btn-ink" href="#">Get started <span class="arrow">→</span></a>
40
+ </div>
41
+ </nav>
42
+ </header>
43
+ ```
44
+ ```css
45
+ .nav-wrap { position: sticky; top: 0; z-index: 50; padding: 16px var(--gutter); display: flex; justify-content: center; }
46
+ .nav {
47
+ width: min(var(--container), 100%);
48
+ display: flex; align-items: center; gap: 24px;
49
+ padding: 10px 12px 10px 24px;
50
+ border-radius: var(--r-full);
51
+ }
52
+ .brand { font-family: var(--font-display); font-weight: 800; font-size: 22px; color: var(--ink); letter-spacing: -0.02em; }
53
+ .nav-links { display: flex; gap: 4px; margin: 0 auto; list-style: none; }
54
+ .nav-links a { display: inline-flex; align-items: center; gap: 4px; padding: 8px 12px; border-radius: var(--r-lg);
55
+ font-size: 15px; font-weight: 500; color: var(--n-700); transition: background var(--dur) var(--ease); }
56
+ .nav-links a:hover { background: #0000000a; }
57
+ .caret { font-size: 11px; color: var(--n-400); }
58
+ .nav-cta { display: flex; align-items: center; gap: 8px; }
59
+ .link-quiet { padding: 8px 12px; font-size: 15px; font-weight: 500; color: var(--n-700); }
60
+ ```
61
+ Over the illustrated hero, give the nav a whiter fill: `.nav.on-hero { background: rgba(255,255,255,0.72); }`.
62
+
63
+ ---
64
+
65
+ ## 2. Pill buttons
66
+
67
+ Three variants + the arrow-nudge. Buttons are always fully rounded.
68
+
69
+ ```css
70
+ .btn {
71
+ display: inline-flex; align-items: center; gap: 8px;
72
+ padding: 12px 20px; border-radius: var(--r-full);
73
+ font-family: var(--font-body); font-size: 15px; font-weight: 600;
74
+ border: 1px solid transparent; cursor: pointer; white-space: nowrap;
75
+ transition: transform var(--dur) var(--ease), box-shadow var(--dur) var(--ease), background var(--dur) var(--ease);
76
+ }
77
+ .btn .arrow { transition: transform var(--dur) var(--ease); }
78
+ .btn:hover .arrow { transform: translateX(3px); }
79
+
80
+ /* Charcoal — the workhorse primary on light backgrounds */
81
+ .btn-ink { background: var(--ink); color: #fff; box-shadow: var(--shadow-sm); }
82
+ .btn-ink:hover { background: #000; box-shadow: var(--shadow-md); transform: translateY(-1px); }
83
+
84
+ /* Honey-gold — the "joy" CTA. Use sparingly (footer hero CTA, key conversion). */
85
+ .btn-gold { background: var(--gold-500); color: var(--ink); font-weight: 700; box-shadow: var(--shadow-sm); }
86
+ .btn-gold:hover { background: var(--gold-700); box-shadow: 0 6px 18px -6px rgba(252,185,0,.6); transform: translateY(-1px); }
87
+
88
+ /* Ghost — white pill with hairline border, secondary actions */
89
+ .btn-ghost { background: #fff; color: var(--ink); border-color: var(--border); box-shadow: var(--shadow-xs); }
90
+ .btn-ghost:hover { border-color: var(--border-strong); box-shadow: var(--shadow-sm); }
91
+ ```
92
+ ```html
93
+ <a class="btn btn-ink">Get started <span class="arrow">→</span></a>
94
+ <a class="btn btn-gold">Get started <span class="arrow">→</span></a>
95
+ <a class="btn btn-ghost">View all integrations <span class="arrow">→</span></a>
96
+ ```
97
+
98
+ ---
99
+
100
+ ## 3. Pill badges / eyebrows
101
+
102
+ Small rounded-full chips with a mini glyph, used to label section intros.
103
+
104
+ ```css
105
+ .badge {
106
+ display: inline-flex; align-items: center; gap: 6px;
107
+ padding: 6px 14px; border-radius: var(--r-full);
108
+ background: #fff; border: 1px solid var(--border); box-shadow: var(--shadow-xs);
109
+ font-size: 14px; font-weight: 500; color: var(--n-700);
110
+ }
111
+ ```
112
+ ```html
113
+ <span class="badge">🔥 Features</span>
114
+ <span class="badge">📋 Forms by Zite</span>
115
+ ```
116
+
117
+ ---
118
+
119
+ ## 4. Illustrated hero
120
+
121
+ The #1 signature move. A warm, sunny, hand-illustrated scene behind a centered, two-tone headline.
122
+
123
+ ```html
124
+ <section class="hero">
125
+ <div class="hero-art"><!-- background art: see tiers below --></div>
126
+ <div class="hero-inner">
127
+ <span class="badge">📋 Forms by Zite</span>
128
+ <h1 class="hero-h1"><span class="soft">Forms that</span><br>do it all</h1>
129
+ <p class="hero-sub">Make any form with Fillout,<br>the all-in-one form solution.</p>
130
+ <a class="btn btn-ink btn-lg">Get Started <span class="arrow">→</span></a>
131
+ </div>
132
+ </section>
133
+ ```
134
+ ```css
135
+ .hero { position: relative; overflow: hidden; text-align: center; padding: 120px var(--gutter) 96px; }
136
+ .hero-art { position: absolute; inset: 0; z-index: 0; }
137
+ .hero-inner { position: relative; z-index: 1; max-width: 820px; margin: 0 auto; display: grid; gap: 24px; justify-items: center; }
138
+ .hero-h1 { font-family: var(--font-display); font-weight: 800; font-size: var(--display); line-height: 1.0; letter-spacing: -0.03em; color: #fff; text-shadow: 0 2px 24px rgba(0,0,0,.12); }
139
+ .hero-h1 .soft { color: rgba(255,255,255,0.55); }
140
+ .hero-sub { font-size: var(--text-xl); line-height: 1.5; color: rgba(255,255,255,0.92); font-weight: 400; }
141
+ .btn-lg { padding: 15px 26px; font-size: 16px; }
142
+ ```
143
+
144
+ ### Background tiers — pick the highest one you can produce
145
+
146
+ **Tier 1 — commissioned/generated illustration (the real signature).** A painterly, Ghibli/storybook
147
+ scene: bright blue sky, golden-hour cumulus clouds, lush green foliage, a soft sunlit city. Warm,
148
+ optimistic, hand-made. Set as `.hero-art { background: url(...) center/cover; }`. Generation prompt to
149
+ reuse: *"soft anime / Studio-Ghibli style illustration, sunny bright blue sky, big fluffy golden-hour
150
+ cumulus clouds, lush green trees framing the sides, gentle sunlit city buildings, warm optimistic,
151
+ painterly, no text, 16:9."*
152
+
153
+ **Tier 2 — CSS sunny-sky fallback** (no art asset). A blue gradient sky with a soft sun glow and
154
+ optional SVG clouds:
155
+ ```css
156
+ .hero-art {
157
+ background:
158
+ radial-gradient(60% 50% at 78% 22%, rgba(255,241,204,0.9), transparent 60%), /* sun glow */
159
+ linear-gradient(180deg, #3f9fe0 0%, #6cc0f5 55%, #a9dbfb 100%); /* sky */
160
+ }
161
+ .hero-art::after { /* soft cloud */
162
+ content: ""; position: absolute; right: 8%; bottom: 18%; width: 320px; height: 120px;
163
+ background: radial-gradient(ellipse 60% 60% at 30% 60%, #fff, transparent 70%),
164
+ radial-gradient(ellipse 50% 70% at 65% 50%, #fff, transparent 70%);
165
+ filter: blur(2px); opacity: .95;
166
+ }
167
+ ```
168
+
169
+ **Tier 3 — warm minimal wash** (fastest, still on-brand). Cream/gold radial glow on off-white; use ink
170
+ headline instead of white:
171
+ ```css
172
+ .hero-art { background: radial-gradient(80% 70% at 50% -10%, var(--gold-tint), var(--n-50) 60%); }
173
+ /* then: .hero-h1 { color: var(--ink); } .hero-h1 .soft { color: var(--n-400); } .hero-sub { color: var(--n-500); } */
174
+ ```
175
+
176
+ Under the hero, Fillout floats a product screenshot on a big `--r-3xl` card with `--shadow-xl`,
177
+ overlapping the section boundary — a nice touch: `margin-bottom: -80px; position: relative; z-index: 2`.
178
+
179
+ ---
180
+
181
+ ## 5. Soft cards & feature-card grid
182
+
183
+ ```css
184
+ .card {
185
+ background: var(--surface); border: 1px solid var(--border);
186
+ border-radius: var(--r-3xl); padding: 32px;
187
+ box-shadow: var(--shadow-card);
188
+ transition: transform var(--dur) var(--ease), box-shadow var(--dur) var(--ease);
189
+ }
190
+ .card:hover { transform: translateY(-2px); box-shadow: var(--shadow-lg); }
191
+ .card h3 { font-size: var(--text-2xl); font-weight: 700; letter-spacing: -0.02em; color: var(--ink); margin: 0 0 8px; }
192
+ .card p { color: var(--text-muted); font-size: var(--text-lg); line-height: 1.5; margin: 0; }
193
+
194
+ .grid-2 { display: grid; grid-template-columns: repeat(2, 1fr); gap: 24px; }
195
+ @media (max-width: 820px) { .grid-2 { grid-template-columns: 1fr; } }
196
+ ```
197
+ The card border is always the uniform `1px solid var(--border)` on all four sides. **Never** add a
198
+ thicker or colored side border (`border-left: 3px solid …` status stripes, edge accents) — it breaks
199
+ the soft, even frame. To mark status/category on a card or list chip, put a pill (`.badge`) or a small
200
+ colored dot inside the card instead.
201
+ Section intro pattern (centered): badge → big title → one-line subhead, then the grid.
202
+ ```html
203
+ <section class="section section-tint">
204
+ <div class="container center-intro">
205
+ <span class="badge">🔥 Features</span>
206
+ <h2 class="section-title">It all starts with a form</h2>
207
+ <p class="section-sub">Build the exact form you need, in minutes.</p>
208
+ </div>
209
+ <div class="container grid-2"> …cards… </div>
210
+ </section>
211
+ ```
212
+ ```css
213
+ .section { padding: var(--section-y) 0; }
214
+ .section-tint { background: var(--bg-section); }
215
+ .container { width: min(var(--container), 100%); margin: 0 auto; padding: 0 var(--gutter); }
216
+ .center-intro { text-align: center; display: grid; gap: 16px; justify-items: center; margin-bottom: 48px; }
217
+ .section-title { font-size: var(--text-5xl); font-weight: 800; letter-spacing: -0.025em; color: var(--ink); }
218
+ .section-sub { font-size: var(--text-xl); color: var(--text-muted); }
219
+ ```
220
+
221
+ ---
222
+
223
+ ## 6. Colored icon tiles
224
+
225
+ Rounded-square tiles with a pale-tint background and a colored glyph. Used in cards, nodes, and feature
226
+ lists.
227
+
228
+ ```css
229
+ .tile { width: 40px; height: 40px; border-radius: var(--r-xl); display: grid; place-items: center; font-size: 20px; }
230
+ .tile-violet { background: var(--violet-tint); color: var(--violet); }
231
+ .tile-green { background: var(--green-tint); color: var(--green); }
232
+ .tile-gold { background: var(--gold-tint2); color: var(--gold-700); }
233
+ .tile-sky { background: var(--sky-tint); color: var(--sky); }
234
+ .tile-coral { background: var(--coral-tint); color: var(--coral); }
235
+ ```
236
+
237
+ ---
238
+
239
+ ## 7. Workflow / node chips
240
+
241
+ Small connected cards, each a white pill-ish card with an icon tile + title + subtitle. Great for
242
+ "automation" product mockups.
243
+
244
+ ```html
245
+ <div class="node">
246
+ <span class="tile tile-violet">✦</span>
247
+ <div><div class="node-title">AI action</div><div class="node-sub">Qualify lead</div></div>
248
+ </div>
249
+ ```
250
+ ```css
251
+ .node { display: inline-flex; align-items: center; gap: 12px; background: #fff;
252
+ border: 1px solid var(--border); border-radius: var(--r-2xl); padding: 12px 16px; box-shadow: var(--shadow-sm); }
253
+ .node-title { font-weight: 600; font-size: 15px; color: var(--ink); }
254
+ .node-sub { font-size: 13px; color: var(--text-muted); }
255
+ ```
256
+ Connect nodes with 2px `--n-300` lines/curved SVG paths. A "Publish ⚡" chip uses `.badge` with gold fill.
257
+
258
+ ---
259
+
260
+ ## 8. Logo cloud (grayscale trust bar)
261
+
262
+ Muted, single-tone logos for social proof.
263
+
264
+ ```css
265
+ .logo-cloud { display: flex; flex-wrap: wrap; align-items: center; justify-content: center; gap: 48px; }
266
+ .logo-cloud img, .logo-cloud .logo { opacity: .55; filter: grayscale(1); height: 28px; transition: opacity var(--dur) var(--ease); }
267
+ .logo-cloud img:hover { opacity: .8; }
268
+ ```
269
+
270
+ ---
271
+
272
+ ## 9. Review / stat cards
273
+
274
+ White cards with a source row, a big number, and gold stars.
275
+
276
+ ```html
277
+ <div class="card stat-card">
278
+ <div class="stat-head"><span class="tile tile-coral">G</span> Business reviews</div>
279
+ <div class="stat-num">5/5</div>
280
+ <div class="stars">★★★★★</div>
281
+ </div>
282
+ ```
283
+ ```css
284
+ .stat-card { display: grid; gap: 12px; }
285
+ .stat-head { display: flex; align-items: center; gap: 8px; font-weight: 600; color: var(--ink); }
286
+ .stat-num { font-family: var(--font-display); font-size: var(--text-5xl); font-weight: 700; letter-spacing: -0.02em; color: var(--ink); }
287
+ .stars { color: var(--gold-500); font-size: 20px; letter-spacing: 2px; }
288
+ ```
289
+
290
+ ---
291
+
292
+ ## 10. Integration grid
293
+
294
+ Cards each holding 2–3 app icons (rounded-square white tiles) with a label below.
295
+
296
+ ```css
297
+ .int-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(180px, 1fr)); gap: 16px; }
298
+ .int-card { background: #fff; border: 1px solid var(--border); border-radius: var(--r-2xl); padding: 20px; box-shadow: var(--shadow-card); text-align: center; }
299
+ .int-icons { display: flex; justify-content: center; gap: 8px; margin-bottom: 16px; }
300
+ .int-icon { width: 56px; height: 56px; border-radius: var(--r-xl); background: #fff; border: 1px solid var(--border); display: grid; place-items: center; box-shadow: var(--shadow-xs); }
301
+ .int-label { font-weight: 600; color: var(--ink); font-size: 15px; }
302
+ ```
303
+
304
+ ---
305
+
306
+ ## 11. Warm-dark footer
307
+
308
+ Near-black surface, **amber logo**, muted-gray link columns, pill trust badges.
309
+
310
+ ```css
311
+ .footer { background: var(--ink); color: var(--n-400); padding: 80px var(--gutter) 40px; }
312
+ .footer-inner { width: min(var(--container), 100%); margin: 0 auto; }
313
+ .footer-brand { font-family: var(--font-display); font-weight: 800; font-size: 28px; color: var(--gold-500); }
314
+ .footer-tagline { color: var(--n-500); margin-top: 8px; }
315
+ .footer-cols { display: grid; grid-template-columns: repeat(4, 1fr); gap: 32px; }
316
+ .footer-col h4 { color: var(--n-400); font-size: 14px; font-weight: 600; margin-bottom: 16px; font-family: var(--font-body); letter-spacing: 0.02em; }
317
+ .footer-col a { display: block; color: var(--n-300); font-size: 15px; padding: 6px 0; transition: color var(--dur) var(--ease); }
318
+ .footer-col a:hover { color: #fff; }
319
+ .trust-row { display: flex; flex-wrap: wrap; gap: 12px; margin-top: 40px; padding-top: 32px; border-top: 1px solid #ffffff1a; }
320
+ .trust-pill { display: inline-flex; align-items: center; gap: 8px; padding: 8px 16px; border-radius: var(--r-full); background: #ffffff0d; color: var(--n-400); font-size: 14px; }
321
+ ```
322
+ The footer's primary "Get started →" CTA is the **gold** variant — this is the one place gold headlines a
323
+ dark surface and it sings.
324
+
325
+ ---
326
+
327
+ ## 12. Form fields (the product's own surface)
328
+
329
+ For the app/product UI itself, keep fields soft and friendly.
330
+
331
+ ```css
332
+ .field label { display: block; font-size: 14px; font-weight: 500; color: var(--n-700); margin-bottom: 6px; }
333
+ .field input, .field textarea {
334
+ width: 100%; padding: 12px 14px; border-radius: var(--r-md);
335
+ border: 1px solid var(--border-strong); background: #fff; font: 400 15px var(--font-body); color: var(--ink);
336
+ transition: border-color var(--dur) var(--ease), box-shadow var(--dur) var(--ease);
337
+ }
338
+ .field input:focus, .field textarea:focus { outline: none; border-color: var(--gold-500); box-shadow: var(--ring-gold); }
339
+ .field input::placeholder { color: var(--text-faint); }
340
+ ```
@@ -0,0 +1,121 @@
1
+ # Porting Guide — Reskin any site into Farmville SaaS
2
+
3
+ Use this when the user hands you an existing website, landing page, or component and wants it
4
+ *re-themed* into this style. The rule: **keep their structure, DOM, and copy — swap only the design
5
+ language.** Don't redesign the information architecture; re-dress it.
6
+
7
+ Work through these passes in order. Each is cheap and independently verifiable; together they transform
8
+ the feel. After each pass, glance at the result — the vibe should be visibly warming up.
9
+
10
+ ---
11
+
12
+ ## Pass 0 — Install the system
13
+
14
+ 1. Paste the `:root` token block from `references/tokens.md` into the global stylesheet.
15
+ 2. Add the font `<link>` (Hanken Grotesk + Inter).
16
+ 3. Set base `body`/heading styles as shown at the bottom of tokens.md. This alone shifts ~40% of the feel.
17
+
18
+ ## Pass 1 — Typography
19
+
20
+ - Point all headings at `--font-display` (Hanken Grotesk), body at Inter.
21
+ - Bump heading weights to **700–800** and pull tracking to **-0.02 / -0.03em**. Farmville headlines are
22
+ heavy and confident, not thin.
23
+ - Tighten heading line-height to ~1.0–1.2; open body to ~1.5–1.6.
24
+ - Make the hero headline *big* (`--display`) and, if it's over an image, split it two-tone
25
+ (translucent line + solid line).
26
+
27
+ ## Pass 2 — Round everything
28
+
29
+ - Nav bar, all buttons, and all badges → `--r-full` (full pills). This is the single most recognizable
30
+ change.
31
+ - Cards, modals, images, media frames → `--r-2xl`/`--r-3xl` (16–24px).
32
+ - Inputs, small chips, menu items → `--r-md`/`--r-lg` (6–8px).
33
+ - Search the CSS for `border-radius: 0`, `2px`, `4px` on big elements and round them up. No sharp
34
+ corners survive on anything a user clicks.
35
+
36
+ ## Pass 3 — Neutralize the palette to gray + one gold
37
+
38
+ - Replace the site's background grays/blues with the neutral scale: page `#fbfbfb`, tinted sections
39
+ `#f5f5f5`, cards `#fff`, hairline borders `#ededed`, text `#171717`→`#404040`→`#737373`.
40
+ - Pick **honey-gold `#ffc738`** as the single accent. Retire the site's existing brand color from UI
41
+ chrome (or demote it to one of the support pastels). Two competing saturated colors kill the look.
42
+ - Primary buttons on light backgrounds → **charcoal `#171717`**. Reserve **gold** for the one hero/
43
+ footer conversion CTA, star ratings, badges, and small highlights.
44
+ - Keep at most 1–2 support pastels for icon tiles / accents (violet, green, sky, coral), each on its
45
+ pale tint.
46
+ - Strip colored side-border accents from cards and list items (`border-left: 3px solid <status color>`
47
+ stripes are common in the wild). Cards keep a uniform `1px` hairline on all sides; move the status
48
+ signal into a pill or dot inside the card.
49
+
50
+ ## Pass 4 — Soften shadows & add lift
51
+
52
+ - Replace hard/tight/dark shadows with the diffuse low-opacity set (`--shadow-card`, `--shadow-lg`).
53
+ If a shadow is darker than ~10% black or has a small blur radius, swap it.
54
+ - Add hover lift to cards (`translateY(-2px)` + deeper shadow) and the arrow-nudge to CTAs.
55
+ - Set focus states to the gold ring (`--ring-gold`).
56
+
57
+ ## Pass 5 — Float the nav
58
+
59
+ - Detach the top nav into the glass pill (`references/components.md` §1): translucent fill,
60
+ `backdrop-blur`, hairline border, `--shadow-nav`, `--r-full`, with `16px` margin from the top.
61
+ - Center the nav links; keep a charcoal "Get started →" pill on the right.
62
+
63
+ ## Pass 6 — Warm the hero
64
+
65
+ - Give the hero the highest background tier you can produce (illustrated scene → sunny CSS sky →
66
+ warm cream wash; see components.md §4). This is where the "farmville" warmth actually lives — a
67
+ neutral UI with a sunny hero reads cozy; a neutral UI with a plain hero reads corporate.
68
+ - Center the hero content: badge → two-tone headline → one-line subhead → CTA.
69
+ - Optionally float a product screenshot on a `--r-3xl` card overlapping the next section.
70
+
71
+ ## Pass 7 — Re-pad & re-center sections
72
+
73
+ - Give sections `--section-y` (≈6rem) vertical breathing room; cap content at `--container` (1200px).
74
+ - Convert section intros to the centered pattern with a pill **badge eyebrow** (`🔥 Features`).
75
+ - Alternate section backgrounds white ↔ `#f5f5f5` for gentle rhythm.
76
+
77
+ ## Pass 8 — Warm-dark the footer
78
+
79
+ - Convert the footer to charcoal `#171717` with the **logo in amber gold**, muted-gray link columns,
80
+ and pill trust badges. Make its primary CTA the **gold** pill.
81
+
82
+ ## Pass 9 — Sprinkle delight
83
+
84
+ - Star ratings in gold; emoji/mini-glyph badges; colored icon tiles; grayscale logo cloud for trust;
85
+ arrow-nudge on CTAs. These small touches are what make it feel *handmade and friendly* rather than
86
+ merely rounded.
87
+
88
+ ---
89
+
90
+ ## Before → After checklist
91
+
92
+ Run this to confirm the port landed. If any row still says "before", keep going.
93
+
94
+ | Aspect | Before (generic) | After (farmville) |
95
+ |---|---|---|
96
+ | Heading font | thin default sans | Hanken Grotesk 700–800, tracking -0.025em |
97
+ | Corners | sharp / 4–8px everywhere | full-pill nav & buttons, 16–24px cards |
98
+ | Accent | site's brand blue/multi | one honey-gold `#ffc738`, charcoal workhorse |
99
+ | Shadows | dark / tight | diffuse, ≤10% black, soft-sunlight |
100
+ | Card borders | colored `border-left` status stripes | uniform 1px hairline all sides, status pill inside |
101
+ | Nav | full-width bar glued to top | floating frosted-glass pill |
102
+ | Hero | plain / photo / mesh gradient | warm illustrated (or sunny-sky) scene, two-tone headline |
103
+ | Section rhythm | dense, edge-to-edge | ~6rem padding, centered, badge eyebrows |
104
+ | Footer | light or plain dark | warm charcoal, amber logo, pill trust badges |
105
+ | Delight | none | gold stars, emoji badges, icon tiles, arrow nudge |
106
+
107
+ ---
108
+
109
+ ## Common mistakes (they quietly kill the vibe)
110
+
111
+ - **Too much gold.** Gold on every button = cheap. It's the *scarce* joy color; charcoal does the heavy
112
+ lifting.
113
+ - **Forgetting the illustrated hero.** A neutral, rounded UI with a flat hero is just "clean SaaS," not
114
+ "farmville." The warm hero is load-bearing.
115
+ - **Keeping a second bright brand color.** Pick gold and go all in; demote everything else to neutral or
116
+ a pale support tint.
117
+ - **Hard shadows.** One tight dark drop-shadow anywhere makes the whole page feel colder — audit them.
118
+ - **Side-border accents on cards.** A colored `border-left` stripe (status rails, category edges) reads
119
+ as a different, colder design system. Uniform hairline borders only; status goes in a pill or dot.
120
+ - **Sharp corners on buttons/nav.** Even one un-rounded CTA reads as a different design system.
121
+ - **Cramped spacing.** Farmville breathes. If it feels dense, add whitespace before adding anything else.