dreative 0.2.0 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/shared/design.js +1 -0
- package/package.json +1 -1
- package/skill/dreative/DESIGN.md +92 -1
- package/skill/dreative/SKILL.md +13 -2
- package/skill/dreative/skills/cinematic.md +9 -0
- package/skill/dreative/skills/immersive.md +4 -1
- package/skill/dreative/skills/interaction.md +2 -0
- package/skill/dreative/skills/motion.md +10 -0
- package/skill/dreative/skills/refined.md +99 -0
package/dist/shared/design.js
CHANGED
|
@@ -6,6 +6,7 @@ const SKILL_SIGNATURES = {
|
|
|
6
6
|
interaction: /\b(micro[- ]?interaction|hover (effect|state)s?|cursor|magnetic|tilt|spotlight|glow|ripple|tactile|interactive|draggable)\b/i,
|
|
7
7
|
immersive: /\b(immersive|award[- ]?(site|winning)|awwwards|spatial( (transition|nav(igation)?))?|scene[- ]?based|world|page[- ]transitions?|camera (move|travel|path)|preloader|scroll (journey|story|as travel)|explorable|experience site|epic\.net)\b/i,
|
|
8
8
|
cinematic: /\b(cinematic|experiential|unseen\.co|fluid (sim(ulation)?|distortion)|gpgpu|drag[- ]to[- ]explore|click ?(&|and) ?hold|film grain|graded|velocity[- ]reactive|sound design|ambient (audio|sound))\b/i,
|
|
9
|
+
refined: /\b(clean (and )?(modern|professional)|modern clean|business (site|website|use)|corporate|professional look|premium (minimal|clean)|dtc|d2c|e[- ]?commerce|ecommerce|shopify|maswitzerland|lovvelavva|not (too )?(flashy|animated)|calm|understated)\b/i,
|
|
9
10
|
};
|
|
10
11
|
function detectSkills(texts) {
|
|
11
12
|
const hay = texts.filter(Boolean).join(" \n ");
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "dreative",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.0",
|
|
4
4
|
"description": "Layout-first visual editor skill for coding CLIs: extract your app's UI into editable wireframes, tweak with drag-drop + ref images, then the agent applies the diff back to your code.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
package/skill/dreative/DESIGN.md
CHANGED
|
@@ -329,7 +329,9 @@ A redesign request has a depth, and styling is only the shallowest rung. When th
|
|
|
329
329
|
user asks for meaningful change ("redesign", "make it modern", "make it look like
|
|
330
330
|
<reference site>", "change it entirely") and the depth is ambiguous, present this
|
|
331
331
|
ladder as explicit options (one short question, plain labels) and wait for the
|
|
332
|
-
answer — do NOT silently default to the shallowest rung
|
|
332
|
+
answer — do NOT silently default to the shallowest rung. Bundle the specialist
|
|
333
|
+
skill picker (SKILL.md) into the same question so the user answers depth and
|
|
334
|
+
treatments in one pass:
|
|
333
335
|
|
|
334
336
|
1. **Restyle** — tokens only: color, type, spacing, radius, shadows, motion
|
|
335
337
|
polish. Markup and structure untouched. Right for "refresh the look".
|
|
@@ -385,3 +387,92 @@ the output is not done.
|
|
|
385
387
|
14. Every block id from the layout appears as `data-dreative-id` (design-page only).
|
|
386
388
|
15. Dark mode (when in scope): semantic-token swap, surface-lightness depth,
|
|
387
389
|
desaturated accents, tested both modes.
|
|
390
|
+
|
|
391
|
+
## 13. Mobile & touch adaptation (how ambitious effects degrade)
|
|
392
|
+
|
|
393
|
+
Ambitious designs die on phones first. Every effect gets an explicit mobile
|
|
394
|
+
strategy DECIDED AT DESIGN TIME, not patched after. The rule of thumb: touch
|
|
395
|
+
devices get a *different good design*, never a broken half-version of the
|
|
396
|
+
desktop one.
|
|
397
|
+
|
|
398
|
+
**Pointer effects** (cursor followers, magnetic pull, spotlight, tilt, hover
|
|
399
|
+
reveals): gate ALL of them behind `@media (hover: hover) and (pointer: fine)`.
|
|
400
|
+
On touch, whatever hover revealed must be visible by default or reachable by
|
|
401
|
+
tap — never lost. Custom cursors simply don't exist on touch; don't ship their
|
|
402
|
+
DOM/listeners there.
|
|
403
|
+
|
|
404
|
+
**Pinned/scrubbed sections**: pinning is fragile on mobile (URL-bar resize
|
|
405
|
+
fires viewport changes mid-pin; iOS momentum scroll skips scrub frames).
|
|
406
|
+
Strategies in preference order: (1) keep the pin but shorten it (≤ 1.5
|
|
407
|
+
viewports) and drive it with `position: sticky`, never JS pinning; (2) unpin —
|
|
408
|
+
the same content as stacked sections with simple in-view reveals;
|
|
409
|
+
(3) `ScrollTrigger.matchMedia()` / a `matchMedia` branch that swaps the whole
|
|
410
|
+
choreography. Never let a desktop pin length ride on a phone.
|
|
411
|
+
|
|
412
|
+
**Parallax & depth layers**: halve the differential on small screens (8-15% →
|
|
413
|
+
4-7%) or drop to zero; small viewports make parallax read as jitter. Layered
|
|
414
|
+
depth scenes collapse to 2 layers max.
|
|
415
|
+
|
|
416
|
+
**Drag-to-explore / spatial navigation**: on touch, drag conflicts with native
|
|
417
|
+
scroll. Either give the pannable surface a dedicated full-screen mode entered
|
|
418
|
+
by tap (with a visible close), or replace it with a swipeable carousel /
|
|
419
|
+
plain scrolling index. The conventional index route (immersive.md's escape
|
|
420
|
+
hatch) becomes the PRIMARY route on mobile, not the fallback.
|
|
421
|
+
|
|
422
|
+
**WebGL/canvas**: assume the phone GPU is 5-10× weaker and thermally throttled.
|
|
423
|
+
Tier at boot (`devicePixelRatio` capped at 2, sim resolution halved,
|
|
424
|
+
post-processing off) or swap the sim for a pre-rendered video loop / poster.
|
|
425
|
+
`deviceMemory`/first-dropped-frames checks pick the tier; a visible "reduce
|
|
426
|
+
effects" toggle when the brief allows.
|
|
427
|
+
|
|
428
|
+
**Layout & ergonomics floor** (extends checklist §12.12): tap targets ≥ 44px
|
|
429
|
+
with ≥ 8px gaps; primary actions in thumb reach (bottom half) on app-register
|
|
430
|
+
mobile; `100dvh` not `100vh`; no horizontal body scroll at 320px; type scale
|
|
431
|
+
clamps DOWN gracefully (hero ≥ 2rem, body stays ≥ 16px — iOS zooms inputs
|
|
432
|
+
under 16px); sticky navs shrink rather than stack; test the three widths 320 /
|
|
433
|
+
768 / 1280 mentally before responding.
|
|
434
|
+
|
|
435
|
+
**Motion budget on mobile**: entrance choreography total ≤ 600ms (vs 900ms
|
|
436
|
+
desktop), at most 1 scroll-driven sequence per page, marquees pause when
|
|
437
|
+
off-screen. Battery is a design constraint: continuous rAF loops must idle
|
|
438
|
+
when nothing animates.
|
|
439
|
+
|
|
440
|
+
## 14. Typography sourcing (kill the Inter-everywhere default)
|
|
441
|
+
|
|
442
|
+
The reflex-reject list (§3) says what NOT to reach for; this is where to reach
|
|
443
|
+
instead. All fonts below are free (Google Fonts or Fontshare/ITF). The
|
|
444
|
+
commercial fonts real award sites use — verified: unseen.co sets **Saol
|
|
445
|
+
Display Light/Italic + Neue Montreal**; unseen's Blossom lab sets **SangBleu
|
|
446
|
+
Serif + PP Neue Montreal**; capsul-in-pro sets **Messina Sans** — are the
|
|
447
|
+
targets; the pairings below are their honest free stand-ins, not lookalikes of
|
|
448
|
+
each other.
|
|
449
|
+
|
|
450
|
+
Per aesthetic register (display / body):
|
|
451
|
+
|
|
452
|
+
- **Cinematic & experimental** (unseen-like): light editorial serif with a
|
|
453
|
+
true italic for display — `Boska`, `Sentient`, or `Gelasio Light Italic` —
|
|
454
|
+
over a neutral grotesk body — `Switzer`, `Hanken Grotesk`. Mixing italic
|
|
455
|
+
serif words INTO a grotesk headline is the genre move (unseen does exactly
|
|
456
|
+
this). Mono microtype for HUD labels: `Fragment Mono` or `Martian Mono`.
|
|
457
|
+
- **Minimal / premium product**: one grotesk family carrying everything —
|
|
458
|
+
`General Sans`, `Switzer`, or `Schibsted Grotesk` in 3-4 weights. The
|
|
459
|
+
Neue Montreal / Messina Sans stand-in tier. Tight display tracking
|
|
460
|
+
(−0.02 to −0.04em), no second family.
|
|
461
|
+
- **Editorial / luxury**: `Zodiak` or `Besley` display over `Hanken Grotesk`
|
|
462
|
+
or `Switzer` body; small-caps eyebrows tracked +0.08em. (Reach here only
|
|
463
|
+
when §3's serif discipline is satisfied.)
|
|
464
|
+
- **Bold / brutalist / campaign**: `Clash Display` or `Cabinet Grotesk` (black
|
|
465
|
+
weights) display over `Switzer`/`General Sans` body; `Bricolage Grotesque`
|
|
466
|
+
when some warmth is wanted.
|
|
467
|
+
- **Playful / consumer** (lovvelavva-like DTC): `Cabinet Grotesk` or `Gambetta`
|
|
468
|
+
display, rounded moments via weight and spacing — NOT a rounded font —
|
|
469
|
+
over `Hanken Grotesk` body.
|
|
470
|
+
- **Corporate trust / clean business**: `Switzer` or system stack; Inter is
|
|
471
|
+
legitimate here (§3). Differentiate through scale contrast and spacing,
|
|
472
|
+
not font novelty.
|
|
473
|
+
|
|
474
|
+
Rules: still run §3's selection procedure — this list feeds step 3, it does
|
|
475
|
+
not replace the brand-voice reasoning. Self-host via Fontshare/google-webfonts
|
|
476
|
+
downloads (`font-display: swap`, preload the display weight only). Never ship
|
|
477
|
+
more than 2 families / ~5 weight files. If the brief names a commercial font
|
|
478
|
+
the project already licenses, use the real thing.
|
package/skill/dreative/SKILL.md
CHANGED
|
@@ -7,14 +7,25 @@ description: Frontend design skill + optional visual round-trip editor. Use for
|
|
|
7
7
|
|
|
8
8
|
You (the coding agent) are the intelligence. Dreative has **two modes**:
|
|
9
9
|
|
|
10
|
-
- **Mode A — Direct design (default).** The user asks you to design, redesign, restyle, animate, or build UI. Read `DESIGN.md` (and any specialist `skills/<name>.md` the work calls for — motion, 3d, interaction), then design/edit the real code directly. No server, no extraction, no wireframes. When you finish, add one closing note: *"Tip: run `dreative start` / say 'open dreative' if you want to tweak this visually — I'll extract the pages into an editable canvas."* That's the only place the editor should come up; never force the round-trip on a plain design request. **Depth first:** when the request implies more than a fresh coat of paint ("redesign", "change it entirely", "make it like <reference site>"), present DESIGN.md §11's transformation-depth ladder (restyle → re-layout → restructure → reimagine) as explicit options and let the user pick BEFORE designing; a confirmed restructure/reimagine means rebuilding markup, component trees, and routing for real — never just editing stylesheets on the old skeleton.
|
|
10
|
+
- **Mode A — Direct design (default).** The user asks you to design, redesign, restyle, animate, or build UI. Read `DESIGN.md` (and any specialist `skills/<name>.md` the work calls for — motion, 3d, interaction), then design/edit the real code directly. No server, no extraction, no wireframes. When you finish, add one closing note: *"Tip: run `dreative start` / say 'open dreative' if you want to tweak this visually — I'll extract the pages into an editable canvas."* That's the only place the editor should come up; never force the round-trip on a plain design request. **Depth first:** when the request implies more than a fresh coat of paint ("redesign", "change it entirely", "make it like <reference site>"), present DESIGN.md §11's transformation-depth ladder (restyle → re-layout → restructure → reimagine) as explicit options and let the user pick BEFORE designing; a confirmed restructure/reimagine means rebuilding markup, component trees, and routing for real — never just editing stylesheets on the old skeleton. **Skill picker:** in the same pre-design question (use the agent's structured question tool, e.g. AskUserQuestion, multi-select), offer the specialist skills with a one-line plain-language description each so the user chooses the treatments they want — recommend the ones the request obviously implies and mark them "(Recommended)":
|
|
11
|
+
- **motion** — scroll animations, staggered entrances, parallax, kinetic type
|
|
12
|
+
- **interaction** — micro-interactions: hover states, magnetic buttons, cursor effects, tactile feedback
|
|
13
|
+
- **3d** — WebGL / three.js scenes, shader backgrounds, 3D product showcases
|
|
14
|
+
- **immersive** — award-site feel: the page becomes a spatial world, scroll-as-journey, page transitions
|
|
15
|
+
- **cinematic** — dark, shader-graded experiential look: fluid/particle surfaces, drag-to-explore, sound
|
|
16
|
+
- **refined** — premium clean business look: whitespace, photography, calm minimal motion (the professional pole)
|
|
17
|
+
Plus a "none — plain design doctrine only" option. Skip the question only when the user already named the treatments or the request is trivially a restyle; read each chosen `skills/<name>.md` before designing.
|
|
11
18
|
- **Mode B — Visual round-trip (only when asked).** The user explicitly wants the visual editor ("open dreative", "let me edit visually"). Flow: **extract → baseline → serve requests → finish → apply**. Be token-frugal at every step: read only the files you need, never re-read the whole app, and keep JSON compact.
|
|
12
19
|
|
|
13
20
|
Everything below §0 describes Mode B; the design doctrine paragraphs apply to both modes.
|
|
14
21
|
|
|
15
22
|
**Design quality is a hard requirement.** `DESIGN.md` (same folder as this file) is the design doctrine. Read it ONCE before servicing the first `propose-skeletons`, `propose-variants`, `design-page`, or `edit-element` request, keep it in mind for all later ones, and run its pre-flight checklist (§12) before every respond. Requests may carry a `brief` object (aesthetic preset + vibe + dials set by the user in the UI); when present it is the user's explicit direction and overrides doctrine defaults. Before writing any `design-page` code, state (to yourself, one line) the register, the design read, and the signature element — if you cannot name all three, you are about to produce the generic default; stop and commit first.
|
|
16
23
|
|
|
17
|
-
**Specialist skills.** The `skills/` folder next to this file holds expert playbooks for advanced work: `motion.md` (animation & scroll choreography), `3d.md` (WebGL/three.js/shaders), `interaction.md` (micro-interactions & effect craft), `immersive.md` (award-site worlds, spatial page transitions, scroll-as-journey), `cinematic.md` (dark shader-graded experiential interfaces: fluid/particle surfaces, drag-to-explore, click & hold, sound design — opt-in aesthetic). All are universal: they apply directly to any codebase in Mode A; the editor is never required. When a request's `plan.skills` lists names, read each listed `skills/<name>.md` ONCE before writing code (then keep it in mind, like DESIGN.md); when `plan.sections[].skills` tags a section, that section gets that treatment (e.g. "this hero has 3d"). If the brief/prompt clearly calls for one of these but the plan missed it, read it anyway. If a listed file isn't installed, proceed on DESIGN.md alone and note it to the user (`dreative install-skill` installs all).
|
|
24
|
+
**Specialist skills.** The `skills/` folder next to this file holds expert playbooks for advanced work: `motion.md` (animation & scroll choreography), `3d.md` (WebGL/three.js/shaders), `interaction.md` (micro-interactions & effect craft), `immersive.md` (award-site worlds, spatial page transitions, scroll-as-journey), `cinematic.md` (dark shader-graded experiential interfaces: fluid/particle surfaces, drag-to-explore, click & hold, sound design — opt-in aesthetic), `refined.md` (premium clean business/DTC/e-commerce: restraint, photography, whitespace — the calm pole). All are universal: they apply directly to any codebase in Mode A; the editor is never required. When a request's `plan.skills` lists names, read each listed `skills/<name>.md` ONCE before writing code (then keep it in mind, like DESIGN.md); when `plan.sections[].skills` tags a section, that section gets that treatment (e.g. "this hero has 3d"). If the brief/prompt clearly calls for one of these but the plan missed it, read it anyway. If a listed file isn't installed, proceed on DESIGN.md alone and note it to the user (`dreative install-skill` installs all).
|
|
25
|
+
|
|
26
|
+
**References the user gives you.** If the user attaches screenshots/images, read them with your image tools and treat them as the visual target (extract palette, type feel, layout family, motion cues from any described behavior). If the user names reference URLs, fetch them (browser tools if available, else web fetch of the HTML — look at real script/font/class evidence, not just the text) and distill what specifically to borrow before designing; never guess at a named reference from memory alone when you can look.
|
|
27
|
+
|
|
28
|
+
**Self-critique pass (Mode A, required before declaring done).** Doctrine at write-time is weaker than judgment at review-time. After implementing a design: run the app and screenshot the result (browser tools / the project's dev server) at desktop AND ~390px mobile width, then grade the screenshots against this rubric — (1) would a stranger name the brand's register and audience from one glance? (2) does it pass DESIGN.md §2's slop tests *as rendered* (not as intended)? (3) is the signature element actually visible and working? (4) any overflow, contrast failure, unloaded font/image, or motion jank? (5) does mobile hold up per DESIGN.md §13? Fix what fails and re-check once. If you cannot screenshot (no browser available), say so explicitly and walk the rendered DOM/CSS mentally against the same rubric — never silently skip the pass.
|
|
18
29
|
|
|
19
30
|
## 0. Setup
|
|
20
31
|
|
|
@@ -150,6 +150,15 @@ All of 3d.md §7 and immersive.md §6, plus:
|
|
|
150
150
|
Branding 5…); butterfly/petal particles drift through; HUD = wordmark
|
|
151
151
|
top-left, Index/Projects/Contact top-right, globe "world" button bottom-center,
|
|
152
152
|
© year bottom-right. Heavy uniform film grain glues all of it together.
|
|
153
|
+
- **Single-flower lab page (verified on unseen.co/labs/blossom)**: the minimal
|
|
154
|
+
form of the genre — one WebGL subject (a blooming particle flower) on one
|
|
155
|
+
canvas, Lenis smooth scroll, headlines split into `overflow-hidden` line
|
|
156
|
+
masks (`splittext--line`) sliding up on arrival, and a two-family type system
|
|
157
|
+
(light serif with true italics — SangBleu-style — mixed into a neutral
|
|
158
|
+
grotesk). No drag, no sound, no HUD maximalism: one subject + line-mask type
|
|
159
|
+
+ smooth scroll already reads as the genre. Start here; add §2 gestures only
|
|
160
|
+
if the brief earns them. (unseen.co's own home additionally runs a
|
|
161
|
+
`webgl-rain` particle layer over the scene — weather as grade texture.)
|
|
153
162
|
- **Particle identity page**: brand mark as 50k particles that disperse on
|
|
154
163
|
pointer force and reform; sections change the formation target; scroll
|
|
155
164
|
velocity agitates; reduced-motion = the formed mark as a still.
|
|
@@ -30,7 +30,10 @@ intentional. Decide up front:
|
|
|
30
30
|
No metaphor = you'll produce disconnected effects. The metaphor decides what
|
|
31
31
|
transitions, camera moves, and layout make sense — everything below serves it.
|
|
32
32
|
- Immersive sites still need an **escape hatch**: visible menu with plain links,
|
|
33
|
-
working back button, deep-linkable routes. Lost visitors close tabs.
|
|
33
|
+
working back button, deep-linkable routes. Lost visitors close tabs. On touch
|
|
34
|
+
devices the escape hatch becomes the PRIMARY route (DESIGN.md §13): drag/
|
|
35
|
+
spatial navigation conflicts with native scroll, so mobile gets the index-list
|
|
36
|
+
world view or a swipe carousel, with the full world behind an explicit tap-in.
|
|
34
37
|
|
|
35
38
|
## 1. Architecture: one persistent stage
|
|
36
39
|
|
|
@@ -5,6 +5,8 @@ for hover effects, cursor work, tilt, glow, "make it feel alive/tactile/premium"
|
|
|
5
5
|
It EXTENDS DESIGN.md §6/§9/§10 — every ban there still stands (no hover-scale on
|
|
6
6
|
`<img>`, custom cursors only on explicit request, one marquee max). This skill is
|
|
7
7
|
about the last 5% of feel: small, physical, consistent responses to input.
|
|
8
|
+
DESIGN.md §13 governs the touch story: everything pointer-driven here is
|
|
9
|
+
fine-pointer-only, and whatever hover reveals must be reachable by tap.
|
|
8
10
|
If an effect needs different markup (wrappers, layers, split spans), follow
|
|
9
11
|
DESIGN.md §11's transformation-depth ladder — offer the restructure and, once
|
|
10
12
|
confirmed, change the structure rather than approximating the effect in CSS.
|
|
@@ -5,6 +5,8 @@ animation, parallax, scroll storytelling, kinetic type, or "cinematic" feel.
|
|
|
5
5
|
It EXTENDS DESIGN.md §6 (which still applies: 100/300/500 durations, ease-out
|
|
6
6
|
exponential curves, reduced-motion fallbacks, no scroll listeners, no bounce).
|
|
7
7
|
This file is about doing ambitious motion WELL, not about adding more of it.
|
|
8
|
+
Every effect here needs a mobile strategy per DESIGN.md §13 (shorter pins,
|
|
9
|
+
halved parallax, 600ms mobile entrance budget) — decide it at design time.
|
|
8
10
|
If the requested motion needs structure the current markup can't express (pinned
|
|
9
11
|
sections, split text, persistent stages), use DESIGN.md §11's transformation-depth
|
|
10
12
|
ladder: offer restructure as an option and, once confirmed, rebuild the markup —
|
|
@@ -127,6 +129,14 @@ tell. Instead:
|
|
|
127
129
|
~60-90px/s), masked edges with `mask-image: linear-gradient`.
|
|
128
130
|
- **Scrub showcase**: sticky canvas/image sequence, `useScroll` on the wrapper,
|
|
129
131
|
map progress to frame index / rotation; preload frames; ≤ 2.5 viewports tall.
|
|
132
|
+
- **Canvas product story** (capsul-in-pro.com's form): a single-product launch
|
|
133
|
+
page as one scroll-scrubbed narrative — the product renders on a full-page
|
|
134
|
+
canvas (image-sequence or WebGL) and scroll drives its assembly/rotation
|
|
135
|
+
while short copy beats fade in at fixed progress stops; the site ships as
|
|
136
|
+
one bundled app with explicit portrait/landscape variants (it gates on
|
|
137
|
+
orientation rather than half-working in both). Copy the shape: one subject,
|
|
138
|
+
one scrubbed timeline, copy anchored to progress ranges, per-orientation
|
|
139
|
+
choreography decided up front.
|
|
130
140
|
- **Text on a path** (verified on epic.net): a manifesto paragraph flows along a
|
|
131
141
|
curved SVG path (`<textPath>` or per-word transforms sampled from a curve) and
|
|
132
142
|
relaxes toward straight lines as scroll progress advances — the curve
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
# Dreative Specialist Skill — Refined Clean Business
|
|
2
|
+
|
|
3
|
+
Load this file when `plan.skills` includes `refined`, or the brief/prompt asks
|
|
4
|
+
for a "clean modern business site", premium-but-calm marketing, DTC/e-commerce
|
|
5
|
+
polish, "professional, not flashy", or names references like ch.maswitzerland.com
|
|
6
|
+
or lovvelavva.com. This is the OPPOSITE pole from immersive/cinematic: quality
|
|
7
|
+
expressed through restraint — spacing, photography, and type doing all the work,
|
|
8
|
+
with motion barely above zero. Most real client work lands here; treat it as a
|
|
9
|
+
craft discipline, not the absence of one.
|
|
10
|
+
|
|
11
|
+
It EXTENDS DESIGN.md (everything applies; this file tightens the dials). It does
|
|
12
|
+
NOT stack with `immersive`/`cinematic` — those are different registers. It pairs
|
|
13
|
+
well with a light dose of `interaction` (press states, underline draws) and the
|
|
14
|
+
first tier of `motion` (one hero sequence, 2-3 in-view reveals).
|
|
15
|
+
|
|
16
|
+
## 0. The register: expensive silence
|
|
17
|
+
|
|
18
|
+
What separates premium-clean from generic-clean is not any element — it's the
|
|
19
|
+
ratios:
|
|
20
|
+
|
|
21
|
+
- **Whitespace is the brand.** Section padding 96-160px desktop / 56-80px
|
|
22
|
+
mobile; content max-width 1200-1320px with WIDE outer gutters; one idea per
|
|
23
|
+
viewport. If a section feels empty, that's the look working — resist filling.
|
|
24
|
+
- **Photography carries the emotion.** Real product/lifestyle imagery, art-
|
|
25
|
+
directed to one consistent grade (one light temperature, one background
|
|
26
|
+
family). Full-bleed image sections alternate with contained text sections —
|
|
27
|
+
the rhythm image / text / image IS the page structure. Never decorate around
|
|
28
|
+
weak imagery; demand or generate better imagery instead.
|
|
29
|
+
- **Type does hierarchy, color stays out of the way.** Near-monochrome palette:
|
|
30
|
+
warm or cool neutral family + ONE accent used almost exclusively on the
|
|
31
|
+
primary CTA and links. Backgrounds shift between 2-3 tints of the neutral
|
|
32
|
+
(e.g. white / #f6f5f2 / #111) to separate sections without borders.
|
|
33
|
+
- **Motion whispers.** Motion dial effectively ≤ 4: fade-rise entrances
|
|
34
|
+
(300-400ms, once), a sticky nav that gains a hairline+blur, underline draws,
|
|
35
|
+
press states. No parallax beyond 4%, no pinning, no canvas. A single
|
|
36
|
+
restrained signature (a slow ken-burns on the hero image, or a marquee of
|
|
37
|
+
press logos) is the ceiling.
|
|
38
|
+
|
|
39
|
+
## 1. Page anatomy (marketing/DTC form)
|
|
40
|
+
|
|
41
|
+
The proven skeleton — vary the composition per DESIGN.md §5, not the order
|
|
42
|
+
logic:
|
|
43
|
+
|
|
44
|
+
1. **Hero**: one full-width image or split layout; headline ≤ 8 words stating
|
|
45
|
+
the value in plain language; one CTA. No feature bullets in the hero.
|
|
46
|
+
2. **Credibility strip**: press/client logos, real marks, grayscale or
|
|
47
|
+
single-tint (lovvelavva runs Forbes/Women's Health/Real Simple here —
|
|
48
|
+
this section converts and belongs high on DTC pages).
|
|
49
|
+
3. **Value sections** (2-4): alternating image/text, each making ONE claim
|
|
50
|
+
with 1-2 sentences of support. Icons only if custom-drawn; three-generic-
|
|
51
|
+
icon-cards is the tell this register must avoid most.
|
|
52
|
+
4. **Product/collection grid**: large images, generous gaps (24-32px), minimal
|
|
53
|
+
card chrome — image, name, price/one-liner; hover = image swap or subtle
|
|
54
|
+
zoom-crop INSIDE a fixed frame (no card growth).
|
|
55
|
+
5. **Social proof**: 1-3 real testimonials with names/photos, editorial layout
|
|
56
|
+
(big quote type), never a 3-card testimonial row.
|
|
57
|
+
6. **Closing CTA**: calm full-width section, one sentence, one button.
|
|
58
|
+
7. **Footer**: structured, generous, quiet — the footer's polish is a trust
|
|
59
|
+
signal in this register; give it real columns, legal, newsletter.
|
|
60
|
+
|
|
61
|
+
E-commerce specifics: sticky add-to-cart on product pages (mobile bottom bar),
|
|
62
|
+
price always visible, shipping/returns reassurance near the CTA, cart as a
|
|
63
|
+
slide-over drawer not a page.
|
|
64
|
+
|
|
65
|
+
## 2. The discovery-grid variant (cosmos.so-like)
|
|
66
|
+
|
|
67
|
+
For content/discovery products (galleries, moodboards, catalogs): near-zero
|
|
68
|
+
chrome around a masonry/justified image grid; dark or paper-white surface;
|
|
69
|
+
images at native aspect ratios (never uniform crops); hover = slight lift +
|
|
70
|
+
metadata fade-in on top of the image; infinite scroll with a sentinel loader;
|
|
71
|
+
the search/filter bar is the only persistent UI. The product IS the grid —
|
|
72
|
+
navigation, branding, and controls stay almost invisible until needed.
|
|
73
|
+
|
|
74
|
+
## 3. What "modern" means here (2024+, not 2016 flat)
|
|
75
|
+
|
|
76
|
+
- Hairline borders (1px, 8-12% alpha) instead of shadows for structure; the
|
|
77
|
+
2-3 stacked tinted shadows (interaction.md §3) reserved for genuinely
|
|
78
|
+
floating elements (dropdowns, drawers).
|
|
79
|
+
- Larger type than feels safe: body 17-18px on marketing pages, display
|
|
80
|
+
clamped 2.5-4.5rem, tight leading. Small timid type is the #1 dated tell.
|
|
81
|
+
- Radius system: one value family — either near-square (2-4px, editorial/
|
|
82
|
+
luxury) or soft (12-16px, DTC/consumer) — never mixed.
|
|
83
|
+
- Buttons: solid accent primary + quiet text-link secondary. Pill shape only
|
|
84
|
+
in the consumer/DTC variant. No outlined-button armies.
|
|
85
|
+
- Real `<img>`/`<picture>` with proper aspect-ratio boxes; no CSS-drawn
|
|
86
|
+
product mockups; `object-fit: cover` with art-directed focal points.
|
|
87
|
+
|
|
88
|
+
## 4. Guardrails
|
|
89
|
+
|
|
90
|
+
- If you're adding an effect to make a section interesting, the section's
|
|
91
|
+
content or imagery is the problem — fix that instead.
|
|
92
|
+
- No gradient meshes, no glassmorphism cards, no floating blob backgrounds,
|
|
93
|
+
no emoji in UI copy: all instantly cheapen this register.
|
|
94
|
+
- Accessibility floor is easy here — don't squander it: AA contrast on the
|
|
95
|
+
tinted neutrals (test the #767676-gray-on-white trap), visible focus,
|
|
96
|
+
semantic landmarks.
|
|
97
|
+
- Performance IS the aesthetic: LCP image preloaded, fonts ≤ 2 files,
|
|
98
|
+
zero animation libraries unless motion is actually used — a clean site
|
|
99
|
+
that loads instantly reads as more premium than any effect.
|