Files
Barber-VitrineV1/src/components/Testimonials.jsx
SarTron-NorthBlue be02b7e542 first commitv1
2026-04-02 17:36:07 +04:00

112 lines
3.6 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import { motion } from 'framer-motion'
import { Star } from 'lucide-react'
const reviews = [
{
id: 1,
name: 'Thomas M.',
role: 'Entrepreneur',
text: 'Le forfait signature vaut chaque euro. Ambiance feutrée, coupe millimétrée — je ne vais plus ailleurs.',
rating: 5,
},
{
id: 2,
name: 'Alexandre R.',
role: 'Avocat',
text: 'Barbe sculptée comme je voulais depuis des années. Léquipe est à lécoute et très pro.',
rating: 5,
},
{
id: 3,
name: 'Julien L.',
role: 'Architecte',
text: 'Détails, timing, produits : tout est au niveau dun grand palace. RDV facile à prendre.',
rating: 5,
},
{
id: 4,
name: 'Karim D.',
role: 'Consultant',
text: 'Premier camouflage gris : naturel à souhait. On ma expliqué lentretien sans jargon, top.',
rating: 5,
},
{
id: 5,
name: 'Nicolas P.',
role: 'Chef de projet',
text: 'Le rasage traditionnel est une claque. Serviette chaude, zéro irritation. Je recommande les yeux fermés.',
rating: 5,
},
{
id: 6,
name: 'Hugo B.',
role: 'Photographe',
text: 'Japprécie le calme du lieu et le fait quon ne soit jamais bousculé. La coupe tient bien trois semaines.',
rating: 5,
},
]
function Stars({ count }) {
return (
<div className="flex gap-0.5" aria-label={`${count} sur 5 étoiles`}>
{Array.from({ length: count }, (_, i) => (
<Star
key={i}
className="h-4 w-4 fill-barber-gold text-barber-gold"
aria-hidden
/>
))}
</div>
)
}
export default function Testimonials() {
return (
<section className="border-t border-white/5 bg-barber-stone py-20 sm:py-28">
<div className="mx-auto max-w-6xl px-4 sm:px-6 lg:px-8">
<motion.div
initial={{ opacity: 0, y: 20 }}
whileInView={{ opacity: 1, y: 0 }}
viewport={{ once: true, margin: '-80px' }}
transition={{ duration: 0.55 }}
className="mb-12 text-center"
>
<p className="mb-3 text-xs font-medium uppercase tracking-[0.3em] text-barber-gold">
Témoignages
</p>
<h2 className="font-serif text-3xl font-medium text-barber-cream sm:text-4xl md:text-5xl">
Avis clients
</h2>
<p className="mx-auto mt-4 max-w-2xl text-sm text-barber-cream/60 sm:text-base">
Une communauté fidèle de professionnels et de passionnés de style merci à tous pour la confiance
accordée au fil des années.
</p>
</motion.div>
<ul className="grid gap-6 sm:grid-cols-2 lg:grid-cols-3">
{reviews.map((r, i) => (
<motion.li
key={r.id}
initial={{ opacity: 0, y: 24 }}
whileInView={{ opacity: 1, y: 0 }}
viewport={{ once: true, margin: '-40px' }}
transition={{ delay: (i % 3) * 0.06, duration: 0.5 }}
>
<blockquote className="flex h-full flex-col rounded-lg border border-white/10 bg-barber-bg p-6">
<Stars count={r.rating} />
<p className="mt-4 flex-1 text-sm leading-relaxed text-barber-cream/80">
&ldquo;{r.text}&rdquo;
</p>
<footer className="mt-6 border-t border-white/10 pt-4">
<cite className="not-italic text-sm font-medium text-barber-gold">{r.name}</cite>
<p className="mt-0.5 text-xs text-barber-cream/45">{r.role}</p>
</footer>
</blockquote>
</motion.li>
))}
</ul>
</div>
</section>
)
}