@props([ 'background' => 'bg-brand-deep', 'stats' => [], 'quote', 'name', 'meta', ]) {{-- v2: migración fiel del SocialProof.astro genérico (to-migrate/SocialProof.astro). Desktop/tablet: grilla estática. Móvil: swiper (1 slide, autoplay 3s, loop), port de StatsCarousel.tsx con el mismo patrón que reviews-carousel.js. --}}
{{-- Título sr-only: la banda no lleva encabezado visible (los números y la cita hablan solos), pero sin heading la sección queda sin título en el outline y —lo que importa de verdad— quien navega saltando de encabezado en encabezado con un lector de pantalla se saltea el bloque entero: no tiene dónde aterrizar. Invisible en pantalla, presente para AT y crawlers.

porque cuelga del

de la página que monte el componente. --}}

Proven Results

{{-- Desktop / tablet: grilla estática --}} {{-- Móvil: swiper --}}
@php // Swiper desactiva el loop si hay < 6 slides: duplicamos para que // el período sea suficiente y nunca se vea una stat repetida a la vez. $slides = count($stats) >= 6 ? $stats : array_merge($stats, $stats); @endphp @foreach ($slides as $stat)
{{ $stat['n'] }}
{{ $stat['l'] }}
@endforeach

"{{ $quote }}"

— {{ $name }}, {{ $meta }}