Zoeken...  ⌘K GitHub

CtaStats CTA

Gecentreerde CTA met een rij kerncijfers boven een primaire en secundaire knop. Light of dark.

/cta-stats
src/components/cta/CtaStats.astro
---
/**
 * CtaStats
 * Gecentreerde CTA met een rij kerncijfers (stats) boven twee knoppen.
 * Light of dark.
 *
 * Props:
 * - headline: string
 * - sub?: string
 * - stats?: { value: string; label: string }[]
 * - primaryCta?: { label: string; href: string }
 * - secondaryCta?: { label: string; href: string }
 * - theme?: 'light' | 'dark'       default 'dark'
 */
interface Props {
  headline: string;
  sub?: string;
  stats?: { value: string; label: string }[];
  primaryCta?: { label: string; href: string };
  secondaryCta?: { label: string; href: string };
  theme?: 'light' | 'dark';
}

const {
  headline,
  sub,
  stats = [],
  primaryCta,
  secondaryCta,
  theme = 'dark',
} = Astro.props;
---

<section class:list={['bl-section', 'ctas2', `ctas2--${theme}`]}>
  <div class="bl-inner bl-inner--narrow ctas2-inner">
    <h2 class="ctas2-headline">{headline}</h2>
    {sub && <p class="ctas2-sub">{sub}</p>}
    {stats.length > 0 && (
      <div class="ctas2-stats">
        {stats.map((s) => (
          <div class="ctas2-stat">
            <span class="ctas2-stat-value">{s.value}</span>
            <span class="ctas2-stat-label">{s.label}</span>
          </div>
        ))}
      </div>
    )}
    {(primaryCta || secondaryCta) && (
      <div class="ctas2-btns">
        {primaryCta && <a href={primaryCta.href} class="ctas2-btn-primary">{primaryCta.label}</a>}
        {secondaryCta && <a href={secondaryCta.href} class="ctas2-btn-secondary">{secondaryCta.label}</a>}
      </div>
    )}
  </div>
</section>

<style>
.ctas2--dark{background:#0a0a0a}
.ctas2--light{background:#f8fafc}
.ctas2-inner{text-align:center}
.ctas2-headline{font-size:clamp(1.75rem,4vw,3rem);font-weight:900;letter-spacing:-.04em;line-height:1.15;margin:0 0 1rem}
.ctas2--dark .ctas2-headline{color:#fff}
.ctas2--light .ctas2-headline{color:#0a0a0a}
.ctas2-sub{font-size:1.125rem;line-height:1.65;margin:0 0 2.5rem}
.ctas2--dark .ctas2-sub{color:#e8e8e8}
.ctas2--light .ctas2-sub{color:#6b7280}
.ctas2-stats{display:flex;justify-content:center;gap:3rem;margin-bottom:2.5rem;flex-wrap:wrap}
.ctas2-stat{display:flex;flex-direction:column;gap:.25rem}
.ctas2-stat-value{font-size:2.25rem;font-weight:900;letter-spacing:-.04em;color:var(--color-accent,#6366f1);line-height:1}
.ctas2-stat-label{font-size:.875rem}
.ctas2--dark .ctas2-stat-label{color:#aaa}
.ctas2--light .ctas2-stat-label{color:#6b7280}
.ctas2-btns{display:flex;gap:1rem;justify-content:center;flex-wrap:wrap}
.ctas2-btn-primary{padding:.875rem 2.25rem;background:var(--color-accent,#6366f1);color:#fff;font-weight:700;font-size:1rem;border-radius:.5rem;text-decoration:none;transition:opacity .2s}
.ctas2-btn-primary:hover{opacity:.88}
.ctas2-btn-secondary{padding:.875rem 2.25rem;font-weight:600;font-size:1rem;border-radius:.5rem;text-decoration:none;transition:border-color .2s,color .2s}
.ctas2--dark .ctas2-btn-secondary{border:1.5px solid #444;color:#aaa}
.ctas2--dark .ctas2-btn-secondary:hover{border-color:#666;color:#fff}
.ctas2--light .ctas2-btn-secondary{border:1.5px solid #e5e7eb;color:#374151}
.ctas2--light .ctas2-btn-secondary:hover{border-color:#9ca3af}
</style>

Props

Prop Type Default Beschrijving
headline * string - H2-kop
sub string - Ondertitel
stats { value: string; label: string }[] [] Rij kerncijfers
primaryCta { label: string; href: string } - Primaire knop
secondaryCta { label: string; href: string } - Secundaire knop
theme 'light' | 'dark' 'dark' Achtergrond-mode

* = verplicht