135 lines
4.6 KiB
Vue
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>
|
|
|