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 */} - - - + {/* Bottom massive Drill Bit Teeth edge (leading edge cutting down) */} + + {/* Subtle grid background */}
@@ -173,30 +167,6 @@ export function PageTransitionShutter() { /> - {/* 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 ( - - ); -} 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 ( - - ); -} 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 ( + + ); +} 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 ( + + ); +}