Files
asset-homepage/components/HowItWorksSection.tsx

718 lines
28 KiB
TypeScript
Raw Normal View History

2026-01-27 17:26:30 +08:00
'use client';
import { useState, useEffect, useRef } from 'react';
import Image from 'next/image';
2026-01-29 16:23:10 +08:00
import { Card, CardBody, Chip } from '@heroui/react';
2026-01-28 17:55:01 +08:00
import { useLanguage } from '@/contexts/LanguageContext';
2026-01-29 16:23:10 +08:00
import { useTheme } from '@/contexts/ThemeContext';
2026-01-27 17:26:30 +08:00
// 数字增长动画Hook
function useCountUp(end: number, duration: number = 1500, startRangePercent: number = 0.75) {
const [mounted, setMounted] = useState(false);
const [count, setCount] = useState(end);
const elementRef = useRef<HTMLDivElement>(null);
const startValueRef = useRef<number>(end);
2026-01-29 16:23:10 +08:00
const timerRef = useRef<NodeJS.Timeout | null>(null);
2026-01-27 17:26:30 +08:00
useEffect(() => {
setMounted(true);
startValueRef.current = Math.floor(end * (startRangePercent + Math.random() * 0.15));
setCount(startValueRef.current);
}, [end, startRangePercent]);
useEffect(() => {
if (!mounted) return;
const observer = new IntersectionObserver(
(entries) => {
2026-01-28 17:55:01 +08:00
if (entries[0].isIntersecting) {
2026-01-29 16:23:10 +08:00
// 清除之前可能存在的 timer
if (timerRef.current) {
clearInterval(timerRef.current);
}
2026-01-27 17:26:30 +08:00
const start = startValueRef.current;
const startTime = Date.now();
const timer = setInterval(() => {
const elapsed = Date.now() - startTime;
const progress = Math.min(elapsed / duration, 1);
const easeOutCubic = 1 - Math.pow(1 - progress, 3);
const currentCount = Math.floor(start + (end - start) * easeOutCubic);
setCount(currentCount);
if (progress === 1) {
setCount(end);
clearInterval(timer);
2026-01-29 16:23:10 +08:00
timerRef.current = null;
2026-01-27 17:26:30 +08:00
}
}, 16);
2026-01-29 16:23:10 +08:00
timerRef.current = timer;
2026-01-28 17:55:01 +08:00
} else {
2026-01-29 16:23:10 +08:00
if (timerRef.current) {
clearInterval(timerRef.current);
timerRef.current = null;
2026-01-28 17:55:01 +08:00
}
setCount(startValueRef.current);
2026-01-27 17:26:30 +08:00
}
},
{ threshold: 0.1 }
);
if (elementRef.current) {
observer.observe(elementRef.current);
}
2026-01-29 16:23:10 +08:00
return () => {
if (timerRef.current) {
clearInterval(timerRef.current);
}
observer.disconnect();
};
2026-01-28 17:55:01 +08:00
}, [end, duration, mounted]);
2026-01-27 17:26:30 +08:00
return { count, elementRef };
}
export default function HowItWorksSection() {
2026-01-28 17:55:01 +08:00
const { t } = useLanguage();
2026-01-29 16:23:10 +08:00
const { theme } = useTheme();
2026-01-28 17:55:01 +08:00
const [animate, setAnimate] = useState(false);
2026-01-29 16:23:10 +08:00
const [activeStep, setActiveStep] = useState(1);
2026-01-27 17:26:30 +08:00
const sectionRef = useRef<HTMLElement>(null);
const investAmount = useCountUp(100000, 1500, 0.85);
const earnAmount = useCountUp(5150, 1500, 0.85);
useEffect(() => {
2026-01-28 17:55:01 +08:00
const currentRef = sectionRef.current;
if (!currentRef) return;
2026-01-27 17:26:30 +08:00
const observer = new IntersectionObserver(
(entries) => {
2026-01-28 17:55:01 +08:00
if (entries[0].isIntersecting) {
setAnimate(true);
observer.disconnect();
}
2026-01-27 17:26:30 +08:00
},
2026-01-28 17:55:01 +08:00
{ threshold: 0.3 }
2026-01-27 17:26:30 +08:00
);
2026-01-28 17:55:01 +08:00
observer.observe(currentRef);
return () => observer.disconnect();
}, []);
2026-01-27 17:26:30 +08:00
2026-01-29 16:23:10 +08:00
const isDark = theme === 'dark';
2026-01-27 17:26:30 +08:00
const steps = [
{
number: 1,
2026-01-28 17:55:01 +08:00
title: t('how.step1.title'),
description: t('how.step1.desc'),
2026-01-27 17:26:30 +08:00
hasLine: true
},
{
number: 2,
2026-01-28 17:55:01 +08:00
title: t('how.step2.title'),
description: t('how.step2.desc'),
2026-01-27 17:26:30 +08:00
hasLine: true
},
{
number: 3,
2026-01-28 17:55:01 +08:00
title: t('how.step3.title'),
description: t('how.step3.desc'),
2026-01-27 17:26:30 +08:00
hasLine: false
}
];
return (
<section
ref={sectionRef}
2026-01-29 16:23:10 +08:00
className={`flex flex-col items-center justify-center flex-shrink-0 w-full relative border-y ${
isDark ? 'bg-[#0a0a0a] border-[#27272a]' : 'bg-[#f9fafb] border-[#e5e7eb]'
}`}
2026-01-27 17:26:30 +08:00
style={{
padding: '80px 0px'
}}
>
2026-01-28 17:55:01 +08:00
<div className="flex flex-row items-start justify-between flex-shrink-0 relative w-[1440px]">
2026-01-27 17:26:30 +08:00
<div className="flex flex-col gap-10 items-start justify-start flex-shrink-0 relative w-[520px]">
<div className="flex flex-col items-start justify-start flex-shrink-0 relative">
<h2
2026-01-29 16:23:10 +08:00
className={`text-left relative font-domine text-5xl font-bold ${
isDark ? 'text-[#fafafa]' : 'text-[#111827]'
}`}
2026-01-27 17:26:30 +08:00
style={{
lineHeight: '120%',
2026-01-29 16:23:10 +08:00
letterSpacing: '-0.01em'
2026-01-27 17:26:30 +08:00
}}
>
2026-01-28 17:55:01 +08:00
{t('how.title')}
2026-01-27 17:26:30 +08:00
</h2>
</div>
<div className="flex flex-col gap-6 items-start justify-start flex-shrink-0 relative">
{steps.map((step, index) => {
const isActive = activeStep === step.number;
return (
<div
key={step.number}
onClick={() => setActiveStep(step.number)}
className={`flex flex-row gap-6 items-start justify-start flex-shrink-0 relative cursor-pointer transition-all duration-300 ease-out hover:opacity-80 ${
2026-01-29 16:23:10 +08:00
animate ? 'translate-x-0 opacity-100' : '-translate-x-12 opacity-0'
2026-01-27 17:26:30 +08:00
}`}
style={{
transitionDelay: `${index * 150}ms`
}}
>
<div className="pt-2 flex flex-col items-center justify-start self-stretch flex-shrink-0 relative">
{isActive ? (
<div
2026-01-29 16:23:10 +08:00
className={`rounded-full flex items-center justify-center flex-shrink-0 w-8 h-[21.63px] transition-all duration-300 ${
isDark ? 'bg-white' : 'bg-[#111827]'
}`}
2026-01-27 17:26:30 +08:00
style={{
padding: '0.31px 0px 1.32px 0px'
}}
>
<span
2026-01-29 16:23:10 +08:00
className={`text-center text-sm font-bold font-domine transition-all duration-300 ${
isDark ? 'text-[#0a0a0a]' : 'text-[#fcfcfd]'
}`}
2026-01-27 17:26:30 +08:00
>
{step.number}
</span>
</div>
) : (
<div
2026-01-29 16:23:10 +08:00
className={`rounded-full border-2 flex items-center justify-center flex-shrink-0 w-8 h-[24.5px] transition-all duration-300 ${
isDark ? 'bg-[#0a0a0a] border-[#3f3f46]' : 'bg-[#f9fafb] border-[#d1d5db]'
}`}
2026-01-27 17:26:30 +08:00
>
<span
2026-01-29 16:23:10 +08:00
className={`text-center text-sm font-bold font-domine transition-all duration-300 ${
isDark ? 'text-[#71717a]' : 'text-[#9ca1af]'
}`}
2026-01-27 17:26:30 +08:00
>
{step.number}
</span>
</div>
)}
{step.hasLine && (
<div className="pt-6 flex flex-col items-start justify-center flex-1 w-[2px] relative">
2026-01-29 16:23:10 +08:00
<div className={`flex-1 w-[2px] ${isDark ? 'bg-[#27272a]' : 'bg-[#e5e7eb]'}`} />
2026-01-27 17:26:30 +08:00
</div>
)}
</div>
<div
className="flex flex-col gap-2 items-start justify-start flex-1 relative"
style={{
paddingBottom: step.hasLine ? '32px' : '0px'
}}
>
<h3
2026-01-29 16:23:10 +08:00
className="text-left text-3xl font-semibold font-domine transition-all duration-300"
2026-01-27 17:26:30 +08:00
style={{
lineHeight: '130%',
letterSpacing: '-0.005em',
2026-01-29 16:23:10 +08:00
color: isActive
? (isDark ? '#fafafa' : '#111827')
: (isDark ? '#52525b' : '#6b7280')
2026-01-27 17:26:30 +08:00
}}
>
{step.title}
</h3>
<p
2026-01-29 16:23:10 +08:00
className={`text-left text-base font-domine ${
isDark ? 'text-[#71717a]' : 'text-[#9ca1af]'
}`}
2026-01-27 17:26:30 +08:00
style={{
2026-01-29 16:23:10 +08:00
lineHeight: '150%'
2026-01-27 17:26:30 +08:00
}}
>
{step.description}
</p>
</div>
</div>
);
})}
</div>
</div>
<div
2026-01-28 17:55:01 +08:00
className="calculator-card-container flex flex-col items-start justify-start flex-shrink-0 w-[558px] relative"
2026-01-27 17:26:30 +08:00
style={{
height: '439px'
}}
>
2026-01-28 17:55:01 +08:00
<>
2026-01-29 16:23:10 +08:00
<Card
className={`h-[162px] absolute z-0 transition-all duration-700 ease-out ${
animate && activeStep === 1 ? 'opacity-100' : 'opacity-0'
} ${
isDark ? 'bg-white border-[#e5e7eb]' : 'bg-[#111827] border-transparent'
}`}
shadow="lg"
style={{
padding: '25px 25px 1px 25px',
left: '205.43px',
top: '15.96px',
transformOrigin: '0 0',
transform: animate && activeStep === 1
? 'rotate(6.535deg) scale(1, 1) translateX(0)'
: 'rotate(6.535deg) scale(1, 1) translateX(3rem)',
transitionDelay: activeStep === 1 ? '200ms' : '0ms',
pointerEvents: activeStep === 1 ? 'auto' : 'none'
}}
>
2026-01-27 17:26:30 +08:00
<Image
2026-01-29 16:23:10 +08:00
src="/usd-coin-usdc-logo-10.svg"
alt="USDC"
width={64}
height={64}
className="flex-shrink-0"
2026-01-27 17:26:30 +08:00
/>
2026-01-29 16:23:10 +08:00
<div className="flex-shrink-0 w-[66px] h-[66px] relative">
<div className="absolute inset-0 rounded-full bg-gradient-to-br from-green-400 to-emerald-500" />
<Image
src="/image-220.png"
alt="WUSD"
width={66}
height={66}
className="absolute inset-0 rounded-full"
/>
</div>
</Card>
<Card
className={`absolute left-0 top-[99px] w-full z-10 transition-all duration-700 ease-out ${
2026-01-28 17:55:01 +08:00
animate && activeStep === 1 ? 'opacity-100' : 'opacity-0'
2026-01-29 16:23:10 +08:00
} ${
isDark ? 'bg-[#18181b]/85 border-[#27272a]' : 'bg-white/85 border-[#e5e7eb]'
2026-01-28 17:55:01 +08:00
}`}
2026-01-29 16:23:10 +08:00
shadow="lg"
2026-01-27 17:26:30 +08:00
style={{
2026-01-29 16:23:10 +08:00
backdropFilter: 'blur(12px)',
2026-01-28 17:55:01 +08:00
transform: animate && activeStep === 1
? 'rotate(-3deg) translateX(0)'
: 'rotate(-3deg) translateX(3rem)',
2026-01-28 17:55:01 +08:00
transformOrigin: 'center center',
transitionDelay: activeStep === 1 ? '200ms' : '0ms',
pointerEvents: activeStep === 1 ? 'auto' : 'none'
2026-01-27 17:26:30 +08:00
}}
>
2026-01-29 16:23:10 +08:00
<CardBody className="p-8">
<div className="flex flex-row items-center justify-between mb-6">
<div className="flex flex-row gap-3 items-center">
<div className={`rounded-xl w-10 h-10 flex items-center justify-center ${
isDark ? 'bg-white' : 'bg-[#111827]'
}`}>
<Image
src="/icon1.svg"
alt="Portfolio"
width={24}
height={24}
style={{
filter: isDark ? 'none' : 'invert(1)'
}}
/>
</div>
<span
className={`font-domine text-base font-medium ${
isDark ? 'text-[#fafafa]' : 'text-[#111827]'
}`}
>
{t('how.simulator.title')}
</span>
2026-01-27 17:26:30 +08:00
</div>
2026-01-29 16:23:10 +08:00
<Chip className="bg-green-50 text-green-600 font-bold" size="sm">
+5.2% APY
</Chip>
2026-01-27 17:26:30 +08:00
</div>
2026-01-29 16:23:10 +08:00
<div className="mb-4">
<div className="flex flex-col gap-2">
<span
className={`font-domine text-sm ${
isDark ? 'text-[#71717a]' : 'text-[#9ca1af]'
}`}
>
{t('how.simulator.invest')}
</span>
<span
ref={investAmount.elementRef}
className={`font-domine text-3xl font-bold ${
isDark ? 'text-[#fafafa]' : 'text-[#111827]'
}`}
style={{
lineHeight: '120%',
letterSpacing: '-0.01em'
}}
>
${investAmount.count.toLocaleString()}
</span>
</div>
2026-01-27 17:26:30 +08:00
2026-01-29 16:23:10 +08:00
<div className={`mt-4 h-2 rounded-full relative ${
isDark ? 'bg-[#27272a]' : 'bg-[#e5e7eb]'
}`}>
<div className={`absolute left-1/2 top-1/2 -translate-x-1/2 -translate-y-1/2 w-4 h-4 rounded-full ${
isDark ? 'bg-white' : 'bg-[#111827]'
}`} />
</div>
2026-01-27 17:26:30 +08:00
</div>
2026-01-29 16:23:10 +08:00
<div className={`mt-6 pt-6 border-t ${
isDark ? 'border-[#27272a]' : 'border-[#e5e7eb]'
}`}>
2026-01-27 17:26:30 +08:00
<span
2026-01-29 16:23:10 +08:00
className={`font-domine text-sm block mb-2 ${
isDark ? 'text-[#71717a]' : 'text-[#9ca1af]'
}`}
2026-01-27 17:26:30 +08:00
>
2026-01-29 16:23:10 +08:00
{t('how.simulator.earn')}
2026-01-27 17:26:30 +08:00
</span>
2026-01-29 16:23:10 +08:00
<div className="flex flex-row gap-2 items-center">
<Image
src="/icon2.svg"
alt="Earn"
width={24}
height={24}
/>
<span
ref={earnAmount.elementRef}
className="text-green-600 font-domine text-3xl font-bold"
style={{
lineHeight: '120%',
letterSpacing: '-0.01em'
}}
>
+${earnAmount.count.toLocaleString()}
</span>
</div>
2026-01-27 17:26:30 +08:00
</div>
2026-01-29 16:23:10 +08:00
</CardBody>
</Card>
2026-01-28 17:55:01 +08:00
</>
2026-01-29 16:23:10 +08:00
<Card
className={`absolute left-0 top-[99px] w-full transition-all duration-700 ease-out ${
animate && activeStep === 2 ? 'opacity-100' : 'opacity-0'
} ${
isDark ? 'bg-[#18181b] border-[#27272a]' : 'bg-white border-[#f3f4f6]'
2026-01-28 17:55:01 +08:00
}`}
2026-01-29 16:23:10 +08:00
shadow="lg"
2026-01-28 17:55:01 +08:00
style={{
transform: animate && activeStep === 2
? 'rotate(3deg) translateX(0)'
: 'rotate(3deg) translateX(3rem)',
2026-01-28 17:55:01 +08:00
transformOrigin: '0 0',
transitionDelay: activeStep === 2 ? '200ms' : '0ms',
pointerEvents: activeStep === 2 ? 'auto' : 'none'
}}
>
2026-01-29 16:23:10 +08:00
<CardBody className="p-6 flex flex-col gap-6">
2026-01-28 17:55:01 +08:00
<div
2026-01-29 16:23:10 +08:00
className={`border-b pb-4 flex flex-row items-center justify-between w-full ${
isDark ? 'border-[#27272a]' : 'border-[#f3f4f6]'
}`}
2026-01-28 17:55:01 +08:00
>
2026-01-29 16:23:10 +08:00
<span className={`font-domine text-lg font-bold ${
isDark ? 'text-[#fafafa]' : 'text-[#000000]'
}`}>
2026-01-28 17:55:01 +08:00
Fund Market
</span>
2026-01-29 16:23:10 +08:00
<span className="text-[#059669] font-domine text-base font-bold">
2026-01-28 17:55:01 +08:00
Connect Wallet
</span>
</div>
<div className="flex flex-col gap-4 w-full">
2026-01-29 16:23:10 +08:00
<div className={`rounded-xl border p-4 flex flex-row gap-4 items-center h-24 ${
isDark ? 'bg-[#27272a] border-[#3f3f46]' : 'bg-[#f9fafb] border-[#f3f4f6]'
}`}>
<div className={`rounded-full w-12 h-12 flex items-center justify-center flex-shrink-0 ${
isDark ? 'bg-white' : 'bg-[#000000]'
}`}>
<span className={`font-domine text-base font-bold ${
isDark ? 'text-[#000000]' : 'text-white'
}`}>O</span>
2026-01-28 17:55:01 +08:00
</div>
<div className="flex flex-col gap-2 flex-1">
2026-01-29 16:23:10 +08:00
<div className={`rounded h-4 w-24 ${
isDark ? 'bg-[#3f3f46]' : 'bg-[#e5e7eb]'
}`} />
<div className={`rounded h-3 w-16 ${
isDark ? 'bg-[#52525b]' : 'bg-[#f3f4f6]'
}`} />
2026-01-28 17:55:01 +08:00
</div>
<div className="flex flex-col gap-2 items-end flex-shrink-0">
2026-01-29 16:23:10 +08:00
<div className={`rounded h-4 w-20 ${
isDark ? 'bg-[#3f3f46]' : 'bg-[#e5e7eb]'
}`} />
<span className="text-[#059669] font-domine text-base font-bold">
2026-01-28 17:55:01 +08:00
APY 30.2%
</span>
</div>
</div>
2026-01-29 16:23:10 +08:00
<div className={`rounded-xl border p-4 flex flex-row gap-4 items-center h-24 opacity-60 ${
isDark ? 'bg-[#27272a] border-[#3f3f46]' : 'bg-[#f9fafb] border-[#f3f4f6]'
}`}>
<div className={`rounded-full w-12 h-12 flex-shrink-0 ${
isDark ? 'bg-[#52525b]' : 'bg-[#d1d5db]'
}`} />
2026-01-28 17:55:01 +08:00
<div className="flex flex-col gap-2 flex-1">
2026-01-29 16:23:10 +08:00
<div className={`rounded h-4 w-32 ${
isDark ? 'bg-[#3f3f46]' : 'bg-[#e5e7eb]'
}`} />
<div className={`rounded h-3 w-20 ${
isDark ? 'bg-[#52525b]' : 'bg-[#f3f4f6]'
}`} />
2026-01-28 17:55:01 +08:00
</div>
<div className="flex flex-col gap-2 items-end flex-shrink-0">
2026-01-29 16:23:10 +08:00
<div className={`rounded h-4 w-20 ${
isDark ? 'bg-[#3f3f46]' : 'bg-[#e5e7eb]'
}`} />
<span className="text-[#059669] font-domine text-base font-bold">
2026-01-28 17:55:01 +08:00
APY 15.2%
</span>
</div>
</div>
</div>
2026-01-29 16:23:10 +08:00
</CardBody>
</Card>
2026-01-28 17:55:01 +08:00
2026-01-29 16:23:10 +08:00
<Card
className={`absolute left-0 top-[99px] w-[520px] transition-all duration-700 ease-out ${
2026-01-28 17:55:01 +08:00
animate && activeStep === 3 ? 'opacity-100' : 'opacity-0'
2026-01-29 16:23:10 +08:00
} ${
isDark ? 'bg-[#18181b] border-[#27272a]' : 'bg-white border-[#f3f4f6]'
2026-01-28 17:55:01 +08:00
}`}
2026-01-29 16:23:10 +08:00
shadow="lg"
2026-01-28 17:55:01 +08:00
style={{
transform: animate && activeStep === 3
? 'rotate(3deg) translateX(0)'
: 'rotate(3deg) translateX(3rem)',
2026-01-28 17:55:01 +08:00
transformOrigin: '0 0',
transitionDelay: activeStep === 3 ? '200ms' : '0ms',
overflow: 'hidden',
pointerEvents: activeStep === 3 ? 'auto' : 'none'
}}
>
2026-01-29 16:23:10 +08:00
<CardBody className="p-6 flex flex-col gap-6">
<div className={`border-b pb-[17px] flex flex-row items-center justify-between ${
isDark ? 'border-[#27272a]' : 'border-[#f3f4f6]'
}`} style={{ width: '470px', height: '45px' }}>
<span className={`font-domine text-lg font-bold ${
isDark ? 'text-[#fafafa]' : 'text-[#000000]'
}`}>
2026-01-28 17:55:01 +08:00
Defi
</span>
2026-01-29 16:23:10 +08:00
<span className="text-[#059669] font-domine text-base font-bold">
2026-01-28 17:55:01 +08:00
+5.2% APY
</span>
</div>
{/* Cards Grid Container */}
<div
className="relative"
style={{
width: '466px',
height: '195px',
transform: 'rotate(-3deg)',
transformOrigin: '0 0',
overflow: 'hidden'
}}
>
{/* Container 1 */}
<div
className="absolute"
style={{
width: '135.53px',
height: '165.15px',
left: '8.58px',
top: '0.46px',
transform: 'rotate(3deg)',
transformOrigin: '0 0'
}}
>
<div className="bg-[#f9fafb] rounded-[12px] border border-[#f3f4f6] p-4 flex flex-col gap-4 items-center absolute" style={{ width: '134.91px', height: '165.18px', left: '0px', top: '0px' }}>
<div className="bg-[#000000] rounded-full w-12 h-12 flex items-center justify-center flex-shrink-0">
2026-01-29 16:23:10 +08:00
<span className="text-white font-domine text-[16px] font-bold leading-6">O</span>
2026-01-28 17:55:01 +08:00
</div>
<span
2026-01-29 16:23:10 +08:00
className="text-[#000000] font-domine text-[16px] font-bold text-center"
2026-01-28 17:55:01 +08:00
style={{ width: '124px', height: '17px', transform: 'rotate(-3deg)', transformOrigin: '0 0', display: 'flex', alignItems: 'center', justifyContent: 'center' }}
>
+10% APY
</span>
<div
className="bg-[#000000] rounded-lg px-4 py-2 flex items-center justify-center"
2026-01-28 17:55:01 +08:00
style={{ transform: 'rotate(-3deg)', transformOrigin: '0 0' }}
>
2026-01-29 16:23:10 +08:00
<span className="text-white font-domine text-[12px] font-bold leading-4">
2026-01-28 17:55:01 +08:00
Boost
</span>
</div>
</div>
</div>
{/* Container 2 */}
<div
className="absolute"
style={{
width: '135.53px',
height: '165.15px',
left: '160.18px',
top: '11.66px',
transform: 'rotate(3deg)',
transformOrigin: '0 0'
}}
>
<div className="bg-[#f9fafb] rounded-[12px] border border-[#f3f4f6] p-4 flex flex-col gap-4 items-center absolute" style={{ width: '134.91px', height: '165.18px', left: '0px', top: '0px' }}>
<div className="bg-[#000000] rounded-full w-12 h-12 flex items-center justify-center flex-shrink-0">
2026-01-29 16:23:10 +08:00
<span className="text-white font-domine text-[16px] font-bold leading-6">O</span>
2026-01-28 17:55:01 +08:00
</div>
<span
2026-01-29 16:23:10 +08:00
className="text-[#000000] font-domine text-[16px] font-bold text-center"
2026-01-28 17:55:01 +08:00
style={{ width: '124px', height: '17px', transform: 'rotate(-3deg)', transformOrigin: '0 0', display: 'flex', alignItems: 'center', justifyContent: 'center' }}
>
+10% APY
</span>
<div
className="bg-[#000000] rounded-lg px-4 py-2 flex items-center justify-center"
2026-01-28 17:55:01 +08:00
style={{ transform: 'rotate(-3deg)', transformOrigin: '0 0' }}
>
2026-01-29 16:23:10 +08:00
<span className="text-white font-domine text-[12px] font-bold leading-4">
2026-01-28 17:55:01 +08:00
Boost
</span>
</div>
</div>
</div>
{/* Container 3 */}
<div
className="absolute"
style={{
width: '135.53px',
height: '165.15px',
left: '312.18px',
top: '19.66px',
transform: 'rotate(3deg)',
transformOrigin: '0 0'
}}
>
<div className="bg-[#f9fafb] rounded-[12px] border border-[#f3f4f6] p-4 flex flex-col gap-4 items-center absolute" style={{ width: '134.91px', height: '165.18px', left: '0px', top: '0px' }}>
<div className="bg-[#000000] rounded-full w-12 h-12 flex items-center justify-center flex-shrink-0">
2026-01-29 16:23:10 +08:00
<span className="text-white font-domine text-[16px] font-bold leading-6">O</span>
2026-01-28 17:55:01 +08:00
</div>
<span
2026-01-29 16:23:10 +08:00
className="text-[#000000] font-domine text-[16px] font-bold text-center"
2026-01-28 17:55:01 +08:00
style={{ width: '124px', height: '17px', transform: 'rotate(-3deg)', transformOrigin: '0 0', display: 'flex', alignItems: 'center', justifyContent: 'center' }}
>
+10% APY
</span>
<div
className="bg-[#000000] rounded-lg px-4 py-2 flex items-center justify-center"
2026-01-28 17:55:01 +08:00
style={{ transform: 'rotate(-3deg)', transformOrigin: '0 0' }}
>
2026-01-29 16:23:10 +08:00
<span className="text-white font-domine text-[12px] font-bold leading-4">
2026-01-28 17:55:01 +08:00
Boost
</span>
</div>
</div>
</div>
{/* Container 4 - with SWAP button */}
<div
className="absolute"
style={{
width: '135.53px',
height: '165.15px',
left: '160.18px',
top: '11.66px',
transform: 'rotate(3deg)',
transformOrigin: '0 0'
}}
>
<div className="bg-[#f9fafb] rounded-[12px] border border-[#f3f4f6] p-4 flex flex-col gap-4 items-center absolute" style={{ width: '134.91px', height: '165.18px', left: '0px', top: '0px' }}>
<div className="bg-[#000000] rounded-full w-12 h-12 flex items-center justify-center flex-shrink-0">
2026-01-29 16:23:10 +08:00
<span className="text-white font-domine text-[16px] font-bold leading-6">O</span>
2026-01-28 17:55:01 +08:00
</div>
<span
2026-01-29 16:23:10 +08:00
className="text-[#000000] font-domine text-[16px] font-bold text-center"
2026-01-28 17:55:01 +08:00
style={{ width: '124px', height: '17px', transform: 'rotate(-3deg)', transformOrigin: '0 0', display: 'flex', alignItems: 'center', justifyContent: 'center' }}
>
Get USDC
</span>
<div
className="bg-[#000000] rounded-lg px-4 py-2 flex items-center justify-center"
2026-01-28 17:55:01 +08:00
style={{ transform: 'rotate(-3deg)', transformOrigin: '0 0' }}
>
2026-01-29 16:23:10 +08:00
<span className="text-white font-domine text-[12px] font-bold leading-4">
2026-01-28 17:55:01 +08:00
SWAP
</span>
</div>
</div>
</div>
{/* Container 5 - with LP button */}
<div
className="absolute"
style={{
width: '135.53px',
height: '165.15px',
left: '312.18px',
top: '19.66px',
transform: 'rotate(3deg)',
transformOrigin: '0 0'
}}
>
<div className="bg-[#f9fafb] rounded-[12px] border border-[#f3f4f6] p-4 flex flex-col gap-4 items-center absolute" style={{ width: '134.91px', height: '165.18px', left: '0px', top: '0px' }}>
<div className="bg-[#000000] rounded-full w-12 h-12 flex items-center justify-center flex-shrink-0">
2026-01-29 16:23:10 +08:00
<span className="text-white font-domine text-[16px] font-bold leading-6">O</span>
2026-01-28 17:55:01 +08:00
</div>
<span
2026-01-29 16:23:10 +08:00
className="text-[#000000] font-domine text-[16px] font-bold text-center"
2026-01-28 17:55:01 +08:00
style={{ width: '124px', height: '17px', transform: 'rotate(-3deg)', transformOrigin: '0 0', display: 'flex', alignItems: 'center', justifyContent: 'center' }}
>
10% APY
</span>
<div
className="bg-[#000000] rounded-lg px-4 py-2 flex items-center justify-center"
2026-01-28 17:55:01 +08:00
style={{ transform: 'rotate(-3deg)', transformOrigin: '0 0' }}
>
2026-01-29 16:23:10 +08:00
<span className="text-white font-domine text-[12px] font-bold leading-4">
2026-01-28 17:55:01 +08:00
LP
</span>
</div>
</div>
</div>
</div>
2026-01-29 16:23:10 +08:00
</CardBody>
</Card>
2026-01-27 17:26:30 +08:00
</div>
</div>
</section>
);
}