ResultsShowcaseV2 - “The Ascent”

Cinematic transformation visualization: From Seventh Seal brutalism to Moana vitality.

The Concept

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.

The Journey

  1. BASECAMP (Grey Zone) - Stuck, numb, grey brutalist aesthetic
  2. IMPACT - Pre-dawn, mountains in darkness, first light breaking
  3. CONNECTION - Sunrise, warmth entering, colors blooming
  4. VITALITY - Full Moana spectrum, ocean vista, complete aliveness
  5. SUMMIT - The view from the top, transformed

Key Differences from V1

V1: Clean, professional, safe V2: Cinematic, bold, experiential

AspectV1V2
VisualProgress barsRising light beams with background transformation
TypographyCormorant + DM SansFutura Bold (Nike-style) + Libre Baskerville
BackgroundSolid whiteAnimated mountains & sunrise
Color JourneyStatic blues/goldGrey → Deep blue → Sunrise → Full spectrum
FeelPolished reportCinematic experience
Signature MomentBars fillingSun cresting mountain at first 100%

Visual Design

Typography

Color Progression

Basecamp (Grey)

Impact (Pre-dawn)

Connection (Sunrise)

Vitality (Full Color)

Technical Features

Installation

Same as V1:

npm install gsap
---
import ResultsShowcaseV2 from '../components/ResultsShowcaseV2.astro';
---

<ResultsShowcaseV2 />

Customization

Background Video Option

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.

Real Client Photos

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;
}

Adjust Mountain Shapes

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%
  );
}

Animation Timing

Speed up/slow down the transformation:

// In script section
tl.to(bar, {
  width: '100%',
  duration: 2,  // Change this (currently 2 seconds)
  ease: 'power2.inOut',
});

Color Palette Swap

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%
  );
}

Performance Notes

Browser Support

Requires:

When to Use V1 vs V2

Use V1 when:

Use V2 when:

The Signature Moment

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.

Tips

  1. First load? Scroll slowly to see the full transformation
  2. Want more drama? Increase the .sun-element size on vitality stage
  3. Too intense? Reduce opacity on color transitions
  4. Testing? Add ?stage=vitality to URL and jump to that state instantly
  5. Mobile? Mountains still work, just slightly simplified

What Makes This World-Class

V2 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.