{badge}
} {title && ( -
+
{title}
)}
diff --git a/components/blocks/CertificatesBlock.tsx b/components/blocks/CertificatesBlock.tsx
index 3061ff75a..5377e130b 100644
--- a/components/blocks/CertificatesBlock.tsx
+++ b/components/blocks/CertificatesBlock.tsx
@@ -99,12 +99,12 @@ export function CertificatesBlock({ badge, title, description, certificates = de
if (!isMounted) {
return (
-
+
{!hideHeader && (
{badgeText}
- {titleText}
+ {titleText}
{descriptionText}
)}
@@ -114,7 +114,7 @@ export function CertificatesBlock({ badge, title, description, certificates = de
}
return (
-
+
{/* Background Accents */}
@@ -129,7 +129,7 @@ export function CertificatesBlock({ badge, title, description, certificates = de
transition={{ duration: 0.5 }}
>
{badgeText}
- {titleText}
+ {titleText}
{descriptionText}
{badgeText}
-{titleText}
+{titleText}
{descriptionText}
{badgeText}
-{titleText}
+{titleText}
{descriptionText}
+
{finalTitle}
{badge}
-{title}
+{title}
{badge}
-{title}
+{title}
+
{item.title}
{item.description && (
diff --git a/components/blocks/ContactSection.tsx b/components/blocks/ContactSection.tsx
index ca28ba92d..1b58d0b43 100644
--- a/components/blocks/ContactSection.tsx
+++ b/components/blocks/ContactSection.tsx
@@ -52,7 +52,7 @@ export const ContactSection: React.FC = (props) => {
viewport={{ once: true, margin: "-50px" }}
>
Direktkontakt
- Wir sind für Sie da.
+ Wir sind für Sie da.
Haben Sie Fragen zu unseren Leistungen oder möchten Sie ein konkretes Projekt besprechen? Rufen Sie uns an oder schreiben Sie uns eine E-Mail.
diff --git a/components/blocks/DataGridPulse.tsx b/components/blocks/DataGridPulse.tsx
index 54101e03c..16790a2d6 100644
--- a/components/blocks/DataGridPulse.tsx
+++ b/components/blocks/DataGridPulse.tsx
@@ -7,7 +7,7 @@ import { useLocale } from 'next-intl';
export function DataGridPulse() {
const locale = useLocale();
return (
-
+
{/* Blueprint grid background */}
-
+
372.161m
diff --git a/components/blocks/DeepDrillAnimation.tsx b/components/blocks/DeepDrillAnimation.tsx
index ceea70ce6..24d913701 100644
--- a/components/blocks/DeepDrillAnimation.tsx
+++ b/components/blocks/DeepDrillAnimation.tsx
@@ -16,13 +16,13 @@ export function DeepDrillAnimation() {
const drillDepth = useTransform(scrollYProgress, [0, 1], ["0%", "100%"]);
return (
-
+
-
+
{locale === 'en' ? 'Precision in Depth' : 'Präzision in der Tiefe'}
@@ -50,8 +50,8 @@ export function DeepDrillAnimation() {
transition={{ duration: 0.8 }}
className="flex flex-col items-center"
>
-
- 102.771m
+
+ 102.771m
{locale === 'en' ? 'Drilled distance since 2023' : 'Gebohrte Strecke seit 2023'}
diff --git a/components/blocks/FaqBlock.tsx b/components/blocks/FaqBlock.tsx
index a59afada3..12afa0919 100644
--- a/components/blocks/FaqBlock.tsx
+++ b/components/blocks/FaqBlock.tsx
@@ -29,7 +29,7 @@ export const FaqBlock: React.FC = ({
{subtitle}
)}
-
+
{title}
diff --git a/components/blocks/GrowthChart.tsx b/components/blocks/GrowthChart.tsx
index fecce3aa8..2fbc90e70 100644
--- a/components/blocks/GrowthChart.tsx
+++ b/components/blocks/GrowthChart.tsx
@@ -23,9 +23,9 @@ export function GrowthChart() {
const maxVal = 163470; // Highest value for scaling
return (
-
+
- {t('title')}
+ {t('title')}
{t('subtitle')}
diff --git a/components/blocks/HeroSection.tsx b/components/blocks/HeroSection.tsx
index ffd231a5f..13cbc462d 100644
--- a/components/blocks/HeroSection.tsx
+++ b/components/blocks/HeroSection.tsx
@@ -44,7 +44,7 @@ export const HeroSection: React.FC = (props) => {
return (
{bgSrc && (
+
{/* Background color while video loads */}
@@ -88,8 +88,8 @@ export function HeroVideo(props: HeroVideoProps) {
transition={{ duration: 1.2, ease: [0.16, 1, 0.3, 1] }}
>
Kabeltiefbau').replace(/KABELNETZBAU|Kabelnetzbau/g, 'Kabelnetzbau').replace(/\\n|\n/g, '
') }}
+ className="font-heading font-bold text-3xl sm:text-4xl md:text-6xl lg:text-8xl text-white mb-6 uppercase tracking-tight drop-shadow-lg"
+ dangerouslySetInnerHTML={{ __html: title.replace(/KABELNETZBAU|Kabelnetzbau/g, 'Kabelnetzbau').replace(/KABELNETZBAU|Kabelnetzbau/g, 'Kabelnetzbau').replace(/\\n|\n/g, '
') }}
/>
diff --git a/components/blocks/InteractiveGermanyMap.tsx b/components/blocks/InteractiveGermanyMap.tsx
index 2f7f837d0..0ffd8021f 100644
--- a/components/blocks/InteractiveGermanyMap.tsx
+++ b/components/blocks/InteractiveGermanyMap.tsx
@@ -38,6 +38,20 @@ export function InteractiveGermanyMap({
hideStandorte = false
}: InteractiveGermanyMapProps) {
const [activeLocation, setActiveLocation] = useState(null);
+ const [hoverTimeout, setHoverTimeout] = useState(null);
+
+ const handleMouseEnter = (loc: Location) => {
+ if (hoverTimeout) clearTimeout(hoverTimeout);
+ setActiveLocation(loc);
+ };
+
+ const handleMouseLeave = () => {
+ const timeout = setTimeout(() => {
+ setActiveLocation(null);
+ }, 200);
+ setHoverTimeout(timeout);
+ };
+
const router = useRouter();
const pathname = usePathname();
const locale = useLocale();
@@ -68,7 +82,7 @@ export function InteractiveGermanyMap({
}, [locations, hideStandorte]);
return (
-
+
{/* Animated Border Glow */}
{!isHero && }
@@ -87,11 +101,11 @@ export function InteractiveGermanyMap({
{isHero ? (
-
+
{finalTitle}
) : (
-
+
{finalTitle}
)}
@@ -107,7 +121,7 @@ export function InteractiveGermanyMap({
-
+
{stat.value}{stat.suffix}
@@ -157,8 +171,9 @@ export function InteractiveGermanyMap({
top: `${loc.y}%`,
transform: 'translate(-50%, -50%)',
}}
- onMouseEnter={() => setActiveLocation(loc)}
- onMouseLeave={() => setActiveLocation(null)}
+ onMouseEnter={() => handleMouseEnter(loc)}
+ onMouseLeave={handleMouseLeave}
+ onClick={() => handleMouseEnter(loc)}
>
@@ -176,14 +191,9 @@ export function InteractiveGermanyMap({
key={loc.id}
className={`absolute transform -translate-x-1/2 -translate-y-1/2 group/pin cursor-pointer w-16 h-16 flex items-center justify-center ${isActive ? 'z-[60]' : 'z-20'}`}
style={{ left: `${loc.x}%`, top: `${loc.y}%` }}
- onMouseEnter={() => setActiveLocation(loc)}
- onMouseLeave={() => setActiveLocation(null)}
- onClick={() => {
- if (loc.href) {
- const href = loc.href.startsWith('/') ? `/${locale}${loc.href}` : loc.href;
- router.push(href);
- }
- }}
+ onMouseEnter={() => handleMouseEnter(loc)}
+ onMouseLeave={handleMouseLeave}
+ onClick={() => handleMouseEnter(loc)}
>
{/* Ping Animation for HQ / Branch */}
{(isHQ || isBranch) && (
@@ -218,12 +228,14 @@ export function InteractiveGermanyMap({
animate={{ opacity: 1, y: 0, scale: 1 }}
exit={{ opacity: 0, y: 10, scale: 0.95 }}
transition={{ duration: 0.2 }}
- className="absolute z-[9999] pointer-events-none"
+ className="absolute z-[9999] pointer-events-auto"
style={{
left: `${activeLocation.x}%`,
top: `${activeLocation.y}%`,
transform: activeLocation.x < 50 ? 'translate(20px, -50%)' : 'translate(calc(-100% - 20px), -50%)',
}}
+ onMouseEnter={() => handleMouseEnter(activeLocation)}
+ onMouseLeave={handleMouseLeave}
>
@@ -284,10 +296,14 @@ export function InteractiveGermanyMap({
)}
{activeLocation.href && (activeLocation.type === 'hq' || activeLocation.type === 'branch') && (
-
+ e.stopPropagation()}
+ >
{t('learnMore')}
-
+
)}
diff --git a/components/blocks/JobListingBlock.tsx b/components/blocks/JobListingBlock.tsx
index d0f1359a7..d7c31b65f 100644
--- a/components/blocks/JobListingBlock.tsx
+++ b/components/blocks/JobListingBlock.tsx
@@ -71,13 +71,13 @@ export const JobListingBlock = (props: JobListingBlockProps) => {
{showFairs && (
-
+
{fairsTitle}
@@ -182,7 +182,7 @@ export const JobListingBlock = (props: JobListingBlockProps) => {
whileInView={{ opacity: 1, x: 0 }}
viewport={{ once: true, margin: "-100px" }}
transition={{ duration: 0.8, ease: [0.16, 1, 0.3, 1] as const }}
- className="font-heading font-extrabold text-4xl text-neutral-dark mb-8"
+ className="font-heading font-extrabold text-3xl md:text-4xl text-neutral-dark mb-6 md:mb-8"
>
{title}
diff --git a/components/blocks/ReferencesSlider.test.tsx b/components/blocks/ReferencesSlider.test.tsx
index a287df4b2..4a8cd039c 100644
--- a/components/blocks/ReferencesSlider.test.tsx
+++ b/components/blocks/ReferencesSlider.test.tsx
@@ -34,7 +34,7 @@ describe('ReferencesSlider TDD', () => {
id: '1',
title: 'Referenz Projekt Eins',
slug: 'referenz-projekt-eins',
- category: 'Kabeltiefbau',
+ category: 'Kabelnetzbau',
},
{
id: '2',
diff --git a/components/blocks/ReferencesSlider.tsx b/components/blocks/ReferencesSlider.tsx
index 675751263..43ddb3fc4 100644
--- a/components/blocks/ReferencesSlider.tsx
+++ b/components/blocks/ReferencesSlider.tsx
@@ -94,20 +94,21 @@ export function ReferencesSlider(props: ReferencesSliderProps) {
return (
-
+
{badge}
- {title}
+ {title}
-
+
{description}
-
+
+
{/* Massive Watermark Numbers */}
-
+
{locale === 'en' ? (
<>An infrastructure
that connects the country.>
) : (
@@ -46,7 +46,7 @@ export function ScaleOfImpact() {
)}
-
+
{locale === 'en'
? "We don't just talk about the energy transition. We build it. In the last 36 months alone, we have completed a route that stretches from our headquarters in Guben all the way to Munich."
: "Wir sprechen nicht nur über die Energiewende. Wir bauen sie. Allein in den letzten 36 Monaten haben wir eine Strecke realisiert, die von unserem Hauptsitz in Guben bis nach München reicht."
@@ -54,7 +54,7 @@ export function ScaleOfImpact() {
{/* Abstract SVG Line Animation */}
-
+
diff --git a/components/blocks/DeepDrillAnimation.tsx b/components/blocks/DeepDrillAnimation.tsx index ceea70ce6..24d913701 100644 --- a/components/blocks/DeepDrillAnimation.tsx +++ b/components/blocks/DeepDrillAnimation.tsx @@ -16,13 +16,13 @@ export function DeepDrillAnimation() { const drillDepth = useTransform(scrollYProgress, [0, 1], ["0%", "100%"]); return ( -
+
{locale === 'en' ? 'Precision in Depth' : 'Präzision in der Tiefe'}
@@ -50,8 +50,8 @@ export function DeepDrillAnimation() { transition={{ duration: 0.8 }} className="flex flex-col items-center" > -
+
{title}
{t('title')}
+{t('title')}
{t('subtitle')}
Kabeltiefbau').replace(/KABELNETZBAU|Kabelnetzbau/g, 'Kabelnetzbau').replace(/\\n|\n/g, '
') }}
+ className="font-heading font-bold text-3xl sm:text-4xl md:text-6xl lg:text-8xl text-white mb-6 uppercase tracking-tight drop-shadow-lg"
+ dangerouslySetInnerHTML={{ __html: title.replace(/KABELNETZBAU|Kabelnetzbau/g, 'Kabelnetzbau').replace(/KABELNETZBAU|Kabelnetzbau/g, 'Kabelnetzbau').replace(/\\n|\n/g, '
') }}
/>
diff --git a/components/blocks/InteractiveGermanyMap.tsx b/components/blocks/InteractiveGermanyMap.tsx
index 2f7f837d0..0ffd8021f 100644
--- a/components/blocks/InteractiveGermanyMap.tsx
+++ b/components/blocks/InteractiveGermanyMap.tsx
@@ -38,6 +38,20 @@ export function InteractiveGermanyMap({
hideStandorte = false
}: InteractiveGermanyMapProps) {
const [activeLocation, setActiveLocation] = useState
+
+
{locale === 'en'
? "We don't just talk about the energy transition. We build it. In the last 36 months alone, we have completed a route that stretches from our headquarters in Guben all the way to Munich."
: "Wir sprechen nicht nur über die Energiewende. Wir bauen sie. Allein in den letzten 36 Monaten haben wir eine Strecke realisiert, die von unserem Hauptsitz in Guben bis nach München reicht."
@@ -54,7 +54,7 @@ export function ScaleOfImpact() {
+
{finalTitle}
) : (
-
+
{finalTitle}
)}
@@ -107,7 +121,7 @@ export function InteractiveGermanyMap({
{badge}
- {title}
+ {title}
+
{locale === 'en' ? (
<>An infrastructure
-
that connects the country.>
) : (
@@ -46,7 +46,7 @@ export function ScaleOfImpact() {
)}