first commit
Some checks failed
linter / quality (push) Has been cancelled
tests / ci (push) Has been cancelled

This commit is contained in:
Kevin Adametz 2025-10-20 17:53:02 +02:00
commit 405df0a122
3083 changed files with 69203 additions and 0 deletions

View file

@ -0,0 +1,118 @@
@props([
'title',
'teaser',
'company',
'industry',
'region',
'date',
'hasImage' => false,
'hasPdf' => false,
'companyLogo' => null,
'slug',
'imageUrl' => null,
])
<article class="group bg-white dark:bg-gray-900 rounded-xl border border-gray-200 dark:border-gray-800 overflow-hidden transition-all duration-300 hover:shadow-lg hover:border-[var(--color-primary)]/20 hover:scale-[1.02] shadow-sm">
<!-- Image Preview -->
<div class="relative h-48 bg-gradient-to-br from-gray-100 to-gray-50 dark:from-gray-800 dark:to-gray-900 overflow-hidden">
@if($imageUrl)
<img
src="{{ $imageUrl }}"
alt="{{ $title }}"
class="w-full h-full object-cover group-hover:scale-105 transition-transform duration-300"
loading="lazy"
/>
@else
<div class="w-full h-full flex items-center justify-center bg-gradient-to-br from-[var(--color-primary)]/5 to-[var(--color-secondary)]/5">
<svg class="h-16 w-16 text-gray-300" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 16l4.586-4.586a2 2 0 012.828 0L16 16m-2-2l1.586-1.586a2 2 0 012.828 0L20 14m-6-6h.01M6 20h12a2 2 0 002-2V6a2 2 0 00-2-2H6a2 2 0 00-2 2v12a2 2 0 002 2z"></path>
</svg>
</div>
@endif
<!-- Company Logo Overlay -->
@if($companyLogo)
<div class="absolute bottom-3 left-3 w-12 h-12 rounded-lg bg-white/95 dark:bg-gray-800/95 backdrop-blur-sm shadow-md flex items-center justify-center border border-gray-200/50 dark:border-gray-700/50">
<svg class="h-6 w-6 text-[var(--color-primary)]" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M19 21V5a2 2 0 00-2-2H7a2 2 0 00-2 2v16m14 0h2m-2 0h-5m-9 0H3m2 0h5M9 7h1m-1 4h1m4-4h1m-1 4h1m-5 10v-5a1 1 0 011-1h2a1 1 0 011 1v5m-4 0h4"></path>
</svg>
</div>
@endif
</div>
<!-- Content -->
<div class="p-5">
<!-- Company Name -->
@if(!$companyLogo)
<div class="mb-3 flex items-center gap-2">
<svg class="h-4 w-4 text-gray-600 dark:text-gray-400" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M19 21V5a2 2 0 00-2-2H7a2 2 0 00-2 2v16m14 0h2m-2 0h-5m-9 0H3m2 0h5M9 7h1m-1 4h1m4-4h1m-1 4h1m-5 10v-5a1 1 0 011-1h2a1 1 0 011 1v5m-4 0h4"></path>
</svg>
<span class="text-sm font-medium text-gray-900 dark:text-gray-100">{{ $company }}</span>
</div>
@endif
<!-- Title -->
<h3 class="text-lg font-semibold text-gray-900 dark:text-gray-100 line-clamp-2 mb-2 group-hover:text-[var(--color-primary)] transition-colors">
{{ $title }}
</h3>
<!-- Teaser -->
<p class="text-[15px] leading-relaxed text-gray-600 dark:text-gray-400 line-clamp-3 mb-4">
{{ $teaser }}
</p>
<!-- Meta Info -->
<div class="flex flex-wrap items-center gap-2 mb-4 text-xs text-gray-600 dark:text-gray-400">
<span class="flex items-center gap-1">
<svg class="h-3 w-3" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M19 21V5a2 2 0 00-2-2H7a2 2 0 00-2 2v16m14 0h2m-2 0h-5m-9 0H3m2 0h5M9 7h1m-1 4h1m4-4h1m-1 4h1m-5 10v-5a1 1 0 011-1h2a1 1 0 011 1v5m-4 0h4"></path>
</svg>
{{ $industry }}
</span>
<span></span>
<span class="flex items-center gap-1">
<svg class="h-3 w-3" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M17.657 16.657L13.414 20.9a1.998 1.998 0 01-2.827 0l-4.244-4.243a8 8 0 1111.314 0z"></path>
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M15 11a3 3 0 11-6 0 3 3 0 016 0z"></path>
</svg>
{{ $region }}
</span>
<span></span>
<span class="flex items-center gap-1">
<svg class="h-3 w-3" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M8 7V3m8 4V3m-9 8h10M5 21h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v12a2 2 0 002 2z"></path>
</svg>
{{ $date }}
</span>
</div>
<!-- Media Badges & CTA -->
<div class="flex items-center justify-between">
<div class="flex items-center gap-2">
@if($hasImage)
<span class="inline-flex items-center gap-1 text-xs rounded-full px-3 py-1 bg-[var(--color-primary)]/10 text-[var(--color-primary)] border border-[var(--color-primary)]/20">
<svg class="h-3 w-3" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 16l4.586-4.586a2 2 0 012.828 0L16 16m-2-2l1.586-1.586a2 2 0 012.828 0L20 14m-6-6h.01M6 20h12a2 2 0 002-2V6a2 2 0 00-2-2H6a2 2 0 00-2 2v12a2 2 0 002 2z"></path>
</svg>
Bild
</span>
@endif
@if($hasPdf)
<span class="inline-flex items-center gap-1 text-xs rounded-full px-3 py-1 bg-[var(--color-secondary)]/10 text-gray-700 border border-[var(--color-secondary)]/20">
<svg class="h-3 w-3" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M7 21h10a2 2 0 002-2V9.414a1 1 0 00-.293-.707l-5.414-5.414A1 1 0 0012.586 3H7a2 2 0 00-2 2v14a2 2 0 002 2z"></path>
</svg>
PDF
</span>
@endif
</div>
<a
href="/release/{{ $slug }}"
class="text-sm font-medium text-gray-700 dark:text-gray-300 hover:text-[var(--color-primary)] transition-colors group-hover:text-[var(--color-primary)]"
>
Lesen
</a>
</div>
</div>
</article>

View file

@ -0,0 +1,116 @@
@props([
'title',
'teaser',
'company',
'industry',
'region',
'date',
'contentType' => 'FACHMELDUNG', // ANALYSE, INTERVIEW, FACHMELDUNG
'slug',
'imageUrl' => null,
])
<a href="/release/{{ $slug }}" class="group block">
<article class="bg-white dark:bg-gray-900 rounded-xl border border-gray-200 dark:border-gray-800 overflow-hidden transition-all duration-300 hover:shadow-xl hover:border-[var(--color-primary)]/30 shadow-sm h-full flex flex-col">
@if($imageUrl)
<!-- Card mit Bild -->
<!-- Image Preview -->
<div class="relative h-52 bg-gradient-to-br from-gray-100 to-gray-50 dark:from-gray-800 dark:to-gray-900 overflow-hidden">
<img
src="{{ $imageUrl }}"
alt="{{ $title }}"
class="w-full h-full object-cover group-hover:scale-105 transition-transform duration-500"
loading="lazy"
/>
<!-- Content Type Label - Positioned on Image -->
<div class="absolute top-4 left-4">
<span class="inline-block text-[10px] font-bold tracking-widest uppercase px-3 py-1.5
@if($contentType === 'ANALYSE')
bg-[var(--color-primary)] text-white
@elseif($contentType === 'INTERVIEW')
bg-[var(--color-secondary)] text-white
@else
bg-white/95 text-[var(--color-primary)] border border-[var(--color-primary)]/20
@endif
shadow-lg backdrop-blur-sm rounded">
{{ $contentType }}
</span>
</div>
</div>
<!-- Content with increased padding -->
<div class="p-7 flex flex-col flex-grow">
<!-- Meta Info - More spacing -->
<div class="flex items-center gap-3 mb-4 text-xs text-gray-500 dark:text-gray-500">
<span class="font-medium text-gray-700 dark:text-gray-300">{{ $industry }}</span>
<span class="text-gray-300 dark:text-gray-700"></span>
<time datetime="{{ $date }}" class="text-gray-600 dark:text-gray-400">{{ $date }}</time>
</div>
<!-- Title - Larger, more space -->
<h3 class="text-xl font-bold text-gray-900 dark:text-gray-100 line-clamp-2 mb-4 group-hover:text-[var(--color-primary)] transition-colors leading-tight">
{{ $title }}
</h3>
<!-- Teaser - More generous line-height -->
<p class="text-[15px] leading-relaxed text-gray-600 dark:text-gray-400 line-clamp-3 mb-5 flex-grow">
{{ $teaser }}
</p>
<!-- Company at bottom -->
<div class="flex items-center gap-2 pt-4 border-t border-gray-100 dark:border-gray-800">
<svg class="h-4 w-4 text-gray-400" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M19 21V5a2 2 0 00-2-2H7a2 2 0 00-2 2v16m14 0h2m-2 0h-5m-9 0H3m2 0h5M9 7h1m-1 4h1m4-4h1m-1 4h1m-5 10v-5a1 1 0 011-1h2a1 1 0 011 1v5m-4 0h4"></path>
</svg>
<span class="text-sm font-medium text-gray-700 dark:text-gray-300">{{ $company }}</span>
</div>
</div>
@else
<!-- Card ohne Bild - Textbasiert mit farbigem Hintergrund -->
<div class="relative bg-gradient-to-br from-[var(--color-primary)]/5 via-[var(--color-secondary)]/5 to-[var(--color-primary)]/10 dark:from-[var(--color-primary)]/10 dark:via-[var(--color-secondary)]/10 dark:to-[var(--color-primary)]/20 p-8 flex flex-col min-h-[400px]">
<!-- Content Type Label - Top -->
<div class="mb-6">
<span class="inline-block text-[10px] font-bold tracking-widest uppercase px-3 py-1.5
@if($contentType === 'ANALYSE')
bg-[var(--color-primary)] text-white
@elseif($contentType === 'INTERVIEW')
bg-[var(--color-secondary)] text-white
@else
bg-white text-[var(--color-primary)] border border-[var(--color-primary)]/20
@endif
shadow-sm rounded">
{{ $contentType }}
</span>
</div>
<!-- Meta Info -->
<div class="flex items-center gap-3 mb-5 text-xs text-gray-500 dark:text-gray-400">
<span class="font-medium text-gray-700 dark:text-gray-300">{{ $industry }}</span>
<span class="text-gray-300 dark:text-gray-600"></span>
<time datetime="{{ $date }}" class="text-gray-600 dark:text-gray-400">{{ $date }}</time>
</div>
<!-- Title - Prominenter ohne Bild -->
<h3 class="text-2xl font-bold text-gray-900 dark:text-gray-100 mb-5 group-hover:text-[var(--color-primary)] transition-colors leading-tight">
{{ $title }}
</h3>
<!-- Teaser as Quote/Highlight - Mehr Zeilen ohne Bild -->
<blockquote class="text-base leading-relaxed text-gray-700 dark:text-gray-300 line-clamp-5 mb-6 flex-grow italic border-l-4 border-[var(--color-primary)] pl-4">
{{ $teaser }}
</blockquote>
<!-- Company at bottom -->
<div class="flex items-center gap-2 pt-5 border-t border-[var(--color-primary)]/10">
<svg class="h-4 w-4 text-gray-500" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M19 21V5a2 2 0 00-2-2H7a2 2 0 00-2 2v16m14 0h2m-2 0h-5m-9 0H3m2 0h5M9 7h1m-1 4h1m4-4h1m-1 4h1m-5 10v-5a1 1 0 011-1h2a1 1 0 011 1v5m-4 0h4"></path>
</svg>
<span class="text-sm font-medium text-gray-700 dark:text-gray-300">{{ $company }}</span>
</div>
</div>
@endif
</article>
</a>