Some checks failed
Build & Deploy / 🔍 Prepare (push) Successful in 5s
Build & Deploy / 🧪 QA (push) Failing after 34s
Build & Deploy / 🏗️ Build (push) Successful in 1m41s
Build & Deploy / 🚀 Deploy (push) Has been skipped
Build & Deploy / 🩺 Health Check (push) Has been skipped
Build & Deploy / 🔔 Notify (push) Successful in 2s
- Resized and compressed oversized logo (204KB -> 21KB) - Optimized large media images (hs-kabel.png, contact-hero.jpg) - Implemented dynamic lazy-loading for home page sections - Tuned Sentry traces sample rate (1.0 -> 0.1) - Refined font loading and fixed redundant analytics tracking
81 lines
3.1 KiB
TypeScript
81 lines
3.1 KiB
TypeScript
"use client";
|
|
|
|
import React from "react";
|
|
import Link from "next/link";
|
|
import { ChevronRight, Zap, Shield, BarChart3 } from "lucide-react";
|
|
import { Reveal } from "../Reveal";
|
|
import { Counter } from "../Counter";
|
|
import { TechBackground } from "../TechBackground";
|
|
import { useTranslations } from "next-intl";
|
|
|
|
export const PortfolioSection = () => {
|
|
const t = useTranslations("Index");
|
|
|
|
return (
|
|
<section className="bg-slate-950 text-accent relative overflow-hidden">
|
|
<TechBackground />
|
|
<div className="container-custom relative z-10">
|
|
<Counter value={2} className="section-number !text-white/5" />
|
|
<Reveal className="flex flex-col md:flex-row md:items-end justify-between gap-8 mb-16">
|
|
<div>
|
|
<span className="text-accent font-bold uppercase tracking-widest text-sm mb-4 block">
|
|
{t("portfolio.tag")}
|
|
</span>
|
|
<h2 className="text-3xl md:text-5xl font-bold text-white mb-6">
|
|
{t("portfolio.title")}
|
|
</h2>
|
|
<p className="text-slate-400 text-base md:text-xl">
|
|
{t("portfolio.description")}
|
|
</p>
|
|
</div>
|
|
<Link
|
|
href="/ueber-uns"
|
|
className="text-accent font-bold flex items-center gap-2 hover:text-white transition-colors group"
|
|
>
|
|
{t("portfolio.link")}{" "}
|
|
<ChevronRight
|
|
className="transition-transform group-hover:translate-x-1"
|
|
size={20}
|
|
/>
|
|
</Link>
|
|
</Reveal>
|
|
|
|
<div className="grid grid-cols-1 md:grid-cols-3 gap-8">
|
|
{[
|
|
{
|
|
icon: <Zap size={32} />,
|
|
title: t("portfolio.items.beratung.title"),
|
|
desc: t("portfolio.items.beratung.desc"),
|
|
},
|
|
{
|
|
icon: <Shield size={32} />,
|
|
title: t("portfolio.items.begleitung.title"),
|
|
desc: t("portfolio.items.begleitung.desc"),
|
|
},
|
|
{
|
|
icon: <BarChart3 size={32} />,
|
|
title: t("portfolio.items.beschaffung.title"),
|
|
desc: t("portfolio.items.beschaffung.desc"),
|
|
},
|
|
].map((item, i) => (
|
|
<Reveal key={i} delay={i * 0.1}>
|
|
<div className="bg-white/5 p-8 rounded-2xl border border-white/10 group hover:-translate-y-2 transition-[box-shadow,transform] duration-300 h-full relative overflow-hidden">
|
|
<div className="absolute top-0 right-0 w-16 h-16 bg-accent/5 -mr-8 -mt-8 rounded-full group-hover:bg-accent/10 transition-colors" />
|
|
<div className="w-16 h-16 rounded-2xl bg-accent/10 text-accent flex items-center justify-center mb-8 group-hover:bg-accent group-hover:text-white transition-colors relative z-10">
|
|
{item.icon}
|
|
</div>
|
|
<h3 className="text-2xl font-bold text-white mb-4 relative z-10">
|
|
{item.title}
|
|
</h3>
|
|
<p className="text-slate-400 leading-relaxed relative z-10">
|
|
{item.desc}
|
|
</p>
|
|
</div>
|
|
</Reveal>
|
|
))}
|
|
</div>
|
|
</div>
|
|
</section>
|
|
);
|
|
};
|