Update website layout, styles, and story components

This commit is contained in:
R-Bharathraj
2026-07-21 17:48:28 +05:30
parent e41094a6fd
commit aca42a3213
7 changed files with 736 additions and 263 deletions

View File

@@ -4,6 +4,7 @@ import { useState, useEffect, useRef } from 'react';
import Link from 'next/link';
import Image from 'next/image';
import { gsap, useGSAP, syncLenisScrollTrigger } from '../story/gsapkit';
import { Ico } from '../story/Ico';
const INK = '#0a0a0a';
const BLUE = '#2F6BFF';
@@ -13,18 +14,18 @@ const NAV = [
title: 'Earn',
color: '#C8FF37', // lime
links: [
{ label: 'Walk to Earn', href: '#for-you' },
{ label: 'Play & Win', href: '#for-you' },
{ label: 'Refer Friends', href: '#for-you' },
{ label: 'Walk to Earn', href: '#how-it-works' },
{ label: 'Play & Win', href: '#how-it-works' },
{ label: 'Refer Friends', href: '#how-it-works' },
],
},
{
title: 'Platform',
color: '#FF2E88', // pink
links: [
{ label: 'For You', href: '#for-you' },
{ label: 'For Business', href: '#for-business' },
{ label: 'Why Now', href: '#why-now' },
{ label: 'How It Works', href: '#how-it-works' },
{ label: 'The Loop', href: '#the-loop' },
],
},
{
@@ -33,7 +34,7 @@ const NAV = [
links: [
{ label: 'The Vision', href: '#the-vision' },
{ label: 'The Why', href: '#the-why' },
{ label: 'Contact Us', href: '#for-business' },
{ label: 'Our Belief', href: '#our-belief' },
],
},
];
@@ -79,10 +80,111 @@ export default function Footer() {
syncLenisScrollTrigger();
const reduce = window.matchMedia('(prefers-reduced-motion: reduce)').matches;
// Infinite marquee ticker (two identical halves → seamless).
if (!reduce) {
/* Continuous continuous animations */
gsap.to('.foot-ticker-track', { xPercent: -50, duration: 22, ease: 'none', repeat: -1 });
gsap.to('.foot-cta-star', { rotate: 360, duration: 9, ease: 'none', repeat: -1 });
gsap.to('.foot-cta-star-spin', { rotate: 360, duration: 9, ease: 'none', repeat: -1 });
/* ── 3D Sticker Fold-Out & Stamp Burst Reveal for Footer CTA Banner ── */
gsap.set('.lu-cta', {
transformStyle: 'preserve-3d',
transformOrigin: '50% 100%',
rotationX: 35,
rotationY: -10,
scale: 0.85,
y: 70,
autoAlpha: 0,
boxShadow: '0 40px 80px rgba(0,0,0,0.4)',
});
gsap.set('.foot-cta-star', { scale: 0, rotation: -180, autoAlpha: 0 });
gsap.set('.lu-cta-pill', { y: -25, autoAlpha: 0 });
gsap.set('.lu-cta-heading', { y: 30, rotationX: -40, autoAlpha: 0 });
gsap.set('.lu-cta-btn', { scale: 0.6, rotationZ: -12, autoAlpha: 0 });
gsap.set('.lu-columns > *', { y: 40, autoAlpha: 0 });
const tl = gsap.timeline({
scrollTrigger: {
trigger: '.lu-cta-wrap',
start: 'top 78%',
once: true,
},
defaults: { ease: 'power3.out' },
});
/* Phase 1: Card Unfolds from 3D Stack */
tl.to('.lu-cta', {
rotationX: 0,
rotationY: 0,
scale: 1,
y: 0,
autoAlpha: 1,
boxShadow: '8px 8px 0 0 #0a0a0a',
duration: 0.85,
ease: 'back.out(1.5)',
onComplete: () => {
gsap.set('.lu-cta', { clearProps: 'transform,transformStyle' });
},
})
/* Phase 2: Pink Star Pops Out from Top Corner */
.to(
'.foot-cta-star',
{
scale: 1,
rotation: 0,
autoAlpha: 1,
duration: 0.5,
ease: 'back.out(2)',
},
'-=0.4'
)
/* Phase 3: Purple Pill Tag Drops Down */
.to(
'.lu-cta-pill',
{
y: 0,
autoAlpha: 1,
duration: 0.4,
ease: 'back.out(1.8)',
},
'-=0.3'
)
/* Phase 4: Heading 3D Unrolls */
.to(
'.lu-cta-heading',
{
y: 0,
rotationX: 0,
autoAlpha: 1,
duration: 0.55,
ease: 'power4.out',
},
'-=0.3'
)
/* Phase 5: Yellow Download Button Stamps On */
.to(
'.lu-cta-btn',
{
scale: 1,
rotationZ: 0,
autoAlpha: 1,
duration: 0.5,
ease: 'back.out(2.2)',
},
'-=0.35'
)
/* Phase 6: Footer columns cascade in */
.to(
'.lu-columns > *',
{
y: 0,
autoAlpha: 1,
duration: 0.6,
stagger: 0.1,
ease: 'power3.out',
},
'-=0.2'
);
}
},
{ scope: rootRef },
@@ -120,8 +222,8 @@ export default function Footer() {
</div>
</div>
{/* ── BIG CTA STICKER CARD ── */}
<div className="lu-cta-wrap" style={{ padding: '56px 48px 40px' }}>
{/* ── BIG CTA STICKER CARD (3D Fold-Out Reveal) ── */}
<div className="lu-cta-wrap" style={{ padding: '56px 48px 40px', perspective: 1200 }}>
<div className="lu-cta" style={{
position: 'relative',
background: BLUE,
@@ -136,13 +238,13 @@ export default function Footer() {
}}>
{/* rotating star sticker */}
<span className="foot-cta-star" aria-hidden style={{ position: 'absolute', top: -20, right: 30, willChange: 'transform' }}>
<span style={{ display: 'inline-flex', background: '#FF2E88', border: `3px solid ${INK}`, borderRadius: '50%', padding: 10, boxShadow: `3px 3px 0 0 ${INK}` }}>
<span className="foot-cta-star-spin" style={{ display: 'inline-flex', background: '#FF2E88', border: `3px solid ${INK}`, borderRadius: '50%', padding: 10, boxShadow: `3px 3px 0 0 ${INK}` }}>
<Star size={22} color="#fff" />
</span>
</span>
<div style={{ maxWidth: 640 }}>
<span style={{ display: 'inline-block', background: '#8B3DFF', color: '#fff', border: `3px solid ${INK}`, borderRadius: 10, padding: '5px 12px', fontSize: 11, fontWeight: 900, textTransform: 'uppercase', letterSpacing: '0.14em', marginBottom: 18, boxShadow: `3px 3px 0 0 ${INK}` }}>
<span className="lu-cta-pill" style={{ display: 'inline-block', background: '#8B3DFF', color: '#fff', border: `3px solid ${INK}`, borderRadius: 10, padding: '5px 12px', fontSize: 11, fontWeight: 900, textTransform: 'uppercase', letterSpacing: '0.14em', marginBottom: 18, boxShadow: `3px 3px 0 0 ${INK}` }}>
Earn. Spend. Live More.
</span>
<h2 className="lu-cta-heading" style={{ fontSize: 'clamp(32px, 4.8vw, 62px)', fontWeight: 800, letterSpacing: '-0.03em', lineHeight: 0.96, margin: 0 }}>
@@ -154,7 +256,7 @@ export default function Footer() {
</h2>
</div>
<Link href="#for-business" className="lu-cta-btn" style={{
<Link href="#how-it-works" className="lu-cta-btn" style={{
display: 'inline-flex', alignItems: 'center', gap: 10,
padding: '18px 36px', background: '#FFC72C', color: INK,
fontSize: 17, fontWeight: 900, textTransform: 'uppercase', letterSpacing: '0.03em',
@@ -231,7 +333,7 @@ export default function Footer() {
}}>
<span style={{ display: 'inline-flex', alignItems: 'center', gap: 8, fontWeight: 600 }}>
© {new Date().getFullYear()} LytsUp. Made with
<span style={{ color: '#FF2E88' }}></span> for Gen Z.
<Ico e="♥" size={14} /> for Gen Z.
</span>
<div style={{ display: 'flex', gap: 20 }}>
{[['Terms', '#'], ['Privacy', '#'], ['Cookies', '#']].map(([l, h]) => (