Zoeken...  ⌘K GitHub

CtaPricing CTA

Prijs-CTA: waardepropositie met check-bullets links, een prijskaart met bedrag, knop en garantie rechts.

/cta-pricing
src/components/cta/CtaPricing.astro
---
/**
 * CtaPricing
 * Prijs-CTA: links waardepropositie + check-bullets, rechts een prijskaart
 * met bedrag, knop en garantie. Light.
 *
 * Props:
 * - eyebrow?: string
 * - headline: string
 * - sub?: string
 * - values?: string[]              check-bullets links
 * - price?: string                 bedrag, bv. '€995'
 * - pricePer?: string              periode, bv. 'per maand'
 * - cta?: { label: string; href: string }
 * - guarantee?: string             kleine garantie-regel onder de knop
 */
interface Props {
  eyebrow?: string;
  headline: string;
  sub?: string;
  values?: string[];
  price?: string;
  pricePer?: string;
  cta?: { label: string; href: string };
  guarantee?: string;
}

const {
  eyebrow,
  headline,
  sub,
  values = [],
  price,
  pricePer,
  cta,
  guarantee,
} = Astro.props;
---

<section class:list={['bl-section', 'ctaprc']}>
  <div class="bl-inner ctaprc-inner">
    <div class="ctaprc-left">
      {eyebrow && <span class="ctaprc-eyebrow">{eyebrow}</span>}
      <h2 class="ctaprc-headline">{headline}</h2>
      {sub && <p class="ctaprc-sub">{sub}</p>}
      {values.length > 0 && (
        <ul class="ctaprc-values">
          {values.map((v) => (
            <li class="ctaprc-value-item"><span class="ctaprc-tick">&#10003;</span>{v}</li>
          ))}
        </ul>
      )}
    </div>
    <div class="ctaprc-right">
      <div class="ctaprc-price-box">
        {(price || pricePer) && (
          <div class="ctaprc-price">
            {price && <span class="ctaprc-price-val">{price}</span>}
            {pricePer && <span class="ctaprc-price-per">{pricePer}</span>}
          </div>
        )}
        {cta && <a href={cta.href} class="ctaprc-btn">{cta.label}</a>}
        {guarantee && <p class="ctaprc-guarantee">{guarantee}</p>}
      </div>
    </div>
  </div>
</section>

<style>
.ctaprc{background:#f8fafc;border-top:1px solid #e5e7eb}
.ctaprc-inner{display:grid;grid-template-columns:1fr auto;gap:4rem;align-items:center}
.ctaprc-eyebrow{display:block;font-size:.75rem;font-weight:700;letter-spacing:.1em;text-transform:uppercase;color:var(--color-accent,#6366f1);margin-bottom:.75rem}
.ctaprc-headline{font-size:clamp(1.5rem,3vw,2.25rem);font-weight:800;color:#0a0a0a;letter-spacing:-.03em;line-height:1.2;margin:0 0 .875rem}
.ctaprc-sub{font-size:1rem;color:#6b7280;line-height:1.65;margin:0 0 1.5rem}
.ctaprc-values{list-style:none;padding:0;margin:0;display:flex;flex-direction:column;gap:.5rem}
.ctaprc-value-item{display:flex;align-items:center;gap:.625rem;font-size:1rem;color:#374151}
.ctaprc-tick{color:#10b981;font-weight:700;flex-shrink:0}
.ctaprc-price-box{background:#fff;border:1px solid #e5e7eb;border-radius:1.25rem;padding:2.5rem;text-align:center;min-width:220px;box-shadow:0 4px 20px #0000000f}
.ctaprc-price{margin-bottom:1.5rem}
.ctaprc-price-val{display:block;font-size:2.75rem;font-weight:900;color:#0a0a0a;letter-spacing:-.04em;line-height:1}
.ctaprc-price-per{display:block;font-size:.875rem;color:#6b7280;margin-top:.25rem}
.ctaprc-btn{display:block;padding:.875rem 1.5rem;background:var(--color-accent,#6366f1);color:#fff;font-weight:700;font-size:1rem;border-radius:.5rem;text-decoration:none;transition:opacity .2s;margin-bottom:1rem}
.ctaprc-btn:hover{opacity:.88}
.ctaprc-guarantee{font-size:.8125rem;color:#6b7280;margin:0}
@media (max-width:720px){
  .ctaprc-inner{grid-template-columns:1fr;gap:2rem}
  .ctaprc-price-box{min-width:auto}
}
</style>

Props

Prop Type Default Beschrijving
headline * string - H2-kop
eyebrow string - Klein label boven de kop
sub string - Ondertitel
values string[] [] Check-bullets links
price string - Bedrag, bv. €995
pricePer string - Periode, bv. per maand
cta { label: string; href: string } - CTA-knop
guarantee string - Garantie-regel onder de knop

* = verplicht