Fix - Mail vom 16.02.2025
This commit is contained in:
parent
664f5b1b77
commit
b8d8c59bce
124
scripts/print_project.py
Normal file
124
scripts/print_project.py
Normal file
@ -0,0 +1,124 @@
|
|||||||
|
import os
|
||||||
|
|
||||||
|
def list_directory_contents(root_dir, ignore_dirs, ignore_files, max_file_size_mb=5):
|
||||||
|
"""
|
||||||
|
Gibt rekursiv alle Verzeichnisse, Unterverzeichnisse und Dateien im angegebenen Stammverzeichnis aus
|
||||||
|
und zeigt den vollständigen Inhalt jeder Datei an.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
root_dir (str): Das Stammverzeichnis, von dem aus begonnen werden soll
|
||||||
|
ignore_dirs (list): Liste der zu ignorierenden Verzeichnisnamen
|
||||||
|
ignore_files (list): Liste der zu ignorierenden Dateinamen
|
||||||
|
max_file_size_mb (int): Maximale Dateigröße zum Lesen in MB
|
||||||
|
"""
|
||||||
|
# Überprüfen, ob das Stammverzeichnis existiert
|
||||||
|
if not os.path.exists(root_dir):
|
||||||
|
print(f"Fehler: Verzeichnis '{root_dir}' existiert nicht.")
|
||||||
|
return
|
||||||
|
|
||||||
|
# Binäre Dateierweiterungen, deren Inhalt nicht angezeigt werden soll
|
||||||
|
binary_extensions = {
|
||||||
|
'.exe', '.dll', '.so', '.dylib', '.bin', '.dat', '.db', '.sqlite', '.sqlite3',
|
||||||
|
'.jpg', '.jpeg', '.png', '.gif', '.bmp', '.tif', '.tiff', '.ico', '.webp',
|
||||||
|
'.mp3', '.mp4', '.avi', '.mov', '.wmv', '.flv', '.mkv', '.wav', '.ogg',
|
||||||
|
'.zip', '.tar', '.gz', '.bz2', '.7z', '.rar', '.pdf', '.doc', '.docx',
|
||||||
|
'.xls', '.xlsx', '.ppt', '.pptx'
|
||||||
|
}
|
||||||
|
|
||||||
|
# Kodierungen, die beim Lesen von Dateien versucht werden sollen
|
||||||
|
encodings = ['utf-8', 'latin-1', 'cp1252', 'iso-8859-1']
|
||||||
|
|
||||||
|
max_file_size = max_file_size_mb * 1024 * 1024 # MB in Bytes umrechnen
|
||||||
|
|
||||||
|
# Durch die Verzeichnisstruktur laufen
|
||||||
|
for dirpath, dirnames, filenames in os.walk(root_dir):
|
||||||
|
# Ignorierte Verzeichnisse aus dirnames entfernen, um zu verhindern, dass os.walk sie durchläuft
|
||||||
|
dirnames[:] = [d for d in dirnames if d not in ignore_dirs]
|
||||||
|
|
||||||
|
# Aktuellen Verzeichnispfad ausgeben
|
||||||
|
rel_path = os.path.relpath(dirpath, root_dir)
|
||||||
|
if rel_path == '.':
|
||||||
|
print(f"\n\n{'=' * 80}")
|
||||||
|
print(f"VERZEICHNIS: {root_dir}")
|
||||||
|
print(f"{'=' * 80}")
|
||||||
|
else:
|
||||||
|
print(f"\n\n{'=' * 80}")
|
||||||
|
print(f"VERZEICHNIS: {os.path.join(root_dir, rel_path)}")
|
||||||
|
print(f"{'=' * 80}")
|
||||||
|
|
||||||
|
# Unterverzeichnisse ausgeben
|
||||||
|
if dirnames:
|
||||||
|
print("\nUnterverzeichnisse:")
|
||||||
|
for dirname in dirnames:
|
||||||
|
print(f" - {dirname}")
|
||||||
|
|
||||||
|
# Dateien und ihre Inhalte ausgeben
|
||||||
|
if filenames:
|
||||||
|
# Zu ignorierende Dateien herausfiltern
|
||||||
|
filtered_filenames = [f for f in filenames if f not in ignore_files]
|
||||||
|
|
||||||
|
print("\nDateien:")
|
||||||
|
for filename in filtered_filenames:
|
||||||
|
file_path = os.path.join(dirpath, filename)
|
||||||
|
print(f"\n{'-' * 50}")
|
||||||
|
print(f"DATEI: {file_path}")
|
||||||
|
print(f"{'-' * 50}")
|
||||||
|
|
||||||
|
try:
|
||||||
|
# Dateigröße überprüfen
|
||||||
|
file_size = os.path.getsize(file_path)
|
||||||
|
if file_size > max_file_size:
|
||||||
|
print(f"Datei ist zu groß, um den Inhalt anzuzeigen ({file_size / 1024 / 1024:.2f} MB).")
|
||||||
|
continue
|
||||||
|
|
||||||
|
# Überprüfen, ob es sich um eine Binärdatei anhand der Erweiterung handelt
|
||||||
|
file_ext = os.path.splitext(filename)[1].lower()
|
||||||
|
if file_ext and file_ext in binary_extensions:
|
||||||
|
print(f"Binärdatei erkannt ({file_ext}). Inhalt wird nicht angezeigt.")
|
||||||
|
continue
|
||||||
|
|
||||||
|
# Mehrere Kodierungen ausprobieren
|
||||||
|
content = None
|
||||||
|
for encoding in encodings:
|
||||||
|
try:
|
||||||
|
with open(file_path, 'r', encoding=encoding) as f:
|
||||||
|
content = f.read()
|
||||||
|
break
|
||||||
|
except UnicodeDecodeError:
|
||||||
|
continue
|
||||||
|
|
||||||
|
if content is not None:
|
||||||
|
print(content)
|
||||||
|
else:
|
||||||
|
print("Datei konnte mit keiner der versuchten Kodierungen gelesen werden.")
|
||||||
|
|
||||||
|
except (PermissionError, IsADirectoryError) as e:
|
||||||
|
print(f"Dateiinhalt konnte nicht gelesen werden: {str(e)}")
|
||||||
|
except Exception as e:
|
||||||
|
print(f"Unerwarteter Fehler beim Lesen der Datei: {str(e)}")
|
||||||
|
|
||||||
|
def main():
|
||||||
|
root_dir = r"C:\Users\DamjanSavic\Documents\Techologie.Team"
|
||||||
|
|
||||||
|
# Zu ignorierende Verzeichnisse
|
||||||
|
ignore_dirs = [
|
||||||
|
"__pycache__",
|
||||||
|
".idea",
|
||||||
|
"node_modules",
|
||||||
|
".git",
|
||||||
|
"External Libraries",
|
||||||
|
"Scratches and Consoles"
|
||||||
|
]
|
||||||
|
|
||||||
|
# Zu ignorierende Dateien
|
||||||
|
ignore_files = [
|
||||||
|
"package-lock.json"
|
||||||
|
]
|
||||||
|
|
||||||
|
# Maximale Dateigröße für die Anzeige des Inhalts (in MB)
|
||||||
|
max_file_size_mb = 5
|
||||||
|
|
||||||
|
list_directory_contents(root_dir, ignore_dirs, ignore_files, max_file_size_mb)
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
||||||
@ -38,7 +38,7 @@ export default function ExtendedGroup() {
|
|||||||
<div className={`transition-all duration-700 ${
|
<div className={`transition-all duration-700 ${
|
||||||
isVisible ? 'opacity-100 translate-y-0' : 'opacity-0 translate-y-8'
|
isVisible ? 'opacity-100 translate-y-0' : 'opacity-0 translate-y-8'
|
||||||
}`}>
|
}`}>
|
||||||
<h2 className="font-outfit text-3xl sm:text-4xl lg:text-5xl font-bold text-[#C25B3F]
|
<h2 className="font-outfit text-3xl sm:text-4xl lg:text-5xl font-bold text-gray-900
|
||||||
mb-4 sm:mb-6 section-enter section-enter-active">
|
mb-4 sm:mb-6 section-enter section-enter-active">
|
||||||
Die erweiterte Unternehmensgruppe
|
Die erweiterte Unternehmensgruppe
|
||||||
</h2>
|
</h2>
|
||||||
@ -94,6 +94,13 @@ export default function ExtendedGroup() {
|
|||||||
Zentrale: Oberhausen
|
Zentrale: Oberhausen
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
{/* Link for more information */}
|
||||||
|
<a href="#" className="absolute bottom-4 right-4 bg-[#C25B3F] hover:bg-[#A34832] text-white
|
||||||
|
px-4 py-2 rounded-full shadow-lg transform transition-all duration-300
|
||||||
|
group-hover:scale-105 font-medium">
|
||||||
|
Mehr Informationen zur Unternehmensgruppe
|
||||||
|
</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@ -2,150 +2,151 @@ import { Link } from 'react-router-dom';
|
|||||||
import { useState, useEffect } from 'react';
|
import { useState, useEffect } from 'react';
|
||||||
|
|
||||||
type FooterSection = {
|
type FooterSection = {
|
||||||
title: string;
|
title: string;
|
||||||
content: React.ReactNode;
|
content: React.ReactNode;
|
||||||
};
|
};
|
||||||
|
|
||||||
const links = [
|
const links = [
|
||||||
{ href: '#technologies', text: 'Unterstütze Technologien' },
|
{ href: '#technologies', text: 'Unterstützte Technologien' },
|
||||||
{ href: '#group', text: 'Gruppenbeitritt' },
|
{ href: '#group', text: 'Gruppenbeitritt' },
|
||||||
{ href: '#impressum', text: 'Impressum' },
|
{ href: 'mailto:kontakt@technologie.team?subject=Gruppenbeitritt%20anfragen', text: 'Gruppenbeitritt anfragen' },
|
||||||
|
{ href: '#impressum', text: 'Impressum' },
|
||||||
];
|
];
|
||||||
|
|
||||||
export default function Footer() {
|
export default function Footer() {
|
||||||
const [isVisible, setIsVisible] = useState(false);
|
const [isVisible, setIsVisible] = useState(false);
|
||||||
const [hoveredLink, setHoveredLink] = useState<string | null>(null);
|
const [hoveredLink, setHoveredLink] = useState<string | null>(null);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
const observer = new IntersectionObserver(
|
const observer = new IntersectionObserver(
|
||||||
([entry]) => {
|
([entry]) => {
|
||||||
if (entry.isIntersecting) {
|
if (entry.isIntersecting) {
|
||||||
setIsVisible(true);
|
setIsVisible(true);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{ threshold: 0.1 }
|
{ threshold: 0.1 }
|
||||||
);
|
);
|
||||||
|
|
||||||
const footer = document.querySelector('footer');
|
const footer = document.querySelector('footer');
|
||||||
if (footer) {
|
if (footer) {
|
||||||
observer.observe(footer);
|
observer.observe(footer);
|
||||||
}
|
}
|
||||||
|
|
||||||
return () => {
|
return () => {
|
||||||
if (footer) {
|
if (footer) {
|
||||||
observer.unobserve(footer);
|
observer.unobserve(footer);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
}, []);
|
}, []);
|
||||||
|
|
||||||
const sections: FooterSection[] = [
|
const sections: FooterSection[] = [
|
||||||
{
|
{
|
||||||
title: 'Links',
|
title: 'Links',
|
||||||
content: (
|
content: (
|
||||||
<div className="space-y-3">
|
<div className="space-y-3">
|
||||||
{links.map((link) => (
|
{links.map((link) => (
|
||||||
<a
|
<a
|
||||||
key={link.href}
|
key={link.href}
|
||||||
href={link.href}
|
href={link.href}
|
||||||
className="block transform transition-all duration-300 hover:text-white
|
className="block transform transition-all duration-300 hover:text-white
|
||||||
hover:translate-x-1 focus:outline-none focus:text-white
|
hover:translate-x-1 focus:outline-none focus:text-white
|
||||||
group relative"
|
group relative"
|
||||||
onMouseEnter={() => setHoveredLink(link.href)}
|
onMouseEnter={() => setHoveredLink(link.href)}
|
||||||
onMouseLeave={() => setHoveredLink(null)}
|
onMouseLeave={() => setHoveredLink(null)}
|
||||||
>
|
>
|
||||||
<span className="relative z-10 inline-block">{link.text}</span>
|
<span className="relative z-10 inline-block">{link.text}</span>
|
||||||
<span className={`absolute left-0 bottom-0 w-0 h-0.5 bg-[#C25B3F]
|
<span className={`absolute left-0 bottom-0 w-0 h-0.5 bg-[#C25B3F]
|
||||||
transition-all duration-300 group-hover:w-full
|
transition-all duration-300 group-hover:w-full
|
||||||
${hoveredLink === link.href ? 'w-full' : 'w-0'}`} />
|
${hoveredLink === link.href ? 'w-full' : 'w-0'}`} />
|
||||||
</a>
|
</a>
|
||||||
))}
|
))}
|
||||||
</div>
|
</div>
|
||||||
),
|
),
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: 'Ort',
|
title: 'Ort',
|
||||||
content: (
|
content: (
|
||||||
<address className="not-italic space-y-2">
|
<address className="not-italic space-y-2">
|
||||||
<p className="transition-colors duration-300 hover:text-white">
|
<p className="transition-colors duration-300 hover:text-white">
|
||||||
Essener Straße 2-24
|
Essener Straße 2-24
|
||||||
</p>
|
</p>
|
||||||
<p className="transition-colors duration-300 hover:text-white">
|
<p className="transition-colors duration-300 hover:text-white">
|
||||||
46047 Oberhausen
|
46047 Oberhausen
|
||||||
</p>
|
</p>
|
||||||
</address>
|
</address>
|
||||||
),
|
),
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: 'Mailkontakt',
|
title: 'Mailkontakt',
|
||||||
content: (
|
content: (
|
||||||
<div>
|
<div>
|
||||||
<a href="mailto:kontakt@technologie.team"
|
<a href="mailto:kontakt@technologie.team"
|
||||||
className="block mb-4 transition-all duration-300 hover:text-white
|
className="block mb-4 transition-all duration-300 hover:text-white
|
||||||
hover:translate-x-1 relative group">
|
hover:translate-x-1 relative group">
|
||||||
<span>kontakt@technologie.team</span>
|
<span>kontakt@technologie.team</span>
|
||||||
<span className="absolute left-0 bottom-0 w-0 h-0.5 bg-[#C25B3F]
|
<span className="absolute left-0 bottom-0 w-0 h-0.5 bg-[#C25B3F]
|
||||||
transition-all duration-300 group-hover:w-full" />
|
transition-all duration-300 group-hover:w-full" />
|
||||||
</a>
|
</a>
|
||||||
<a
|
<a
|
||||||
href="https://linkedin.com"
|
href="https://www.linkedin.com/company/technologie-team"
|
||||||
target="_blank"
|
target="_blank"
|
||||||
rel="noopener noreferrer"
|
rel="noopener noreferrer"
|
||||||
className="inline-block transform transition-all duration-300
|
className="inline-block transform transition-all duration-300
|
||||||
hover:scale-110 focus:outline-none focus:scale-110"
|
hover:scale-110 focus:outline-none focus:scale-110"
|
||||||
aria-label="Besuchen Sie uns auf LinkedIn"
|
aria-label="Besuchen Sie uns auf LinkedIn"
|
||||||
>
|
>
|
||||||
<img
|
<img
|
||||||
src="/images/linkedin.svg"
|
src="/images/linkedin.svg"
|
||||||
alt="LinkedIn"
|
alt="LinkedIn"
|
||||||
className="h-8 w-8 sm:h-10 sm:w-10"
|
className="h-8 w-8 sm:h-10 sm:w-10"
|
||||||
/>
|
/>
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
),
|
),
|
||||||
},
|
},
|
||||||
];
|
];
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<footer className="bg-gray-900 text-gray-400 py-12 sm:py-16">
|
<footer className="bg-gray-900 text-gray-400 py-12 sm:py-16">
|
||||||
<div className="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
|
<div className="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
|
||||||
<div className={`flex flex-col space-y-12 sm:space-y-16
|
<div className={`flex flex-col space-y-12 sm:space-y-16
|
||||||
transition-all duration-700 transform
|
transition-all duration-700 transform
|
||||||
${isVisible ? 'opacity-100 translate-y-0' : 'opacity-0 translate-y-8'}`}>
|
${isVisible ? 'opacity-100 translate-y-0' : 'opacity-0 translate-y-8'}`}>
|
||||||
{/* Logo */}
|
{/* Logo */}
|
||||||
<Link to="/"
|
<Link to="/"
|
||||||
className="block transition-transform duration-300 hover:scale-105
|
className="block transition-transform duration-300 hover:scale-105
|
||||||
focus:outline-none focus:scale-105">
|
focus:outline-none focus:scale-105">
|
||||||
<img
|
<img
|
||||||
src="/logos/tteamhell.png"
|
src="/logos/tteamhell.png"
|
||||||
alt="Technologie Team Logo"
|
alt="Technologie Team Logo"
|
||||||
className="h-12 sm:h-15"
|
className="h-12 sm:h-15"
|
||||||
loading="lazy"
|
loading="lazy"
|
||||||
/>
|
/>
|
||||||
</Link>
|
</Link>
|
||||||
|
|
||||||
{/* Navigation Section */}
|
{/* Navigation Section */}
|
||||||
<div className="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-8 sm:gap-12">
|
<div className="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-8 sm:gap-12">
|
||||||
{sections.map((section, index) => (
|
{sections.map((section, index) => (
|
||||||
<div key={section.title}
|
<div key={section.title}
|
||||||
className={`transition-all duration-500 delay-${index * 100}
|
className={`transition-all duration-500 delay-${index * 100}
|
||||||
${isVisible ? 'opacity-100 translate-y-0' : 'opacity-0 translate-y-4'}`}>
|
${isVisible ? 'opacity-100 translate-y-0' : 'opacity-0 translate-y-4'}`}>
|
||||||
<h3 className="font-outfit text-white font-semibold mb-4 text-base sm:text-lg
|
<h3 className="font-outfit text-white font-semibold mb-4 text-base sm:text-lg
|
||||||
transform transition-all duration-300 hover:text-[#C25B3F]">
|
transform transition-all duration-300 hover:text-[#C25B3F]">
|
||||||
{section.title}
|
{section.title}
|
||||||
</h3>
|
</h3>
|
||||||
{section.content}
|
{section.content}
|
||||||
</div>
|
</div>
|
||||||
))}
|
))}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div className="border-t border-gray-800 mt-12 sm:mt-16 pt-6 sm:pt-8
|
<div className="border-t border-gray-800 mt-12 sm:mt-16 pt-6 sm:pt-8
|
||||||
text-center text-sm text-gray-500">
|
text-center text-sm text-gray-500">
|
||||||
<p className="transition-colors duration-300 hover:text-gray-400">
|
<p className="transition-colors duration-300 hover:text-gray-400">
|
||||||
Copyright © {new Date().getFullYear()} TechnologieTeam
|
Copyright © {new Date().getFullYear()} TechnologieTeam
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</footer>
|
</footer>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@ -4,37 +4,42 @@ const companies = [
|
|||||||
{
|
{
|
||||||
name: 'b.o.c. IT-SECURITY',
|
name: 'b.o.c. IT-SECURITY',
|
||||||
logo: '/images/bocitsec.png',
|
logo: '/images/bocitsec.png',
|
||||||
link: '#'
|
link: 'https://www.boc.de'
|
||||||
},
|
|
||||||
{
|
|
||||||
name: 'GIS',
|
|
||||||
logo: '/images/gis.png',
|
|
||||||
link: '#'
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'RITTER TECHNOLOGIE',
|
name: 'RITTER TECHNOLOGIE',
|
||||||
logo: '/images/rittec.png',
|
logo: '/images/rittec.png',
|
||||||
link: '#'
|
link: 'https://www.rittec.de'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'NETRIX',
|
name: 'GIS',
|
||||||
logo: '/images/netrix.png',
|
logo: '/images/gis.png',
|
||||||
link: '#'
|
link: 'https://www.gis-net.de'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: '2G-KONZEPT',
|
||||||
|
logo: '/images/2gdigital.png',
|
||||||
|
link: 'https://www.2g-konzept.de'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'RITTER digital',
|
name: 'RITTER digital',
|
||||||
logo: '/images/ritterdigital.png',
|
logo: '/images/ritterdigital.png',
|
||||||
link: '#'
|
link: 'https://www.ritterdigital.de'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'LINQ-IT',
|
name: 'LINQ-IT',
|
||||||
logo: '/images/linqit.png',
|
logo: '/images/linqit.png',
|
||||||
link: '#'
|
link: 'https://www.linq-it.de'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: '2G.digital',
|
name: 'NETRIX IT',
|
||||||
logo: '/images/2gdigital.png',
|
logo: '/images/netrix.png',
|
||||||
link: '#'
|
link: 'https://www.netrix-it.de'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'DEMOS COMPUTER',
|
||||||
|
logo: '/images/2gdigital.png', // Placeholder, should be replaced with the actual image
|
||||||
|
link: 'https://www.demoscomputer.de'
|
||||||
}
|
}
|
||||||
];
|
];
|
||||||
|
|
||||||
@ -67,7 +72,7 @@ export default function GroupCompanies() {
|
|||||||
return (
|
return (
|
||||||
<section id="companies" className="py-12 sm:py-16 lg:py-24 bg-white overflow-hidden">
|
<section id="companies" className="py-12 sm:py-16 lg:py-24 bg-white overflow-hidden">
|
||||||
<div className="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
|
<div className="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
|
||||||
<h2 className={`font-outfit text-3xl sm:text-4xl lg:text-5xl font-bold text-[#C25B3F]
|
<h2 className={`font-outfit text-3xl sm:text-4xl lg:text-5xl font-bold text-gray-900
|
||||||
mb-8 sm:mb-12 lg:mb-16 transition-all duration-700
|
mb-8 sm:mb-12 lg:mb-16 transition-all duration-700
|
||||||
${isVisible ? 'opacity-100 translate-y-0' : 'opacity-0 translate-y-8'}`}>
|
${isVisible ? 'opacity-100 translate-y-0' : 'opacity-0 translate-y-8'}`}>
|
||||||
Unsere IT-/Technologie Gruppenunternehmen
|
Unsere IT-/Technologie Gruppenunternehmen
|
||||||
@ -79,6 +84,8 @@ export default function GroupCompanies() {
|
|||||||
<a
|
<a
|
||||||
key={index}
|
key={index}
|
||||||
href={company.link}
|
href={company.link}
|
||||||
|
target="_blank"
|
||||||
|
rel="noopener noreferrer"
|
||||||
className={`
|
className={`
|
||||||
relative bg-white rounded-xl p-4 sm:p-6 lg:p-8
|
relative bg-white rounded-xl p-4 sm:p-6 lg:p-8
|
||||||
transition-all duration-500 ease-out
|
transition-all duration-500 ease-out
|
||||||
@ -98,7 +105,7 @@ export default function GroupCompanies() {
|
|||||||
<img
|
<img
|
||||||
src={company.logo}
|
src={company.logo}
|
||||||
alt={company.name}
|
alt={company.name}
|
||||||
className="w-full max-w-[85%] max-h-[65%] object-contain
|
className="w-full max-w-[95%] max-h-[80%] object-contain
|
||||||
transition-transform duration-500
|
transition-transform duration-500
|
||||||
group-hover:scale-110 will-change-transform"
|
group-hover:scale-110 will-change-transform"
|
||||||
loading="lazy"
|
loading="lazy"
|
||||||
|
|||||||
@ -1,12 +1,38 @@
|
|||||||
import { useState, useEffect } from 'react';
|
import { useState, useEffect } from 'react';
|
||||||
import { Users2, Eye, BarChart3, Settings2, DollarSign, Search, Link2, TrendingUp, GraduationCap, Monitor } from 'lucide-react';
|
import { Users2, Eye, BarChart3, Settings2, DollarSign, Search, Link2, TrendingUp, GraduationCap, Monitor } from 'lucide-react';
|
||||||
|
|
||||||
|
// Geänderte Reihenfolge der Items
|
||||||
const valueItems = [
|
const valueItems = [
|
||||||
|
{
|
||||||
|
icon: TrendingUp,
|
||||||
|
title: 'Personal Perspektive',
|
||||||
|
description: 'Individuelle Fördermöglichkeiten in einem großen Ökosystem, mit agilen Entscheidungswegen.'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
icon: DollarSign,
|
||||||
|
title: 'Finanzielle Hebel',
|
||||||
|
description: 'Finanzielle Stärken bündeln und zum Wohle der Gesamtlösung einsetzen.'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
icon: Settings2,
|
||||||
|
title: 'Operative Hebel',
|
||||||
|
description: 'Gemeinsame Stärken nutzen und durchgängige Experten-Lösungen schaffen.'
|
||||||
|
},
|
||||||
{
|
{
|
||||||
icon: Users2,
|
icon: Users2,
|
||||||
title: 'Management Team',
|
title: 'Management Team',
|
||||||
description: 'Ein erfahrenes, kompetentes Managementteam sorgt für strategische Unterstützung.'
|
description: 'Ein erfahrenes, kompetentes Managementteam sorgt für strategische Unterstützung.'
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
icon: Search,
|
||||||
|
title: 'Recruiting',
|
||||||
|
description: 'Unterstützung durch Personal-Experten'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
icon: GraduationCap,
|
||||||
|
title: 'Ausbildung',
|
||||||
|
description: 'Kontinuierliche Schulung und Weiterentwicklung der Mitarbeiterkompetenzen.'
|
||||||
|
},
|
||||||
{
|
{
|
||||||
icon: Eye,
|
icon: Eye,
|
||||||
title: 'Fokus auf Transparenz',
|
title: 'Fokus auf Transparenz',
|
||||||
@ -17,36 +43,11 @@ const valueItems = [
|
|||||||
title: 'Schlankes Reporting',
|
title: 'Schlankes Reporting',
|
||||||
description: 'Ein effektives Berichtssystem ermöglicht es sich auf seine Aufgaben zu konzentrieren und agil zu reagieren.'
|
description: 'Ein effektives Berichtssystem ermöglicht es sich auf seine Aufgaben zu konzentrieren und agil zu reagieren.'
|
||||||
},
|
},
|
||||||
{
|
|
||||||
icon: Settings2,
|
|
||||||
title: 'Operative Hebel',
|
|
||||||
description: 'Gemeinsame Stärken nutzen und durchgängige Experten-Lösungen schaffen.'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
icon: DollarSign,
|
|
||||||
title: 'Finanzielle Hebel',
|
|
||||||
description: 'Finanzielle Stärken bündeln und zum Wohle der Gesamtlösung einsetzen.'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
icon: Search,
|
|
||||||
title: 'Recruiting',
|
|
||||||
description: 'Unterstützung durch Personal-Experten'
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
icon: Link2,
|
icon: Link2,
|
||||||
title: 'Gruppenzugehörigkeit',
|
title: 'Gruppenzugehörigkeit',
|
||||||
description: 'Mehr aus den einzelnen Möglichkeiten rausholen und gemeinsam bessere Lösungen und Entwicklungen schaffen.'
|
description: 'Mehr aus den einzelnen Möglichkeiten rausholen und gemeinsam bessere Lösungen und Entwicklungen schaffen.'
|
||||||
},
|
},
|
||||||
{
|
|
||||||
icon: TrendingUp,
|
|
||||||
title: 'Personal Perspektive',
|
|
||||||
description: 'Individuelle Fördermöglichkeiten in einem großen Ökosystem, mit agilen Entscheidungswegen.'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
icon: GraduationCap,
|
|
||||||
title: 'Ausbildung',
|
|
||||||
description: 'Kontinuierliche Schulung und Weiterentwicklung der Mitarbeiterkompetenzen.'
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
icon: Monitor,
|
icon: Monitor,
|
||||||
title: 'Digitalisierung',
|
title: 'Digitalisierung',
|
||||||
@ -82,14 +83,14 @@ export default function GroupValue() {
|
|||||||
return (
|
return (
|
||||||
<section id="group-value" className="bg-[#C25B3F] py-12 sm:py-16 lg:py-24 overflow-hidden">
|
<section id="group-value" className="bg-[#C25B3F] py-12 sm:py-16 lg:py-24 overflow-hidden">
|
||||||
<div className="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
|
<div className="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
|
||||||
<div className={`mb-8 sm:mb-12 lg:mb-16 max-w-3xl mx-auto text-center
|
<div className={`mb-8 sm:mb-12 lg:mb-16 mx-auto text-center
|
||||||
${isVisible ? 'animate-fade-in' : 'opacity-0'}`}>
|
${isVisible ? 'animate-fade-in' : 'opacity-0'}`}>
|
||||||
<h2 className="font-outfit text-3xl sm:text-4xl lg:text-5xl font-bold text-white mb-4 sm:mb-8
|
<h2 className="font-outfit text-3xl sm:text-4xl lg:text-5xl font-bold text-white mb-4 sm:mb-8
|
||||||
section-enter section-enter-active">
|
section-enter section-enter-active">
|
||||||
Unser Gruppenmehrwert
|
Unser Gruppenmehrwert
|
||||||
</h2>
|
</h2>
|
||||||
<p className="font-outfit text-base sm:text-lg text-white/90 leading-relaxed
|
<p className="font-outfit text-base sm:text-lg text-white/90 leading-relaxed
|
||||||
section-enter section-enter-active delay-100">
|
section-enter section-enter-active delay-100 max-w-full">
|
||||||
IT-/Technologieunternehmen zeichnen sich durch ihre Kompetenz und die exzellente Umsetzung von
|
IT-/Technologieunternehmen zeichnen sich durch ihre Kompetenz und die exzellente Umsetzung von
|
||||||
Kundenanforderungen aus. Unser Ziel ist es, diese Qualitäten zu erhalten, die Unternehmenskultur
|
Kundenanforderungen aus. Unser Ziel ist es, diese Qualitäten zu erhalten, die Unternehmenskultur
|
||||||
zu wahren und Raum für weiteres Wachstum und Entwicklung zu schaffen.
|
zu wahren und Raum für weiteres Wachstum und Entwicklung zu schaffen.
|
||||||
|
|||||||
@ -1,4 +1,3 @@
|
|||||||
import { Link } from 'react-router-dom';
|
|
||||||
import { useState, useEffect } from 'react';
|
import { useState, useEffect } from 'react';
|
||||||
|
|
||||||
export default function Hero() {
|
export default function Hero() {
|
||||||
@ -38,14 +37,14 @@ export default function Hero() {
|
|||||||
UNTERNEHMENSGRUPPE
|
UNTERNEHMENSGRUPPE
|
||||||
</span>
|
</span>
|
||||||
</h1>
|
</h1>
|
||||||
<p className="font-outfit text-lg xs:text-xl sm:text-2xl md:text-3xl text-gray-200
|
<p className="font-outfit text-xl xs:text-2xl sm:text-3xl md:text-4xl text-gray-200
|
||||||
mb-6 sm:mb-8 md:mb-12 tracking-normal leading-relaxed
|
mb-6 sm:mb-8 md:mb-12 tracking-normal leading-relaxed font-bold
|
||||||
section-enter section-enter-active delay-200">
|
section-enter section-enter-active delay-200">
|
||||||
Gemeinsam Stärker | Für Unsere Kunden | Durchgängig In Ihren Prozessen
|
Gemeinsam Stärker | Für Unsere Kunden | Durchgängig In Ihren Prozessen
|
||||||
</p>
|
</p>
|
||||||
<div className="section-enter section-enter-active delay-300">
|
<div className="section-enter section-enter-active delay-300 flex flex-col sm:flex-row sm:items-center gap-4">
|
||||||
<Link
|
<a
|
||||||
to="/mehr"
|
href="mailto:kontakt@technologie.team?subject=Gruppenbeitritt%20anfragen"
|
||||||
className="group relative font-outfit inline-flex items-center justify-center
|
className="group relative font-outfit inline-flex items-center justify-center
|
||||||
overflow-hidden rounded bg-[#C25B3F] px-6 sm:px-8 py-3 sm:py-4
|
overflow-hidden rounded bg-[#C25B3F] px-6 sm:px-8 py-3 sm:py-4
|
||||||
text-base sm:text-lg md:text-xl font-medium uppercase tracking-wide
|
text-base sm:text-lg md:text-xl font-medium uppercase tracking-wide
|
||||||
@ -54,7 +53,7 @@ export default function Hero() {
|
|||||||
hover:bg-[#A34832]"
|
hover:bg-[#A34832]"
|
||||||
>
|
>
|
||||||
<span className="flex items-center gap-2">
|
<span className="flex items-center gap-2">
|
||||||
Mehr erfahren
|
Gruppenbeitritt anfragen
|
||||||
<svg
|
<svg
|
||||||
className="w-4 h-4"
|
className="w-4 h-4"
|
||||||
fill="none"
|
fill="none"
|
||||||
@ -69,7 +68,14 @@ export default function Hero() {
|
|||||||
/>
|
/>
|
||||||
</svg>
|
</svg>
|
||||||
</span>
|
</span>
|
||||||
</Link>
|
</a>
|
||||||
|
<a
|
||||||
|
href="mailto:kontakt@technologie.team"
|
||||||
|
className="font-outfit text-white text-base sm:text-lg md:text-xl
|
||||||
|
hover:text-[#C25B3F] transition-colors duration-300"
|
||||||
|
>
|
||||||
|
kontakt@technologie.team
|
||||||
|
</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@ -59,9 +59,9 @@ export default function Mission() {
|
|||||||
|
|
||||||
{/* Mission Text Content */}
|
{/* Mission Text Content */}
|
||||||
<div className="lg:col-span-8">
|
<div className="lg:col-span-8">
|
||||||
<h2 className="font-outfit text-3xl sm:text-4xl lg:text-5xl font-bold text-[#C25B3F]
|
<h2 className="font-outfit text-3xl sm:text-4xl lg:text-5xl font-bold text-gray-900
|
||||||
mb-8 sm:mb-12 section-enter section-enter-active">
|
mb-8 sm:mb-12 section-enter section-enter-active">
|
||||||
Unser Leitbild
|
Unser Leitbild - Expertise in der Nachfolge
|
||||||
</h2>
|
</h2>
|
||||||
|
|
||||||
<div className="space-y-6 sm:space-y-8">
|
<div className="space-y-6 sm:space-y-8">
|
||||||
|
|||||||
@ -70,7 +70,7 @@ export default function Technologies() {
|
|||||||
{/* Header */}
|
{/* Header */}
|
||||||
<div className="flex items-center justify-between mb-6">
|
<div className="flex items-center justify-between mb-6">
|
||||||
<h2 className="font-outfit text-2xl sm:text-3xl font-bold text-[#C25B3F]">
|
<h2 className="font-outfit text-2xl sm:text-3xl font-bold text-[#C25B3F]">
|
||||||
Unterstützte Technologien
|
Unterstützte Technologien in der gesamten Prozesskette
|
||||||
</h2>
|
</h2>
|
||||||
{!isMobile && (
|
{!isMobile && (
|
||||||
<div className="flex gap-3">
|
<div className="flex gap-3">
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user