TestimonialsSingle Social Proof
Groot, impactvol enkelvoudig klantcitaat. Centraal op pagina.
src/components/social-proof/TestimonialsSingle.astro
---
/**
* TestimonialsSingle
* Groot, impactvol enkelvoudig klantcitaat. Centraal op pagina.
*/
interface Props {
quote: string;
name: string;
role: string;
company?: string;
avatar?: string;
rating?: number;
logo?: string;
bg?: 'white' | 'light' | 'dark';
}
const { quote, name, role, company, avatar, rating = 5, logo, bg = 'white' } = Astro.props;
---
<section class={`tss tss--${bg}`}>
<div class="tss-inner">
{rating > 0 && (
<div class="tss-stars">
{Array.from({length: rating}).map(() => <span class="tss-star">★</span>)}
</div>
)}
<blockquote class="tss-quote">"{quote}"</blockquote>
<footer class="tss-footer">
{avatar && <img src={avatar} alt={name} class="tss-avatar" />}
<div class="tss-meta">
<cite class="tss-name">{name}</cite>
<span class="tss-role">{role}{company && `, ${company}`}</span>
</div>
{logo && <img src={logo} alt={company || name} class="tss-logo" />}
</footer>
</div>
</section>
<style>
.tss { padding: 6rem 2rem; }
.tss--white { background: #fff; }
.tss--light { background: #f8fafc; }
.tss--dark { background: #0a0a0a; }
.tss-inner { max-width: 820px; margin: 0 auto; text-align: center; }
.tss-stars { display: flex; justify-content: center; gap: 0.25rem; margin-bottom: 1.5rem; }
.tss-star { color: #f59e0b; font-size: 1.25rem; }
.tss-quote { font-size: clamp(1.375rem, 2.5vw, 2rem); line-height: 1.55; font-style: italic; margin: 0 0 2.5rem; }
.tss--white .tss-quote, .tss--light .tss-quote { color: #0a0a0a; }
.tss--dark .tss-quote { color: rgba(255,255,255,0.85); }
.tss-footer { display: flex; align-items: center; justify-content: center; gap: 1rem; flex-wrap: wrap; }
.tss-avatar { width: 52px; height: 52px; border-radius: 50%; object-fit: cover; }
.tss-meta { text-align: left; }
.tss-name { display: block; font-size: 1rem; font-weight: 700; font-style: normal; }
.tss--white .tss-name, .tss--light .tss-name { color: #0a0a0a; }
.tss--dark .tss-name { color: #fff; }
.tss-role { display: block; font-size: 0.875rem; }
.tss--white .tss-role, .tss--light .tss-role { color: #6b7280; }
.tss--dark .tss-role { color: rgba(255,255,255,0.45); }
.tss-logo { height: 28px; opacity: 0.4; filter: grayscale(1); margin-left: 1.5rem; }
</style>
Props
| Prop | Type | Default | Beschrijving |
|---|---|---|---|
quote * | string | — | Het citaat |
name * | string | — | Naam van de persoon |
role * | string | — | Functietitel |
company | string | — | Bedrijfsnaam |
avatar | string | — | URL van de avatar |
rating | number | — | Sterrenwaardering (0–5) |
logo | string | — | URL van het bedrijfslogo |
bg | 'white' | 'light' | 'dark' | — | Achtergrond variant |
* = verplicht