feat: replace literal decorations with AbstractBore and AbstractTrench

Former-commit-id: 4f7c5fcc7203aa4a36aabd8ffc13cf9f28a0f77a
This commit is contained in:
2026-05-11 21:44:31 +02:00
parent 74caea6854
commit e33dcdddac
13 changed files with 186 additions and 411 deletions

View File

@@ -7,8 +7,8 @@ import { useState, useEffect } from 'react';
import { Button } from '@/components/ui/Button';
import { HoverShineOverlay } from '@/components/ui/HoverShineOverlay';
import { StratumLines } from '@/components/ui/decorations/StratumLines';
import { DrillBitSpinner } from '@/components/ui/decorations/DrillBitSpinner';
import { DrillTeeth } from '@/components/ui/decorations/DrillTeeth';
import { AbstractBore } from '@/components/ui/decorations/AbstractBore';
import { AbstractTrench } from '@/components/ui/decorations/AbstractTrench';
interface CompetenceBentoGridProps {
badge?: string;
@@ -170,15 +170,10 @@ export function CompetenceBentoGrid(props: CompetenceBentoGridProps) {
})}
</div>
</div>
{/* Decorative: large abstract drill bit spinning slowly in background */}
<div className="absolute top-1/2 -translate-y-1/2 -right-48 pointer-events-none opacity-[0.03]">
<DrillBitSpinner size={600} duration={25} glow={false} />
</div>
{/* Decorative: abstract earth strata / excavation layers */}
<StratumLines placement="bottom-left" invert />
<StratumLines placement="bottom-right" invert />
{/* Organic wave divider */}
<DrillTeeth position="bottom" fill="var(--color-neutral)" />
{/* Minimalist Abstract Drilling */}
<AbstractBore className="top-1/4 opacity-40" invert />
{/* Minimalist Abstract Trenching */}
<AbstractTrench className="bottom-0 opacity-40" invert />
</section>
);
}

View File

@@ -3,9 +3,8 @@ import Image from 'next/image';
import Reveal from '@/components/Reveal';
import { Badge, Container, Heading } from '@/components/ui';
import { Button } from '@/components/ui/Button';
import { DrillOrbit } from '@/components/ui/decorations/DrillOrbit';
import { DrillBitSpinner } from '@/components/ui/decorations/DrillBitSpinner';
import { DrillTeeth } from '@/components/ui/decorations/DrillTeeth';
import { AbstractBore } from '@/components/ui/decorations/AbstractBore';
import { AbstractTrench } from '@/components/ui/decorations/AbstractTrench';
export interface HeroSectionProps {
title: string;
@@ -73,14 +72,10 @@ export const HeroSection: React.FC<HeroSectionProps> = (props) => {
)}
</div>
</Container>
{/* Decorative: large abstract drill bit spinning slowly in background */}
<div className="absolute top-1/2 -translate-y-1/2 -right-48 md:-right-64 pointer-events-none opacity-[0.03]">
<DrillBitSpinner size={800} duration={20} glow={false} />
</div>
{/* Decorative: abstract HDD bore trajectory */}
<DrillOrbit side="right" />
{/* Organic wave divider — displaced earth strata */}
<DrillTeeth position="bottom" fill="var(--color-primary-dark)" />
{/* Minimalist Abstract Drilling (HDD) */}
<AbstractBore className="top-1/3 -translate-y-1/2 opacity-60" />
{/* Minimalist Abstract Trenching */}
<AbstractTrench className="bottom-0 opacity-60" />
</section>
</Reveal>
);

View File

@@ -4,7 +4,7 @@ import { Button } from '@/components/ui/Button';
import Image from 'next/image';
import { motion, AnimatePresence } from 'framer-motion';
import { useState, useEffect } from 'react';
import { DrillTeeth } from '@/components/ui/decorations/DrillTeeth';
import { AbstractBore } from '@/components/ui/decorations/AbstractBore';
interface HeroVideoProps {
data?: any;
@@ -109,8 +109,8 @@ export function HeroVideo(props: HeroVideoProps) {
</div>
</motion.div>
</div>
{/* Organic wave divider — displaced earth strata */}
<DrillTeeth position="bottom" fill="var(--color-neutral-dark)" className="z-[5]" />
{/* Minimalist Abstract Drilling */}
<AbstractBore className="bottom-0 opacity-40 z-[5]" />
</div>
);
}

View File

@@ -5,9 +5,8 @@ import { motion } from 'framer-motion';
import Link from 'next/link';
import Image from 'next/image';
import { HoverShineOverlay } from '@/components/ui/HoverShineOverlay';
import { DrillOrbit } from '@/components/ui/decorations/DrillOrbit';
import { DrillBitSpinner } from '@/components/ui/decorations/DrillBitSpinner';
import { DrillTeeth } from '@/components/ui/decorations/DrillTeeth';
import { AbstractBore } from '@/components/ui/decorations/AbstractBore';
import { AbstractTrench } from '@/components/ui/decorations/AbstractTrench';
export interface Reference {
id: string;
@@ -154,14 +153,10 @@ export function ReferencesSlider(props: ReferencesSliderProps) {
<svg xmlns="http://www.w3.org/2000/svg" className="w-5 h-5" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2.5" strokeLinecap="round" strokeLinejoin="round"><line x1="5" y1="12" x2="19" y2="12"></line><polyline points="12 5 19 12 12 19"></polyline></svg>
</Link>
</div>
{/* Decorative: large abstract drill bit spinning slowly in background */}
<div className="absolute top-1/2 -translate-y-1/2 -right-48 pointer-events-none opacity-[0.03]">
<DrillBitSpinner size={600} duration={25} glow={false} />
</div>
{/* Decorative: abstract HDD bore trajectory */}
<DrillOrbit side="left" />
{/* Organic wave divider */}
<DrillTeeth position="bottom" fill="var(--color-neutral-dark)" />
{/* Minimalist Abstract Drilling */}
<AbstractBore className="top-1/4 opacity-30" />
{/* Minimalist Abstract Trenching */}
<AbstractTrench className="bottom-0 opacity-30" />
</section>
);
}

View File

@@ -3,7 +3,7 @@
import * as React from 'react';
import { motion, Variants } from 'framer-motion';
import { HoverShineOverlay } from '@/components/ui/HoverShineOverlay';
import { DrillTeeth } from '@/components/ui/decorations/DrillTeeth';
import { AbstractTrench } from '@/components/ui/decorations/AbstractTrench';
export interface ServicePanelData {
id: string;
@@ -230,8 +230,8 @@ export function ServiceDetailGrid({
})}
</motion.div>
</div>
{/* Organic wave divider */}
<DrillTeeth position="bottom" fill="#fafafa" />
{/* Minimalist Abstract Trenching */}
<AbstractTrench className="bottom-0 opacity-20" invert />
</section>
);
}

View File

@@ -4,9 +4,8 @@ import * as React from 'react';
import { motion, Variants } from 'framer-motion';
import Image from 'next/image';
import { HoverShineOverlay } from '@/components/ui/HoverShineOverlay';
import { DrillOrbit } from '@/components/ui/decorations/DrillOrbit';
import { DrillBitSpinner } from '@/components/ui/decorations/DrillBitSpinner';
import { DrillTeeth } from '@/components/ui/decorations/DrillTeeth';
import { AbstractBore } from '@/components/ui/decorations/AbstractBore';
import { AbstractTrench } from '@/components/ui/decorations/AbstractTrench';
interface SubCompanyTilesProps {
badge?: string;
@@ -200,14 +199,10 @@ export function SubCompanyTiles(props: SubCompanyTilesProps) {
})}
</motion.div>
</div>
{/* Decorative: large abstract drill bit spinning slowly in background */}
<div className="absolute top-1/3 -translate-y-1/2 -left-64 pointer-events-none opacity-[0.04]">
<DrillBitSpinner size={700} duration={25} glow={false} />
</div>
{/* Decorative: abstract HDD bore trajectory */}
<DrillOrbit side="right" />
{/* Organic wave divider */}
<DrillTeeth position="bottom" fill="var(--color-neutral-dark)" />
{/* Minimalist Abstract Drilling */}
<AbstractBore className="top-1/4 opacity-40" />
{/* Minimalist Abstract Trenching */}
<AbstractTrench className="bottom-0 opacity-40" />
</section>
);
}