apex-ui-kit 2.12.2 → 2.14.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/ReadMe.md +14 -1
- package/dist/cli/index.js +86 -0
- package/dist/skill/apexui/SKILL.md +67 -0
- package/dist/skill/apexui/references/checklist.md +42 -0
- package/dist/skill/apexui/references/components.md +172 -0
- package/dist/skill/apexui/references/copy.md +39 -0
- package/dist/skill/apexui/references/directions.md +109 -0
- package/dist/skill/apexui/references/mobile-app.md +65 -0
- package/dist/skill/apexui/references/motion.md +105 -0
- package/dist/skill/apexui/references/page-plans.md +63 -0
- package/dist/skill/apexui/references/responsive-mobile.md +50 -0
- package/dist/skill/apexui/references/sections.md +266 -0
- package/dist/skill/apexui/references/security.md +81 -0
- package/dist/skill/apexui/references/taste.md +53 -0
- package/package.json +6 -3
package/ReadMe.md
CHANGED
|
@@ -65,6 +65,17 @@ export default function App() {
|
|
|
65
65
|
}
|
|
66
66
|
```
|
|
67
67
|
|
|
68
|
+
## AI agent skill
|
|
69
|
+
|
|
70
|
+
Give your AI agent (Claude Code, Antigravity, Cursor, Windsurf, Copilot, Codex, Gemini CLI) a designer's eye. It builds premium websites and mobile apps with a real art direction, flat colour, human copy and every section from nav to footer, responsive from 320px up. It works with any stack; ApexUI components are optional.
|
|
71
|
+
|
|
72
|
+
```bash
|
|
73
|
+
npx apex-ui-kit skill # pick your agents
|
|
74
|
+
npx apex-ui-kit skill --ai all # or set up every agent at once
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
Inside: taste rules, eight complete art directions, ready section code, copywriting rules, mobile app screens, responsive and security checklists. See sites built with it at [apex-ui.in/demos](https://apex-ui.in/demos).
|
|
78
|
+
|
|
68
79
|
## Example: AI prompt with a model picker
|
|
69
80
|
|
|
70
81
|
```bash
|
|
@@ -260,8 +271,10 @@ Every component's props, variants and copy-ready code are on its docs page.
|
|
|
260
271
|
| [Dot Globe](https://apex-ui.in/components/dot-globe) | `dot-globe` |
|
|
261
272
|
| [World Map](https://apex-ui.in/components/world-map) | `world-map` |
|
|
262
273
|
|
|
263
|
-
## What's new in 2.
|
|
274
|
+
## What's new in 2.14
|
|
264
275
|
|
|
276
|
+
- New in 2.14: the agent skill was rewritten. It no longer leans on ApexUI components: it chooses its own art direction (eight luxury directions, no gradients), writes human copy, builds every section from code blueprints and covers premium mobile app screens.
|
|
277
|
+
- New in 2.13: `npx apex-ui-kit skill` installs the ApexUI AI agent skill for Claude Code, Antigravity, Cursor, Windsurf, Copilot, Codex and Gemini CLI.
|
|
265
278
|
- New in 2.12: components size from their own container instead of the screen (Testimonials, Animated Tabs, Gooey Nav, Nav Menu, Flip Clock, Image Accordion, Beam Bar), a smoother Floating Navbar menu, no flicker in Theme Switcher and Parallax Carousel. Smart Grid Card and Card Swap 3D were removed.
|
|
266
279
|
- New in 2.10: Fluid Cursor (a real-time WebGL fluid sim that trails the cursor) and Sketch Reveal (a photo turns into a glowing sketch and burns away into the next one as you scroll).
|
|
267
280
|
- New in 2.9: Liquid Glass (iOS style WebGL glass), 10 live page templates on the site, Arc Gallery auto scroll, Scroll Stack on the page scroll, Sunrise trees and birds.
|
package/dist/cli/index.js
CHANGED
|
@@ -176,13 +176,99 @@ async function importedPackages(dir) {
|
|
|
176
176
|
await walk(dir);
|
|
177
177
|
return [...found];
|
|
178
178
|
}
|
|
179
|
+
// ---- AI agent skill -------------------------------------------------------
|
|
180
|
+
// `npx apex-ui-kit skill [--ai claude,cursor,...|all]` installs the ApexUI skill
|
|
181
|
+
// where each agent looks for it. Skill-aware agents get the whole folder; the
|
|
182
|
+
// rest get one rules file that points to the reference files in .apexui/skill.
|
|
183
|
+
const skillRoot = path.join(__dirname, "..", "skill", "apexui");
|
|
184
|
+
const SKILL_DESC = "Design and build premium, luxury-grade websites and mobile apps with a real art direction, human copy, every section from nav to footer, responsive and secure.";
|
|
185
|
+
const AGENTS = {
|
|
186
|
+
claude: { label: "Claude Code", dir: ".claude/skills/apexui" },
|
|
187
|
+
antigravity: { label: "Google Antigravity", dir: ".agents/skills/apexui" },
|
|
188
|
+
cursor: { label: "Cursor", file: ".cursor/rules/apexui.mdc", head: `---\ndescription: ${SKILL_DESC}\nalwaysApply: false\n---\n\n` },
|
|
189
|
+
windsurf: { label: "Windsurf", file: ".windsurf/rules/apexui.md", head: `---\ntrigger: model_decision\ndescription: ${SKILL_DESC}\n---\n\n` },
|
|
190
|
+
copilot: { label: "GitHub Copilot", file: ".github/instructions/apexui.instructions.md", head: `---\napplyTo: "**"\n---\n\n` },
|
|
191
|
+
codex: { label: "Codex, ChatGPT agents and other AGENTS.md tools", file: "AGENTS.md", section: true },
|
|
192
|
+
gemini: { label: "Gemini CLI", file: "GEMINI.md", section: true },
|
|
193
|
+
};
|
|
194
|
+
async function installSkill(args) {
|
|
195
|
+
if (!(await fs.pathExists(path.join(skillRoot, "SKILL.md")))) {
|
|
196
|
+
console.log(chalk.red("❌ Internal error: skill files not found in the package."));
|
|
197
|
+
return;
|
|
198
|
+
}
|
|
199
|
+
const flag = args.find((a) => a.startsWith("--ai"));
|
|
200
|
+
let picked = [];
|
|
201
|
+
if (flag) {
|
|
202
|
+
const value = flag.includes("=") ? flag.split("=")[1] : args[args.indexOf(flag) + 1] ?? "";
|
|
203
|
+
picked = value === "all" ? Object.keys(AGENTS) : value.split(",").map((s) => s.trim().toLowerCase()).filter(Boolean);
|
|
204
|
+
}
|
|
205
|
+
else {
|
|
206
|
+
const { agents } = await prompts({
|
|
207
|
+
type: "multiselect",
|
|
208
|
+
name: "agents",
|
|
209
|
+
message: "🤖 Install the ApexUI skill for which AI agents?",
|
|
210
|
+
choices: Object.entries(AGENTS).map(([value, a]) => ({ title: a.label, value, selected: value === "claude" })),
|
|
211
|
+
hint: "Space to select, Enter to confirm",
|
|
212
|
+
});
|
|
213
|
+
picked = agents ?? [];
|
|
214
|
+
}
|
|
215
|
+
const unknown = picked.filter((p) => !AGENTS[p]);
|
|
216
|
+
if (unknown.length) {
|
|
217
|
+
console.log(chalk.red(`❌ Unknown agent: ${unknown.join(", ")}. Use: ${Object.keys(AGENTS).join(", ")} or all.`));
|
|
218
|
+
return;
|
|
219
|
+
}
|
|
220
|
+
if (!picked.length) {
|
|
221
|
+
console.log(chalk.yellow("Nothing selected."));
|
|
222
|
+
return;
|
|
223
|
+
}
|
|
224
|
+
const cwd = process.cwd();
|
|
225
|
+
const raw = await fs.readFile(path.join(skillRoot, "SKILL.md"), "utf8");
|
|
226
|
+
const body = raw.replace(/^---[\s\S]*?---\s*/, "").replace(/`references\//g, "`.apexui/skill/references/");
|
|
227
|
+
let sharedCopied = false;
|
|
228
|
+
for (const key of picked) {
|
|
229
|
+
const a = AGENTS[key];
|
|
230
|
+
if (a.dir) {
|
|
231
|
+
const dest = path.join(cwd, a.dir);
|
|
232
|
+
await fs.ensureDir(dest);
|
|
233
|
+
await fs.copy(skillRoot, dest, { overwrite: true });
|
|
234
|
+
console.log(chalk.green(`✅ ${a.label}: ${a.dir}/`));
|
|
235
|
+
continue;
|
|
236
|
+
}
|
|
237
|
+
if (!sharedCopied) {
|
|
238
|
+
await fs.copy(path.join(skillRoot, "references"), path.join(cwd, ".apexui", "skill", "references"), { overwrite: true });
|
|
239
|
+
sharedCopied = true;
|
|
240
|
+
}
|
|
241
|
+
const file = path.join(cwd, a.file);
|
|
242
|
+
await fs.ensureDir(path.dirname(file));
|
|
243
|
+
if (a.section) {
|
|
244
|
+
const block = `<!-- apexui:start -->\n${body.trim()}\n<!-- apexui:end -->\n`;
|
|
245
|
+
const old = (await fs.pathExists(file)) ? await fs.readFile(file, "utf8") : "";
|
|
246
|
+
const next = old.includes("<!-- apexui:start -->")
|
|
247
|
+
? old.replace(/<!-- apexui:start -->[\s\S]*?<!-- apexui:end -->\n?/, block)
|
|
248
|
+
: `${old}${old && !old.endsWith("\n") ? "\n" : ""}${old ? "\n" : ""}${block}`;
|
|
249
|
+
await fs.writeFile(file, next);
|
|
250
|
+
}
|
|
251
|
+
else {
|
|
252
|
+
await fs.writeFile(file, `${a.head ?? ""}${body}`);
|
|
253
|
+
}
|
|
254
|
+
console.log(chalk.green(`✅ ${a.label}: ${a.file}`));
|
|
255
|
+
}
|
|
256
|
+
if (sharedCopied)
|
|
257
|
+
console.log(chalk.gray(" Reference files: .apexui/skill/references/"));
|
|
258
|
+
console.log(chalk.cyan("\nNow ask your agent, for example: \"Build a premium, responsive landing page for my app with ApexUI.\""));
|
|
259
|
+
}
|
|
179
260
|
async function main() {
|
|
180
261
|
const args = process.argv.slice(2);
|
|
181
262
|
const command = args[0];
|
|
182
263
|
const rawInput = args[1];
|
|
264
|
+
if (command === "skill") {
|
|
265
|
+
await installSkill(args.slice(1));
|
|
266
|
+
return;
|
|
267
|
+
}
|
|
183
268
|
if (command !== "add" || !rawInput) {
|
|
184
269
|
console.log(chalk.yellow("Usage:"));
|
|
185
270
|
console.log(" npx apex-ui-kit add <component-name>");
|
|
271
|
+
console.log(" npx apex-ui-kit skill [--ai claude,antigravity,cursor,windsurf,copilot,codex,gemini | all]");
|
|
186
272
|
return;
|
|
187
273
|
}
|
|
188
274
|
const input = rawInput.toLowerCase();
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: apexui
|
|
3
|
+
description: Design and build premium, luxury-grade websites and mobile apps that look made by a top studio, not by AI. Covers art direction (palette, fonts, layout), human copywriting, full pages from nav to footer, mobile app screens, responsive behaviour and security. Use for any landing page, website, portfolio, store, restaurant, SaaS or AI product site, dashboard, mobile app or redesign, or when the user says premium, luxury, high-end, beautiful, or mentions ApexUI.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Premium sites and apps
|
|
7
|
+
|
|
8
|
+
You are the art director and the engineer. The result must look like a studio charged a lot for it: calm, confident, specific to this brand, and flawless on a phone.
|
|
9
|
+
|
|
10
|
+
Follow the steps in order. Do not skip the plan. Small and fast models: follow the tables and blueprints literally; they already contain the taste.
|
|
11
|
+
|
|
12
|
+
## The 12 hard rules
|
|
13
|
+
1. **No gradients.** No gradient backgrounds, text, buttons, borders or glows. Flat colour, photography and type do the work. Text over a photo gets a flat dark overlay (`bg-black/40`), never a gradient.
|
|
14
|
+
2. **One direction.** Pick one art direction from `references/directions.md` or build your own with the rules in `references/taste.md`. Never mix two.
|
|
15
|
+
3. **Type leads.** One display face and one text face at most. Big, tight headlines. Body 16 to 18px.
|
|
16
|
+
4. **Restraint in colour.** Neutrals carry 90% of the page. One accent, used on fewer than 5 things per screen. No neon on black.
|
|
17
|
+
5. **Space is the luxury.** Sections at least 96px tall padding on desktop, 64px on phones. Never crowd.
|
|
18
|
+
6. **Human copy only.** Follow `references/copy.md`. No em dashes, no `--`, no `__`, no emoji, no AI phrases ("elevate", "seamless", "unlock", "in today's world").
|
|
19
|
+
7. **Specific content.** Real-sounding names, prices, places, numbers. Never lorem ipsum, "John Doe", "Feature 1" or placeholder logos.
|
|
20
|
+
8. **Real images.** Use real photography that fits the brand (Unsplash by id is fine). Same tone and colour temperature across the page. No cartoon illustrations unless the brand asks.
|
|
21
|
+
9. **Complete pages.** Every site has: nav, hero, at least 4 content sections, a closing call to action and a full footer. See `references/page-plans.md`.
|
|
22
|
+
10. **Phone first, every width.** Works from 320px to 1920px with no horizontal scroll. See `references/responsive-mobile.md`.
|
|
23
|
+
11. **Premium motion.** Every site gets the core motion set (headline lines, reveals, image curtains, parallax, hover details) and one signature moment from `references/motion.md`. Smooth and calm, never bouncy. Only `transform`, `opacity` and `clip-path`. Respect reduced motion.
|
|
24
|
+
12. **Secure by default.** No secrets in front-end code, no unsafe HTML, safe links. See `references/security.md`.
|
|
25
|
+
|
|
26
|
+
## Step 1. Write the brief (3 lines)
|
|
27
|
+
- **What and who**: the product and the person it is for.
|
|
28
|
+
- **Feeling**: three adjectives (for example "quiet, tailored, warm").
|
|
29
|
+
- **Goal**: the one action a visitor should take.
|
|
30
|
+
If the user gave little detail, decide sensibly and state your choices in one sentence. Ask at most two questions, and only if the answer changes the design.
|
|
31
|
+
|
|
32
|
+
## Step 2. Choose the art direction
|
|
33
|
+
Open `references/directions.md`. Pick the direction whose "Best for" matches the brief. Copy its palette, fonts, radius, image style and layout motif exactly. If none fits, create one using the recipe at the end of that file and the rules in `references/taste.md`.
|
|
34
|
+
|
|
35
|
+
## Step 3. Plan the page or app
|
|
36
|
+
- Website: take the section order for this type from `references/page-plans.md`. Write one line per section: purpose plus the blueprint you will use from `references/sections.md`.
|
|
37
|
+
- Choose the signature motion moment from `references/motion.md` that fits the brand (intro curtain, sticky lookbook, pinned gallery, story by the hour...).
|
|
38
|
+
- Mobile app: list the screens and the tab bar from `references/mobile-app.md`.
|
|
39
|
+
- Write the real copy now, following `references/copy.md`. Design around real words, not placeholders.
|
|
40
|
+
|
|
41
|
+
## Step 4. Build
|
|
42
|
+
- Default stack: React + Vite + Tailwind CSS v4 (or plain HTML + Tailwind if the user wants one file). Any stack works; the rules stay the same.
|
|
43
|
+
- Put the direction's colours and fonts in CSS variables first (template in `references/directions.md`). Use only those tokens.
|
|
44
|
+
- Assemble sections from `references/sections.md`, then adjust spacing and copy to the brand. Keep the code clean: one component per section.
|
|
45
|
+
- Add motion from `references/motion.md`: the core set on every section, plus the one signature moment you chose in the plan. A static page is not finished.
|
|
46
|
+
- ApexUI components are optional extras for motion and interaction (`npx apex-ui-kit add <name>`, list in `references/components.md`). Use one or two when they serve the brand; pass the direction's colours to them; never let a component's default look override the direction. You can build everything without them.
|
|
47
|
+
|
|
48
|
+
## Step 5. Secure and polish
|
|
49
|
+
Go through `references/security.md`, then `references/checklist.md`. Fix every failed item.
|
|
50
|
+
|
|
51
|
+
## Step 6. Review like an art director
|
|
52
|
+
Look at the page at 375px and 1440px. Ask: does anything look like a template? Is anything louder than it needs to be? Remove one element that is not pulling its weight. Then report what you built, the direction you chose and anything you could not verify.
|
|
53
|
+
|
|
54
|
+
## Reference files
|
|
55
|
+
| File | Use it for |
|
|
56
|
+
| --- | --- |
|
|
57
|
+
| `references/taste.md` | What premium means, and the generic AI looks to avoid. |
|
|
58
|
+
| `references/directions.md` | Eight complete art directions: palette, fonts, imagery, layout motif. |
|
|
59
|
+
| `references/copy.md` | Writing like a person: rules, banned words, before and after examples. |
|
|
60
|
+
| `references/page-plans.md` | Section order for each kind of site (store, portfolio, restaurant, SaaS...). |
|
|
61
|
+
| `references/sections.md` | Code blueprints for every section, nav to footer. |
|
|
62
|
+
| `references/motion.md` | The motion that makes it feel premium: core set and signature moments, with code. |
|
|
63
|
+
| `references/mobile-app.md` | Premium mobile app screens, navigation, sizes and motion. |
|
|
64
|
+
| `references/responsive-mobile.md` | Breakpoints, touch, safe areas, PWA, performance. |
|
|
65
|
+
| `references/components.md` | Optional ApexUI animated components and when they fit. |
|
|
66
|
+
| `references/security.md` | Front-end security rules. |
|
|
67
|
+
| `references/checklist.md` | Final checks before you say it is done. |
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
# Pre-delivery checklist
|
|
2
|
+
|
|
3
|
+
Go through every line. Fix what fails. In your final message, say which direction you used and list anything you could not check.
|
|
4
|
+
|
|
5
|
+
## Taste
|
|
6
|
+
- [ ] One art direction, used through tokens. No stray colours, no second accent.
|
|
7
|
+
- [ ] Zero gradients anywhere (search the code for `gradient`, `from-`, `via-`, `to-`, `bg-clip-text`).
|
|
8
|
+
- [ ] At most two font families and three weights. Display face on headings only.
|
|
9
|
+
- [ ] No identical card grids repeated down the page; sections alternate layout.
|
|
10
|
+
- [ ] Images share one mood and colour temperature; every image has a purpose and `alt` text.
|
|
11
|
+
- [ ] One signature move, and nothing louder than it.
|
|
12
|
+
|
|
13
|
+
## Copy
|
|
14
|
+
- [ ] No `—`, `–` used as a pause, `--`, `__`, emoji or exclamation marks in headlines.
|
|
15
|
+
- [ ] None of the banned phrases from `copy.md`.
|
|
16
|
+
- [ ] Real names, prices, places and honest numbers; no lorem ipsum or "John Doe".
|
|
17
|
+
- [ ] Every button says its action.
|
|
18
|
+
|
|
19
|
+
## Completeness
|
|
20
|
+
- [ ] Nav, hero, at least four content sections, closing call to action, full footer.
|
|
21
|
+
- [ ] Footer has contact or address, useful links, legal line.
|
|
22
|
+
- [ ] Forms have labels, validation and a success state.
|
|
23
|
+
|
|
24
|
+
## Responsive
|
|
25
|
+
- [ ] Checked at 320, 375, 768, 1024, 1280 and 1440px; no horizontal scroll at any width.
|
|
26
|
+
- [ ] Nav collapses to a working menu on phones; tap targets at least 44px.
|
|
27
|
+
- [ ] Headline sizes step down on phones (no word broken mid-way, no overflow).
|
|
28
|
+
- [ ] Safe-area padding on fixed bars (mobile apps).
|
|
29
|
+
|
|
30
|
+
## Performance and accessibility
|
|
31
|
+
- [ ] Core motion on every section (headline lines, reveals, image curtains or parallax) and exactly one signature moment.
|
|
32
|
+
- [ ] Only `transform`, `opacity` and `clip-path` animate; reveals play once; reduced motion respected.
|
|
33
|
+
- [ ] Images lazy-loaded below the fold with fixed aspect ratios (no layout shift).
|
|
34
|
+
- [ ] Keyboard: every action reachable, focus visible. Contrast 4.5:1 for text.
|
|
35
|
+
- [ ] Fonts loaded with `display=swap`, only the weights used.
|
|
36
|
+
|
|
37
|
+
## Security
|
|
38
|
+
- [ ] Everything in `security.md` section 9 passes.
|
|
39
|
+
|
|
40
|
+
## Hand-off
|
|
41
|
+
- [ ] `npm run build` succeeds.
|
|
42
|
+
- [ ] README: how to run, where to change copy, colours and images.
|
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
# ApexUI components (optional)
|
|
2
|
+
|
|
3
|
+
You do not need these to build a premium site: the directions and blueprints are enough. Use one or two when an interaction or motion piece truly serves the brand. 116 components; add one with `npx apex-ui-kit add <cli-name>` (it lands in `ApexUI-Kit/<Folder>/`). Read the component source before using it and pass your direction's colours to it.
|
|
4
|
+
|
|
5
|
+
## Backgrounds
|
|
6
|
+
|
|
7
|
+
| Component | CLI name | What it is |
|
|
8
|
+
| --- | --- | --- |
|
|
9
|
+
| BluePrint Background | `blueprint-background` | An animated blueprint-style grid background with interactive hover effects. |
|
|
10
|
+
| Kinetic Threads Background | `kinetic-threads-background` | A generative background of flowing, animated threads. |
|
|
11
|
+
| Lens Flare Background | `lens-flare-background` | An animated lens flare that adds a cinematic touch to any hero. |
|
|
12
|
+
| Luminous Particle Ocean | `luminous-particle-ocean` | A 3D ocean of glowing particles for immersive backgrounds. |
|
|
13
|
+
| Orbs Background | `orbs-background` | Floating orbs that drift and react to the pointer. |
|
|
14
|
+
| Rain Background | `rain-background` | Animated rainfall with collision detection. |
|
|
15
|
+
| Ripple Background | `ripple-background` | Soft, generative ripples that spread across the canvas. |
|
|
16
|
+
| Smoke Background | `smoke-background` | A WebGL smoke simulation with dynamic lighting. |
|
|
17
|
+
| Dot Wave Background | `dot-wave-background` | A grid of dots with a rolling wave of color that reacts to the pointer. |
|
|
18
|
+
| Liquid Gradient | `liquid-gradient` | A flowing four-color mesh gradient with film grain, drawn by one tiny OGL shader. |
|
|
19
|
+
| Aurora Background | `aurora-background` | Drifting northern-light curtains drawn by a light WebGL shader. |
|
|
20
|
+
| Retro Grid 3D | `retro-grid-3d` | A synthwave three.js landscape with scrolling hills and a striped sun. |
|
|
21
|
+
| Galaxy 3D | `galaxy-3d` | A turning three.js spiral galaxy with pointer parallax. |
|
|
22
|
+
| Warp Tunnel | `warp-tunnel` | A WebGL hyperspace tunnel that bends to the pointer; hold to boost. |
|
|
23
|
+
| Sunrise Background | `sunrise-background` | A WebGL sun rising between two mountain ranges, with rays, mist and rim light. |
|
|
24
|
+
| Horizon Glow | `horizon-glow` | A soft WebGL light rising from the bottom edge into a deep sky, for hero sections. |
|
|
25
|
+
| Dither Waves | `dither-waves` | Flowing waves as two-tone dithered pixel art in WebGL, with pointer ripples. |
|
|
26
|
+
|
|
27
|
+
## Text & Motion
|
|
28
|
+
|
|
29
|
+
| Component | CLI name | What it is |
|
|
30
|
+
| --- | --- | --- |
|
|
31
|
+
| Accordion Marquee | `accordion-marquee` | An interactive accordion with a smooth marquee effect on hover. |
|
|
32
|
+
| Beam Bar | `beam-bar` | An animated beam bar with a pulsing light for loading states and dashboards. |
|
|
33
|
+
| Hover Text | `hover-text` | Interactive text hover effects that bring headings to life. |
|
|
34
|
+
| Scroll Marquee | `scroll-marquee` | Text and card marquees whose speed follows the scroll. |
|
|
35
|
+
| Rolling Counter | `rolling-counter` | An odometer-style number whose digit wheels roll to every new value. |
|
|
36
|
+
| Scramble Text | `scramble-text` | Text that decrypts letter by letter on view, on hover or on a loop. |
|
|
37
|
+
| Blur Reveal Text | `blur-reveal-text` | Words rise out of a blur one after another as they scroll into view. |
|
|
38
|
+
| Flip Clock | `flip-clock` | Split-flap digits for countdowns, timers and clocks. |
|
|
39
|
+
| Typewriter Text | `typewriter-text` | Types, pauses and deletes rotating phrases with a blinking caret. |
|
|
40
|
+
| Extruded Text | `extruded-text` | Chunky 3D layered letters that tilt toward the pointer. |
|
|
41
|
+
| Mask View | `mask-view` | Reveal content through a mask: a text window onto an image, a spotlight, or glass you wipe clear. |
|
|
42
|
+
| Shiny Text | `shiny-text` | A band of light sweeps across the text on a loop, like light catching metal. |
|
|
43
|
+
| Glitch Text | `glitch-text` | Text that tears into shifted color slices like a broken signal. |
|
|
44
|
+
| Rotating Text | `rotating-text` | A headline whose last word swaps letter by letter inside a resizing pill. |
|
|
45
|
+
| Circular Text | `circular-text` | Text wrapped around a spinning circle that reacts to hover. |
|
|
46
|
+
| Proximity Text | `proximity-text` | Letters swell, lift and light up as the pointer gets close. |
|
|
47
|
+
| True Focus | `true-focus` | One sharp word at a time, framed by brackets that glide between words. |
|
|
48
|
+
| 3D Text Ring | `text-ring-3d` | Letters on a spinning ring in real 3D, drag to throw it around. |
|
|
49
|
+
| Particle Text | `particle-text` | Text built from canvas particles that fly in, dodge the pointer and burst on click. |
|
|
50
|
+
| Crossed Marquee | `crossed-marquee` | Two tilted tech-stack bands crossing like an X that react to page scroll. |
|
|
51
|
+
|
|
52
|
+
## Cards
|
|
53
|
+
|
|
54
|
+
| Component | CLI name | What it is |
|
|
55
|
+
| --- | --- | --- |
|
|
56
|
+
| Cards | `basic-card`, `meteor-card` | Basic and meteor-shower cards for showcasing content with motion. |
|
|
57
|
+
| Card Stack | `card-stack` | A stack of cards that cycles automatically and pauses on hover. |
|
|
58
|
+
| Glare Card | `glare-card` | A card with a reflective glare that follows the user's cursor. |
|
|
59
|
+
| Hyper Card | `hyper-card` | A futuristic card with a starfield background and warp-speed hover. |
|
|
60
|
+
| Parallax Card | `parallax-card` | A card with a layered 3D parallax effect. |
|
|
61
|
+
| Profile | `flip-profile`, `parallax-profile`, `profile-card` | Profile cards in four styles, flip, parallax, a tilting card and an ID badge on a ribbon. |
|
|
62
|
+
| Testimonials | `testimonials` | A testimonials section with smooth transitions between quotes. |
|
|
63
|
+
| Spotlight Grid | `spotlight-grid` | A bento grid of cards sharing one pointer spotlight across borders and surfaces. |
|
|
64
|
+
| Pricing Cards | `pricing-cards` | Plans with a monthly / yearly switch, sliding prices and a glowing featured plan. |
|
|
65
|
+
| Swipe Cards | `swipe-cards` | A deck you swipe left or right with tilt, LIKE / NOPE stamps and undo. |
|
|
66
|
+
| Holo Card | `holo-card` | A collectible card that tilts in 3D with a holographic foil and floating layers. |
|
|
67
|
+
| Iso Stack | `iso-stack` | Isometric 3D layers that fan open to show each label. |
|
|
68
|
+
| Pixel Transition | `pixel-transition` | A card that dissolves into pixels to reveal its other side. |
|
|
69
|
+
| Folder | `folder` | A folder that opens and fans its papers out toward the pointer. |
|
|
70
|
+
| Bounce Cards | `bounce-cards` | A fanned hand of photo cards that bounce in and make room on hover. |
|
|
71
|
+
| Distortion Image | `distortion-image` | A WebGL image that ripples and splits into RGB fringes under the pointer. |
|
|
72
|
+
| Scroll Stack | `scroll-stack` | Cards that pin and pile up as you scroll, shrinking and dimming into depth. |
|
|
73
|
+
| Image Accordion | `image-accordion` | Image panels that open wide on hover and stack vertically on phones. |
|
|
74
|
+
|
|
75
|
+
## Navigation
|
|
76
|
+
|
|
77
|
+
| Component | CLI name | What it is |
|
|
78
|
+
| --- | --- | --- |
|
|
79
|
+
| Nav DropDown | `nav-dropdown` | A floating navbar with one dropdown panel that morphs between menus. |
|
|
80
|
+
| Nav Menu | `nav-menu` | Navigation with an animated active indicator. |
|
|
81
|
+
| Theme Toggle | `theme-toggle` | A light/dark switch with view-transition reveal animations. |
|
|
82
|
+
| Magnify Dock | `magnify-dock` | A macOS-style glass dock whose icons swell toward the pointer. |
|
|
83
|
+
| Sidebar Nav | `sidebar-nav` | An app sidebar that collapses to an icon rail, with a sliding active pill and groups. |
|
|
84
|
+
| Animated Tabs | `animated-tabs` | Tabs with a sliding pill, underline or segmented indicator and sliding panels. |
|
|
85
|
+
| Floating Navbar | `floating-navbar` | A glassy responsive navbar with a hover pill, hide-on-scroll and an animated mobile menu. |
|
|
86
|
+
| Gooey Nav | `gooey-nav` | A liquid active pill that bursts droplets between links. |
|
|
87
|
+
| Radial Menu | `radial-menu` | A round button that fans its actions out in a circle or an arc. |
|
|
88
|
+
| Command Palette | `command-palette` | A ⌘K search palette with fuzzy matching and a sliding keyboard highlight. |
|
|
89
|
+
| Theme Switcher | `theme-switcher` | Eight colour themes with a circle reveal from the swatch you click. |
|
|
90
|
+
|
|
91
|
+
## Buttons
|
|
92
|
+
|
|
93
|
+
| Component | CLI name | What it is |
|
|
94
|
+
| --- | --- | --- |
|
|
95
|
+
| Animated Buttons | `animated-button`, `hold-to-confirm` | Seven button feels, shine, fill, border beam, 3D press, loading, ripple and arrow. |
|
|
96
|
+
| Animated Switches | `animated-switch` | Toggles with personality, classic, icon, day-to-night and neon. |
|
|
97
|
+
| Star Border | `star-border` | A button with points of light sliding along its edges. |
|
|
98
|
+
| Magnetic Button | `magnetic-button` | A button that leans toward the pointer with a layered label and a tracking glow. |
|
|
99
|
+
|
|
100
|
+
## Interactive
|
|
101
|
+
|
|
102
|
+
| Component | CLI name | What it is |
|
|
103
|
+
| --- | --- | --- |
|
|
104
|
+
| Avatar | `avatar` | Display user avatars on their own or as an animated, stacked group. |
|
|
105
|
+
| Carousel | `carousel`, `parallax-carousel`, `drag-carousel` | Smooth, customizable carousels for showcasing images or content. |
|
|
106
|
+
| Edge Glow Form | `edge-glow-form` | A form container that emits a soft gradient glow from its edges. |
|
|
107
|
+
| Pointer Follower | `pointer-follower` | A pointer that follows the cursor and reveals content as it moves. |
|
|
108
|
+
| ToolTip | `tooltip` | Animated tooltips with smooth, physics-based positioning. |
|
|
109
|
+
| Receipt Printer | `receipt-printer` | A thermal printer that processes a payment and feeds a receipt out line by line. |
|
|
110
|
+
| Dynamic Island | `dynamic-island` | A black capsule that morphs between music, calls, timers and notifications. |
|
|
111
|
+
| 3D Carousel | `3d-carousel`, `webgl-carousel` | Cards on a ring that spins in 3D, a light CSS ring or a full 360° WebGL ring. |
|
|
112
|
+
| Magnetic Cursor | `magnetic-cursor` | A dot-and-ring cursor that wraps buttons, labels images and pulls magnetic elements. |
|
|
113
|
+
| FAQ Accordion | `faq-accordion` | Questions that open smoothly with a plus that turns into a cross. |
|
|
114
|
+
| Toast Stack | `toast-stack` | Stacked notifications that fan out on hover and swipe away. |
|
|
115
|
+
| Cursor Trail | `cursor-trail` | A tail that follows the mouse, comet, rainbow, dots, ribbon, sparkles or ghost rings. |
|
|
116
|
+
| Image Compare | `image-compare` | A before / after slider you drag, click or move with the keyboard. |
|
|
117
|
+
| Cube Gallery | `cube-gallery` | Images on a 3D cube you drag, click or arrow-key around. |
|
|
118
|
+
| Flip Book | `flip-book` | A 3D book whose pages turn around the spine. |
|
|
119
|
+
| Click Spark | `click-spark` | Every click throws a ring of sparks from the pointer. |
|
|
120
|
+
| Elastic Slider | `elastic-slider` | A slider whose track stretches like rubber when pulled past the ends. |
|
|
121
|
+
| Stepper | `stepper` | A multi-step flow with filling indicators and sliding step content. |
|
|
122
|
+
| Coverflow 3D | `coverflow-3d` | The classic album-flip view with angled covers and reflections. |
|
|
123
|
+
| Magnet Lines | `magnet-lines` | A grid of lines that all swing to point at the pointer. |
|
|
124
|
+
| Liquid Blob 3D | `liquid-blob-3d` | A glossy three.js blob whose surface flows and ripples toward the pointer. |
|
|
125
|
+
| Particle Morph | `particle-morph` | Thousands of three.js particles that swarm between 3D shapes. |
|
|
126
|
+
| Marquee 3D | `marquee-3d` | A tilted 3D wall of cards with columns scrolling in opposite directions. |
|
|
127
|
+
| Wireframe Knot 3D | `wireframe-knot-3d` | A glowing three.js wireframe shape that turns toward the pointer. |
|
|
128
|
+
| Edge Blur | `edge-blur` | A progressive blur that melts content at the edge of a scrolling area. |
|
|
129
|
+
| Circular Carousel | `circular-carousel` | A WebGL ring of curved image cards you can drag, flick and click. |
|
|
130
|
+
| Arc Gallery | `arc-gallery` | An endless WebGL row of image cards bent along an arc, with drag and wheel. |
|
|
131
|
+
| Glass Lens | `glass-lens` | A WebGL drop of liquid glass that refracts and magnifies an image under the pointer. |
|
|
132
|
+
| Infinite Canvas | `infinite-canvas` | An endless wall of image cards you drag and fling in any direction. |
|
|
133
|
+
| Orbit Icons | `orbit-icons` | Icons circling a center on tilted rings, easing to a stop on hover. |
|
|
134
|
+
| Liquid Glass | `liquid-glass` | iOS style WebGL glass panels that bend, frost and melt together as you drag them. |
|
|
135
|
+
| Fluid Cursor | `fluid-cursor` | A real-time WebGL fluid simulation that trails the cursor with swirling ink. |
|
|
136
|
+
| Sketch Reveal | `sketch-reveal` | A photo turns into a glowing sketch, then burns away into the next one as you scroll. |
|
|
137
|
+
|
|
138
|
+
## AI
|
|
139
|
+
|
|
140
|
+
| Component | CLI name | What it is |
|
|
141
|
+
| --- | --- | --- |
|
|
142
|
+
| AI Chat | `ai-chat` | A chat window with streaming replies, typing dots and suggestion chips. |
|
|
143
|
+
| AI Prompt Box | `ai-prompt-box` | A prompt input with a glowing border, model picker, attachments and send / stop. |
|
|
144
|
+
| AI Thinking | `ai-thinking` | A shimmering Thinking state with a timer and steps that tick off. |
|
|
145
|
+
| AI Voice Orb | `ai-voice-orb` | A glass voice-assistant orb that reacts to idle, listening, thinking and speaking. |
|
|
146
|
+
| AI Voice Wave | `ai-voice-wave` | Glowing sine waves that swell and burst with the assistant's voice. |
|
|
147
|
+
| AI Voice Bars | `ai-voice-bars` | An equalizer pill of rounded bars for listening, thinking and speaking. |
|
|
148
|
+
| AI Voice Ring | `ai-voice-ring` | A circular audio visualiser with radial bars around a glowing core. |
|
|
149
|
+
| AI Voice Blob | `ai-voice-blob` | A gradient blob whose outline wobbles with the assistant's voice. |
|
|
150
|
+
| AI Response | `ai-response` | A streaming answer with code, sources and copy / regenerate / feedback actions. |
|
|
151
|
+
| AI Model Prompt | `ai-model-prompt` | A prompt composer with a model picker and per-model temperature, tokens and reasoning settings. |
|
|
152
|
+
|
|
153
|
+
## Loaders
|
|
154
|
+
|
|
155
|
+
| Component | CLI name | What it is |
|
|
156
|
+
| --- | --- | --- |
|
|
157
|
+
| Loading Screens | `loading-screen` | Six loaders, orbit, progress, blocks and three mini games (orb, runner, racing) to play while you wait. |
|
|
158
|
+
|
|
159
|
+
## Maps
|
|
160
|
+
|
|
161
|
+
| Component | CLI name | What it is |
|
|
162
|
+
| --- | --- | --- |
|
|
163
|
+
| Dot Globe | `dot-globe` | A draggable 3D globe of land dots with pulsing cities and flight arcs. |
|
|
164
|
+
| World Map | `world-map` | A dotted world map with flight connections, live pings or clickable office pins. |
|
|
165
|
+
|
|
166
|
+
## Picking well
|
|
167
|
+
|
|
168
|
+
- Luxury and editorial directions: prefer quiet pieces (Image Accordion, Image Compare, FAQ Accordion, Scroll Stack, Flip Clock, Magnetic Button, Toast Stack, Animated Tabs, Stepper, Swipe Cards, Coverflow 3D). They keep the page calm.
|
|
169
|
+
- Glow and colour backgrounds (Aurora, Galaxy 3D, Warp Tunnel, Liquid Gradient, Horizon Glow, Sunrise, Lens Flare, Orbs) contain gradients. Do not use them in the luxury directions; at most one, only for a playful or tech brand that asked for it.
|
|
170
|
+
- Text effects work best on short strings: a headline, a word that rotates, a stat that counts.
|
|
171
|
+
- Product UI (dashboards, settings, forms): Animated Tabs, Sidebar Nav, Stepper, FAQ Accordion, Toast Stack, Command Palette.
|
|
172
|
+
- AI products: AI Prompt Box or AI Model Prompt for input, AI Thinking and AI Response for output.
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# Copy: write like a person
|
|
2
|
+
|
|
3
|
+
Premium brands sound calm, specific and sure. Write the copy before the layout, and write it the way a sharp human editor would.
|
|
4
|
+
|
|
5
|
+
## Rules
|
|
6
|
+
1. **Short and concrete.** Headlines 3 to 8 words. Say what it is or what it does for someone. "Coats cut to last a decade" beats "Elevate your wardrobe".
|
|
7
|
+
2. **Specific over impressive.** Use real details: materials, places, times, prices, numbers with context. "Open Tuesday to Sunday, 6 pm till late" not "An unforgettable dining experience".
|
|
8
|
+
3. **Plain punctuation.** Commas and full stops. No em dashes (—), no en dashes as pauses, no double hyphens (`--`), no underscores (`__`), no ellipses for drama, no exclamation marks in headlines. Use a full stop or a comma instead.
|
|
9
|
+
4. **No emoji, no sparkles, no symbols as decoration** (✨ 🚀 → •). Middle dots only in a footer line if needed.
|
|
10
|
+
5. **Active voice, second person.** "You choose the fabric. We cut it to your size."
|
|
11
|
+
6. **Vary sentence length.** Mix a short sentence with a longer one. Do not start three sentences the same way.
|
|
12
|
+
7. **No rule of three by reflex.** Do not list three adjectives in every line ("fast, simple and secure").
|
|
13
|
+
8. **Buttons say the action:** "Book a table", "Shop coats", "See the work", "Start free trial". Never "Learn more" twice on one page, never "Click here".
|
|
14
|
+
9. **Honest numbers only.** If you do not know a real figure, do not invent a statistic. Use a fact the brand can stand behind or leave it out.
|
|
15
|
+
10. **Names that sound real.** Products, dishes and projects get proper names ("The Harlow coat", "Grilled sea bream, fennel, lemon"). People in testimonials need a first name, a last initial and a real-sounding context ("Ana R., Lisbon"), or use a press quote with the publication name only if the user provided it.
|
|
16
|
+
|
|
17
|
+
## Words and phrases to avoid
|
|
18
|
+
elevate, unlock, unleash, seamless, seamlessly, effortless, revolutionize, game-changer, cutting-edge, next-level, world-class, best-in-class, state-of-the-art, robust, leverage, empower, harness, delve, embark, journey (for a purchase), realm, tapestry, testament, landscape (non-literal), in today's fast-paced world, look no further, whether you're... or..., not just X but Y, it's not about X it's about Y, take it to the next level, designed with you in mind, crafted with passion, experience the difference, your one-stop shop, dive in, discover the magic, we've got you covered, ever-evolving, holistic, synergy, curated (more than once), bespoke (unless it is truly made to order), premium (do not call yourself premium; show it).
|
|
19
|
+
|
|
20
|
+
## Before and after
|
|
21
|
+
| Generic | Human |
|
|
22
|
+
| --- | --- |
|
|
23
|
+
| Elevate your style with our curated collection of timeless pieces. | Wool coats, linen shirts and knitwear, cut in Porto. |
|
|
24
|
+
| Unlock seamless productivity with AI-powered workflows. | Your inbox, sorted before you open it. |
|
|
25
|
+
| Experience culinary excellence like never before! | Fish from the morning boat, cooked over charcoal. |
|
|
26
|
+
| Capturing moments that last a lifetime — one frame at a time. | Landscape and architecture photography. Based in Oslo, working everywhere. |
|
|
27
|
+
| Join thousands of satisfied customers today! | 2,400 people wear our coats. Most come back for a second. |
|
|
28
|
+
| Our team of passionate experts is dedicated to... | We are six people in a small studio by the river. |
|
|
29
|
+
|
|
30
|
+
## Page microcopy
|
|
31
|
+
- Nav: 3 to 5 plain words ("Shop", "Journal", "Stores", "About").
|
|
32
|
+
- Hero subline: one sentence, 12 to 22 words, about the thing itself.
|
|
33
|
+
- Section intros: one short sentence. Let images and lists do the rest.
|
|
34
|
+
- Forms: labels above fields, helpful placeholders ("you@example.com"), errors that say what to do ("Enter a date after today").
|
|
35
|
+
- Empty and error states: say what happened and what to do next, without apologising three times.
|
|
36
|
+
- Footer: address or city, contact, a few useful links, legal, a calm sign-off line.
|
|
37
|
+
|
|
38
|
+
## Final pass (do this every time)
|
|
39
|
+
Search your copy for: `—`, `–`, `--`, `__`, `!`, `✨`, "elevate", "seamless", "unlock", "journey", "experience the". Rewrite every hit. Read each headline out loud; if it sounds like an ad, make it plainer.
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
# Art directions
|
|
2
|
+
|
|
3
|
+
Pick one. Copy it exactly: palette, fonts, radius, image style, signature move. Every palette is flat (no gradients) and passes contrast for body text.
|
|
4
|
+
|
|
5
|
+
| Token | Meaning |
|
|
6
|
+
| --- | --- |
|
|
7
|
+
| `bg` | Page background |
|
|
8
|
+
| `surface` | Cards, panels, alternate sections |
|
|
9
|
+
| `ink` | Headings and body text |
|
|
10
|
+
| `muted` | Secondary text, captions |
|
|
11
|
+
| `line` | 1px borders and rules |
|
|
12
|
+
| `accent` | Primary button and one or two marks |
|
|
13
|
+
| `on-accent` | Text on the accent |
|
|
14
|
+
|
|
15
|
+
## 1. Atelier
|
|
16
|
+
Best for: fashion, clothing, leather goods, perfume, luxury retail.
|
|
17
|
+
- Palette: bg `#F3F0EA`, surface `#E9E4DA`, ink `#161513`, muted `#6F6A61`, line `#D8D1C4`, accent `#161513`, on-accent `#F3F0EA`.
|
|
18
|
+
- Fonts: display **Bodoni Moda** 400 (italic allowed for one word only in the whole page), text **Hanken Grotesk** 400/500.
|
|
19
|
+
- Radius 0. Buttons: square, black fill, uppercase small text with 0.12em tracking.
|
|
20
|
+
- Images: soft daylight, neutral clothes on plain walls, 4:5 portrait crops.
|
|
21
|
+
- Signature: a giant wordmark (15vw) across the footer; product grid with no borders, just image, name and price.
|
|
22
|
+
|
|
23
|
+
## 2. Noir Gallery
|
|
24
|
+
Best for: photographers, artists, film, architecture portfolios.
|
|
25
|
+
- Palette: bg `#0F0F0E`, surface `#181816`, ink `#ECE8E1`, muted `#8E8A82`, line `#2B2A27`, accent `#ECE8E1`, on-accent `#0F0F0E`.
|
|
26
|
+
- Fonts: display **Instrument Serif** 400, text **Familjen Grotesk** 400/500.
|
|
27
|
+
- Radius 0 to 2px. Buttons: outlined ink, fill on hover.
|
|
28
|
+
- Images: full-bleed, edge to edge, captions in small text under the image.
|
|
29
|
+
- Signature: an index list of projects with large serif titles and year on the right; image appears on hover (desktop) or inline (phone).
|
|
30
|
+
|
|
31
|
+
## 3. Stone and Linen
|
|
32
|
+
Best for: architects, interior designers, hotels, real estate, furniture.
|
|
33
|
+
- Palette: bg `#ECE9E2`, surface `#E2DED4`, ink `#23211D`, muted `#6C675E`, line `#CEC8BB`, accent `#4C5A3B`, on-accent `#F4F2EC`.
|
|
34
|
+
- Fonts: display **Cormorant Garamond** 500, text **Manrope** 400/500.
|
|
35
|
+
- Radius 2px. Buttons: moss fill, small caps text.
|
|
36
|
+
- Images: interiors in natural light, materials close up, 3:2 crops.
|
|
37
|
+
- Signature: large split sections, image 7 columns and text 5, alternating sides.
|
|
38
|
+
|
|
39
|
+
## 4. Harbour
|
|
40
|
+
Best for: restaurants, seafood, wine bars, wellness retreats, travel.
|
|
41
|
+
- Palette: bg `#F1EFEA`, surface `#E6E3DC`, ink `#14212A`, muted `#5B6870`, line `#D2D2CC`, accent `#163E4E`, on-accent `#F1EFEA`.
|
|
42
|
+
- Fonts: display **Fraunces** 400 (optical size on), text **Figtree** 400/500.
|
|
43
|
+
- Radius 4px. Buttons: deep teal fill.
|
|
44
|
+
- Images: warm food on dark tables, candle light, people at a distance.
|
|
45
|
+
- Signature: a menu set like a printed card (two columns, dotted leaders between dish and price).
|
|
46
|
+
|
|
47
|
+
## 5. Swiss Precision
|
|
48
|
+
Best for: fintech, software, developer tools, B2B, consultancies.
|
|
49
|
+
- Palette: bg `#F7F7F5`, surface `#FFFFFF`, ink `#0C0C0D`, muted `#5E5E64`, line `#E2E2DF`, accent `#2142D9`, on-accent `#FFFFFF`.
|
|
50
|
+
- Fonts: **Schibsted Grotesk** for everything (500 display, 400 text).
|
|
51
|
+
- Radius 6px. Buttons: blue fill, compact.
|
|
52
|
+
- Images: real product screenshots in thin device frames, or none.
|
|
53
|
+
- Signature: a strict 12 column grid made visible by hairline rules; numbers set large in tabular figures.
|
|
54
|
+
|
|
55
|
+
## 6. Midnight Ink
|
|
56
|
+
Best for: premium AI products, audio, automotive, night brands.
|
|
57
|
+
- Palette: bg `#0D1014`, surface `#141920`, ink `#E7EBEF`, muted `#8B95A1`, line `#232A33`, accent `#C8B27A` (muted brass), on-accent `#0D1014`.
|
|
58
|
+
- Fonts: display **Newsreader** 400, text **Instrument Sans** 400/500.
|
|
59
|
+
- Radius 8px. Buttons: brass fill, small.
|
|
60
|
+
- Images: product in low light, strong single light source.
|
|
61
|
+
- Signature: one slow full-screen product image section; everything else minimal.
|
|
62
|
+
|
|
63
|
+
## 7. Bold Editorial
|
|
64
|
+
Best for: agencies, studios, magazines, events, music.
|
|
65
|
+
- Palette: bg `#F2F0EB`, surface `#E7E4DD`, ink `#111111`, muted `#5F5C57`, line `#111111`, accent `#D3321F`, on-accent `#FFFFFF`.
|
|
66
|
+
- Fonts: display **Archivo** 800 (condensed width if available), text **Archivo** 400.
|
|
67
|
+
- Radius 0. Buttons: red fill, heavy text.
|
|
68
|
+
- Images: black and white photography with one colour image as contrast.
|
|
69
|
+
- Signature: oversized headlines that run edge to edge, thick 2px black rules between sections.
|
|
70
|
+
|
|
71
|
+
## 8. Champagne
|
|
72
|
+
Best for: jewellery, beauty, skincare, weddings, boutique hotels.
|
|
73
|
+
- Palette: bg `#FAF7F2`, surface `#F2ECE3`, ink `#1E1A17`, muted `#7A7068`, line `#E6DDD1`, accent `#9C7E4F`, on-accent `#FFFFFF`.
|
|
74
|
+
- Fonts: display **Italiana** 400 (or **Cormorant Garamond** 400), text **Jost** 300/400.
|
|
75
|
+
- Radius: pills for buttons, 0 for images.
|
|
76
|
+
- Images: close-ups of product and skin, soft shadows, lots of negative space.
|
|
77
|
+
- Signature: centered, slow vertical rhythm with narrow text columns (max 34rem) and very large margins.
|
|
78
|
+
|
|
79
|
+
## Making your own direction
|
|
80
|
+
1. Choose a background off-white or soft black. Choose an ink 85 to 90% darker or lighter than it.
|
|
81
|
+
2. Derive `surface` (3 to 5% darker or lighter than bg), `muted` (about 55% mix of ink and bg) and `line` (about 15% mix).
|
|
82
|
+
3. Pick one accent from the brand's world (a leather brown, a sea teal, an olive, a lacquer red). Avoid default purple and electric blue.
|
|
83
|
+
4. Pick one display face and one text face from the lists in `taste.md`.
|
|
84
|
+
5. Decide radius (0, 4 or 8px) and keep it everywhere. Decide the one signature move.
|
|
85
|
+
6. Check contrast: ink on bg and on-accent on accent must be 4.5:1 or more.
|
|
86
|
+
|
|
87
|
+
## Tokens template (Tailwind CSS v4)
|
|
88
|
+
```css
|
|
89
|
+
@import url("https://fonts.googleapis.com/css2?family=Bodoni+Moda:ital,wght@0,400;1,400&family=Hanken+Grotesk:wght@400;500&display=swap");
|
|
90
|
+
@import "tailwindcss";
|
|
91
|
+
|
|
92
|
+
:root {
|
|
93
|
+
--bg: #F3F0EA; --surface: #E9E4DA; --ink: #161513; --muted: #6F6A61;
|
|
94
|
+
--line: #D8D1C4; --accent: #161513; --on-accent: #F3F0EA;
|
|
95
|
+
--font-display: "Bodoni Moda", Georgia, serif;
|
|
96
|
+
--font-text: "Hanken Grotesk", system-ui, sans-serif;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
@theme inline {
|
|
100
|
+
--color-bg: var(--bg); --color-surface: var(--surface); --color-ink: var(--ink);
|
|
101
|
+
--color-muted: var(--muted); --color-line: var(--line);
|
|
102
|
+
--color-accent: var(--accent); --color-on-accent: var(--on-accent);
|
|
103
|
+
--font-display: var(--font-display); --font-text: var(--font-text);
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
html { background: var(--bg); color: var(--ink); font-family: var(--font-text); -webkit-font-smoothing: antialiased; }
|
|
107
|
+
h1, h2, h3 { font-family: var(--font-display); font-weight: 400; letter-spacing: -0.02em; line-height: 1.05; }
|
|
108
|
+
```
|
|
109
|
+
Now use `bg-bg`, `bg-surface`, `text-ink`, `text-muted`, `border-line`, `bg-accent text-on-accent`, `font-display`.
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
# Premium mobile apps
|
|
2
|
+
|
|
3
|
+
The same taste rules apply, scaled to a hand. A premium app feels calm, fast and certain: big clear titles, one main action per screen, generous touch targets, motion that explains what changed.
|
|
4
|
+
|
|
5
|
+
Works for a mobile web app or PWA (React + Tailwind) and for native apps (React Native / Expo, Flutter, SwiftUI): the numbers below are the same.
|
|
6
|
+
|
|
7
|
+
## The system
|
|
8
|
+
- **Grid**: 4pt base. Screen margin 20px (16px on very small phones). Gaps 8, 12, 16, 24, 32.
|
|
9
|
+
- **Type** (sizes in px): large title 34 (bold or display face), title 22 to 28, headline 17 semibold, body 16 to 17, secondary 14 to 15, caption 12 to 13. Line height 1.3 to 1.4. Never below 12.
|
|
10
|
+
- **Colour**: the same direction tokens as the website. Light and dark mode both designed, not inverted. Surfaces separate by a small tone shift, not shadows.
|
|
11
|
+
- **Radius**: pick one: 12px (cards), 16 to 20px (sheets), full (buttons and chips) and keep it.
|
|
12
|
+
- **Icons**: one icon set, 24px, 1.5 to 2px stroke, filled version only for the active tab.
|
|
13
|
+
- **Touch**: every target at least 44 by 44px (48 on Android). 8px between targets.
|
|
14
|
+
|
|
15
|
+
## Navigation
|
|
16
|
+
- **Tab bar**: 3 to 5 tabs, icon + short label, 56px plus the bottom safe area. Active tab in ink or accent, others muted. No floating gradient pills.
|
|
17
|
+
- **Top bar**: large title that collapses to a small centered title on scroll; back button on the left; at most two actions on the right.
|
|
18
|
+
- **Sheets**: for secondary tasks (filters, sharing, quick add). Grab handle, rounded top corners, dim the page behind with flat `bg-black/40`.
|
|
19
|
+
- **Primary action**: a full-width button pinned above the tab bar or at the bottom of the sheet, 52 to 56px tall.
|
|
20
|
+
|
|
21
|
+
## Screen blueprints
|
|
22
|
+
1. **Onboarding**: 3 screens max. Big image or simple illustration, one headline, one sentence, progress dots, "Continue" button, "Skip" text button. Ask for permissions only when the feature needs them, never on screen one.
|
|
23
|
+
2. **Sign in**: logo, one sentence, Sign in with Apple / Google buttons, email option below. Large inputs (52px), clear errors under the field.
|
|
24
|
+
3. **Home**: large title with a greeting or date, one hero card (today's thing), then a list or horizontal row of items. No more than three blocks above the fold.
|
|
25
|
+
4. **List**: rows 64 to 72px with leading image or icon, title, secondary line, trailing value or chevron. Hairline separators inset to the text. Swipe actions also available as buttons in the detail screen.
|
|
26
|
+
5. **Detail**: big media at the top (edge to edge), title, key facts as a short list, sticky bottom bar with the main action.
|
|
27
|
+
6. **Search**: field at the top that gets focus, recent searches, results grouped by type.
|
|
28
|
+
7. **Profile and settings**: grouped lists with section headers, toggles on the right, destructive actions last and in red text.
|
|
29
|
+
8. **Empty states**: a short line saying what will appear here and one button to start.
|
|
30
|
+
|
|
31
|
+
## Motion
|
|
32
|
+
- Screen pushes: slide 100% with a slight parallax of the previous screen, 300 to 350ms.
|
|
33
|
+
- Sheets: spring up (stiffness about 400, damping about 34); dismiss by dragging down.
|
|
34
|
+
- Press feedback: scale to 0.97 in 100ms, back on release. Light haptic on toggles and success (native).
|
|
35
|
+
- Lists: new items fade in, removed items collapse. No bouncing cards.
|
|
36
|
+
- Respect reduced motion: crossfades only.
|
|
37
|
+
|
|
38
|
+
## Mobile web app specifics
|
|
39
|
+
- `viewport-fit=cover` and safe-area padding on top and bottom bars (see `responsive-mobile.md`).
|
|
40
|
+
- Use `100dvh` for full-height screens; disable overscroll glow where it breaks the app feel (`overscroll-behavior: none` on the app shell).
|
|
41
|
+
- Inputs 16px or larger so iOS does not zoom. Correct `inputmode` and `autocomplete`.
|
|
42
|
+
- Make it installable: manifest with icons and `display: standalone`, theme colour matching the top bar.
|
|
43
|
+
|
|
44
|
+
## Tab bar blueprint (React + Tailwind)
|
|
45
|
+
```jsx
|
|
46
|
+
const tabs = [["Today", HomeIcon], ["Explore", CompassIcon], ["Library", BookIcon], ["Profile", UserIcon]];
|
|
47
|
+
<nav className="fixed inset-x-0 bottom-0 z-40 border-t border-line bg-bg/95 backdrop-blur-sm pb-[env(safe-area-inset-bottom)]">
|
|
48
|
+
<ul className="mx-auto grid max-w-md grid-cols-4">
|
|
49
|
+
{tabs.map(([label, Icon]) => {
|
|
50
|
+
const on = label === active;
|
|
51
|
+
return (
|
|
52
|
+
<li key={label}>
|
|
53
|
+
<button onClick={() => setActive(label)} aria-current={on ? "page" : undefined} className={`flex h-14 w-full flex-col items-center justify-center gap-1 text-[11px] ${on ? "text-ink" : "text-muted"}`}>
|
|
54
|
+
<Icon className="h-6 w-6" strokeWidth={on ? 2 : 1.5} />
|
|
55
|
+
{label}
|
|
56
|
+
</button>
|
|
57
|
+
</li>
|
|
58
|
+
);
|
|
59
|
+
})}
|
|
60
|
+
</ul>
|
|
61
|
+
</nav>
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
## App copy
|
|
65
|
+
Same rules as `copy.md`, shorter: titles of 1 to 3 words, buttons as verbs ("Start session", "Save", "Done"), confirmations that say what happened ("Saved to Library").
|