dreative 0.4.0 → 0.5.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.
@@ -1,232 +1,232 @@
1
- # Dreative Specialist Skill — Cinematic WebGL & Experiential Interfaces
2
-
3
- Load this file when `plan.skills` includes `cinematic`, or the brief/prompt asks
4
- for a dark cinematic shader-driven look, "sites like unseen.co", drag-to-explore
5
- navigation, click-and-hold interactions, fluid/particle distortion effects,
6
- sound design, or "experimental / experiential" interfaces. This is the genre's
7
- high-fashion end: fewer elements, extreme polish, the interface itself behaves
8
- like a graded film.
9
-
10
- It STACKS with `immersive.md` (world architecture — read it when routes/scenes
11
- are involved) and `3d.md` (shader craft). DESIGN.md still governs type and
12
- accessibility floors. It is universal — apply directly to any codebase; the
13
- Dreative editor is optional. This is an OPT-IN aesthetic: propose it only when
14
- the brief supports it; it is never the default answer to "make it nicer".
15
-
16
- ## 0. The register: cinematic restraint
17
-
18
- Where immersive.md builds a place, this genre builds a MOOD. Its rules:
19
-
20
- - **Atmosphere is the canvas.** Commit to ONE graded atmosphere and grade
21
- everything into it. Dark cinematic (near-black #0a0a0c-ish base, tinted, never
22
- pure #000, stage-light falloff on one subject) is the common form — but pale
23
- worlds are equally genre-valid: UNSEEN's actual site is a blush-pink flooded
24
- dream-room with prismatic dispersion on its arches and soft daylight. What
25
- makes it cinematic is not darkness but unity of light: one light temperature,
26
- one falloff logic, one grain, everything (DOM included) living inside it.
27
- - **Radical reduction.** Each view holds ONE visual subject + a few lines of
28
- type + numbered chrome. If a section needs three columns of content, it does
29
- not belong in this register — move it to a conventional subpage.
30
- - **Everything is graded.** One post-processing/color pass unifies DOM and
31
- canvas: film grain (3-6%), subtle vignette, bloom only on emissive accents,
32
- optional chromatic aberration at transition peaks ONLY (constant CA = broken
33
- monitor). The grade is one system — define it once, apply globally.
34
- - **Typography as credits.** Restrained scale (this genre whispers where
35
- immersive shouts): refined grotesk or editorial serif, generous tracking on
36
- small mono/small-caps labels, and the signature **numbered index** chrome —
37
- `01 Index`, `02 Projects`, coordinates, timestamps — laid out like a film
38
- slate. Big type appears sparingly and is often distorted by the shader layer
39
- as it passes (see §2).
40
-
41
- ## 1. The living surface (the genre's engine)
42
-
43
- The background is not decoration — it's a continuously-running simulation the
44
- whole interface sits on. One fullscreen canvas, one of these families:
45
-
46
- - **Fluid distortion** (the UNSEEN signature): GPGPU fluid sim or cheap
47
- velocity-buffer approximation; pointer movement injects velocity; the field
48
- distorts whatever sits under it — images, WebGL text copies of the headlines,
49
- the scene itself. Intensity tuned so idle = near-still, movement = silky wake.
50
- - **Particle field**: 10k-100k GPU particles (FBO/GPGPU, see 3d.md §5) forming
51
- a subject — a logo, a face, a landscape — that disperses and reforms on
52
- interaction or route change. Curl noise for drift; mouse as attractor/repulsor.
53
- - **Volumetric/raymarched fog + light**: a raymarched or layered-noise volume
54
- with one light source tracking the pointer or the active section.
55
-
56
- Rules: ONE simulation per site, palette fed from the page tokens, `uTime` slow
57
- (3d.md §4), sim pauses off-screen and on `document.hidden`, and pointer force is
58
- damped — the surface reacts like water, not like a cursor-following gimmick.
59
- Images/media on the page render INTO the canvas layer (texture planes synced to
60
- DOM rects — measure, don't guess) so the distortion can touch them; keep real
61
- DOM (invisible or fallback-visible) underneath for a11y/SEO/selection — the
62
- full media-plane pattern, video textures, and the wired fallback rule live in
63
- `media.md` §3. When a video-generation tool exists, the pre-rendered-loop
64
- budget path (§6) becomes first-class: generate the sim-like loop instead of
65
- building the GPGPU sim (media.md §1).
66
-
67
- ## 2. Interaction vocabulary
68
-
69
- The genre replaces "click around a document" with deliberate, weighty gestures.
70
- Pick 2-3, execute perfectly:
71
-
72
- - **Drag to explore**: the primary surface pans on drag (inertia + rubber-band
73
- edges, damped) across a spatial arrangement of works. Cursor label says
74
- "Drag"; a minimap/index shows position. Wheel/trackpad maps to the same pan.
75
- ALWAYS pair with a conventional index list (the numbered menu) — drag is the
76
- scenic route, never the only route.
77
- - **Click & hold**: press-and-hold to enter a project / reveal a layer — a ring
78
- or bar fills during the hold (400-700ms), releasing early cancels with a
79
- spring-back. Label it ("Hold"). Keyboard equivalent: Enter activates
80
- immediately — the hold is texture for pointer users, not a gate.
81
- - **Velocity-reactive media**: scroll/drag velocity feeds shader intensity —
82
- images stretch, RGB channels split for a beat, grain agitates — settling with
83
- damped decay. Read velocity from Lenis/`useScroll`; clamp hard: peak effect at
84
- a fast flick should still be legible.
85
- - **Cursor as instrument**: single dot that morphs into contextual labels
86
- ("Drag", "Hold", "Play", index numbers). In this genre the cursor may also
87
- cast light — the surface (§1) brightens around it. One cursor identity,
88
- fine-pointer devices only.
89
- - **Idle cinematography**: after ~10s idle the scene performs — slow camera
90
- drift, sim breathing, a highlight reel. Any input snaps back (damped, 300ms).
91
-
92
- ## 3. Sound design (optional layer, genre-native)
93
-
94
- The only web genre where audio is expected — still strictly opt-in:
95
-
96
- - Entry gate offers the choice up front ("Enter with sound / without") or an
97
- always-visible mute toggle in the HUD (animated equalizer bars = the
98
- convention). NEVER autoplay audio; browsers block it and users hate it.
99
- - One ambient loop (-30dB-ish, long crossfaded loop) + micro-SFX on primary
100
- interactions only (hover tick, hold-complete, transition whoosh). Web Audio
101
- API with a master gain; fade in/out over 400ms on toggle, duck during video.
102
- - Persist the choice (localStorage), default OFF on return visits unless
103
- enabled; respect `prefers-reduced-motion` as a proxy for "calm mode" — start
104
- muted there.
105
-
106
- ## 4. Composition & transitions in this register
107
-
108
- - Views compose like film frames: subject off-center (rule-of-thirds), type in
109
- the negative space, numbered label anchoring a corner. Symmetric centered
110
- compositions only for title-card moments.
111
- - Route transitions are CUTS and DISSOLVES driven by the surface: the sim
112
- swallows the view (fluid floods, particles disperse) → beat at full abstraction
113
- (~200ms, the surface alone) → next view condenses out of it. The simulation is
114
- the transition medium — no white flashes, no generic slide-wipes on top of it.
115
- - Section changes within a view: crossfade + parallax nudge, ≤ 500ms; let the
116
- surface do the drama, keep DOM motion quiet (this genre's DOM moves LESS than
117
- a normal site's — contrast is what reads as expensive).
118
- - The loader (immersive.md §2 rules apply) is minimal here: percentage numeral +
119
- the sim warming up behind it. The sim visibly "becoming ready" IS the loader.
120
-
121
- ## 5. Performance & accessibility (non-negotiable, hardest here)
122
-
123
- All of 3d.md §7 and immersive.md §6, plus:
124
-
125
- - GPGPU sims are the most expensive thing on the web: cap sim resolution
126
- (fluid ≤ 256², particles per device tier), halve on mobile or replace the sim
127
- with a pre-rendered video loop of it — visually near-identical, free to play.
128
- - Measure, don't assume: if frame time > 20ms for a sustained burst, degrade
129
- live (drop sim resolution → drop post-FX → static grade). Build the ladder in.
130
- - `prefers-reduced-motion`: sim frozen to one still frame (it's the grade's
131
- texture now), velocity effects off, hold-to-enter becomes click, idle
132
- cinematography off. The site must remain fully usable and still look graded.
133
- - Contrast discipline: dark register makes AA failures easy — body text ≥ 4.5:1
134
- against the DARKEST point of the animated surface behind it (test the worst
135
- frame, not the average); put text over a stabilized scrim when the sim is busy.
136
- - Every drag/hold/spatial interaction has a boring equivalent: real links in the
137
- numbered index, tab order through works, Enter to open. Screen readers get the
138
- DOM document; the canvas is `role="img"` with a scene description.
139
- - Battery/data respect: pause everything on `visibilitychange`, honor
140
- `prefers-reduced-data` by skipping the sim entirely (grade + posters only).
141
-
142
- ## 6. Recipes
143
-
144
- - **UNSEEN-style studio home** (verified on the live site): letter-cycling
145
- loader (the wordmark's letters flip one at a time over the studio's one-line
146
- bio) → entry gate ("Enter" pill + quieter "ENTER WITHOUT AUDIO" underneath) →
147
- a pastel 3D room half-flooded with reflective water; drag pans the view and
148
- reveals chrome/reflective 3D display type STANDING IN the scene (italic serif
149
- + grotesk mixed in one headline), mirrored in the water. Scrolling dollies the
150
- camera forward through the room into a bright gallery hall — hero and works
151
- index are one continuous camera journey, with the route updating mid-flight.
152
- Work cards render as sheets of paper floating in the space, subtly warped,
153
- with chromatic fringing at their edges; filter pills carry counts (All 20 /
154
- Branding 5…); butterfly/petal particles drift through; HUD = wordmark
155
- top-left, Index/Projects/Contact top-right, globe "world" button bottom-center,
156
- © year bottom-right. Heavy uniform film grain glues all of it together.
157
- - **Single-flower lab page (verified on unseen.co/labs/blossom)**: the minimal
158
- form of the genre — one WebGL subject (a blooming particle flower) on one
159
- canvas, Lenis smooth scroll, headlines split into `overflow-hidden` line
160
- masks (`splittext--line`) sliding up on arrival, and a two-family type system
161
- (light serif with true italics — SangBleu-style — mixed into a neutral
162
- grotesk). No drag, no sound, no HUD maximalism: one subject + line-mask type
163
- + smooth scroll already reads as the genre. Start here; add §2 gestures only
164
- if the brief earns them. (unseen.co's own home additionally runs a
165
- `webgl-rain` particle layer over the scene — weather as grade texture.)
166
- - **Particle identity page**: brand mark as 50k particles that disperse on
167
- pointer force and reform; sections change the formation target; scroll
168
- velocity agitates; reduced-motion = the formed mark as a still.
169
- - **Cinematic case study**: dark editorial page, media rendered through the
170
- distortion layer, velocity-reactive stretch on scroll, chapter numerals,
171
- one raymarched-light hero; DOM otherwise quiet and typographic.
172
- - **Budget version (no GPGPU)**: pre-rendered fluid/particle video loops as
173
- background + `mix-blend-mode` type, CSS grain, velocity-reactive transforms
174
- on real DOM, click-and-hold in JS only. 70% of the mood, runs on anything —
175
- the right call below motion dial 8 or on content-heavy sites.
176
-
177
- ## 6.5 The unseen.co replication blueprint (build order)
178
-
179
- When the brief is "make it like unseen.co" (or this genre at dial 9–10), build
180
- in THIS order — each layer works before the next starts. Do not attempt it as
181
- one monolithic rewrite; do not stop after step 2 and call it done.
182
-
183
- **Manifest:** `npm i gsap lenis three @react-three/fiber @react-three/drei
184
- @react-three/postprocessing` (React) or `gsap lenis three` (vanilla/OGL).
185
- Wire Lenis + ScrollTrigger per motion.md §8 first.
186
-
187
- **Layer stack (bottom → top):** persistent WebGL canvas (fixed, full-viewport)
188
- → real DOM content (the accessible document) → HUD chrome (fixed corners) →
189
- grain overlay → custom cursor. Each is its own component/layer mounted in the
190
- root layout, outside the router swap point (immersive.md §1).
191
-
192
- 1. **Smooth scroll + type system.** Lenis running, line-mask reveals on every
193
- heading (motion.md §8), the two-family type mix (grotesk + true-italic
194
- serif accents in one headline), numbered HUD chrome (`01 Index`…). The page
195
- should already feel 60% of the genre with zero WebGL.
196
- 2. **The living surface.** One canvas, one simulation family (§1). Start with
197
- the highest effort/impact ratio: a shader plane with fbm + domain-warp fed
198
- by palette uniforms and damped `uMouse` velocity (3d.md §4), or the
199
- pre-rendered-video budget path (§6). Grain overlay goes in now — it glues
200
- DOM and canvas into one graded image.
201
- 3. **Scroll = camera.** Tall scroll container drives a camera dolly / scene
202
- progress via damped scrub (immersive.md §4). Section copy floats in at
203
- progress stops. This is the "one continuous shot" that separates the genre
204
- from a parallax page.
205
- 4. **Media through the surface.** Sync DOM image/work-card rects to texture
206
- planes in the canvas (measure with `getBoundingClientRect` on resize +
207
- scroll, don't guess) so hover/velocity distortion touches them; keep the
208
- real DOM images underneath for a11y/fallback (§1). Velocity-reactive
209
- stretch/RGB-split on scroll flicks, hard-clamped (§2).
210
- 5. **Gestures + cursor.** Pick 2–3 from §2 (drag-to-explore, click & hold,
211
- cursor-as-instrument), each labeled, each with a keyboard/boring
212
- equivalent. Custom cursor: one dot, damped follow, contextual labels.
213
- 6. **Doors and passages.** Preloader (real progress, choreographed reveal into
214
- the idling scene — immersive.md §2), entry gate if sound ships (§3), route
215
- transitions driven by the simulation (§4).
216
- 7. **The floor.** Reduced-motion still frame, degrade ladder, contrast scrim,
217
- mobile strategy (poster or halved sim), pause on hidden (§5).
218
-
219
- Ship checkpoint after every layer: run it, screenshot it, READ THE CONSOLE,
220
- click through it (ux.md §7's audit on the touched surface), keep it working.
221
- A failed step 4 must not take down steps 1–3 — each layer's fallback is the
222
- previous layer, and the runtime gate (DESIGN.md §12.18) runs on the final
223
- stack, not just the last layer added.
224
-
225
- ## 7. Changing an existing site into this
226
-
227
- Same rule as immersive.md §8: this register cannot be CSS'd onto a conventional
228
- page — it needs the canvas surface, the reduced composition, and usually a
229
- content edit (views hold less). Use DESIGN.md §11's transformation-depth ladder;
230
- this genre is almost always rung 3 (Restructure) or 4 (Reimagine). Offer the
231
- ladder, get the user's pick, then rebuild for real — and offer the budget recipe
232
- (§6) as the rung-2 alternative for users who want the mood without the rebuild.
1
+ # Dreative Specialist Skill — Cinematic WebGL & Experiential Interfaces
2
+
3
+ Load this file when `plan.skills` includes `cinematic`, or the brief/prompt asks
4
+ for a dark cinematic shader-driven look, "sites like unseen.co", drag-to-explore
5
+ navigation, click-and-hold interactions, fluid/particle distortion effects,
6
+ sound design, or "experimental / experiential" interfaces. This is the genre's
7
+ high-fashion end: fewer elements, extreme polish, the interface itself behaves
8
+ like a graded film.
9
+
10
+ It STACKS with `immersive.md` (world architecture — read it when routes/scenes
11
+ are involved) and `3d.md` (shader craft). DESIGN.md still governs type and
12
+ accessibility floors. It is universal — apply directly to any codebase; the
13
+ Dreative editor is optional. This is an OPT-IN aesthetic: propose it only when
14
+ the brief supports it; it is never the default answer to "make it nicer".
15
+
16
+ ## 0. The register: cinematic restraint
17
+
18
+ Where immersive.md builds a place, this genre builds a MOOD. Its rules:
19
+
20
+ - **Atmosphere is the canvas.** Commit to ONE graded atmosphere and grade
21
+ everything into it. Dark cinematic (near-black #0a0a0c-ish base, tinted, never
22
+ pure #000, stage-light falloff on one subject) is the common form — but pale
23
+ worlds are equally genre-valid: UNSEEN's actual site is a blush-pink flooded
24
+ dream-room with prismatic dispersion on its arches and soft daylight. What
25
+ makes it cinematic is not darkness but unity of light: one light temperature,
26
+ one falloff logic, one grain, everything (DOM included) living inside it.
27
+ - **Radical reduction.** Each view holds ONE visual subject + a few lines of
28
+ type + numbered chrome. If a section needs three columns of content, it does
29
+ not belong in this register — move it to a conventional subpage.
30
+ - **Everything is graded.** One post-processing/color pass unifies DOM and
31
+ canvas: film grain (3-6%), subtle vignette, bloom only on emissive accents,
32
+ optional chromatic aberration at transition peaks ONLY (constant CA = broken
33
+ monitor). The grade is one system — define it once, apply globally.
34
+ - **Typography as credits.** Restrained scale (this genre whispers where
35
+ immersive shouts): refined grotesk or editorial serif, generous tracking on
36
+ small mono/small-caps labels, and the signature **numbered index** chrome —
37
+ `01 Index`, `02 Projects`, coordinates, timestamps — laid out like a film
38
+ slate. Big type appears sparingly and is often distorted by the shader layer
39
+ as it passes (see §2).
40
+
41
+ ## 1. The living surface (the genre's engine)
42
+
43
+ The background is not decoration — it's a continuously-running simulation the
44
+ whole interface sits on. One fullscreen canvas, one of these families:
45
+
46
+ - **Fluid distortion** (the UNSEEN signature): GPGPU fluid sim or cheap
47
+ velocity-buffer approximation; pointer movement injects velocity; the field
48
+ distorts whatever sits under it — images, WebGL text copies of the headlines,
49
+ the scene itself. Intensity tuned so idle = near-still, movement = silky wake.
50
+ - **Particle field**: 10k-100k GPU particles (FBO/GPGPU, see 3d.md §5) forming
51
+ a subject — a logo, a face, a landscape — that disperses and reforms on
52
+ interaction or route change. Curl noise for drift; mouse as attractor/repulsor.
53
+ - **Volumetric/raymarched fog + light**: a raymarched or layered-noise volume
54
+ with one light source tracking the pointer or the active section.
55
+
56
+ Rules: ONE simulation per site, palette fed from the page tokens, `uTime` slow
57
+ (3d.md §4), sim pauses off-screen and on `document.hidden`, and pointer force is
58
+ damped — the surface reacts like water, not like a cursor-following gimmick.
59
+ Images/media on the page render INTO the canvas layer (texture planes synced to
60
+ DOM rects — measure, don't guess) so the distortion can touch them; keep real
61
+ DOM (invisible or fallback-visible) underneath for a11y/SEO/selection — the
62
+ full media-plane pattern, video textures, and the wired fallback rule live in
63
+ `media.md` §3. When a video-generation tool exists, the pre-rendered-loop
64
+ budget path (§6) becomes first-class: generate the sim-like loop instead of
65
+ building the GPGPU sim (media.md §1).
66
+
67
+ ## 2. Interaction vocabulary
68
+
69
+ The genre replaces "click around a document" with deliberate, weighty gestures.
70
+ Pick 2-3, execute perfectly:
71
+
72
+ - **Drag to explore**: the primary surface pans on drag (inertia + rubber-band
73
+ edges, damped) across a spatial arrangement of works. Cursor label says
74
+ "Drag"; a minimap/index shows position. Wheel/trackpad maps to the same pan.
75
+ ALWAYS pair with a conventional index list (the numbered menu) — drag is the
76
+ scenic route, never the only route.
77
+ - **Click & hold**: press-and-hold to enter a project / reveal a layer — a ring
78
+ or bar fills during the hold (400-700ms), releasing early cancels with a
79
+ spring-back. Label it ("Hold"). Keyboard equivalent: Enter activates
80
+ immediately — the hold is texture for pointer users, not a gate.
81
+ - **Velocity-reactive media**: scroll/drag velocity feeds shader intensity —
82
+ images stretch, RGB channels split for a beat, grain agitates — settling with
83
+ damped decay. Read velocity from Lenis/`useScroll`; clamp hard: peak effect at
84
+ a fast flick should still be legible.
85
+ - **Cursor as instrument**: single dot that morphs into contextual labels
86
+ ("Drag", "Hold", "Play", index numbers). In this genre the cursor may also
87
+ cast light — the surface (§1) brightens around it. One cursor identity,
88
+ fine-pointer devices only.
89
+ - **Idle cinematography**: after ~10s idle the scene performs — slow camera
90
+ drift, sim breathing, a highlight reel. Any input snaps back (damped, 300ms).
91
+
92
+ ## 3. Sound design (optional layer, genre-native)
93
+
94
+ The only web genre where audio is expected — still strictly opt-in:
95
+
96
+ - Entry gate offers the choice up front ("Enter with sound / without") or an
97
+ always-visible mute toggle in the HUD (animated equalizer bars = the
98
+ convention). NEVER autoplay audio; browsers block it and users hate it.
99
+ - One ambient loop (-30dB-ish, long crossfaded loop) + micro-SFX on primary
100
+ interactions only (hover tick, hold-complete, transition whoosh). Web Audio
101
+ API with a master gain; fade in/out over 400ms on toggle, duck during video.
102
+ - Persist the choice (localStorage), default OFF on return visits unless
103
+ enabled; respect `prefers-reduced-motion` as a proxy for "calm mode" — start
104
+ muted there.
105
+
106
+ ## 4. Composition & transitions in this register
107
+
108
+ - Views compose like film frames: subject off-center (rule-of-thirds), type in
109
+ the negative space, numbered label anchoring a corner. Symmetric centered
110
+ compositions only for title-card moments.
111
+ - Route transitions are CUTS and DISSOLVES driven by the surface: the sim
112
+ swallows the view (fluid floods, particles disperse) → beat at full abstraction
113
+ (~200ms, the surface alone) → next view condenses out of it. The simulation is
114
+ the transition medium — no white flashes, no generic slide-wipes on top of it.
115
+ - Section changes within a view: crossfade + parallax nudge, ≤ 500ms; let the
116
+ surface do the drama, keep DOM motion quiet (this genre's DOM moves LESS than
117
+ a normal site's — contrast is what reads as expensive).
118
+ - The loader (immersive.md §2 rules apply) is minimal here: percentage numeral +
119
+ the sim warming up behind it. The sim visibly "becoming ready" IS the loader.
120
+
121
+ ## 5. Performance & accessibility (non-negotiable, hardest here)
122
+
123
+ All of 3d.md §7 and immersive.md §6, plus:
124
+
125
+ - GPGPU sims are the most expensive thing on the web: cap sim resolution
126
+ (fluid ≤ 256², particles per device tier), halve on mobile or replace the sim
127
+ with a pre-rendered video loop of it — visually near-identical, free to play.
128
+ - Measure, don't assume: if frame time > 20ms for a sustained burst, degrade
129
+ live (drop sim resolution → drop post-FX → static grade). Build the ladder in.
130
+ - `prefers-reduced-motion`: sim frozen to one still frame (it's the grade's
131
+ texture now), velocity effects off, hold-to-enter becomes click, idle
132
+ cinematography off. The site must remain fully usable and still look graded.
133
+ - Contrast discipline: dark register makes AA failures easy — body text ≥ 4.5:1
134
+ against the DARKEST point of the animated surface behind it (test the worst
135
+ frame, not the average); put text over a stabilized scrim when the sim is busy.
136
+ - Every drag/hold/spatial interaction has a boring equivalent: real links in the
137
+ numbered index, tab order through works, Enter to open. Screen readers get the
138
+ DOM document; the canvas is `role="img"` with a scene description.
139
+ - Battery/data respect: pause everything on `visibilitychange`, honor
140
+ `prefers-reduced-data` by skipping the sim entirely (grade + posters only).
141
+
142
+ ## 6. Recipes
143
+
144
+ - **UNSEEN-style studio home** (verified on the live site): letter-cycling
145
+ loader (the wordmark's letters flip one at a time over the studio's one-line
146
+ bio) → entry gate ("Enter" pill + quieter "ENTER WITHOUT AUDIO" underneath) →
147
+ a pastel 3D room half-flooded with reflective water; drag pans the view and
148
+ reveals chrome/reflective 3D display type STANDING IN the scene (italic serif
149
+ + grotesk mixed in one headline), mirrored in the water. Scrolling dollies the
150
+ camera forward through the room into a bright gallery hall — hero and works
151
+ index are one continuous camera journey, with the route updating mid-flight.
152
+ Work cards render as sheets of paper floating in the space, subtly warped,
153
+ with chromatic fringing at their edges; filter pills carry counts (All 20 /
154
+ Branding 5…); butterfly/petal particles drift through; HUD = wordmark
155
+ top-left, Index/Projects/Contact top-right, globe "world" button bottom-center,
156
+ © year bottom-right. Heavy uniform film grain glues all of it together.
157
+ - **Single-flower lab page (verified on unseen.co/labs/blossom)**: the minimal
158
+ form of the genre — one WebGL subject (a blooming particle flower) on one
159
+ canvas, Lenis smooth scroll, headlines split into `overflow-hidden` line
160
+ masks (`splittext--line`) sliding up on arrival, and a two-family type system
161
+ (light serif with true italics — SangBleu-style — mixed into a neutral
162
+ grotesk). No drag, no sound, no HUD maximalism: one subject + line-mask type
163
+ + smooth scroll already reads as the genre. Start here; add §2 gestures only
164
+ if the brief earns them. (unseen.co's own home additionally runs a
165
+ `webgl-rain` particle layer over the scene — weather as grade texture.)
166
+ - **Particle identity page**: brand mark as 50k particles that disperse on
167
+ pointer force and reform; sections change the formation target; scroll
168
+ velocity agitates; reduced-motion = the formed mark as a still.
169
+ - **Cinematic case study**: dark editorial page, media rendered through the
170
+ distortion layer, velocity-reactive stretch on scroll, chapter numerals,
171
+ one raymarched-light hero; DOM otherwise quiet and typographic.
172
+ - **Budget version (no GPGPU)**: pre-rendered fluid/particle video loops as
173
+ background + `mix-blend-mode` type, CSS grain, velocity-reactive transforms
174
+ on real DOM, click-and-hold in JS only. 70% of the mood, runs on anything —
175
+ the right call below motion dial 8 or on content-heavy sites.
176
+
177
+ ## 6.5 The unseen.co replication blueprint (build order)
178
+
179
+ When the brief is "make it like unseen.co" (or this genre at dial 9–10), build
180
+ in THIS order — each layer works before the next starts. Do not attempt it as
181
+ one monolithic rewrite; do not stop after step 2 and call it done.
182
+
183
+ **Manifest:** `npm i gsap lenis three @react-three/fiber @react-three/drei
184
+ @react-three/postprocessing` (React) or `gsap lenis three` (vanilla/OGL).
185
+ Wire Lenis + ScrollTrigger per motion.md §8 first.
186
+
187
+ **Layer stack (bottom → top):** persistent WebGL canvas (fixed, full-viewport)
188
+ → real DOM content (the accessible document) → HUD chrome (fixed corners) →
189
+ grain overlay → custom cursor. Each is its own component/layer mounted in the
190
+ root layout, outside the router swap point (immersive.md §1).
191
+
192
+ 1. **Smooth scroll + type system.** Lenis running, line-mask reveals on every
193
+ heading (motion.md §8), the two-family type mix (grotesk + true-italic
194
+ serif accents in one headline), numbered HUD chrome (`01 Index`…). The page
195
+ should already feel 60% of the genre with zero WebGL.
196
+ 2. **The living surface.** One canvas, one simulation family (§1). Start with
197
+ the highest effort/impact ratio: a shader plane with fbm + domain-warp fed
198
+ by palette uniforms and damped `uMouse` velocity (3d.md §4), or the
199
+ pre-rendered-video budget path (§6). Grain overlay goes in now — it glues
200
+ DOM and canvas into one graded image.
201
+ 3. **Scroll = camera.** Tall scroll container drives a camera dolly / scene
202
+ progress via damped scrub (immersive.md §4). Section copy floats in at
203
+ progress stops. This is the "one continuous shot" that separates the genre
204
+ from a parallax page.
205
+ 4. **Media through the surface.** Sync DOM image/work-card rects to texture
206
+ planes in the canvas (measure with `getBoundingClientRect` on resize +
207
+ scroll, don't guess) so hover/velocity distortion touches them; keep the
208
+ real DOM images underneath for a11y/fallback (§1). Velocity-reactive
209
+ stretch/RGB-split on scroll flicks, hard-clamped (§2).
210
+ 5. **Gestures + cursor.** Pick 2–3 from §2 (drag-to-explore, click & hold,
211
+ cursor-as-instrument), each labeled, each with a keyboard/boring
212
+ equivalent. Custom cursor: one dot, damped follow, contextual labels.
213
+ 6. **Doors and passages.** Preloader (real progress, choreographed reveal into
214
+ the idling scene — immersive.md §2), entry gate if sound ships (§3), route
215
+ transitions driven by the simulation (§4).
216
+ 7. **The floor.** Reduced-motion still frame, degrade ladder, contrast scrim,
217
+ mobile strategy (poster or halved sim), pause on hidden (§5).
218
+
219
+ Ship checkpoint after every layer: run it, screenshot it, READ THE CONSOLE,
220
+ click through it (ux.md §7's audit on the touched surface), keep it working.
221
+ A failed step 4 must not take down steps 1–3 — each layer's fallback is the
222
+ previous layer, and the runtime gate (DESIGN.md §12.18) runs on the final
223
+ stack, not just the last layer added.
224
+
225
+ ## 7. Changing an existing site into this
226
+
227
+ Same rule as immersive.md §8: this register cannot be CSS'd onto a conventional
228
+ page — it needs the canvas surface, the reduced composition, and usually a
229
+ content edit (views hold less). Use DESIGN.md §11's transformation-depth ladder;
230
+ this genre is almost always rung 3 (Restructure) or 4 (Reimagine). Offer the
231
+ ladder, get the user's pick, then rebuild for real — and offer the budget recipe
232
+ (§6) as the rung-2 alternative for users who want the mood without the rebuild.