Emy/public/galerie/index.html
2026-06-17 23:26:21 +02:00

363 lines
19 KiB
HTML
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html>
<html class="scroll-smooth" lang="de">
<head><script src="/livereload.js?mindelay=10&amp;v=2&amp;port=1313&amp;path=livereload" data-no-instant defer></script>
<meta charset="utf-8"/>
<meta content="width=device-width, initial-scale=1.0" name="viewport"/>
<title>Galerie | EmyKarate</title>
<script src="https://cdn.tailwindcss.com?plugins=forms,container-queries"></script>
<link href="https://fonts.googleapis.com/css2?family=Outfit:wght@300;400;500;600;700;800;900&family=Lexend:wght@300;400;600;700;800;900&family=Be+Vietnam+Pro:wght@300;400;500;600;700&display=swap" rel="stylesheet"/>
<link href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:wght,FILL@100..700,0..1&display=swap" rel="stylesheet"/>
<script id="tailwind-config">
tailwind.config = {
darkMode: "class",
theme: {
extend: {
"colors": {
"tertiary-container": "#ffffff", "surface-bright": "#f5f6f7",
"on-tertiary-container": "#636262", "error-dim": "#a70138",
"on-surface-variant": "#595c5d", "surface-tint": "#b30065",
"surface-container-highest": "#dadddf", "on-secondary-fixed-variant": "#7d21a4",
"inverse-on-surface": "#9b9d9e", "inverse-surface": "#0c0f10",
"surface-container": "#e6e8ea", "surface": "#f5f6f7",
"primary-fixed": "#ff6ea9", "surface-container-low": "#eff1f2",
"secondary": "#8930b0", "tertiary": "#5c5b5b",
"on-secondary": "#ffedff", "secondary-dim": "#7c20a3",
"secondary-container": "#f0c1ff", "surface-dim": "#d1d5d7",
"primary": "#b30065", "on-primary-fixed": "#000000",
"surface-container-high": "#e0e3e4", "primary-fixed-dim": "#ff4e9e",
"primary-dim": "#9d0058", "outline": "#757778",
"error": "#b41340", "outline-variant": "#abadae",
"secondary-fixed": "#f0c1ff", "secondary-fixed-dim": "#eaaeff",
"tertiary-fixed-dim": "#f3f0ef", "on-surface": "#2c2f30",
"on-tertiary-fixed-variant": "#6e6d6d", "on-tertiary": "#f5f2f1",
"tertiary-fixed": "#ffffff", "background": "#f5f6f7",
"on-primary": "#ffeff2", "surface-container-lowest": "#ffffff",
"inverse-primary": "#ff479c", "primary-container": "#ff6ea9",
"on-primary-fixed-variant": "#5c0031", "on-secondary-container": "#72129a",
"error-container": "#f74b6d", "surface-variant": "#dadddf",
"on-background": "#2c2f30", "on-error": "#ffefef",
"on-tertiary-fixed": "#515050", "tertiary-dim": "#504f4f",
"on-primary-container": "#4b0027", "on-secondary-fixed": "#580079",
"on-error-container": "#510017"
},
"borderRadius": {
"DEFAULT": "1rem", "lg": "2rem", "xl": "3rem", "full": "9999px"
},
"fontFamily": {
"headline": ["Outfit", "Lexend"], "body": ["Outfit", "Be Vietnam Pro"], "label": ["Be Vietnam Pro"]
}
},
},
}
</script>
<style>
.material-symbols-outlined { font-variation-settings: 'FILL' 0, 'wght' 400, 'GRAD' 0, 'opsz' 24; }
.editorial-shadow { box-shadow: 0 24px 40px -12px rgba(44, 47, 48, 0.06); }
.no-scrollbar::-webkit-scrollbar { display: none; }
.nav-link-modern {
position: relative;
padding-bottom: 4px;
display: flex;
flex-direction: column;
align-items: center;
transition: all 0.3s ease;
}
.nav-link-modern .jap-text {
position: absolute;
top: -24px;
font-size: 1rem;
font-family: 'Noto Serif JP', serif;
opacity: 0;
transform: translateY(5px);
transition: all 0.3s ease;
color: #b30065;
white-space: nowrap;
font-weight: 900;
letter-spacing: 0.1em;
}
.nav-link-modern:hover .jap-text {
opacity: 0.6;
transform: translateY(0);
}
.nav-link-modern.active .jap-text {
opacity: 0.8;
transform: translateY(0);
}
.header-floating {
top: 1rem;
left: 50%;
transform: translateX(-50%);
width: calc(100% - 2rem);
border-radius: 1.5rem;
height: 6rem;
transition: all 0.3s ease;
}
.header-scrolled {
top: 0;
width: 100%;
border-radius: 0;
height: 5rem;
background: rgba(255, 255, 255, 0.9) !important;
}
.btn-glow {
position: relative;
overflow: hidden;
}
.btn-glow::before {
content: '';
position: absolute;
top: -50%;
left: -50%;
width: 200%;
height: 200%;
background: radial-gradient(circle, rgba(255,255,255,0.3) 0%, transparent 70%);
transform: scale(0);
transition: transform 0.6s ease-out;
}
.btn-glow:hover::before {
transform: scale(1);
}
</style>
</head>
<body class="bg-surface font-body text-on-surface selection:bg-primary-container selection:text-on-primary-container">
<nav id="mainNav" class="fixed z-50 bg-white/80 dark:bg-zinc-900/80 backdrop-blur-xl shadow-2xl shadow-pink-500/10 header-floating border border-white/20 dark:border-zinc-800/50">
<div class="flex justify-between items-center h-full px-6 md:px-10 max-w-screen-2xl mx-auto">
<a href="/" class="flex items-center gap-2 group transition-all duration-500">
<div class="w-10 h-10 bg-gradient-to-br from-primary to-primary-container rounded-lg flex items-center justify-center text-white shadow-lg group-hover:rotate-12 transition-transform">
<span class="material-symbols-outlined text-xl" style="font-variation-settings:'FILL' 1">sports_martial_arts</span>
</div>
<span class="text-xl font-black text-on-surface dark:text-white italic font-headline tracking-tighter uppercase">EmyKarate</span>
</a>
<div class="hidden md:flex items-center gap-10">
<a class="nav-link-modern font-bold font-headline tracking-tight uppercase text-sm hover:text-primary transition-colors text-zinc-500 dark:text-zinc-400" href="/">
<span class="relative z-10">Home</span>
<span class="jap-text">ホーム</span>
</a>
<a class="nav-link-modern font-bold font-headline tracking-tight uppercase text-sm hover:text-primary transition-colors active text-primary dark:text-pink-400" href="/galerie/">
<span class="relative z-10">Galerie</span>
<span class="jap-text">ギャラリー</span>
</a>
<a class="nav-link-modern font-bold font-headline tracking-tight uppercase text-sm hover:text-primary transition-colors text-zinc-500 dark:text-zinc-400" href="/uebermich/">
<span class="relative z-10">Über mich</span>
<span class="jap-text">私について</span>
</a>
<a class="nav-link-modern font-bold font-headline tracking-tight uppercase text-sm hover:text-primary transition-colors text-zinc-500 dark:text-zinc-400" href="/erfolge/">
<span class="relative z-10">Erfolge</span>
<span class="jap-text">成果</span>
</a>
<a class="nav-link-modern font-bold font-headline tracking-tight uppercase text-sm hover:text-primary transition-colors text-zinc-500 dark:text-zinc-400" href="/gaestebuch/">
<span class="relative z-10">Gästebuch</span>
<span class="jap-text">ゲストブック</span>
</a>
</div>
<div class="flex items-center gap-4">
<button onclick="document.getElementById('kontaktModal').classList.remove('hidden')" class="btn-glow hidden sm:flex items-center gap-2 bg-on-surface text-white dark:bg-white dark:text-on-surface px-6 py-2.5 rounded-full font-bold font-headline tracking-tight uppercase text-xs shadow-xl hover:shadow-primary/20 hover:-translate-y-0.5 transition-all">
<span>Kontakt</span><span class="material-symbols-outlined text-sm">send</span>
</button>
<button onclick="toggleMobileMenu()" class="md:hidden w-10 h-10 flex items-center justify-center rounded-full bg-surface-container-high text-primary">
<span class="material-symbols-outlined">menu</span>
</button>
</div>
</div>
</nav>
<div id="mobileMenu" class="hidden fixed inset-0 z-40 bg-white dark:bg-zinc-900 p-6 pt-24">
<div class="flex flex-col gap-6 text-xl font-headline font-bold uppercase tracking-tight">
<a href="/" onclick="toggleMobileMenu()" class="nav-link-modern">Home</a>
<a href="/galerie/" onclick="toggleMobileMenu()" class="nav-link-modern">Galerie</a>
<a href="/uebermich/" onclick="toggleMobileMenu()" class="nav-link-modern">Über mich</a>
<a href="/erfolge/" onclick="toggleMobileMenu()" class="nav-link-modern">Erfolge</a>
<a href="/gaestebuch/" onclick="toggleMobileMenu()" class="nav-link-modern">Gästebuch</a>
</div>
</div>
<main class="pt-32 pb-20 px-6 max-w-7xl mx-auto">
<header class="mb-16 relative">
<span class="font-label text-sm uppercase tracking-[0.2em] font-bold text-primary mb-4 block">Visuelle Reise</span>
<h1 class="font-headline text-5xl md:text-7xl font-black text-on-surface leading-[1.1] tracking-tight mb-6">
Eingefangene<br/>
<span class="text-transparent bg-clip-text bg-gradient-to-r from-primary to-secondary">Momente</span>
</h1>
<p class="max-w-xl text-on-surface-variant text-lg leading-relaxed">
Die Kunst der Disziplin durch die Linse. Von intensiven Trainingseinheiten bis zum Triumph bei Gürtelprüfungen.
</p>
</header>
<div class="flex flex-wrap items-center gap-3 mb-12" id="filterBar">
<button data-filter="Alle" class="filter-btn px-6 py-3 rounded-full bg-secondary text-on-secondary font-bold text-sm tracking-wide shadow-lg shadow-secondary/20 active:scale-95 transition-transform">Alle</button>
<button data-filter="Training" class="filter-btn px-6 py-3 rounded-full bg-surface-container-low text-on-surface-variant font-bold text-sm tracking-wide hover:bg-surface-container-high transition-all active:scale-95">Training</button>
<button data-filter="Wettkämpfe" class="filter-btn px-6 py-3 rounded-full bg-surface-container-low text-on-surface-variant font-bold text-sm tracking-wide hover:bg-surface-container-high transition-all active:scale-95">Wettkämpfe</button>
<button data-filter="Gürtelprüfungen" class="filter-btn px-6 py-3 rounded-full bg-surface-container-low text-on-surface-variant font-bold text-sm tracking-wide hover:bg-surface-container-high transition-all active:scale-95">Gürtelprüfungen</button>
<button data-filter="Haudrauf" class="filter-btn px-6 py-3 rounded-full bg-surface-container-low text-on-surface-variant font-bold text-sm tracking-wide hover:bg-surface-container-high transition-all active:scale-95">Haudrauf</button>
</div>
<div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-8" id="galleryGrid">
<div class="gallery-item group relative aspect-square rounded-2xl overflow-hidden cursor-pointer bg-surface-container-highest shadow-sm hover:shadow-2xl transition-all duration-500"
data-kat="Haudrauf" onclick="openLightbox(this)">
<img src="/gallery/images/1778361895205-amw83.webp" alt="EF75AE9A-1670-46F8-AB04-798D22334E66" class="w-full h-full object-cover transition-transform duration-700 group-hover:scale-110 grayscale group-hover:grayscale-0"/>
<div class="absolute inset-0 bg-gradient-to-t from-black/80 via-transparent to-transparent opacity-0 group-hover:opacity-100 transition-opacity duration-300 flex flex-col justify-end p-6">
<span class="text-primary-fixed font-bold text-xs uppercase tracking-widest mb-1">Haudrauf</span>
<h3 class="text-white text-lg font-bold font-headline">EF75AE9A-1670-46F8-AB04-798D22334E66</h3>
</div>
</div>
<div class="gallery-item group relative aspect-square rounded-2xl overflow-hidden cursor-pointer bg-surface-container-highest shadow-sm hover:shadow-2xl transition-all duration-500"
data-kat="Haudrauf" onclick="openLightbox(this)">
<img src="/gallery/images/1777571196788-em155.webp" alt="254E64FC-1F3E-4694-9828-28C620DB7A0D_1_105_c" class="w-full h-full object-cover transition-transform duration-700 group-hover:scale-110 grayscale group-hover:grayscale-0"/>
<div class="absolute inset-0 bg-gradient-to-t from-black/80 via-transparent to-transparent opacity-0 group-hover:opacity-100 transition-opacity duration-300 flex flex-col justify-end p-6">
<span class="text-primary-fixed font-bold text-xs uppercase tracking-widest mb-1">Haudrauf</span>
<h3 class="text-white text-lg font-bold font-headline">254E64FC-1F3E-4694-9828-28C620DB7A0D_1_105_c</h3>
</div>
</div>
<div class="gallery-item group relative aspect-square rounded-2xl overflow-hidden cursor-pointer bg-surface-container-highest shadow-sm hover:shadow-2xl transition-all duration-500"
data-kat="Training" onclick="openLightbox(this)">
<img src="/gallery/images/1775774640975-43j95.webp" alt="IMG_1106" class="w-full h-full object-cover transition-transform duration-700 group-hover:scale-110 grayscale group-hover:grayscale-0"/>
<div class="absolute inset-0 bg-gradient-to-t from-black/80 via-transparent to-transparent opacity-0 group-hover:opacity-100 transition-opacity duration-300 flex flex-col justify-end p-6">
<span class="text-primary-fixed font-bold text-xs uppercase tracking-widest mb-1">Training</span>
<h3 class="text-white text-lg font-bold font-headline">IMG_1106</h3>
</div>
</div>
<div class="gallery-item group relative aspect-square rounded-2xl overflow-hidden cursor-pointer bg-surface-container-highest shadow-sm hover:shadow-2xl transition-all duration-500"
data-kat="Wettkämpfe" onclick="openLightbox(this)">
<img src="/gallery/images/1775774312130-1yqrc.webp" alt="Test" class="w-full h-full object-cover transition-transform duration-700 group-hover:scale-110 grayscale group-hover:grayscale-0"/>
<div class="absolute inset-0 bg-gradient-to-t from-black/80 via-transparent to-transparent opacity-0 group-hover:opacity-100 transition-opacity duration-300 flex flex-col justify-end p-6">
<span class="text-primary-fixed font-bold text-xs uppercase tracking-widest mb-1">Wettkämpfe</span>
<h3 class="text-white text-lg font-bold font-headline">Test</h3>
</div>
</div>
<div class="gallery-item group relative aspect-square rounded-2xl overflow-hidden cursor-pointer bg-surface-container-highest shadow-sm hover:shadow-2xl transition-all duration-500"
data-kat="Wettkämpfe" onclick="openLightbox(this)">
<img src="/gallery/images/1775774187000-q74m0.webp" alt="Test" class="w-full h-full object-cover transition-transform duration-700 group-hover:scale-110 grayscale group-hover:grayscale-0"/>
<div class="absolute inset-0 bg-gradient-to-t from-black/80 via-transparent to-transparent opacity-0 group-hover:opacity-100 transition-opacity duration-300 flex flex-col justify-end p-6">
<span class="text-primary-fixed font-bold text-xs uppercase tracking-widest mb-1">Wettkämpfe</span>
<h3 class="text-white text-lg font-bold font-headline">Test</h3>
</div>
</div>
</div>
</main>
<section class="bg-surface-container-low py-20 px-6">
<div class="max-w-7xl mx-auto flex flex-col md:flex-row justify-between items-center gap-12">
<div class="flex-1">
<h2 class="font-headline text-3xl font-bold mb-4">Hinter der Linse ha</h2>
<p class="text-on-surface-variant max-w-md">Unsere Galerie ist nicht nur Fotos sie ist ein Zeugnis der Disziplin, die wir jeden Tag im Dojo leben.</p>
</div>
<div class="flex gap-8 overflow-x-auto pb-4 no-scrollbar w-full md:w-auto">
<div class="flex-shrink-0 text-center">
<p class="text-4xl font-black text-primary font-headline">24</p>
<p class="text-xs uppercase tracking-widest font-bold opacity-60">Turniere</p>
</div>
<div class="h-12 w-px bg-outline-variant/30 hidden md:block"></div>
<div class="flex-shrink-0 text-center">
<p class="text-4xl font-black text-secondary font-headline">20</p>
<p class="text-xs uppercase tracking-widest font-bold opacity-60">Schüler</p>
</div>
<div class="h-12 w-px bg-outline-variant/30 hidden md:block"></div>
<div class="flex-shrink-0 text-center">
<p class="text-4xl font-black text-primary font-headline">6</p>
<p class="text-xs uppercase tracking-widest font-bold opacity-60">Gürtelprüfungen</p>
</div>
</div>
</div>
</section>
<footer class="bg-zinc-50 dark:bg-zinc-950 w-full rounded-t-[3rem] mt-20">
<div class="flex flex-col md:flex-row justify-between items-center py-12 px-8 max-w-7xl mx-auto gap-6 text-sm tracking-wide">
<div class="text-lg font-bold text-zinc-900 dark:text-zinc-100 font-headline uppercase italic">EmyKarate</div>
<div class="flex gap-8">
<a class="text-zinc-500 hover:text-pink-500 hover:underline transition-opacity" href="#">Instagram</a>
<a class="text-zinc-500 hover:text-pink-500 hover:underline transition-opacity" href="#">YouTube</a>
<a class="text-zinc-500 hover:text-pink-500 hover:underline transition-opacity" href="mailto:hallo@emy-karate.de">Email</a>
</div>
<div class="text-zinc-500">© 2024 EmyKarate. Alle Rechte vorbehalten.</div>
</div>
</footer>
<div class="fixed inset-0 z-[100] bg-black/90 backdrop-blur-xl hidden items-center justify-center p-6 md:p-20" id="lightbox">
<button class="absolute top-10 right-10 text-white hover:text-primary transition-colors" onclick="closeLightbox()">
<span class="material-symbols-outlined text-4xl">close</span>
</button>
<img class="max-w-full max-h-full rounded-lg shadow-2xl" id="lightbox-img" src="" alt=""/>
</div>
<script>
function openLightbox(el) {
const img = el.querySelector('img');
document.getElementById('lightbox-img').src = img.src;
document.getElementById('lightbox-img').alt = img.alt;
const lb = document.getElementById('lightbox');
lb.classList.remove('hidden');
lb.classList.add('flex');
}
function closeLightbox() {
const lb = document.getElementById('lightbox');
lb.classList.add('hidden');
lb.classList.remove('flex');
}
document.getElementById('lightbox').addEventListener('click', function(e) {
if (e.target === this) closeLightbox();
});
document.getElementById('filterBar').addEventListener('click', function(e) {
const btn = e.target.closest('.filter-btn');
if (!btn) return;
const filter = btn.dataset.filter;
document.querySelectorAll('.filter-btn').forEach(b => {
const active = b === btn;
b.classList.toggle('bg-secondary', active);
b.classList.toggle('text-on-secondary', active);
b.classList.toggle('bg-surface-container-low', !active);
});
document.querySelectorAll('.gallery-item').forEach(item => {
const show = filter === 'Alle' || item.dataset.kat === filter;
item.style.display = show ? '' : 'none';
});
});
window.addEventListener('scroll', () => {
const nav = document.getElementById('mainNav');
if (nav && window.scrollY > 50) {
nav.classList.add('header-scrolled');
} else if (nav) {
nav.classList.remove('header-scrolled');
}
});
function toggleMobileMenu() {
var menu = document.getElementById('mobileMenu');
if (menu) menu.classList.toggle('hidden');
}
</script>
</body>
</html>