Cinematic transformation visualization: From Seventh Seal brutalism to Moana vitality.
This isn’t just data visualization—it’s an emotional journey from darkness to light, numbness to aliveness. As users scroll, they climb from basecamp to summit, watching the world transform around them.
V1: Clean, professional, safe V2: Cinematic, bold, experiential
| Aspect | V1 | V2 |
|---|---|---|
| Visual | Progress bars | Rising light beams with background transformation |
| Typography | Cormorant + DM Sans | Futura Bold (Nike-style) + Libre Baskerville |
| Background | Solid white | Animated mountains & sunrise |
| Color Journey | Static blues/gold | Grey → Deep blue → Sunrise → Full spectrum |
| Feel | Polished report | Cinematic experience |
| Signature Moment | Bars filling | Sun cresting mountain at first 100% |
Basecamp (Grey)
Impact (Pre-dawn)
Connection (Sunrise)
Vitality (Full Color)
Same as V1:
npm install gsap
---
import ResultsShowcaseV2 from '../components/ResultsShowcaseV2.astro';
---
<ResultsShowcaseV2 />
Want to use actual mountain/sunrise footage? Replace the CSS mountains:
<div class="background-scene">
<video autoplay muted loop playsinline class="background-video">
<source src="/videos/mountain-sunrise.mp4" type="video/mp4">
</video>
<div class="video-overlay"></div>
<div class="sun-element"></div>
</div>
.background-video {
position: absolute;
width: 100%;
height: 100%;
object-fit: cover;
}
.video-overlay {
position: absolute;
width: 100%;
height: 100%;
background: rgba(0, 0, 0, 0.3);
mix-blend-mode: multiply;
}
Then control video playback speed/filter via JS based on scroll progress.
Replace avatar placeholders:
<div class="landing-photo">
<img src="/images/clients/david-chen.jpg" alt="David Chen" />
</div>
.landing-photo img {
width: 80px;
height: 80px;
border-radius: 50%;
object-fit: cover;
}
Edit the clip-path values in .mountain-layer classes:
.mountain-near {
clip-path: polygon(
0 100%,
0 70%, /* Start height */
20% 40%, /* First peak */
35% 55%, /* Valley */
50% 30%, /* Highest peak */
65% 50%, /* Valley */
80% 35%, /* Peak */
100% 60%, /* End height */
100% 100%
);
}
Speed up/slow down the transformation:
// In script section
tl.to(bar, {
width: '100%',
duration: 2, // Change this (currently 2 seconds)
ease: 'power2.inOut',
});
Want different colors? Update the [data-active-stage] CSS:
.results-ascent[data-active-stage="vitality"] .sky-gradient {
background: linear-gradient(
to bottom,
#YOUR_TOP_COLOR 0%,
#YOUR_MID_COLOR 50%,
#YOUR_BOTTOM_COLOR 100%
);
}
Requires:
Use V1 when:
Use V2 when:
When the first metric hits 100%, the sun crests the mountain and everything shifts from grey to color. This is the “holy shit” moment. Time it perfectly with your hero testimonial for maximum impact.
.sun-element size on vitality stage?stage=vitality to URL and jump to that state instantlyV2 isn’t just showing results—it’s creating the feeling of transformation.
Questions? The component has extensive comments. The magic is in how the background responds to scroll progress and stage changes.