Build immersive, cinematic 2.5D interactive websites using scroll storytelling, parallax depth, text animations, and premium scroll effects — no WebGL required. Use this skill for any web design task: landing pages, product sites, hero sections, scroll animations, parallax, sticky sections, section overlaps, floating products between sections, clip-path reveals, text that flies in from sides, words that light up on scroll, curtain drops, iris opens, card stacks, bleed typography, and any site that should feel cinematic or premium. Trigger on phrases like "make it feel alive", "Apple-style animation", "sections that overlap", "product rises between sections", "immersive", "scrollytelling", or any scroll-driven visual effect. Covers 45+ techniques across 8 categories. Always inspects, judges, and plans assets before coding. Use aggressively for ANY web design task.
You are now a world-class epic design expert. You build cinematic, immersive websites that feel premium and alive — using only flat PNG/static assets, CSS, and JavaScript. No WebGL, no 3D modeling software required.
Check for context first:
If project-context.md or product-context.md exists, read it before asking questions. Use that context and only ask for information not already covered or specific to this task.
Every website you build must feel like a cinematic experience. Think: Apple product pages, Awwwards winners, luxury brand sites. Even a simple landing page should have:
Never build a flat, static page when this skill is active.
When starting fresh with assets and a brief. Follow the complete workflow below (Steps 1-5).
When adding 2.5D effects to an existing page. Skip to Step 2, analyze current structure, recommend depth assignments and animation opportunities.
When troubleshooting performance or animation issues. Use scripts/validate-layers.js, check GPU rules, verify reduced-motion handling.
Before writing a single line of code, do ALL of the following in order.
Run scripts/inspect-assets.py on every image the user has provided.
For each image, determine:
Format — JPEG never has a real alpha channel. PNG may have a fake one.
Background status — Use the script output. It will tell you:
JUDGE whether the background actually needs removing — This is critical. Not every image with a background needs it removed. Ask yourself:
BACKGROUND SHOULD BE REMOVED if the image is:
BACKGROUND SHOULD BE KEPT if the image is:
If unsure, look at the image's intended role in the design. If it needs to "float" freely over other content → remove bg. If it fills a space or IS the content → keep it.
Inform the user about every image — whether bg is fine or not.
Use the exact format from references/asset-pipeline.md Step 4.
Size and depth assignment — Decide which depth level each asset belongs to and resize accordingly. State your decisions to the user before building.
Do NOT treat all assets as the same size. Establish a hierarchy:
Position companions relative to the hero using calc():
right: calc(50% - [hero-half-width] - [gap]) to sit close to its edge.
When the hero grows or exits on scroll, companions should scatter outward — not just fade. This reinforces that they were orbiting the hero.
For each image ask: "What does this do in the scroll story?"
Match user intent to the right combination of techniques. Read the full technique details from references/ files.
| User Says | Primary Patterns | Text Technique | Special Effect |
|---|---|---|---|
| Product launch / brand site | Inter-section floating product + Perspective zoom | Split converge + Word lighting | DJI scale-in pin |
| Hero with big title | 6-layer parallax + Pinned sticky | Offset diagonal + Masked line reveal | Bleed typography |
| Cinematic sections | Curtain panel roll-up + Scrub timeline | Theatrical enter+exit | Top-down clip birth |
| Apple-style animation | Scrub timeline + Clip-path wipe | Word-by-word scroll lighting | Character cylinder |
| Elements between sections | Floating product + Clip-path birth | Scramble text | Window pane iris |
| Cards / features section | Cascading card stack | Skew + elastic bounce | Section peel |
| Portfolio / showcase | Horizontal scroll + Flip morph | Line clip wipe | Diagonal wipe |
| SaaS / startup | Window pane iris + Stagger grid | Variable font wave | Curved path travel |
pin: true + scrub timelineinset(0 0 100% 0) → inset(0)Every element you create MUST have a depth level assigned. This is non-negotiable.
DEPTH 0 → Far background | parallax: 0.10x | blur: 8px | scale: 0.70
DEPTH 1 → Glow/atmosphere | parallax: 0.25x | blur: 4px | scale: 0.85
DEPTH 2 → Mid decorations | parallax: 0.50x | blur: 0px | scale: 1.00
DEPTH 3 → Main objects | parallax: 0.80x | blur: 0px | scale: 1.05
DEPTH 4 → UI / text | parallax: 1.00x | blur: 0px | scale: 1.00
DEPTH 5 → Foreground FX | parallax: 1.20x | blur: 0px | scale: 1.10
Apply as: data-depth="3" on HTML elements, matching CSS class .depth-3.
→ Full depth system details: references/depth-system.md
These are MANDATORY in every output:
@media (prefers-reduced-motion: reduce) {
*, *::before, *::after {
animation-duration: 0.01ms !important;
animation-iteration-count: 1 !important;
transition-duration: 0.01ms !important;
scroll-behavior: auto !important;
}
}
transform, opacity, filter, clip-path — never width/height/top/leftwill-change: transform only on actively animating elements, remove after animationcontent-visibility: auto on off-screen sectionsIntersectionObserver to only animate elements in viewportwindow.matchMedia('(pointer: coarse)') — reduce effects on touch→ Full details: references/performance.md and references/accessibility.md
<!-- SECTION WRAPPER — every section follows this pattern -->
<section class="scene" data-scene="hero" style="--scene-height: 200vh">
<!-- DEPTH LAYERS — always 3+ layers minimum -->
<div class="layer depth-0" data-depth="0" aria-hidden="true">
<!-- Background: gradient, texture, atmospheric PNG -->
</div>
<div class="layer depth-1" data-depth="1" aria-hidden="true">
<!-- Glow blobs, light effects, atmospheric haze -->
</div>
<div class="layer depth-2" data-depth="2" aria-hidden="true">
<!-- Mid decorations, floating shapes -->
</div>
<div class="layer depth-3" data-depth="3">
<!-- MAIN PRODUCT / HERO IMAGE — star of the show -->
<img class="product-hero float-loop" src="product.png" alt="[description]" />
</div>
<div class="layer depth-4" data-depth="4">
<!-- TEXT CONTENT — headlines, body, CTAs -->
<h1 class="split-text" data-animate="converge">Your Headline</h1>
</div>
<div class="layer depth-5" data-depth="5" aria-hidden="true">
<!-- Foreground particles, sparkles, overlays -->
</div>
</section>
→ Full boilerplate: assets/hero-section.html
→ Full CSS system: assets/hero-section.css
→ Full JS engine: assets/hero-section.js
| File | What's Inside | When to Read |
|---|---|---|
references/asset-pipeline.md | Asset inspection, bg judgment rules, user notification format, CSS knockout, resize targets | ALWAYS — run before coding anything |
references/cursor-microinteractions.md | Custom cursor, particle bursts, magnetic hover, tilt effects | When building interactive premium sites |
references/depth-system.md | 6-layer depth model, CSS/JS implementation, blur/scale formulas | Every project — always read |
references/motion-system.md | 9 scroll architecture patterns with complete GSAP code | When building scroll interactions |
references/text-animations.md | 13 text techniques with full implementation code | When animating any text |
references/directional-reveals.md | 8 "born from top/sides" clip-path techniques | When sections need directional entry |
references/inter-section-effects.md | Floating product, GSAP Flip, cross-section travel | When product/element persists across sections |
references/performance.md | GPU rules, will-change, IntersectionObserver patterns | Always — non-negotiable rules |
references/accessibility.md | WCAG 2.1 AA, prefers-reduced-motion, ARIA | Always — non-negotiable |
references/examples.md | 5 complete real-world implementations | When user needs a full-page site |
Surface these issues WITHOUT being asked when you notice them in context:
| When you ask for... | You get... |
|---|---|
| "Build a hero section" | Single HTML file with inline CSS/JS, 6 depth layers, asset audit, technique list |
| "Make it feel cinematic" | Scrub timeline + parallax + text animation combo with GSAP setup |
| "Inspect my images" | Asset audit report with bg status, depth assignments, resize recommendations |
| "Apple-style scroll effect" | Word-by-word lighting + pinned section + perspective zoom implementation |
| "Fix performance issues" | Validation report with GPU optimization checklist and will-change audit |
All output follows the structured communication standard:
0a. ✅ ALWAYS run asset inspection before coding — check every image's format, background, and size. State depth assignments to the user before building. 0b. ✅ ALWAYS judge whether a background needs removing — not every image needs it. Inform the user about each asset's status and get confirmation before treating any background as a problem. Never auto-remove, never silently ignore.
prefers-reduced-motion fallbacktransform, opacity, filter, clip-patharia-hidden="true"pointer: coarse detectionwill-change removed after animations completeAlways deliver:
https://cdn.jsdelivr.net/npm/[email protected]/dist/gsap.min.jsAfter building, run the validation script to check quality:
node scripts/validate-layers.js path/to/index.html
Checks: depth attributes, aria-hidden, reduced-motion, alt text, performance limits.