diff --git a/components/blocks/CompetenceBentoGrid.tsx b/components/blocks/CompetenceBentoGrid.tsx
index 204410f00..8b411f3fc 100644
--- a/components/blocks/CompetenceBentoGrid.tsx
+++ b/components/blocks/CompetenceBentoGrid.tsx
@@ -7,8 +7,8 @@ import { useState, useEffect } from 'react';
import { Button } from '@/components/ui/Button';
import { HoverShineOverlay } from '@/components/ui/HoverShineOverlay';
import { StratumLines } from '@/components/ui/decorations/StratumLines';
-import { AbstractBore } from '@/components/ui/decorations/AbstractBore';
-import { AbstractTrench } from '@/components/ui/decorations/AbstractTrench';
+import { HDDBoreAnimation } from '@/components/ui/decorations/HDDBoreAnimation';
+import { TrenchLayingAnimation } from '@/components/ui/decorations/TrenchLayingAnimation';
interface CompetenceBentoGridProps {
badge?: string;
@@ -170,10 +170,10 @@ export function CompetenceBentoGrid(props: CompetenceBentoGridProps) {
})}
- {/* Minimalist Abstract Drilling */}
-
- {/* Minimalist Abstract Trenching */}
-
+ {/* Content-Aware Animation: HDD Drilling */}
+
+ {/* Content-Aware Animation: Trenching */}
+
);
}
diff --git a/components/blocks/HeroSection.tsx b/components/blocks/HeroSection.tsx
index a458c50ff..60dda211f 100644
--- a/components/blocks/HeroSection.tsx
+++ b/components/blocks/HeroSection.tsx
@@ -3,8 +3,8 @@ import Image from 'next/image';
import Reveal from '@/components/Reveal';
import { Badge, Container, Heading } from '@/components/ui';
import { Button } from '@/components/ui/Button';
-import { AbstractBore } from '@/components/ui/decorations/AbstractBore';
-import { AbstractTrench } from '@/components/ui/decorations/AbstractTrench';
+import { HDDBoreAnimation } from '@/components/ui/decorations/HDDBoreAnimation';
+import { TrenchLayingAnimation } from '@/components/ui/decorations/TrenchLayingAnimation';
export interface HeroSectionProps {
title: string;
@@ -72,10 +72,10 @@ export const HeroSection: React.FC = (props) => {
)}
- {/* Minimalist Abstract Drilling (HDD) */}
-
- {/* Minimalist Abstract Trenching */}
-
+ {/* Content-Aware Animation: HDD Drilling & Pipe Pullback */}
+
+ {/* Content-Aware Animation: Trench Cutting & Pipe Laying */}
+
);
diff --git a/components/blocks/HeroVideo.tsx b/components/blocks/HeroVideo.tsx
index e4e34916b..821f6b998 100644
--- a/components/blocks/HeroVideo.tsx
+++ b/components/blocks/HeroVideo.tsx
@@ -4,7 +4,7 @@ import { Button } from '@/components/ui/Button';
import Image from 'next/image';
import { motion, AnimatePresence } from 'framer-motion';
import { useState, useEffect } from 'react';
-import { AbstractBore } from '@/components/ui/decorations/AbstractBore';
+import { HDDBoreAnimation } from '@/components/ui/decorations/HDDBoreAnimation';
interface HeroVideoProps {
data?: any;
@@ -109,8 +109,8 @@ export function HeroVideo(props: HeroVideoProps) {
- {/* Minimalist Abstract Drilling */}
-
+ {/* Content-Aware Animation: HDD Drilling */}
+
);
}
diff --git a/components/blocks/ReferencesSlider.tsx b/components/blocks/ReferencesSlider.tsx
index 4bd9a67fe..c7c38125a 100644
--- a/components/blocks/ReferencesSlider.tsx
+++ b/components/blocks/ReferencesSlider.tsx
@@ -5,8 +5,8 @@ import { motion } from 'framer-motion';
import Link from 'next/link';
import Image from 'next/image';
import { HoverShineOverlay } from '@/components/ui/HoverShineOverlay';
-import { AbstractBore } from '@/components/ui/decorations/AbstractBore';
-import { AbstractTrench } from '@/components/ui/decorations/AbstractTrench';
+import { HDDBoreAnimation } from '@/components/ui/decorations/HDDBoreAnimation';
+import { TrenchLayingAnimation } from '@/components/ui/decorations/TrenchLayingAnimation';
export interface Reference {
id: string;
@@ -153,10 +153,10 @@ export function ReferencesSlider(props: ReferencesSliderProps) {
- {/* Minimalist Abstract Drilling */}
-
- {/* Minimalist Abstract Trenching */}
-
+ {/* Content-Aware Animation: HDD Drilling */}
+
+ {/* Content-Aware Animation: Trenching */}
+
);
}
diff --git a/components/blocks/ServiceDetailGrid.tsx b/components/blocks/ServiceDetailGrid.tsx
index 6ada1c18f..121bc1d02 100644
--- a/components/blocks/ServiceDetailGrid.tsx
+++ b/components/blocks/ServiceDetailGrid.tsx
@@ -3,7 +3,7 @@
import * as React from 'react';
import { motion, Variants } from 'framer-motion';
import { HoverShineOverlay } from '@/components/ui/HoverShineOverlay';
-import { AbstractTrench } from '@/components/ui/decorations/AbstractTrench';
+import { TrenchLayingAnimation } from '@/components/ui/decorations/TrenchLayingAnimation';
export interface ServicePanelData {
id: string;
@@ -230,8 +230,8 @@ export function ServiceDetailGrid({
})}
- {/* Minimalist Abstract Trenching */}
-
+ {/* Content-Aware Animation: Trenching */}
+
);
}
diff --git a/components/blocks/SubCompanyTiles.tsx b/components/blocks/SubCompanyTiles.tsx
index 46ea0966b..845bb183b 100644
--- a/components/blocks/SubCompanyTiles.tsx
+++ b/components/blocks/SubCompanyTiles.tsx
@@ -4,8 +4,8 @@ import * as React from 'react';
import { motion, Variants } from 'framer-motion';
import Image from 'next/image';
import { HoverShineOverlay } from '@/components/ui/HoverShineOverlay';
-import { AbstractBore } from '@/components/ui/decorations/AbstractBore';
-import { AbstractTrench } from '@/components/ui/decorations/AbstractTrench';
+import { HDDBoreAnimation } from '@/components/ui/decorations/HDDBoreAnimation';
+import { TrenchLayingAnimation } from '@/components/ui/decorations/TrenchLayingAnimation';
interface SubCompanyTilesProps {
badge?: string;
@@ -199,10 +199,10 @@ export function SubCompanyTiles(props: SubCompanyTilesProps) {
})}
- {/* Minimalist Abstract Drilling */}
-
- {/* Minimalist Abstract Trenching */}
-
+ {/* Content-Aware Animation: HDD Drilling */}
+
+ {/* Content-Aware Animation: Trenching */}
+
);
}
diff --git a/components/layout/Footer.tsx b/components/layout/Footer.tsx
index 21d3f10b5..de53e52a7 100644
--- a/components/layout/Footer.tsx
+++ b/components/layout/Footer.tsx
@@ -4,8 +4,8 @@ import { useLocale } from 'next-intl';
import { ShieldCheck, Leaf, Lock, Accessibility, Zap } from 'lucide-react';
import { LanguageSwitcher } from './LanguageSwitcher';
import { StratumLines } from '@/components/ui/decorations/StratumLines';
-import { AbstractBore } from '@/components/ui/decorations/AbstractBore';
-import { AbstractTrench } from '@/components/ui/decorations/AbstractTrench';
+import { HDDBoreAnimation } from '@/components/ui/decorations/HDDBoreAnimation';
+import { TrenchLayingAnimation } from '@/components/ui/decorations/TrenchLayingAnimation';
interface CompanyInfo {
contactEmail: string;
@@ -153,10 +153,10 @@ export function Footer({ companyInfo }: FooterProps) {
High Performance
- {/* Minimalist Abstract Drilling */}
-
- {/* Minimalist Abstract Trenching */}
-
+ {/* Content-Aware Animation: HDD Drilling */}
+
+ {/* Content-Aware Animation: Trenching */}
+
{/* Abstract earth strata */}
diff --git a/components/providers/PageTransitionShutter.tsx b/components/providers/PageTransitionShutter.tsx
index 8e310d25b..5d9a00c76 100644
--- a/components/providers/PageTransitionShutter.tsx
+++ b/components/providers/PageTransitionShutter.tsx
@@ -13,25 +13,19 @@ export function PageTransitionShutter() {
{isTransitioning && (
- {/* Top organic wave edge */}
-
- {/* Bottom organic wave edge */}
-
- {/* Background bore arc (full width, bottom) */}
-
-
-
-
)}
diff --git a/components/ui/decorations/AbstractBore.tsx b/components/ui/decorations/AbstractBore.tsx
deleted file mode 100644
index c635c92c6..000000000
--- a/components/ui/decorations/AbstractBore.tsx
+++ /dev/null
@@ -1,71 +0,0 @@
-'use client';
-
-import { motion } from 'framer-motion';
-
-interface AbstractBoreProps {
- className?: string;
- invert?: boolean;
-}
-
-/**
- * AbstractBore
- *
- * Visualizes Horizontal Directional Drilling (HDD).
- * A smooth, parabolic underground arc. A beam of energy (the drill/cable)
- * travels along this path, fading in gently at the start and fading out at the end.
- * Purely abstract, no literal drill bits or circles.
- */
-export function AbstractBore({ className = '', invert = false }: AbstractBoreProps) {
- const color = invert ? 'rgba(10, 61, 40, 0.6)' : 'rgba(14, 122, 92, 0.6)';
- const glowColor = invert ? 'rgba(10, 61, 40, 1)' : 'rgba(20, 184, 138, 1)';
-
- // Parabolic path: Starts left, dips deep in the middle, comes up right
- const pathD = "M -100 50 C 200 50 300 250 500 250 C 700 250 800 50 1100 50";
- // The length of this cubic bezier is approx 1260
- const pathLength = 1260;
- // The length of the moving beam
- const beamLength = 200;
-
- return (
-
- {/* Subtle track background */}
-
-
- {/* Moving Energy Beam */}
-
-
- );
-}
diff --git a/components/ui/decorations/AbstractTrench.tsx b/components/ui/decorations/AbstractTrench.tsx
deleted file mode 100644
index 14686ebee..000000000
--- a/components/ui/decorations/AbstractTrench.tsx
+++ /dev/null
@@ -1,70 +0,0 @@
-'use client';
-
-import { motion } from 'framer-motion';
-
-interface AbstractTrenchProps {
- className?: string;
- invert?: boolean;
-}
-
-/**
- * AbstractTrench
- *
- * Visualizes open trench construction (Offene Bauweise / Graben).
- * A sharp, geometric profile representing a cut into the earth.
- * A beam of energy flows through the trench, hugging the sharp corners,
- * fading in and out at the horizontal edges.
- * Purely abstract, architectural styling.
- */
-export function AbstractTrench({ className = '', invert = false }: AbstractTrenchProps) {
- const color = invert ? 'rgba(10, 61, 40, 0.6)' : 'rgba(14, 122, 92, 0.6)';
- const glowColor = invert ? 'rgba(10, 61, 40, 1)' : 'rgba(20, 184, 138, 1)';
-
- // Geometric trench path: straight, 45-deg drop, straight bottom, 45-deg rise, straight
- const pathD = "M -100 50 L 300 50 L 350 200 L 650 200 L 700 50 L 1100 50";
- // Length of this polyline is approx 1260
- const pathLength = 1260;
- const beamLength = 250;
-
- return (
-
- {/* Subtle track background */}
-
-
- {/* Moving Energy Beam */}
-
-
- );
-}
diff --git a/components/ui/decorations/HDDBoreAnimation.tsx b/components/ui/decorations/HDDBoreAnimation.tsx
new file mode 100644
index 000000000..00a3841f0
--- /dev/null
+++ b/components/ui/decorations/HDDBoreAnimation.tsx
@@ -0,0 +1,93 @@
+'use client';
+
+import { motion } from 'framer-motion';
+
+interface HDDBoreAnimationProps {
+ className?: string;
+ invert?: boolean;
+}
+
+/**
+ * HDDBoreAnimation
+ *
+ * Visualizes Horizontal Directional Drilling (Spülbohren).
+ * 1. A segmented drill rod (Gestänge) pushes through a subterranean arc (Pilotbohrung).
+ * 2. It pulls back a thick, solid orange pipe (Rohreinzug).
+ *
+ * This directly ties to E-TIB's core services, visually representing the
+ * physical act of laying a conduit pipe under an obstacle.
+ */
+export function HDDBoreAnimation({ className = '', invert = false }: HDDBoreAnimationProps) {
+ // Track color
+ const color = invert ? '#0a3d28' : '#0e7a5c';
+ // Bright orange for the conduit pipe (Kabelschutzrohr)
+ const pipeColor = '#ff6b00';
+
+ // Parabolic path under an implied obstacle
+ const pathD = "M 50 100 C 300 100 400 250 600 250 C 800 250 900 100 1150 100";
+ // Length of this cubic bezier is approx 1300
+ const pathLen = 1300;
+
+ return (
+
+ {/* Planned path (subtle) */}
+
+
+ {/* Step 1: Drill Rod (Pilotbohrung) pushing Left -> Right */}
+
+
+ {/* Step 2: Cable/Pipe Pullback (Rohreinzug) Right -> Left */}
+
+
+ );
+}
diff --git a/components/ui/decorations/TrenchLayingAnimation.tsx b/components/ui/decorations/TrenchLayingAnimation.tsx
new file mode 100644
index 000000000..e96aac51c
--- /dev/null
+++ b/components/ui/decorations/TrenchLayingAnimation.tsx
@@ -0,0 +1,100 @@
+'use client';
+
+import { motion } from 'framer-motion';
+
+interface TrenchLayingAnimationProps {
+ className?: string;
+ invert?: boolean;
+}
+
+/**
+ * TrenchLayingAnimation
+ *
+ * Visualizes open trench construction (Offene Bauweise / Graben).
+ * 1. A trench is cut into the earth line.
+ * 2. A thick orange conduit pipe (Leerrohr) is laid into the trench.
+ * 3. The trench is backfilled with earth.
+ *
+ * This directly ties to E-TIB's core services, showing the process
+ * of laying cables rather than just abstract geometry.
+ */
+export function TrenchLayingAnimation({ className = '', invert = false }: TrenchLayingAnimationProps) {
+ const color = invert ? '#0a3d28' : '#0e7a5c';
+ const earthColor = invert ? 'rgba(10, 61, 40, 0.4)' : 'rgba(14, 122, 92, 0.4)';
+ const pipeColor = '#ff6b00';
+
+ // The trench profile: flat, 45-deg drop, flat bottom, 45-deg rise, flat
+ const trenchPath = "M 50 100 L 300 100 L 350 200 L 850 200 L 900 100 L 1150 100";
+ // The dug out area (used for the backfill animation)
+ const trenchFill = "M 300 100 L 350 200 L 850 200 L 900 100 Z";
+ // Length of the polyline is approx 1300
+ const pathLen = 1300;
+
+ return (
+
+ {/* Ground surface line (always visible outside the trench) */}
+
+
+ {/* Step 1: Trench cutting Left -> Right */}
+
+
+ {/* Step 2: Pipe Laying (Drops into trench closely behind the cut) */}
+
+
+ {/* Step 3: Sand/Earth backfill (Fades in over the pipe) */}
+
+
+ );
+}