Files
harheimertc/components/Calendar.vue
2025-12-20 10:17:16 +01:00

135 lines
4.6 KiB
Vue

<template>
<section
id="calendar"
class="py-16 sm:py-20 bg-white"
>
<div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
<div class="text-center mb-16">
<h2 class="text-4xl sm:text-5xl font-display font-bold text-gray-900 mb-4">
Termine & Events
</h2>
<div class="w-24 h-1 bg-primary-600 mx-auto mb-6" />
<p class="text-xl text-gray-600 max-w-3xl mx-auto">
Entdecken Sie unsere kommenden Veranstaltungen und Turniere
</p>
</div>
<div class="relative">
<!-- Timeline line -->
<div class="hidden lg:block absolute left-1/2 transform -translate-x-1/2 h-full w-0.5 bg-gradient-to-b from-primary-200 via-primary-400 to-primary-200" />
<div class="space-y-12">
<div
v-for="(event, index) in events"
:key="event.title"
:class="[
'relative flex items-center',
index % 2 === 0 ? 'lg:flex-row' : 'lg:flex-row-reverse'
]"
>
<div :class="['w-full lg:w-5/12', index % 2 === 0 ? 'lg:pr-12' : 'lg:pl-12']">
<div class="bg-white rounded-2xl shadow-lg hover:shadow-2xl transition-shadow p-6 border border-gray-100">
<div class="flex items-start space-x-4">
<div :class="['flex-shrink-0 w-14 h-14 bg-gradient-to-br rounded-xl flex items-center justify-center', event.color]">
<component
:is="event.icon"
:size="28"
class="text-white"
/>
</div>
<div class="flex-1">
<div class="text-sm font-semibold text-primary-600 mb-1">
{{ event.date }}
</div>
<h3 class="text-xl font-display font-bold text-gray-900 mb-2">
{{ event.title }}
</h3>
<p class="text-gray-600">
{{ event.description }}
</p>
</div>
</div>
</div>
</div>
<!-- Timeline dot -->
<div class="hidden lg:block absolute left-1/2 transform -translate-x-1/2">
<div :class="['w-4 h-4 bg-gradient-to-br rounded-full border-4 border-white shadow-lg', event.color]" />
</div>
<div class="hidden lg:block w-5/12" />
</div>
</div>
</div>
<div class="mt-16 text-center">
<div class="bg-gray-50 rounded-2xl p-8 max-w-2xl mx-auto">
<CalendarIcon
:size="48"
class="text-primary-600 mx-auto mb-4"
/>
<h3 class="text-2xl font-display font-bold text-gray-900 mb-3">
Regelmäßige Angebote
</h3>
<div class="space-y-2 text-gray-700">
<p><strong>Dienstag & Donnerstag:</strong> Jugendtraining (17:00 - 19:00 Uhr)</p>
<p><strong>Mittwoch:</strong> Hobbygruppe (19:00 - 21:00 Uhr)</p>
<p><strong>Freitag:</strong> Wettkampftraining (18:00 - 20:00 Uhr)</p>
<p><strong>Wochenende:</strong> Punktspiele & Ligabetrieb</p>
</div>
</div>
</div>
</div>
</section>
</template>
<script setup>
import { Calendar as CalendarIcon, Trophy, Users, PartyPopper } from 'lucide-vue-next'
const events = [
{
date: '15. Mai 2025',
title: 'Saisoneröffnung',
description: 'Offizieller Start in die Tennissaison mit großem Eröffnungsfest',
icon: PartyPopper,
color: 'from-pink-500 to-rose-500',
},
{
date: '20-22. Juni 2025',
title: 'Clubmeisterschaft',
description: 'Spannende Matches um den Clubmeister-Titel',
icon: Trophy,
color: 'from-yellow-500 to-orange-500',
},
{
date: '15. Juli 2025',
title: 'Jugend-Turnier',
description: 'Nachwuchsturnier für alle Altersklassen',
icon: Users,
color: 'from-blue-500 to-cyan-500',
},
{
date: '10. August 2025',
title: 'Sommerfest',
description: 'Geselliges Beisammensein mit Grillen und Live-Musik',
icon: PartyPopper,
color: 'from-green-500 to-emerald-500',
},
{
date: '1-3. September 2025',
title: 'Vereinsmeisterschaft',
description: 'Das Highlight der Saison - Vereinsmeisterschaft in allen Kategorien',
icon: Trophy,
color: 'from-purple-500 to-indigo-500',
},
{
date: '30. September 2025',
title: 'Saisonabschluss',
description: 'Gemütlicher Ausklang der Saison mit Siegerehrung',
icon: CalendarIcon,
color: 'from-red-500 to-pink-500',
},
]
</script>