Compare commits
11 Commits
9368840139
...
843d61cd5d
| Author | SHA1 | Date | |
|---|---|---|---|
| 843d61cd5d | |||
| 4dcd5f511a | |||
| 62644a0366 | |||
| db9e0fde91 | |||
| 0516dbe743 | |||
| 3808339711 | |||
| dd04755690 | |||
| 5919d5d47a | |||
| e327c77e52 | |||
| c48bf18433 | |||
| 372ef1a418 |
1
.pa11yci/report.json
Normal file
18
.pa11yci/single-test.json
Normal file
@@ -0,0 +1,18 @@
|
||||
{
|
||||
"defaults": {
|
||||
"runners": ["axe"],
|
||||
"timeout": 60000,
|
||||
"chromeLaunchConfig": {
|
||||
"args": [
|
||||
"--no-sandbox",
|
||||
"--disable-setuid-sandbox",
|
||||
"--disable-dev-shm-usage",
|
||||
"--disable-gpu"
|
||||
]
|
||||
},
|
||||
"ignore": []
|
||||
},
|
||||
"urls": [
|
||||
"http://etib.localhost/de/blog/moderne-verfahren-kabeltiefbau"
|
||||
]
|
||||
}
|
||||
9
.pa11yci/test-html.json
Normal file
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"defaults": {
|
||||
"runners": ["axe"],
|
||||
"ignore": ["color-contrast"]
|
||||
},
|
||||
"urls": [
|
||||
"file:////Volumes/Alpha SSD/Coding/e-tib.com/test.html"
|
||||
]
|
||||
}
|
||||
@@ -23,6 +23,9 @@ import { ServiceDetailGrid } from '@/components/blocks/ServiceDetailGrid';
|
||||
import { BenefitGrid } from '@/components/blocks/BenefitGrid';
|
||||
import { InteractiveGermanyMap } from '@/components/blocks/InteractiveGermanyMap';
|
||||
import { FaqBlock } from '@/components/blocks/FaqBlock';
|
||||
import { CertificatesBlock } from '@/components/blocks/CertificatesBlock';
|
||||
import { HeroSection } from '@/components/blocks/HeroSection';
|
||||
import { TeamGrid } from '@/components/blocks/TeamGrid';
|
||||
import JsonLd from '@/components/JsonLd';
|
||||
import { Button } from '@/components/ui/Button';
|
||||
|
||||
@@ -39,6 +42,9 @@ const mdxComponents = {
|
||||
BenefitGrid,
|
||||
InteractiveGermanyMap,
|
||||
FaqBlock,
|
||||
CertificatesBlock,
|
||||
HeroSection,
|
||||
TeamGrid,
|
||||
JsonLd,
|
||||
Button,
|
||||
// Standard HTML element mapping for consistent E-TIB typography
|
||||
@@ -159,6 +165,13 @@ export default async function Page(props: { params: Promise<{ locale: string; sl
|
||||
const pageMdxComponents = {
|
||||
...mdxComponents,
|
||||
InteractiveGermanyMap: (props: any) => <InteractiveGermanyMap locations={enrichedLocations} {...props} />,
|
||||
HomeReferencesSlider: (props: any) => <HomeReferencesSlider {...props} references={references.map(r => ({
|
||||
id: r.slug,
|
||||
slug: r.slug,
|
||||
title: r.frontmatter.title,
|
||||
category: r.frontmatter.category || 'Projekt',
|
||||
image: r.frontmatter.featuredImage
|
||||
}))} />,
|
||||
};
|
||||
|
||||
return (
|
||||
@@ -209,7 +222,7 @@ export default async function Page(props: { params: Promise<{ locale: string; sl
|
||||
|
||||
{/* Support Section */}
|
||||
<Container>
|
||||
<div className="mt-24 p-8 md:p-12 bg-primary-dark rounded-3xl text-white shadow-2xl relative overflow-hidden group animate-slight-fade-in-from-bottom">
|
||||
<div className="mt-24 mb-24 p-8 md:p-12 bg-primary-dark rounded-3xl text-white shadow-2xl relative overflow-hidden group animate-slight-fade-in-from-bottom">
|
||||
<div className="absolute top-0 right-0 w-64 h-full bg-accent/5 -skew-x-12 translate-x-1/2 transition-transform group-hover:translate-x-1/3" />
|
||||
<div className="relative z-10 max-w-2xl">
|
||||
<h3 className="text-2xl md:text-3xl font-bold mb-4">{t('needHelp')}</h3>
|
||||
|
||||
@@ -24,13 +24,13 @@ const mdxComponents = {
|
||||
h2: (props: any) => <Heading level={2} size="3" className="mt-16 mb-6 border-b border-neutral-100 pb-4" {...props} />,
|
||||
h3: (props: any) => <Heading level={3} size="4" className="mt-12 mb-4 text-primary" {...props} />,
|
||||
h4: (props: any) => <Heading level={4} size="5" className="mt-8 mb-4 uppercase tracking-widest text-neutral-500" {...props} />,
|
||||
p: (props: any) => <p className="text-base md:text-lg text-text-secondary leading-[1.8] mb-6 font-medium max-w-3xl" {...props} />,
|
||||
ul: (props: any) => <ul className="list-none mb-8 space-y-3 text-base md:text-lg text-text-secondary font-medium max-w-3xl" {...props} />,
|
||||
ol: (props: any) => <ol className="list-decimal pl-6 mb-8 space-y-3 text-base md:text-lg text-text-secondary font-medium max-w-3xl" {...props} />,
|
||||
p: (props: any) => <p className="text-base md:text-lg text-text-secondary leading-[1.8] mb-6 font-normal max-w-3xl" {...props} />,
|
||||
ul: (props: any) => <ul className="list-none mb-8 space-y-3 text-base md:text-lg text-text-secondary font-normal max-w-3xl" {...props} />,
|
||||
ol: (props: any) => <ol className="list-decimal pl-6 mb-8 space-y-3 text-base md:text-lg text-text-secondary font-normal max-w-3xl" {...props} />,
|
||||
li: (props: any) => (
|
||||
<li className="relative pl-6 before:content-[''] before:absolute before:left-0 before:top-[0.6em] before:w-2 before:h-2 before:bg-primary/50 before:rounded-sm" {...props} />
|
||||
),
|
||||
a: (props: any) => <a className="text-primary hover:text-primary-dark underline decoration-primary/30 underline-offset-4 hover:decoration-primary transition-all font-bold" {...props} />,
|
||||
a: (props: any) => <a className="text-text-secondary underline decoration-primary decoration-2 underline-offset-4 hover:text-primary transition-all font-bold" {...props} />,
|
||||
strong: (props: any) => <strong className="font-bold text-neutral-900" {...props} />,
|
||||
blockquote: (props: any) => (
|
||||
<blockquote className="border-l-4 border-primary pl-6 py-3 my-10 italic bg-neutral-50 rounded-r-2xl text-neutral-700 font-medium max-w-3xl shadow-sm" {...props} />
|
||||
@@ -114,12 +114,12 @@ export default async function BlogPost({ params }: BlogPostProps) {
|
||||
}}
|
||||
/>
|
||||
</div>
|
||||
<div className="absolute inset-0 bg-gradient-to-t from-neutral-dark/90 via-neutral-dark/40 to-transparent" />
|
||||
<div className="absolute inset-0 bg-gradient-to-t from-neutral-dark/90 via-neutral-dark/70 to-neutral-dark/30" />
|
||||
|
||||
{/* Title overlay on image */}
|
||||
<div className="absolute inset-0 flex flex-col justify-end pb-16 md:pb-24">
|
||||
<div className="container mx-auto px-4">
|
||||
<div className="max-w-4xl">
|
||||
<div className="max-w-4xl bg-neutral-dark/40 backdrop-blur-md p-6 rounded-2xl border border-white/10">
|
||||
{post.frontmatter.category && (
|
||||
<div className="overflow-hidden mb-6">
|
||||
<span className="inline-block px-4 py-1.5 bg-accent text-neutral-dark text-xs font-bold uppercase tracking-[0.2em] rounded-sm">
|
||||
@@ -127,10 +127,10 @@ export default async function BlogPost({ params }: BlogPostProps) {
|
||||
</span>
|
||||
</div>
|
||||
)}
|
||||
<Heading level={1} className="text-white mb-8 drop-shadow-2xl">
|
||||
<Heading level={1} className="text-white mb-8 drop-shadow-md">
|
||||
{post.frontmatter.title}
|
||||
</Heading>
|
||||
<div className="flex flex-wrap items-center gap-6 text-white/80 text-sm md:text-base font-medium">
|
||||
<div className="flex flex-wrap items-center gap-6 text-white text-sm md:text-base font-medium drop-shadow-sm">
|
||||
<time dateTime={post.frontmatter.date} suppressHydrationWarning>
|
||||
{new Date(post.frontmatter.date).toLocaleDateString(locale || 'de', {
|
||||
year: 'numeric',
|
||||
@@ -138,7 +138,7 @@ export default async function BlogPost({ params }: BlogPostProps) {
|
||||
day: 'numeric',
|
||||
})}
|
||||
</time>
|
||||
<span className="w-1 h-1 bg-white/30 rounded-full" />
|
||||
<span className="w-1 h-1 bg-white/50 rounded-full" />
|
||||
<span>{readingTime} min read</span>
|
||||
{(new Date(post.frontmatter.date) > new Date() ||
|
||||
post.frontmatter.public === false) && (
|
||||
@@ -206,7 +206,7 @@ export default async function BlogPost({ params }: BlogPostProps) {
|
||||
)}
|
||||
|
||||
{/* Main content */}
|
||||
<div className="w-full">
|
||||
<div className="w-full [&_a]:text-primary [&_a:hover]:text-primary-dark [&_a]:underline [&_a]:decoration-primary [&_a]:underline-offset-4 [&_a]:transition-all [&_a]:font-bold [&_a_strong]:text-inherit">
|
||||
<MDXRemote source={post.content} components={mdxComponents} />
|
||||
</div>
|
||||
|
||||
|
||||
@@ -120,7 +120,7 @@ export default async function ContactPage({ params }: ContactPageProps) {
|
||||
{
|
||||
'@type': 'OpeningHoursSpecification',
|
||||
dayOfWeek: ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday'],
|
||||
opens: '08:00',
|
||||
opens: '07:00',
|
||||
closes: '17:00',
|
||||
},
|
||||
],
|
||||
@@ -214,6 +214,20 @@ export default async function ContactPage({ params }: ContactPageProps) {
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div className="flex items-start gap-4 md:gap-6 group">
|
||||
<div className="w-10 h-10 md:w-14 md:h-14 rounded-xl md:rounded-2xl bg-saturated/10 flex items-center justify-center text-saturated group-hover:bg-accent group-hover:text-primary-dark transition-all duration-300 shadow-sm flex-shrink-0">
|
||||
<svg className="w-5 h-5 md:w-7 md:h-7" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round"><path d="M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z"></path></svg>
|
||||
</div>
|
||||
<div>
|
||||
<h4 className="text-base md:text-xl font-bold text-primary mb-1 md:mb-2">
|
||||
{locale === 'de' ? 'Telefon' : 'Phone'}
|
||||
</h4>
|
||||
<a href="tel:+4935616857733" className="text-sm md:text-lg text-text-secondary hover:text-primary transition-colors font-medium touch-target block">
|
||||
+49 (0) 3561 / 68577 33
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</address>
|
||||
</div>
|
||||
|
||||
|
||||
@@ -3,8 +3,9 @@
|
||||
import { useEffect } from 'react';
|
||||
import { useTranslations } from 'next-intl';
|
||||
import { getAppServices } from '@/lib/services/create-services';
|
||||
import { Container, Button, Heading } from '@/components/ui';
|
||||
import Scribble from '@/components/Scribble';
|
||||
import { Button, Heading } from '@/components/ui';
|
||||
import { Terminal, Activity, AlertTriangle, RefreshCw, Home, ShieldAlert } from 'lucide-react';
|
||||
import { motion } from 'framer-motion';
|
||||
|
||||
export default function Error({
|
||||
error,
|
||||
@@ -16,6 +17,9 @@ export default function Error({
|
||||
const t = useTranslations('Error');
|
||||
|
||||
useEffect(() => {
|
||||
// Force standard solid header
|
||||
document.body.setAttribute('data-header-variant', 'standard');
|
||||
|
||||
// Treat "Failed to find Server Action" as a deployment sync issue and reload
|
||||
if (error?.message?.includes('Failed to find Server Action')) {
|
||||
window.location.reload();
|
||||
@@ -30,64 +34,131 @@ export default function Error({
|
||||
digest: error?.digest,
|
||||
});
|
||||
|
||||
// Force solid header
|
||||
document.body.setAttribute('data-force-solid-header', 'true');
|
||||
return () => {
|
||||
document.body.removeAttribute('data-force-solid-header');
|
||||
document.body.removeAttribute('data-header-variant');
|
||||
};
|
||||
}, [error]);
|
||||
|
||||
return (
|
||||
<>
|
||||
<div className="relative min-h-[80vh] flex flex-col items-center justify-center overflow-hidden bg-[#050B14] py-24 px-4 mt-16">
|
||||
{/* Deep Tech Grid Background */}
|
||||
<div className="absolute inset-0 bg-[linear-gradient(to_right,#8080800a_1px,transparent_1px),linear-gradient(to_bottom,#8080800a_1px,transparent_1px)] bg-[size:40px_40px] [mask-image:radial-gradient(ellipse_60%_50%_at_50%_50%,#000_70%,transparent_100%)] pointer-events-none" />
|
||||
|
||||
{/* Glowing Orb */}
|
||||
<div className="absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 w-96 h-96 bg-red-500/20 blur-[120px] rounded-full pointer-events-none" />
|
||||
<div className="relative min-h-screen flex flex-col items-center justify-center overflow-hidden bg-[#050B14] py-24 px-4">
|
||||
{/* Industrial Blueprint Background */}
|
||||
<div className="absolute inset-0 opacity-[0.03] pointer-events-none">
|
||||
<div className="absolute inset-0 bg-[linear-gradient(to_right,#ffffff_1px,transparent_1px),linear-gradient(to_bottom,#ffffff_1px,transparent_1px)] bg-[size:100px_100px]" />
|
||||
<div className="absolute inset-0 bg-[linear-gradient(to_right,#ffffff_1px,transparent_1px),linear-gradient(to_bottom,#ffffff_1px,transparent_1px)] bg-[size:20px_20px]" />
|
||||
</div>
|
||||
|
||||
<div className="relative z-10 w-full max-w-2xl mx-auto">
|
||||
<div className="group relative bg-[#050B14]/80 backdrop-blur-xl rounded-[2.5rem] p-12 md:p-16 border border-white/10 shadow-2xl overflow-hidden text-center">
|
||||
{/* Inner Shimmer */}
|
||||
<div className="absolute inset-0 bg-gradient-to-br from-white/[0.05] to-transparent opacity-0 group-hover:opacity-100 transition-opacity duration-700 pointer-events-none" />
|
||||
|
||||
<div className="relative mb-8">
|
||||
<h1 className="text-8xl md:text-9xl font-heading font-black text-transparent bg-clip-text bg-gradient-to-b from-white to-white/20 drop-shadow-[0_0_30px_rgba(255,255,255,0.1)]">
|
||||
{/* Decorative Technical Annotations */}
|
||||
<div className="absolute inset-0 pointer-events-none overflow-hidden select-none">
|
||||
<div className="absolute top-40 left-10 text-[10px] font-mono text-primary/30 uppercase tracking-[0.2em] rotate-90 origin-left">
|
||||
System_Core_Access :: Restricted
|
||||
</div>
|
||||
<div className="absolute bottom-40 right-10 text-[10px] font-mono text-primary/30 uppercase tracking-[0.2em] -rotate-90 origin-right">
|
||||
Protocol_Failure :: Type_500
|
||||
</div>
|
||||
<div className="absolute top-1/4 right-20 w-32 h-px bg-primary/20" />
|
||||
<div className="absolute top-1/4 right-20 w-px h-32 bg-primary/20" />
|
||||
</div>
|
||||
|
||||
{/* Background Glow */}
|
||||
<div className="absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 w-[600px] h-[600px] bg-red-500/10 blur-[150px] rounded-full pointer-events-none animate-pulse" />
|
||||
|
||||
<div className="relative z-10 w-full max-w-4xl mx-auto flex flex-col items-center">
|
||||
{/* The "Broken" Machine Visual */}
|
||||
<div className="relative mb-12">
|
||||
<motion.div
|
||||
initial={{ opacity: 0, scale: 0.8 }}
|
||||
animate={{ opacity: 1, scale: 1 }}
|
||||
className="relative"
|
||||
>
|
||||
<h1 className="text-[12rem] md:text-[18rem] font-heading font-black leading-none select-none">
|
||||
<span className="relative inline-block text-transparent bg-clip-text bg-gradient-to-b from-white to-white/5 drop-shadow-[0_0_50px_rgba(255,255,255,0.1)]">
|
||||
500
|
||||
</h1>
|
||||
<div className="absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 w-full h-1 bg-red-500/40 blur-md skew-y-[-10deg]" />
|
||||
<div className="absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 w-full h-px bg-red-500 skew-y-[-10deg] shadow-[0_0_15px_rgba(239,68,68,1)]" />
|
||||
{/* Glitch Layers */}
|
||||
<span className="absolute inset-0 text-red-500/30 translate-x-[2px] -translate-y-[1px] mix-blend-screen animate-pulse pointer-events-none">500</span>
|
||||
<span className="absolute inset-0 text-blue-500/30 -translate-x-[2px] translate-y-[1px] mix-blend-screen animate-pulse pointer-events-none">500</span>
|
||||
</span>
|
||||
</h1>
|
||||
|
||||
{/* Warning Overlay */}
|
||||
<div className="absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 flex flex-col items-center">
|
||||
<motion.div
|
||||
animate={{
|
||||
opacity: [0.4, 1, 0.4],
|
||||
scale: [0.95, 1.05, 0.95]
|
||||
}}
|
||||
transition={{ duration: 2, repeat: Infinity }}
|
||||
className="p-4 rounded-2xl bg-red-500/20 border border-red-500/40 backdrop-blur-md shadow-[0_0_30px_rgba(239,68,68,0.3)]"
|
||||
>
|
||||
<ShieldAlert className="w-12 h-12 text-red-500" />
|
||||
</motion.div>
|
||||
</div>
|
||||
</motion.div>
|
||||
</div>
|
||||
|
||||
<div className="grid grid-cols-1 md:grid-cols-12 gap-8 w-full items-start">
|
||||
{/* Main Content */}
|
||||
<div className="md:col-span-7 text-center md:text-left">
|
||||
<div className="inline-flex items-center gap-3 px-4 py-2 mb-6 rounded-lg bg-red-500/10 border border-red-500/20 text-[10px] font-mono uppercase tracking-widest text-red-400">
|
||||
<Activity className="w-4 h-4 animate-pulse" />
|
||||
CRITICAL_SYSTEM_OVERRIDE :: ACTIVE
|
||||
</div>
|
||||
|
||||
<div className="inline-flex items-center gap-3 px-4 py-1.5 mb-6 rounded-full bg-red-500/10 border border-red-500/20 text-xs font-bold uppercase tracking-wider text-red-400">
|
||||
<span className="w-2 h-2 rounded-full bg-red-500 animate-[ping_2s_infinite] shadow-[0_0_10px_rgba(239,68,68,0.8)]" />
|
||||
SYSTEM PROTOCOL: CRITICAL ERROR
|
||||
</div>
|
||||
|
||||
<Heading level={2} className="text-2xl md:text-3xl font-bold mb-4 text-white">
|
||||
<Heading level={1} className="text-3xl md:text-5xl font-bold mb-6 text-white leading-tight">
|
||||
{t('title')}
|
||||
</Heading>
|
||||
|
||||
<p className="text-white/60 mb-10 max-w-md text-lg mx-auto leading-relaxed">
|
||||
<p className="text-white/50 mb-10 max-w-lg text-lg leading-relaxed">
|
||||
{t('description')}
|
||||
</p>
|
||||
|
||||
<div className="flex flex-col sm:flex-row gap-4 justify-center">
|
||||
<Button onClick={() => reset()} variant="primary" className="shadow-[0_0_20px_rgba(var(--color-primary),0.3)]">
|
||||
<div className="flex flex-col sm:flex-row gap-4 justify-center md:justify-start">
|
||||
<Button
|
||||
onClick={() => reset()}
|
||||
variant="primary"
|
||||
className="group h-14 px-10 shadow-[0_0_30px_rgba(var(--color-primary),0.2)] hover:shadow-primary/40 transition-all"
|
||||
>
|
||||
<RefreshCw className="w-5 h-5 mr-3 group-hover:rotate-180 transition-transform duration-700" />
|
||||
{t('tryAgain')}
|
||||
</Button>
|
||||
<Button href="/" variant="outline" className="border-white/20 text-white hover:bg-white/5">
|
||||
<Button
|
||||
href="/"
|
||||
variant="outline"
|
||||
className="h-14 px-8 border-white/10 text-white hover:bg-white/5"
|
||||
>
|
||||
<Home className="w-5 h-5 mr-3" />
|
||||
{t('goHome')}
|
||||
</Button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{/* Decorative Base Line */}
|
||||
<div className="w-full flex justify-center mt-12 opacity-50">
|
||||
<div className="w-px h-24 bg-gradient-to-t from-red-500/50 to-transparent" />
|
||||
|
||||
{/* Technical Log Terminal */}
|
||||
<div className="md:col-span-5">
|
||||
<div className="bg-black/40 backdrop-blur-xl border border-white/10 rounded-2xl overflow-hidden shadow-2xl">
|
||||
<div className="bg-white/5 px-4 py-2 border-b border-white/10 flex items-center justify-between">
|
||||
<div className="flex gap-1.5">
|
||||
<div className="w-2.5 h-2.5 rounded-full bg-red-500/50" />
|
||||
<div className="w-2.5 h-2.5 rounded-full bg-yellow-500/50" />
|
||||
<div className="w-2.5 h-2.5 rounded-full bg-green-500/50" />
|
||||
</div>
|
||||
<div className="text-[10px] font-mono text-white/30 tracking-wider">TERMINAL_OUTPUT</div>
|
||||
</div>
|
||||
<div className="p-6 font-mono text-xs leading-relaxed overflow-hidden h-[240px]">
|
||||
<div className="text-primary/70 mb-1 animate-[fade-in_0.5s_ease-out_forwards]">[SYSTEM] Initializing recovery protocol...</div>
|
||||
<div className="text-red-500/80 mb-1 animate-[fade-in_0.5s_ease-out_0.5s_forwards] opacity-0">[ERROR] Connection timeout at node 0x7F</div>
|
||||
<div className="text-white/40 mb-1 animate-[fade-in_0.5s_ease-out_1s_forwards] opacity-0">[INFO] Request ID: {error?.digest || '0xDEADBEEF'}</div>
|
||||
<div className="text-white/40 mb-1 animate-[fade-in_0.5s_ease-out_1.5s_forwards] opacity-0">[INFO] Timestamp: {new Date().toISOString()}</div>
|
||||
<div className="text-white/40 mb-1 animate-[fade-in_0.5s_ease-out_2s_forwards] opacity-0">[INFO] Trace: {error?.message?.slice(0, 40)}...</div>
|
||||
<div className="text-primary/70 mt-4 animate-[pulse_1.5s_infinite] opacity-0 animate-[fade-in_0.5s_ease-out_2.5s_forwards]">_ Waiting for user input...</div>
|
||||
</div>
|
||||
<div className="bg-red-500/10 p-3 flex items-center gap-3">
|
||||
<Terminal className="w-4 h-4 text-red-400" />
|
||||
<div className="text-[10px] font-bold text-red-400 uppercase tracking-tighter">Status: Handshake_Failed</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
@@ -89,7 +89,12 @@ export default async function Layout(props: {
|
||||
},
|
||||
{
|
||||
label: safeLocale === 'de' ? 'Über uns' : 'About Us',
|
||||
url: `/${safeLocale}/${await mapFileSlugToTranslated('ueber-uns', safeLocale)}`
|
||||
url: `/${safeLocale}/${await mapFileSlugToTranslated('ueber-uns', safeLocale)}`,
|
||||
children: [
|
||||
{ label: safeLocale === 'de' ? 'Firma' : 'Company', url: `/${safeLocale}/${await mapFileSlugToTranslated('ueber-uns', safeLocale)}` },
|
||||
{ label: safeLocale === 'de' ? 'Unser Team' : 'Our Team', url: `/${safeLocale}/team` },
|
||||
{ label: safeLocale === 'de' ? 'Zertifikate' : 'Certificates', url: `/${safeLocale}/zertifikate` }
|
||||
]
|
||||
},
|
||||
{
|
||||
label: safeLocale === 'de' ? 'Referenzen' : 'References',
|
||||
|
||||
@@ -1,70 +1,145 @@
|
||||
import { getTranslations } from 'next-intl/server';
|
||||
import { Container, Button, Heading } from '@/components/ui';
|
||||
import Scribble from '@/components/Scribble';
|
||||
'use client';
|
||||
|
||||
import { useEffect } from 'react';
|
||||
import { useTranslations } from 'next-intl';
|
||||
import { Button, Heading } from '@/components/ui';
|
||||
import { Terminal, Search, Home, Mail, Activity, Cpu } from 'lucide-react';
|
||||
import { motion } from 'framer-motion';
|
||||
import ClientNotFoundTracker from '@/components/analytics/ClientNotFoundTracker';
|
||||
|
||||
export default async function NotFound() {
|
||||
console.log('--- NOT FOUND RENDERED ---');
|
||||
const t = await getTranslations('Error.notFound');
|
||||
export default function NotFound() {
|
||||
const t = useTranslations('Error.notFound');
|
||||
|
||||
// Suggested URL logic removed along with Payload CMS
|
||||
let suggestedUrl = null;
|
||||
let suggestedLang = null;
|
||||
useEffect(() => {
|
||||
// Force standard solid header
|
||||
document.body.setAttribute('data-header-variant', 'standard');
|
||||
return () => {
|
||||
document.body.removeAttribute('data-header-variant');
|
||||
};
|
||||
}, []);
|
||||
|
||||
return (
|
||||
<>
|
||||
<script dangerouslySetInnerHTML={{ __html: `document.body.setAttribute('data-force-solid-header', 'true');` }} />
|
||||
<div className="relative min-h-screen flex flex-col items-center justify-center overflow-hidden bg-[#050B14] py-24 px-4">
|
||||
<ClientNotFoundTracker path="" />
|
||||
|
||||
<div className="relative min-h-[80vh] flex flex-col items-center justify-center overflow-hidden bg-[#050B14] py-24 px-4 mt-16">
|
||||
{/* Deep Tech Grid Background */}
|
||||
<div className="absolute inset-0 bg-[linear-gradient(to_right,#8080800a_1px,transparent_1px),linear-gradient(to_bottom,#8080800a_1px,transparent_1px)] bg-[size:40px_40px] [mask-image:radial-gradient(ellipse_60%_50%_at_50%_50%,#000_70%,transparent_100%)] pointer-events-none" />
|
||||
|
||||
{/* Glowing Orb */}
|
||||
<div className="absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 w-96 h-96 bg-primary/20 blur-[120px] rounded-full pointer-events-none" />
|
||||
{/* Industrial Blueprint Background */}
|
||||
<div className="absolute inset-0 opacity-[0.03] pointer-events-none">
|
||||
<div className="absolute inset-0 bg-[linear-gradient(to_right,#ffffff_1px,transparent_1px),linear-gradient(to_bottom,#ffffff_1px,transparent_1px)] bg-[size:100px_100px]" />
|
||||
<div className="absolute inset-0 bg-[linear-gradient(to_right,#ffffff_1px,transparent_1px),linear-gradient(to_bottom,#ffffff_1px,transparent_1px)] bg-[size:20px_20px]" />
|
||||
</div>
|
||||
|
||||
<div className="relative z-10 w-full max-w-2xl mx-auto">
|
||||
<div className="group relative bg-[#050B14]/80 backdrop-blur-xl rounded-[2.5rem] p-12 md:p-16 border border-white/10 shadow-2xl overflow-hidden text-center">
|
||||
{/* Inner Shimmer */}
|
||||
<div className="absolute inset-0 bg-gradient-to-br from-white/[0.05] to-transparent opacity-0 group-hover:opacity-100 transition-opacity duration-700 pointer-events-none" />
|
||||
|
||||
<div className="relative mb-8">
|
||||
<h1 className="text-8xl md:text-9xl font-heading font-black text-transparent bg-clip-text bg-gradient-to-b from-white to-white/20 drop-shadow-[0_0_30px_rgba(255,255,255,0.1)]">
|
||||
{/* Decorative Technical Annotations */}
|
||||
<div className="absolute inset-0 pointer-events-none overflow-hidden select-none">
|
||||
<div className="absolute top-40 left-10 text-[10px] font-mono text-primary/30 uppercase tracking-[0.2em] rotate-90 origin-left">
|
||||
Discovery_Service :: Failure
|
||||
</div>
|
||||
<div className="absolute bottom-40 right-10 text-[10px] font-mono text-primary/30 uppercase tracking-[0.2em] -rotate-90 origin-right">
|
||||
Address_Resolution :: 0x404
|
||||
</div>
|
||||
<div className="absolute top-1/4 left-20 w-32 h-px bg-primary/20" />
|
||||
<div className="absolute top-1/4 left-20 w-px h-32 bg-primary/20" />
|
||||
</div>
|
||||
|
||||
{/* Background Glow */}
|
||||
<div className="absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 w-[600px] h-[600px] bg-primary/10 blur-[150px] rounded-full pointer-events-none animate-pulse" />
|
||||
|
||||
<div className="relative z-10 w-full max-w-4xl mx-auto flex flex-col items-center">
|
||||
{/* 404 Visual */}
|
||||
<div className="relative mb-12">
|
||||
<motion.div
|
||||
initial={{ opacity: 0, y: 20 }}
|
||||
animate={{ opacity: 1, y: 0 }}
|
||||
className="relative"
|
||||
>
|
||||
<h1 className="text-[12rem] md:text-[18rem] font-heading font-black leading-none select-none">
|
||||
<span className="relative inline-block text-transparent bg-clip-text bg-gradient-to-b from-white to-white/5 drop-shadow-[0_0_50px_rgba(var(--color-primary),0.15)]">
|
||||
404
|
||||
</h1>
|
||||
<div className="absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 w-full h-1 bg-primary/40 blur-md skew-y-[-10deg]" />
|
||||
<div className="absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 w-full h-px bg-primary skew-y-[-10deg] shadow-[0_0_15px_rgba(var(--color-primary),1)]" />
|
||||
{/* Glitch Layers */}
|
||||
<span className="absolute inset-0 text-primary/30 translate-x-[2px] -translate-y-[1px] mix-blend-screen animate-pulse pointer-events-none">404</span>
|
||||
<span className="absolute inset-0 text-blue-500/20 -translate-x-[2px] translate-y-[1px] mix-blend-screen animate-pulse pointer-events-none">404</span>
|
||||
</span>
|
||||
</h1>
|
||||
|
||||
{/* Search Scan Overlay */}
|
||||
<div className="absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 flex flex-col items-center">
|
||||
<motion.div
|
||||
animate={{
|
||||
scale: [1, 1.1, 1],
|
||||
opacity: [0.5, 1, 0.5]
|
||||
}}
|
||||
transition={{ duration: 3, repeat: Infinity }}
|
||||
className="p-5 rounded-full bg-primary/20 border border-primary/40 backdrop-blur-md shadow-[0_0_40px_rgba(var(--color-primary),0.3)]"
|
||||
>
|
||||
<Search className="w-10 h-10 text-primary" />
|
||||
</motion.div>
|
||||
</div>
|
||||
</motion.div>
|
||||
</div>
|
||||
|
||||
<div className="grid grid-cols-1 md:grid-cols-12 gap-12 w-full items-start">
|
||||
{/* Main Content */}
|
||||
<div className="md:col-span-7 text-center md:text-left">
|
||||
<div className="inline-flex items-center gap-3 px-4 py-2 mb-6 rounded-lg bg-primary/10 border border-primary/20 text-[10px] font-mono uppercase tracking-widest text-primary">
|
||||
<Cpu className="w-4 h-4 animate-spin-slow" />
|
||||
OBJECT_NOT_FOUND :: SCAN_COMPLETE
|
||||
</div>
|
||||
|
||||
<div className="inline-flex items-center gap-3 px-4 py-1.5 mb-6 rounded-full bg-red-500/10 border border-red-500/20 text-xs font-bold uppercase tracking-wider text-red-400">
|
||||
<span className="w-2 h-2 rounded-full bg-red-500 animate-pulse shadow-[0_0_10px_rgba(239,68,68,0.8)]" />
|
||||
SYSTEM PROTOCOL: NOT FOUND
|
||||
</div>
|
||||
|
||||
<Heading level={2} className="text-2xl md:text-3xl font-bold mb-4 text-white">
|
||||
<Heading level={1} className="text-3xl md:text-5xl font-bold mb-6 text-white leading-tight">
|
||||
{t('title')}
|
||||
</Heading>
|
||||
|
||||
<p className="text-white/60 mb-10 max-w-md text-lg mx-auto leading-relaxed">
|
||||
<p className="text-white/50 mb-10 max-w-lg text-lg leading-relaxed">
|
||||
{t('description')}
|
||||
</p>
|
||||
|
||||
<div className="flex flex-col sm:flex-row gap-4 justify-center">
|
||||
<Button href="/" variant="primary" className="shadow-[0_0_20px_rgba(var(--color-primary),0.3)]">
|
||||
<div className="flex flex-col sm:flex-row gap-4 justify-center md:justify-start">
|
||||
<Button
|
||||
href="/"
|
||||
variant="primary"
|
||||
className="group h-14 px-10 shadow-[0_0_30px_rgba(var(--color-primary),0.2)] hover:shadow-primary/40 transition-all"
|
||||
>
|
||||
<Home className="w-5 h-5 mr-3" />
|
||||
{t('cta')}
|
||||
</Button>
|
||||
<Button href="/kontakt" variant="outline" className="border-white/20 text-white hover:bg-white/5">
|
||||
<Button
|
||||
href="/kontakt"
|
||||
variant="outline"
|
||||
className="h-14 px-8 border-white/10 text-white hover:bg-white/5"
|
||||
>
|
||||
<Mail className="w-5 h-5 mr-3" />
|
||||
Support kontaktieren
|
||||
</Button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{/* Decorative Base Line */}
|
||||
<div className="w-full flex justify-center mt-12 opacity-50">
|
||||
<div className="w-px h-24 bg-gradient-to-t from-primary to-transparent" />
|
||||
|
||||
{/* Technical Log Terminal */}
|
||||
<div className="md:col-span-5">
|
||||
<div className="bg-black/40 backdrop-blur-xl border border-white/10 rounded-2xl overflow-hidden shadow-2xl">
|
||||
<div className="bg-white/5 px-4 py-2 border-b border-white/10 flex items-center justify-between">
|
||||
<div className="flex gap-1.5">
|
||||
<div className="w-2.5 h-2.5 rounded-full bg-primary/50" />
|
||||
<div className="w-2.5 h-2.5 rounded-full bg-white/20" />
|
||||
<div className="w-2.5 h-2.5 rounded-full bg-white/10" />
|
||||
</div>
|
||||
<div className="text-[10px] font-mono text-white/30 tracking-wider">DISCOVERY_LOG</div>
|
||||
</div>
|
||||
<div className="p-6 font-mono text-xs leading-relaxed overflow-hidden h-[220px]">
|
||||
<div className="text-primary/70 mb-1">[SCAN] Initializing sector sweep...</div>
|
||||
<div className="text-white/40 mb-1">[INFO] Indexing available nodes...</div>
|
||||
<div className="text-primary/50 mb-1 animate-pulse">[INFO] Searching for: {typeof window !== 'undefined' ? window.location.pathname : 'unknown_resource'}</div>
|
||||
<div className="text-red-400/80 mb-1 mt-4">[WARN] Resource 404: Not found in current branch</div>
|
||||
<div className="text-white/30 mb-1">[INFO] Redirecting to fallback_strategy...</div>
|
||||
<div className="text-primary/70 mt-4 animate-[pulse_1.5s_infinite]">_ Ready for manual redirect...</div>
|
||||
</div>
|
||||
<div className="bg-primary/10 p-3 flex items-center gap-3">
|
||||
<Activity className="w-4 h-4 text-primary" />
|
||||
<div className="text-[10px] font-bold text-primary uppercase tracking-tighter">Status: Resolution_Failed</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
@@ -12,21 +12,26 @@ import { SubCompanyTiles as HomeSubCompanyTiles } from '@/components/blocks/SubC
|
||||
import { CompetenceBentoGrid as HomeCompetenceBentoGrid } from '@/components/blocks/CompetenceBentoGrid';
|
||||
import { ReferencesSlider as HomeReferencesSlider } from '@/components/blocks/ReferencesSlider';
|
||||
import { FaqBlock } from '@/components/blocks/FaqBlock';
|
||||
import { CertificatesBlock } from '@/components/blocks/CertificatesBlock';
|
||||
import { HeroSection } from '@/components/blocks/HeroSection';
|
||||
import JsonLd from '@/components/JsonLd';
|
||||
|
||||
import { Button } from '@/components/ui/Button';
|
||||
import { Heading } from '@/components/ui/Heading';
|
||||
import { getAllReferences } from '@/lib/references';
|
||||
|
||||
const mdxComponents = {
|
||||
const mdxComponents = (references: any[]) => ({
|
||||
HomeHero,
|
||||
HomeSubCompanyTiles,
|
||||
HomeCompetenceBentoGrid,
|
||||
HomeReferencesSlider,
|
||||
HomeReferencesSlider: (props: any) => <HomeReferencesSlider {...props} references={props.references || references} />,
|
||||
FaqBlock,
|
||||
CertificatesBlock,
|
||||
HeroSection,
|
||||
JsonLd,
|
||||
Button,
|
||||
Heading,
|
||||
};
|
||||
});
|
||||
|
||||
export async function generateMetadata(props: any): Promise<Metadata> {
|
||||
const { locale } = await props.params;
|
||||
@@ -50,6 +55,16 @@ export default async function Home(props: any) {
|
||||
setRequestLocale(locale);
|
||||
|
||||
const mdx = await getMdxContent(locale, 'home');
|
||||
const allReferences = await getAllReferences(locale);
|
||||
|
||||
// Transform ReferenceData to the format expected by ReferencesSlider
|
||||
const sliderReferences = allReferences.map(ref => ({
|
||||
id: ref.slug,
|
||||
title: ref.frontmatter.title,
|
||||
slug: ref.slug,
|
||||
category: ref.frontmatter.location, // Using location as category if not specified
|
||||
image: ref.frontmatter.featuredImage
|
||||
})).slice(0, 6);
|
||||
|
||||
if (!mdx) {
|
||||
notFound();
|
||||
@@ -57,7 +72,7 @@ export default async function Home(props: any) {
|
||||
|
||||
return (
|
||||
<main>
|
||||
<MDXRemote source={mdx.content} components={mdxComponents} />
|
||||
<MDXRemote source={mdx.content} components={mdxComponents(sliderReferences)} />
|
||||
</main>
|
||||
);
|
||||
}
|
||||
|
||||
@@ -70,10 +70,17 @@ export default async function ReferenceDetail(props: { params: Promise<{ locale:
|
||||
h3: (props: any) => <Heading level={3} size="4" className="mt-12 mb-4 text-primary" {...props} />,
|
||||
h4: (props: any) => <Heading level={4} size="5" className="mt-8 mb-4 uppercase tracking-widest text-neutral-500" {...props} />,
|
||||
p: (props: any) => <p className="text-base md:text-lg text-text-secondary leading-[1.8] mb-6 font-medium max-w-3xl" {...props} />,
|
||||
ul: (props: any) => <ul className="list-none mb-8 space-y-3 text-base md:text-lg text-text-secondary font-medium max-w-3xl" {...props} />,
|
||||
ul: (props: any) => <ul className="grid grid-cols-1 md:grid-cols-2 gap-4 my-12" {...props} />,
|
||||
ol: (props: any) => <ol className="list-decimal pl-6 mb-8 space-y-3 text-base md:text-lg text-text-secondary font-medium max-w-3xl" {...props} />,
|
||||
li: (props: any) => (
|
||||
<li className="relative pl-6 before:content-[''] before:absolute before:left-0 before:top-[0.6em] before:w-2 before:h-2 before:bg-primary/50 before:rounded-sm" {...props} />
|
||||
<li className="bg-neutral-50 p-6 rounded-2xl border border-neutral-100 flex items-start gap-4 hover:shadow-md transition-shadow group" {...props}>
|
||||
<div className="w-6 h-6 rounded-full bg-primary/10 flex items-center justify-center shrink-0 mt-0.5 group-hover:bg-primary/20 transition-colors">
|
||||
<svg className="w-3.5 h-3.5 text-primary" fill="none" viewBox="0 0 24 24" stroke="currentColor" strokeWidth={3}>
|
||||
<path strokeLinecap="round" strokeLinejoin="round" d="M5 13l4 4L19 7" />
|
||||
</svg>
|
||||
</div>
|
||||
<span className="text-neutral-700 font-semibold leading-snug">{props.children}</span>
|
||||
</li>
|
||||
),
|
||||
a: (props: any) => <a className="text-primary hover:text-primary-dark underline decoration-primary/30 underline-offset-4 hover:decoration-primary transition-all font-bold" {...props} />,
|
||||
strong: (props: any) => <strong className="font-bold text-neutral-900" {...props} />,
|
||||
|
||||
@@ -116,19 +116,19 @@ export default async function ReferenzenOverview(props: { params: Promise<{ loca
|
||||
</h3>
|
||||
|
||||
{/* Technical Meta Data */}
|
||||
<div className="grid grid-cols-[1fr_1fr] gap-4 mt-auto border-t border-neutral-100 pt-6 pr-16 md:pr-20 relative z-10">
|
||||
<div className="flex flex-col gap-3 mt-auto border-t border-neutral-100 pt-6 pr-16 md:pr-20 relative z-10">
|
||||
<div className="min-w-0">
|
||||
<span className="block text-[10px] uppercase tracking-widest text-neutral-400 font-bold mb-1">Kunde</span>
|
||||
<span className="flex items-center gap-1.5 text-sm font-semibold text-neutral-700">
|
||||
<Briefcase className="w-3.5 h-3.5 text-primary shrink-0" />
|
||||
<span className="truncate">{ref.frontmatter.client}</span>
|
||||
<span className="flex items-start gap-2 text-sm font-semibold text-neutral-700 leading-tight">
|
||||
<Briefcase className="w-3.5 h-3.5 text-primary shrink-0 mt-[2px]" />
|
||||
<span className="line-clamp-2">{ref.frontmatter.client}</span>
|
||||
</span>
|
||||
</div>
|
||||
<div className="min-w-0">
|
||||
<span className="block text-[10px] uppercase tracking-widest text-neutral-400 font-bold mb-1">Zeitraum</span>
|
||||
<span className="flex items-center gap-1.5 text-sm font-semibold text-neutral-700">
|
||||
<Calendar className="w-3.5 h-3.5 text-primary shrink-0" />
|
||||
<span className="truncate">{ref.frontmatter.dateString || new Date(ref.frontmatter.date).getFullYear()}</span>
|
||||
<span className="flex items-start gap-2 text-sm font-semibold text-neutral-700 leading-tight">
|
||||
<Calendar className="w-3.5 h-3.5 text-primary shrink-0 mt-[2px]" />
|
||||
<span className="line-clamp-2">{ref.frontmatter.dateString || new Date(ref.frontmatter.date).getFullYear()}</span>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -1,25 +0,0 @@
|
||||
import { ImageResponse } from 'next/og';
|
||||
import { getTranslations } from 'next-intl/server';
|
||||
import { OGImageTemplate } from '@/components/OGImageTemplate';
|
||||
import { getOgFonts, OG_IMAGE_SIZE } from '@/lib/og-helper';
|
||||
|
||||
export const size = OG_IMAGE_SIZE;
|
||||
export const contentType = 'image/png';
|
||||
export const runtime = 'nodejs';
|
||||
|
||||
export default async function Image({ params }: { params: Promise<{ locale: string }> }) {
|
||||
const { locale } = await params;
|
||||
const t = await getTranslations({ locale, namespace: 'Team' });
|
||||
const fonts = await getOgFonts();
|
||||
|
||||
const title = t('meta.title') || t('hero.subtitle');
|
||||
const description = t('meta.description') || t('hero.title');
|
||||
|
||||
return new ImageResponse(
|
||||
<OGImageTemplate title={title} description={description} label="Our Team" />,
|
||||
{
|
||||
...OG_IMAGE_SIZE,
|
||||
fonts,
|
||||
},
|
||||
);
|
||||
}
|
||||
@@ -1,326 +0,0 @@
|
||||
import { getTranslations, setRequestLocale } from 'next-intl/server';
|
||||
import { Metadata } from 'next';
|
||||
import JsonLd from '@/components/JsonLd';
|
||||
import { getBreadcrumbSchema, SITE_URL } from '@/lib/schema';
|
||||
import { Section, Container, Heading, Badge } from '@/components/ui';
|
||||
import Image from 'next/image';
|
||||
import Reveal from '@/components/Reveal';
|
||||
import Gallery from '@/components/team/Gallery';
|
||||
import TrackedButton from '@/components/analytics/TrackedButton';
|
||||
|
||||
interface TeamPageProps {
|
||||
params: Promise<{
|
||||
locale: string;
|
||||
}>;
|
||||
}
|
||||
|
||||
export async function generateMetadata({ params }: TeamPageProps): Promise<Metadata> {
|
||||
const { locale } = await params;
|
||||
const t = await getTranslations({ locale, namespace: 'Team' });
|
||||
const title = t('meta.title') || t('hero.subtitle');
|
||||
const description = t('meta.description') || t('hero.title');
|
||||
return {
|
||||
title,
|
||||
description,
|
||||
alternates: {
|
||||
canonical: `${SITE_URL}/${locale}/team`,
|
||||
languages: {
|
||||
de: `${SITE_URL}/de/team`,
|
||||
en: `${SITE_URL}/en/team`,
|
||||
'x-default': `${SITE_URL}/en/team`,
|
||||
},
|
||||
},
|
||||
openGraph: {
|
||||
title: `${title} | E-TIB`,
|
||||
description,
|
||||
url: `${SITE_URL}/${locale}/team`,
|
||||
},
|
||||
twitter: {
|
||||
card: 'summary_large_image',
|
||||
title: `${title} | E-TIB`,
|
||||
description,
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
export default async function TeamPage({ params }: TeamPageProps) {
|
||||
const { locale } = await params;
|
||||
setRequestLocale(locale);
|
||||
const t = await getTranslations({ locale, namespace: 'Team' });
|
||||
|
||||
return (
|
||||
<div className="flex flex-col min-h-screen bg-neutral-light">
|
||||
<JsonLd
|
||||
id="breadcrumb-team"
|
||||
data={getBreadcrumbSchema([{ name: t('hero.subtitle'), item: `/team` }])}
|
||||
/>
|
||||
<JsonLd
|
||||
id="person-michael"
|
||||
data={{
|
||||
'@context': 'https://schema.org',
|
||||
'@type': 'Person',
|
||||
name: t('michael.name'),
|
||||
jobTitle: t('michael.role'),
|
||||
worksFor: {
|
||||
'@type': 'Organization',
|
||||
name: 'E-TIB',
|
||||
},
|
||||
sameAs: ['https://www.linkedin.com/in/michael-bodemer-33b493122/'],
|
||||
image: `${SITE_URL}/uploads/2024/12/DSC07768-Large.webp`,
|
||||
}}
|
||||
/>
|
||||
<JsonLd
|
||||
id="person-klaus"
|
||||
data={{
|
||||
'@context': 'https://schema.org',
|
||||
'@type': 'Person',
|
||||
name: t('klaus.name'),
|
||||
jobTitle: t('klaus.role'),
|
||||
worksFor: {
|
||||
'@type': 'Organization',
|
||||
name: 'E-TIB',
|
||||
},
|
||||
sameAs: ['https://www.linkedin.com/in/klaus-mintel-b80a8b193/'],
|
||||
image: `${SITE_URL}/uploads/2024/12/DSC07963-Large.webp`,
|
||||
}}
|
||||
/>
|
||||
{/* Hero Section */}
|
||||
<Reveal>
|
||||
<section className="relative flex items-center justify-center overflow-hidden bg-primary-dark pt-32 pb-24 md:pt-[14%] md:pb-[12%]">
|
||||
<div className="absolute inset-0 z-0">
|
||||
<Image
|
||||
src="/uploads/2024/12/DSC07655-Large.webp"
|
||||
alt="E-TIB Team"
|
||||
fill
|
||||
className="object-cover scale-105 animate-slow-zoom opacity-30 md:opacity-40"
|
||||
sizes="100vw"
|
||||
priority
|
||||
/>
|
||||
<div className="absolute inset-0 bg-gradient-to-b from-primary-dark/80 via-primary-dark/40 to-primary-dark/80" />
|
||||
</div>
|
||||
|
||||
<Container className="relative z-10 text-center text-white max-w-5xl">
|
||||
<Badge variant="saturated" className="mb-4 md:mb-8 shadow-lg">
|
||||
{t('hero.badge')}
|
||||
</Badge>
|
||||
<Heading level={1} className="text-white mb-4 md:mb-8">
|
||||
{t('hero.subtitle')}
|
||||
</Heading>
|
||||
<p className="text-lg md:text-2xl text-white/70 font-medium italic">
|
||||
{t('hero.title')}
|
||||
</p>
|
||||
</Container>
|
||||
</section>
|
||||
</Reveal>
|
||||
|
||||
{/* Michael Bodemer Section - Sticky Narrative Split Layout */}
|
||||
<article className="relative bg-white overflow-hidden">
|
||||
<div className="flex flex-col lg:flex-row">
|
||||
<Reveal className="w-full lg:w-1/2 p-6 md:p-24 lg:p-32 flex flex-col justify-center bg-primary-dark text-white relative order-2 lg:order-1">
|
||||
<div className="absolute top-0 right-0 w-32 h-full bg-accent/5 -skew-x-12 translate-x-1/2" />
|
||||
<div className="relative z-10">
|
||||
<Badge variant="accent" className="mb-4 md:mb-8">
|
||||
{t('michael.role')}
|
||||
</Badge>
|
||||
<Heading level={2} className="text-white mb-6 md:mb-10 text-2xl md:text-4xl">
|
||||
<span className="text-white">{t('michael.name')}</span>
|
||||
</Heading>
|
||||
<div className="relative mb-6 md:mb-12">
|
||||
<div className="absolute -left-4 md:-left-8 top-0 bottom-0 w-1 md:w-1.5 bg-accent rounded-full" />
|
||||
<p className="text-base md:text-xl font-bold italic leading-relaxed pl-5 md:pl-8 text-white/90">
|
||||
{t('michael.quote')}
|
||||
</p>
|
||||
</div>
|
||||
<p className="text-base md:text-xl leading-relaxed text-white/70 mb-6 md:mb-12 max-w-xl">
|
||||
{t('michael.description')}
|
||||
</p>
|
||||
<TrackedButton
|
||||
href="https://www.linkedin.com/in/michael-bodemer-33b493122/"
|
||||
variant="accent"
|
||||
size="lg"
|
||||
className="group w-full md:w-auto md:h-16 md:px-10 md:text-xl active:scale-95 transition-transform"
|
||||
eventProperties={{
|
||||
type: 'social_linkedin',
|
||||
person: 'Michael Bodemer',
|
||||
location: 'team_page',
|
||||
}}
|
||||
>
|
||||
{t('michael.linkedin')}
|
||||
<span className="ml-3 transition-transform group-hover:translate-x-2">→</span>
|
||||
</TrackedButton>
|
||||
</div>
|
||||
</Reveal>
|
||||
<Reveal className="w-full lg:w-1/2 relative min-h-[400px] md:min-h-[600px] lg:min-h-screen overflow-hidden order-1 lg:order-2">
|
||||
<Image
|
||||
src="/uploads/2024/12/DSC07768-Large.webp"
|
||||
alt={t('michael.name')}
|
||||
fill
|
||||
className="object-cover scale-105 hover:scale-100 transition-transform duration-1000"
|
||||
quality={100}
|
||||
sizes="(max-width: 1024px) 100vw, 50vw"
|
||||
/>
|
||||
<div className="absolute inset-0 bg-gradient-to-t from-primary-dark/60 lg:bg-gradient-to-r lg:from-primary-dark/20 to-transparent" />
|
||||
</Reveal>
|
||||
</div>
|
||||
</article>
|
||||
|
||||
{/* Legacy Section - Immersive Background */}
|
||||
<Reveal>
|
||||
<section className="relative py-16 md:py-48 bg-primary-dark text-white overflow-hidden">
|
||||
<div className="absolute inset-0 z-0">
|
||||
<Image
|
||||
src="/uploads/2024/12/1694273920124-copy.webp"
|
||||
alt={t('legacy.subtitle')}
|
||||
fill
|
||||
className="object-cover opacity-20 md:opacity-30 scale-110 animate-slow-zoom"
|
||||
sizes="100vw"
|
||||
/>
|
||||
<div className="absolute inset-0 bg-primary-dark/60 mix-blend-multiply" />
|
||||
</div>
|
||||
<Container className="relative z-10">
|
||||
<div className="grid grid-cols-1 lg:grid-cols-12 gap-8 md:gap-16 items-center">
|
||||
<div className="lg:col-span-6">
|
||||
<Heading
|
||||
level={2}
|
||||
subtitle={t('legacy.subtitle')}
|
||||
className="text-white mb-6 md:mb-10"
|
||||
>
|
||||
<span className="text-white">{t('legacy.title')}</span>
|
||||
</Heading>
|
||||
<div className="space-y-4 md:space-y-8 text-base md:text-2xl text-white/80 leading-relaxed font-medium">
|
||||
<p className="border-l-4 border-accent pl-5 md:pl-8 py-2 bg-white/5 backdrop-blur-sm rounded-r-xl md:rounded-r-2xl">
|
||||
{t('legacy.p1')}
|
||||
</p>
|
||||
<p className="pl-6 md:pl-9 line-clamp-3 md:line-clamp-none">{t('legacy.p2')}</p>
|
||||
</div>
|
||||
</div>
|
||||
<div className="lg:col-span-6 grid grid-cols-2 md:grid-cols-2 gap-3 md:gap-6">
|
||||
<div className="p-4 md:p-8 bg-white/5 backdrop-blur-md border border-white/10 rounded-2xl md:rounded-[32px] hover:bg-white/10 transition-colors">
|
||||
<div className="text-xl md:text-4xl font-extrabold text-accent mb-1 md:mb-2">
|
||||
{t('legacy.expertise')}
|
||||
</div>
|
||||
<div className="text-[10px] md:text-sm font-bold uppercase tracking-widest text-white/50">
|
||||
{t('legacy.expertiseDesc')}
|
||||
</div>
|
||||
</div>
|
||||
<div className="p-4 md:p-8 bg-white/5 backdrop-blur-md border border-white/10 rounded-2xl md:rounded-[32px] hover:bg-white/10 transition-colors">
|
||||
<div className="text-xl md:text-4xl font-extrabold text-accent mb-1 md:mb-2">
|
||||
{t('legacy.network')}
|
||||
</div>
|
||||
<div className="text-[10px] md:text-sm font-bold uppercase tracking-widest text-white/50">
|
||||
{t('legacy.networkDesc')}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</Container>
|
||||
</section>
|
||||
</Reveal>
|
||||
|
||||
{/* Klaus Mintel Section - Reversed Split Layout */}
|
||||
<article className="relative bg-white overflow-hidden">
|
||||
<div className="flex flex-col lg:flex-row">
|
||||
<Reveal className="w-full lg:w-1/2 relative min-h-[400px] md:min-h-[600px] lg:min-h-screen overflow-hidden order-1">
|
||||
<Image
|
||||
src="/uploads/2024/12/DSC07963-Large.webp"
|
||||
alt={t('klaus.name')}
|
||||
fill
|
||||
className="object-cover scale-105 hover:scale-100 transition-transform duration-1000"
|
||||
quality={100}
|
||||
sizes="(max-width: 1024px) 100vw, 50vw"
|
||||
/>
|
||||
<div className="absolute inset-0 bg-gradient-to-t from-white/60 lg:bg-gradient-to-l lg:from-primary-dark/20 to-transparent" />
|
||||
</Reveal>
|
||||
<Reveal className="w-full lg:w-1/2 p-6 md:p-24 lg:p-32 flex flex-col justify-center bg-neutral-light text-saturated relative order-2">
|
||||
<div className="absolute top-0 left-0 w-32 h-full bg-saturated/5 skew-x-12 -translate-x-1/2" />
|
||||
<div className="relative z-10">
|
||||
<Badge variant="saturated" className="mb-4 md:mb-8">
|
||||
{t('klaus.role')}
|
||||
</Badge>
|
||||
<Heading level={2} className="text-saturated mb-6 md:mb-10 text-2xl md:text-4xl">
|
||||
{t('klaus.name')}
|
||||
</Heading>
|
||||
<div className="relative mb-6 md:mb-12">
|
||||
<div className="absolute -left-4 md:-left-8 top-0 bottom-0 w-1 md:w-1.5 bg-saturated rounded-full" />
|
||||
<p className="text-base md:text-xl font-bold italic leading-relaxed pl-5 md:pl-8 text-text-secondary">
|
||||
{t('klaus.quote')}
|
||||
</p>
|
||||
</div>
|
||||
<p className="text-base md:text-xl leading-relaxed text-text-secondary mb-6 md:mb-12 max-w-xl">
|
||||
{t('klaus.description')}
|
||||
</p>
|
||||
<TrackedButton
|
||||
href="https://www.linkedin.com/in/klaus-mintel-b80a8b193/"
|
||||
variant="saturated"
|
||||
size="lg"
|
||||
className="group w-full md:w-auto md:h-16 md:px-10 md:text-xl active:scale-95 transition-transform"
|
||||
eventProperties={{
|
||||
type: 'social_linkedin',
|
||||
person: 'Klaus Mintel',
|
||||
location: 'team_page',
|
||||
}}
|
||||
>
|
||||
{t('klaus.linkedin')}
|
||||
<span className="ml-3 transition-transform group-hover:translate-x-2">→</span>
|
||||
</TrackedButton>
|
||||
</div>
|
||||
</Reveal>
|
||||
</div>
|
||||
</article>
|
||||
|
||||
{/* Manifesto Section - Modern Grid */}
|
||||
<Section className="bg-white text-primary py-16 md:py-28">
|
||||
<Container>
|
||||
<div className="sticky-narrative-container">
|
||||
<div className="sticky-narrative-sidebar mb-8 lg:mb-0">
|
||||
<div className="lg:sticky lg:top-32">
|
||||
<Heading level={2} subtitle={t('manifesto.subtitle')} className="mb-4 md:mb-8">
|
||||
{t('manifesto.title')}
|
||||
</Heading>
|
||||
<p className="text-base md:text-xl text-text-secondary leading-relaxed">
|
||||
{t('manifesto.tagline')}
|
||||
</p>
|
||||
|
||||
{/* Mobile-only progress indicator */}
|
||||
<div className="flex lg:hidden mt-8 gap-2">
|
||||
{[0, 1, 2, 3, 4, 5].map((i) => (
|
||||
<div
|
||||
key={i}
|
||||
className="h-1.5 flex-1 bg-neutral-medium rounded-full overflow-hidden"
|
||||
>
|
||||
<div className="h-full bg-accent w-0 group-active:w-full transition-all duration-500" />
|
||||
</div>
|
||||
))}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<ul className="sticky-narrative-content grid grid-cols-1 md:grid-cols-2 gap-4 md:gap-10 list-none p-0 m-0">
|
||||
{[0, 1, 2, 3, 4, 5].map((idx) => (
|
||||
<li
|
||||
key={idx}
|
||||
className="p-6 md:p-10 bg-neutral-light rounded-2xl md:rounded-[40px] border border-transparent hover:border-accent hover:bg-white hover:shadow-2xl transition-all duration-500 group active:scale-[0.98] touch-target-none"
|
||||
>
|
||||
<div className="w-10 h-10 md:w-16 md:h-16 bg-white rounded-xl md:rounded-2xl flex items-center justify-center mb-4 md:mb-8 shadow-sm group-hover:bg-accent transition-colors duration-500">
|
||||
<span className="text-primary font-extrabold text-lg md:text-2xl group-hover:text-primary-dark">
|
||||
0{idx + 1}
|
||||
</span>
|
||||
</div>
|
||||
<h3 className="text-lg md:text-2xl font-bold mb-2 md:mb-4 text-primary">
|
||||
{t(`manifesto.items.${idx}.title`)}
|
||||
</h3>
|
||||
<p className="text-sm md:text-lg text-text-secondary leading-relaxed">
|
||||
{t(`manifesto.items.${idx}.description`)}
|
||||
</p>
|
||||
</li>
|
||||
))}
|
||||
</ul>
|
||||
</div>
|
||||
</Container>
|
||||
</Section>
|
||||
|
||||
<Reveal>
|
||||
<Gallery />
|
||||
</Reveal>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
@@ -16,7 +16,7 @@ export function OGImageTemplate({
|
||||
mode = 'dark',
|
||||
}: OGImageTemplateProps) {
|
||||
const primaryBlue = '#001a4d';
|
||||
const accentGreen = '#82ed20';
|
||||
const accentGreen = '#10a379';
|
||||
const saturatedBlue = '#011dff';
|
||||
|
||||
const containerStyle: React.CSSProperties = {
|
||||
|
||||
213
components/blocks/CertificatesBlock.tsx
Normal file
@@ -0,0 +1,213 @@
|
||||
'use client';
|
||||
|
||||
import { useState, useEffect } from 'react';
|
||||
import { motion } from 'framer-motion';
|
||||
import { Container } from '@/components/ui/Container';
|
||||
import { Button } from '@/components/ui/Button';
|
||||
import { HoverShineOverlay } from '@/components/ui/HoverShineOverlay';
|
||||
import { AnimatedGlossyBorder } from '@/components/ui/AnimatedGlossyBorder';
|
||||
import { FileText, Award, Download, ShieldCheck } from 'lucide-react';
|
||||
import { LogoArcs } from '@/components/ui/LogoArcs';
|
||||
|
||||
interface Certificate {
|
||||
title: string;
|
||||
description: string;
|
||||
pdfUrl: string;
|
||||
type: 'iso' | 'tax' | 'general';
|
||||
date?: string;
|
||||
}
|
||||
|
||||
interface CertificatesBlockProps {
|
||||
badge?: string;
|
||||
title?: string;
|
||||
description?: string;
|
||||
certificates?: Certificate[];
|
||||
hideHeader?: boolean;
|
||||
}
|
||||
|
||||
const defaultCertificates: Certificate[] = [
|
||||
{
|
||||
title: 'ISO 14001:2015',
|
||||
description: 'Umweltmanagementsystem',
|
||||
pdfUrl: '/assets/certificates/231214_Zertifikat ISO 14001 Umweltmanagement.pdf',
|
||||
type: 'iso',
|
||||
date: '14.12.2023',
|
||||
},
|
||||
{
|
||||
title: 'ISO 9001:2015',
|
||||
description: 'Qualitätsmanagementsystem',
|
||||
pdfUrl: '/assets/certificates/231214_Zertifikat ISO 9001 Qualitätsmanagement.pdf',
|
||||
type: 'iso',
|
||||
date: '14.12.2023',
|
||||
},
|
||||
{
|
||||
title: 'DIN EN ISO 45001:2018',
|
||||
description: 'Arbeits- und Gesundheitsschutz',
|
||||
pdfUrl: '/assets/certificates/Zertifizierung DIN EN ISO 45001 bis 05122028.pdf',
|
||||
type: 'iso',
|
||||
date: '05.12.2025', // Assuming valid till
|
||||
},
|
||||
{
|
||||
title: 'Freistellungsbescheinigung',
|
||||
description: 'Nach § 48 b EStG',
|
||||
pdfUrl: '/assets/certificates/240209_Freistellungsbescheinigung § 48 b.pdf',
|
||||
type: 'tax',
|
||||
date: '09.02.2024',
|
||||
},
|
||||
{
|
||||
title: 'Nachweis § 13b UStG',
|
||||
description: 'Steuerschuldnerschaft des Leistungsempfängers',
|
||||
pdfUrl: '/assets/certificates/240209_Nachweis § 13 b.pdf',
|
||||
type: 'tax',
|
||||
date: '09.02.2024',
|
||||
},
|
||||
{
|
||||
title: 'Bescheinigung in Steuersachen',
|
||||
description: 'Zertifikat des Finanzamtes',
|
||||
pdfUrl: '/assets/certificates/250213_Bescheinigung in Steuersachen.pdf',
|
||||
type: 'tax',
|
||||
date: '13.02.2025',
|
||||
},
|
||||
];
|
||||
|
||||
export function CertificatesBlock({ badge, title, description, certificates = defaultCertificates, hideHeader = false }: CertificatesBlockProps) {
|
||||
const [isMounted, setIsMounted] = useState(false);
|
||||
|
||||
useEffect(() => {
|
||||
setIsMounted(true);
|
||||
}, []);
|
||||
|
||||
const badgeText = badge || 'Zertifizierungen & Nachweise';
|
||||
const titleText = title || 'Geprüfte Qualität und Sicherheit';
|
||||
const descriptionText = description || 'Transparenz und höchste Standards sind das Fundament unserer Arbeit. Hier finden Sie unsere aktuellen Zertifikate und Bescheinigungen als PDF-Download.';
|
||||
|
||||
const containerVariants = {
|
||||
hidden: { opacity: 0 },
|
||||
show: {
|
||||
opacity: 1,
|
||||
transition: {
|
||||
staggerChildren: 0.1,
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
const itemVariants = {
|
||||
hidden: { opacity: 0, y: 20 },
|
||||
show: { opacity: 1, y: 0, transition: { duration: 0.5, ease: 'easeOut' } },
|
||||
};
|
||||
|
||||
if (!isMounted) {
|
||||
return (
|
||||
<section className="py-24 bg-neutral-50 relative overflow-hidden">
|
||||
<Container>
|
||||
{!hideHeader && (
|
||||
<div className="text-center max-w-3xl mx-auto mb-16">
|
||||
<h2 className="text-primary font-bold tracking-wider uppercase text-sm mb-3">{badgeText}</h2>
|
||||
<h3 className="font-heading text-3xl md:text-5xl font-extrabold text-neutral-dark mb-6">{titleText}</h3>
|
||||
<p className="text-lg text-neutral-600">{descriptionText}</p>
|
||||
</div>
|
||||
)}
|
||||
</Container>
|
||||
</section>
|
||||
);
|
||||
}
|
||||
|
||||
return (
|
||||
<section className="py-24 bg-neutral-50 relative overflow-hidden">
|
||||
{/* Background Accents */}
|
||||
<div className="absolute top-0 right-0 w-1/3 h-full bg-primary/5 -skew-x-12 translate-x-1/2" />
|
||||
<div className="absolute bottom-0 left-0 w-1/4 h-1/2 bg-accent/5 skew-y-12 -translate-x-1/2 blur-3xl rounded-full" />
|
||||
|
||||
<Container className="relative z-10">
|
||||
{!hideHeader && (
|
||||
<div className="text-center max-w-3xl mx-auto mb-16">
|
||||
<motion.div
|
||||
initial={{ opacity: 0, y: 20 }}
|
||||
whileInView={{ opacity: 1, y: 0 }}
|
||||
viewport={{ once: true }}
|
||||
transition={{ duration: 0.5 }}
|
||||
>
|
||||
<h2 className="text-primary font-bold tracking-wider uppercase text-sm mb-3">{badgeText}</h2>
|
||||
<h3 className="font-heading text-3xl md:text-5xl font-extrabold text-neutral-dark mb-6">{titleText}</h3>
|
||||
<p className="text-lg text-neutral-600">{descriptionText}</p>
|
||||
</motion.div>
|
||||
</div>
|
||||
)}
|
||||
|
||||
<motion.div
|
||||
className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6"
|
||||
variants={containerVariants}
|
||||
initial="hidden"
|
||||
whileInView="show"
|
||||
viewport={{ once: true, margin: "-50px" }}
|
||||
>
|
||||
{certificates.map((cert, index) => {
|
||||
const isIso = cert.type === 'iso';
|
||||
|
||||
return (
|
||||
<motion.a
|
||||
key={index}
|
||||
href={cert.pdfUrl}
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
variants={itemVariants}
|
||||
className={`group relative rounded-2xl p-8 flex flex-col justify-between overflow-hidden transition-all duration-500 hover:shadow-xl hover:-translate-y-1 border ${
|
||||
isIso
|
||||
? 'bg-neutral-dark text-white border-neutral-800 shadow-lg'
|
||||
: 'bg-white text-neutral-dark border-neutral-200 shadow-md'
|
||||
}`}
|
||||
>
|
||||
{/* Background Decorative Elements */}
|
||||
<div className={`absolute top-0 right-0 w-32 h-32 blur-3xl rounded-full -mr-10 -mt-10 transition-colors duration-500 ${
|
||||
isIso ? 'bg-primary/20 group-hover:bg-primary/40' : 'bg-primary/10 group-hover:bg-primary/20'
|
||||
}`} />
|
||||
|
||||
{isIso && (
|
||||
<div className="absolute -bottom-[20%] -right-[20%] w-[100%] h-[100%] z-0 opacity-10 group-hover:opacity-20 transition-opacity duration-1000 pointer-events-none mix-blend-overlay">
|
||||
<LogoArcs className="w-full h-full text-white animate-[spin_60s_linear_infinite]" />
|
||||
</div>
|
||||
)}
|
||||
|
||||
<HoverShineOverlay shineColor={isIso ? 'via-white/20' : 'via-black/5'} />
|
||||
<AnimatedGlossyBorder color={isIso ? 'primary' : 'primary'} className="opacity-0 group-hover:opacity-100 transition-opacity duration-700" borderWidth={2} />
|
||||
|
||||
<div className="relative z-10 flex flex-col h-full">
|
||||
<div className="flex justify-between items-start mb-8">
|
||||
<div className={`p-3 rounded-xl inline-flex ${
|
||||
isIso ? 'bg-primary/20 text-primary-light backdrop-blur-md' : 'bg-primary/10 text-primary'
|
||||
}`}>
|
||||
{isIso ? <Award size={28} /> : <ShieldCheck size={28} />}
|
||||
</div>
|
||||
{cert.date && (
|
||||
<span className={`text-xs font-bold uppercase tracking-wider px-3 py-1 rounded-full ${
|
||||
isIso ? 'bg-neutral-800 text-neutral-400 border border-neutral-700' : 'bg-neutral-100 text-neutral-500 border border-neutral-200'
|
||||
}`}>
|
||||
{cert.date}
|
||||
</span>
|
||||
)}
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<h4 className={`text-xl font-bold mb-2 ${isIso ? 'text-white' : 'text-neutral-dark'}`}>
|
||||
{cert.title}
|
||||
</h4>
|
||||
<p className={`text-sm mb-6 ${isIso ? 'text-neutral-400' : 'text-neutral-600'}`}>
|
||||
{cert.description}
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div className={`mt-auto inline-flex items-center text-sm font-bold uppercase tracking-wider group-hover:gap-3 transition-all ${
|
||||
isIso ? 'text-primary-light' : 'text-primary'
|
||||
}`}>
|
||||
<span>Download PDF</span>
|
||||
<Download size={16} className="ml-2 group-hover:translate-y-0.5 transition-transform" />
|
||||
</div>
|
||||
</div>
|
||||
</motion.a>
|
||||
);
|
||||
})}
|
||||
</motion.div>
|
||||
</Container>
|
||||
</section>
|
||||
);
|
||||
}
|
||||
@@ -21,7 +21,7 @@ const defaultMilestones = [
|
||||
date: '16.12.2015',
|
||||
year: '2015',
|
||||
title: 'Gründung E-TIB GmbH',
|
||||
desc: 'Ausführung elektrischer Infrastrukturprojekte, Kabelbau und Horizontalspülbohrungen.',
|
||||
desc: 'Ausführung elektrischer Infrastrukturprojekte, Kabeltiefbau und Horizontalspülbohrungen.',
|
||||
iconName: 'Building2',
|
||||
},
|
||||
{
|
||||
|
||||
@@ -19,6 +19,7 @@ interface CompetenceBentoGridProps {
|
||||
title?: string;
|
||||
description?: string;
|
||||
tag?: string;
|
||||
href?: string;
|
||||
image?: {
|
||||
url?: string;
|
||||
alt?: string;
|
||||
@@ -34,6 +35,7 @@ interface CompetenceBentoGridProps {
|
||||
title?: string;
|
||||
description?: string;
|
||||
tag?: string;
|
||||
href?: string;
|
||||
image?: {
|
||||
url?: string;
|
||||
alt?: string;
|
||||
@@ -111,8 +113,11 @@ export function CompetenceBentoGrid(props: CompetenceBentoGridProps) {
|
||||
whileInView={{ opacity: 1, y: 0 }}
|
||||
viewport={{ once: true }}
|
||||
transition={{ delay: idx * 0.1 }}
|
||||
className={gridClasses}
|
||||
className={`${gridClasses} ${item.href ? 'cursor-pointer hover:-translate-y-1 transition-transform duration-300' : ''}`}
|
||||
>
|
||||
{item.href && (
|
||||
<Link href={item.href} className="absolute inset-0 z-30" aria-label={item.title} />
|
||||
)}
|
||||
<div className="absolute top-0 right-0 w-32 h-32 bg-primary/30 blur-3xl rounded-full -mr-10 -mt-10 group-hover:bg-primary/50 transition-colors duration-500" />
|
||||
|
||||
{/* Subtle Background Logo Arcs */}
|
||||
@@ -135,8 +140,11 @@ export function CompetenceBentoGrid(props: CompetenceBentoGridProps) {
|
||||
whileInView={{ opacity: 1, scale: 1 }}
|
||||
viewport={{ once: true }}
|
||||
transition={{ delay: idx * 0.1 }}
|
||||
className={gridClasses}
|
||||
className={`${gridClasses} ${item.href ? 'cursor-pointer hover:-translate-y-1 transition-transform duration-300' : ''}`}
|
||||
>
|
||||
{item.href && (
|
||||
<Link href={item.href} className="absolute inset-0 z-30" aria-label={item.title} />
|
||||
)}
|
||||
{!imgSrc && (
|
||||
<div className="absolute inset-0 bg-neutral-dark z-0 transition-colors duration-500 group-hover:bg-primary-dark" />
|
||||
)}
|
||||
|
||||
@@ -42,7 +42,7 @@ export const HeroSection: React.FC<HeroSectionProps> = (props) => {
|
||||
|
||||
return (
|
||||
<section
|
||||
className={`relative min-h-[50vh] md:min-h-[70vh] flex items-center pt-32 pb-20 md:pt-40 md:pb-32 overflow-hidden bg-primary-dark ${alignment === 'center' ? 'justify-center text-center' : ''}`}
|
||||
className={`relative min-h-[45vh] md:min-h-[55vh] flex items-center pt-32 pb-20 md:pt-36 md:pb-24 overflow-hidden bg-neutral-dark ${alignment === 'center' ? 'justify-center text-center' : ''}`}
|
||||
>
|
||||
{bgSrc && (
|
||||
<motion.div
|
||||
@@ -55,14 +55,22 @@ export const HeroSection: React.FC<HeroSectionProps> = (props) => {
|
||||
src={bgSrc}
|
||||
alt={title || 'Hero Background'}
|
||||
fill
|
||||
className="object-cover opacity-30 md:opacity-40"
|
||||
className="object-cover filter contrast-110 saturate-110 brightness-95"
|
||||
style={{
|
||||
objectPosition: `${backgroundImage?.focalX ?? 50}% ${backgroundImage?.focalY ?? 50}%`,
|
||||
}}
|
||||
sizes="100vw"
|
||||
priority
|
||||
/>
|
||||
<div className="absolute inset-0 bg-gradient-to-b from-primary-dark/80 via-primary-dark/40 to-primary-dark/80" />
|
||||
{/* Cinematic Color Grading Overlay */}
|
||||
<div className="absolute inset-0 bg-[#0a192f]/30 z-[2] mix-blend-multiply" />
|
||||
|
||||
{/* Dramatic Vignette & Fade to content */}
|
||||
<div className="absolute inset-0 bg-[radial-gradient(ellipse_at_center,_var(--tw-gradient-stops))] from-transparent via-black/20 to-black/80 z-[2]" />
|
||||
<div className="absolute inset-0 bg-gradient-to-t from-neutral-dark via-neutral-dark/60 to-transparent z-[3]" />
|
||||
|
||||
{/* Top Fade for Header Navigation Readability */}
|
||||
<div className="absolute top-0 left-0 w-full h-48 bg-gradient-to-b from-black/70 to-transparent z-[3] pointer-events-none" />
|
||||
</motion.div>
|
||||
)}
|
||||
<Container className={`relative z-10 ${alignment === 'center' ? 'max-w-5xl' : ''}`}>
|
||||
@@ -80,19 +88,19 @@ export const HeroSection: React.FC<HeroSectionProps> = (props) => {
|
||||
</motion.div>
|
||||
)}
|
||||
<motion.div variants={itemVariants}>
|
||||
<Heading level={1} className="text-white mb-4 md:mb-8">
|
||||
<Heading level={1} variant="white" align={alignment || 'left'} className="mb-4 md:mb-8">
|
||||
{title}
|
||||
</Heading>
|
||||
</motion.div>
|
||||
{subtitle && (
|
||||
<motion.div variants={itemVariants}>
|
||||
<p className="text-lg md:text-2xl text-white/70 font-medium leading-relaxed max-w-2xl">
|
||||
<p className={`text-lg md:text-2xl text-white/70 font-medium leading-relaxed max-w-2xl ${alignment === 'center' ? 'mx-auto' : ''}`}>
|
||||
{subtitle}
|
||||
</p>
|
||||
</motion.div>
|
||||
)}
|
||||
{ctaLabel && ctaHref && (
|
||||
<motion.div variants={itemVariants} className="mt-8">
|
||||
<motion.div variants={itemVariants} className={`mt-8 ${alignment === 'center' ? 'flex justify-center' : ''}`}>
|
||||
<Button
|
||||
href={ctaHref}
|
||||
variant="accent"
|
||||
|
||||
@@ -12,6 +12,7 @@ interface HeroVideoProps {
|
||||
description?: string;
|
||||
videoUrl?: string;
|
||||
posterImage?: any;
|
||||
backgroundImage?: any;
|
||||
ctaLabel?: string;
|
||||
ctaHref?: string;
|
||||
linkText?: string;
|
||||
@@ -25,11 +26,11 @@ export function HeroVideo(props: HeroVideoProps) {
|
||||
const { data } = props;
|
||||
const title = props.title || data?.title || 'DIE EXPERTEN FÜR KABELTIEFBAU';
|
||||
const subtitle = props.subtitle || props.description || data?.subtitle || 'Wir verbinden Infrastruktur mit Präzision. Von Horizontalbohrungen bis zu komplexen Leitungsnetzen.';
|
||||
const videoUrl = props.videoUrl || data?.videoUrl || '/assets/dummy-hero.mp4';
|
||||
const explicitNoVideo = props.videoUrl === 'none' || props.videoUrl === '';
|
||||
const videoUrl = explicitNoVideo ? null : (props.videoUrl || data?.videoUrl || '/assets/dummy-hero.mp4');
|
||||
|
||||
|
||||
const posterSrc = data?.posterImage?.url || "/assets/photos/DJI_0048.JPG";
|
||||
const posterAlt = data?.posterImage?.alt || "E-TIB Gruppe Baustelle";
|
||||
const posterSrc = props.backgroundImage?.url || props.posterImage?.url || data?.posterImage?.url || "/assets/photos/DJI_0048.JPG";
|
||||
const posterAlt = props.backgroundImage?.alt || data?.posterImage?.alt || "E-TIB Gruppe Baustelle";
|
||||
|
||||
const ctaLabel = props.ctaLabel || props.linkText || data?.ctaLabel || 'Unternehmen entdecken';
|
||||
const ctaHref = props.ctaHref || props.linkHref || data?.ctaHref || '#unternehmen';
|
||||
@@ -53,7 +54,7 @@ export function HeroVideo(props: HeroVideoProps) {
|
||||
{/* Background color while video loads */}
|
||||
<div className="absolute inset-0 z-0 bg-neutral-dark" />
|
||||
|
||||
{videoUrl && (
|
||||
{videoUrl ? (
|
||||
<video
|
||||
key={videoUrl}
|
||||
className="absolute inset-0 w-full h-full object-cover z-1 pointer-events-none filter contrast-125 saturate-110 brightness-90"
|
||||
@@ -64,6 +65,15 @@ export function HeroVideo(props: HeroVideoProps) {
|
||||
playsInline
|
||||
preload="auto"
|
||||
/>
|
||||
) : (
|
||||
<Image
|
||||
src={posterSrc}
|
||||
alt={posterAlt}
|
||||
fill
|
||||
className="object-cover z-1 pointer-events-none filter contrast-125 saturate-110 brightness-90"
|
||||
sizes="100vw"
|
||||
priority
|
||||
/>
|
||||
)}
|
||||
|
||||
{/* Cinematic Color Grading Overlay */}
|
||||
|
||||
@@ -2,9 +2,10 @@
|
||||
|
||||
import React, { useState } from 'react';
|
||||
import { motion, AnimatePresence } from 'framer-motion';
|
||||
import { MapPin, Factory, Zap, CheckCircle2 } from 'lucide-react';
|
||||
import { MapPin, Factory, Zap, CheckCircle2, ArrowUpRight } from 'lucide-react';
|
||||
import Image from 'next/image';
|
||||
import { useRouter } from 'next/navigation';
|
||||
import { AnimatedGlossyBorder } from '@/components/ui/AnimatedGlossyBorder';
|
||||
import { Location, defaultLocations } from '@/lib/map-data';
|
||||
|
||||
interface Stat {
|
||||
@@ -42,7 +43,10 @@ export function InteractiveGermanyMap({
|
||||
|
||||
return (
|
||||
<div className={isHero ? "relative w-full" : "relative w-full max-w-7xl mx-auto py-16 md:py-24 px-4 sm:px-6 mt-16 md:mt-20"}>
|
||||
<div className={`bg-[#050B14] ${isHero ? 'pt-32 pb-16 md:pt-40 md:pb-24' : 'rounded-[2.5rem] md:rounded-[3.5rem] shadow-2xl border border-white/5'} overflow-visible relative`}>
|
||||
<div className={`bg-[#050B14] ${isHero ? 'pt-32 pb-16 md:pt-40 md:pb-24' : 'rounded-[2.5rem] md:rounded-[3.5rem] shadow-2xl border border-white/5'} overflow-visible relative group/map`}>
|
||||
{/* Animated Border Glow */}
|
||||
{!isHero && <AnimatedGlossyBorder opacity={0.7} className="z-30" />}
|
||||
|
||||
{/* Background Effects */}
|
||||
<div className={`absolute inset-0 bg-gradient-to-br from-[#050B14] via-[#0A1322] to-[#050B14] ${!isHero && 'rounded-[2.5rem] md:rounded-[3.5rem]'} overflow-hidden`} />
|
||||
<div className="absolute top-0 right-0 w-[800px] h-[800px] bg-primary/5 rounded-full blur-[120px] pointer-events-none translate-x-1/3 -translate-y-1/3 overflow-hidden" />
|
||||
@@ -91,7 +95,7 @@ export function InteractiveGermanyMap({
|
||||
{/* Map Container - Enforce strict aspect ratio matching the SVG (1024x1024) */}
|
||||
<div className="relative w-full max-w-[600px] aspect-square z-10">
|
||||
{/* Map SVG */}
|
||||
<div className="absolute inset-0 opacity-[0.15] mix-blend-screen drop-shadow-2xl brightness-150">
|
||||
<div className="absolute inset-0 opacity-[0.25] mix-blend-screen drop-shadow-2xl brightness-200">
|
||||
<Image
|
||||
src="/germany-map.svg"
|
||||
alt="Deutschlandkarte"
|
||||
|
||||
@@ -49,11 +49,11 @@ export const JobListingBlock = (props: JobListingBlockProps) => {
|
||||
title,
|
||||
showJobs = true,
|
||||
showFairs,
|
||||
fairsTitle = 'Nächste Messetermine 2026',
|
||||
fairsTitle = 'Nächste Messetermine',
|
||||
fairs = [
|
||||
{ name: 'Intersolar München', date: '19. - 21. Juni 2026', type: 'Energie-Messe', location: 'Messe München', booth: 'Halle A3, Stand 110', url: 'https://www.intersolar.de' },
|
||||
{ name: 'Windenergietage Linstow', date: '04. - 06. November 2026', type: 'Fachkongress', location: 'Van der Valk Resort Linstow', booth: 'Stand 42', url: 'https://windenergietage.de' },
|
||||
{ name: 'Kabelwerkstatt Wiesbaden', date: '02. - 03. Dezember 2026', type: 'Fachmesse', location: 'RheinMain CongressCenter', booth: 'Halle 1, Stand B20' }
|
||||
{ name: 'Intersolar München', date: 'Termin folgt', type: 'Energie-Messe', location: 'Messe München' },
|
||||
{ name: 'Windenergietage Linstow', date: 'Termin folgt', type: 'Fachkongress', location: 'Linstow' },
|
||||
{ name: 'Kabelwerkstatt Wiesbaden', date: 'Termin folgt', type: 'Fachmesse', location: 'Wiesbaden' }
|
||||
],
|
||||
emptyStateMessage = 'Aktuell sind alle Positionen besetzt. Senden Sie uns gerne eine Initiativbewerbung!',
|
||||
emptyStateLinkText = 'Jetzt Kontakt aufnehmen',
|
||||
|
||||
@@ -81,7 +81,7 @@ export function ReferencesSlider(props: ReferencesSliderProps) {
|
||||
};
|
||||
|
||||
return (
|
||||
<section className="py-24 bg-neutral-dark text-white relative overflow-hidden">
|
||||
<section id="referenzen" className="py-24 bg-neutral-dark text-white relative overflow-hidden">
|
||||
<div className="absolute inset-0 bg-gradient-to-b from-neutral-dark via-neutral-900 to-neutral-dark z-0" />
|
||||
|
||||
<div className="container relative z-10 mb-12 flex flex-col md:flex-row justify-between items-end gap-6">
|
||||
@@ -129,11 +129,11 @@ export function ReferencesSlider(props: ReferencesSliderProps) {
|
||||
|
||||
<HoverShineOverlay />
|
||||
|
||||
<div className="absolute bottom-6 left-8 right-8 transform translate-y-4 group-hover:translate-y-0 transition-transform duration-500 pointer-events-none">
|
||||
<span className="inline-block py-1.5 px-4 rounded-full bg-primary/30 backdrop-blur-md text-white text-xs font-bold uppercase tracking-widest mb-3 border border-primary/50">
|
||||
<div className="absolute bottom-6 left-6 right-6 transform translate-y-4 group-hover:translate-y-0 transition-transform duration-500 pointer-events-none bg-black/60 backdrop-blur-sm p-4 rounded-xl border border-white/10">
|
||||
<span className="inline-block py-1 px-3 rounded-full bg-primary/20 text-white text-[10px] font-bold uppercase tracking-widest mb-2 border border-primary/30">
|
||||
{ref.category}
|
||||
</span>
|
||||
<h4 className="font-heading text-2xl md:text-3xl font-bold line-clamp-2">{ref.title}</h4>
|
||||
<h4 className="font-heading text-xl md:text-2xl font-bold leading-tight break-words">{ref.title}</h4>
|
||||
</div>
|
||||
</div>
|
||||
</motion.div>
|
||||
|
||||
@@ -194,8 +194,8 @@ export function ServiceDetailGrid({
|
||||
<HoverShineOverlay shineColor="via-primary/5" />
|
||||
|
||||
<div className="relative z-10 flex flex-col md:flex-row justify-between items-start mb-12 gap-6">
|
||||
<div className="pt-2">
|
||||
<h4 className="text-2xl md:text-3xl font-extrabold text-neutral-dark uppercase tracking-wider">{panel.title}</h4>
|
||||
<div className="pt-2 flex-1 min-w-0 pr-4">
|
||||
<h4 className="text-2xl md:text-3xl font-extrabold text-neutral-dark uppercase tracking-wider break-words hyphens-auto" lang="de">{panel.title}</h4>
|
||||
<div className="h-1 w-12 bg-primary mt-6 transition-all duration-700 group-hover:w-24 rounded-full"></div>
|
||||
</div>
|
||||
|
||||
|
||||
@@ -3,7 +3,6 @@
|
||||
import * as React from 'react';
|
||||
import { motion } from 'framer-motion';
|
||||
import Image from 'next/image';
|
||||
import { HoverShineOverlay } from '@/components/ui/HoverShineOverlay';
|
||||
|
||||
export interface TeamMember {
|
||||
id: string;
|
||||
@@ -15,7 +14,7 @@ export interface TeamMember {
|
||||
url: string;
|
||||
alt?: string;
|
||||
} | string | null;
|
||||
branch: string;
|
||||
branch?: string;
|
||||
}
|
||||
|
||||
interface TeamGridProps {
|
||||
@@ -36,61 +35,137 @@ export function TeamGrid({ members }: TeamGridProps) {
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-8">
|
||||
{members.map((member, i) => (
|
||||
{members.length > 0 && (
|
||||
<div className="mb-20">
|
||||
<motion.div
|
||||
initial={{ opacity: 0, y: 30 }}
|
||||
whileInView={{ opacity: 1, y: 0 }}
|
||||
viewport={{ once: true }}
|
||||
className="relative rounded-[2.5rem] bg-neutral-dark overflow-hidden shadow-2xl border border-white/10"
|
||||
>
|
||||
{/* Premium Background Effects */}
|
||||
<div className="absolute inset-0 bg-[radial-gradient(circle_at_top_right,rgba(238,114,3,0.15),transparent_50%)] pointer-events-none" />
|
||||
<div className="absolute top-0 right-0 w-[500px] h-[500px] bg-primary/20 blur-[120px] mix-blend-screen rounded-full pointer-events-none" />
|
||||
<div className="absolute inset-0 opacity-20 pointer-events-none" style={{ backgroundImage: "url('data:image/svg+xml,%3Csvg width=\\'40\\' height=\\'40\\' viewBox=\\'0 0 40 40\\' xmlns=\\'http://www.w3.org/2000/svg\\'%3E%3Cpath d=\\'M0 0h40v40H0V0zm20 20h20v20H20V20zM0 20h20v20H0V20z\\' fill=\\'%23ffffff\\' fill-opacity=\\'0.02\\' fill-rule=\\'evenodd\\'/%3E%3C/svg%3E')" }} />
|
||||
|
||||
<div className="relative z-10 flex flex-col lg:flex-row items-center justify-between p-8 md:p-12 lg:p-20 gap-12 lg:gap-16">
|
||||
{/* Text Content */}
|
||||
<div className="w-full lg:w-[55%] flex flex-col justify-center text-white">
|
||||
<div className="inline-flex items-center space-x-2 px-4 py-1.5 mb-8 rounded-full border border-primary/30 bg-primary/10 text-primary text-xs font-bold uppercase tracking-widest self-start backdrop-blur-md shadow-[0_0_20px_rgba(238,114,3,0.2)]">
|
||||
<span className="relative flex h-2 w-2 mr-1">
|
||||
<span className="animate-ping absolute inline-flex h-full w-full rounded-full bg-primary opacity-75"></span>
|
||||
<span className="relative inline-flex rounded-full h-2 w-2 bg-primary"></span>
|
||||
</span>
|
||||
Geschäftsführung
|
||||
</div>
|
||||
<h3 className="font-heading font-black text-5xl md:text-6xl lg:text-7xl mb-4 leading-[1.1] tracking-tight">
|
||||
{members[0].name}
|
||||
</h3>
|
||||
<p className="text-xl md:text-2xl text-white/70 font-medium mb-10 leading-relaxed max-w-xl">
|
||||
{members[0].position}
|
||||
</p>
|
||||
|
||||
<div className="flex flex-col sm:flex-row gap-4">
|
||||
{members[0].email && (
|
||||
<a href={`mailto:${members[0].email}`} className="group flex items-center justify-center sm:justify-start gap-4 bg-white/5 hover:bg-primary border border-white/10 hover:border-primary px-6 py-4 rounded-2xl transition-all duration-300 shadow-lg">
|
||||
<svg className="w-5 h-5 text-white/70 group-hover:text-white transition-colors" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2"><path d="M4 4h16c1.1 0 2 .9 2 2v12c0 1.1-.9 2-2 2H4c-1.1 0-2-.9-2-2V6c0-1.1.9-2 2-2z"></path><polyline points="22,6 12,13 2,6"></polyline></svg>
|
||||
<span className="font-semibold text-white/90 group-hover:text-white transition-colors">{members[0].email}</span>
|
||||
</a>
|
||||
)}
|
||||
{members[0].phone && (
|
||||
<a href={`tel:${members[0].phone}`} className="group flex items-center justify-center sm:justify-start gap-4 bg-white/5 hover:bg-white/10 border border-white/10 px-6 py-4 rounded-2xl transition-all duration-300 shadow-lg">
|
||||
<svg className="w-5 h-5 text-white/70 group-hover:text-white transition-colors" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2"><path d="M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z"></path></svg>
|
||||
<span className="font-semibold text-white/90 group-hover:text-white transition-colors">{members[0].phone}</span>
|
||||
</a>
|
||||
)}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{/* Premium Image Block */}
|
||||
<div className="w-full lg:w-[45%] flex justify-center lg:justify-end perspective-1000">
|
||||
<div className="relative w-64 h-64 md:w-80 md:h-80 lg:w-[400px] lg:h-[400px] rounded-[3rem] overflow-hidden border-4 border-white/10 shadow-[0_30px_60px_rgba(0,0,0,0.6)] transform md:rotate-3 hover:rotate-0 transition-all duration-700 bg-neutral-800 group">
|
||||
{members[0].image && (typeof members[0].image === 'string' ? members[0].image : members[0].image.url) ? (
|
||||
<Image
|
||||
src={typeof members[0].image === 'string' ? members[0].image : members[0].image.url}
|
||||
alt={members[0].name}
|
||||
fill
|
||||
sizes="400px"
|
||||
className="object-cover scale-110 group-hover:scale-100 transition-transform duration-1000 ease-out"
|
||||
/>
|
||||
) : (
|
||||
<div className="absolute inset-0 flex items-center justify-center text-white/20">
|
||||
<svg className="w-20 h-20" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="1"><path d="M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2"></path><circle cx="12" cy="7" r="4"></circle></svg>
|
||||
</div>
|
||||
)}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</motion.div>
|
||||
</div>
|
||||
)}
|
||||
|
||||
<div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-8 xl:gap-10">
|
||||
{members.slice(1).map((member, i) => (
|
||||
<motion.div
|
||||
key={member.id}
|
||||
initial={{ opacity: 0, y: 30 }}
|
||||
whileInView={{ opacity: 1, y: 0 }}
|
||||
viewport={{ once: true, margin: "-50px" }}
|
||||
transition={{ delay: i * 0.1, duration: 0.6, ease: [0.16, 1, 0.3, 1] }}
|
||||
className="group relative bg-neutral-50 rounded-[2rem] p-8 border border-neutral-200/60 transition-all duration-500 hover:bg-white hover:border-primary/30 hover:shadow-[0_20px_40px_-15px_rgba(0,0,0,0.05)] hover:-translate-y-2 overflow-hidden"
|
||||
className="group flex flex-col bg-white rounded-[2rem] border border-neutral-100 shadow-[0_8px_30px_rgb(0,0,0,0.04)] hover:shadow-[0_20px_40px_rgba(238,114,3,0.1)] transition-all duration-500 hover:-translate-y-2 overflow-hidden"
|
||||
>
|
||||
<HoverShineOverlay shineColor="via-primary/5" />
|
||||
|
||||
<div className="relative z-10 flex flex-col h-full">
|
||||
<div className="flex items-center gap-6 mb-6">
|
||||
<div className="relative w-24 h-24 flex-shrink-0 rounded-[1.25rem] overflow-hidden bg-neutral-200 border border-neutral-100 shadow-sm group-hover:shadow-md transition-shadow duration-500">
|
||||
{member.image && typeof member.image === 'object' && member.image.url ? (
|
||||
<Image
|
||||
src={member.image.url}
|
||||
alt={member.name}
|
||||
fill
|
||||
sizes="96px"
|
||||
className="object-cover group-hover:scale-110 transition-transform duration-700 ease-in-out"
|
||||
/>
|
||||
) : (
|
||||
<div className="absolute inset-0 flex items-center justify-center text-neutral-400">
|
||||
<svg className="w-10 h-10" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="1"><path d="M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2"></path><circle cx="12" cy="7" r="4"></circle></svg>
|
||||
</div>
|
||||
)}
|
||||
</div>
|
||||
<div>
|
||||
<h4 className="font-heading font-bold text-2xl text-neutral-dark mb-1 leading-tight group-hover:text-primary transition-colors duration-300">{member.name}</h4>
|
||||
<p className="text-primary font-medium text-sm mb-1">{member.position}</p>
|
||||
<p className="inline-block px-2 py-0.5 mt-1 bg-neutral-100 text-neutral-600 rounded-md text-xs uppercase tracking-widest font-semibold border border-neutral-200/60">
|
||||
{member.branch === 'e-tib' ? 'E-TIB GmbH' : member.branch === 'ing' ? 'Ingenieurgesellschaft' : 'Bohrtechnik'}
|
||||
</p>
|
||||
</div>
|
||||
{/* Card Banner */}
|
||||
<div className="h-32 bg-neutral-50 relative border-b border-neutral-100 overflow-hidden">
|
||||
<div className="absolute inset-0 bg-gradient-to-br from-neutral-100 to-neutral-200/50" />
|
||||
<div className="absolute inset-0 opacity-[0.03] pointer-events-none" style={{ backgroundImage: "url('data:image/svg+xml,%3Csvg width=\\'20\\' height=\\'20\\' viewBox=\\'0 0 20 20\\' xmlns=\\'http://www.w3.org/2000/svg\\'%3E%3Crect width=\\'1\\' height=\\'1\\' fill=\\'%23000000\\'/%3E%3C/svg%3E')" }} />
|
||||
</div>
|
||||
|
||||
<div className="px-8 pb-8 relative flex-grow flex flex-col">
|
||||
{/* Overlapping Profile Picture */}
|
||||
<div className="w-24 h-24 rounded-2xl overflow-hidden border-4 border-white shadow-xl bg-white relative -mt-12 mb-6 group-hover:-translate-y-2 transition-transform duration-500">
|
||||
{member.image && (typeof member.image === 'string' ? member.image : member.image.url) ? (
|
||||
<Image
|
||||
src={typeof member.image === 'string' ? member.image : member.image.url}
|
||||
alt={member.name}
|
||||
fill
|
||||
sizes="96px"
|
||||
className="object-cover"
|
||||
/>
|
||||
) : (
|
||||
<div className="absolute inset-0 flex items-center justify-center text-neutral-300 bg-neutral-50">
|
||||
<svg className="w-10 h-10" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="1"><path d="M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2"></path><circle cx="12" cy="7" r="4"></circle></svg>
|
||||
</div>
|
||||
)}
|
||||
</div>
|
||||
|
||||
{/* Details */}
|
||||
<h4 className="font-heading font-extrabold text-2xl text-neutral-dark mb-1 group-hover:text-primary transition-colors duration-300 leading-tight">{member.name}</h4>
|
||||
<p className="text-primary font-bold text-xs uppercase tracking-widest mb-6">{member.position}</p>
|
||||
|
||||
<div className="mt-auto pt-6 border-t border-neutral-200/60 space-y-3">
|
||||
{member.branch && (
|
||||
<div className="mb-6">
|
||||
<span className="inline-block px-3 py-1 bg-neutral-100 text-neutral-600 rounded-md text-xs uppercase tracking-widest font-semibold border border-neutral-200/60">
|
||||
{member.branch === 'e-tib' ? 'E-TIB GmbH' : member.branch === 'ing' ? 'Ingenieurgesellschaft' : member.branch === 'bohrtechnik' ? 'Bohrtechnik' : member.branch}
|
||||
</span>
|
||||
</div>
|
||||
)}
|
||||
|
||||
{/* Contacts (Sticky at bottom) */}
|
||||
<div className="mt-auto pt-6 border-t border-neutral-100 flex flex-col gap-4">
|
||||
{member.email && (
|
||||
<a href={`mailto:${member.email}`} className="group/link flex items-center gap-3 text-text-secondary hover:text-primary transition-colors text-sm font-medium">
|
||||
<div className="w-8 h-8 rounded-full bg-neutral-100 flex items-center justify-center text-neutral-500 group-hover/link:bg-primary/10 group-hover/link:text-primary transition-colors">
|
||||
<a href={`mailto:${member.email}`} className="group/link flex items-center gap-4 text-text-secondary hover:text-primary transition-colors font-medium">
|
||||
<div className="w-10 h-10 rounded-xl bg-neutral-50 flex items-center justify-center text-neutral-400 group-hover/link:bg-primary/10 group-hover/link:text-primary transition-colors border border-neutral-100">
|
||||
<svg className="w-4 h-4" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2"><path d="M4 4h16c1.1 0 2 .9 2 2v12c0 1.1-.9 2-2 2H4c-1.1 0-2-.9-2-2V6c0-1.1.9-2 2-2z"></path><polyline points="22,6 12,13 2,6"></polyline></svg>
|
||||
</div>
|
||||
<span className="truncate">{member.email}</span>
|
||||
<svg className="w-4 h-4 ml-auto opacity-0 -translate-x-2 group-hover/link:opacity-100 group-hover/link:translate-x-0 transition-all duration-300" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round"><line x1="5" y1="12" x2="19" y2="12"></line><polyline points="12 5 19 12 12 19"></polyline></svg>
|
||||
</a>
|
||||
)}
|
||||
{member.phone && (
|
||||
<a href={`tel:${member.phone}`} className="group/link flex items-center gap-3 text-text-secondary hover:text-primary transition-colors text-sm font-medium">
|
||||
<div className="w-8 h-8 rounded-full bg-neutral-100 flex items-center justify-center text-neutral-500 group-hover/link:bg-primary/10 group-hover/link:text-primary transition-colors">
|
||||
<a href={`tel:${member.phone}`} className="group/link flex items-center gap-4 text-text-secondary hover:text-primary transition-colors font-medium">
|
||||
<div className="w-10 h-10 rounded-xl bg-neutral-50 flex items-center justify-center text-neutral-400 group-hover/link:bg-primary/10 group-hover/link:text-primary transition-colors border border-neutral-100">
|
||||
<svg className="w-4 h-4" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2"><path d="M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z"></path></svg>
|
||||
</div>
|
||||
<span>{member.phone}</span>
|
||||
<svg className="w-4 h-4 ml-auto opacity-0 -translate-x-2 group-hover/link:opacity-100 group-hover/link:translate-x-0 transition-all duration-300" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round"><line x1="5" y1="12" x2="19" y2="12"></line><polyline points="12 5 19 12 12 19"></polyline></svg>
|
||||
</a>
|
||||
)}
|
||||
</div>
|
||||
|
||||
@@ -19,13 +19,13 @@ export default function PowerCTA({ locale }: PowerCTAProps) {
|
||||
<div className="absolute top-0 right-0 w-64 h-64 bg-primary/20 rounded-full blur-3xl -mr-32 -mt-32 transition-transform group-hover:scale-110 duration-1000" />
|
||||
|
||||
<div className="relative z-10">
|
||||
<div className="inline-block px-4 py-1 bg-accent/20 text-accent text-xs font-bold uppercase tracking-[0.2em] rounded-full mb-8">
|
||||
<div className="inline-block px-4 py-1 bg-primary-light/20 text-primary-light text-xs font-bold uppercase tracking-[0.2em] rounded-full mb-8">
|
||||
{isDe ? 'Lösungen' : 'Solutions'}
|
||||
</div>
|
||||
|
||||
<h3 className="text-2xl md:text-4xl font-bold text-white mb-8 leading-tight">
|
||||
{isDe ? 'Bereit für die' : 'Ready for the'}
|
||||
<span className="text-accent block">{isDe ? 'Energiewende?' : 'Energy Transition?'}</span>
|
||||
<span className="text-primary-light block">{isDe ? 'Energiewende?' : 'Energy Transition?'}</span>
|
||||
</h3>
|
||||
|
||||
<p className="text-xl text-white/90 mb-10 leading-relaxed max-w-2xl">
|
||||
@@ -46,9 +46,9 @@ export default function PowerCTA({ locale }: PowerCTAProps) {
|
||||
: 'Certified quality according to EU standards',
|
||||
].map((item, i) => (
|
||||
<div key={i} className="flex items-center gap-4 text-white/90">
|
||||
<div className="w-6 h-6 rounded-full bg-accent/20 flex items-center justify-center flex-shrink-0">
|
||||
<div className="w-6 h-6 rounded-full bg-primary-light/20 flex items-center justify-center flex-shrink-0">
|
||||
<svg
|
||||
className="w-3 h-3 text-accent"
|
||||
className="w-3 h-3 text-primary-light"
|
||||
fill="none"
|
||||
stroke="currentColor"
|
||||
viewBox="0 0 24 24"
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import { TransitionLink } from '@/components/ui/TransitionLink';
|
||||
import Image from 'next/image';
|
||||
import { useLocale } from 'next-intl';
|
||||
import { ShieldCheck, Leaf, Lock, Accessibility, Zap } from 'lucide-react';
|
||||
import { ShieldCheck, Leaf, Lock, Accessibility, Zap, Mail, Phone } from 'lucide-react';
|
||||
import { LanguageSwitcher } from './LanguageSwitcher';
|
||||
|
||||
interface CompanyInfo {
|
||||
@@ -21,7 +21,7 @@ export function Footer({ companyInfo }: FooterProps) {
|
||||
<footer className="bg-[#050B14] text-neutral-light py-10 md:py-16 relative overflow-hidden border-t border-white/5">
|
||||
{/* Subtle background tech grid */}
|
||||
<div className="absolute inset-0 bg-[linear-gradient(to_right,#8080800a_1px,transparent_1px),linear-gradient(to_bottom,#8080800a_1px,transparent_1px)] bg-[size:32px_32px] [mask-image:radial-gradient(ellipse_80%_50%_at_50%_0%,#000_70%,transparent_100%)] pointer-events-none" />
|
||||
|
||||
|
||||
{/* Top glowing edge */}
|
||||
<div className="absolute top-0 left-0 w-full h-px bg-gradient-to-r from-transparent via-primary/40 to-transparent" />
|
||||
<div className="absolute top-0 left-1/2 -translate-x-1/2 w-1/3 h-[200px] bg-primary/20 blur-[100px] rounded-full pointer-events-none opacity-50" />
|
||||
@@ -30,7 +30,7 @@ export function Footer({ companyInfo }: FooterProps) {
|
||||
{/* Brand Column Bento */}
|
||||
<div className="col-span-1 md:col-span-4 lg:col-span-5 flex flex-col justify-between bg-white/[0.02] border border-white/5 rounded-3xl p-6 md:p-8 lg:p-10 backdrop-blur-md relative group overflow-hidden">
|
||||
<div className="absolute inset-0 bg-gradient-to-br from-white/[0.04] to-transparent opacity-0 group-hover:opacity-100 transition-opacity duration-700" />
|
||||
|
||||
|
||||
<div className="space-y-4 md:space-y-6 relative z-10">
|
||||
<TransitionLink href={`/${locale}`} className="relative block h-12 md:h-14 w-40 md:w-48 mb-4 md:mb-6 group/logo cursor-pointer">
|
||||
<Image
|
||||
@@ -40,8 +40,8 @@ export function Footer({ companyInfo }: FooterProps) {
|
||||
className="object-contain object-left transition-transform duration-500 group-hover/logo:scale-105 origin-left"
|
||||
/>
|
||||
</TransitionLink>
|
||||
<p className="text-white/60 text-base leading-relaxed max-w-sm">
|
||||
{locale === 'de'
|
||||
<p className="text-neutral-400 text-base leading-relaxed max-w-sm">
|
||||
{locale === 'de'
|
||||
? 'Die Experten für Kabeltiefbau, Horizontalspülbohrungen und umfassende Infrastrukturprojekte. Qualität und Zuverlässigkeit aus Guben.'
|
||||
: 'Experts in cable construction, horizontal directional drilling, and comprehensive infrastructure projects. Quality and reliability from Guben.'}
|
||||
</p>
|
||||
@@ -54,19 +54,39 @@ export function Footer({ companyInfo }: FooterProps) {
|
||||
<svg xmlns="http://www.w3.org/2000/svg" className="w-5 h-5 text-primary" fill="none" viewBox="0 0 24 24" stroke="currentColor"><path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M17.657 16.657L13.414 20.9a1.998 1.998 0 01-2.827 0l-4.244-4.243a8 8 0 1111.314 0z" /><path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M15 11a3 3 0 11-6 0 3 3 0 016 0z" /></svg>
|
||||
</div>
|
||||
<div>
|
||||
<p className="text-xs text-white/40 uppercase tracking-wider mb-1 font-heading">{locale === 'de' ? 'Hauptsitz' : 'Headquarters'}</p>
|
||||
<p className="whitespace-pre-line font-medium text-white/90">{companyInfo.address}</p>
|
||||
<p className="text-xs text-neutral-400 uppercase tracking-wider mb-1 font-heading">{locale === 'de' ? 'Hauptsitz' : 'Headquarters'}</p>
|
||||
<p className="whitespace-pre-line font-medium text-neutral-200">{companyInfo.address}</p>
|
||||
</div>
|
||||
</div>
|
||||
<div className="grid grid-cols-2 gap-3 md:gap-4">
|
||||
<a href={`mailto:${companyInfo.contactEmail}`} className="flex flex-col gap-2 p-4 rounded-2xl bg-white/[0.03] border border-white/[0.05] hover:bg-white/[0.08] hover:border-primary/30 transition-all group/contact cursor-pointer">
|
||||
<p className="text-xs text-white/40 uppercase tracking-wider font-heading">E-Mail</p>
|
||||
<p className="font-medium text-white/90 group-hover/contact:text-primary transition-colors truncate">{companyInfo.contactEmail}</p>
|
||||
</a>
|
||||
<a href={`tel:${companyInfo.contactPhone.replace(/\s+/g, '')}`} className="flex flex-col gap-2 p-4 rounded-2xl bg-white/[0.03] border border-white/[0.05] hover:bg-white/[0.08] hover:border-primary/30 transition-all group/contact cursor-pointer">
|
||||
<p className="text-xs text-white/40 uppercase tracking-wider font-heading">{locale === 'de' ? 'Telefon' : 'Phone'}</p>
|
||||
<p className="font-medium text-white/90 group-hover/contact:text-primary transition-colors truncate">{companyInfo.contactPhone}</p>
|
||||
</a>
|
||||
<a href={`mailto:${companyInfo.contactEmail}`} className="flex gap-4 p-4 rounded-2xl bg-white/[0.03] border border-white/[0.05] hover:bg-white/[0.08] hover:border-primary/30 transition-all group/contact cursor-pointer">
|
||||
<div className="w-10 h-10 rounded-full bg-primary/20 flex items-center justify-center shrink-0 group-hover/contact:bg-primary/30 transition-colors">
|
||||
<Mail className="w-5 h-5 text-primary" />
|
||||
</div>
|
||||
<div className="min-w-0">
|
||||
<p className="text-xs text-neutral-400 uppercase tracking-wider mb-1 font-heading">E-Mail</p>
|
||||
<p className="font-medium text-neutral-200 group-hover/contact:text-primary transition-colors truncate">{companyInfo.contactEmail}</p>
|
||||
</div>
|
||||
</a>
|
||||
<a href={`tel:${companyInfo.contactPhone.replace(/\s+/g, '')}`} className="flex gap-4 p-4 rounded-2xl bg-white/[0.03] border border-white/[0.05] hover:bg-white/[0.08] hover:border-primary/30 transition-all group/contact cursor-pointer">
|
||||
<div className="w-10 h-10 rounded-full bg-primary/20 flex items-center justify-center shrink-0 group-hover/contact:bg-primary/30 transition-colors">
|
||||
<Phone className="w-5 h-5 text-primary" />
|
||||
</div>
|
||||
<div className="min-w-0">
|
||||
<p className="text-xs text-neutral-400 uppercase tracking-wider mb-1 font-heading">{locale === 'de' ? 'Telefon' : 'Phone'}</p>
|
||||
<p className="font-medium text-neutral-200 group-hover/contact:text-primary transition-colors truncate">{companyInfo.contactPhone}</p>
|
||||
</div>
|
||||
</a>
|
||||
<div className="flex gap-4 p-4 rounded-2xl bg-white/[0.03] border border-white/[0.05] hover:bg-white/[0.05] transition-colors">
|
||||
<div className="w-10 h-10 rounded-full bg-primary/20 flex items-center justify-center shrink-0">
|
||||
<svg className="w-5 h-5 text-primary" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round"><circle cx="12" cy="12" r="10"></circle><polyline points="12 6 12 12 16 14"></polyline></svg>
|
||||
</div>
|
||||
<div>
|
||||
<p className="text-xs text-neutral-400 uppercase tracking-wider mb-1 font-heading">{locale === 'de' ? 'Öffnungszeiten' : 'Opening Hours'}</p>
|
||||
<div className="text-sm font-medium text-neutral-200">
|
||||
<p>{locale === 'de' ? 'Mo. – Fr.' : 'Mon. – Fri.'}: 07:00 – 17:00 {locale === 'de' ? 'Uhr' : ''}</p>
|
||||
<p className="text-white/50 mt-0.5">{locale === 'de' ? 'Sa. – So.' : 'Sat. – Sun.'}: {locale === 'de' ? 'Geschlossen' : 'Closed'}</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
)}
|
||||
@@ -74,7 +94,7 @@ export function Footer({ companyInfo }: FooterProps) {
|
||||
|
||||
{/* Navigation Bento Grid */}
|
||||
<div className="col-span-1 md:col-span-4 lg:col-span-7 grid grid-cols-1 sm:grid-cols-2 gap-4 md:gap-6 lg:gap-8">
|
||||
|
||||
|
||||
{/* Company Column */}
|
||||
<div className="bg-white/[0.02] border border-white/5 rounded-3xl p-6 md:p-8 lg:p-10 backdrop-blur-md relative group overflow-hidden flex flex-col">
|
||||
<div className="absolute inset-0 bg-gradient-to-bl from-white/[0.04] to-transparent opacity-0 group-hover:opacity-100 transition-opacity duration-700 pointer-events-none" />
|
||||
@@ -86,12 +106,14 @@ export function Footer({ companyInfo }: FooterProps) {
|
||||
{[
|
||||
{ label: locale === 'de' ? 'Kompetenzen' : 'Competencies', href: `/${locale}/kompetenzen` },
|
||||
{ label: locale === 'de' ? 'Über uns' : 'About us', href: `/${locale}/ueber-uns` },
|
||||
{ label: locale === 'de' ? 'Unser Team' : 'Our Team', href: `/${locale}/team` },
|
||||
{ label: locale === 'de' ? 'Zertifikate' : 'Certificates', href: `/${locale}/zertifikate` },
|
||||
{ label: locale === 'de' ? 'Karriere' : 'Career', href: `/${locale}/karriere` },
|
||||
{ label: locale === 'de' ? 'Messen & Events' : 'Fairs & Events', href: `/${locale}/messen` },
|
||||
{ label: locale === 'de' ? 'Kontakt' : 'Contact', href: `/${locale}/${locale === 'de' ? 'kontakt' : 'contact'}` },
|
||||
].map((link) => (
|
||||
<li key={link.href}>
|
||||
<TransitionLink href={link.href} className="group/link flex items-center text-white/60 hover:text-white transition-colors py-1 cursor-pointer">
|
||||
<TransitionLink href={link.href} className="group/link flex items-center text-neutral-400 hover:text-white transition-colors py-1 cursor-pointer">
|
||||
<span className="w-0 h-px bg-primary mr-0 group-hover/link:w-4 group-hover/link:mr-3 transition-all duration-300" />
|
||||
<span className="font-medium">{link.label}</span>
|
||||
</TransitionLink>
|
||||
@@ -114,8 +136,8 @@ export function Footer({ companyInfo }: FooterProps) {
|
||||
{ label: locale === 'de' ? 'AGB' : 'Terms', href: `/${locale}/${locale === 'de' ? 'agb' : 'terms'}` },
|
||||
].map((link) => (
|
||||
<li key={link.href}>
|
||||
<TransitionLink href={link.href} className="group/link flex items-center text-white/50 hover:text-white transition-colors py-1 cursor-pointer">
|
||||
<span className="w-0 h-px bg-white/30 mr-0 group-hover/link:w-3 group-hover/link:mr-3 transition-all duration-300" />
|
||||
<TransitionLink href={link.href} className="group/link flex items-center text-neutral-400 hover:text-white transition-colors py-1 cursor-pointer">
|
||||
<span className="w-0 h-px bg-primary mr-0 group-hover/link:w-4 group-hover/link:mr-3 transition-all duration-300" />
|
||||
<span className="font-medium">{link.label}</span>
|
||||
</TransitionLink>
|
||||
</li>
|
||||
@@ -123,7 +145,7 @@ export function Footer({ companyInfo }: FooterProps) {
|
||||
</ul>
|
||||
|
||||
{/* Built Info */}
|
||||
|
||||
|
||||
{/* Legal Info removed from here */}
|
||||
</div>
|
||||
|
||||
@@ -133,41 +155,40 @@ export function Footer({ companyInfo }: FooterProps) {
|
||||
<div className="container relative z-10">
|
||||
<div className="flex flex-col md:flex-row justify-between items-center gap-4 md:gap-6 py-4 px-5 md:py-6 md:px-8 rounded-2xl bg-white/[0.02] border border-white/5 backdrop-blur-md text-center md:text-left">
|
||||
<div className="flex flex-col md:flex-row items-center gap-4 md:gap-6 h-full">
|
||||
<p className="text-white/50 text-xs font-medium m-0">© {new Date().getFullYear()} E-TIB GmbH. {locale === 'de' ? 'Alle Rechte vorbehalten.' : 'All rights reserved.'}</p>
|
||||
|
||||
<div className="hidden md:block w-px h-3 bg-white/10" />
|
||||
|
||||
<div className="flex items-center gap-3 text-white/30 text-xs">
|
||||
<a href="https://mintel.me" target="_blank" rel="noopener noreferrer" className="hover:text-white/60 transition-colors flex items-center gap-2">
|
||||
<span>Designed & Engineered by Mintel</span>
|
||||
</a>
|
||||
{process.env.NEXT_PUBLIC_APP_VERSION && (
|
||||
<>
|
||||
<span className="w-1 h-1 rounded-full bg-white/20" />
|
||||
<div className="flex items-center gap-2 opacity-60">
|
||||
<span className="font-mono text-[10px]">v{process.env.NEXT_PUBLIC_APP_VERSION.replace(/^v/, '')}</span>
|
||||
{process.env.NEXT_PUBLIC_TARGET && process.env.NEXT_PUBLIC_TARGET !== 'production' && (
|
||||
<span className="px-1.5 py-0.5 rounded-sm bg-white/10 text-[9px] uppercase tracking-wider">
|
||||
{process.env.NEXT_PUBLIC_TARGET}
|
||||
</span>
|
||||
)}
|
||||
</div>
|
||||
</>
|
||||
)}
|
||||
</div>
|
||||
<p className="text-neutral-400 text-xs font-medium m-0">© {new Date().getFullYear()} E-TIB GmbH. {locale === 'de' ? 'Alle Rechte vorbehalten.' : 'All rights reserved.'}</p>
|
||||
</div>
|
||||
|
||||
<div className="flex items-center gap-6">
|
||||
<LanguageSwitcher isSolidMode={false} />
|
||||
<LanguageSwitcher isSolidMode={false} />
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{/* Quality Badges */}
|
||||
<div className="mt-4 md:mt-6 flex flex-wrap justify-center gap-x-4 gap-y-3 md:gap-x-8 md:gap-y-4 text-white/30 text-[10px] md:text-xs font-medium uppercase tracking-wider px-2">
|
||||
<div className="flex items-center gap-2"><ShieldCheck className="w-4 h-4 text-white/40" /><span>SSL Secured</span></div>
|
||||
<div className="flex items-center gap-2"><Leaf className="w-4 h-4 text-primary/60" /><span>Green Hosting</span></div>
|
||||
<div className="flex items-center gap-2"><Lock className="w-4 h-4 text-white/40" /><span>DSGVO Compliant</span></div>
|
||||
<div className="flex items-center gap-2"><Zap className="w-4 h-4 text-white/40" /><span>High Performance</span></div>
|
||||
<div className="mt-4 md:mt-6 flex flex-wrap justify-center gap-x-4 gap-y-3 md:gap-x-8 md:gap-y-4 text-neutral-400 text-[10px] md:text-xs font-medium uppercase tracking-wider px-2">
|
||||
<div className="flex items-center gap-2"><ShieldCheck className="w-4 h-4 text-neutral-400" /><span>SSL Secured</span></div>
|
||||
<div className="flex items-center gap-2"><Leaf className="w-4 h-4 text-primary" /><span>Green Hosting</span></div>
|
||||
<div className="flex items-center gap-2"><Lock className="w-4 h-4 text-neutral-400" /><span>DSGVO Compliant</span></div>
|
||||
<div className="flex items-center gap-2"><Zap className="w-4 h-4 text-neutral-400" /><span>High Performance</span></div>
|
||||
</div>
|
||||
|
||||
{/* Mintel Design & Version */}
|
||||
<div className="mt-6 flex justify-center items-center gap-3 text-neutral-500 text-[10px] md:text-xs opacity-60 hover:opacity-100 transition-opacity">
|
||||
<a href="https://mintel.me" target="_blank" rel="noopener noreferrer" className="hover:text-neutral-300 transition-colors flex items-center gap-2">
|
||||
<span>Designed & Engineered by Marc Mintel</span>
|
||||
</a>
|
||||
{process.env.NEXT_PUBLIC_APP_VERSION && (
|
||||
<>
|
||||
<span className="w-1 h-1 rounded-full bg-white/20" />
|
||||
<div className="flex items-center gap-2">
|
||||
<span className="font-mono text-[10px]">v{process.env.NEXT_PUBLIC_APP_VERSION.replace(/^v/, '')}</span>
|
||||
{process.env.NEXT_PUBLIC_TARGET && process.env.NEXT_PUBLIC_TARGET !== 'production' && (
|
||||
<span className="px-1.5 py-0.5 rounded-sm bg-white/10 text-[9px] uppercase tracking-wider">
|
||||
{process.env.NEXT_PUBLIC_TARGET}
|
||||
</span>
|
||||
)}
|
||||
</div>
|
||||
</>
|
||||
)}
|
||||
</div>
|
||||
</div>
|
||||
</footer>
|
||||
|
||||
@@ -4,12 +4,13 @@ import * as React from 'react';
|
||||
import { TransitionLink } from '@/components/ui/TransitionLink';
|
||||
import Image from 'next/image';
|
||||
import { usePathname } from 'next/navigation';
|
||||
import { motion, useScroll, useTransform } from 'framer-motion';
|
||||
import { motion, useScroll, useTransform, AnimatePresence } from 'framer-motion';
|
||||
import { LanguageSwitcher } from './LanguageSwitcher';
|
||||
|
||||
export interface NavLink {
|
||||
label: string;
|
||||
url: string;
|
||||
children?: NavLink[];
|
||||
}
|
||||
|
||||
interface HeaderProps {
|
||||
@@ -19,6 +20,7 @@ interface HeaderProps {
|
||||
export function Header({ navLinks }: HeaderProps) {
|
||||
const [isScrolled, setIsScrolled] = React.useState(false);
|
||||
const [forceSolid, setForceSolid] = React.useState(false);
|
||||
const [headerVariant, setHeaderVariant] = React.useState<'capsule' | 'standard'>('capsule');
|
||||
const pathname = usePathname() || '/';
|
||||
|
||||
// Scroll bound shine effect (continuous looping as user scrolls)
|
||||
@@ -40,17 +42,18 @@ export function Header({ navLinks }: HeaderProps) {
|
||||
window.addEventListener('scroll', handleScroll);
|
||||
|
||||
// Check for forced solid header (used by error pages, legal pages without hero, etc.)
|
||||
const checkSolid = () => {
|
||||
const checkHeaderState = () => {
|
||||
setForceSolid(document.body.getAttribute('data-force-solid-header') === 'true');
|
||||
setHeaderVariant((document.body.getAttribute('data-header-variant') as 'capsule' | 'standard') || 'capsule');
|
||||
};
|
||||
checkSolid();
|
||||
checkHeaderState();
|
||||
|
||||
// Set up observer for client-side navigation changes
|
||||
const observer = new MutationObserver(checkSolid);
|
||||
observer.observe(document.body, { attributes: true, attributeFilter: ['data-force-solid-header'] });
|
||||
const observer = new MutationObserver(checkHeaderState);
|
||||
observer.observe(document.body, { attributes: true, attributeFilter: ['data-force-solid-header', 'data-header-variant'] });
|
||||
|
||||
// Re-check when pathname changes
|
||||
checkSolid();
|
||||
checkHeaderState();
|
||||
|
||||
return () => {
|
||||
window.removeEventListener('scroll', handleScroll);
|
||||
@@ -58,23 +61,26 @@ export function Header({ navLinks }: HeaderProps) {
|
||||
};
|
||||
}, [pathname]);
|
||||
|
||||
// Check for force solid initially
|
||||
|
||||
const isSolidMode = isScrolled || forceSolid;
|
||||
|
||||
const isSolidMode = isScrolled || forceSolid || headerVariant === 'standard';
|
||||
const isStandard = headerVariant === 'standard';
|
||||
|
||||
return (
|
||||
<>
|
||||
<header
|
||||
className={`fixed top-0 left-0 right-0 z-50 flex justify-center transition-all duration-700 ease-[cubic-bezier(0.16,1,0.3,1)] ${
|
||||
isSolidMode ? 'pt-4 px-4' : 'pt-0 px-0'
|
||||
isStandard
|
||||
? 'bg-[#050B14]/95 backdrop-blur-xl border-b border-white/10'
|
||||
: (isSolidMode ? 'pt-4 px-4' : 'pt-0 px-0')
|
||||
}`}
|
||||
>
|
||||
<div
|
||||
className={`relative overflow-hidden w-full max-w-7xl mx-auto transition-all duration-700 ease-[cubic-bezier(0.16,1,0.3,1)] flex items-center justify-between ${
|
||||
isSolidMode
|
||||
? 'rounded-full bg-white/50 backdrop-blur-xl shadow-[0_8px_32px_rgba(0,0,0,0.08)] border border-white/40 py-2.5 px-6 md:px-8'
|
||||
: 'rounded-none bg-transparent py-6 px-4 md:px-8 border border-transparent'
|
||||
className={`relative w-full max-w-7xl mx-auto transition-all duration-700 ease-[cubic-bezier(0.16,1,0.3,1)] flex items-center justify-between ${
|
||||
isStandard
|
||||
? 'py-4 px-6 md:px-8'
|
||||
: isSolidMode
|
||||
? 'rounded-full bg-white/50 backdrop-blur-xl shadow-[0_8px_32px_rgba(0,0,0,0.08)] border border-white/40 py-2.5 px-6 md:px-8'
|
||||
: 'rounded-none bg-transparent py-6 px-4 md:px-8 border border-transparent'
|
||||
}`}
|
||||
>
|
||||
{/* Scroll bound shine effect */}
|
||||
@@ -114,40 +120,15 @@ export function Header({ navLinks }: HeaderProps) {
|
||||
|
||||
<div className="flex items-center gap-2 md:gap-4 ml-auto md:ml-0">
|
||||
<nav className="relative z-10 hidden md:flex items-center gap-8 lg:gap-10">
|
||||
{navLinks && navLinks.length > 0 && navLinks.map((link) => {
|
||||
const mappedUrl = link.url.startsWith('/') && !link.url.match(/^\/(en|de)/)
|
||||
? `/${currentLocale}${link.url}`
|
||||
: link.url;
|
||||
|
||||
const isActive = pathname === mappedUrl || (mappedUrl !== `/${currentLocale}` && pathname?.startsWith(`${mappedUrl}/`));
|
||||
|
||||
return (
|
||||
<TransitionLink
|
||||
key={link.url}
|
||||
href={mappedUrl}
|
||||
className={`relative font-bold text-xs lg:text-sm uppercase tracking-widest transition-colors duration-300 group py-2 select-none ${
|
||||
isSolidMode
|
||||
? (isActive ? 'text-primary' : 'text-text-primary hover:text-primary')
|
||||
: (isActive ? 'text-white' : 'text-white/80 hover:text-white')
|
||||
}`}
|
||||
>
|
||||
{link.label}
|
||||
|
||||
{/* Framer Motion Active Indicator */}
|
||||
{isActive && (
|
||||
<motion.div
|
||||
layoutId="header-active-indicator"
|
||||
className={`absolute -bottom-1 left-0 right-0 h-0.5 rounded-full ${isSolidMode ? 'bg-primary' : 'bg-white'}`}
|
||||
transition={{ type: 'spring', stiffness: 400, damping: 30 }}
|
||||
/>
|
||||
)}
|
||||
|
||||
{/* Subtle hover underline */}
|
||||
<span className={`absolute -bottom-1 left-1/2 w-0 h-0.5 -translate-x-1/2 rounded-full transition-all duration-300 ease-out group-hover:w-full ${isSolidMode ? 'bg-primary/30' : 'bg-white/30'} ${isActive ? 'opacity-0' : 'opacity-100'}`} />
|
||||
</TransitionLink>
|
||||
);
|
||||
})}
|
||||
|
||||
{navLinks && navLinks.length > 0 && navLinks.map((link) => (
|
||||
<NavItem
|
||||
key={link.url}
|
||||
link={link}
|
||||
currentLocale={currentLocale}
|
||||
pathname={pathname}
|
||||
isSolidMode={isSolidMode}
|
||||
/>
|
||||
))}
|
||||
</nav>
|
||||
|
||||
{/* Right side elements (Language Switcher always visible, Contact button desktop only) */}
|
||||
@@ -180,3 +161,95 @@ export function Header({ navLinks }: HeaderProps) {
|
||||
);
|
||||
}
|
||||
|
||||
function NavItem({ link, currentLocale, pathname, isSolidMode }: { link: NavLink, currentLocale: string, pathname: string, isSolidMode: boolean }) {
|
||||
const [isHovered, setIsHovered] = React.useState(false);
|
||||
|
||||
const mappedUrl = link.url.startsWith('/') && !link.url.match(/^\/(en|de)/)
|
||||
? `/${currentLocale}${link.url}`
|
||||
: link.url;
|
||||
|
||||
const isActive = pathname === mappedUrl || (mappedUrl !== `/${currentLocale}` && pathname?.startsWith(`${mappedUrl}/`));
|
||||
|
||||
return (
|
||||
<div
|
||||
className="relative group py-2"
|
||||
onMouseEnter={() => setIsHovered(true)}
|
||||
onMouseLeave={() => setIsHovered(false)}
|
||||
>
|
||||
<TransitionLink
|
||||
href={mappedUrl}
|
||||
className={`relative font-bold text-xs lg:text-sm uppercase tracking-widest transition-colors duration-300 group flex items-center gap-1.5 select-none ${
|
||||
isSolidMode
|
||||
? (isActive ? 'text-primary' : 'text-text-primary hover:text-primary')
|
||||
: (isActive ? 'text-white' : 'text-white/80 hover:text-white')
|
||||
}`}
|
||||
>
|
||||
{link.label}
|
||||
{link.children && (
|
||||
<svg className={`w-3.5 h-3.5 transition-transform duration-300 ${isHovered ? 'rotate-180' : ''}`} fill="none" viewBox="0 0 24 24" stroke="currentColor">
|
||||
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2.5} d="M19 9l-7 7-7-7" />
|
||||
</svg>
|
||||
)}
|
||||
|
||||
{/* Framer Motion Active Indicator */}
|
||||
{isActive && !link.children && (
|
||||
<motion.div
|
||||
layoutId="header-active-indicator"
|
||||
className={`absolute -bottom-1 left-0 right-0 h-0.5 rounded-full ${isSolidMode ? 'bg-primary' : 'bg-white'}`}
|
||||
transition={{ type: 'spring', stiffness: 400, damping: 30 }}
|
||||
/>
|
||||
)}
|
||||
|
||||
{/* Subtle hover underline */}
|
||||
<span className={`absolute -bottom-1 left-1/2 w-0 h-0.5 -translate-x-1/2 rounded-full transition-all duration-300 ease-out group-hover:w-full ${isSolidMode ? 'bg-primary/30' : 'bg-white/30'} ${isActive ? 'opacity-0' : 'opacity-100'}`} />
|
||||
</TransitionLink>
|
||||
|
||||
<AnimatePresence>
|
||||
{isHovered && link.children && (
|
||||
<motion.div
|
||||
initial={{ opacity: 0, y: 10, scale: 0.95, rotateX: -10 }}
|
||||
animate={{ opacity: 1, y: 0, scale: 1, rotateX: 0 }}
|
||||
exit={{ opacity: 0, y: 10, scale: 0.95, rotateX: -10 }}
|
||||
transition={{ duration: 0.3, ease: [0.16, 1, 0.3, 1] }}
|
||||
style={{ perspective: 1000, transformOrigin: 'top center' }}
|
||||
className="absolute top-full left-1/2 -translate-x-1/2 pt-6 w-64 z-50"
|
||||
>
|
||||
<div className={`p-2.5 rounded-3xl shadow-[0_30px_60px_-15px_rgba(0,0,0,0.3)] border ${isSolidMode ? 'bg-white/95 border-neutral-200/60' : 'bg-[#050B14]/95 border-white/[0.08] shadow-[0_0_40px_rgba(0,0,0,0.4)]'} backdrop-blur-2xl flex flex-col gap-1 relative overflow-hidden`}>
|
||||
{/* Top glowing accent line */}
|
||||
<div className="absolute top-0 left-0 w-full h-[2px] bg-gradient-to-r from-transparent via-primary to-transparent opacity-70" />
|
||||
|
||||
{link.children.map((child) => {
|
||||
const childUrl = child.url.startsWith('/') && !child.url.match(/^\/(en|de)/)
|
||||
? `/${currentLocale}${child.url}`
|
||||
: child.url;
|
||||
const isChildActive = pathname === childUrl;
|
||||
return (
|
||||
<TransitionLink
|
||||
key={child.url}
|
||||
href={childUrl}
|
||||
className={`group/dropitem relative block px-4 py-3.5 rounded-2xl text-sm font-medium transition-all duration-300 overflow-hidden ${
|
||||
isSolidMode
|
||||
? isChildActive ? 'bg-primary/10 text-primary' : 'text-neutral-600 hover:text-primary hover:bg-neutral-50/80'
|
||||
: isChildActive ? 'bg-white/10 text-white' : 'text-neutral-300 hover:text-white hover:bg-white/[0.06]'
|
||||
}`}
|
||||
>
|
||||
<div className="relative z-10 flex items-center justify-between">
|
||||
<span className="relative">
|
||||
{child.label}
|
||||
<span className={`absolute -bottom-0.5 left-0 w-0 h-0.5 rounded-full transition-all duration-300 ease-[cubic-bezier(0.16,1,0.3,1)] group-hover/dropitem:w-full ${isSolidMode ? 'bg-primary/40' : 'bg-primary/60'} ${isChildActive ? 'opacity-0' : 'opacity-100'}`} />
|
||||
</span>
|
||||
<svg className={`w-4 h-4 transition-all duration-300 ease-[cubic-bezier(0.16,1,0.3,1)] -translate-x-3 opacity-0 group-hover/dropitem:translate-x-0 group-hover/dropitem:opacity-100 ${isSolidMode ? 'text-primary' : 'text-white'}`} fill="none" viewBox="0 0 24 24" stroke="currentColor">
|
||||
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2.5} d="M9 5l7 7-7 7" />
|
||||
</svg>
|
||||
</div>
|
||||
</TransitionLink>
|
||||
);
|
||||
})}
|
||||
</div>
|
||||
</motion.div>
|
||||
)}
|
||||
</AnimatePresence>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
@@ -73,7 +73,7 @@ export function LanguageSwitcher({ mobile = false, isSolidMode = false }: Langua
|
||||
} else {
|
||||
linkClass = isSolidMode
|
||||
? 'text-text-secondary hover:text-primary'
|
||||
: 'text-white/70 hover:text-white';
|
||||
: 'text-white/90 hover:text-white';
|
||||
}
|
||||
|
||||
const currentLocObj = locales.find(l => l.code === currentLocale) || locales[0];
|
||||
|
||||
@@ -1,30 +0,0 @@
|
||||
---
|
||||
title: "Moderne Verfahren im Kabeltiefbau"
|
||||
date: "2024-03-15T10:00:00.000Z"
|
||||
excerpt: "Erfahren Sie mehr über die neuesten Technologien und Verfahren im modernen Kabelleitungstiefbau, von Horizontalspülbohrungen bis hin zu grabenlosen Verlegetechniken."
|
||||
featuredImage: "/assets/images/blog/tiefbau.jpg"
|
||||
category: "Technik"
|
||||
public: true
|
||||
---
|
||||
|
||||
# Moderne Verfahren im Kabeltiefbau
|
||||
|
||||
Der Kabelleitungstiefbau hat sich in den letzten Jahren rasant entwickelt. Neue Technologien ermöglichen eine effizientere und umweltschonendere Verlegung von Versorgungsleitungen.
|
||||
|
||||
## Grabenlose Verlegetechniken
|
||||
|
||||
Eines der wichtigsten Verfahren ist die **Horizontalspülbohrung (HDD)**. Dieses Verfahren ermöglicht es, Leitungen unter Hindernissen wie Straßen, Flüssen oder Gebäuden zu verlegen, ohne die Oberfläche aufbrechen zu müssen.
|
||||
|
||||
### Vorteile der HDD-Bohrung:
|
||||
- Minimale Beeinträchtigung des Verkehrs
|
||||
- Schutz der Umwelt und vorhandener Vegetation
|
||||
- Kürzere Bauzeiten
|
||||
- Geringere Kosten bei komplexen Unterquerungen
|
||||
|
||||
## Klassischer Tiefbau in neuer Qualität
|
||||
|
||||
Auch der klassische Grabenbau profitiert von modernen Maschinen und präziser Planung. Durch den Einsatz von Saugbaggern und GPS-gestützter Vermessung können wir Schäden an Bestandsleitungen nahezu ausschließen.
|
||||
|
||||
## Fazit
|
||||
|
||||
Die Kombination aus bewährter Handwerkskunst und modernster Technik ist der Schlüssel zu erfolgreichen Infrastrukturprojekten. Wir bei E-TIB setzen konsequent auf Innovation, um unseren Kunden die bestmöglichen Ergebnisse zu liefern.
|
||||
79
content/de/bohrtechnik.mdx
Normal file
@@ -0,0 +1,79 @@
|
||||
---
|
||||
title: "Grabenlose Leitungsverlegung"
|
||||
date: "2024-03-20"
|
||||
excerpt: "Präzise Horizontalspülbohrungen und Erdraketen in allen Bodenklassen für eine absolut oberflächenschonende und effiziente Leitungsverlegung."
|
||||
layout: "fullBleed"
|
||||
---
|
||||
|
||||
<HeroSection
|
||||
badge="Kernkompetenz"
|
||||
title="Grabenlose Verlegung"
|
||||
subtitle="Oberflächenschonende Horizontalspülbohrungen und Erdraketen"
|
||||
backgroundImage={{ url: '/assets/photos/DSC08653.JPG' }}
|
||||
alignment="center"
|
||||
ctaLabel="Projekt anfragen"
|
||||
ctaHref="/de/kontakt"
|
||||
/>
|
||||
|
||||
<div className="container px-4 max-w-7xl mx-auto py-16">
|
||||
<blockquote>
|
||||
Wenn klassischer Grabenbau aus Platz-, Umwelt- oder Kostengründen nicht in Frage kommt, setzen wir auf modernste grabenlose Techniken. Wir schonen die Natur und minimieren Wiederherstellungskosten.
|
||||
</blockquote>
|
||||
|
||||
## Maximale Effizienz, Minimaler Eingriff
|
||||
|
||||
Die grabenlose Leitungsverlegung ist die intelligenteste Lösung für komplexe Bauvorhaben. Insbesondere bei der Querung von hochfrequentierten Straßen, Bahntrassen, Autobahnen oder sensiblen Gewässern spielt dieses Verfahren seine absoluten Stärken aus. Der Verkehr fließt weiter, die Natur bleibt unberührt und aufwendige Oberflächen wie teures Pflaster oder Asphalt müssen nicht zerstört werden.
|
||||
|
||||
## HDD-Spülbohrungen und Erdraketen
|
||||
|
||||
Mit unserem spezialisierten Gerätepark beherrschen wir die unterschiedlichsten Verfahren. Beim **Horizontalspülbohrverfahren (HDD)** steuern wir den Bohrkopf punktgenau unter der Erde hindurch. Wir realisieren dabei Bohrlängen von bis zu 250 Metern am Stück und können Schutzrohre mit einem Durchmesser von bis zu 400 mm einziehen.
|
||||
|
||||
Für kürzere Distanzen, wie beispielsweise schnelle und schonende Hausanschlüsse, setzen wir unsere **Erdraketen** (Bodenverdrängungsverfahren) ein. Hierbei erreichen wir Durchörterungslängen von bis zu 15 Metern für Rohre bis 160 mm Durchmesser – ideal um Vorgärten und Einfahrten komplett unversehrt zu lassen.
|
||||
</div>
|
||||
|
||||
<ServiceDetailGrid
|
||||
badge="Verfahren"
|
||||
title="Unsere Bohrtechnik im Detail"
|
||||
descriptionParagraphs={[
|
||||
"Wir wählen für jede Bodenklasse und örtliche Gegebenheit das exakt passende Bohrverfahren, um maximale Wirtschaftlichkeit zu garantieren."
|
||||
]}
|
||||
panels={[
|
||||
{
|
||||
id: "hdd",
|
||||
title: "Horizontalspülbohrung (HDD)",
|
||||
icon: "hdd",
|
||||
fullWidth: false,
|
||||
lists: [
|
||||
[
|
||||
"Max. Bohrlänge: 250 m",
|
||||
"Max. Durchmesser: 400er Rohr",
|
||||
"Zentimetergenaue Steuerbarkeit",
|
||||
"Querung von Bahn, Autobahn & Gewässern"
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
id: "erdrakete",
|
||||
title: "Bodenverdrängung (Erdrakete)",
|
||||
icon: "hdd",
|
||||
fullWidth: false,
|
||||
lists: [
|
||||
[
|
||||
"Max. Durchörterungslänge: 15 m",
|
||||
"Max. Durchmesser: 160er Rohr",
|
||||
"Schnelle Hausanschlüsse ohne Graben",
|
||||
"Kein Aufbruch der Oberfläche nötig"
|
||||
]
|
||||
]
|
||||
}
|
||||
]}
|
||||
/>
|
||||
|
||||
<HomeReferencesSlider badge="Praxisbeispiele" title="Abgeschlossene Bohr-Projekte" description="Erfolgreiche HDD-Bohrungen und grabenlose Leitungsverlegungen unter komplexesten Bedingungen." />
|
||||
|
||||
<CallToAction
|
||||
title="Suchen Sie nach einer grabenlosen Lösung?"
|
||||
text="Wir beraten Sie gerne zu den Möglichkeiten der Horizontalspülbohrung für Ihr Vorhaben."
|
||||
buttonText="Kontakt aufnehmen"
|
||||
buttonLink="/de/kontakt"
|
||||
/>
|
||||
79
content/de/glasfaser.mdx
Normal file
@@ -0,0 +1,79 @@
|
||||
---
|
||||
title: "Kabelleitungstiefbau im Bereich Telekommunikation"
|
||||
date: "2024-03-20"
|
||||
excerpt: "Zukunftssichere Infrastruktur durch kompetenten Kabelleitungstiefbau für Glasfaser- und Telekommunikationsnetze (FTTX)."
|
||||
layout: "fullBleed"
|
||||
---
|
||||
|
||||
<HeroSection
|
||||
badge="Kernkompetenz"
|
||||
title="Glasfaser & Telekommunikation"
|
||||
subtitle="Komplette Infrastruktur-Lösungen für zukunftssichere Breitbandnetze (FTTX)"
|
||||
backgroundImage={{ url: '/assets/photos/DSC01129.JPG' }}
|
||||
alignment="center"
|
||||
ctaLabel="Projekt anfragen"
|
||||
ctaHref="/de/kontakt"
|
||||
/>
|
||||
|
||||
<div className="container px-4 max-w-7xl mx-auto py-16">
|
||||
<blockquote>
|
||||
Ein Leben ohne Strom oder High-Speed Internet ist heute unvorstellbar – dafür verlegen wir Kabel. Wir bauen das Rückgrat der digitalen Gesellschaft.
|
||||
</blockquote>
|
||||
|
||||
## Das Rückgrat der Digitalisierung
|
||||
|
||||
Schnelles Internet und modernste Telekommunikationsnetze erfordern einen absolut reibungslosen und hochprofessionellen Netzausbau. E-TIB sorgt mit hochspezialisierten Montageteams und eigenem, modernen Maschinenpark für höchste Ausführungsqualität im bundesweiten Glasfaserausbau.
|
||||
|
||||
## FTTX-Ausbau aus einer Hand
|
||||
|
||||
Als leistungsfähiger Partner für Telekommunikationsanbieter decken wir jeden Schritt der physischen Netzerrichtung ab. Wir übernehmen die Herstellung kompletter Leerrohrtrassen sowie von Kabel- und Rohrgräben. Darüber hinaus positionieren und errichten wir Multifunktionsgehäuse an strategischen Netzknotenpunkten.
|
||||
|
||||
Unser Service endet nicht beim reinen Tiefbau: Wir kümmern uns um das fachgerechte Einziehen und Einblasen von hochsensiblen LWL- und TK-Kabeln über weite Distanzen und führen alle erforderlichen Kabelmontagen durch. So garantieren wir, dass die digitale Infrastruktur sicher und performant in Betrieb gehen kann.
|
||||
</div>
|
||||
|
||||
<ServiceDetailGrid
|
||||
badge="Leistungsspektrum"
|
||||
title="Kompletter Glasfaserausbau"
|
||||
descriptionParagraphs={[
|
||||
"Von der Leerrohrtrasse bis zur fertigen LWL-Montage – wir liefern schlüsselfertige Telekommunikationsinfrastruktur auf höchstem Niveau."
|
||||
]}
|
||||
panels={[
|
||||
{
|
||||
id: "tiefbau",
|
||||
title: "Tiefbau & Trassen",
|
||||
icon: "fiber",
|
||||
fullWidth: false,
|
||||
lists: [
|
||||
[
|
||||
"Herstellung von Kabel- und Rohrgräben",
|
||||
"Herstellung kompletter Leerrohrtrassen",
|
||||
"Stellen von Multifunktionsgehäusen (MFG)",
|
||||
"Netzknoten-Anbindung"
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
id: "montage",
|
||||
title: "Kabelzug & Montage",
|
||||
icon: "fiber",
|
||||
fullWidth: false,
|
||||
lists: [
|
||||
[
|
||||
"Einziehen von TK-/LWL-Kabeln",
|
||||
"Pneumatisches Einblasen von Glasfaserkabeln",
|
||||
"Kabelmontagen TK/LWL",
|
||||
"Spleiß- und Messarbeiten"
|
||||
]
|
||||
]
|
||||
}
|
||||
]}
|
||||
/>
|
||||
|
||||
<HomeReferencesSlider badge="Praxisbeispiele" title="Abgeschlossene Breitband-Projekte" description="Wir haben bereits hunderte Kilometer FTTX-Netze erfolgreich realisiert. Entdecken Sie unsere Referenzen." />
|
||||
|
||||
<CallToAction
|
||||
title="Sie planen einen FTTX-Ausbau?"
|
||||
text="Wir beraten Sie gerne vollumfänglich rund um den Bereich FTTX und den Glasfaserausbau."
|
||||
buttonText="Kontakt aufnehmen"
|
||||
buttonLink="/de/kontakt"
|
||||
/>
|
||||
@@ -6,7 +6,7 @@ description: "Die E-TIB GmbH ist Ihr zuverlässiger Partner für komplexe Kabelt
|
||||
<HomeHero
|
||||
|
||||
title={"Die Experten für\nKabeltiefbau"}
|
||||
description="Wir realisieren komplexe Versorgungsleitungen für eine moderne Gesellschaft. Verlässlich, innovativ und mit höchster Präzision im Kabelbau und der Bohrtechnik."
|
||||
description="Wir realisieren komplexe Versorgungsleitungen für eine moderne Gesellschaft. Verlässlich, innovativ und mit höchster Präzision im Kabeltiefbau und der Bohrtechnik."
|
||||
videoUrl="/assets/videos/web/hero-kabelpflug.mp4"
|
||||
linkText="Unsere Leistungen"
|
||||
linkHref="/de/kompetenzen"
|
||||
@@ -110,17 +110,19 @@ description: "Die E-TIB GmbH ist Ihr zuverlässiger Partner für komplexe Kabelt
|
||||
ctaHref="/de/kompetenzen"
|
||||
items={[
|
||||
{
|
||||
title: "Kabelbau",
|
||||
title: "Kabeltiefbau",
|
||||
description: "Verlegung von Mittel- und Niederspannungskabeln",
|
||||
tag: "Energie",
|
||||
size: "large",
|
||||
image: { url: "/assets/photos/DSC01123.JPG", alt: "Kabelbau" }
|
||||
href: "/de/kabeltiefbau",
|
||||
image: { url: "/assets/photos/DSC01123.JPG", alt: "Kabeltiefbau" }
|
||||
},
|
||||
{
|
||||
title: "Bohrtechnik",
|
||||
description: "Horizontalspülbohrverfahren für grabenlose Verlegung",
|
||||
tag: "Innovation",
|
||||
size: "medium",
|
||||
href: "/de/bohrtechnik",
|
||||
image: { url: "/assets/photos/DSC08653.JPG", alt: "Bohrtechnik" }
|
||||
},
|
||||
{
|
||||
@@ -128,54 +130,18 @@ description: "Die E-TIB GmbH ist Ihr zuverlässiger Partner für komplexe Kabelt
|
||||
description: "Trassenplanung und Genehmigungsverfahren",
|
||||
tag: "Präzision",
|
||||
size: "small",
|
||||
href: "/de/planung",
|
||||
image: { url: "/assets/photos/DJI_0048.JPG", alt: "Planung" }
|
||||
},
|
||||
{
|
||||
title: "Vermessung",
|
||||
description: "Digitale Bestandsdokumentation",
|
||||
tag: "Digital",
|
||||
size: "accent"
|
||||
size: "accent",
|
||||
href: "/de/vermessung"
|
||||
}
|
||||
]}
|
||||
/>
|
||||
|
||||
<HomeReferencesSlider
|
||||
references={[
|
||||
{
|
||||
id: "1",
|
||||
title: "Breitbandausbau FTTC, Planungsregion Spreewald",
|
||||
slug: "breitbandausbau-fttc-spreewald",
|
||||
category: "Telekommunikation",
|
||||
image: "/assets/photos/DSC01123.JPG"
|
||||
},
|
||||
{
|
||||
id: "2",
|
||||
title: "Breitbandausbau FTTH, 29699 Bomlitz / 29690 Schwarmstedt",
|
||||
slug: "breitbandausbau-ftth-bomlitz",
|
||||
category: "Telekommunikation",
|
||||
image: "/assets/photos/DSC00850.JPG"
|
||||
},
|
||||
{
|
||||
id: "3",
|
||||
title: "Neubau Kabeltrasse, 03149 Forst",
|
||||
slug: "neubau-kabeltrasse-forst",
|
||||
category: "Kabelbau",
|
||||
image: "/assets/photos/DSC01129.JPG"
|
||||
},
|
||||
{
|
||||
id: "4",
|
||||
title: "Kabelverbindung U30 - T10, 15890 Eisenhüttenstadt",
|
||||
slug: "kabelverbindung-eisenhuettenstadt",
|
||||
category: "Kabelbau",
|
||||
image: "/assets/photos/DSC00010.JPG"
|
||||
},
|
||||
{
|
||||
id: "5",
|
||||
title: "Einspeisung PV-Anlage 14728 Görne",
|
||||
slug: "einspeisung-pv-goerne",
|
||||
category: "Erneuerbare Energien",
|
||||
image: "/assets/photos/DSC01123.JPG"
|
||||
}
|
||||
]}
|
||||
/>
|
||||
<HomeReferencesSlider />
|
||||
|
||||
|
||||
@@ -46,3 +46,17 @@ Unsere E-Mail-Adresse finden Sie oben im Impressum.
|
||||
## Verbraucherstreitbeilegung/Universalschlichtungsstelle
|
||||
|
||||
Wir sind nicht bereit oder verpflichtet, an Streitbeilegungsverfahren vor einer Verbraucherschlichtungsstelle teilzunehmen.
|
||||
|
||||
## Haftungsausschluss (Disclaimer)
|
||||
|
||||
### Haftung für Inhalte
|
||||
|
||||
Als Diensteanbieter sind wir gemäß § 7 Abs.1 TMG für eigene Inhalte auf diesen Seiten nach den allgemeinen Gesetzen verantwortlich. Nach §§ 8 bis 10 TMG sind wir als Diensteanbieter jedoch nicht verpflichtet, übermittelte oder gespeicherte fremde Informationen zu überwachen oder nach Umständen zu forschen, die auf eine rechtswidrige Tätigkeit hinweisen. Verpflichtungen zur Entfernung oder Sperrung der Nutzung von Informationen nach den allgemeinen Gesetzen bleiben hiervon unberührt. Eine diesbezügliche Haftung ist jedoch erst ab dem Zeitpunkt der Kenntnis einer konkreten Rechtsverletzung möglich. Bei Bekanntwerden von entsprechenden Rechtsverletzungen werden wir diese Inhalte umgehend entfernen.
|
||||
|
||||
### Haftung für Links
|
||||
|
||||
Unser Angebot enthält Links zu externen Webseiten Dritter, auf deren Inhalte wir keinen Einfluss haben. Deshalb können wir für diese fremden Inhalte auch keine Gewähr übernehmen. Für die Inhalte der verlinkten Seiten ist stets der jeweilige Anbieter oder Betreiber der Seiten verantwortlich. Die verlinkten Seiten wurden zum Zeitpunkt der Verlinkung auf mögliche Rechtsverstöße überprüft. Rechtswidrige Inhalte waren zum Zeitpunkt der Verlinkung nicht erkennbar. Eine permanente inhaltliche Kontrolle der verlinkten Seiten ist jedoch ohne konkrete Anhaltspunkte einer Rechtsverletzung nicht zumutbar. Bei Bekanntwerden von Rechtsverletzungen werden wir derartige Links umgehend entfernen.
|
||||
|
||||
### Urheberrecht
|
||||
|
||||
Die durch die Seitenbetreiber erstellten Inhalte und Werke auf diesen Seiten unterliegen dem deutschen Urheberrecht. Die Vervielfältigung, Bearbeitung, Verbreitung und jede Art der Verwertung außerhalb der Grenzen des Urheberrechtes bedürfen der schriftlichen Zustimmung des jeweiligen Autors bzw. Erstellers. Downloads und Kopien dieser Seite sind nur für den privaten, nicht kommerziellen Gebrauch gestattet. Soweit die Inhalte auf dieser Seite nicht vom Betreiber erstellt wurden, werden die Urheberrechte Dritter beachtet. Insbesondere werden Inhalte Dritter als solche gekennzeichnet. Sollten Sie trotzdem auf eine Urheberrechtsverletzung aufmerksam werden, bitten wir um einen entsprechenden Hinweis. Bei Bekanntwerden von Rechtsverletzungen werden wir derartige Inhalte umgehend entfernen.
|
||||
|
||||
81
content/de/kabeltiefbau.mdx
Normal file
@@ -0,0 +1,81 @@
|
||||
---
|
||||
title: "Kabelleitungstiefbau"
|
||||
date: "2024-03-20"
|
||||
excerpt: "Professioneller Kabeltiefbau für Mittel- und Niederspannungsnetze. Wir garantieren höchste Sicherheitsstandards und lückenlose Dokumentation für Ihr Projekt."
|
||||
layout: "fullBleed"
|
||||
---
|
||||
|
||||
<HeroSection
|
||||
badge="Kernkompetenz"
|
||||
title="Kabelleitungstiefbau"
|
||||
subtitle="Komplette Infrastruktur-Lösungen für Mittel- und Niederspannungsnetze"
|
||||
backgroundImage={{ url: '/assets/photos/DSC01123.JPG' }}
|
||||
alignment="center"
|
||||
ctaLabel="Projekt anfragen"
|
||||
ctaHref="/de/kontakt"
|
||||
/>
|
||||
|
||||
<div className="container px-4 max-w-7xl mx-auto py-16">
|
||||
<blockquote>
|
||||
Überall wird gebuddelt und gebohrt, aber leider geht auch vieles schief. Wir setzen auf Qualität, höchste Sicherheitsstandards und rechtssichere Dokumentation – damit Ihr Bauprojekt nicht zur Kostenfalle wird.
|
||||
</blockquote>
|
||||
|
||||
## Qualität statt Kostenfalle
|
||||
|
||||
Auf vielen Baustellen werden zunehmend Billiganbieter aus dem Ausland eingesetzt, was häufig dazu führt, dass **Sicherheitsstandards und Dokumentationsanforderungen missachtet** werden. Die Folgen sind gravierend: Unfälle, defekte Fremdleitungen (wie Strom, Wasser und Gas) sowie massive Bauverzögerungen und teure Nachträge. Ein vermeintliches Schnäppchen entpuppt sich so schnell als finanzielle Belastung.
|
||||
|
||||
Besonders bei geförderten Infrastruktur-Projekten gestaltet sich der Abruf der Fördergelder ohne eine absolut lückenlose, normgerechte Dokumentation äußerst problematisch.
|
||||
|
||||
## Alles aus einer Hand
|
||||
|
||||
Durch unsere langjährige Erfahrung erkennen wir Problemstellungen frühzeitig und erarbeiten für unsere Auftraggeber im Vorfeld sichere und zufriedenstellende Lösungen. Die E-TIB GmbH hat sich voll und ganz auf den Kabelleitungstiefbau spezialisiert.
|
||||
|
||||
Wir bieten Ihnen das komplette Leistungsspektrum zur Errichtung von Kabeltrassen aus einer Hand – mit eigenem, hochmodernem Maschinenpark und festangestelltem Fachpersonal aus der Region. In direkter Zusammenarbeit mit unserem Partnerbüro, der E-TIB Ingenieurgesellschaft mbH, können wir zudem frühzeitig Planungsfehler ausschließen und selbst die komplexesten Dokumentationsanforderungen souverän erfüllen.
|
||||
</div>
|
||||
|
||||
<ServiceDetailGrid
|
||||
badge="Leistungsspektrum"
|
||||
title="Alles für Ihr Netz"
|
||||
descriptionParagraphs={[
|
||||
"Wir bieten höchste Präzision, modernste Maschinen und zertifizierte Experten für jedes Tiefbau-Projekt – von der Kabelverlegung bis zur Transformatorstation."
|
||||
]}
|
||||
panels={[
|
||||
{
|
||||
id: "grabenbau",
|
||||
title: "Grabenbau & Verlegung",
|
||||
icon: "energy",
|
||||
fullWidth: false,
|
||||
lists: [
|
||||
[
|
||||
"Herstellung von Kabel- und Rohrgräben",
|
||||
"Kabelverlegung von 0,4 kV bis 110 kV",
|
||||
"Kabelmontagen von 0,4 kV bis 30 kV",
|
||||
"Kabelpflugarbeiten für schnelle Verlegung"
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
id: "anlagen",
|
||||
title: "Anlagen & Infrastruktur",
|
||||
icon: "energy",
|
||||
fullWidth: false,
|
||||
lists: [
|
||||
[
|
||||
"Errichtung von Transformatorstationen",
|
||||
"Erstellung von komplexen Erdungsanlagen",
|
||||
"Errichtung von Straßenbeleuchtungen",
|
||||
"Zertifizierte Schalthandlungen"
|
||||
]
|
||||
]
|
||||
}
|
||||
]}
|
||||
/>
|
||||
|
||||
<HomeReferencesSlider badge="Praxisbeispiele" title="Abgeschlossene Tiefbau-Projekte" description="Wir haben über hunderte Kilometer Kabel verlegt. Sehen Sie sich unsere Referenz-Projekte an." />
|
||||
|
||||
<CallToAction
|
||||
title="Sie haben ein konkretes Projekt?"
|
||||
text="Wir beraten Sie gerne zu allen Fragen rund um Kabeltiefbau und Leitungsverlegung."
|
||||
buttonText="Kontakt aufnehmen"
|
||||
buttonLink="/de/kontakt"
|
||||
/>
|
||||
@@ -1,7 +1,7 @@
|
||||
---
|
||||
title: "Kompetenzen - Kabeltiefbau & Spülbohrtechnik"
|
||||
date: "2024-03-20"
|
||||
excerpt: "Von Kabelbau bis Elektromontage: Wir bieten ganzheitliche Lösungen für moderne Netzinfrastrukturen."
|
||||
excerpt: "Von Kabeltiefbau bis Elektromontage: Wir bieten ganzheitliche Lösungen für moderne Netzinfrastrukturen."
|
||||
layout: "fullBleed"
|
||||
---
|
||||
|
||||
@@ -13,7 +13,7 @@ layout: "fullBleed"
|
||||
linkText="Kontakt aufnehmen"
|
||||
linkHref="/de/kontakt"
|
||||
secondaryCtaLabel="Referenzen ansehen"
|
||||
secondaryCtaHref="/de/kompetenzen#referenzen"
|
||||
secondaryCtaHref="/de/#referenzen"
|
||||
/>
|
||||
|
||||
<HomeCompetenceBentoGrid
|
||||
@@ -23,17 +23,19 @@ layout: "fullBleed"
|
||||
ctaHref="/de/kontakt"
|
||||
items={[
|
||||
{
|
||||
title: "Kabelbau",
|
||||
title: "Kabeltiefbau",
|
||||
description: "Klassischer Grabenbau und professionelle Verlegung von Mittel- und Niederspannungskabeln.",
|
||||
tag: "Energie",
|
||||
size: "large",
|
||||
image: { url: "/assets/photos/DSC01123.JPG", alt: "Kabelbau" }
|
||||
href: "/de/kabeltiefbau",
|
||||
image: { url: "/assets/photos/DSC01123.JPG", alt: "Kabeltiefbau" }
|
||||
},
|
||||
{
|
||||
title: "Bohrtechnik",
|
||||
description: "Horizontalspülbohrverfahren (HDD) für grabenlose, oberflächenschonende Verlegung.",
|
||||
tag: "Innovation",
|
||||
size: "medium",
|
||||
href: "/de/bohrtechnik",
|
||||
image: { url: "/assets/photos/DSC08653.JPG", alt: "Bohrtechnik" }
|
||||
},
|
||||
{
|
||||
@@ -41,13 +43,15 @@ layout: "fullBleed"
|
||||
description: "Ausbau von zukunftssicheren Breitbandnetzen (FTTX).",
|
||||
tag: "Kommunikation",
|
||||
size: "small",
|
||||
href: "/de/glasfaser",
|
||||
image: { url: "/assets/photos/DSC01129.JPG", alt: "Glasfaser" }
|
||||
},
|
||||
{
|
||||
title: "Planung & Doku",
|
||||
description: "Trassenplanung, Genehmigungsverfahren und präzise GIS-Dokumentation.",
|
||||
tag: "Digital",
|
||||
size: "accent"
|
||||
size: "accent",
|
||||
href: "/de/planung"
|
||||
}
|
||||
]}
|
||||
/>
|
||||
@@ -57,50 +61,53 @@ layout: "fullBleed"
|
||||
title="Keine Kompromisse am Bau"
|
||||
problemStatement={{
|
||||
title: "Die Realität auf vielen Baustellen",
|
||||
text: "Auf vielen Baustellen werden zunehmend Billiganbieter eingesetzt. Sicherheitsstandards und Dokumentationsanforderungen werden oft missachtet. Daraus resultieren Unfälle, defekte Fremdleitungen und teure Bauverzögerungen."
|
||||
text: "Auf vielen Baustellen werden zunehmend Billiganbieter eingesetzt. Sicherheitsstandards und Dokumentationsanforderungen werden oft missachtet. Daraus resultieren Unfälle, defekte Fremdleitungen (Strom, Wasser, Gas etc.) und teure Bauverzögerungen, sodass sich ein vermeintliches Schnäppchen als Kostenfalle entpuppt."
|
||||
}}
|
||||
solutionStatement={{
|
||||
title: "Der E-TIB Standard",
|
||||
text: "Wir arbeiten anders. Durch unsere langjährige Erfahrung erkennen wir Problemstellungen frühzeitig und erarbeiten sichere Lösungen. Unterstützt durch unser Partner-Ingenieurbüro bieten wir Planung, Ausführung und Dokumentation auf höchstem Niveau."
|
||||
text: "Durch unsere langjährige Erfahrung werden wir frühzeitig auf Problemstellungen aufmerksam und erarbeiten sichere Lösungen. Unterstützt durch unser Partner-Ingenieurbüro bieten wir Planung, Ausführung und Dokumentation auf höchstem Niveau, um Planungsfehler zu vermeiden."
|
||||
}}
|
||||
panels={[
|
||||
{
|
||||
id: "energy",
|
||||
title: "Energie & Starkstrom",
|
||||
title: "Kabelleitungstiefbau (Mittel-/Niederspannung)",
|
||||
icon: "energy",
|
||||
lists: [
|
||||
[
|
||||
"Kabelbau",
|
||||
"Herstellung von Kabel- und Rohrgräben",
|
||||
"Kabelverlegung (0,4kV - 110kV)",
|
||||
"Elektromontagen bis 110 kV",
|
||||
"Kabelmontagen 0,4 kV - 30 kV",
|
||||
"Errichtung von Transformatorstationen",
|
||||
"Wartung & Störungsdienst"
|
||||
"Erstellung von Erdungsanlagen",
|
||||
"Errichtung von Straßenbeleuchtung",
|
||||
"Schalthandlungen"
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
id: "fiber",
|
||||
title: "Glasfaser & TK",
|
||||
title: "Kabelleitungstiefbau (Telekommunikation)",
|
||||
icon: "fiber",
|
||||
lists: [
|
||||
[
|
||||
"Glasfaser-Kabelmontagen",
|
||||
"Herstellung von Kabel- und Rohrgräben",
|
||||
"Herstellung von Leerrohrtrassen",
|
||||
"Einziehen/Einblasen von LWL-Kabeln",
|
||||
"Stellen von Multifunktionsgehäusen"
|
||||
"Einziehen/Einblasen von TK-/LWL-Kabeln",
|
||||
"Stellen von Multifunktionsgehäusen",
|
||||
"Kabelmontagen TK/LWL"
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
id: "hdd",
|
||||
title: "Bohrtechnik & Kabelpflug",
|
||||
title: "Grabenlose Leitungsverlegung",
|
||||
icon: "hdd",
|
||||
lists: [
|
||||
[
|
||||
"Horizontalspülbohrungen",
|
||||
"Kabelpflugarbeiten",
|
||||
"Komplexe Querung (Bahn, Autobahn, Gewässer)",
|
||||
"Erdrakete (bis 15m / 160er Rohr)"
|
||||
"Horizontalspülbohrverfahren (bis 250m)",
|
||||
"Horizontalspülbohrverfahren (bis 400er Rohr)",
|
||||
"Erdrakete (bis 15m DÖ-Länge)",
|
||||
"Erdrakete (bis 160er Rohr)"
|
||||
]
|
||||
]
|
||||
},
|
||||
@@ -110,10 +117,10 @@ layout: "fullBleed"
|
||||
icon: "planning",
|
||||
lists: [
|
||||
[
|
||||
"Genehmigungs- und Ausführungsplanung",
|
||||
"Elektro- und Netzanschlussplanung",
|
||||
"Ausschreibung & Bauüberwachung",
|
||||
"Machbarkeitsstudien & Projektprüfung"
|
||||
"Struktur-/Genehmigungs-/Ausführungsplanung",
|
||||
"Ausschreibung, Vergabe & Bauüberwachung",
|
||||
"Zustimmungsplanung",
|
||||
"Projektprüfung, Studien"
|
||||
]
|
||||
]
|
||||
},
|
||||
@@ -124,11 +131,8 @@ layout: "fullBleed"
|
||||
fullWidth: true,
|
||||
lists: [
|
||||
[
|
||||
"Vermessung & Dokumentation",
|
||||
"Absteckung und Einmessung von Leitungstrassen"
|
||||
],
|
||||
[
|
||||
"Digitale Bestandsdokumentation (GIS)",
|
||||
"Absteckung und Einmessung von Leitungstrassen",
|
||||
"Erstellung von Datenbanken zur Projektabrechnung",
|
||||
"360° Foto-/Video-Erfassung des Baufeldes"
|
||||
]
|
||||
]
|
||||
@@ -139,7 +143,7 @@ layout: "fullBleed"
|
||||
<JsonLd data={[
|
||||
{
|
||||
"@type": "Service",
|
||||
"name": "Kabelbau",
|
||||
"name": "Kabeltiefbau",
|
||||
"description": "Klassischer Grabenbau und professionelle Verlegung von Mittel- und Niederspannungskabeln.",
|
||||
"provider": { "@type": "Organization", "name": "E-TIB GmbH" }
|
||||
},
|
||||
|
||||
@@ -19,80 +19,11 @@ layout: "fullBleed"
|
||||
showFairs={true}
|
||||
showJobs={false}
|
||||
fairs={[
|
||||
{ name: 'Intersolar München', date: '19. - 21. Juni 2026', type: 'Energie-Messe', location: 'Messe München', booth: 'Halle A3, Stand 110', url: 'https://www.intersolar.de' },
|
||||
{ name: 'Windenergietage Linstow', date: '04. - 06. November 2026', type: 'Fachkongress', location: 'Van der Valk Resort Linstow', booth: 'Stand 42', url: 'https://windenergietage.de' },
|
||||
{ name: 'Kabelwerkstatt Wiesbaden', date: '02. - 03. Dezember 2026', type: 'Fachmesse', location: 'RheinMain CongressCenter', booth: 'Halle 1, Stand B20' }
|
||||
{ name: 'Intersolar München', date: '2024 / 2025', type: 'Messe', location: 'München' },
|
||||
{ name: 'Windenergietage Linstow', date: '2024 / 2025', type: 'Fachkongress', location: 'Linstow' },
|
||||
{ name: 'Kabel-Workshop Wiesbaden', date: '2024 / 2025', type: 'Fachmesse', location: 'Wiesbaden' }
|
||||
]}
|
||||
/>
|
||||
</div>
|
||||
|
||||
<CallToAction />
|
||||
|
||||
<JsonLd data={[
|
||||
{
|
||||
"@type": "Event",
|
||||
"name": "Intersolar München",
|
||||
"startDate": "2026-06-19",
|
||||
"endDate": "2026-06-21",
|
||||
"eventAttendanceMode": "https://schema.org/OfflineEventAttendanceMode",
|
||||
"eventStatus": "https://schema.org/EventScheduled",
|
||||
"location": {
|
||||
"@type": "Place",
|
||||
"name": "Messe München",
|
||||
"address": {
|
||||
"@type": "PostalAddress",
|
||||
"addressLocality": "München",
|
||||
"addressCountry": "DE"
|
||||
}
|
||||
},
|
||||
"organizer": {
|
||||
"@type": "Organization",
|
||||
"name": "E-TIB GmbH",
|
||||
"url": "https://e-tib.com"
|
||||
}
|
||||
},
|
||||
{
|
||||
"@type": "Event",
|
||||
"name": "Windenergietage Linstow",
|
||||
"startDate": "2026-11-04",
|
||||
"endDate": "2026-11-06",
|
||||
"eventAttendanceMode": "https://schema.org/OfflineEventAttendanceMode",
|
||||
"eventStatus": "https://schema.org/EventScheduled",
|
||||
"location": {
|
||||
"@type": "Place",
|
||||
"name": "Van der Valk Resort Linstow",
|
||||
"address": {
|
||||
"@type": "PostalAddress",
|
||||
"addressLocality": "Linstow",
|
||||
"addressCountry": "DE"
|
||||
}
|
||||
},
|
||||
"organizer": {
|
||||
"@type": "Organization",
|
||||
"name": "E-TIB GmbH",
|
||||
"url": "https://e-tib.com"
|
||||
}
|
||||
},
|
||||
{
|
||||
"@type": "Event",
|
||||
"name": "Kabelwerkstatt Wiesbaden",
|
||||
"startDate": "2026-12-02",
|
||||
"endDate": "2026-12-03",
|
||||
"eventAttendanceMode": "https://schema.org/OfflineEventAttendanceMode",
|
||||
"eventStatus": "https://schema.org/EventScheduled",
|
||||
"location": {
|
||||
"@type": "Place",
|
||||
"name": "RheinMain CongressCenter",
|
||||
"address": {
|
||||
"@type": "PostalAddress",
|
||||
"addressLocality": "Wiesbaden",
|
||||
"addressCountry": "DE"
|
||||
}
|
||||
},
|
||||
"organizer": {
|
||||
"@type": "Organization",
|
||||
"name": "E-TIB GmbH",
|
||||
"url": "https://e-tib.com"
|
||||
}
|
||||
}
|
||||
]} />
|
||||
|
||||
79
content/de/planung.mdx
Normal file
@@ -0,0 +1,79 @@
|
||||
---
|
||||
title: "Planung und Beratung"
|
||||
date: "2024-03-20"
|
||||
excerpt: "Professionelle Planung und Beratung im Bereich Energie- und Telekommunikationsnetze: Trassenplanung, Genehmigungsverfahren und Projektsteuerung aus einer Hand."
|
||||
layout: "fullBleed"
|
||||
---
|
||||
|
||||
<HeroSection
|
||||
badge="Kernkompetenz"
|
||||
title="Planung & Beratung"
|
||||
subtitle="Kompetente Begleitung für Energie- und Telekommunikationsnetze"
|
||||
backgroundImage={{ url: '/assets/photos/DJI_0048.JPG' }}
|
||||
alignment="center"
|
||||
ctaLabel="Projekt anfragen"
|
||||
ctaHref="/de/kontakt"
|
||||
/>
|
||||
|
||||
<div className="container px-4 max-w-7xl mx-auto py-16">
|
||||
<blockquote>
|
||||
Wir bieten unseren Kunden alles aus einer Hand – von der Grobplanung Ihrer Projektidee über den Kabelleitungstiefbau bis zum Bau Ihres erneuerbaren Energieprojektes.
|
||||
</blockquote>
|
||||
|
||||
## Fundament für den Projekterfolg
|
||||
|
||||
Eine solide Planung ist das entscheidende Fundament für jedes erfolgreiche Infrastrukturprojekt. Oft scheitern Projekte oder verzögern sich massiv, weil die Komplexität der Tiefbauplanung und Genehmigungsverfahren unterschätzt wurde. Durch unsere gebündelte Kompetenz vermeiden Sie teure Planungsfehler und Reibungsverluste an den Schnittstellen.
|
||||
|
||||
Sowohl für den hochaktuellen Breitbandausbau als auch für den anspruchsvollen Netzanschluss von Solar- oder Windprojekten wird eine absolut präzise und hochwertige Kabeltrassenplanung benötigt. Dazu besichtigen wir die Trasse vor Ort, analysieren frühzeitig alle potenziellen Baukonflikte und stellen sicher, dass alle erforderlichen Anträge für die Verlegung fristgerecht und vollständig bei den Behörden eingereicht werden.
|
||||
|
||||
## Starke Ingenieurskompetenz
|
||||
|
||||
In enger Zusammenarbeit mit unserem spezialisierten Partner-Ingenieurbüro, der **E-TIB Ingenieurgesellschaft mbH**, begleiten wir Sie durch alle Leistungsphasen. Ob Strukturplanung zur Trassenoptimierung, komplexe Genehmigungsplanung oder detaillierte Ausführungsplanung – wir steuern Ihr Projekt von der ersten Machbarkeitsstudie bis zur erfolgreichen Bauüberwachung und Abnahme.
|
||||
</div>
|
||||
|
||||
<ServiceDetailGrid
|
||||
badge="Ingenieursdienstleistungen"
|
||||
title="Unsere Planungsleistungen"
|
||||
descriptionParagraphs={[
|
||||
"Minimieren Sie Risiken und Schnittstellen. Wir vereinen planerisches Know-how mit praktischer Tiefbau-Expertise."
|
||||
]}
|
||||
panels={[
|
||||
{
|
||||
id: "planung",
|
||||
title: "Trassen- & Genehmigungsplanung",
|
||||
icon: "planning",
|
||||
fullWidth: false,
|
||||
lists: [
|
||||
[
|
||||
"Strukturplanung (Trassenoptimierung)",
|
||||
"Genehmigungsplanung & Behördenmanagement",
|
||||
"Detaillierte Ausführungsplanung",
|
||||
"Zustimmungsplanung"
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
id: "beratung",
|
||||
title: "Steuerung & Überwachung",
|
||||
icon: "planning",
|
||||
fullWidth: false,
|
||||
lists: [
|
||||
[
|
||||
"Ausschreibung & Vergabe (AVA)",
|
||||
"Fachbauüberwachung",
|
||||
"Projektprüfung & Controlling",
|
||||
"Fundierte Machbarkeitsstudien"
|
||||
]
|
||||
]
|
||||
}
|
||||
]}
|
||||
/>
|
||||
|
||||
<HomeReferencesSlider badge="Praxisbeispiele" title="Planung in der Praxis" description="Erfolgreich geplante und begleitete Infrastrukturprojekte unserer Unternehmensgruppe." />
|
||||
|
||||
<CallToAction
|
||||
title="Benötigen Sie Planungssicherheit?"
|
||||
text="Lassen Sie uns über Ihr Vorhaben sprechen. Wir stehen Ihnen mit unserem Ingenieurwissen zur Seite."
|
||||
buttonText="Kontakt aufnehmen"
|
||||
buttonLink="/de/kontakt"
|
||||
/>
|
||||
@@ -1,8 +1,8 @@
|
||||
---
|
||||
title: "Breitbandausbau FTTH, Landkreis Börde"
|
||||
client: "EKN Breitband GmbH & Co. KG"
|
||||
date: "2026-01-01"
|
||||
dateString: "seit 05/2019"
|
||||
date: "2019-05-01"
|
||||
dateString: "Seit 05/2019"
|
||||
location: "Landkreis Börde"
|
||||
featuredImage: "/assets/photos/etib_ingenieure_tiefbau_solar_pv_planung_vermessung_gis-294.jpg"
|
||||
---
|
||||
@@ -10,3 +10,5 @@ featuredImage: "/assets/photos/etib_ingenieure_tiefbau_solar_pv_planung_vermessu
|
||||
- 109.000 m Leitungstrasse herstellen (Tiefbau/HDD)
|
||||
- 63 Stück Aufstellung Netzverteiler
|
||||
- 747 Stück Herstellung Hausanschlüsse
|
||||
- Koordination und Realisierung der gesamten Trassenführung
|
||||
- Dokumentation und Abnahme der Hausanschlüsse
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
---
|
||||
title: "Breitbandausbau FTTH, Planungsregion Bomlitz"
|
||||
client: "Telekom Deutschland GmbH"
|
||||
date: "2018-12-31"
|
||||
dateString: "04/2018 bis 12/2018"
|
||||
location: "Bomlitz"
|
||||
featuredImage: "/assets/photos/Etib_E-tib_Tiefbau_Guben_Netzanbindung_Energie-100.jpg"
|
||||
title: "Breitbandausbau FTTH, Bomlitz / Schwarmstedt"
|
||||
client: "inexio Informationstechnologie und Telekommunikation GmbH"
|
||||
date: "2018-08-01"
|
||||
dateString: "08/2018 bis 03/2021"
|
||||
location: "29699 Bomlitz / 29690 Schwarmstedt"
|
||||
featuredImage: "/assets/photos/Etib_E-tib_Tiefbau_Guben_Netzanbindung_Energie-60.jpg"
|
||||
---
|
||||
|
||||
- 88.890 m Leitungstrasse herstellen (Tiefbau/HDD)
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
---
|
||||
title: "Kabelverbindung U30 - T10, 15890 Eisenhüttenstadt"
|
||||
title: "Kabelverbindung U30 - T10, Eisenhüttenstadt"
|
||||
client: "ArcelorMittal Eisenhüttenstadt GmbH"
|
||||
date: "2019-12-31"
|
||||
date: "2019-07-01"
|
||||
dateString: "07/2019 bis 12/2019"
|
||||
location: "Eisenhüttenstadt"
|
||||
location: "15890 Eisenhüttenstadt"
|
||||
featuredImage: "/assets/photos/Etib_E-tib_Tiefbau_Guben_Netzanbindung_Energie_Vermessung_(24_von_99)_groß2.jpg"
|
||||
---
|
||||
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
---
|
||||
title: "Neubau Kabeltrasse, 03149 Forst"
|
||||
title: "Neubau Kabeltrasse, Forst"
|
||||
client: "Mitteldeutsche Netzgesellschaft Strom mbH"
|
||||
date: "2020-09-30"
|
||||
date: "2020-03-01"
|
||||
dateString: "03/2020 bis 09/2020"
|
||||
location: "Forst"
|
||||
location: "03149 Forst"
|
||||
featuredImage: "/assets/photos/DSC02156.jpg"
|
||||
---
|
||||
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
---
|
||||
title: "Einspeisung PV-Anlage 14728 Görne"
|
||||
title: "Einspeisung PV-Anlage, Görne"
|
||||
client: "EVH GmbH"
|
||||
date: "2020-07-31"
|
||||
date: "2020-05-01"
|
||||
dateString: "05/2020 bis 07/2020"
|
||||
location: "Görne"
|
||||
location: "14728 Görne"
|
||||
featuredImage: "/assets/photos/DSC08744.JPG"
|
||||
---
|
||||
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
---
|
||||
title: "Breitbandausbau FTTC, Planungsregion Spreewald"
|
||||
client: "Telekom Deutschland GmbH"
|
||||
date: "2018-01-31"
|
||||
date: "2017-09-01"
|
||||
dateString: "09/2017 bis 01/2018"
|
||||
location: "Spreewald"
|
||||
location: "Planungsregion Spreewald"
|
||||
featuredImage: "/assets/photos/DSC01129.JPG"
|
||||
---
|
||||
|
||||
@@ -12,8 +12,6 @@ featuredImage: "/assets/photos/DSC01129.JPG"
|
||||
- 13.008 m Horizontalspülbohrung D 50
|
||||
- 94.951 m Einblasen von Kabel/Rohren unbelegt
|
||||
- 42 Stück Stellen von Multifunktionsgehäusen
|
||||
- Aufbau von Energieanschlusssäulen
|
||||
- Aufbau elektrischer Anlagen 230V
|
||||
- Koordination mit Energieversorgungsunternehmen
|
||||
- Inbetriebnahme der elektrischen Anlagen
|
||||
- Aufbau von Energieanschlusssäulen und elektrischen Anlagen 230V
|
||||
- Koordination mit Energieversorgungsunternehmen und Inbetriebnahme der elektrischen Anlagen
|
||||
- Oberflächen- und Tiefbauarbeiten für Multifunktionsgehäuse
|
||||
|
||||
90
content/de/team.mdx
Normal file
@@ -0,0 +1,90 @@
|
||||
---
|
||||
title: "Unser Team"
|
||||
date: "2024-03-20"
|
||||
excerpt: "Lernen Sie die Experten der E-TIB Gruppe kennen."
|
||||
layout: "fullBleed"
|
||||
---
|
||||
|
||||
<HeroSection
|
||||
badge="Unternehmen"
|
||||
title="Unser Team"
|
||||
subtitle="Die Experten hinter der E-TIB Gruppe"
|
||||
backgroundImage={{ url: '/assets/photos/DJI_0048.JPG' }}
|
||||
alignment="center"
|
||||
/>
|
||||
|
||||
<TeamGrid
|
||||
members={[
|
||||
{
|
||||
id: "danny-joseph",
|
||||
name: "Danny Joseph",
|
||||
position: "Geschäftsführung",
|
||||
email: "d.joseph@e-tib.com",
|
||||
phone: "+49 1520 7230518",
|
||||
image: "/assets/photos/team/danny.jpg"
|
||||
},
|
||||
{
|
||||
id: "dirk-schmidt",
|
||||
name: "Dirk Schmidt",
|
||||
position: "Projektleitung",
|
||||
email: "d.schmidt@e-tib.com",
|
||||
phone: "+49 151 65069040",
|
||||
image: "/assets/photos/team/dirk.jpg"
|
||||
},
|
||||
{
|
||||
id: "oliver-fiedler",
|
||||
name: "Oliver Fiedler",
|
||||
position: "Bauleitung",
|
||||
email: "o.fiedler@e-tib.com",
|
||||
phone: "+49 151 52264087",
|
||||
image: "/assets/photos/team/oliver.jpg"
|
||||
},
|
||||
{
|
||||
id: "martin-polan",
|
||||
name: "Martin Polan",
|
||||
position: "Polier",
|
||||
email: "m.polan@e-tib.com",
|
||||
phone: "+49 171 3868167",
|
||||
image: "/assets/photos/team/martin.jpg"
|
||||
},
|
||||
{
|
||||
id: "kerstin-joseph",
|
||||
name: "Kerstin Joseph",
|
||||
position: "Sekretariat / Buchhaltung",
|
||||
email: "k.joseph@e-tib.com",
|
||||
phone: "+49 3561 6851692",
|
||||
image: "/assets/photos/team/kerstin.jpg"
|
||||
},
|
||||
{
|
||||
id: "kathrin-lemanski",
|
||||
name: "Kathrin Lemanski",
|
||||
position: "Sachbearbeitung",
|
||||
email: "k.lemanski@e-tib.com",
|
||||
phone: "+49 3561 6857733",
|
||||
image: "/assets/photos/team/kathrin.jpg"
|
||||
},
|
||||
{
|
||||
id: "sven-kirbs",
|
||||
name: "Sven Kirbs",
|
||||
position: "Vermessung / Dokumentation",
|
||||
email: "s.kirbs@e-tib.com",
|
||||
phone: "+49 151 29603652",
|
||||
image: "/assets/photos/team/sven.jpg"
|
||||
},
|
||||
{
|
||||
id: "maik-weichert",
|
||||
name: "Maik Weichert",
|
||||
position: "Fuhrpark / Werkstatt / Lager",
|
||||
email: "m.weichert@e-tib.com",
|
||||
phone: "+49 171 9282872",
|
||||
image: "/assets/photos/team/maik.jpg"
|
||||
}
|
||||
]}
|
||||
/>
|
||||
|
||||
<CallToAction
|
||||
title="Werden Sie Teil unseres Teams"
|
||||
text="Wir sind immer auf der Suche nach motivierten Talenten für spannende Infrastrukturprojekte."
|
||||
buttonText="Offene Stellen ansehen"
|
||||
buttonLink="/de/karriere"
|
||||
/>
|
||||
80
content/de/vermessung.mdx
Normal file
@@ -0,0 +1,80 @@
|
||||
---
|
||||
title: "Vermessung und Dokumentation"
|
||||
date: "2024-03-20"
|
||||
excerpt: "Präzise GIS-Vermessung, Absteckung und digitale Dokumentation von Leitungstrassen zur Gewährleistung höchster Bau- und Sicherheitsstandards."
|
||||
layout: "fullBleed"
|
||||
---
|
||||
|
||||
<HeroSection
|
||||
badge="Kernkompetenz"
|
||||
title="Vermessung & Dokumentation"
|
||||
subtitle="Lückenlose und rechtssichere Erfassung aller Bauphasen"
|
||||
backgroundImage={{ url: '/assets/photos/DSC08653.JPG' }}
|
||||
alignment="center"
|
||||
ctaLabel="Projekt anfragen"
|
||||
ctaHref="/de/kontakt"
|
||||
/>
|
||||
|
||||
<div className="container px-4 max-w-7xl mx-auto py-16">
|
||||
<blockquote>
|
||||
Wir arbeiten mit hochpräzisem GPS-Equipment zur lückenlosen Dokumentation der Projekte unserer Kunden. Dafür entwickeln wir eigenständig App-Integrationen zur Automatisierung der Vermessung.
|
||||
</blockquote>
|
||||
|
||||
## Höchste Präzision schützt vor Überraschungen
|
||||
|
||||
In der heutigen Zeit wachsen die gesetzlichen Dokumentationsanforderungen und strengen Sicherheitsstandards rasant. Viele herkömmliche Tiefbaufirmen sind kaum noch in der Lage, diese hochkomplexen Anforderungen – insbesondere für den geförderten Breitbandausbau – sauber zu erfüllen. Fehlende oder fehlerhafte Dokumentationen führen unweigerlich zu massiven Problemen bei der Bauabnahme und Projektfinanzierung.
|
||||
|
||||
Wir haben diesen Engpass erkannt und uns proaktiv auf die hochpräzise Vermessung und digitale Dokumentation von Kabeltrassen spezialisiert.
|
||||
|
||||
## Digitale Erfassung auf dem neuesten Stand
|
||||
|
||||
Mit modernster GPS-Technik und eigens entwickelten, digitalen App-Integrationen sorgen wir für eine hochgradig automatisierte, lückenlose und absolut rechtssichere Erfassung aller verlegten Leitungen und Anlagen.
|
||||
Neben der klassischen GPS-Absteckung und Einmessung erstellen wir für unsere Auftraggeber komplette Geodatenbanken zur transparenten Projektabrechnung und bieten eine lückenlose 360° Foto- und Video-Erfassung des Baufeldes an. So behalten Sie jederzeit den vollen Überblick über Ihre unterirdische Infrastruktur.
|
||||
</div>
|
||||
|
||||
<ServiceDetailGrid
|
||||
badge="Präzision"
|
||||
title="Digitale Sicherheitsstandards"
|
||||
descriptionParagraphs={[
|
||||
"Wir liefern Ihnen nicht nur eine saubere Trasse, sondern auch die perfekten Daten. Rechtssicher, digital und auf den Zentimeter genau."
|
||||
]}
|
||||
panels={[
|
||||
{
|
||||
id: "vermessung",
|
||||
title: "Klassische Geodäsie",
|
||||
icon: "survey",
|
||||
fullWidth: false,
|
||||
lists: [
|
||||
[
|
||||
"Zentimetergenaue Absteckung von Leitungstrassen",
|
||||
"Einmessung von Bestandstrassen und neuen Leitungen",
|
||||
"Hochpräzise GPS-gestützte Geländeaufnahme",
|
||||
"Automatisierte App-basierte Messverfahren"
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
id: "dokumentation",
|
||||
title: "Digitale Dokumentation",
|
||||
icon: "survey",
|
||||
fullWidth: false,
|
||||
lists: [
|
||||
[
|
||||
"Erstellung von Datenbanken zur Projektabrechnung",
|
||||
"360° Foto- und Video-Erfassung des Baufeldes",
|
||||
"Einbindung und Aufbereitung für Geoinformationssysteme (GIS)",
|
||||
"Revisionssichere Bestandspläne"
|
||||
]
|
||||
]
|
||||
}
|
||||
]}
|
||||
/>
|
||||
|
||||
<HomeReferencesSlider badge="Praxisbeispiele" title="Dokumentierte Projekte" description="Wir haben hunderte Kilometer Trassen exakt eingemessen und digital dokumentiert." />
|
||||
|
||||
<CallToAction
|
||||
title="Stehen Sie vor hohen Dokumentationsanforderungen?"
|
||||
text="Kontaktieren Sie uns für professionelle Vermessungs- und GIS-Dienstleistungen."
|
||||
buttonText="Kontakt aufnehmen"
|
||||
buttonLink="/de/kontakt"
|
||||
/>
|
||||
15
content/de/zertifikate.mdx
Normal file
@@ -0,0 +1,15 @@
|
||||
---
|
||||
title: "Zertifikate & Nachweise"
|
||||
date: "2024-03-20"
|
||||
excerpt: "Geprüfte Qualität, Arbeitssicherheit und Umweltschutz sind das Fundament unserer täglichen Arbeit."
|
||||
layout: "fullBleed"
|
||||
---
|
||||
|
||||
<HeroSection
|
||||
badge="Die E-TIB Gruppe"
|
||||
title="Zertifikate & Nachweise"
|
||||
subtitle="Geprüfte Qualität, Arbeitssicherheit und Umweltschutz sind das Fundament unserer täglichen Arbeit."
|
||||
backgroundImage={{ url: "/assets/photos/DSC08653.JPG" }}
|
||||
/>
|
||||
|
||||
<CertificatesBlock hideHeader={true} />
|
||||
@@ -1,30 +0,0 @@
|
||||
---
|
||||
title: "Modern Methods in Cable Civil Engineering"
|
||||
date: "2024-03-15T10:00:00.000Z"
|
||||
excerpt: "Learn more about the latest technologies and methods in modern cable civil engineering, from horizontal directional drilling to trenchless installation techniques."
|
||||
featuredImage: "/assets/images/blog/tiefbau.jpg"
|
||||
category: "Technology"
|
||||
public: true
|
||||
---
|
||||
|
||||
# Modern Methods in Cable Civil Engineering
|
||||
|
||||
Cable civil engineering has evolved rapidly in recent years. New technologies enable more efficient and environmentally friendly installation of utility lines.
|
||||
|
||||
## Trenchless Installation Techniques
|
||||
|
||||
One of the most important methods is **Horizontal Directional Drilling (HDD)**. This method allows pipes to be laid under obstacles such as roads, rivers, or buildings without having to break open the surface.
|
||||
|
||||
### Benefits of HDD Drilling:
|
||||
- Minimal impact on traffic
|
||||
- Protection of the environment and existing vegetation
|
||||
- Shorter construction times
|
||||
- Lower costs for complex crossings
|
||||
|
||||
## Classic Civil Engineering in New Quality
|
||||
|
||||
Classic trench construction also benefits from modern machinery and precise planning. By using suction excavators and GPS-supported surveying, we can virtually eliminate damage to existing utility lines.
|
||||
|
||||
## Conclusion
|
||||
|
||||
The combination of proven craftsmanship and state-of-the-art technology is the key to successful infrastructure projects. At E-TIB, we consistently focus on innovation to deliver the best possible results for our customers.
|
||||
60
content/en/bohrtechnik.mdx
Normal file
@@ -0,0 +1,60 @@
|
||||
---
|
||||
title: "Trenchless Line Laying"
|
||||
date: "2024-03-20"
|
||||
excerpt: "Precise horizontal directional drilling and earth rockets in all soil classes for surface-friendly and trenchless line laying."
|
||||
layout: "fullBleed"
|
||||
---
|
||||
|
||||
<HeroSection
|
||||
badge="Core Competency"
|
||||
title="Trenchless Laying"
|
||||
subtitle="Surface-friendly horizontal directional drilling and earth rockets"
|
||||
backgroundImage={{ url: '/assets/photos/DSC08653.JPG' }}
|
||||
alignment="center"
|
||||
ctaLabel="Request a project"
|
||||
ctaHref="/en/kontakt"
|
||||
/>
|
||||
|
||||
<ServiceDetailGrid
|
||||
badge="Procedures"
|
||||
title="Efficient & Environmentally Friendly"
|
||||
descriptionParagraphs={[
|
||||
"If classic trench construction is out of the question for reasons of space, environment, or cost, we rely on **state-of-the-art trenchless techniques**.",
|
||||
"This not only protects nature but also significantly saves on restoration costs for complex surfaces."
|
||||
]}
|
||||
panels={[
|
||||
{
|
||||
id: "hdd",
|
||||
title: "Horizontal Directional Drilling (HDD)",
|
||||
icon: "hdd",
|
||||
fullWidth: false,
|
||||
lists: [
|
||||
[
|
||||
"Max. drilling length: 250 m",
|
||||
"Max. diameter: 400mm pipe",
|
||||
"Complex crossing of railways, highways & water bodies"
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
id: "erdrakete",
|
||||
title: "Earth Rocket",
|
||||
icon: "hdd",
|
||||
fullWidth: false,
|
||||
lists: [
|
||||
[
|
||||
"Max. crossing length: 15 m",
|
||||
"Max. diameter: 160mm pipe",
|
||||
"Fast house connections without trenches"
|
||||
]
|
||||
]
|
||||
}
|
||||
]}
|
||||
/>
|
||||
|
||||
<CallToAction
|
||||
title="Looking for a trenchless solution?"
|
||||
text="We would be happy to advise you on the possibilities of horizontal directional drilling for your project."
|
||||
buttonText="Contact us"
|
||||
buttonLink="/en/kontakt"
|
||||
/>
|
||||
60
content/en/glasfaser.mdx
Normal file
@@ -0,0 +1,60 @@
|
||||
---
|
||||
title: "Cable Civil Engineering in Telecommunications"
|
||||
date: "2024-03-20"
|
||||
excerpt: "Future-proof infrastructure through competent cable civil engineering for fiber optic and telecommunications networks."
|
||||
layout: "fullBleed"
|
||||
---
|
||||
|
||||
<HeroSection
|
||||
badge="Core Competency"
|
||||
title="Fiber Optics & Telecommunications"
|
||||
subtitle="Complete infrastructure solutions for future-proof broadband networks (FTTX)"
|
||||
backgroundImage={{ url: '/assets/photos/DSC01129.JPG' }}
|
||||
alignment="center"
|
||||
ctaLabel="Request a project"
|
||||
ctaHref="/en/kontakt"
|
||||
/>
|
||||
|
||||
<ServiceDetailGrid
|
||||
badge="Service Portfolio"
|
||||
title="Backbone of Digitalization"
|
||||
descriptionParagraphs={[
|
||||
"Fast internet and state-of-the-art telecommunications networks require a **smooth and professional network expansion**.",
|
||||
"With state-of-the-art machinery and specialized assembly teams, E-TIB ensures the highest quality in fiber optic expansion."
|
||||
]}
|
||||
panels={[
|
||||
{
|
||||
id: "tiefbau",
|
||||
title: "Civil Engineering & Routes",
|
||||
icon: "fiber",
|
||||
fullWidth: false,
|
||||
lists: [
|
||||
[
|
||||
"Production of cable and pipe trenches",
|
||||
"Production of empty conduit routes",
|
||||
"Setting up multi-function enclosures"
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
id: "montage",
|
||||
title: "Cable Pulling & Assembly",
|
||||
icon: "fiber",
|
||||
fullWidth: false,
|
||||
lists: [
|
||||
[
|
||||
"Pulling of TK/FO cables",
|
||||
"Blowing in of fiber optic cables",
|
||||
"Cable assembly TK/FO"
|
||||
]
|
||||
]
|
||||
}
|
||||
]}
|
||||
/>
|
||||
|
||||
<CallToAction
|
||||
title="Are you planning an FTTX expansion?"
|
||||
text="We are happy to advise you on all aspects of FTTX and fiber optic expansion."
|
||||
buttonText="Contact us"
|
||||
buttonLink="/en/kontakt"
|
||||
/>
|
||||
@@ -139,42 +139,4 @@ description: "E-TIB GmbH is your reliable partner for complex cable routes, hori
|
||||
]}
|
||||
/>
|
||||
|
||||
<HomeReferencesSlider
|
||||
references={[
|
||||
{
|
||||
id: "1",
|
||||
title: "Broadband Expansion FTTC, Spreewald Planning Region",
|
||||
slug: "broadband-expansion-fttc-spreewald",
|
||||
category: "Telecommunications",
|
||||
image: "/assets/photos/DSC01123.JPG"
|
||||
},
|
||||
{
|
||||
id: "2",
|
||||
title: "Broadband Expansion FTTH, 29699 Bomlitz / 29690 Schwarmstedt",
|
||||
slug: "broadband-expansion-ftth-bomlitz",
|
||||
category: "Telecommunications",
|
||||
image: "/assets/photos/DSC00850.JPG"
|
||||
},
|
||||
{
|
||||
id: "3",
|
||||
title: "New Cable Route, 03149 Forst",
|
||||
slug: "new-cable-route-forst",
|
||||
category: "Cable Construction",
|
||||
image: "/assets/photos/DSC01129.JPG"
|
||||
},
|
||||
{
|
||||
id: "4",
|
||||
title: "Cable Connection U30 - T10, 15890 Eisenhüttenstadt",
|
||||
slug: "cable-connection-eisenhuettenstadt",
|
||||
category: "Cable Construction",
|
||||
image: "/assets/photos/DSC00010.JPG"
|
||||
},
|
||||
{
|
||||
id: "5",
|
||||
title: "PV System Feed-in 14728 Görne",
|
||||
slug: "pv-system-feed-in-goerne",
|
||||
category: "Renewable Energy",
|
||||
image: "/assets/photos/DSC01123.JPG"
|
||||
}
|
||||
]}
|
||||
/>
|
||||
<HomeReferencesSlider />
|
||||
|
||||
@@ -26,12 +26,12 @@ Email: info@e-tib.com
|
||||
|
||||
Registration in the Commercial Register.
|
||||
Registration Court: District Court Cottbus
|
||||
Registration Number: HRB 14781 CB
|
||||
Registration Number: HRB 12403 CB
|
||||
|
||||
## VAT ID
|
||||
|
||||
VAT identification number according to § 27 a VAT Act:
|
||||
DE332345678 (Example)
|
||||
DE304799919
|
||||
|
||||
## Responsible for Content
|
||||
|
||||
@@ -48,3 +48,17 @@ Our email address can be found at the top of the imprint.
|
||||
## Consumer Dispute Resolution/Universal Arbitration Board
|
||||
|
||||
We are not willing or obliged to participate in dispute resolution proceedings before a consumer arbitration board.
|
||||
|
||||
## Disclaimer
|
||||
|
||||
### Liability for Content
|
||||
|
||||
As a service provider, we are responsible for our own content on these pages in accordance with general legislation pursuant to § 7 Abs.1 TMG (German Telemedia Act). However, according to §§ 8 to 10 TMG, we are not obligated to monitor transmitted or stored third-party information or to investigate circumstances that indicate illegal activity. Obligations to remove or block the use of information under general laws remain unaffected. However, liability in this regard is only possible from the time of knowledge of a specific infringement. Upon becoming aware of such legal violations, we will remove this content immediately.
|
||||
|
||||
### Liability for Links
|
||||
|
||||
Our website contains links to external third-party websites, over whose content we have no influence. Therefore, we cannot assume any liability for these external contents. The respective provider or operator of the pages is always responsible for the content of the linked pages. The linked pages were checked for possible legal violations at the time of linking. Illegal content was not recognizable at the time of linking. However, permanent monitoring of the content of the linked pages is unreasonable without concrete evidence of a violation of the law. If we become aware of any legal violations, we will remove such links immediately.
|
||||
|
||||
### Copyright
|
||||
|
||||
The content and works created by the site operators on these pages are subject to German copyright law. The duplication, editing, distribution, and any kind of exploitation outside the limits of copyright require the written consent of the respective author or creator. Downloads and copies of this site are only permitted for private, non-commercial use. Insofar as the content on this site was not created by the operator, the copyrights of third parties are respected. In particular, third-party content is marked as such. Should you nevertheless become aware of a copyright infringement, please inform us accordingly. Upon becoming aware of any legal violations, we will remove such content immediately.
|
||||
|
||||
61
content/en/kabeltiefbau.mdx
Normal file
@@ -0,0 +1,61 @@
|
||||
---
|
||||
title: "Cable Civil Engineering in Medium and Low Voltage"
|
||||
date: "2024-03-20"
|
||||
excerpt: "Professional cable civil engineering for medium and low voltage networks: From the construction of cable routes to cable assemblies and street lighting."
|
||||
layout: "fullBleed"
|
||||
---
|
||||
|
||||
<HeroSection
|
||||
badge="Core Competency"
|
||||
title="Cable Civil Engineering"
|
||||
subtitle="Complete infrastructure solutions for medium and low voltage networks"
|
||||
backgroundImage={{ url: '/assets/photos/DSC01123.JPG' }}
|
||||
alignment="center"
|
||||
ctaLabel="Request a project"
|
||||
ctaHref="/en/kontakt"
|
||||
/>
|
||||
|
||||
<ServiceDetailGrid
|
||||
badge="Service Portfolio"
|
||||
title="Everything for your network"
|
||||
descriptionParagraphs={[
|
||||
"Our services cover the **complete spectrum** for the construction of modern cable routes and energy infrastructure.",
|
||||
"We offer the highest precision, modern machines, and certified experts for every project."
|
||||
]}
|
||||
panels={[
|
||||
{
|
||||
id: "grabenbau",
|
||||
title: "Trench Construction & Laying",
|
||||
icon: "energy",
|
||||
fullWidth: false,
|
||||
lists: [
|
||||
[
|
||||
"Production of cable and pipe trenches",
|
||||
"Cable laying from 0.4 kV - 110 kV",
|
||||
"Cable assembly 0.4 kV - 30 kV"
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
id: "anlagen",
|
||||
title: "Systems & Lighting",
|
||||
icon: "energy",
|
||||
fullWidth: false,
|
||||
lists: [
|
||||
[
|
||||
"Construction of transformer stations",
|
||||
"Establishment of grounding systems",
|
||||
"Erection of street lighting",
|
||||
"Switching operations"
|
||||
]
|
||||
]
|
||||
}
|
||||
]}
|
||||
/>
|
||||
|
||||
<CallToAction
|
||||
title="Do you have a specific project?"
|
||||
text="We would be happy to advise you on all questions regarding cable civil engineering and line laying."
|
||||
buttonText="Contact us"
|
||||
buttonLink="/en/kontakt"
|
||||
/>
|
||||
@@ -7,58 +7,94 @@ layout: "fullBleed"
|
||||
|
||||
<HomeHero
|
||||
badge="Careers"
|
||||
title="Build the Future\nwith Us"
|
||||
description="We are looking for motivated talents who want to shape the digital and energy infrastructure of tomorrow. Join the E-TIB team."
|
||||
title="Build the Future"
|
||||
description="Are you looking for a new challenge in a future-proof market? At E-TIB, we work daily to network Germany and drive the energy transition forward."
|
||||
videoUrl="/assets/videos/web/hero-kabelpflug.mp4"
|
||||
linkText="View Open Positions"
|
||||
linkHref="#jobs"
|
||||
linkText="Open Positions"
|
||||
linkHref="#stellen"
|
||||
/>
|
||||
|
||||
<div id="jobs">
|
||||
<JobListingBlock
|
||||
showFairs={false}
|
||||
showJobs={true}
|
||||
title="Current Job Offers"
|
||||
fairsTitle="Upcoming Trade Fairs 2026"
|
||||
fairs={[
|
||||
{ name: 'Intersolar Munich', date: 'June 19 - 21, 2026', type: 'Energy Fair' },
|
||||
{ name: 'Wind Energy Days Linstow', date: 'Nov 04 - 06, 2026', type: 'Specialist Congress' },
|
||||
{ name: 'Cable Workshop Wiesbaden', date: 'Dec 02 - 03, 2026', type: 'Trade Fair' }
|
||||
]}
|
||||
emptyStateMessage="Currently all positions are filled. However, we welcome your speculative application!"
|
||||
emptyStateLinkText="Contact us now"
|
||||
emptyStateLinkHref="/en/kontakt"
|
||||
/>
|
||||
</div>
|
||||
<JobListingBlock showFairs={false} showJobs={true} />
|
||||
|
||||
<div className="bg-white py-24 border-t border-neutral-100">
|
||||
<div className="container max-w-4xl mx-auto px-4 prose prose-lg md:prose-xl prose-headings:font-bold prose-headings:text-neutral-dark prose-p:text-text-secondary prose-li:text-text-secondary prose-ul:space-y-2">
|
||||
<h2>Careers at E-TIB</h2>
|
||||
<div>
|
||||
E-TIB GmbH was founded in 2015 out of the motivation to enable high-quality services for our customers as well as fair remuneration for our employees. In addition to remuneration, the appreciation of each individual employee is our top priority.
|
||||
</div>
|
||||
|
||||
<h3>We offer our employees:</h3>
|
||||
<ul>
|
||||
<li>Deployment in regional and supra-regional construction projects</li>
|
||||
<li>Secure, permanent full-time employment contract</li>
|
||||
<li>Appropriate training in a committed team</li>
|
||||
<li>Performance-related and fair remuneration</li>
|
||||
<li>Daily allowance up to 30.00 EUR per working day</li>
|
||||
<li>31 days of vacation plus vacation pay</li>
|
||||
<li>Work clothing (Engelbert Strauss)</li>
|
||||
<li>Monthly additional payments (personal MasterCard)</li>
|
||||
<li>Contribution to company pension scheme</li>
|
||||
<li>Individual training and development opportunities</li>
|
||||
<li>Provision of vehicle for operational use and trips to the construction site</li>
|
||||
<li>Family atmosphere with company-organized events</li>
|
||||
</ul>
|
||||
|
||||
<div>
|
||||
Our successful corporate development enables us to continuously hire new workers. We are always looking for committed and motivated employees. Become a part of our team. Take a look at our open positions or apply speculatively.
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<BenefitGrid
|
||||
badge="E-TIB Standard"
|
||||
title="We offer our employees"
|
||||
description="E-TIB GmbH was founded with the motivation to provide high-quality services and fair remuneration. In addition to remuneration, the appreciation of each individual employee is our top priority."
|
||||
benefits={[
|
||||
{
|
||||
id: "region",
|
||||
title: "Exciting Projects",
|
||||
description: "Deployment in interesting regional and supra-regional construction projects.",
|
||||
icon: "region"
|
||||
},
|
||||
{
|
||||
id: "contract",
|
||||
title: "Permanent Contract",
|
||||
description: "Secure job with a permanent full-time employment contract.",
|
||||
icon: "contract"
|
||||
},
|
||||
{
|
||||
id: "money",
|
||||
title: "Fair Remuneration",
|
||||
description: "Performance-related, above-average, and fair payment.",
|
||||
icon: "money"
|
||||
},
|
||||
{
|
||||
id: "allowance",
|
||||
title: "Daily Allowance",
|
||||
description: "We pay a tax-free daily allowance of up to 30.00 EUR per working day.",
|
||||
icon: "allowance"
|
||||
},
|
||||
{
|
||||
id: "vacation",
|
||||
title: "31 Days of Vacation",
|
||||
description: "31 days of annual vacation plus additional vacation pay for relaxation.",
|
||||
icon: "vacation"
|
||||
},
|
||||
{
|
||||
id: "clothes",
|
||||
title: "Premium Workwear",
|
||||
description: "High-quality Engelbert Strauss work clothing is fully provided.",
|
||||
icon: "clothes"
|
||||
},
|
||||
{
|
||||
id: "card",
|
||||
title: "Additional Payments",
|
||||
description: "Monthly bonuses via a personal MasterCard.",
|
||||
icon: "card"
|
||||
},
|
||||
{
|
||||
id: "retirement",
|
||||
title: "Pension Scheme",
|
||||
description: "Attractive contribution to the company pension scheme.",
|
||||
icon: "retirement"
|
||||
},
|
||||
{
|
||||
id: "education",
|
||||
title: "Further Training",
|
||||
description: "Individual development and promotion opportunities within the company.",
|
||||
icon: "education"
|
||||
},
|
||||
{
|
||||
id: "car",
|
||||
title: "Company Vehicle",
|
||||
description: "Provision of a vehicle for operational use and trips to the construction site.",
|
||||
icon: "car"
|
||||
},
|
||||
{
|
||||
id: "team",
|
||||
title: "Intensive Onboarding",
|
||||
description: "Professional onboarding in a helpful and committed team.",
|
||||
icon: "team"
|
||||
},
|
||||
{
|
||||
id: "family",
|
||||
title: "Family Atmosphere",
|
||||
description: "Strong cohesion through regular company-organized events.",
|
||||
icon: "family"
|
||||
}
|
||||
]}
|
||||
/>
|
||||
|
||||
<CallToAction
|
||||
title="Speculative Application (m/f/d)"
|
||||
|
||||
@@ -6,12 +6,54 @@ layout: "fullBleed"
|
||||
---
|
||||
|
||||
<HomeHero
|
||||
badge="Competencies"
|
||||
title="Everything from a\nsingle source"
|
||||
description="From the first planning sketch to the final documentation – we are your reliable partner for complex infrastructure projects."
|
||||
badge="Our Services"
|
||||
title="Everything from a single source"
|
||||
description="As a full-service partner in the field of cable civil engineering, we cover the entire spectrum of modern infrastructure projects."
|
||||
videoUrl="/assets/videos/web/hero-bohrung.mp4"
|
||||
linkText="Get in Touch"
|
||||
linkHref="/en/kontakt"
|
||||
secondaryCtaLabel="View References"
|
||||
secondaryCtaHref="/en/#referenzen"
|
||||
/>
|
||||
|
||||
<HomeCompetenceBentoGrid
|
||||
badge="Core Competencies"
|
||||
title="Precision & Performance"
|
||||
ctaLabel="Request a project"
|
||||
ctaHref="/en/kontakt"
|
||||
items={[
|
||||
{
|
||||
title: "Cable Construction",
|
||||
description: "Classic trench construction and professional laying of medium and low voltage cables.",
|
||||
tag: "Energy",
|
||||
size: "large",
|
||||
href: "/en/kabeltiefbau",
|
||||
image: { url: "/assets/photos/DSC01123.JPG", alt: "Cable Construction" }
|
||||
},
|
||||
{
|
||||
title: "Drilling Technology",
|
||||
description: "Horizontal directional drilling (HDD) for trenchless, surface-friendly installation.",
|
||||
tag: "Innovation",
|
||||
size: "medium",
|
||||
href: "/en/bohrtechnik",
|
||||
image: { url: "/assets/photos/DSC08653.JPG", alt: "Drilling Technology" }
|
||||
},
|
||||
{
|
||||
title: "Fiber Optics",
|
||||
description: "Expansion of future-proof broadband networks (FTTX).",
|
||||
tag: "Communication",
|
||||
size: "small",
|
||||
href: "/en/glasfaser",
|
||||
image: { url: "/assets/photos/DSC01129.JPG", alt: "Fiber Optics" }
|
||||
},
|
||||
{
|
||||
title: "Planning & Docu",
|
||||
description: "Route planning, approval procedures, and precise GIS documentation.",
|
||||
tag: "Digital",
|
||||
size: "accent",
|
||||
href: "/en/planung"
|
||||
}
|
||||
]}
|
||||
/>
|
||||
|
||||
<ServiceDetailGrid
|
||||
@@ -19,50 +61,53 @@ layout: "fullBleed"
|
||||
title="No compromises in construction"
|
||||
problemStatement={{
|
||||
title: "The reality on many construction sites",
|
||||
text: "Everywhere you look, digging and drilling are happening, but unfortunately, many things go wrong. Safety standards and documentation requirements are often ignored. This results in accidents, damaged external lines, and expensive construction delays."
|
||||
text: "Cheap providers are increasingly being used on many construction sites. Safety standards and documentation requirements are often ignored. This results in accidents, damaged external lines (electricity, water, gas, etc.), and expensive construction delays, meaning a supposed bargain turns out to be a cost trap."
|
||||
}}
|
||||
solutionStatement={{
|
||||
title: "The E-TIB Standard",
|
||||
text: "We work differently. Through our many years of experience, we identify problems early and develop safe solutions. Supported by our partner engineering firm, we offer planning, execution, and documentation at the highest level."
|
||||
text: "Through our many years of experience, we identify problems early and develop safe solutions. Supported by our partner engineering firm, we offer planning, execution, and documentation at the highest level to avoid planning errors."
|
||||
}}
|
||||
panels={[
|
||||
{
|
||||
id: "energy",
|
||||
title: "Energy & High Voltage",
|
||||
title: "Cable Civil Engineering (Medium/Low Voltage)",
|
||||
icon: "energy",
|
||||
lists: [
|
||||
[
|
||||
"Cable and pipe trenches",
|
||||
"Production of cable and pipe trenches",
|
||||
"Cable laying (0.4kV - 110kV)",
|
||||
"Cable assembly (0.4kV - 30kV)",
|
||||
"Cable assembly 0.4 kV - 30 kV",
|
||||
"Construction of transformer stations",
|
||||
"Grounding systems & street lighting"
|
||||
"Establishment of grounding systems",
|
||||
"Erection of street lighting",
|
||||
"Switching operations"
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
id: "fiber",
|
||||
title: "Fiber Optics & Telecom",
|
||||
title: "Cable Civil Engineering (Telecommunications)",
|
||||
icon: "fiber",
|
||||
lists: [
|
||||
[
|
||||
"Production of cable and pipe trenches",
|
||||
"Production of empty conduit routes",
|
||||
"Pulling/blowing in fiber optic cables",
|
||||
"Pulling/blowing in TK/FO cables",
|
||||
"Setting up multi-function enclosures",
|
||||
"Fiber optic cable assembly"
|
||||
"Cable assembly TK/FO"
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
id: "hdd",
|
||||
title: "Trenchless Laying",
|
||||
title: "Trenchless Line Laying",
|
||||
icon: "hdd",
|
||||
lists: [
|
||||
[
|
||||
"Horizontal directional drilling (HDD)",
|
||||
"Max. drilling length: 250m",
|
||||
"Max. diameter: 400mm pipe",
|
||||
"Earth rocket (up to 15m / 160mm pipe)"
|
||||
"Horizontal directional drilling (up to 250m)",
|
||||
"Horizontal directional drilling (up to 400mm pipe)",
|
||||
"Earth rocket (up to 15m crossing length)",
|
||||
"Earth rocket (up to 160mm pipe)"
|
||||
]
|
||||
]
|
||||
},
|
||||
@@ -72,10 +117,10 @@ layout: "fullBleed"
|
||||
icon: "planning",
|
||||
lists: [
|
||||
[
|
||||
"Structural & execution planning",
|
||||
"Tendering & construction supervision",
|
||||
"Structural/approval/execution planning",
|
||||
"Tendering, awarding & construction supervision",
|
||||
"Approval planning",
|
||||
"Feasibility studies & project review"
|
||||
"Project review, studies"
|
||||
]
|
||||
]
|
||||
},
|
||||
@@ -86,14 +131,38 @@ layout: "fullBleed"
|
||||
fullWidth: true,
|
||||
lists: [
|
||||
[
|
||||
"Staking out and surveying of cable routes",
|
||||
"Digital as-built documentation (GIS)"
|
||||
],
|
||||
[
|
||||
"360° photo/video recording of the construction site",
|
||||
"Creation of databases for project accounting"
|
||||
"Staking out and surveying of line routes",
|
||||
"Creation of databases for project accounting",
|
||||
"360° photo/video recording of the construction site"
|
||||
]
|
||||
]
|
||||
}
|
||||
]}
|
||||
/>
|
||||
|
||||
<JsonLd data={[
|
||||
{
|
||||
"@type": "Service",
|
||||
"name": "Cable Construction",
|
||||
"description": "Classic trench construction and professional laying of medium and low voltage cables.",
|
||||
"provider": { "@type": "Organization", "name": "E-TIB GmbH" }
|
||||
},
|
||||
{
|
||||
"@type": "Service",
|
||||
"name": "Horizontal Directional Drilling",
|
||||
"description": "Horizontal directional drilling (HDD) for trenchless, surface-friendly installation.",
|
||||
"provider": { "@type": "Organization", "name": "E-TIB GmbH" }
|
||||
},
|
||||
{
|
||||
"@type": "Service",
|
||||
"name": "Fiber Optic Expansion",
|
||||
"description": "Expansion of future-proof broadband networks (FTTX) and fiber optic cable assemblies.",
|
||||
"provider": { "@type": "Organization", "name": "E-TIB GmbH" }
|
||||
},
|
||||
{
|
||||
"@type": "Service",
|
||||
"name": "Planning and Surveying",
|
||||
"description": "Approval and execution planning, electrical and grid connection planning, as well as digital as-built documentation via GIS.",
|
||||
"provider": { "@type": "Organization", "name": "E-TIB GmbH" }
|
||||
}
|
||||
]} />
|
||||
|
||||
@@ -1,35 +1,29 @@
|
||||
---
|
||||
title: "Trade Fairs & Events"
|
||||
title: "Fairs & Events"
|
||||
date: "2024-03-20"
|
||||
excerpt: "Meet the E-TIB Group team in person at trade fairs and industry events."
|
||||
excerpt: "Meet the team of the E-TIB Group personally at trade fairs and industry events."
|
||||
layout: "fullBleed"
|
||||
---
|
||||
|
||||
<HomeHero
|
||||
badge="Events"
|
||||
title="Meet us\nin person"
|
||||
description="Get in touch with our experts. We are represented at the most important industry trade fairs and look forward to speaking with you personally."
|
||||
videoUrl="/assets/videos/web/hero-messe.mp4"
|
||||
linkText="View dates"
|
||||
linkHref="#dates"
|
||||
badge="Fairs & Events"
|
||||
title="Meet us personally"
|
||||
description="Get to know the E-TIB Group at the leading industry trade fairs."
|
||||
videoUrl="/assets/videos/web/hero-bahnkreuzung.mp4"
|
||||
linkText="Get in Touch"
|
||||
linkHref="/en/kontakt"
|
||||
/>
|
||||
|
||||
<div id="dates">
|
||||
<div id="termine">
|
||||
<JobListingBlock
|
||||
showFairs={true}
|
||||
showJobs={false}
|
||||
fairsTitle="Upcoming Trade Fairs 2026"
|
||||
showJobs={false}
|
||||
fairs={[
|
||||
{ name: 'Intersolar Munich', date: 'June 19 - 21, 2026', type: 'Energy Fair' },
|
||||
{ name: 'Wind Energy Days Linstow', date: 'Nov 04 - 06, 2026', type: 'Specialist Congress' },
|
||||
{ name: 'Cable Workshop Wiesbaden', date: 'Dec 02 - 03, 2026', type: 'Trade Fair' }
|
||||
{ name: 'Intersolar Munich', date: '2024 / 2025', type: 'Fair', location: 'Munich' },
|
||||
{ name: 'Wind Energy Days Linstow', date: '2024 / 2025', type: 'Specialist Congress', location: 'Linstow' },
|
||||
{ name: 'Cable Workshop Wiesbaden', date: '2024 / 2025', type: 'Trade Fair', location: 'Wiesbaden' }
|
||||
]}
|
||||
/>
|
||||
</div>
|
||||
|
||||
<CallToAction
|
||||
title="Ready for Your Project?"
|
||||
description="We are always looking for new challenges and strong partners. Contact us for a non-binding consultation on your project."
|
||||
ctaLabel="Contact Us Now"
|
||||
ctaHref="/en/kontakt"
|
||||
/>
|
||||
<CallToAction />
|
||||
|
||||
62
content/en/planung.mdx
Normal file
@@ -0,0 +1,62 @@
|
||||
---
|
||||
title: "Planning and Consulting"
|
||||
date: "2024-03-20"
|
||||
excerpt: "Professional planning and consulting in the field of energy and telecommunications networks: route planning, approval procedures, and project review."
|
||||
layout: "fullBleed"
|
||||
---
|
||||
|
||||
<HeroSection
|
||||
badge="Core Competency"
|
||||
title="Planning & Consulting"
|
||||
subtitle="Competent support for energy and telecommunications networks"
|
||||
backgroundImage={{ url: '/assets/photos/DJI_0048.JPG' }}
|
||||
alignment="center"
|
||||
ctaLabel="Request a project"
|
||||
ctaHref="/en/kontakt"
|
||||
/>
|
||||
|
||||
<ServiceDetailGrid
|
||||
badge="Engineering Services"
|
||||
title="Foundation for Success"
|
||||
descriptionParagraphs={[
|
||||
"Solid planning is the foundation of every successful construction project. Avoid expensive planning errors and benefit from our comprehensive expertise.",
|
||||
"Our partner engineering firm **E-TIB Ingenieurgesellschaft mbH** supports us in the smooth implementation of complex network expansion projects."
|
||||
]}
|
||||
panels={[
|
||||
{
|
||||
id: "planung",
|
||||
title: "Planning",
|
||||
icon: "planning",
|
||||
fullWidth: false,
|
||||
lists: [
|
||||
[
|
||||
"Structural planning",
|
||||
"Approval planning",
|
||||
"Execution planning",
|
||||
"Consent planning"
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
id: "beratung",
|
||||
title: "Consulting & Management",
|
||||
icon: "planning",
|
||||
fullWidth: false,
|
||||
lists: [
|
||||
[
|
||||
"Tendering & awarding",
|
||||
"Construction supervision",
|
||||
"Project review",
|
||||
"Feasibility studies"
|
||||
]
|
||||
]
|
||||
}
|
||||
]}
|
||||
/>
|
||||
|
||||
<CallToAction
|
||||
title="Do you need planning security?"
|
||||
text="Let's talk about your project. We are at your side with help and advice."
|
||||
buttonText="Contact us"
|
||||
buttonLink="/en/kontakt"
|
||||
/>
|
||||
@@ -1,12 +1,14 @@
|
||||
---
|
||||
title: "Breitbandausbau FTTH, Landkreis Börde"
|
||||
title: "Broadband Expansion FTTH, Börde District"
|
||||
client: "EKN Breitband GmbH & Co. KG"
|
||||
date: "2026-01-01"
|
||||
dateString: "seit 05/2019"
|
||||
location: "Landkreis Börde"
|
||||
date: "2019-05-01"
|
||||
dateString: "Since 05/2019"
|
||||
location: "Börde District"
|
||||
featuredImage: "/assets/photos/etib_ingenieure_tiefbau_solar_pv_planung_vermessung_gis-294.jpg"
|
||||
---
|
||||
|
||||
- 109.000 m Leitungstrasse herstellen (Tiefbau/HDD)
|
||||
- 63 Stück Aufstellung Netzverteiler
|
||||
- 747 Stück Herstellung Hausanschlüsse
|
||||
- 109,000 m production of cable route (civil engineering/HDD)
|
||||
- 63 units installation of network distributors
|
||||
- 747 units production of house connections
|
||||
- Coordination and realization of the entire route guidance
|
||||
- Documentation and acceptance of the house connections
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
---
|
||||
title: "Breitbandausbau FTTH, Planungsregion Bomlitz"
|
||||
client: "Telekom Deutschland GmbH"
|
||||
date: "2018-12-31"
|
||||
dateString: "04/2018 bis 12/2018"
|
||||
location: "Bomlitz"
|
||||
featuredImage: "/assets/photos/Etib_E-tib_Tiefbau_Guben_Netzanbindung_Energie-100.jpg"
|
||||
title: "Broadband Expansion FTTH, Bomlitz / Schwarmstedt"
|
||||
client: "inexio Informationstechnologie und Telekommunikation GmbH"
|
||||
date: "2018-08-01"
|
||||
dateString: "08/2018 to 03/2021"
|
||||
location: "29699 Bomlitz / 29690 Schwarmstedt"
|
||||
featuredImage: "/assets/photos/Etib_E-tib_Tiefbau_Guben_Netzanbindung_Energie-60.jpg"
|
||||
---
|
||||
|
||||
- 88.890 m Leitungstrasse herstellen (Tiefbau/HDD)
|
||||
- 23 Stück Aufstellung Multifunktionsgehäuse
|
||||
- 52 Stück Aufstellung Netzverteiler
|
||||
- 571 Stück Herstellung Hausanschlüsse
|
||||
- 88,890 m production of cable route (civil engineering/HDD)
|
||||
- 23 units installation of multi-functional cabinets
|
||||
- 52 units installation of network distributors
|
||||
- 571 units production of house connections
|
||||
|
||||
@@ -1,19 +1,19 @@
|
||||
---
|
||||
title: "Kabelverbindung U30 - T10, 15890 Eisenhüttenstadt"
|
||||
title: "Cable Connection U30 - T10, Eisenhüttenstadt"
|
||||
client: "ArcelorMittal Eisenhüttenstadt GmbH"
|
||||
date: "2019-12-31"
|
||||
dateString: "07/2019 bis 12/2019"
|
||||
location: "Eisenhüttenstadt"
|
||||
date: "2019-07-01"
|
||||
dateString: "07/2019 to 12/2019"
|
||||
location: "15890 Eisenhüttenstadt"
|
||||
featuredImage: "/assets/photos/Etib_E-tib_Tiefbau_Guben_Netzanbindung_Energie_Vermessung_(24_von_99)_groß2.jpg"
|
||||
---
|
||||
|
||||
- 2.095 m Kabelgraben ausheben und verfüllen
|
||||
- 180 m Horizontalspülbohrung d 160 + d 50
|
||||
- 5.700 m Lieferung und Verlegung MS-Kabel 240 mm², 18/30 kV
|
||||
- 3.000 m Lieferung und Verlegung PE-Schutzrohr 50 x 4,6 mm
|
||||
- 3.000 m Lieferung und Einblasen LWL-Kabel, 12 Fasern
|
||||
- 3.000 m Lieferung und Verlegung Steuerkabel, 0,6/1 kV
|
||||
- 16 Satz Lieferung und Montage MS-Verbindungsmuffe 240 mm², 18/30 kV
|
||||
- 1 Stück Lieferung und Montage LWL-Verbindungsmuffe, 12 Fasern
|
||||
- 4 Satz Lieferung und Montage MS-T-Stecker 240 mm², 18/30 kV
|
||||
- Hauptprüfung / Mantelprüfung / OTDR-Messung
|
||||
- 2,095 m cable trench excavation and backfilling
|
||||
- 180 m horizontal directional drilling d 160 + d 50
|
||||
- 5,700 m delivery and installation of MV cable 240 mm², 18/30 kV
|
||||
- 3,000 m delivery and installation of PE protection pipe 50 x 4.6 mm
|
||||
- 3,000 m delivery and blowing in of FO cable, 12 fibers
|
||||
- 3,000 m delivery and installation of control cable, 0.6/1 kV
|
||||
- 16 sets delivery and assembly of MV connection joint 240 mm², 18/30 kV
|
||||
- 1 unit delivery and assembly of FO connection joint, 12 fibers
|
||||
- 4 sets delivery and assembly of MV T-connectors 240 mm², 18/30 kV
|
||||
- Main testing / sheath testing / OTDR measurement
|
||||
|
||||
@@ -1,16 +1,16 @@
|
||||
---
|
||||
title: "Neubau Kabeltrasse, 03149 Forst"
|
||||
title: "New Cable Route, Forst"
|
||||
client: "Mitteldeutsche Netzgesellschaft Strom mbH"
|
||||
date: "2020-09-30"
|
||||
dateString: "03/2020 bis 09/2020"
|
||||
location: "Forst"
|
||||
date: "2020-03-01"
|
||||
dateString: "03/2020 to 09/2020"
|
||||
location: "03149 Forst"
|
||||
featuredImage: "/assets/photos/DSC02156.jpg"
|
||||
---
|
||||
|
||||
- 2984 m Kabelgraben ausheben und verfüllen
|
||||
- 945 m Horizontalspülbohrung d 160 + d 50
|
||||
- 3.929 m Verlegung MS-Kabel 240 mm², 12/20 kV
|
||||
- 3.929 m Verlegung PE-Schutzrohr 50 x 4,6 mm
|
||||
- 11 Satz Montage MS-Verbindungsmuffe 240 mm², 12/20 kV
|
||||
- 1 Satz Montage MS-Endverschluss 240 mm², 12/20 kV
|
||||
- 2.000 m Rückbau Freileitung (inkl. 16 Stück Maste)
|
||||
- 2,984 m cable trench excavation and backfilling
|
||||
- 945 m horizontal directional drilling d 160 + d 50
|
||||
- 3,929 m installation of MV cable 240 mm², 12/20 kV
|
||||
- 3,929 m installation of PE protection pipe 50 x 4.6 mm
|
||||
- 11 sets assembly of MV connection joint 240 mm², 12/20 kV
|
||||
- 1 set assembly of MV end termination 240 mm², 12/20 kV
|
||||
- 2,000 m dismantling of overhead line (incl. 16 poles)
|
||||
|
||||
@@ -1,19 +1,19 @@
|
||||
---
|
||||
title: "Einspeisung PV-Anlage 14728 Görne"
|
||||
title: "PV System Feed-in, Görne"
|
||||
client: "EVH GmbH"
|
||||
date: "2020-07-31"
|
||||
dateString: "05/2020 bis 07/2020"
|
||||
location: "Görne"
|
||||
date: "2020-05-01"
|
||||
dateString: "05/2020 to 07/2020"
|
||||
location: "14728 Görne"
|
||||
featuredImage: "/assets/photos/DSC08744.JPG"
|
||||
---
|
||||
|
||||
- 4.215 m Kabelgraben ausheben und verfüllen
|
||||
- 1.285 m Horizontalspülbohrung d 140 + d 50
|
||||
- 5.500 m Verlegung MS-Kabel 300 mm², 12/20 kV
|
||||
- 4.500 m Verlegung MS-Kabel 300 mm², 12/20 kV mittels Kabelpflug
|
||||
- 10.000 m Verlegung PE-Schutzrohr 50 x 4,6 mm
|
||||
- 10.000 m Einblasen LWL-Kabel, 12 Fasern
|
||||
- 3 Stück Lieferung und Montage LWL-Verbindungsmuffe, 12 Fasern
|
||||
- 16 Satz Montage MS-Verbindungsmuffe 300 mm², 12/20 kV
|
||||
- 4 Satz Montage MS-T-Stecker 300 mm², 12/20 kV
|
||||
- Mantelprüfung, VLF-Prüfung, OTDR-Messung
|
||||
- 4,215 m cable trench excavation and backfilling
|
||||
- 1,285 m horizontal directional drilling d 140 + d 50
|
||||
- 5,500 m installation of MV cable 300 mm², 12/20 kV
|
||||
- 4,500 m installation of MV cable 300 mm², 12/20 kV by cable plow
|
||||
- 10,000 m installation of PE protection pipe 50 x 4.6 mm
|
||||
- 10,000 m blowing in of FO cable, 12 fibers
|
||||
- 3 units delivery and assembly of FO connection joint, 12 fibers
|
||||
- 16 sets assembly of MV connection joint 300 mm², 12/20 kV
|
||||
- 4 sets assembly of MV T-connectors 300 mm², 12/20 kV
|
||||
- Sheath testing, VLF testing, OTDR measurement
|
||||
|
||||
@@ -1,19 +1,17 @@
|
||||
---
|
||||
title: "Breitbandausbau FTTC, Planungsregion Spreewald"
|
||||
title: "Broadband Expansion FTTC, Spreewald Planning Region"
|
||||
client: "Telekom Deutschland GmbH"
|
||||
date: "2018-01-31"
|
||||
dateString: "09/2017 bis 01/2018"
|
||||
location: "Spreewald"
|
||||
date: "2017-09-01"
|
||||
dateString: "09/2017 to 01/2018"
|
||||
location: "Spreewald Planning Region"
|
||||
featuredImage: "/assets/photos/DSC01129.JPG"
|
||||
---
|
||||
|
||||
- 4.006 m Kabelgraben ausheben und verfüllen
|
||||
- 4.006 m Verlegung PE-Schutzrohr 50 x 4,6 mm
|
||||
- 13.008 m Horizontalspülbohrung D 50
|
||||
- 94.951 m Einblasen von Kabel/Rohren unbelegt
|
||||
- 42 Stück Stellen von Multifunktionsgehäusen
|
||||
- Aufbau von Energieanschlusssäulen
|
||||
- Aufbau elektrischer Anlagen 230V
|
||||
- Koordination mit Energieversorgungsunternehmen
|
||||
- Inbetriebnahme der elektrischen Anlagen
|
||||
- Oberflächen- und Tiefbauarbeiten für Multifunktionsgehäuse
|
||||
- 4,006 m cable trench excavation and backfilling
|
||||
- 4,006 m installation of PE protection pipe 50 x 4.6 mm
|
||||
- 13,008 m horizontal directional drilling D 50
|
||||
- 94,951 m blowing in of cables/pipes (unoccupied)
|
||||
- 42 units installation of multi-functional cabinets
|
||||
- Setup of energy connection pillars and electrical systems 230V
|
||||
- Coordination with utility companies and commissioning of the electrical systems
|
||||
- Surface and civil engineering work for multi-function enclosures
|
||||
|
||||
90
content/en/team.mdx
Normal file
@@ -0,0 +1,90 @@
|
||||
---
|
||||
title: "Our Team"
|
||||
date: "2024-03-20"
|
||||
excerpt: "Meet the experts of the E-TIB Group."
|
||||
layout: "fullBleed"
|
||||
---
|
||||
|
||||
<HeroSection
|
||||
badge="Company"
|
||||
title="Our Team"
|
||||
subtitle="The Experts behind the E-TIB Group"
|
||||
backgroundImage={{ url: '/assets/photos/DJI_0048.JPG' }}
|
||||
alignment="center"
|
||||
/>
|
||||
|
||||
<TeamGrid
|
||||
members={[
|
||||
{
|
||||
id: "danny-joseph",
|
||||
name: "Danny Joseph",
|
||||
position: "Management",
|
||||
email: "d.joseph@e-tib.com",
|
||||
phone: "+49 1520 7230518",
|
||||
image: "/assets/photos/team/danny.jpg"
|
||||
},
|
||||
{
|
||||
id: "dirk-schmidt",
|
||||
name: "Dirk Schmidt",
|
||||
position: "Project Management",
|
||||
email: "d.schmidt@e-tib.com",
|
||||
phone: "+49 151 65069040",
|
||||
image: "/assets/photos/team/dirk.jpg"
|
||||
},
|
||||
{
|
||||
id: "oliver-fiedler",
|
||||
name: "Oliver Fiedler",
|
||||
position: "Site Management",
|
||||
email: "o.fiedler@e-tib.com",
|
||||
phone: "+49 151 52264087",
|
||||
image: "/assets/photos/team/oliver.jpg"
|
||||
},
|
||||
{
|
||||
id: "martin-polan",
|
||||
name: "Martin Polan",
|
||||
position: "Foreman",
|
||||
email: "m.polan@e-tib.com",
|
||||
phone: "+49 171 3868167",
|
||||
image: "/assets/photos/team/martin.jpg"
|
||||
},
|
||||
{
|
||||
id: "kerstin-joseph",
|
||||
name: "Kerstin Joseph",
|
||||
position: "Secretariat / Accounting",
|
||||
email: "k.joseph@e-tib.com",
|
||||
phone: "+49 3561 6851692",
|
||||
image: "/assets/photos/team/kerstin.jpg"
|
||||
},
|
||||
{
|
||||
id: "kathrin-lemanski",
|
||||
name: "Kathrin Lemanski",
|
||||
position: "Administration",
|
||||
email: "k.lemanski@e-tib.com",
|
||||
phone: "+49 3561 6857733",
|
||||
image: "/assets/photos/team/kathrin.jpg"
|
||||
},
|
||||
{
|
||||
id: "sven-kirbs",
|
||||
name: "Sven Kirbs",
|
||||
position: "Surveying / Documentation",
|
||||
email: "s.kirbs@e-tib.com",
|
||||
phone: "+49 151 29603652",
|
||||
image: "/assets/photos/team/sven.jpg"
|
||||
},
|
||||
{
|
||||
id: "maik-weichert",
|
||||
name: "Maik Weichert",
|
||||
position: "Fleet / Workshop / Warehouse",
|
||||
email: "m.weichert@e-tib.com",
|
||||
phone: "+49 171 9282872",
|
||||
image: "/assets/photos/team/maik.jpg"
|
||||
}
|
||||
]}
|
||||
/>
|
||||
|
||||
<CallToAction
|
||||
title="Become part of our team"
|
||||
text="We are always looking for motivated talents for exciting infrastructure projects."
|
||||
buttonText="View open positions"
|
||||
buttonLink="/en/karriere"
|
||||
/>
|
||||
@@ -7,7 +7,7 @@ layout: "fullBleed"
|
||||
|
||||
<HomeHero
|
||||
badge="The E-TIB Group"
|
||||
title="Reliability has\na Tradition"
|
||||
title="Reliability has a Tradition"
|
||||
description="Since 2015, we have been growing continuously to meet the demands of the energy transition and digitalization. As a corporate group, we pool specialized expertise under one roof."
|
||||
videoUrl="/assets/videos/web/hero-bahnkreuzung.mp4"
|
||||
linkText="Open Positions"
|
||||
@@ -95,66 +95,6 @@ layout: "fullBleed"
|
||||
{ value: '100', suffix: '%', label: 'Nationwide Reach' },
|
||||
{ value: '2', suffix: '+', label: 'Operating Locations' }
|
||||
]}
|
||||
locations={[
|
||||
{
|
||||
id: 'guben',
|
||||
name: 'Guben (Headquarters)',
|
||||
type: 'hq',
|
||||
x: 85,
|
||||
y: 48,
|
||||
description: 'E-TIB GmbH Holding & Bohrtechnik GmbH',
|
||||
details: ['Central Management', 'Cable Civil Engineering', 'Machinery Park']
|
||||
},
|
||||
{
|
||||
id: 'buelstedt',
|
||||
name: 'Bülstedt (Engineering Firm)',
|
||||
type: 'branch',
|
||||
x: 37,
|
||||
y: 25,
|
||||
description: 'E-TIB Ingenieurgesellschaft mbH',
|
||||
details: ['Planning & Projecting', 'Surveying', 'Documentation']
|
||||
},
|
||||
{
|
||||
id: 'spreewald',
|
||||
name: 'Spreewald (Project)',
|
||||
type: 'project',
|
||||
x: 82,
|
||||
y: 45,
|
||||
description: 'Broadband Expansion FTTC'
|
||||
},
|
||||
{
|
||||
id: 'bomlitz',
|
||||
name: 'Bomlitz (Project)',
|
||||
type: 'project',
|
||||
x: 45,
|
||||
y: 30,
|
||||
description: 'Broadband Expansion FTTH'
|
||||
},
|
||||
{
|
||||
id: 'forst',
|
||||
name: 'Forst (Project)',
|
||||
type: 'project',
|
||||
x: 88,
|
||||
y: 50,
|
||||
description: 'New Cable Route Construction'
|
||||
},
|
||||
{
|
||||
id: 'eisenhuettenstadt',
|
||||
name: 'Eisenhüttenstadt (Project)',
|
||||
type: 'project',
|
||||
x: 85,
|
||||
y: 40,
|
||||
description: 'Cable Connection U30 - T10'
|
||||
},
|
||||
{
|
||||
id: 'goerne',
|
||||
name: 'Görne (Project)',
|
||||
type: 'project',
|
||||
x: 70,
|
||||
y: 35,
|
||||
description: 'PV System Feed-in'
|
||||
}
|
||||
]}
|
||||
/>
|
||||
|
||||
<div id="structure">
|
||||
|
||||
60
content/en/vermessung.mdx
Normal file
@@ -0,0 +1,60 @@
|
||||
---
|
||||
title: "Surveying and Documentation"
|
||||
date: "2024-03-20"
|
||||
excerpt: "Precise surveying, staking out, and digital documentation of line routes to ensure the highest safety and quality standards."
|
||||
layout: "fullBleed"
|
||||
---
|
||||
|
||||
<HeroSection
|
||||
badge="Core Competency"
|
||||
title="Surveying & Documentation"
|
||||
subtitle="Seamless and legally compliant recording of all construction phases"
|
||||
backgroundImage={{ url: '/assets/photos/DSC08653.JPG' }}
|
||||
alignment="center"
|
||||
ctaLabel="Request a project"
|
||||
ctaHref="/en/kontakt"
|
||||
/>
|
||||
|
||||
<ServiceDetailGrid
|
||||
badge="Precision"
|
||||
title="Highest Safety Standards"
|
||||
descriptionParagraphs={[
|
||||
"Increasing documentation requirements and strict safety standards demand **the highest precision on the construction site**.",
|
||||
"With state-of-the-art technology, we ensure seamless and legally compliant recording of all lines. This is the best protection against unpleasant surprises during construction acceptance."
|
||||
]}
|
||||
panels={[
|
||||
{
|
||||
id: "vermessung",
|
||||
title: "Geodesy",
|
||||
icon: "survey",
|
||||
fullWidth: false,
|
||||
lists: [
|
||||
[
|
||||
"Staking out of line routes",
|
||||
"Surveying of line routes",
|
||||
"GPS-supported terrain recording"
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
id: "dokumentation",
|
||||
title: "Digital Documentation",
|
||||
icon: "survey",
|
||||
fullWidth: false,
|
||||
lists: [
|
||||
[
|
||||
"Creation of databases for project accounting",
|
||||
"360° photo/video recording of the construction site",
|
||||
"Integration into geographic information systems (GIS)"
|
||||
]
|
||||
]
|
||||
}
|
||||
]}
|
||||
/>
|
||||
|
||||
<CallToAction
|
||||
title="Are you facing high documentation requirements?"
|
||||
text="Contact us for professional surveying and documentation services."
|
||||
buttonText="Contact us"
|
||||
buttonLink="/en/kontakt"
|
||||
/>
|
||||
64
content/en/zertifikate.mdx
Normal file
@@ -0,0 +1,64 @@
|
||||
---
|
||||
title: "Certificates & Credentials"
|
||||
date: "2024-03-20"
|
||||
excerpt: "Certified quality, occupational safety, and environmental protection are the foundation of our daily work."
|
||||
layout: "fullBleed"
|
||||
---
|
||||
|
||||
<HeroSection
|
||||
badge="The E-TIB Group"
|
||||
title="Certificates & Credentials"
|
||||
subtitle="Certified quality, occupational safety, and environmental protection are the foundation of our daily work."
|
||||
backgroundImage={{ url: "/assets/photos/DSC08653.JPG" }}
|
||||
/>
|
||||
|
||||
<CertificatesBlock
|
||||
hideHeader={true}
|
||||
badge="Certifications & Credentials"
|
||||
title="Certified Quality and Safety"
|
||||
description="Transparency and the highest standards are the foundation of our work. Here you can find our current certificates available for download."
|
||||
certificates={[
|
||||
{
|
||||
title: 'ISO 14001:2015',
|
||||
description: 'Environmental Management System',
|
||||
pdfUrl: '/assets/certificates/231214_Zertifikat ISO 14001 Umweltmanagement.pdf',
|
||||
type: 'iso',
|
||||
date: '14.12.2023',
|
||||
},
|
||||
{
|
||||
title: 'ISO 9001:2015',
|
||||
description: 'Quality Management System',
|
||||
pdfUrl: '/assets/certificates/231214_Zertifikat ISO 9001 Qualitätsmanagement.pdf',
|
||||
type: 'iso',
|
||||
date: '14.12.2023',
|
||||
},
|
||||
{
|
||||
title: 'DIN EN ISO 45001:2018',
|
||||
description: 'Occupational Health and Safety',
|
||||
pdfUrl: '/assets/certificates/Zertifizierung DIN EN ISO 45001 bis 05122028.pdf',
|
||||
type: 'iso',
|
||||
date: '05.12.2025',
|
||||
},
|
||||
{
|
||||
title: 'Exemption Certificate',
|
||||
description: 'According to § 48 b EStG',
|
||||
pdfUrl: '/assets/certificates/240209_Freistellungsbescheinigung § 48 b.pdf',
|
||||
type: 'tax',
|
||||
date: '09.02.2024',
|
||||
},
|
||||
{
|
||||
title: 'Proof § 13b UStG',
|
||||
description: 'Tax liability of the service recipient',
|
||||
pdfUrl: '/assets/certificates/240209_Nachweis § 13 b.pdf',
|
||||
type: 'tax',
|
||||
date: '09.02.2024',
|
||||
},
|
||||
{
|
||||
title: 'Certificate in Tax Matters',
|
||||
description: 'Tax Office Certificate',
|
||||
pdfUrl: '/assets/certificates/250213_Bescheinigung in Steuersachen.pdf',
|
||||
type: 'tax',
|
||||
date: '13.02.2025',
|
||||
}
|
||||
]}
|
||||
/>
|
||||
@@ -1,19 +1,20 @@
|
||||
Betreff: Testserver steht bereit – E-TIB Website v1 🚀
|
||||
Betreff: Testserver steht bereit – Entwurf der neuen E-TIB Website
|
||||
|
||||
Hi Danny,
|
||||
|
||||
kurzes Update von meiner Seite: Der Testserver mit dem ersten Entwurf der neuen Website steht bereit! Schau dir das Ganze gerne in Ruhe an: https://test.e-tib.com (Passwort: lassmichrein)
|
||||
kurzes Update von meiner Seite: Der Testserver mit dem ersten Entwurf der neuen Website ist online. Schau dir das Ganze gerne in Ruhe an: https://test.e-tib.com (Passwort: lassmichrein)
|
||||
|
||||
Ich habe den Content komplett auf Basis eures aktuellen Briefings glattgezogen. Das bedeutet konkret:
|
||||
- Die alte "NEMO GmbH" Struktur ist restlos raus.
|
||||
- Eure aktuelle Aufstellung (E-TIB GmbH als Holding, dazu E-TIB Verwaltung GmbH und Bohrtechnik GmbH) ist jetzt korrekt abgebildet.
|
||||
- Die Timeline und Gründungsdaten (inklusive 2024 Holding) sind auf dem neuesten Stand.
|
||||
- Das Leistungsportfolio habe ich exakt auf eure 10 Kernkompetenzen (Kabelpflug, Horizontalspülbohren, komplexe Querungen etc.) fokussiert.
|
||||
- Impressum und Messe-Daten (Intersolar, Windenergietage, Kabelwerkstatt) sind ebenfalls aktualisiert.
|
||||
Mein Ziel beim Design war es, eure Arbeit so direkt und professionell wie möglich in den Fokus zu rücken. Ich habe mich deshalb ganz bewusst für eine reduzierte Gestaltung entschieden, bei der das Bild- und Videomaterial im Vordergrund steht.
|
||||
|
||||
Zum Design noch ein paar Worte: Ich habe mich wie besprochen an einem minimalistischen, aber sehr hochwertigen Look orientiert. Die Seite ist bewusst extrem aufgeräumt und strukturiert (z.B. durch die übersichtliche Kachel-Optik für eure Kompetenzen), damit Besucher sofort verstehen, was ihr anbietet – egal ob sie am großen PC sitzen oder auf dem Handy scrollen. Auch das Video auf der Startseite habe ich als starken visuellen Aufhänger eingebaut, genau wie du es dir als Referenz gewünscht hast.
|
||||
Wichtig als Randnotiz: Der aktuelle Stand ist technisch gesehen noch "Work in Progress". Ich bin gerade noch dabei, die letzten Optimierungen für Performance, SEO und mobile Responsivität vorzunehmen, damit am Ende alles perfekt flutscht.
|
||||
Das ist jetzt der erste Schuss – und ab hier ist dein Feedback extrem wichtig für die nächsten Schritte. Bitte schau dir die Seite im Detail an und achte besonders auf folgende Punkte:
|
||||
|
||||
Da eine gute Website meiner Meinung nach absolut selbsterklärend sein muss, gebe ich sie euch jetzt einfach mal direkt zum selbst Durchklicken. Sammelt gerne euer Feedback und gebt mir Bescheid, wo wir noch nachjustieren sollen. Wenn es euch lieber ist, können wir uns das Ganze natürlich auch gerne gemeinsam in einem Teams-Call durchgehen.
|
||||
- Design & Optik: Passt die generelle Richtung für euch? Seid ihr mit den Farben und dem aufgeräumten Stil happy?
|
||||
- Content: Fehlen noch wichtige Themen oder Leistungen? Ist inhaltlich irgendwas falsch dargestellt?
|
||||
- Übersetzungen: Schau bitte auch kurz über die englische Version, ob dir da fehlerhafte oder unpassende Übersetzungen auffallen.
|
||||
- Rechtstexte: Bitte prüft auch einmal Impressum und Datenschutz, ob das alles eurem aktuellen Stand entspricht.
|
||||
|
||||
Wichtig als Randnotiz: Das Ganze ist technisch noch ein "Work in Progress". Ich arbeite aktuell noch an der Feinabstimmung der Ladezeiten und der mobilen Darstellung.
|
||||
|
||||
Sammel einfach mal eure Punkte und lass mir dein Feedback zukommen. Wenn du möchtest, können wir das nächste Woche auch gerne kurz in einem Teams-Call besprechen.
|
||||
|
||||
Beste Grüße!
|
||||
|
||||
@@ -31,56 +31,56 @@ export const defaultLocations: Location[] = [
|
||||
},
|
||||
{
|
||||
id: 'spreewald',
|
||||
name: 'Spreewald (LWL-Trasse)',
|
||||
name: 'Spreewald (FTTC)',
|
||||
type: 'project',
|
||||
x: 81,
|
||||
y: 42,
|
||||
description: '28km LWL-Trasse inkl. Spülbohrung',
|
||||
description: 'Breitbandausbau FTTC',
|
||||
href: '/referenzen/spreewald',
|
||||
},
|
||||
{
|
||||
id: 'bomlitz',
|
||||
name: 'Bomlitz (110kV-Trasse)',
|
||||
name: 'Bomlitz (FTTH)',
|
||||
type: 'project',
|
||||
x: 43,
|
||||
y: 30,
|
||||
description: 'Neuverlegung einer 110kV Hochspannungstrasse',
|
||||
description: '88km Leitungstrasse (Tiefbau/HDD)',
|
||||
href: '/referenzen/bomlitz',
|
||||
},
|
||||
{
|
||||
id: 'forst',
|
||||
name: 'Forst (Verteilerknoten)',
|
||||
name: 'Forst (Kabeltrasse)',
|
||||
type: 'project',
|
||||
x: 87,
|
||||
y: 52,
|
||||
description: 'Ausbau lokaler Glasfasernetze',
|
||||
description: 'Neubau MS-Kabeltrasse',
|
||||
href: '/referenzen/forst',
|
||||
},
|
||||
{
|
||||
id: 'eisenhuettenstadt',
|
||||
name: 'Eisenhüttenstadt (Industriegebiet)',
|
||||
name: 'Eisenhüttenstadt (Kabel)',
|
||||
type: 'project',
|
||||
x: 86,
|
||||
y: 44,
|
||||
description: 'Erschließung Industriegebiet Nord',
|
||||
description: 'Kabelverbindung U30 - T10',
|
||||
href: '/referenzen/eisenhuettenstadt',
|
||||
},
|
||||
{
|
||||
id: 'goerne',
|
||||
name: 'Görne (Breitbandausbau)',
|
||||
name: 'Görne (PV-Anlage)',
|
||||
type: 'project',
|
||||
x: 65,
|
||||
y: 35,
|
||||
description: 'Glasfaser-Rückgrat für 3 Gemeinden',
|
||||
description: 'Einspeisung PV-Anlage (MS-Kabel)',
|
||||
href: '/referenzen/goerne',
|
||||
},
|
||||
{
|
||||
id: 'boerde',
|
||||
name: 'Börde (Windpark-Anschluss)',
|
||||
name: 'Börde (FTTH-Ausbau)',
|
||||
type: 'project',
|
||||
x: 55,
|
||||
y: 38,
|
||||
description: 'Kabeltrasse für erneuerbare Energien',
|
||||
description: '109km Leitungstrasse für Breitband',
|
||||
href: '/referenzen/boerde',
|
||||
}
|
||||
];
|
||||
|
||||
@@ -16,10 +16,10 @@
|
||||
},
|
||||
"Index": {
|
||||
"title": "E-TIB GmbH – Experten für Kabeltiefbau & Infrastruktur",
|
||||
"description": "Ihr Partner für Kabelbau, Horizontalspülbohrungen und Glasfaser-Montage in Guben und bundesweit.",
|
||||
"description": "Ihr Partner für Kabeltiefbau, Horizontalspülbohrungen und Glasfaser-Montage in Guben und bundesweit.",
|
||||
"meta": {
|
||||
"title": "E-TIB GmbH | Spezialist für Kabeltiefbau & Netzausbau",
|
||||
"description": "E-TIB GmbH aus Guben ist Ihr Experte für Kabelbau, Spülbohrungen, Pflugarbeiten und Elektromontage bis 110 kV. Zuverlässige Infrastruktur für die Energiewende."
|
||||
"description": "E-TIB GmbH aus Guben ist Ihr Experte für Kabeltiefbau, Spülbohrungen, Pflugarbeiten und Elektromontage bis 110 kV. Zuverlässige Infrastruktur für die Energiewende."
|
||||
}
|
||||
},
|
||||
"Navigation": {
|
||||
@@ -49,7 +49,7 @@
|
||||
"Team": {
|
||||
"meta": {
|
||||
"title": "Über uns | Die E-TIB Unternehmensgruppe",
|
||||
"description": "Lernen Sie die E-TIB Gruppe kennen: Spezialisten für Kabelbau, Bohrtechnik und Ingenieurdienstleistungen."
|
||||
"description": "Lernen Sie die E-TIB Gruppe kennen: Spezialisten für Kabeltiefbau, Bohrtechnik und Ingenieurdienstleistungen."
|
||||
},
|
||||
"hero": {
|
||||
"title": "Infrastruktur für die Zukunft",
|
||||
@@ -102,7 +102,7 @@
|
||||
"hours": {
|
||||
"title": "Öffnungszeiten",
|
||||
"weekdays": "Mo. – Fr.",
|
||||
"weekdaysTime": "08:00 – 17:00 Uhr",
|
||||
"weekdaysTime": "07:00 – 17:00 Uhr",
|
||||
"weekend": "Sa. – So.",
|
||||
"closed": "Geschlossen"
|
||||
},
|
||||
@@ -130,7 +130,7 @@
|
||||
"subtitle": "Umfassende Lösungen für den Ausbau moderner Energie- und Datennetze.",
|
||||
"badge": "Leistungsspektrum",
|
||||
"items": {
|
||||
"kabelbau": "Kabelbau",
|
||||
"kabelbau": "Kabeltiefbau",
|
||||
"pflugarbeiten": "Kabelpflugarbeiten",
|
||||
"bohrungen": "Horizontalspülbohrungen",
|
||||
"elektromontage": "Elektromontagen bis 110 kV",
|
||||
|
||||
@@ -15,11 +15,11 @@
|
||||
"categories": {}
|
||||
},
|
||||
"Index": {
|
||||
"title": "E-TIB GmbH – Experts in Cable Construction & Infrastructure",
|
||||
"description": "Your partner for cable construction, horizontal drilling, and fiber optic installation in Guben and nationwide.",
|
||||
"title": "E-TIB GmbH – Experts in Underground Cable Engineering & Infrastructure",
|
||||
"description": "Your partner for underground cable engineering, horizontal drilling, and fiber optic installation in Guben and nationwide.",
|
||||
"meta": {
|
||||
"title": "E-TIB GmbH | Specialist for Cable Construction & Grid Expansion",
|
||||
"description": "E-TIB GmbH from Guben is your expert for cable construction, directional drilling, plowing works, and electrical installation up to 110 kV."
|
||||
"title": "E-TIB GmbH | Specialist for Underground Cable Engineering & Grid Expansion",
|
||||
"description": "E-TIB GmbH from Guben is your expert for underground cable engineering, directional drilling, plowing works, and electrical installation up to 110 kV."
|
||||
}
|
||||
},
|
||||
"Navigation": {
|
||||
@@ -44,12 +44,12 @@
|
||||
"career": "Career",
|
||||
"contact": "Contact",
|
||||
"copyright": "Copyright © {year} E-TIB GmbH. All rights reserved.",
|
||||
"tagline": "Experts for cable construction and the execution of electrical infrastructure projects. Quality and reliability from Guben."
|
||||
"tagline": "Experts for underground cable engineering and the execution of electrical infrastructure projects. Quality and reliability from Guben."
|
||||
},
|
||||
"Team": {
|
||||
"meta": {
|
||||
"title": "About Us | The E-TIB Group",
|
||||
"description": "Get to know the E-TIB Group: Specialists for cable construction, drilling technology, and engineering services."
|
||||
"description": "Get to know the E-TIB Group: Specialists for underground cable engineering, drilling technology, and engineering services."
|
||||
},
|
||||
"hero": {
|
||||
"title": "Infrastructure for the Future",
|
||||
@@ -66,7 +66,7 @@
|
||||
"subtitle": "Specialized units for complex projects",
|
||||
"etib": {
|
||||
"title": "E‑TIB GmbH",
|
||||
"desc": "Execution of electrical infrastructure projects and cable construction."
|
||||
"desc": "Execution of electrical infrastructure projects and underground cable engineering."
|
||||
},
|
||||
"bohrtechnik": {
|
||||
"title": "E‑TIB Bohrtechnik GmbH",
|
||||
@@ -85,7 +85,7 @@
|
||||
"Contact": {
|
||||
"meta": {
|
||||
"title": "Contact | E-TIB GmbH Guben",
|
||||
"description": "Get in touch with E-TIB GmbH in Guben. Your partner for cable construction and grid infrastructure."
|
||||
"description": "Get in touch with E-TIB GmbH in Guben. Your partner for underground cable engineering and grid infrastructure."
|
||||
},
|
||||
"title": "Contact Us",
|
||||
"subtitle": "Do you have questions about our services or a specific project? We are here for you.",
|
||||
@@ -102,7 +102,7 @@
|
||||
"hours": {
|
||||
"title": "Opening Hours",
|
||||
"weekdays": "Mon. – Fri.",
|
||||
"weekdaysTime": "08:00 – 17:00",
|
||||
"weekdaysTime": "07:00 – 17:00",
|
||||
"weekend": "Sat. – Sun.",
|
||||
"closed": "Closed"
|
||||
},
|
||||
@@ -130,7 +130,7 @@
|
||||
"subtitle": "Comprehensive solutions for the expansion of modern energy and data networks.",
|
||||
"badge": "Service Spectrum",
|
||||
"items": {
|
||||
"kabelbau": "Cable Construction",
|
||||
"kabelbau": "Underground Cable Engineering",
|
||||
"pflugarbeiten": "Cable Plowing",
|
||||
"bohrungen": "Horizontal Directional Drilling",
|
||||
"elektromontage": "Electrical Installations up to 110 kV",
|
||||
@@ -144,7 +144,7 @@
|
||||
},
|
||||
"Home": {
|
||||
"hero": {
|
||||
"title": "THE EXPERTS FOR <green>CABLE CONSTRUCTION</green>",
|
||||
"title": "THE EXPERTS FOR <green>UNDERGROUND CABLE ENGINEERING</green>",
|
||||
"subtitle": "We help expanding the energy cable networks for a green future.",
|
||||
"cta": "Request now"
|
||||
},
|
||||
@@ -173,7 +173,7 @@
|
||||
"Blog": {
|
||||
"meta": {
|
||||
"title": "Blog & News",
|
||||
"description": "Latest news and insights from the world of cable construction and infrastructure."
|
||||
"description": "Latest news and insights from the world of underground cable engineering and infrastructure."
|
||||
},
|
||||
"featuredPost": "Featured Post",
|
||||
"readFullArticle": "Read Full Article",
|
||||
|
||||
@@ -465,6 +465,10 @@ const nextConfig = {
|
||||
async rewrites() {
|
||||
return {
|
||||
beforeFiles: [
|
||||
{
|
||||
source: '/:locale/stats/api/send',
|
||||
destination: '/stats/api/send',
|
||||
},
|
||||
{
|
||||
source: '/:locale/datasheets/:path*',
|
||||
destination: '/api/datasheets/:path*',
|
||||
|
||||
BIN
public/assets/photos/team/danny.jpg
Normal file
|
After Width: | Height: | Size: 117 KiB |
BIN
public/assets/photos/team/dirk.jpg
Normal file
|
After Width: | Height: | Size: 300 KiB |
BIN
public/assets/photos/team/kathrin.jpg
Normal file
|
After Width: | Height: | Size: 103 KiB |
BIN
public/assets/photos/team/kerstin.jpg
Normal file
|
After Width: | Height: | Size: 99 KiB |
BIN
public/assets/photos/team/maik.jpg
Normal file
|
After Width: | Height: | Size: 65 KiB |
BIN
public/assets/photos/team/martin.jpg
Normal file
|
After Width: | Height: | Size: 63 KiB |
BIN
public/assets/photos/team/oliver.jpg
Normal file
|
After Width: | Height: | Size: 75 KiB |
BIN
public/assets/photos/team/sven.jpg
Normal file
|
After Width: | Height: | Size: 650 KiB |
@@ -0,0 +1 @@
|
||||
@page{margin-left:2cm;margin-top:1cm;margin-bottom:1cm}.noprint{display:none}body{margin:0;padding:0!important;font-size:12pt;line-height:1.4;color:black!important;background-color:#fff;background:transparent;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;margin-left:2cm;margin-top:1cm;margin-bottom:1cm;max-width:21cm!important}body:before{content:none}h1{margin:0 0 30px 0;padding:0;font-size:32pt;font-weight:normal;line-height:normal;color:black;page-break-after:avoid;page-break-inside:avoid}h2{margin:0 0 10px 0;padding:0;font-size:26pt;font-weight:normal;line-height:normal;color:black;page-break-after:avoid;page-break-inside:avoid}h3,h4,h5,h6{margin:0 0 5px 0;padding:0;font-size:18pt;font-weight:normal;line-height:normal;color:black;page-break-after:avoid;page-break-inside:avoid}h1,h2,h3,h4,h5,h6{color:black;background:transparent}p{margin:0 0 10px 0;padding:0}ul,ol{margin:0 0 10px 25px;padding:0}ul li{margin:0;padding:0;list-style:square}ol li{margin:0;padding:0;list-style:decimal}table{margin:0 0 10px 0;padding:0}td{vertical-align:top}img{margin:0;padding:0;border-style:none}a{font-weight:normal!important;text-decoration:none!important;color:black}#top{margin:0;padding:0}#wrapper{width:auto!important;max-width:none;background-color:transparent;margin:0 auto;padding:0}.container{width:auto}#content{background:transparent}#header .topline #webname,#header .topline #slogan{color:black}#search{display:none}#sidebar{height:auto!important}#header{background-color:transparent}#header .topline{padding:0;padding-top:23px}#webdescription{visibility:visible!important}#nav,#nav.on{display:none}#slider{max-width:80%!important;margin:0 auto;background:transparent!important;color:black!important}#slider img{width:100%!important}#slider ul{transform:none!important;width:100%!important}#slider li{width:100%!important;margin:0!important;float:none!important;display:block!important}#slider li.clone{display:none!important}#slider h1,#slider h2,#slider h3,#slider h4,#slider h5,#slider h6,#slider p{color:black!important}#breadcrumb{display:none}.button{display:none}#content{color:black!important;margin:0;padding:0;line-height:20px}.zpContainer,.zpRow{margin:0!important;padding:0!important;background:transparent!important;color:black!important}.zpContainer,.zpBreakout,.zpContainer.zpBreakout{width:auto!important;max-width:100%!important;padding-left:0!important;margin-left:0!important}.zpRow,.responsivelayout.supportsbreakout body:not(.withnews) .zpContainer.zpBreakout:not(.hasNews)>.zpRow{max-width:100%!important}.zpContainer.styled h1,.zpContainer.styled h2,.zpContainer.styled h3,.zpContainer.styled h4,.zpContainer.styled h5,.zpContainer.styled h6,.zpContainer.styled{color:black!important}#banner,#footer{background:transparent!important;color:black!important}.articlearea{margin:0 0 30px 0;padding:0}.articleimage{margin:0;padding:4px 0 0 0}.articletext{margin:0;padding:0}.twocolumnleft{float:left;margin:0;padding:0}.twocolumnleft div{margin:0;padding:0 12px 0 0}.twocolumnright{margin:0;padding:0;overflow:hidden}.twocolumnright div{margin:0;padding:0 0 0 12px}.bildunterschrift{display:block}.floatarticle{float:left;margin:0 0 30px 0;padding:0;overflow:hidden}.floatarticle div{margin:0;padding:0 30px 0 0}.zp-form{display:inline-block;margin:0;padding:0 0 10px 0}.zp-form p{margin:0;padding:0}.zp-form table{margin:0;padding:0}.zp-form td{margin:0;padding:0;white-space:nowrap;vertical-align:middle}.zp-form .label,.zp-form .field{padding:3px 10px 3px 0}.zp-form .desc{padding:10px 10px 10px 0}.zp-form .multiline{padding:4px 10px 0 0;vertical-align:top}.zp-form .submit{padding:0}.zp-form .separator{display:none}#banner,#afterlogo,#aftermenu,#afterfooter{display:none}#sitemap{display:none}#copyright{color:black}#xmenu{display:none}.SO-SiteSearchForm{display:none}.zpSO-OnlineShop-table{width:100%}.zpSO-OnlineShop-table th{margin:0;padding:8px 10px;font-weight:bold;text-align:left;color:#fff;background-color:#AE3951}.zpSO-OnlineShop-table td{margin:0;padding:8px 10px;text-align:left}.zpSO-OnlineShop-row1 td,.zpSO-OnlineShop-row2 td{margin:0;padding:8px 10px;text-align:left}.zpSO-OnlineShop-row2 td{background-color:rgba(0,0,0,0.2)}.clear{clear:both}.clearx,.clearfix{clear:both;margin:0;padding:0;font-size:0;height:0;line-height:0;visibility:hidden}.asfield{display:none}
|
||||
81
reference/e-tib.com/assets/bundle.js?v=638011695645578054
Normal file
BIN
reference/e-tib.com/assets/etib_ohne.png?v=2021070601
Normal file
|
After Width: | Height: | Size: 8.8 KiB |
BIN
reference/e-tib.com/assets/fonts/fontawesome-webfont.eot?
Normal file
BIN
reference/e-tib.com/assets/fonts/fontawesome-webfont.eot?v=4.7.0
Normal file
2671
reference/e-tib.com/assets/fonts/fontawesome-webfont.svg?v=4.7.0
Normal file
|
After Width: | Height: | Size: 434 KiB |
BIN
reference/e-tib.com/assets/fonts/fontawesome-webfont.ttf?v=4.7.0
Normal file
BIN
reference/e-tib.com/assets/images/bg_direction_nav.png
Normal file
|
After Width: | Height: | Size: 206 B |
BIN
reference/e-tib.com/assets/js/fancybox/blank.gif
Normal file
|
After Width: | Height: | Size: 43 B |
BIN
reference/e-tib.com/assets/js/fancybox/fancy_title_over.png
Normal file
|
After Width: | Height: | Size: 68 B |
BIN
reference/e-tib.com/assets/js/fancybox/fancybox-x.png
Normal file
|
After Width: | Height: | Size: 174 B |
BIN
reference/e-tib.com/assets/js/fancybox/fancybox.png
Normal file
|
After Width: | Height: | Size: 7.2 KiB |
BIN
reference/e-tib.com/assets/stock-images/magnifier.png
Normal file
|
After Width: | Height: | Size: 282 B |
779
reference/e-tib.com/impressum.html
Normal file
@@ -0,0 +1,779 @@
|
||||
<!DOCTYPE HTML>
|
||||
<html prefix="og: https://ogp.me/ns#" class="no-js responsivelayout supportsbreakout" lang="de" data-zpdebug="false" data-ptr="" data-pagename="Impressum">
|
||||
<head>
|
||||
<script>
|
||||
document.documentElement.className = document.documentElement.className.replace(/no-js/g, 'js');
|
||||
</script>
|
||||
|
||||
<title>Impressum</title>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="description" content="" />
|
||||
|
||||
<meta property="og:type" content="website">
|
||||
<meta property="og:title" content="Impressum">
|
||||
<meta property="og:description" content="">
|
||||
<meta property="og:url" content="http://www.e-tib.com/impressum.html">
|
||||
<meta property="twitter:card" content="summary_large_image">
|
||||
<meta property="twitter:title" content="Impressum">
|
||||
<meta property="twitter:description" content="">
|
||||
|
||||
<meta name="keywords" content="" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<meta name="generator" content="Zeta Producer 16.4.0.0, ZP16X, 22.03.2022 12:05:28" />
|
||||
<meta name="robots" content="index, follow" />
|
||||
|
||||
|
||||
|
||||
|
||||
<link rel="preload" href="assets/fonts/fontawesome-webfont.woff2%3Fv=4.7.0" as="font" type="font/woff2" crossorigin>
|
||||
|
||||
|
||||
<link class="zpfaviconmeta" rel="shortcut icon" type="image/x-icon" href="assets/etib_ohne.png%3Fv=2021070601" />
|
||||
|
||||
|
||||
|
||||
|
||||
<link rel="stylesheet" href="assets/bundle.css%3Fv=638011695645578054.css" />
|
||||
<link rel="stylesheet" href="assets/bundle-print.css%3Fv=637853503328973638.css" media="print" />
|
||||
|
||||
<style id="zple_container_104">
|
||||
#container_104{background-color: #117C61 !important;}
|
||||
</style>
|
||||
|
||||
|
||||
|
||||
<script src="assets/bundle.js%3Fv=638011695645578054"></script>
|
||||
|
||||
|
||||
<!-- Webfonts -->
|
||||
|
||||
|
||||
|
||||
<!-- Search Inline Script -->
|
||||
|
||||
<script>
|
||||
function search1(){
|
||||
if (document.forms.searchengine1.q.value.length == 0) {
|
||||
alert("Bitte geben Sie einen Suchbegriff ein.");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
|
||||
<!-- RSS -->
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</head>
|
||||
|
||||
<body id="flat-responsive" class="notouch hasfixednav hasheader">
|
||||
|
||||
<a id="top"></a>
|
||||
|
||||
|
||||
<!-- Teaser "Banner" -->
|
||||
|
||||
|
||||
<!-- Header -->
|
||||
<div id="header">
|
||||
|
||||
|
||||
|
||||
|
||||
<div id="nav">
|
||||
|
||||
|
||||
|
||||
<ul class="zpmarkactive default submenu touchhovermenu clickhovermenu out" data-trianglemode="true"><li class="logo hidden"><a
|
||||
href="index.html"></a></li><li class="zpnodefaults"><a href="index.html" data-isredirected="false" >Unternehmen</a></li><li class="zpnodefaults"><a href="kompetenzen-01.html" data-isredirected="false" >Kompetenzen</a></li><li class="zpnodefaults"><a href="startseite.html" data-isredirected="false" >Referenzen</a></li><li class="zpnodefaults"><a href="ueber-uns.html" data-isredirected="false" >Karriere</a></li><li class="zpnodefaults"><a href="kontakt.html" data-isredirected="false" >Kontakt</a></li><li class="zpnodefaults"><a class="active" href="impressum.html" data-isredirected="false" >Impressum</a></li><li class="overflownonly"><a href="impressum.html#" id="mobilenavtoggle" class="tabletonly toggle" aria-label="Menü ein-/ausblenden">☰ Menü</a></li></ul>
|
||||
|
||||
<script>
|
||||
$z(document).ready(function(){
|
||||
// we find the active page's a-tag and then walk upwards the dom marking the respective parent li as active/open
|
||||
$z('ul.zpmarkactive.default li a.active').parents('li').each(function(index){
|
||||
var that = this;
|
||||
// do not add open class to immediate parent li
|
||||
if ( index > 0 ){
|
||||
$z(that).addClass('open');
|
||||
}
|
||||
$z(that).addClass('active');
|
||||
//$z(that).find('> a').addClass('active');
|
||||
});
|
||||
$z("ul.zpmarkactive.default").removeClass("zpmarkactive");
|
||||
|
||||
/*
|
||||
$z("ul.zpmarkactive.default li:has(a.active)").addClass("active");
|
||||
$z("ul.zpmarkactive.default li.haschilds > a").addClass("haschilds");
|
||||
$z("ul.zpmarkactive.default li.haschilds:has(a.active)").addClass("active");
|
||||
$z("ul.zpmarkactive.default li.active > a").addClass("active");
|
||||
|
||||
$z("ul.zpmarkactive.default").removeClass("zpmarkactive")
|
||||
*/
|
||||
});
|
||||
</script>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div id="slider" class="noprint">
|
||||
|
||||
<a id="a1776"></a>
|
||||
<div id="headerslider" class="flexslider"
|
||||
>
|
||||
<div class="flex-container" style="height: 0; padding-bottom: 34.8%;">
|
||||
<ul class="slides">
|
||||
|
||||
|
||||
<li>
|
||||
|
||||
|
||||
<img src="media/images/etib_e-tib_tiefbau_guben_netzanbindung_energie-34-large.jpg" width="2500" height="870" alt="" />
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<div class="flex-caption">
|
||||
|
||||
|
||||
|
||||
|
||||
<h2 style="">IMPRESSUM</h2>
|
||||
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
<li>
|
||||
|
||||
|
||||
<img src="media/images/etib_e-tib_tiefbau_guben_netzanbindung_energie-37-large.jpg" width="2500" height="870" alt="" />
|
||||
|
||||
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
<li>
|
||||
|
||||
|
||||
<img src="media/images/etib_e-tib_tiefbau_guben_netzanbindung_energie_vermessung-2-von-100-large.jpg" width="2500" height="870" alt="" />
|
||||
|
||||
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
<script>
|
||||
var autoplay = false;
|
||||
|
||||
function initSlider(){
|
||||
$z('#headerslider .flex-container').flexslider({
|
||||
useCSS: true,
|
||||
touch: true,
|
||||
keyboard: true,
|
||||
itemMargin: 0,
|
||||
animation: 'slide',
|
||||
controlsContainer: '#headerslider.flexslider',
|
||||
slideshow: autoplay,
|
||||
slideshowSpeed: 7000,
|
||||
directionNav: true,
|
||||
controlNav: true,
|
||||
randomize: false,
|
||||
|
||||
pauseOnHover: true,
|
||||
smoothHeight: false,
|
||||
prevText: "zurück",
|
||||
nextText: "weiter"
|
||||
});
|
||||
$z('#headerslider.flexslider').addClass("inited");
|
||||
}
|
||||
$z(document).ready(function() {
|
||||
autoplay = true;
|
||||
if ( $z("body").hasClass("zpreducemotion") ){
|
||||
autoplay = false;
|
||||
}
|
||||
|
||||
if ( $z('#headerslider .flex-container ul.slides li img').length > 0 ){
|
||||
// init flexslider after 1st image has loaded, so have dimensions as quickly as possible without having to wait too long on window loaded or such and can start right with doc ready
|
||||
$z('#headerslider .flex-container ul.slides li img').first().one("load", initSlider).each(function() {
|
||||
if(this.complete) $z(this).trigger('load');
|
||||
}); // .each() is to work around a browser bugs which don't fire load() for cached images http://stackoverflow.com/a/3877079
|
||||
}
|
||||
else{
|
||||
// also init flexslider if it doesn't contain images and is text only
|
||||
initSlider();
|
||||
}
|
||||
|
||||
// activate links for individual slideshow
|
||||
$z('#headerslider .flex-container ul.slides li[data-clickurl]').css("cursor","pointer");
|
||||
$z('#headerslider .flex-container ul.slides li[data-clickurl]').click(function (event){
|
||||
// Because this script captures clicks for a container, it will also fire when a regular link inside the container
|
||||
// is clicked. Therefore, we check below, if a regular link i.e. <a href="impressum.html#"> was the target of the click.
|
||||
// Depending on the browser used, event.target might not be available, but event.srcElement would…
|
||||
var targ;
|
||||
if (event.target){
|
||||
targ = event.target;
|
||||
}
|
||||
else if (event.srcElement) {
|
||||
targ = event.srcElement;
|
||||
}
|
||||
if (targ.nodeName == "A") {
|
||||
// a regular link i.e. in a Caption was clicked. Return early, so the link's href doesn't get overridden
|
||||
return;
|
||||
}
|
||||
|
||||
if ( $z(this).data("clicktarget") ){
|
||||
window.open($z(this).data("clickurl"), $z(this).data("clicktarget"));
|
||||
}
|
||||
else{
|
||||
window.location = $z(this).data("clickurl");
|
||||
}
|
||||
event.preventDefault;
|
||||
return false;
|
||||
});
|
||||
});
|
||||
</script>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
<div id="content" class="main" >
|
||||
|
||||
|
||||
|
||||
|
||||
<div class="zparea zpgrid" data-numcolumns="" data-areaname="Standard" data-pageid="579">
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<div id="container_82" class="zpContainer first zpBreakout "
|
||||
data-zpeleel="container" data-zpleid="82">
|
||||
|
||||
|
||||
|
||||
|
||||
<div class="zpRow standard " data-row-id="311"
|
||||
>
|
||||
|
||||
|
||||
|
||||
<div class="zpColumn odd zpColumnWidth1 c12 first last" style="" data-column-id="349"
|
||||
>
|
||||
|
||||
|
||||
<div class="zpColumnItem" >
|
||||
<div id="a1666" data-article-id="1666" data-zpleid="1666"
|
||||
class="articlearea zpwText"
|
||||
|
||||
>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<h1
|
||||
|
||||
style="color: rgb(17, 124, 97); text-align:left;" data-zpfieldname="headline">
|
||||
Impressum und Datenschutz
|
||||
|
||||
</h1>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<strong><span style="color: #333333;">Anbieterkennung nach § 5 TMG</span></strong><span style="color: #333333;">:<br>E-TIB GmbH<br>Gewerbestraße 22
|
||||
<br>D-03172 Guben<br>Tel.: +49 (0) 3561 / 68577 33<br>Fax: +49 (0) 3561 / 68577 35<br>E-Mail: d.joseph@e-tib.com<br>Web: www.e-tib.com<br> </span><p><span style="color: #333333;"><strong>Geschäftsführer:</strong></span></p><span style="color: #333333;">
|
||||
Danny Joseph<br><br><strong>Handelsregister-Eintrag:</strong><br>Registergericht: Amtsgericht Cottbus<br>Registernummer: HRB 12403<br><br><strong>Haftungsausschluss (Disclaimer):</strong><br>Haftung für Inhalte<br><br>Als
|
||||
Dienstanbieter sind wir gemäß § 7 Abs.1 TMG für eigene Inhalte auf
|
||||
diesen Seiten nach den allgemeinen Gesetzen verantwortlich. Nach §§ 8
|
||||
bis 10 TMG sind wir als Diensteanbieter jedoch nicht verpflichtet,
|
||||
übermittelte oder gespeicherte fremde Informationen zu überwachen oder
|
||||
nach Umständen zu forschen, die auf eine rechtswidrige Tätigkeit
|
||||
hinweisen. Verpflichtungen zur Entfernung oder Sperrung der Nutzung von
|
||||
Informationen nach den allgemeinen Gesetzen bleiben hiervon unberührt.
|
||||
Eine diesbezügliche Haftung ist jedoch erst ab dem Zeitpunkt der
|
||||
Kenntnis einer konkreten Rechtsverletzung möglich. Bei Bekanntwerden von
|
||||
entsprechenden Rechtsverletzungen werden wir diese Inhalte umgehend
|
||||
entfernen.<br>Haftung für Links<br><br>Unser Angebot enthält Links zu
|
||||
externen Webseiten Dritter, auf deren Inhalte wir keinen Einfluss haben.
|
||||
Deshalb können wir für diese fremden Inhalte auch keine Gewähr
|
||||
übernehmen. Für die Inhalte der verlinkten Seiten ist stets der
|
||||
jeweilige Anbieter oder Betreiber der Seiten verantwortlich. Die
|
||||
verlinkten Seiten wurden zum Zeitpunkt der Verlinkung auf mögliche
|
||||
Rechtsverstöße überprüft. Rechtswidrige Inhalte waren zum Zeitpunkt der
|
||||
Verlinkung nicht erkennbar. Eine permanente inhaltliche Kontrolle der
|
||||
verlinkten Seiten ist jedoch ohne konkrete Anhaltspunkte einer
|
||||
Rechtsverletzung nicht zumutbar. Bei Bekanntwerden von
|
||||
Rechtsverletzungen werden wir derartige Links umgehend entfernen.<br>Urheberrecht<br><br>Die
|
||||
durch die Seitenbetreiber erstellten Inhalte und Werke auf diesen
|
||||
Seiten unterliegen dem deutschen Urheberrecht. Die Vervielfältigung,
|
||||
Bearbeitung, Verbreitung und jede Art der Verwertung außerhalb der
|
||||
Grenzen des Urheberrechtes bedürfen der schriftlichen Zustimmung des
|
||||
jeweiligen Autors bzw. Erstellers. Downloads und Kopien dieser Seite
|
||||
sind nur für den privaten, nicht kommerziellen Gebrauch gestattet.
|
||||
Soweit die Inhalte auf dieser Seite nicht vom Betreiber erstellt wurden,
|
||||
werden die Urheberrechte Dritter beachtet. Insbesondere werden Inhalte
|
||||
Dritter als solche gekennzeichnet. Sollten Sie trotzdem auf eine
|
||||
Urheberrechtsverletzung aufmerksam werden, bitten wir um einen
|
||||
entsprechenden Hinweis. Bei Bekanntwerden von Rechtsverletzungen werden
|
||||
wir derartige Inhalte umgehend entfernen.<br> </span><p><span style="color: #333333;"><strong>Datenschutz</strong></span></p><p><span style="color: #333333;">Die Betreiber dieser Seiten nehmen den
|
||||
Schutz Ihrer persönlichen Daten sehr ernst. Wir behandeln Ihre
|
||||
personenbezogenen Daten vertraulich und entsprechend der gesetzlichen
|
||||
Datenschutzvorschriften sowie dieser Datenschutzerklärung. Die Nutzung
|
||||
unserer Webseite ist in der Regel ohne Angabe personenbezogener Daten
|
||||
möglich. Soweit auf unseren Seiten personenbezogene Daten
|
||||
(beispielsweise Name, Anschrift oder E-Mail-Adressen) erhoben werden,
|
||||
erfolgt dies, soweit möglich, stets auf freiwilliger Basis. Diese Daten
|
||||
werden ohne Ihre ausdrückliche Zustimmung nicht an Dritte weitergegeben.
|
||||
Wir weisen darauf hin, dass die Datenübertragung im Internet (z.B. bei
|
||||
der Kommunikation per E-Mail) Sicherheitslücken aufweisen kann. Ein
|
||||
lückenloser Schutz der Daten vor dem Zugriff durch Dritte ist nicht
|
||||
möglich.</span></p><span style="color: #333333;">Quelle: http://www.e-recht24.de</span>
|
||||
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
</div><!-- .zpRow -->
|
||||
|
||||
|
||||
</div><!-- close container -->
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<div id="container_164" class="zpContainer last "
|
||||
data-zpeleel="container" data-zpleid="164">
|
||||
|
||||
|
||||
|
||||
|
||||
<div class="zpRow standard " data-row-id="473"
|
||||
>
|
||||
|
||||
|
||||
<div class="zpFakeColumn flexbreak"></div>
|
||||
|
||||
|
||||
<div class="zpColumn odd zpColumnWidth1 c12 first last" style="clear: left;" data-column-id="563"
|
||||
>
|
||||
|
||||
|
||||
<div class="zpColumnItem" >
|
||||
<div id="a1905" data-article-id="1905" data-zpleid="1905"
|
||||
class="articlearea zpwText"
|
||||
|
||||
>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<h2
|
||||
|
||||
style="color: #117C61; text-align:center;" data-zpfieldname="headline">ENERGIE - TELEKOMMUNIKATION - INFRASTRUKTUR - BAU</h2>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
</div><!-- .zpRow -->
|
||||
|
||||
|
||||
</div><!-- close container -->
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</div> <!-- .zparea -->
|
||||
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
<!-- Search -->
|
||||
<div id="search" class="container">
|
||||
|
||||
|
||||
|
||||
|
||||
<script>
|
||||
function getParameterByNamezpsearchform(name) {
|
||||
name = name.replace(/[\[]/, "\\\[").replace(/[\]]/, "\\\]");
|
||||
var regexS = "[\\?&]" + name + "=([^&#]*)";
|
||||
var regex = new RegExp(regexS);
|
||||
var results = regex.exec(window.location.search);
|
||||
if(results == null) {
|
||||
return "";
|
||||
}
|
||||
else {
|
||||
return decodeURIComponent(results[1].replace(/\+/g, " "));
|
||||
}
|
||||
}
|
||||
function encode_htmlzpsearchform(astring) { //helps prevent XSS e.g. when printing search strings
|
||||
astring = typeof astring !== 'undefined' ? astring : "";
|
||||
|
||||
astring = astring.replace(/</g, "<");
|
||||
astring = astring.replace(/>/g, ">");
|
||||
astring = astring.replace(/"/g, "&quo" + "t;");
|
||||
astring = astring.replace(/'/g, "'");
|
||||
astring = astring.replace(/\//g, "/");
|
||||
astring = astring.replace(/\[\$/g, "");
|
||||
astring = astring.replace(/\$\]/g, "");
|
||||
|
||||
return astring;
|
||||
}
|
||||
function searchzpsearchform() {
|
||||
var formId = "zpsearchform";
|
||||
if (document.getElementById(formId).q.value == 'Suchbegriff') {
|
||||
return false;
|
||||
}
|
||||
else if ($z.trim(document.getElementById(formId).q.value).length === 0) {
|
||||
alert("Bitte geben Sie einen Suchbegriff ein.");
|
||||
return false;
|
||||
}
|
||||
else{
|
||||
return;
|
||||
}
|
||||
}
|
||||
</script>
|
||||
<form id="zpsearchform" name="searchengine1" onsubmit="return searchzpsearchform()" action="https://e-tib.com/suche.html" method="get" class="zpsearchform"
|
||||
>
|
||||
|
||||
<input id="zpsearchfield" class="zpsearchfield typetext" type="text" name="q" title="Suche" placeholder="Suchbegriff"
|
||||
aria-label="Suchbegriff" />
|
||||
|
||||
<input id="zpsearchbutton" class="zpsearchbutton" type="image" name="submit" src="assets/stock-images/magnifier.png" alt="Suchen" title="Suchen" aria-label="Suchen" />
|
||||
|
||||
|
||||
</form>
|
||||
<script>
|
||||
$(document).ready(function(){
|
||||
// set form field value to searchstring
|
||||
var tmpSearchstring = getParameterByNamezpsearchform("q");
|
||||
if ( tmpSearchstring ){
|
||||
// fill layout searchfield with searchsting
|
||||
document.getElementById("zpsearchform").q.value = tmpSearchstring;
|
||||
// fill search page searchfield with searchsting
|
||||
document.getElementById("zpsearchengine").q2.value = tmpSearchstring;
|
||||
// focus search page searchfield
|
||||
document.getElementById("zpsearchengine").q2.focus();
|
||||
}
|
||||
});
|
||||
</script>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
<div id="afterfooter" class="container">
|
||||
|
||||
|
||||
<div class="zparea zpgrid" data-numcolumns="" data-areaname="Footer" data-pageid="579">
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<div id="container_104" class="zpContainer first last styled zpBreakout "
|
||||
data-zpeleel="container" data-zpleid="104">
|
||||
|
||||
|
||||
|
||||
|
||||
<div class="zpRow standard " data-row-id="383"
|
||||
>
|
||||
|
||||
|
||||
|
||||
<div class="zpColumn odd zpColumnWidth1 c12 first last" style="" data-column-id="445"
|
||||
>
|
||||
|
||||
|
||||
<div class="zpColumnItem" >
|
||||
<div id="a1761" data-article-id="1761" data-zpleid="1761"
|
||||
class="articlearea zpwText"
|
||||
|
||||
>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<p style="text-align: center;"><span style="color: rgb(254, 254, 254);">E-TIB GmbH<br>Gewerbestraße 22
|
||||
<br>D-03172 Guben<br>Tel.: +49 (0)
|
||||
3561 / 68577 33<br>Fax: +49 (0) 3561 / 68577 35<br>E-Mail: info@e-tib.com<br>Web:
|
||||
www.e-tib.com</span></p>
|
||||
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
</div><!-- .zpRow -->
|
||||
|
||||
|
||||
</div><!-- close container -->
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</div> <!-- .zparea -->
|
||||
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<div id="footer" class="container">
|
||||
|
||||
|
||||
<div id="xmenu" class=""
|
||||
>
|
||||
|
||||
|
||||
<a class="xmenulink" href="index.html">Unternehmen</a>
|
||||
|
||||
<a class="xmenulink" href="kontakt.html">Kontakt</a>
|
||||
|
||||
<a class="xmenulink" href="impressum.html">Impressum und Datenschutz</a>
|
||||
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<div id="copyright"
|
||||
>
|
||||
|
||||
© 2026 E-TIB
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
<div id="totop" class="container noprint">
|
||||
<a href="impressum.html#top" class="zpSO-Uplink-Flat zpnolayoutlinkstyles" title="Nach oben"><span class="zp-sronly">Nach oben</span></a>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
function setoverflown(s){
|
||||
var retcode = false;
|
||||
if ( $z("#nav").is(":hover") || ! $z("#nav > ul > li").length ){
|
||||
// mouse is over nav, which opens submenues and might cause the overflow
|
||||
// OR empty nav - needed because for IE an empty #nav == overflown()
|
||||
return false;
|
||||
}
|
||||
|
||||
$z("#nav > ul").removeClass("overflown");
|
||||
if ( $z("#nav:not(.on) > ul").overflown() ){
|
||||
// nav is already overflown by 1st-Level Menu entries (too many entries)
|
||||
$z("#nav > ul").addClass("overflown");
|
||||
retcode = true;
|
||||
}
|
||||
else{
|
||||
// on non touch devices, check if nav would be overflown horizontally if all submenues are visible (i.e. too many submenues expanding to the right)
|
||||
$z("#nav > ul ul:not(.nocalcoverflow)").css("display", "block");
|
||||
if ( $z("#nav:not(.on) > ul").overflown("x") ){
|
||||
$z("#nav > ul").addClass("overflown");
|
||||
retcode = true;
|
||||
}
|
||||
$z("#nav > ul ul:not(.nocalcoverflow)").css("display", "");
|
||||
|
||||
// if the previous check didn't already match, check if one of the submenus is higher than the available space in the window because the nav is fixed and wouldn't scroll
|
||||
if ( !retcode && $z("#nav.fixed").length ){
|
||||
$z("#nav.fixed > ul ul:not(.nocalcoverflow)").css("display", "block");
|
||||
$z("#nav.fixed > ul ul:not(.nocalcoverflow)").each(function(){
|
||||
var eltop = $z(this).offset().top - $(window).scrollTop(); // gets the effective top position relative to the window
|
||||
if ( (eltop + $(this).innerHeight()) > $z(window).innerHeight() ){
|
||||
// submenu doesn't fit on screen and would be cut off
|
||||
$z("#nav.fixed > ul").addClass("overflown");
|
||||
retcode = true;
|
||||
$z("#nav.fixed > ul ul:not(.nocalcoverflow)").css("display", "");
|
||||
// exit the each loop early
|
||||
return false;
|
||||
}
|
||||
});
|
||||
$z("#nav.fixed > ul ul:not(.nocalcoverflow)").css("display", "");
|
||||
}
|
||||
}
|
||||
|
||||
// see if we need to scale to the logo to fit besides the mobile menu-button
|
||||
var availspace = $z("#nav > ul").width() - $z("#nav > ul > li.overflownonly").width();
|
||||
$z("#nav > ul > li.logo").css("max-width", availspace + "px");
|
||||
|
||||
return retcode;
|
||||
}
|
||||
|
||||
function stickyNav(topoffset){
|
||||
// make navigations menu sticky when scrolling the menu past the top of the window
|
||||
var scrolltop = $z("body").scrollTop() || (document.documentElement && document.documentElement.scrollTop) || 0;
|
||||
|
||||
if ( !$z("#nav ul ul:visible").length && scrolltop - topoffset >= 0){
|
||||
$z("body").addClass("padded");
|
||||
$z("#nav").addClass("fixed");
|
||||
}
|
||||
else{
|
||||
$z("body").removeClass("padded");
|
||||
$z("#nav").removeClass("fixed");
|
||||
}
|
||||
// with a little delay, check if the menu gets overflown (i.e. because we're also displaying the logo in the nav now
|
||||
setTimeout(function(){setoverflown();}, 100);
|
||||
}
|
||||
// globals
|
||||
var navOffset;
|
||||
|
||||
$z(document).ready(function(){
|
||||
// smooth scroll the layout specific go to top link
|
||||
$z("a.zpSO-Uplink-Flat").click(function(e){
|
||||
e.preventDefault();
|
||||
if ( $z(this.hash).length ){
|
||||
$z('html,body').animate({
|
||||
scrollTop: $z(this.hash).offset().top - parseInt($z("body").css("padding-top"))
|
||||
}, 500);
|
||||
window.location.hash = this.hash;
|
||||
}
|
||||
});
|
||||
|
||||
// switches the Mobile Navigation-Menu on/off, when "Menu" link is clicked.
|
||||
$z("a#mobilenavtoggle").on("click", function(e){
|
||||
e.preventDefault();
|
||||
$z("#nav").toggleClass("on");
|
||||
setoverflown();
|
||||
});
|
||||
|
||||
setoverflown();
|
||||
var resizeTimeout = null;
|
||||
$z(window).resize(zpthrottle(100, function(event) {
|
||||
var event = event || window.event;
|
||||
if ( event && $z(event.target.nodeType).length == 0 ){// enable window.resize only for the window object (resizing elements might also trigger window.resize) which doesn't have a nodeType
|
||||
setoverflown();
|
||||
}
|
||||
}));
|
||||
|
||||
if ( "false" == "false" && ("false" == "true" || "false" == "true") ){
|
||||
navOffset = $z("#nav:not(.fixed)").offset().top;
|
||||
setTimeout(function(){stickyNav(navOffset);}, 100);
|
||||
}
|
||||
});
|
||||
|
||||
$z(window).on('load', function(){
|
||||
setTimeout(function(){setoverflown();}, 500);
|
||||
var navheight = 0;
|
||||
if ( "false" == "false" ){
|
||||
navheight = $z("#nav").outerHeight();
|
||||
}
|
||||
// pull anchors below fixed header into visible area
|
||||
if ( location.hash != "" && $z(':target').length ) {
|
||||
$z('html,body').animate({scrollTop: $z(':target').offset().top - navheight - 10 }, 600);
|
||||
}
|
||||
$z("a[href*='#']:not([href='#'])").not(".zpNoScroll").click(function () {
|
||||
var target = $z(this).attr("href");
|
||||
target = target.substring(target.indexOf("#"));
|
||||
if ( $z(target).length ){
|
||||
$z('html,body').animate({scrollTop: $z(target).offset().top - navheight - 10 }, 600);
|
||||
}
|
||||
});
|
||||
|
||||
if ( "false" == "false" && ("false" == "true" || "false" == "true") ){
|
||||
if ( $z("#nav:not(.fixed)").length ){
|
||||
navOffset = $z("#nav:not(.fixed)").offset().top;
|
||||
}
|
||||
setTimeout(function(){stickyNav(navOffset);}, 500);
|
||||
$z(window).scroll(zpthrottle(100, function(event) {
|
||||
stickyNav(navOffset);
|
||||
}));
|
||||
}
|
||||
|
||||
});
|
||||
</script>
|
||||
|
||||
|
||||
|
||||
|
||||
<!-- {{{ -->
|
||||
<!--
|
||||
* Layout: Flat Responsive by StS
|
||||
* $Id: default.html 2022-03-09 11:20:24 +0100 Stefan S 8c952fdc662aa6619ae8ff22707dc8c8284a3b37 $
|
||||
-->
|
||||
<!-- }}} -->
|
||||
</body>
|
||||
</html>
|
||||