@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.
- package/.agents/skills/farmville-saas-ux/SKILL.md +156 -0
- package/.agents/skills/farmville-saas-ux/assets/starter.html +294 -0
- package/.agents/skills/farmville-saas-ux/references/components.md +340 -0
- package/.agents/skills/farmville-saas-ux/references/porting-guide.md +121 -0
- package/.agents/skills/farmville-saas-ux/references/tokens.md +271 -0
- package/.agents/skills/vidfarm-media/SKILL.md +2 -1
- package/.agents/skills/vidfarm-media/references/tts.md +20 -1
- package/demo/dist/app.css +1 -1
- package/demo/dist/app.js +74 -74
- package/dist/src/account-pages-legacy.js +2 -2
- package/dist/src/app.js +682 -12
- package/dist/src/config.js +13 -0
- package/dist/src/editor-chat.js +3 -2
- package/dist/src/frontend/homepage-client.js +211 -2
- package/dist/src/frontend/homepage-shared.js +197 -0
- package/dist/src/frontend/homepage-store.js +39 -1
- package/dist/src/frontend/homepage-view.js +150 -5
- package/dist/src/homepage.js +234 -18
- package/dist/src/landing-page.js +367 -0
- package/dist/src/primitive-registry.js +278 -2
- package/dist/src/reskin/agency-page.js +255 -0
- package/dist/src/reskin/calendar-page.js +252 -0
- package/dist/src/reskin/chat-page.js +414 -0
- package/dist/src/reskin/discover-page.js +380 -0
- package/dist/src/reskin/document.js +74 -0
- package/dist/src/reskin/help-page.js +318 -0
- package/dist/src/reskin/index-page.js +62 -0
- package/dist/src/reskin/job-runs-page.js +249 -0
- package/dist/src/reskin/library-page.js +515 -0
- package/dist/src/reskin/login-page.js +225 -0
- package/dist/src/reskin/pricing-page.js +359 -0
- package/dist/src/reskin/settings-page.js +353 -0
- package/dist/src/reskin/theme.js +265 -0
- package/dist/src/services/serverless-records.js +63 -0
- package/dist/src/services/swipe-customize.js +434 -0
- package/package.json +1 -1
- 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.
|