Some checks failed
🚀 Build & Deploy / 🔍 Prepare (push) Successful in 4s
🚀 Build & Deploy / 🚀 Deploy (push) Has been cancelled
🚀 Build & Deploy / 🧪 Post-Deploy Verification (push) Has been cancelled
🚀 Build & Deploy / 🏗️ Build (push) Has been cancelled
🚀 Build & Deploy / 🔔 Notify (push) Has been cancelled
🚀 Build & Deploy / 🧪 QA (push) Has been cancelled
117 lines
4.0 KiB
TypeScript
117 lines
4.0 KiB
TypeScript
"use client";
|
|
|
|
import React from "react";
|
|
import { motion } from "framer-motion";
|
|
import { Reveal } from "@/components/Reveal";
|
|
import { Counter } from "@/components/Counter";
|
|
import { TechBackground } from "@/components/TechBackground";
|
|
import { Button } from "@/components/Button";
|
|
import { useTranslations } from "next-intl";
|
|
|
|
interface CTASectionProps {
|
|
title?: string;
|
|
subtitle?: string;
|
|
buttonText?: string;
|
|
}
|
|
|
|
export const CTASection = ({
|
|
title,
|
|
subtitle,
|
|
buttonText,
|
|
}: CTASectionProps) => {
|
|
const t = useTranslations("Index");
|
|
|
|
const displayTitle = title || t("cta.title");
|
|
const displaySubtitle = subtitle || t("cta.subtitle");
|
|
const displayButtonText = buttonText || t("cta.button");
|
|
|
|
return (
|
|
<section className="bg-white relative overflow-hidden">
|
|
<TechBackground />
|
|
{/* Decorative Background Elements */}
|
|
<div className="absolute top-0 left-0 w-64 h-64 bg-accent/5 rounded-full blur-3xl -translate-x-1/2 -translate-y-1/2" />
|
|
<div className="absolute bottom-0 right-0 w-96 h-96 bg-primary/5 rounded-full blur-3xl translate-x-1/2 translate-y-1/2" />
|
|
|
|
<div className="container-custom relative z-10">
|
|
<Counter value={5} className="section-number" />
|
|
<Reveal>
|
|
<div className="relative rounded-3xl md:rounded-[2.5rem] bg-primary p-8 md:p-24 overflow-hidden group">
|
|
{/* Corner Accents */}
|
|
<div className="tech-corner top-8 left-8 border-t-2 border-l-2" />
|
|
<div className="tech-corner top-8 right-8 border-t-2 border-r-2" />
|
|
<div className="tech-corner bottom-8 left-8 border-b-2 border-l-2" />
|
|
<div className="tech-corner bottom-8 right-8 border-b-2 border-r-2" />
|
|
|
|
<div className="absolute top-0 right-0 w-1/2 h-full opacity-10 pointer-events-none">
|
|
<svg
|
|
viewBox="0 0 400 400"
|
|
fill="none"
|
|
xmlns="http://www.w3.org/2000/svg"
|
|
>
|
|
<motion.circle
|
|
animate={{ r: [400, 410, 400], opacity: [0.1, 0.2, 0.1] }}
|
|
transition={{
|
|
duration: 5,
|
|
repeat: Infinity,
|
|
ease: "easeInOut",
|
|
}}
|
|
cx="400"
|
|
cy="0"
|
|
r="400"
|
|
stroke="white"
|
|
strokeWidth="2"
|
|
/>
|
|
<motion.circle
|
|
animate={{ r: [300, 310, 300], opacity: [0.1, 0.2, 0.1] }}
|
|
transition={{
|
|
duration: 4,
|
|
repeat: Infinity,
|
|
ease: "easeInOut",
|
|
delay: 0.5,
|
|
}}
|
|
cx="400"
|
|
cy="0"
|
|
r="300"
|
|
stroke="white"
|
|
strokeWidth="2"
|
|
/>
|
|
<motion.circle
|
|
animate={{ r: [200, 210, 200], opacity: [0.1, 0.2, 0.1] }}
|
|
transition={{
|
|
duration: 3,
|
|
repeat: Infinity,
|
|
ease: "easeInOut",
|
|
delay: 1,
|
|
}}
|
|
cx="400"
|
|
cy="0"
|
|
r="200"
|
|
stroke="white"
|
|
strokeWidth="2"
|
|
/>
|
|
</svg>
|
|
</div>
|
|
|
|
<div className="relative z-10">
|
|
<h2 className="text-3xl md:text-6xl font-bold text-white mb-6 md:mb-8 leading-tight">
|
|
{displayTitle}
|
|
</h2>
|
|
<p className="text-slate-300 text-lg md:text-xl mb-8 md:mb-12 leading-relaxed">
|
|
{displaySubtitle}
|
|
</p>
|
|
<Button
|
|
href="/kontakt"
|
|
variant="accent"
|
|
showArrow
|
|
className="w-full sm:w-auto !px-10 !py-5 text-lg"
|
|
>
|
|
{displayButtonText}
|
|
</Button>
|
|
</div>
|
|
</div>
|
|
</Reveal>
|
|
</div>
|
|
</section>
|
|
);
|
|
};
|