Open demo

CSS code

HTML
<div><span class="lbl">Simple centred band</span>
<section class="cta cta-simple" aria-labelledby="cta-trial">
  <h2 class="cta-h" id="cta-trial">Start your 14-day trial today</h2>
  <p class="cta-p">No card needed. Import your projects from a CSV or your old tracker in a couple of minutes.</p>
  <div class="cta-actions"><a class="cta-btn cta-light" href="#">Start free trial <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><path d="M5 12h14M13 5l7 7-7 7"/></svg></a><a class="cta-btn cta-ghost" href="#">Talk to sales</a></div>
  <p class="cta-note">Plans from £8 per person per month</p>
</section></div>

<div><span class="lbl">Split with a photo</span>
<section class="cta cta-split" aria-labelledby="cta-rooms">
  <figure><img src="https://images.unsplash.com/photo-1542744173-8e7e53415bb0?auto=format&fit=crop&w=1000&q=80" alt="A man presenting to colleagues seated round a long meeting table with laptops" width="1000" height="667" loading="lazy"></figure>
  <div class="cta-split-body">
    <p class="cta-eyebrow">Brightside Workspaces</p>
    <h2 class="cta-h" id="cta-rooms">Book a meeting room by the hour</h2>
    <p class="cta-p">Twelve rooms across four city-centre sites, bookable from one hour, with nothing to sign.</p>
    <ul class="cta-facts"><li><svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><path d="M20 6 9 17l-5-5"/></svg>Screens and video kit in every room</li><li><svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><path d="M20 6 9 17l-5-5"/></svg>Coffee and water included</li><li><svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><path d="M20 6 9 17l-5-5"/></svg>Free cancellation up to 24 hours before</li></ul>
    <div class="cta-actions"><a class="cta-btn cta-orange" href="#">Find a room near you <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><path d="M5 12h14M13 5l7 7-7 7"/></svg></a><a class="cta-link" href="#">See room prices</a></div>
  </div>
</section></div>

<div><span class="lbl">Gradient band</span>
<section class="cta cta-gradient" aria-labelledby="cta-launch">
  <div>
    <h2 class="cta-h" id="cta-launch">Your next launch, without the late nights</h2>
    <p class="cta-p">Join 6,200 product teams who plan, review and ship in Plotline.</p>
  </div>
  <div class="cta-actions"><a class="cta-btn cta-light" href="#">Get started free <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><path d="M5 12h14M13 5l7 7-7 7"/></svg></a><a class="cta-btn cta-ghost" href="#">Book a demo</a></div>
</section></div>

<div><span class="lbl">Email capture</span>
<section class="cta cta-email" aria-labelledby="cta-news">
  <div>
    <p class="cta-eyebrow">The Margin</p>
    <h2 class="cta-h" id="cta-news">One email on Sunday. Five things worth reading.</h2>
    <p class="cta-p">Written by two editors for 48,000 small-business owners. No sponsored picks, ever.</p>
  </div>
  <form class="cta-form" action="#" method="post">
    <label for="cta-email-input">Email address</label>
    <div class="cta-field"><input id="cta-email-input" type="email" name="email" autocomplete="email" placeholder="[email protected]" required aria-describedby="cta-email-hint"><button class="cta-btn cta-lime" type="submit">Subscribe</button></div>
    <p class="cta-hint" id="cta-email-hint">Unsubscribe in one click. We never share your address.</p>
  </form>
</section></div>

<div><span class="lbl">App download with a drawn phone</span>
<section class="cta cta-app" aria-labelledby="cta-app">
  <div class="cta-app-copy">
    <p class="cta-eyebrow">Fieldday for grassroots clubs</p>
    <h2 class="cta-h" id="cta-app">Your club's fixtures in your pocket</h2>
    <p class="cta-p">Kick-off times, pitch changes and lift-shares for every team, with a notification the moment a match is called off.</p>
    <div class="cta-actions"><a class="cta-btn cta-store" href="#"><svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><rect x="5" y="2" width="14" height="20" rx="2"/><path d="M12 18h.01"/></svg><span><small>Download for</small>iPhone</span></a><a class="cta-btn cta-store" href="#"><svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><rect x="5" y="2" width="14" height="20" rx="2"/><path d="M12 18h.01"/></svg><span><small>Get it for</small>Android</span></a></div>
  </div>
  <div class="cta-phone" role="img" aria-label="The Fieldday app showing three fixtures for Saturday 24 October, the second one moved to pitch 4."><div class="cta-phone-top">Sat 24 Oct<span>3 matches</span></div><div class="cta-fix"><b>U12 Hawks v Riverside</b><span>09:30 · Pitch 2</span></div><div class="cta-fix"><em>Moved</em><b>U14 Hawks v Elm Park</b><span>11:00 · Pitch 4</span></div><div class="cta-fix"><b>Seniors v Castle Vale</b><span>15:00 · Home</span></div></div>
</section></div>
CSS
/* Call to action bands: short sections that end a page or sit between feature blocks. Each is a <section>
   named by its h2, with one main action and at most one secondary. Buttons are links (or a submit button in the
   email form), and every one shows a 3px focus outline in a colour that reads on its band. */
.cta{--cta-radius:28px;position:relative;overflow:hidden;border-radius:var(--cta-radius);padding:clamp(40px,6vw,80px) clamp(20px,5vw,72px);
  font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Helvetica,Arial,sans-serif;line-height:1.5}
.cta :where(h2,p,ul,form,figure){margin:0;padding:0}
.cta ul{list-style:none}
.cta-h{font-size:clamp(1.8rem,1.2rem + 2.2vw,2.75rem);line-height:1.1;letter-spacing:-.025em;font-weight:800;text-wrap:balance}
.cta-p{margin-top:14px!important;font-size:1.08rem;max-width:56ch}
.cta-eyebrow{margin-bottom:12px!important;font-size:.8rem;font-weight:700;letter-spacing:.12em;text-transform:uppercase}
.cta-actions{display:flex;flex-wrap:wrap;gap:12px;margin-top:30px}
.cta-btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;min-height:50px;padding:0 24px;border:2px solid transparent;border-radius:12px;
  font-weight:700;font-size:1rem;text-decoration:none;cursor:pointer;transition:background-color .2s,color .2s,border-color .2s,transform .2s}
.cta-btn:hover{transform:translateY(-1px)}
.cta-btn svg{width:18px;height:18px}
.cta a:focus-visible,.cta button:focus-visible,.cta input:focus-visible{outline:3px solid var(--cta-ring);outline-offset:3px}
/* 1. simple centred */
.cta-simple{--cta-ring:#fff;background:radial-gradient(60% 90% at 50% 0%,#4338ca,transparent 70%),#312e81;color:#fff;text-align:center}
.cta-simple .cta-p{margin-inline:auto;color:#c7d2fe}
.cta-simple .cta-actions{justify-content:center}
.cta-light{background:#fff;color:#312e81}
.cta-light:hover{background:#e0e7ff}
.cta-ghost{border-color:rgba(255,255,255,.55);color:#fff}
.cta-ghost:hover{border-color:#fff;background:rgba(255,255,255,.08)}
.cta-note{margin-top:18px!important;font-size:.9rem;color:#c7d2fe}
/* 2. split with a photo */
.cta-split{--cta-ring:#9a3412;display:grid;grid-template-columns:1fr 1fr;padding:0;background:#fff7ed;color:#431407}
.cta-split img{display:block;width:100%;height:100%;min-height:280px;object-fit:cover}
.cta-split-body{padding:clamp(32px,5vw,64px);align-self:center}
.cta-split .cta-eyebrow{color:#9a3412}
.cta-split .cta-p{color:#7c2d12}
.cta-facts{display:grid;gap:10px;margin-top:22px!important}
.cta-facts li{display:flex;align-items:center;gap:10px;font-weight:600;font-size:.96rem}
.cta-facts svg{flex:none;width:20px;height:20px;color:#c2410c}
.cta-orange{background:#c2410c;color:#fff}
.cta-orange:hover{background:#9a3412}
.cta-link{display:inline-flex;align-items:center;min-height:50px;padding:0 8px;color:#9a3412;font-weight:700;text-decoration:underline;text-underline-offset:4px;border-radius:8px}
/* 3. gradient */
.cta-gradient{--cta-ring:#fff;display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:28px 48px;color:#fff;
  background:linear-gradient(120deg,#9d174d,#6d28d9 52%,#1e40af)}
.cta-gradient::before,.cta-gradient::after{content:"";position:absolute;border-radius:50%;pointer-events:none;filter:blur(2px)}
.cta-gradient::before{width:340px;height:340px;right:-80px;top:-160px;background:radial-gradient(circle,rgba(255,255,255,.22),transparent 65%)}
.cta-gradient::after{width:260px;height:260px;left:30%;bottom:-170px;background:radial-gradient(circle,rgba(255,255,255,.16),transparent 65%)}
.cta-gradient>*{position:relative}
.cta-gradient .cta-p{color:#f5f3ff}
.cta-gradient .cta-actions{margin-top:0}
.cta-gradient .cta-light{color:#5b21b6}
/* 4. email capture */
.cta-email{--cta-ring:#bef264;display:grid;grid-template-columns:1fr 1fr;gap:28px 64px;align-items:center;background:#14532d;color:#f0fdf4}
.cta-email .cta-eyebrow{color:#bef264}
.cta-email .cta-p{color:#bbf7d0}
.cta-form label{display:block;margin-bottom:8px;font-weight:700;font-size:.92rem}
.cta-field{display:flex;gap:10px}
.cta-field input{flex:1;min-width:0;min-height:52px;padding:0 16px;border:2px solid #86efac;border-radius:12px;background:#fff;color:#14532d;font:inherit;font-size:1rem}
.cta-field input::placeholder{color:#4d7c5f}
.cta-lime{background:#bef264;color:#1a2e05}
.cta-lime:hover{background:#d9f99d}
.cta-hint{margin-top:10px!important;font-size:.86rem;color:#bbf7d0}
/* 5. app download with a drawn phone */
.cta-app{--cta-ring:#0c4a6e;display:grid;grid-template-columns:7fr 5fr;gap:24px 48px;padding-bottom:0;background:#e0f2fe;color:#082f49}
.cta-app-copy{padding-bottom:clamp(40px,6vw,80px)}
.cta-app .cta-eyebrow{color:#075985}
.cta-app .cta-p{color:#0c4a6e}
.cta-store{flex-direction:row;background:#082f49;color:#fff;min-height:56px;padding:0 20px;text-align:left;line-height:1.15}
.cta-store:hover{background:#0c4a6e}
.cta-store small{display:block;font-size:.72rem;font-weight:600;color:#bae6fd}
.cta-store svg{width:22px;height:22px}
.cta-phone{align-self:end;justify-self:center;width:240px;height:330px;padding:14px 12px 0;border:10px solid #082f49;border-bottom:0;border-radius:38px 38px 0 0;background:#f8fafc;
  box-shadow:0 -10px 40px -10px rgba(8,47,73,.35);font-size:.8rem}
.cta-phone-top{display:flex;justify-content:space-between;font-weight:700;color:#082f49;margin-bottom:10px}
.cta-phone-top span{color:#0369a1}
.cta-fix{padding:10px 12px;margin-bottom:8px;border-radius:12px;background:#fff;border:1px solid #e2e8f0}
.cta-fix b{display:block;color:#082f49}
.cta-fix span{color:#475569}
.cta-fix em{float:right;font-style:normal;font-weight:700;font-size:.7rem;padding:2px 7px;border-radius:99px;background:#fef3c7;color:#92400e}
@media (max-width:991px){
  .cta-split,.cta-email{grid-template-columns:1fr}
  .cta-split img{height:auto;aspect-ratio:16/9;min-height:0}
}
@media (max-width:767px){
  .cta-app{grid-template-columns:1fr}
  .cta-app-copy{padding-bottom:0}
}
@media (max-width:480px){
  .cta-actions .cta-btn{flex:1 1 100%}
  .cta-field{flex-direction:column}
}
@media (prefers-reduced-motion:reduce){
  .cta-btn{transition:none}
  .cta-btn:hover{transform:none}
}

Bootstrap 5 code

Requires: Bootstrap 5.3.8 CSS

HTML
<div><span class="lbl">Simple centred band</span>
<section class="cta cta-simple text-center" aria-labelledby="b-cta-trial">
  <h2 class="cta-h" id="b-cta-trial">Start your 14-day trial today</h2>
  <p class="cta-p mx-auto">No card needed. Import your projects from a CSV or your old tracker in a couple of minutes.</p>
  <div class="cta-actions d-flex flex-wrap justify-content-center gap-3 mt-4 pt-1"><a class="btn cta-btn cta-light" href="#">Start free trial <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><path d="M5 12h14M13 5l7 7-7 7"/></svg></a><a class="btn cta-btn cta-ghost" href="#">Talk to sales</a></div>
  <p class="cta-note mt-3" style="font-size:.9rem">Plans from £8 per person per month</p>
</section></div>

<div><span class="lbl">Split with a photo</span>
<section class="cta cta-split" aria-labelledby="b-cta-rooms">
  <div class="row g-0">
    <figure class="col-lg-6"><img class="img-fluid object-fit-cover" src="https://images.unsplash.com/photo-1542744173-8e7e53415bb0?auto=format&fit=crop&w=1000&q=80" alt="A man presenting to colleagues seated round a long meeting table with laptops" width="1000" height="667" loading="lazy"></figure>
    <div class="col-lg-6 align-self-center" style="padding:clamp(32px,5vw,64px)">
      <p class="cta-eyebrow">Brightside Workspaces</p>
      <h2 class="cta-h" id="b-cta-rooms">Book a meeting room by the hour</h2>
      <p class="cta-p">Twelve rooms across four city-centre sites, bookable from one hour, with nothing to sign.</p>
      <ul class="cta-facts list-unstyled d-grid gap-2 mt-4 mb-0"><li class="d-flex align-items-center gap-2"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><path d="M20 6 9 17l-5-5"/></svg>Screens and video kit in every room</li><li class="d-flex align-items-center gap-2"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><path d="M20 6 9 17l-5-5"/></svg>Coffee and water included</li><li class="d-flex align-items-center gap-2"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><path d="M20 6 9 17l-5-5"/></svg>Free cancellation up to 24 hours before</li></ul>
      <div class="cta-actions d-flex flex-wrap gap-3 mt-4 pt-1"><a class="btn cta-btn cta-orange" href="#">Find a room near you <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><path d="M5 12h14M13 5l7 7-7 7"/></svg></a><a class="cta-link" href="#">See room prices</a></div>
    </div>
  </div>
</section></div>

<div><span class="lbl">Gradient band</span>
<section class="cta cta-gradient d-flex flex-wrap align-items-center justify-content-between column-gap-5 row-gap-4" aria-labelledby="b-cta-launch">
  <div>
    <h2 class="cta-h" id="b-cta-launch">Your next launch, without the late nights</h2>
    <p class="cta-p">Join 6,200 product teams who plan, review and ship in Plotline.</p>
  </div>
  <div class="cta-actions d-flex flex-wrap gap-3"><a class="btn cta-btn cta-light" href="#">Get started free <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><path d="M5 12h14M13 5l7 7-7 7"/></svg></a><a class="btn cta-btn cta-ghost" href="#">Book a demo</a></div>
</section></div>

<div><span class="lbl">Email capture</span>
<section class="cta cta-email" aria-labelledby="b-cta-news">
  <div class="row align-items-center gx-5 gy-4">
    <div class="col-lg-6">
      <p class="cta-eyebrow">The Margin</p>
      <h2 class="cta-h" id="b-cta-news">One email on Sunday. Five things worth reading.</h2>
      <p class="cta-p">Written by two editors for 48,000 small-business owners. No sponsored picks, ever.</p>
    </div>
    <form class="col-lg-6" action="#" method="post">
      <label class="form-label" for="b-cta-email-input">Email address</label>
      <div class="d-flex flex-column flex-sm-row gap-2"><input class="form-control" id="b-cta-email-input" type="email" name="email" autocomplete="email" placeholder="[email protected]" required aria-describedby="b-cta-email-hint"><button class="btn cta-btn cta-lime flex-none" type="submit">Subscribe</button></div>
      <p class="form-text" id="b-cta-email-hint">Unsubscribe in one click. We never share your address.</p>
    </form>
  </div>
</section></div>

<div><span class="lbl">App download with a drawn phone</span>
<section class="cta cta-app" aria-labelledby="b-cta-app">
  <div class="row gx-5 gy-4">
    <div class="col-md-7 cta-app-copy">
      <p class="cta-eyebrow">Fieldday for grassroots clubs</p>
      <h2 class="cta-h" id="b-cta-app">Your club's fixtures in your pocket</h2>
      <p class="cta-p">Kick-off times, pitch changes and lift-shares for every team, with a notification the moment a match is called off.</p>
      <div class="cta-actions d-flex flex-wrap gap-3 mt-4 pt-1"><a class="btn cta-btn cta-store" href="#"><svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><rect x="5" y="2" width="14" height="20" rx="2"/><path d="M12 18h.01"/></svg><span><small>Download for</small>iPhone</span></a><a class="btn cta-btn cta-store" href="#"><svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><rect x="5" y="2" width="14" height="20" rx="2"/><path d="M12 18h.01"/></svg><span><small>Get it for</small>Android</span></a></div>
    </div>
    <div class="col-md-5 d-flex justify-content-center align-items-end">
      <div class="cta-phone" role="img" aria-label="The Fieldday app showing three fixtures for Saturday 24 October, the second one moved to pitch 4."><div class="cta-phone-top">Sat 24 Oct<span>3 matches</span></div><div class="cta-fix"><b>U12 Hawks v Riverside</b><span>09:30 · Pitch 2</span></div><div class="cta-fix"><em>Moved</em><b>U14 Hawks v Elm Park</b><span>11:00 · Pitch 4</span></div><div class="cta-fix"><b>Seniors v Castle Vale</b><span>15:00 · Home</span></div></div>
    </div>
  </div>
</section></div>
CSS
/* Call to action bands in Bootstrap 5: .btn restyled through --bs-btn-* variables, .row / .col-* for the split and
   email bands, .form-label, .form-control and .form-text for the sign-up form, and .img-fluid / .object-fit-cover for
   the photo. This block adds the band colours. Every action shows a 3px focus outline that reads on its band. */
.cta{--cta-radius:28px;position:relative;overflow:hidden;border-radius:var(--cta-radius);padding:clamp(40px,6vw,80px) clamp(20px,5vw,72px);line-height:1.5}
.cta :where(h2,p,figure){margin:0}
.cta-h{font-size:clamp(1.8rem,1.2rem + 2.2vw,2.75rem);line-height:1.1;letter-spacing:-.025em;font-weight:800;text-wrap:balance}
.cta-p{margin-top:14px!important;font-size:1.08rem;max-width:56ch}
.cta-eyebrow{margin-bottom:12px!important;font-size:.8rem;font-weight:700;letter-spacing:.12em;text-transform:uppercase}
.cta-btn{--bs-btn-padding-x:24px;--bs-btn-font-weight:700;--bs-btn-border-width:2px;--bs-btn-border-radius:12px;
  display:inline-flex;align-items:center;justify-content:center;gap:8px;min-height:50px;transition:background-color .2s,color .2s,border-color .2s,transform .2s}
.cta-btn:hover{transform:translateY(-1px)}
.cta-btn svg{width:18px;height:18px}
.cta a:focus-visible,.cta .btn:focus-visible,.cta .form-control:focus-visible{outline:3px solid var(--cta-ring);outline-offset:3px;box-shadow:none}
.cta-simple{--cta-ring:#fff;background:radial-gradient(60% 90% at 50% 0%,#4338ca,transparent 70%),#312e81;color:#fff}
.cta-simple .cta-p,.cta-note{color:#c7d2fe}
.cta-light{--bs-btn-bg:#fff;--bs-btn-border-color:#fff;--bs-btn-color:#312e81;--bs-btn-hover-bg:#e0e7ff;--bs-btn-hover-border-color:#e0e7ff;--bs-btn-hover-color:#312e81;
  --bs-btn-active-bg:#e0e7ff;--bs-btn-active-color:#312e81;--bs-btn-active-border-color:#e0e7ff}
.cta-ghost{--bs-btn-color:#fff;--bs-btn-border-color:rgba(255,255,255,.55);--bs-btn-hover-color:#fff;--bs-btn-hover-bg:rgba(255,255,255,.08);--bs-btn-hover-border-color:#fff;
  --bs-btn-active-color:#fff;--bs-btn-active-border-color:#fff}
.cta-split{--cta-ring:#9a3412;padding:0;background:#fff7ed;color:#431407}
.cta-split img{width:100%;height:100%;min-height:280px}
.cta-split .cta-eyebrow,.cta-split .cta-facts svg{color:#9a3412}
.cta-split .cta-facts svg{width:20px;height:20px;color:#c2410c}
.cta-split .cta-p{color:#7c2d12}
.cta-facts li{font-weight:600;font-size:.96rem}
.cta-orange{--bs-btn-bg:#c2410c;--bs-btn-border-color:#c2410c;--bs-btn-color:#fff;--bs-btn-hover-bg:#9a3412;--bs-btn-hover-border-color:#9a3412;--bs-btn-hover-color:#fff;
  --bs-btn-active-bg:#9a3412;--bs-btn-active-border-color:#9a3412;--bs-btn-active-color:#fff}
.cta-link{display:inline-flex;align-items:center;min-height:50px;padding:0 8px;color:#9a3412;font-weight:700;text-underline-offset:4px;border-radius:8px}
.cta-gradient{--cta-ring:#fff;color:#fff;background:linear-gradient(120deg,#9d174d,#6d28d9 52%,#1e40af)}
.cta-gradient::before,.cta-gradient::after{content:"";position:absolute;border-radius:50%;pointer-events:none;filter:blur(2px)}
.cta-gradient::before{width:340px;height:340px;right:-80px;top:-160px;background:radial-gradient(circle,rgba(255,255,255,.22),transparent 65%)}
.cta-gradient::after{width:260px;height:260px;left:30%;bottom:-170px;background:radial-gradient(circle,rgba(255,255,255,.16),transparent 65%)}
.cta-gradient>*{position:relative}
.cta-gradient .cta-p{color:#f5f3ff}
.cta-gradient .cta-light{--bs-btn-color:#5b21b6;--bs-btn-hover-color:#5b21b6;--bs-btn-active-color:#5b21b6}
.cta-email{--cta-ring:#bef264;background:#14532d;color:#f0fdf4}
.cta-email .cta-eyebrow{color:#bef264}
.cta-email .cta-p,.cta-email .form-text{color:#bbf7d0}
.cta-email .form-label{font-weight:700;font-size:.92rem}
.cta-email .form-control{min-height:52px;padding:0 16px;border:2px solid #86efac;border-radius:12px;color:#14532d}
.cta-email .form-control::placeholder{color:#4d7c5f}
.cta-email .form-text{margin-top:10px;font-size:.86rem}
.cta-lime{--bs-btn-bg:#bef264;--bs-btn-border-color:#bef264;--bs-btn-color:#1a2e05;--bs-btn-hover-bg:#d9f99d;--bs-btn-hover-border-color:#d9f99d;--bs-btn-hover-color:#1a2e05;
  --bs-btn-active-bg:#d9f99d;--bs-btn-active-border-color:#d9f99d;--bs-btn-active-color:#1a2e05}
.cta-app{--cta-ring:#0c4a6e;padding-bottom:0;background:#e0f2fe;color:#082f49}
.cta-app-copy{padding-bottom:clamp(40px,6vw,80px)}
.cta-app .cta-eyebrow{color:#075985}
.cta-app .cta-p{color:#0c4a6e}
.cta-store{--bs-btn-bg:#082f49;--bs-btn-border-color:#082f49;--bs-btn-color:#fff;--bs-btn-hover-bg:#0c4a6e;--bs-btn-hover-border-color:#0c4a6e;--bs-btn-hover-color:#fff;
  --bs-btn-active-bg:#0c4a6e;--bs-btn-active-border-color:#0c4a6e;--bs-btn-active-color:#fff;--bs-btn-padding-x:20px;min-height:56px;text-align:left;line-height:1.15}
.cta-store small{display:block;font-size:.72rem;font-weight:600;color:#bae6fd}
.cta-store svg{width:22px;height:22px}
.cta-phone{width:240px;height:330px;padding:14px 12px 0;border:10px solid #082f49;border-bottom:0;border-radius:38px 38px 0 0;background:#f8fafc;
  box-shadow:0 -10px 40px -10px rgba(8,47,73,.35);font-size:.8rem}
.cta-phone-top{display:flex;justify-content:space-between;font-weight:700;color:#082f49;margin-bottom:10px}
.cta-phone-top span{color:#0369a1}
.cta-fix{padding:10px 12px;margin-bottom:8px;border-radius:12px;background:#fff;border:1px solid #e2e8f0}
.cta-fix b{display:block;color:#082f49}
.cta-fix span{color:#475569}
.cta-fix em{float:right;font-style:normal;font-weight:700;font-size:.7rem;padding:2px 7px;border-radius:99px;background:#fef3c7;color:#92400e}
@media (max-width:991px){.cta-split img{height:auto;aspect-ratio:16/9;min-height:0}}
@media (max-width:767px){.cta-app-copy{padding-bottom:0}}
@media (max-width:480px){.cta-actions .btn{flex:1 1 100%}}
@media (prefers-reduced-motion:reduce){
  .cta-btn{transition:none}
  .cta-btn:hover{transform:none}
}

Tailwind 4 code

Requires: Tailwind CSS 4

HTML
<div><span class="mb-4 block text-[.72rem] tracking-[.12em] text-[#4c4a63] uppercase">Simple centred band</span>
<section class="relative overflow-hidden rounded-[28px] px-[clamp(20px,5vw,72px)] py-[clamp(40px,6vw,80px)] leading-normal [background:radial-gradient(60%_90%_at_50%_0%,#4338ca,transparent_70%),#312e81] text-center text-white" aria-labelledby="t-cta-trial">
  <h2 class="text-[clamp(1.8rem,1.2rem+2.2vw,2.75rem)] leading-[1.1] font-extrabold tracking-[-.025em] text-balance" id="t-cta-trial">Start your 14-day trial today</h2>
  <p class="mt-3.5 max-w-[56ch] text-[1.08rem] mx-auto text-[#c7d2fe]">No card needed. Import your projects from a CSV or your old tracker in a couple of minutes.</p>
  <div class="mt-[30px] flex flex-wrap gap-3 justify-center"><a class="inline-flex min-h-[50px] items-center justify-center gap-2 rounded-xl border-2 px-6 font-bold transition duration-200 hover:-translate-y-px focus-visible:outline-3 focus-visible:outline-offset-3 motion-reduce:transition-none motion-reduce:hover:translate-y-0 max-[480px]:flex-[1_1_100%] border-white bg-white text-[#312e81] hover:border-[#e0e7ff] hover:bg-[#e0e7ff] focus-visible:outline-white" href="#">Start free trial <svg class="size-[18px]" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><path d="M5 12h14M13 5l7 7-7 7"/></svg></a><a class="inline-flex min-h-[50px] items-center justify-center gap-2 rounded-xl border-2 px-6 font-bold transition duration-200 hover:-translate-y-px focus-visible:outline-3 focus-visible:outline-offset-3 motion-reduce:transition-none motion-reduce:hover:translate-y-0 max-[480px]:flex-[1_1_100%] border-white/55 text-white hover:border-white hover:bg-white/8 focus-visible:outline-white" href="#">Talk to sales</a></div>
  <p class="mt-[18px] text-[.9rem] text-[#c7d2fe]">Plans from £8 per person per month</p>
</section></div>

<div><span class="mb-4 block text-[.72rem] tracking-[.12em] text-[#4c4a63] uppercase">Split with a photo</span>
<section class="relative grid grid-cols-1 overflow-hidden rounded-[28px] bg-[#fff7ed] leading-normal text-[#431407] lg:grid-cols-2" aria-labelledby="t-cta-rooms">
  <figure><img class="block aspect-video h-auto w-full object-cover lg:aspect-auto lg:h-full lg:min-h-[280px]" src="https://images.unsplash.com/photo-1542744173-8e7e53415bb0?auto=format&fit=crop&w=1000&q=80" alt="A man presenting to colleagues seated round a long meeting table with laptops" width="1000" height="667" loading="lazy"></figure>
  <div class="self-center p-[clamp(32px,5vw,64px)]">
    <p class="mb-3 text-[.8rem] font-bold tracking-[.12em] uppercase text-[#9a3412]">Brightside Workspaces</p>
    <h2 class="text-[clamp(1.8rem,1.2rem+2.2vw,2.75rem)] leading-[1.1] font-extrabold tracking-[-.025em] text-balance" id="t-cta-rooms">Book a meeting room by the hour</h2>
    <p class="mt-3.5 max-w-[56ch] text-[1.08rem] text-[#7c2d12]">Twelve rooms across four city-centre sites, bookable from one hour, with nothing to sign.</p>
    <ul class="mt-[22px] grid gap-2.5"><li class="flex items-center gap-2.5 text-[.96rem] font-semibold"><svg class="size-5 flex-none text-[#c2410c]" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><path d="M20 6 9 17l-5-5"/></svg>Screens and video kit in every room</li><li class="flex items-center gap-2.5 text-[.96rem] font-semibold"><svg class="size-5 flex-none text-[#c2410c]" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><path d="M20 6 9 17l-5-5"/></svg>Coffee and water included</li><li class="flex items-center gap-2.5 text-[.96rem] font-semibold"><svg class="size-5 flex-none text-[#c2410c]" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><path d="M20 6 9 17l-5-5"/></svg>Free cancellation up to 24 hours before</li></ul>
    <div class="mt-[30px] flex flex-wrap gap-3"><a class="inline-flex min-h-[50px] items-center justify-center gap-2 rounded-xl border-2 px-6 font-bold transition duration-200 hover:-translate-y-px focus-visible:outline-3 focus-visible:outline-offset-3 motion-reduce:transition-none motion-reduce:hover:translate-y-0 max-[480px]:flex-[1_1_100%] border-[#c2410c] bg-[#c2410c] text-white hover:border-[#9a3412] hover:bg-[#9a3412] focus-visible:outline-[#9a3412]" href="#">Find a room near you <svg class="size-[18px]" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><path d="M5 12h14M13 5l7 7-7 7"/></svg></a><a class="inline-flex min-h-[50px] items-center rounded-lg px-2 font-bold text-[#9a3412] underline underline-offset-4 focus-visible:outline-3 focus-visible:outline-offset-3 focus-visible:outline-[#9a3412]" href="#">See room prices</a></div>
  </div>
</section></div>

<div><span class="mb-4 block text-[.72rem] tracking-[.12em] text-[#4c4a63] uppercase">Gradient band</span>
<section class="relative overflow-hidden rounded-[28px] px-[clamp(20px,5vw,72px)] py-[clamp(40px,6vw,80px)] leading-normal flex flex-wrap items-center justify-between gap-x-12 gap-y-7 bg-linear-120 from-[#9d174d] via-[#6d28d9] via-52% to-[#1e40af] text-white before:pointer-events-none before:absolute before:-top-40 before:-right-20 before:size-[340px] before:rounded-full before:bg-[radial-gradient(circle,rgba(255,255,255,.22),transparent_65%)] before:blur-[2px] before:content-[''] after:pointer-events-none after:absolute after:-bottom-[170px] after:left-[30%] after:size-[260px] after:rounded-full after:bg-[radial-gradient(circle,rgba(255,255,255,.16),transparent_65%)] after:blur-[2px] after:content-['']" aria-labelledby="t-cta-launch">
  <div class="relative">
    <h2 class="text-[clamp(1.8rem,1.2rem+2.2vw,2.75rem)] leading-[1.1] font-extrabold tracking-[-.025em] text-balance" id="t-cta-launch">Your next launch, without the late nights</h2>
    <p class="mt-3.5 max-w-[56ch] text-[1.08rem] text-[#f5f3ff]">Join 6,200 product teams who plan, review and ship in Plotline.</p>
  </div>
  <div class="relative flex flex-wrap gap-3"><a class="inline-flex min-h-[50px] items-center justify-center gap-2 rounded-xl border-2 px-6 font-bold transition duration-200 hover:-translate-y-px focus-visible:outline-3 focus-visible:outline-offset-3 motion-reduce:transition-none motion-reduce:hover:translate-y-0 max-[480px]:flex-[1_1_100%] border-white bg-white text-[#5b21b6] hover:border-[#e0e7ff] hover:bg-[#e0e7ff] focus-visible:outline-white" href="#">Get started free <svg class="size-[18px]" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><path d="M5 12h14M13 5l7 7-7 7"/></svg></a><a class="inline-flex min-h-[50px] items-center justify-center gap-2 rounded-xl border-2 px-6 font-bold transition duration-200 hover:-translate-y-px focus-visible:outline-3 focus-visible:outline-offset-3 motion-reduce:transition-none motion-reduce:hover:translate-y-0 max-[480px]:flex-[1_1_100%] border-white/55 text-white hover:border-white hover:bg-white/8 focus-visible:outline-white" href="#">Book a demo</a></div>
</section></div>

<div><span class="mb-4 block text-[.72rem] tracking-[.12em] text-[#4c4a63] uppercase">Email capture</span>
<section class="relative overflow-hidden rounded-[28px] px-[clamp(20px,5vw,72px)] py-[clamp(40px,6vw,80px)] leading-normal grid grid-cols-1 items-center gap-x-16 gap-y-7 bg-[#14532d] text-[#f0fdf4] lg:grid-cols-2" aria-labelledby="t-cta-news">
  <div>
    <p class="mb-3 text-[.8rem] font-bold tracking-[.12em] uppercase text-[#bef264]">The Margin</p>
    <h2 class="text-[clamp(1.8rem,1.2rem+2.2vw,2.75rem)] leading-[1.1] font-extrabold tracking-[-.025em] text-balance" id="t-cta-news">One email on Sunday. Five things worth reading.</h2>
    <p class="mt-3.5 max-w-[56ch] text-[1.08rem] text-[#bbf7d0]">Written by two editors for 48,000 small-business owners. No sponsored picks, ever.</p>
  </div>
  <form action="#" method="post">
    <label class="mb-2 block text-[.92rem] font-bold" for="t-cta-email-input">Email address</label>
    <div class="flex flex-col gap-2.5 min-[481px]:flex-row"><input class="min-h-[52px] min-w-0 flex-1 rounded-xl border-2 border-[#86efac] bg-white px-4 text-base text-[#14532d] placeholder:text-[#4d7c5f] focus-visible:outline-3 focus-visible:outline-offset-3 focus-visible:outline-[#bef264]" id="t-cta-email-input" type="email" name="email" autocomplete="email" placeholder="[email protected]" required aria-describedby="t-cta-email-hint"><button class="inline-flex min-h-[50px] items-center justify-center gap-2 rounded-xl border-2 px-6 font-bold transition duration-200 hover:-translate-y-px focus-visible:outline-3 focus-visible:outline-offset-3 motion-reduce:transition-none motion-reduce:hover:translate-y-0 cursor-pointer border-[#bef264] bg-[#bef264] text-[#1a2e05] hover:border-[#d9f99d] hover:bg-[#d9f99d] focus-visible:outline-[#bef264]" type="submit">Subscribe</button></div>
    <p class="mt-2.5 text-[.86rem] text-[#bbf7d0]" id="t-cta-email-hint">Unsubscribe in one click. We never share your address.</p>
  </form>
</section></div>

<div><span class="mb-4 block text-[.72rem] tracking-[.12em] text-[#4c4a63] uppercase">App download with a drawn phone</span>
<section class="relative overflow-hidden rounded-[28px] px-[clamp(20px,5vw,72px)] py-[clamp(40px,6vw,80px)] leading-normal grid grid-cols-1 gap-x-12 gap-y-6 bg-[#e0f2fe] pb-0! text-[#082f49] md:grid-cols-[7fr_5fr]" aria-labelledby="t-cta-app">
  <div class="md:pb-[clamp(40px,6vw,80px)]">
    <p class="mb-3 text-[.8rem] font-bold tracking-[.12em] uppercase text-[#075985]">Fieldday for grassroots clubs</p>
    <h2 class="text-[clamp(1.8rem,1.2rem+2.2vw,2.75rem)] leading-[1.1] font-extrabold tracking-[-.025em] text-balance" id="t-cta-app">Your club's fixtures in your pocket</h2>
    <p class="mt-3.5 max-w-[56ch] text-[1.08rem] text-[#0c4a6e]">Kick-off times, pitch changes and lift-shares for every team, with a notification the moment a match is called off.</p>
    <div class="mt-[30px] flex flex-wrap gap-3"><a class="inline-flex min-h-[50px] items-center justify-center gap-2 rounded-xl border-2 px-6 font-bold transition duration-200 hover:-translate-y-px focus-visible:outline-3 focus-visible:outline-offset-3 motion-reduce:transition-none motion-reduce:hover:translate-y-0 max-[480px]:flex-[1_1_100%] min-h-14 border-[#082f49] bg-[#082f49] px-5 text-left leading-[1.15] text-white hover:border-[#0c4a6e] hover:bg-[#0c4a6e] focus-visible:outline-[#0c4a6e]" href="#"><svg class="size-[22px]" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><rect x="5" y="2" width="14" height="20" rx="2"/><path d="M12 18h.01"/></svg><span><small class="block text-[.72rem] font-semibold text-[#bae6fd]">Download for</small>iPhone</span></a><a class="inline-flex min-h-[50px] items-center justify-center gap-2 rounded-xl border-2 px-6 font-bold transition duration-200 hover:-translate-y-px focus-visible:outline-3 focus-visible:outline-offset-3 motion-reduce:transition-none motion-reduce:hover:translate-y-0 max-[480px]:flex-[1_1_100%] min-h-14 border-[#082f49] bg-[#082f49] px-5 text-left leading-[1.15] text-white hover:border-[#0c4a6e] hover:bg-[#0c4a6e] focus-visible:outline-[#0c4a6e]" href="#"><svg class="size-[22px]" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><rect x="5" y="2" width="14" height="20" rx="2"/><path d="M12 18h.01"/></svg><span><small class="block text-[.72rem] font-semibold text-[#bae6fd]">Get it for</small>Android</span></a></div>
  </div>
  <div class="h-[330px] w-[240px] self-end justify-self-center rounded-t-[38px] border-10 border-b-0 border-[#082f49] bg-[#f8fafc] px-3 pt-3.5 text-[.8rem] shadow-[0_-10px_40px_-10px_rgba(8,47,73,.35)]" role="img" aria-label="The Fieldday app showing three fixtures for Saturday 24 October, the second one moved to pitch 4."><div class="mb-2.5 flex justify-between font-bold text-[#082f49]">Sat 24 Oct<span class="text-[#0369a1]">3 matches</span></div><div class="mb-2 rounded-xl border border-[#e2e8f0] bg-white px-3 py-2.5"><b class="block text-[#082f49]">U12 Hawks v Riverside</b><span class="text-[#475569]">09:30 · Pitch 2</span></div><div class="mb-2 rounded-xl border border-[#e2e8f0] bg-white px-3 py-2.5"><em class="float-right rounded-full bg-[#fef3c7] px-[7px] py-0.5 text-[.7rem] font-bold text-[#92400e] not-italic">Moved</em><b class="block text-[#082f49]">U14 Hawks v Elm Park</b><span class="text-[#475569]">11:00 · Pitch 4</span></div><div class="mb-2 rounded-xl border border-[#e2e8f0] bg-white px-3 py-2.5"><b class="block text-[#082f49]">Seniors v Castle Vale</b><span class="text-[#475569]">15:00 · Home</span></div></div>
</section></div>

About this set

Five call to action bands for the end of a landing page or the gap between feature sections. Simple centred band puts a headline, one line of copy, a solid and an outline button and a pricing note on a deep indigo ground. Split with a photo pairs a meeting room photo with an eyebrow, a headline, three ticked facts, an orange button and an underlined secondary link. Gradient band lays the copy and two buttons side by side on a magenta to blue gradient with two soft highlights. Email capture sets a newsletter pitch beside a form with a visible label, an email field, a submit button and a hint linked to the field. App download pairs two store buttons, written out with a generic phone icon instead of store logos, with a phone drawn in CSS that shows a fixtures list. Each band has one main action and at most one secondary one, and every button is a real link or a submit button with a focus outline chosen to read on its own background. The email field uses the browser’s required and type email checks, so nothing is sent until the address looks valid, and on phones the buttons go full width.

What’s included

  • Five bands: simple, split with a photo, gradient, email capture and app download
  • One primary and at most one secondary action per band
  • Email form with a visible label, autocomplete and a hint tied to the field
  • Store buttons written as text with a generic icon, no store logos
  • Phone mockup drawn in CSS with a text description
  • Buttons go full width on phones; no JavaScript

Accessibility

Each band is a section named by its h2. The email field has a visible label, autocomplete="email" and aria-describedby pointing at the hint, and the drawn phone has role img with a description of what it shows. Every link, button and field shows a 3px focus outline in a colour that passes against its band, and the hover lift and colour transitions stop under prefers-reduced-motion.

Customise it

Each band has its own class (.cta-simple, .cta-split, .cta-gradient, .cta-email, .cta-app) holding its colours and a --cta-ring focus colour, and --cta-radius sets the corners. In Bootstrap the buttons are restyled through --bs-btn-* variables on .cta-light, .cta-orange, .cta-lime and .cta-store; in Tailwind swap the hex values in the bg- and text- classes.