{{-- About Team — History / Timeline Section --}} {{-- Reproduces the React OurStory component animation 1:1: - Vertical line grows with scroll (GSAP scaleY progress, never recedes) - Each card fades in (autoAlpha 0→1) when 50% enters viewport -80px - Year labels displayed before first event of each year - Cards alternate left/right with connector dot + dash - Image mask: gradient fade to transparent at bottom --}} @php $events = __('about.team.our_story.events'); // Detect year changes for year header labels $lastYear = null; $eventsWithMeta = collect($events)->map(function($event, $index) use (&$lastYear) { $parts = explode(' ', $event['date']); $year = array_pop($parts); $month = implode(' ', $parts); $isFirstOfYear = ($year !== $lastYear); $lastYear = $year; return array_merge($event, [ 'year' => $year, 'month' => $month, 'index' => $index, 'isFirstOfYear' => $isFirstOfYear, ]); })->all(); @endphp
{{-- Timeline container: animated by initTimelineAnimation() --}}
{{-- Absolute centered vertical line (grows with scroll via GSAP scaleY) --}} {{-- Events list --}}
@foreach($eventsWithMeta as $event) {{-- Year label: displayed once per year --}} @if($event['isFirstOfYear'])
{{ $event['year'] }}
@endif @php $isEven = $event['index'] % 2 === 0; @endphp {{-- Event row (initially invisible, GSAP fades in on scroll) --}}
{{-- Inner: card occupies right half (even) or left half (odd) --}}
{{-- Connector: dot + dash (desktop only) --}} {{-- Card --}}
{{-- Image with bottom gradient mask --}}
{{ $event['alt'] ?? $event['description'] }}
{{-- Date + Title --}}
{{ $event['month'] }} {{ $event['year'] }}
{{ $event['description'] }}
{{-- /card --}}
{{-- /inner --}}
{{-- /event row --}} @endforeach
{{-- /events list --}}
{{-- /timeline container --}}