Open demo

CSS code

HTML
<div><span class="lbl">Full comparison, sticky header and feature column</span>
<section class="ct" aria-labelledby="ba-title">
  <p class="ct-kicker">Beacon Analytics</p><h2 class="ct-title" id="ba-title">Compare every plan, feature by feature</h2><p class="ct-sub">All prices in US dollars, billed monthly. Growth and Scale start with a 14-day trial.</p>
  <p class="ct-hint" id="ba-hint">The plan names stay in view while you scroll the table.</p>
  <div class="ct-scroll" role="region" aria-labelledby="ba-title" aria-describedby="ba-hint" tabindex="0">
    <table class="ct-table">
      <thead><tr><th scope="col">Features</th><th scope="col"><span class="ct-plan">Starter</span><span class="ct-price">$0</span><span class="ct-per">free forever</span><a class="ct-btn" href="#">Start free</a></th><th scope="col" class="is-rec"><span class="ct-badge">Recommended</span><span class="ct-plan">Growth</span><span class="ct-price">$39</span><span class="ct-per">per month</span><a class="ct-btn" href="#">Try Growth</a></th><th scope="col"><span class="ct-plan">Scale</span><span class="ct-price">$129</span><span class="ct-per">per month</span><a class="ct-btn" href="#">Try Scale</a></th></tr></thead>
      <tbody>
        <tr class="ct-group"><th scope="rowgroup" colspan="4"><span>Usage</span></th></tr>
        <tr><th scope="row">Tracked events a month</th><td>10,000</td><td class="is-rec">1 million</td><td>10 million</td></tr>
        <tr><th scope="row">Data retention</th><td>3 months</td><td class="is-rec">2 years</td><td>7 years</td></tr>
        <tr><th scope="row">Team seats</th><td>2</td><td class="is-rec">10</td><td>Unlimited</td></tr>
        <tr><th scope="row">Projects</th><td>1</td><td class="is-rec">5</td><td>Unlimited</td></tr>
      </tbody>
      <tbody>
        <tr class="ct-group"><th scope="rowgroup" colspan="4"><span>Reports</span></th></tr>
        <tr><th scope="row">Dashboards</th><td><svg viewBox="0 0 20 20" width="18" height="18" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><path d="M4.5 10.5l3.5 3.5 7.5-8"/></svg><span class="sr-only">Included</span></td><td class="is-rec"><svg viewBox="0 0 20 20" width="18" height="18" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><path d="M4.5 10.5l3.5 3.5 7.5-8"/></svg><span class="sr-only">Included</span></td><td><svg viewBox="0 0 20 20" width="18" height="18" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><path d="M4.5 10.5l3.5 3.5 7.5-8"/></svg><span class="sr-only">Included</span></td></tr>
        <tr><th scope="row">Funnels and retention</th><td><svg class="no" viewBox="0 0 20 20" width="18" height="18" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" aria-hidden="true" focusable="false"><path d="M6 6l8 8M14 6l-8 8"/></svg><span class="sr-only">Not included</span></td><td class="is-rec"><svg viewBox="0 0 20 20" width="18" height="18" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><path d="M4.5 10.5l3.5 3.5 7.5-8"/></svg><span class="sr-only">Included</span></td><td><svg viewBox="0 0 20 20" width="18" height="18" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><path d="M4.5 10.5l3.5 3.5 7.5-8"/></svg><span class="sr-only">Included</span></td></tr>
        <tr><th scope="row">Scheduled email reports</th><td><svg class="no" viewBox="0 0 20 20" width="18" height="18" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" aria-hidden="true" focusable="false"><path d="M6 6l8 8M14 6l-8 8"/></svg><span class="sr-only">Not included</span></td><td class="is-rec"><svg viewBox="0 0 20 20" width="18" height="18" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><path d="M4.5 10.5l3.5 3.5 7.5-8"/></svg><span class="sr-only">Included</span></td><td><svg viewBox="0 0 20 20" width="18" height="18" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><path d="M4.5 10.5l3.5 3.5 7.5-8"/></svg><span class="sr-only">Included</span></td></tr>
        <tr><th scope="row">Custom SQL queries</th><td><svg class="no" viewBox="0 0 20 20" width="18" height="18" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" aria-hidden="true" focusable="false"><path d="M6 6l8 8M14 6l-8 8"/></svg><span class="sr-only">Not included</span></td><td class="is-rec"><svg class="no" viewBox="0 0 20 20" width="18" height="18" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" aria-hidden="true" focusable="false"><path d="M6 6l8 8M14 6l-8 8"/></svg><span class="sr-only">Not included</span></td><td><svg viewBox="0 0 20 20" width="18" height="18" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><path d="M4.5 10.5l3.5 3.5 7.5-8"/></svg><span class="sr-only">Included</span></td></tr>
      </tbody>
      <tbody>
        <tr class="ct-group"><th scope="rowgroup" colspan="4"><span>Data and security</span></th></tr>
        <tr><th scope="row">CSV export</th><td><svg viewBox="0 0 20 20" width="18" height="18" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><path d="M4.5 10.5l3.5 3.5 7.5-8"/></svg><span class="sr-only">Included</span></td><td class="is-rec"><svg viewBox="0 0 20 20" width="18" height="18" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><path d="M4.5 10.5l3.5 3.5 7.5-8"/></svg><span class="sr-only">Included</span></td><td><svg viewBox="0 0 20 20" width="18" height="18" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><path d="M4.5 10.5l3.5 3.5 7.5-8"/></svg><span class="sr-only">Included</span></td></tr>
        <tr><th scope="row">Two-factor sign-in</th><td><svg viewBox="0 0 20 20" width="18" height="18" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><path d="M4.5 10.5l3.5 3.5 7.5-8"/></svg><span class="sr-only">Included</span></td><td class="is-rec"><svg viewBox="0 0 20 20" width="18" height="18" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><path d="M4.5 10.5l3.5 3.5 7.5-8"/></svg><span class="sr-only">Included</span></td><td><svg viewBox="0 0 20 20" width="18" height="18" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><path d="M4.5 10.5l3.5 3.5 7.5-8"/></svg><span class="sr-only">Included</span></td></tr>
        <tr><th scope="row">Warehouse sync</th><td><svg class="no" viewBox="0 0 20 20" width="18" height="18" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" aria-hidden="true" focusable="false"><path d="M6 6l8 8M14 6l-8 8"/></svg><span class="sr-only">Not included</span></td><td class="is-rec"><svg class="no" viewBox="0 0 20 20" width="18" height="18" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" aria-hidden="true" focusable="false"><path d="M6 6l8 8M14 6l-8 8"/></svg><span class="sr-only">Not included</span></td><td><svg viewBox="0 0 20 20" width="18" height="18" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><path d="M4.5 10.5l3.5 3.5 7.5-8"/></svg><span class="sr-only">Included</span></td></tr>
        <tr><th scope="row">SAML single sign-on</th><td><svg class="no" viewBox="0 0 20 20" width="18" height="18" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" aria-hidden="true" focusable="false"><path d="M6 6l8 8M14 6l-8 8"/></svg><span class="sr-only">Not included</span></td><td class="is-rec"><svg class="no" viewBox="0 0 20 20" width="18" height="18" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" aria-hidden="true" focusable="false"><path d="M6 6l8 8M14 6l-8 8"/></svg><span class="sr-only">Not included</span></td><td><svg viewBox="0 0 20 20" width="18" height="18" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><path d="M4.5 10.5l3.5 3.5 7.5-8"/></svg><span class="sr-only">Included</span></td></tr>
        <tr><th scope="row">Audit log</th><td><svg class="no" viewBox="0 0 20 20" width="18" height="18" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" aria-hidden="true" focusable="false"><path d="M6 6l8 8M14 6l-8 8"/></svg><span class="sr-only">Not included</span></td><td class="is-rec"><svg class="no" viewBox="0 0 20 20" width="18" height="18" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" aria-hidden="true" focusable="false"><path d="M6 6l8 8M14 6l-8 8"/></svg><span class="sr-only">Not included</span></td><td><svg viewBox="0 0 20 20" width="18" height="18" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><path d="M4.5 10.5l3.5 3.5 7.5-8"/></svg><span class="sr-only">Included</span></td></tr>
      </tbody>
      <tbody>
        <tr class="ct-group"><th scope="rowgroup" colspan="4"><span>Support</span></th></tr>
        <tr><th scope="row">Community forum</th><td><svg viewBox="0 0 20 20" width="18" height="18" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><path d="M4.5 10.5l3.5 3.5 7.5-8"/></svg><span class="sr-only">Included</span></td><td class="is-rec"><svg viewBox="0 0 20 20" width="18" height="18" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><path d="M4.5 10.5l3.5 3.5 7.5-8"/></svg><span class="sr-only">Included</span></td><td><svg viewBox="0 0 20 20" width="18" height="18" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><path d="M4.5 10.5l3.5 3.5 7.5-8"/></svg><span class="sr-only">Included</span></td></tr>
        <tr><th scope="row">Email support</th><td><svg class="no" viewBox="0 0 20 20" width="18" height="18" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" aria-hidden="true" focusable="false"><path d="M6 6l8 8M14 6l-8 8"/></svg><span class="sr-only">Not included</span></td><td class="is-rec">Next business day</td><td>Within 4 hours</td></tr>
        <tr><th scope="row">Named account manager</th><td><svg class="no" viewBox="0 0 20 20" width="18" height="18" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" aria-hidden="true" focusable="false"><path d="M6 6l8 8M14 6l-8 8"/></svg><span class="sr-only">Not included</span></td><td class="is-rec"><svg class="no" viewBox="0 0 20 20" width="18" height="18" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" aria-hidden="true" focusable="false"><path d="M6 6l8 8M14 6l-8 8"/></svg><span class="sr-only">Not included</span></td><td><svg viewBox="0 0 20 20" width="18" height="18" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><path d="M4.5 10.5l3.5 3.5 7.5-8"/></svg><span class="sr-only">Included</span></td></tr>
      </tbody>
    </table>
  </div>
</section></div>

<div><span class="lbl">Free and paid, with a caption</span>
<section class="ct">
  <div class="ct-card">
    <table class="ct-table mini">
      <caption>Sundial Free and Pro compared</caption>
      <thead><tr><th scope="col">Feature</th><th scope="col"><span class="ct-plan">Free</span><span class="ct-price">$0</span></th><th scope="col" class="is-rec"><span class="ct-badge">Recommended</span><span class="ct-plan">Pro</span><span class="ct-price">$5</span><span class="ct-per">per month</span></th></tr></thead>
      <tbody>
        <tr><th scope="row">Connected calendars</th><td>2</td><td class="is-rec">Unlimited</td></tr>
        <tr><th scope="row">Booking pages</th><td>1</td><td class="is-rec">Unlimited</td></tr>
        <tr><th scope="row">Email reminders</th><td><svg viewBox="0 0 20 20" width="18" height="18" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><path d="M4.5 10.5l3.5 3.5 7.5-8"/></svg><span class="sr-only">Included</span></td><td class="is-rec"><svg viewBox="0 0 20 20" width="18" height="18" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><path d="M4.5 10.5l3.5 3.5 7.5-8"/></svg><span class="sr-only">Included</span></td></tr>
        <tr><th scope="row">Text message reminders</th><td><svg class="no" viewBox="0 0 20 20" width="18" height="18" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" aria-hidden="true" focusable="false"><path d="M6 6l8 8M14 6l-8 8"/></svg><span class="sr-only">Not included</span></td><td class="is-rec"><svg viewBox="0 0 20 20" width="18" height="18" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><path d="M4.5 10.5l3.5 3.5 7.5-8"/></svg><span class="sr-only">Included</span></td></tr>
        <tr><th scope="row">Round-robin team scheduling</th><td><svg class="no" viewBox="0 0 20 20" width="18" height="18" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" aria-hidden="true" focusable="false"><path d="M6 6l8 8M14 6l-8 8"/></svg><span class="sr-only">Not included</span></td><td class="is-rec"><svg viewBox="0 0 20 20" width="18" height="18" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><path d="M4.5 10.5l3.5 3.5 7.5-8"/></svg><span class="sr-only">Included</span></td></tr>
        <tr><th scope="row">Remove Sundial branding</th><td><svg class="no" viewBox="0 0 20 20" width="18" height="18" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" aria-hidden="true" focusable="false"><path d="M6 6l8 8M14 6l-8 8"/></svg><span class="sr-only">Not included</span></td><td class="is-rec"><svg viewBox="0 0 20 20" width="18" height="18" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><path d="M4.5 10.5l3.5 3.5 7.5-8"/></svg><span class="sr-only">Included</span></td></tr>
      </tbody>
      <tfoot><tr><td><span class="sr-only">Choose a plan</span></td><td><a class="ct-btn" href="#">Use Free</a></td><td class="is-rec"><a class="ct-btn" href="#">Try Pro</a></td></tr></tfoot>
    </table>
  </div>
</section></div>
CSS
.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}
/* Comparison table: a real <table> in a focusable, labelled scroll region. The header row and feature column are sticky. */
.ct{--ct-accent:#1d4ed8;--ct-accent-dark:#1e40af;--ct-ink:#0f172a;--ct-muted:#526077;--ct-line:#e2e8f0;--ct-rec:#eef3ff;--ct-group:#f6f8fb;--ct-radius:16px;color:var(--ct-ink)}
.ct *,.ct *::before,.ct *::after{box-sizing:border-box}
.ct-kicker{margin:0;font-size:.78rem;font-weight:700;letter-spacing:.14em;text-transform:uppercase;color:var(--ct-accent)}
.ct-title{margin:8px 0 0;font-size:clamp(1.5rem,3.6vw,2rem);font-weight:800;line-height:1.15;letter-spacing:-.025em}
.ct-sub{margin:10px 0 0;font-size:.95rem;line-height:1.55;color:var(--ct-muted)}
.ct-hint{margin:22px 0 10px;font-size:.84rem;line-height:1.4;color:var(--ct-muted)}
.ct-scroll{position:relative;max-height:560px;overflow:auto;background:#fff;border:1px solid var(--ct-line);border-radius:var(--ct-radius);overscroll-behavior-x:contain}
.ct-scroll:focus-visible{outline:3px solid var(--ct-accent);outline-offset:3px}
.ct-table{width:100%;min-width:720px;border-collapse:separate;border-spacing:0;font-size:.92rem;line-height:1.4}
.ct-table th,.ct-table td{padding:14px 18px;border-bottom:1px solid var(--ct-line);text-align:center;vertical-align:middle}
.ct-table tbody tr:last-child>*{border-bottom:0}
.ct-table tbody th{position:sticky;left:0;z-index:1;width:34%;background:#fff;font-weight:500;text-align:left;box-shadow:1px 0 0 var(--ct-line)}
.ct-table thead th{position:sticky;top:0;z-index:2;padding:22px 18px 20px;background:#fff;vertical-align:bottom;font-weight:400}
.ct-table thead th:first-child{left:0;z-index:3;text-align:left;font-size:.84rem;font-weight:700;color:var(--ct-muted);box-shadow:1px 0 0 var(--ct-line)}
.ct-table .is-rec{background:var(--ct-rec)}
.ct-table thead .is-rec{box-shadow:inset 0 4px 0 var(--ct-accent)}
.ct-table .ct-group th{position:static;padding:10px 18px;background:var(--ct-group);font-size:.74rem;font-weight:700;letter-spacing:.12em;text-transform:uppercase;color:var(--ct-muted);box-shadow:none}
.ct-group span{position:sticky;left:18px}
.ct-table svg{display:inline-block;vertical-align:middle;color:var(--ct-accent)}
.ct-table .no{color:var(--ct-muted)}
.ct-plan{display:block;font-size:1.05rem;font-weight:700}
.ct-badge{display:inline-block;margin:0 0 8px;padding:4px 9px;border-radius:999px;background:var(--ct-accent);color:#fff;font-size:.68rem;font-weight:800;line-height:1.1;letter-spacing:.08em;text-transform:uppercase}
.ct-price{display:block;margin-top:6px;font-size:1.7rem;font-weight:800;line-height:1.1;letter-spacing:-.03em}
.ct-per{display:block;margin-top:2px;font-size:.8rem;color:var(--ct-muted)}
.ct-btn{display:inline-block;margin-top:14px;padding:8px 16px;border:1.5px solid var(--ct-accent);border-radius:10px;background:#fff;color:var(--ct-accent);font-size:.86rem;font-weight:700;line-height:1.3;text-decoration:none;white-space:nowrap;transition:background-color .2s,color .2s}
.ct-btn:hover{background:#e6edff}
.ct-btn:focus-visible{outline:3px solid var(--ct-accent);outline-offset:2px}
.is-rec .ct-btn{background:var(--ct-accent);color:#fff}
.is-rec .ct-btn:hover{background:var(--ct-accent-dark)}
/* compact two-plan table with a visible caption */
.ct-card{position:relative;max-width:680px;padding:8px 8px 12px;background:#fff;border:1px solid var(--ct-line);border-radius:var(--ct-radius)}
.ct-table.mini{min-width:0}
.ct-table.mini caption{padding:18px 14px 16px;font-size:1.2rem;font-weight:800;text-align:left;letter-spacing:-.01em}
.ct-table.mini th,.ct-table.mini td{padding:12px 14px}
.ct-table.mini thead th{position:static;padding-top:14px;padding-bottom:14px;border-radius:12px 12px 0 0}
.ct-table.mini thead th:first-child{box-shadow:none}
.ct-table.mini tbody th{position:static;width:auto;box-shadow:none}
.ct-table.mini tbody tr:last-child>*{border-bottom:1px solid var(--ct-line)}
.ct-table.mini tfoot td{padding-top:14px;border-bottom:0}
.ct-table.mini tfoot .is-rec{border-radius:0 0 12px 12px}
.ct-table.mini .ct-price{font-size:1.25rem}
.ct-table.mini .ct-btn{margin-top:0}
@media (max-width:575.98px){.ct-table:not(.mini){min-width:600px}.ct-table:not(.mini) tbody th,.ct-table:not(.mini) thead th:first-child{width:150px;padding-left:14px;padding-right:12px}.ct-table.mini th,.ct-table.mini td{padding:10px 8px}.ct-table.mini .ct-btn{padding:8px 10px}}
@media (prefers-reduced-motion:reduce){.ct-btn{transition:none}}

Bootstrap 5 code

Requires: Bootstrap 5.3.8 CSS

HTML
<div><span class="lbl">Full comparison, sticky header and feature column</span>
<section class="ct" aria-labelledby="ba-title">
  <p class="ct-kicker">Beacon Analytics</p><h2 class="ct-title" id="ba-title">Compare every plan, feature by feature</h2><p class="ct-sub">All prices in US dollars, billed monthly. Growth and Scale start with a 14-day trial.</p>
  <p class="ct-hint" id="ba-hint">The plan names stay in view while you scroll the table.</p>
  <div class="ct-scroll" role="region" aria-labelledby="ba-title" aria-describedby="ba-hint" tabindex="0">
    <table class="table ct-table">
      <thead><tr><th scope="col">Features</th><th scope="col"><span class="ct-plan">Starter</span><span class="ct-price">$0</span><span class="ct-per">free forever</span><a class="btn ct-btn" href="#">Start free</a></th><th scope="col" class="is-rec"><span class="badge rounded-pill ct-badge">Recommended</span><span class="ct-plan">Growth</span><span class="ct-price">$39</span><span class="ct-per">per month</span><a class="btn ct-btn" href="#">Try Growth</a></th><th scope="col"><span class="ct-plan">Scale</span><span class="ct-price">$129</span><span class="ct-per">per month</span><a class="btn ct-btn" href="#">Try Scale</a></th></tr></thead>
      <tbody>
        <tr class="ct-group"><th scope="rowgroup" colspan="4"><span>Usage</span></th></tr>
        <tr><th scope="row">Tracked events a month</th><td>10,000</td><td class="is-rec">1 million</td><td>10 million</td></tr>
        <tr><th scope="row">Data retention</th><td>3 months</td><td class="is-rec">2 years</td><td>7 years</td></tr>
        <tr><th scope="row">Team seats</th><td>2</td><td class="is-rec">10</td><td>Unlimited</td></tr>
        <tr><th scope="row">Projects</th><td>1</td><td class="is-rec">5</td><td>Unlimited</td></tr>
      </tbody>
      <tbody>
        <tr class="ct-group"><th scope="rowgroup" colspan="4"><span>Reports</span></th></tr>
        <tr><th scope="row">Dashboards</th><td><svg viewBox="0 0 20 20" width="18" height="18" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><path d="M4.5 10.5l3.5 3.5 7.5-8"/></svg><span class="visually-hidden">Included</span></td><td class="is-rec"><svg viewBox="0 0 20 20" width="18" height="18" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><path d="M4.5 10.5l3.5 3.5 7.5-8"/></svg><span class="visually-hidden">Included</span></td><td><svg viewBox="0 0 20 20" width="18" height="18" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><path d="M4.5 10.5l3.5 3.5 7.5-8"/></svg><span class="visually-hidden">Included</span></td></tr>
        <tr><th scope="row">Funnels and retention</th><td><svg class="no" viewBox="0 0 20 20" width="18" height="18" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" aria-hidden="true" focusable="false"><path d="M6 6l8 8M14 6l-8 8"/></svg><span class="visually-hidden">Not included</span></td><td class="is-rec"><svg viewBox="0 0 20 20" width="18" height="18" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><path d="M4.5 10.5l3.5 3.5 7.5-8"/></svg><span class="visually-hidden">Included</span></td><td><svg viewBox="0 0 20 20" width="18" height="18" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><path d="M4.5 10.5l3.5 3.5 7.5-8"/></svg><span class="visually-hidden">Included</span></td></tr>
        <tr><th scope="row">Scheduled email reports</th><td><svg class="no" viewBox="0 0 20 20" width="18" height="18" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" aria-hidden="true" focusable="false"><path d="M6 6l8 8M14 6l-8 8"/></svg><span class="visually-hidden">Not included</span></td><td class="is-rec"><svg viewBox="0 0 20 20" width="18" height="18" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><path d="M4.5 10.5l3.5 3.5 7.5-8"/></svg><span class="visually-hidden">Included</span></td><td><svg viewBox="0 0 20 20" width="18" height="18" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><path d="M4.5 10.5l3.5 3.5 7.5-8"/></svg><span class="visually-hidden">Included</span></td></tr>
        <tr><th scope="row">Custom SQL queries</th><td><svg class="no" viewBox="0 0 20 20" width="18" height="18" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" aria-hidden="true" focusable="false"><path d="M6 6l8 8M14 6l-8 8"/></svg><span class="visually-hidden">Not included</span></td><td class="is-rec"><svg class="no" viewBox="0 0 20 20" width="18" height="18" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" aria-hidden="true" focusable="false"><path d="M6 6l8 8M14 6l-8 8"/></svg><span class="visually-hidden">Not included</span></td><td><svg viewBox="0 0 20 20" width="18" height="18" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><path d="M4.5 10.5l3.5 3.5 7.5-8"/></svg><span class="visually-hidden">Included</span></td></tr>
      </tbody>
      <tbody>
        <tr class="ct-group"><th scope="rowgroup" colspan="4"><span>Data and security</span></th></tr>
        <tr><th scope="row">CSV export</th><td><svg viewBox="0 0 20 20" width="18" height="18" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><path d="M4.5 10.5l3.5 3.5 7.5-8"/></svg><span class="visually-hidden">Included</span></td><td class="is-rec"><svg viewBox="0 0 20 20" width="18" height="18" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><path d="M4.5 10.5l3.5 3.5 7.5-8"/></svg><span class="visually-hidden">Included</span></td><td><svg viewBox="0 0 20 20" width="18" height="18" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><path d="M4.5 10.5l3.5 3.5 7.5-8"/></svg><span class="visually-hidden">Included</span></td></tr>
        <tr><th scope="row">Two-factor sign-in</th><td><svg viewBox="0 0 20 20" width="18" height="18" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><path d="M4.5 10.5l3.5 3.5 7.5-8"/></svg><span class="visually-hidden">Included</span></td><td class="is-rec"><svg viewBox="0 0 20 20" width="18" height="18" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><path d="M4.5 10.5l3.5 3.5 7.5-8"/></svg><span class="visually-hidden">Included</span></td><td><svg viewBox="0 0 20 20" width="18" height="18" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><path d="M4.5 10.5l3.5 3.5 7.5-8"/></svg><span class="visually-hidden">Included</span></td></tr>
        <tr><th scope="row">Warehouse sync</th><td><svg class="no" viewBox="0 0 20 20" width="18" height="18" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" aria-hidden="true" focusable="false"><path d="M6 6l8 8M14 6l-8 8"/></svg><span class="visually-hidden">Not included</span></td><td class="is-rec"><svg class="no" viewBox="0 0 20 20" width="18" height="18" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" aria-hidden="true" focusable="false"><path d="M6 6l8 8M14 6l-8 8"/></svg><span class="visually-hidden">Not included</span></td><td><svg viewBox="0 0 20 20" width="18" height="18" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><path d="M4.5 10.5l3.5 3.5 7.5-8"/></svg><span class="visually-hidden">Included</span></td></tr>
        <tr><th scope="row">SAML single sign-on</th><td><svg class="no" viewBox="0 0 20 20" width="18" height="18" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" aria-hidden="true" focusable="false"><path d="M6 6l8 8M14 6l-8 8"/></svg><span class="visually-hidden">Not included</span></td><td class="is-rec"><svg class="no" viewBox="0 0 20 20" width="18" height="18" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" aria-hidden="true" focusable="false"><path d="M6 6l8 8M14 6l-8 8"/></svg><span class="visually-hidden">Not included</span></td><td><svg viewBox="0 0 20 20" width="18" height="18" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><path d="M4.5 10.5l3.5 3.5 7.5-8"/></svg><span class="visually-hidden">Included</span></td></tr>
        <tr><th scope="row">Audit log</th><td><svg class="no" viewBox="0 0 20 20" width="18" height="18" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" aria-hidden="true" focusable="false"><path d="M6 6l8 8M14 6l-8 8"/></svg><span class="visually-hidden">Not included</span></td><td class="is-rec"><svg class="no" viewBox="0 0 20 20" width="18" height="18" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" aria-hidden="true" focusable="false"><path d="M6 6l8 8M14 6l-8 8"/></svg><span class="visually-hidden">Not included</span></td><td><svg viewBox="0 0 20 20" width="18" height="18" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><path d="M4.5 10.5l3.5 3.5 7.5-8"/></svg><span class="visually-hidden">Included</span></td></tr>
      </tbody>
      <tbody>
        <tr class="ct-group"><th scope="rowgroup" colspan="4"><span>Support</span></th></tr>
        <tr><th scope="row">Community forum</th><td><svg viewBox="0 0 20 20" width="18" height="18" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><path d="M4.5 10.5l3.5 3.5 7.5-8"/></svg><span class="visually-hidden">Included</span></td><td class="is-rec"><svg viewBox="0 0 20 20" width="18" height="18" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><path d="M4.5 10.5l3.5 3.5 7.5-8"/></svg><span class="visually-hidden">Included</span></td><td><svg viewBox="0 0 20 20" width="18" height="18" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><path d="M4.5 10.5l3.5 3.5 7.5-8"/></svg><span class="visually-hidden">Included</span></td></tr>
        <tr><th scope="row">Email support</th><td><svg class="no" viewBox="0 0 20 20" width="18" height="18" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" aria-hidden="true" focusable="false"><path d="M6 6l8 8M14 6l-8 8"/></svg><span class="visually-hidden">Not included</span></td><td class="is-rec">Next business day</td><td>Within 4 hours</td></tr>
        <tr><th scope="row">Named account manager</th><td><svg class="no" viewBox="0 0 20 20" width="18" height="18" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" aria-hidden="true" focusable="false"><path d="M6 6l8 8M14 6l-8 8"/></svg><span class="visually-hidden">Not included</span></td><td class="is-rec"><svg class="no" viewBox="0 0 20 20" width="18" height="18" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" aria-hidden="true" focusable="false"><path d="M6 6l8 8M14 6l-8 8"/></svg><span class="visually-hidden">Not included</span></td><td><svg viewBox="0 0 20 20" width="18" height="18" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><path d="M4.5 10.5l3.5 3.5 7.5-8"/></svg><span class="visually-hidden">Included</span></td></tr>
      </tbody>
    </table>
  </div>
</section></div>

<div><span class="lbl">Free and paid, with a caption</span>
<section class="ct">
  <div class="ct-card">
    <table class="table caption-top ct-table mini">
      <caption>Sundial Free and Pro compared</caption>
      <thead><tr><th scope="col">Feature</th><th scope="col"><span class="ct-plan">Free</span><span class="ct-price">$0</span></th><th scope="col" class="is-rec"><span class="badge rounded-pill ct-badge">Recommended</span><span class="ct-plan">Pro</span><span class="ct-price">$5</span><span class="ct-per">per month</span></th></tr></thead>
      <tbody>
        <tr><th scope="row">Connected calendars</th><td>2</td><td class="is-rec">Unlimited</td></tr>
        <tr><th scope="row">Booking pages</th><td>1</td><td class="is-rec">Unlimited</td></tr>
        <tr><th scope="row">Email reminders</th><td><svg viewBox="0 0 20 20" width="18" height="18" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><path d="M4.5 10.5l3.5 3.5 7.5-8"/></svg><span class="visually-hidden">Included</span></td><td class="is-rec"><svg viewBox="0 0 20 20" width="18" height="18" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><path d="M4.5 10.5l3.5 3.5 7.5-8"/></svg><span class="visually-hidden">Included</span></td></tr>
        <tr><th scope="row">Text message reminders</th><td><svg class="no" viewBox="0 0 20 20" width="18" height="18" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" aria-hidden="true" focusable="false"><path d="M6 6l8 8M14 6l-8 8"/></svg><span class="visually-hidden">Not included</span></td><td class="is-rec"><svg viewBox="0 0 20 20" width="18" height="18" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><path d="M4.5 10.5l3.5 3.5 7.5-8"/></svg><span class="visually-hidden">Included</span></td></tr>
        <tr><th scope="row">Round-robin team scheduling</th><td><svg class="no" viewBox="0 0 20 20" width="18" height="18" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" aria-hidden="true" focusable="false"><path d="M6 6l8 8M14 6l-8 8"/></svg><span class="visually-hidden">Not included</span></td><td class="is-rec"><svg viewBox="0 0 20 20" width="18" height="18" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><path d="M4.5 10.5l3.5 3.5 7.5-8"/></svg><span class="visually-hidden">Included</span></td></tr>
        <tr><th scope="row">Remove Sundial branding</th><td><svg class="no" viewBox="0 0 20 20" width="18" height="18" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" aria-hidden="true" focusable="false"><path d="M6 6l8 8M14 6l-8 8"/></svg><span class="visually-hidden">Not included</span></td><td class="is-rec"><svg viewBox="0 0 20 20" width="18" height="18" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><path d="M4.5 10.5l3.5 3.5 7.5-8"/></svg><span class="visually-hidden">Included</span></td></tr>
      </tbody>
      <tfoot><tr><td><span class="visually-hidden">Choose a plan</span></td><td><a class="btn ct-btn" href="#">Use Free</a></td><td class="is-rec"><a class="btn ct-btn" href="#">Try Pro</a></td></tr></tfoot>
    </table>
  </div>
</section></div>
CSS
/* Comparison table on Bootstrap's .table, restyled through --bs-table-* variables, in a focusable scroll region with sticky headers. */
.ct{--ct-accent:#1d4ed8;--ct-accent-dark:#1e40af;--ct-ink:#0f172a;--ct-muted:#526077;--ct-line:#e2e8f0;--ct-rec:#eef3ff;--ct-group:#f6f8fb;color:var(--ct-ink)}
.ct-kicker{margin:0;font-size:.78rem;font-weight:700;letter-spacing:.14em;text-transform:uppercase;color:var(--ct-accent)}
.ct-title{margin:8px 0 0;font-size:clamp(1.5rem,3.6vw,2rem);font-weight:800;line-height:1.15;letter-spacing:-.025em}
.ct-sub{margin:10px 0 0;font-size:.95rem;line-height:1.55;color:var(--ct-muted)}
.ct-hint{margin:22px 0 10px;font-size:.84rem;line-height:1.4;color:var(--ct-muted)}
.ct-scroll{position:relative;max-height:560px;overflow:auto;background:#fff;border:1px solid var(--ct-line);border-radius:16px;overscroll-behavior-x:contain}
.ct-scroll:focus-visible{outline:3px solid var(--ct-accent);outline-offset:3px}
.ct-table{--bs-table-bg:#fff;--bs-table-color:var(--ct-ink);--bs-table-border-color:var(--ct-line);min-width:720px;margin:0;border-collapse:separate;border-spacing:0;font-size:.92rem;line-height:1.4}
.ct-table>:not(caption)>*>*{padding:14px 18px;text-align:center;vertical-align:middle}
.ct-table>tbody>tr:last-child>*{border-bottom:0}
.ct-table>tbody th{position:sticky;left:0;z-index:1;width:34%;font-weight:500;text-align:left;box-shadow:1px 0 0 var(--ct-line)}
.ct-table>thead th{position:sticky;top:0;z-index:2;padding:22px 18px 20px;vertical-align:bottom;font-weight:400}
.ct-table>thead th:first-child{left:0;z-index:3;text-align:left;font-size:.84rem;font-weight:700;color:var(--ct-muted);box-shadow:1px 0 0 var(--ct-line)}
.ct-table .is-rec{--bs-table-bg:var(--ct-rec)}
.ct-table>thead .is-rec{box-shadow:inset 0 4px 0 var(--ct-accent)}
.ct-table>tbody>.ct-group>th{--bs-table-bg:var(--ct-group);position:static;padding:10px 18px;font-size:.74rem;font-weight:700;letter-spacing:.12em;text-transform:uppercase;color:var(--ct-muted);box-shadow:none}
.ct-group span{position:sticky;left:18px}
.ct-table svg{display:inline-block;vertical-align:middle;color:var(--ct-accent)}
.ct-table .no{color:var(--ct-muted)}
.ct-plan{display:block;font-size:1.05rem;font-weight:700}
.ct-badge{--bs-badge-padding-x:9px;--bs-badge-padding-y:4px;--bs-badge-font-size:.68rem;--bs-badge-font-weight:800;margin:0 0 8px;background:var(--ct-accent);line-height:1.1;letter-spacing:.08em;text-transform:uppercase}
.ct-price{display:block;margin-top:6px;font-size:1.7rem;font-weight:800;line-height:1.1;letter-spacing:-.03em}
.ct-per{display:block;margin-top:2px;font-size:.8rem;color:var(--ct-muted)}
.ct-btn{--bs-btn-padding-x:16px;--bs-btn-padding-y:8px;--bs-btn-font-size:.86rem;--bs-btn-font-weight:700;--bs-btn-line-height:1.3;--bs-btn-border-width:1.5px;--bs-btn-border-radius:10px;
  --bs-btn-color:var(--ct-accent);--bs-btn-bg:#fff;--bs-btn-border-color:var(--ct-accent);--bs-btn-hover-color:var(--ct-accent);--bs-btn-hover-bg:#e6edff;--bs-btn-hover-border-color:var(--ct-accent);
  --bs-btn-active-color:var(--ct-accent);--bs-btn-active-bg:#d6e2ff;--bs-btn-active-border-color:var(--ct-accent);margin-top:14px;white-space:nowrap;transition:background-color .2s,color .2s}
.ct-btn:focus-visible{outline:3px solid var(--ct-accent);outline-offset:2px;box-shadow:none}
.is-rec .ct-btn{--bs-btn-color:#fff;--bs-btn-bg:var(--ct-accent);--bs-btn-hover-color:#fff;--bs-btn-hover-bg:var(--ct-accent-dark);--bs-btn-hover-border-color:var(--ct-accent-dark);--bs-btn-active-color:#fff;--bs-btn-active-bg:var(--ct-accent-dark)}
.ct-card{position:relative;max-width:680px;padding:8px 8px 12px;background:#fff;border:1px solid var(--ct-line);border-radius:16px}
.ct-table.mini{min-width:0}
.ct-table.mini>caption{padding:18px 14px 16px;font-size:1.2rem;font-weight:800;color:var(--ct-ink);text-align:left;letter-spacing:-.01em}
.ct-table.mini>:not(caption)>*>*{padding:12px 14px}
.ct-table.mini>thead th{position:static;padding-top:14px;padding-bottom:14px;border-radius:12px 12px 0 0}
.ct-table.mini>thead th:first-child{box-shadow:none}
.ct-table.mini>tbody th{position:static;width:auto;box-shadow:none}
.ct-table.mini>tbody>tr:last-child>*{border-bottom:1px solid var(--ct-line)}
.ct-table.mini>tfoot td{padding-top:14px;border-bottom:0}
.ct-table.mini>tfoot .is-rec{border-radius:0 0 12px 12px}
.ct-table.mini .ct-price{font-size:1.25rem}
.ct-table.mini .ct-btn{margin-top:0}
@media (max-width:575.98px){.ct-table:not(.mini){min-width:600px}.ct-table:not(.mini)>tbody th,.ct-table:not(.mini)>thead th:first-child{width:150px;padding-left:14px;padding-right:12px}.ct-table.mini>:not(caption)>*>*{padding:10px 8px}.ct-table.mini .ct-btn{--bs-btn-padding-x:10px}}
@media (prefers-reduced-motion:reduce){.ct-btn{transition:none}}

Tailwind 4 code

Requires: Tailwind CSS 4

HTML
<div><span class="mb-4 block text-[.72rem] tracking-[.12em] text-[#526077] uppercase">Full comparison, sticky header and feature column</span>
<section class="text-[#0f172a]" aria-labelledby="ba-title">
  <p class="text-[.78rem] font-bold tracking-[.14em] text-[#1d4ed8] uppercase">Beacon Analytics</p><h2 class="mt-2 text-[clamp(1.5rem,3.6vw,2rem)] leading-[1.15] font-extrabold tracking-[-.025em]" id="ba-title">Compare every plan, feature by feature</h2><p class="mt-2.5 text-[.95rem] leading-[1.55] text-[#526077]">All prices in US dollars, billed monthly. Growth and Scale start with a 14-day trial.</p>
  <p class="mt-[22px] mb-2.5 text-[.84rem] leading-[1.4] text-[#526077]" id="ba-hint">The plan names stay in view while you scroll the table.</p>
  <div class="relative max-h-[560px] overflow-auto overscroll-x-contain rounded-2xl border border-[#e2e8f0] bg-white focus-visible:outline-3 focus-visible:outline-offset-3 focus-visible:outline-[#1d4ed8]" role="region" aria-labelledby="ba-title" aria-describedby="ba-hint" tabindex="0">
    <table class="w-full min-w-[720px] max-sm:min-w-[600px] border-separate border-spacing-0 text-[.92rem] leading-[1.4]">
      <thead><tr><th scope="col" class="sticky top-0 left-0 z-[3] max-sm:w-[150px] max-sm:pl-3.5 max-sm:pr-3 border-b border-[#e2e8f0] bg-white px-[18px] pt-[22px] pb-5 text-left align-bottom text-[.84rem] font-bold text-[#526077] shadow-[1px_0_0_#e2e8f0]">Features</th><th scope="col" class="sticky top-0 z-[2] border-b border-[#e2e8f0] px-[18px] pt-[22px] pb-5 align-bottom font-normal bg-white"><span class="block text-[1.05rem] font-bold">Starter</span><span class="mt-1.5 block text-[1.7rem] leading-[1.1] font-extrabold tracking-[-.03em]">$0</span><span class="mt-0.5 block text-[.8rem] text-[#526077]">free forever</span><a class="mt-3.5 inline-block rounded-[10px] border-[1.5px] border-[#1d4ed8] px-4 py-2 text-[.86rem] leading-[1.3] font-bold whitespace-nowrap no-underline transition-[color,background-color,border-color] duration-200 motion-reduce:transition-none focus-visible:outline-3 focus-visible:outline-offset-2 focus-visible:outline-[#1d4ed8] bg-white text-[#1d4ed8] hover:bg-[#e6edff]" href="#">Start free</a></th><th scope="col" class="sticky top-0 z-[2] border-b border-[#e2e8f0] px-[18px] pt-[22px] pb-5 align-bottom font-normal bg-[#eef3ff] shadow-[inset_0_4px_0_#1d4ed8]"><span class="mb-2 inline-block rounded-full bg-[#1d4ed8] px-[9px] py-1 text-[.68rem] leading-[1.1] font-extrabold tracking-[.08em] text-white uppercase">Recommended</span><span class="block text-[1.05rem] font-bold">Growth</span><span class="mt-1.5 block text-[1.7rem] leading-[1.1] font-extrabold tracking-[-.03em]">$39</span><span class="mt-0.5 block text-[.8rem] text-[#526077]">per month</span><a class="mt-3.5 inline-block rounded-[10px] border-[1.5px] border-[#1d4ed8] px-4 py-2 text-[.86rem] leading-[1.3] font-bold whitespace-nowrap no-underline transition-[color,background-color,border-color] duration-200 motion-reduce:transition-none focus-visible:outline-3 focus-visible:outline-offset-2 focus-visible:outline-[#1d4ed8] bg-[#1d4ed8] text-white hover:border-[#1e40af] hover:bg-[#1e40af]" href="#">Try Growth</a></th><th scope="col" class="sticky top-0 z-[2] border-b border-[#e2e8f0] px-[18px] pt-[22px] pb-5 align-bottom font-normal bg-white"><span class="block text-[1.05rem] font-bold">Scale</span><span class="mt-1.5 block text-[1.7rem] leading-[1.1] font-extrabold tracking-[-.03em]">$129</span><span class="mt-0.5 block text-[.8rem] text-[#526077]">per month</span><a class="mt-3.5 inline-block rounded-[10px] border-[1.5px] border-[#1d4ed8] px-4 py-2 text-[.86rem] leading-[1.3] font-bold whitespace-nowrap no-underline transition-[color,background-color,border-color] duration-200 motion-reduce:transition-none focus-visible:outline-3 focus-visible:outline-offset-2 focus-visible:outline-[#1d4ed8] bg-white text-[#1d4ed8] hover:bg-[#e6edff]" href="#">Try Scale</a></th></tr></thead>
      <tbody>
        <tr><th scope="rowgroup" colspan="4" class="border-b border-[#e2e8f0] bg-[#f6f8fb] px-[18px] py-2.5 text-left text-[.74rem] font-bold tracking-[.12em] text-[#526077] uppercase"><span class="sticky left-[18px]">Usage</span></th></tr>
        <tr><th scope="row" class="sticky left-0 z-[1] w-[34%] max-sm:w-[150px] max-sm:pl-3.5 max-sm:pr-3 border-b border-[#e2e8f0] bg-white px-[18px] py-3.5 text-left font-medium shadow-[1px_0_0_#e2e8f0]">Tracked events a month</th><td class="border-b border-[#e2e8f0] px-[18px] py-3.5 text-center align-middle">10,000</td><td class="border-b border-[#e2e8f0] px-[18px] py-3.5 text-center align-middle bg-[#eef3ff]">1 million</td><td class="border-b border-[#e2e8f0] px-[18px] py-3.5 text-center align-middle">10 million</td></tr>
        <tr><th scope="row" class="sticky left-0 z-[1] w-[34%] max-sm:w-[150px] max-sm:pl-3.5 max-sm:pr-3 border-b border-[#e2e8f0] bg-white px-[18px] py-3.5 text-left font-medium shadow-[1px_0_0_#e2e8f0]">Data retention</th><td class="border-b border-[#e2e8f0] px-[18px] py-3.5 text-center align-middle">3 months</td><td class="border-b border-[#e2e8f0] px-[18px] py-3.5 text-center align-middle bg-[#eef3ff]">2 years</td><td class="border-b border-[#e2e8f0] px-[18px] py-3.5 text-center align-middle">7 years</td></tr>
        <tr><th scope="row" class="sticky left-0 z-[1] w-[34%] max-sm:w-[150px] max-sm:pl-3.5 max-sm:pr-3 border-b border-[#e2e8f0] bg-white px-[18px] py-3.5 text-left font-medium shadow-[1px_0_0_#e2e8f0]">Team seats</th><td class="border-b border-[#e2e8f0] px-[18px] py-3.5 text-center align-middle">2</td><td class="border-b border-[#e2e8f0] px-[18px] py-3.5 text-center align-middle bg-[#eef3ff]">10</td><td class="border-b border-[#e2e8f0] px-[18px] py-3.5 text-center align-middle">Unlimited</td></tr>
        <tr><th scope="row" class="sticky left-0 z-[1] w-[34%] max-sm:w-[150px] max-sm:pl-3.5 max-sm:pr-3 border-b border-[#e2e8f0] bg-white px-[18px] py-3.5 text-left font-medium shadow-[1px_0_0_#e2e8f0]">Projects</th><td class="border-b border-[#e2e8f0] px-[18px] py-3.5 text-center align-middle">1</td><td class="border-b border-[#e2e8f0] px-[18px] py-3.5 text-center align-middle bg-[#eef3ff]">5</td><td class="border-b border-[#e2e8f0] px-[18px] py-3.5 text-center align-middle">Unlimited</td></tr>
      </tbody>
      <tbody>
        <tr><th scope="rowgroup" colspan="4" class="border-b border-[#e2e8f0] bg-[#f6f8fb] px-[18px] py-2.5 text-left text-[.74rem] font-bold tracking-[.12em] text-[#526077] uppercase"><span class="sticky left-[18px]">Reports</span></th></tr>
        <tr><th scope="row" class="sticky left-0 z-[1] w-[34%] max-sm:w-[150px] max-sm:pl-3.5 max-sm:pr-3 border-b border-[#e2e8f0] bg-white px-[18px] py-3.5 text-left font-medium shadow-[1px_0_0_#e2e8f0]">Dashboards</th><td class="border-b border-[#e2e8f0] px-[18px] py-3.5 text-center align-middle"><svg class="inline-block align-middle text-[#1d4ed8]" viewBox="0 0 20 20" width="18" height="18" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><path d="M4.5 10.5l3.5 3.5 7.5-8"/></svg><span class="sr-only">Included</span></td><td class="border-b border-[#e2e8f0] px-[18px] py-3.5 text-center align-middle bg-[#eef3ff]"><svg class="inline-block align-middle text-[#1d4ed8]" viewBox="0 0 20 20" width="18" height="18" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><path d="M4.5 10.5l3.5 3.5 7.5-8"/></svg><span class="sr-only">Included</span></td><td class="border-b border-[#e2e8f0] px-[18px] py-3.5 text-center align-middle"><svg class="inline-block align-middle text-[#1d4ed8]" viewBox="0 0 20 20" width="18" height="18" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><path d="M4.5 10.5l3.5 3.5 7.5-8"/></svg><span class="sr-only">Included</span></td></tr>
        <tr><th scope="row" class="sticky left-0 z-[1] w-[34%] max-sm:w-[150px] max-sm:pl-3.5 max-sm:pr-3 border-b border-[#e2e8f0] bg-white px-[18px] py-3.5 text-left font-medium shadow-[1px_0_0_#e2e8f0]">Funnels and retention</th><td class="border-b border-[#e2e8f0] px-[18px] py-3.5 text-center align-middle"><svg class="inline-block align-middle text-[#526077]" viewBox="0 0 20 20" width="18" height="18" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" aria-hidden="true" focusable="false"><path d="M6 6l8 8M14 6l-8 8"/></svg><span class="sr-only">Not included</span></td><td class="border-b border-[#e2e8f0] px-[18px] py-3.5 text-center align-middle bg-[#eef3ff]"><svg class="inline-block align-middle text-[#1d4ed8]" viewBox="0 0 20 20" width="18" height="18" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><path d="M4.5 10.5l3.5 3.5 7.5-8"/></svg><span class="sr-only">Included</span></td><td class="border-b border-[#e2e8f0] px-[18px] py-3.5 text-center align-middle"><svg class="inline-block align-middle text-[#1d4ed8]" viewBox="0 0 20 20" width="18" height="18" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><path d="M4.5 10.5l3.5 3.5 7.5-8"/></svg><span class="sr-only">Included</span></td></tr>
        <tr><th scope="row" class="sticky left-0 z-[1] w-[34%] max-sm:w-[150px] max-sm:pl-3.5 max-sm:pr-3 border-b border-[#e2e8f0] bg-white px-[18px] py-3.5 text-left font-medium shadow-[1px_0_0_#e2e8f0]">Scheduled email reports</th><td class="border-b border-[#e2e8f0] px-[18px] py-3.5 text-center align-middle"><svg class="inline-block align-middle text-[#526077]" viewBox="0 0 20 20" width="18" height="18" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" aria-hidden="true" focusable="false"><path d="M6 6l8 8M14 6l-8 8"/></svg><span class="sr-only">Not included</span></td><td class="border-b border-[#e2e8f0] px-[18px] py-3.5 text-center align-middle bg-[#eef3ff]"><svg class="inline-block align-middle text-[#1d4ed8]" viewBox="0 0 20 20" width="18" height="18" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><path d="M4.5 10.5l3.5 3.5 7.5-8"/></svg><span class="sr-only">Included</span></td><td class="border-b border-[#e2e8f0] px-[18px] py-3.5 text-center align-middle"><svg class="inline-block align-middle text-[#1d4ed8]" viewBox="0 0 20 20" width="18" height="18" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><path d="M4.5 10.5l3.5 3.5 7.5-8"/></svg><span class="sr-only">Included</span></td></tr>
        <tr><th scope="row" class="sticky left-0 z-[1] w-[34%] max-sm:w-[150px] max-sm:pl-3.5 max-sm:pr-3 border-b border-[#e2e8f0] bg-white px-[18px] py-3.5 text-left font-medium shadow-[1px_0_0_#e2e8f0]">Custom SQL queries</th><td class="border-b border-[#e2e8f0] px-[18px] py-3.5 text-center align-middle"><svg class="inline-block align-middle text-[#526077]" viewBox="0 0 20 20" width="18" height="18" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" aria-hidden="true" focusable="false"><path d="M6 6l8 8M14 6l-8 8"/></svg><span class="sr-only">Not included</span></td><td class="border-b border-[#e2e8f0] px-[18px] py-3.5 text-center align-middle bg-[#eef3ff]"><svg class="inline-block align-middle text-[#526077]" viewBox="0 0 20 20" width="18" height="18" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" aria-hidden="true" focusable="false"><path d="M6 6l8 8M14 6l-8 8"/></svg><span class="sr-only">Not included</span></td><td class="border-b border-[#e2e8f0] px-[18px] py-3.5 text-center align-middle"><svg class="inline-block align-middle text-[#1d4ed8]" viewBox="0 0 20 20" width="18" height="18" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><path d="M4.5 10.5l3.5 3.5 7.5-8"/></svg><span class="sr-only">Included</span></td></tr>
      </tbody>
      <tbody>
        <tr><th scope="rowgroup" colspan="4" class="border-b border-[#e2e8f0] bg-[#f6f8fb] px-[18px] py-2.5 text-left text-[.74rem] font-bold tracking-[.12em] text-[#526077] uppercase"><span class="sticky left-[18px]">Data and security</span></th></tr>
        <tr><th scope="row" class="sticky left-0 z-[1] w-[34%] max-sm:w-[150px] max-sm:pl-3.5 max-sm:pr-3 border-b border-[#e2e8f0] bg-white px-[18px] py-3.5 text-left font-medium shadow-[1px_0_0_#e2e8f0]">CSV export</th><td class="border-b border-[#e2e8f0] px-[18px] py-3.5 text-center align-middle"><svg class="inline-block align-middle text-[#1d4ed8]" viewBox="0 0 20 20" width="18" height="18" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><path d="M4.5 10.5l3.5 3.5 7.5-8"/></svg><span class="sr-only">Included</span></td><td class="border-b border-[#e2e8f0] px-[18px] py-3.5 text-center align-middle bg-[#eef3ff]"><svg class="inline-block align-middle text-[#1d4ed8]" viewBox="0 0 20 20" width="18" height="18" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><path d="M4.5 10.5l3.5 3.5 7.5-8"/></svg><span class="sr-only">Included</span></td><td class="border-b border-[#e2e8f0] px-[18px] py-3.5 text-center align-middle"><svg class="inline-block align-middle text-[#1d4ed8]" viewBox="0 0 20 20" width="18" height="18" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><path d="M4.5 10.5l3.5 3.5 7.5-8"/></svg><span class="sr-only">Included</span></td></tr>
        <tr><th scope="row" class="sticky left-0 z-[1] w-[34%] max-sm:w-[150px] max-sm:pl-3.5 max-sm:pr-3 border-b border-[#e2e8f0] bg-white px-[18px] py-3.5 text-left font-medium shadow-[1px_0_0_#e2e8f0]">Two-factor sign-in</th><td class="border-b border-[#e2e8f0] px-[18px] py-3.5 text-center align-middle"><svg class="inline-block align-middle text-[#1d4ed8]" viewBox="0 0 20 20" width="18" height="18" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><path d="M4.5 10.5l3.5 3.5 7.5-8"/></svg><span class="sr-only">Included</span></td><td class="border-b border-[#e2e8f0] px-[18px] py-3.5 text-center align-middle bg-[#eef3ff]"><svg class="inline-block align-middle text-[#1d4ed8]" viewBox="0 0 20 20" width="18" height="18" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><path d="M4.5 10.5l3.5 3.5 7.5-8"/></svg><span class="sr-only">Included</span></td><td class="border-b border-[#e2e8f0] px-[18px] py-3.5 text-center align-middle"><svg class="inline-block align-middle text-[#1d4ed8]" viewBox="0 0 20 20" width="18" height="18" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><path d="M4.5 10.5l3.5 3.5 7.5-8"/></svg><span class="sr-only">Included</span></td></tr>
        <tr><th scope="row" class="sticky left-0 z-[1] w-[34%] max-sm:w-[150px] max-sm:pl-3.5 max-sm:pr-3 border-b border-[#e2e8f0] bg-white px-[18px] py-3.5 text-left font-medium shadow-[1px_0_0_#e2e8f0]">Warehouse sync</th><td class="border-b border-[#e2e8f0] px-[18px] py-3.5 text-center align-middle"><svg class="inline-block align-middle text-[#526077]" viewBox="0 0 20 20" width="18" height="18" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" aria-hidden="true" focusable="false"><path d="M6 6l8 8M14 6l-8 8"/></svg><span class="sr-only">Not included</span></td><td class="border-b border-[#e2e8f0] px-[18px] py-3.5 text-center align-middle bg-[#eef3ff]"><svg class="inline-block align-middle text-[#526077]" viewBox="0 0 20 20" width="18" height="18" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" aria-hidden="true" focusable="false"><path d="M6 6l8 8M14 6l-8 8"/></svg><span class="sr-only">Not included</span></td><td class="border-b border-[#e2e8f0] px-[18px] py-3.5 text-center align-middle"><svg class="inline-block align-middle text-[#1d4ed8]" viewBox="0 0 20 20" width="18" height="18" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><path d="M4.5 10.5l3.5 3.5 7.5-8"/></svg><span class="sr-only">Included</span></td></tr>
        <tr><th scope="row" class="sticky left-0 z-[1] w-[34%] max-sm:w-[150px] max-sm:pl-3.5 max-sm:pr-3 border-b border-[#e2e8f0] bg-white px-[18px] py-3.5 text-left font-medium shadow-[1px_0_0_#e2e8f0]">SAML single sign-on</th><td class="border-b border-[#e2e8f0] px-[18px] py-3.5 text-center align-middle"><svg class="inline-block align-middle text-[#526077]" viewBox="0 0 20 20" width="18" height="18" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" aria-hidden="true" focusable="false"><path d="M6 6l8 8M14 6l-8 8"/></svg><span class="sr-only">Not included</span></td><td class="border-b border-[#e2e8f0] px-[18px] py-3.5 text-center align-middle bg-[#eef3ff]"><svg class="inline-block align-middle text-[#526077]" viewBox="0 0 20 20" width="18" height="18" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" aria-hidden="true" focusable="false"><path d="M6 6l8 8M14 6l-8 8"/></svg><span class="sr-only">Not included</span></td><td class="border-b border-[#e2e8f0] px-[18px] py-3.5 text-center align-middle"><svg class="inline-block align-middle text-[#1d4ed8]" viewBox="0 0 20 20" width="18" height="18" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><path d="M4.5 10.5l3.5 3.5 7.5-8"/></svg><span class="sr-only">Included</span></td></tr>
        <tr><th scope="row" class="sticky left-0 z-[1] w-[34%] max-sm:w-[150px] max-sm:pl-3.5 max-sm:pr-3 border-b border-[#e2e8f0] bg-white px-[18px] py-3.5 text-left font-medium shadow-[1px_0_0_#e2e8f0]">Audit log</th><td class="border-b border-[#e2e8f0] px-[18px] py-3.5 text-center align-middle"><svg class="inline-block align-middle text-[#526077]" viewBox="0 0 20 20" width="18" height="18" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" aria-hidden="true" focusable="false"><path d="M6 6l8 8M14 6l-8 8"/></svg><span class="sr-only">Not included</span></td><td class="border-b border-[#e2e8f0] px-[18px] py-3.5 text-center align-middle bg-[#eef3ff]"><svg class="inline-block align-middle text-[#526077]" viewBox="0 0 20 20" width="18" height="18" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" aria-hidden="true" focusable="false"><path d="M6 6l8 8M14 6l-8 8"/></svg><span class="sr-only">Not included</span></td><td class="border-b border-[#e2e8f0] px-[18px] py-3.5 text-center align-middle"><svg class="inline-block align-middle text-[#1d4ed8]" viewBox="0 0 20 20" width="18" height="18" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><path d="M4.5 10.5l3.5 3.5 7.5-8"/></svg><span class="sr-only">Included</span></td></tr>
      </tbody>
      <tbody>
        <tr><th scope="rowgroup" colspan="4" class="border-b border-[#e2e8f0] bg-[#f6f8fb] px-[18px] py-2.5 text-left text-[.74rem] font-bold tracking-[.12em] text-[#526077] uppercase"><span class="sticky left-[18px]">Support</span></th></tr>
        <tr><th scope="row" class="sticky left-0 z-[1] w-[34%] max-sm:w-[150px] max-sm:pl-3.5 max-sm:pr-3 border-b border-[#e2e8f0] bg-white px-[18px] py-3.5 text-left font-medium shadow-[1px_0_0_#e2e8f0]">Community forum</th><td class="border-b border-[#e2e8f0] px-[18px] py-3.5 text-center align-middle"><svg class="inline-block align-middle text-[#1d4ed8]" viewBox="0 0 20 20" width="18" height="18" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><path d="M4.5 10.5l3.5 3.5 7.5-8"/></svg><span class="sr-only">Included</span></td><td class="border-b border-[#e2e8f0] px-[18px] py-3.5 text-center align-middle bg-[#eef3ff]"><svg class="inline-block align-middle text-[#1d4ed8]" viewBox="0 0 20 20" width="18" height="18" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><path d="M4.5 10.5l3.5 3.5 7.5-8"/></svg><span class="sr-only">Included</span></td><td class="border-b border-[#e2e8f0] px-[18px] py-3.5 text-center align-middle"><svg class="inline-block align-middle text-[#1d4ed8]" viewBox="0 0 20 20" width="18" height="18" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><path d="M4.5 10.5l3.5 3.5 7.5-8"/></svg><span class="sr-only">Included</span></td></tr>
        <tr><th scope="row" class="sticky left-0 z-[1] w-[34%] max-sm:w-[150px] max-sm:pl-3.5 max-sm:pr-3 border-b border-[#e2e8f0] bg-white px-[18px] py-3.5 text-left font-medium shadow-[1px_0_0_#e2e8f0]">Email support</th><td class="border-b border-[#e2e8f0] px-[18px] py-3.5 text-center align-middle"><svg class="inline-block align-middle text-[#526077]" viewBox="0 0 20 20" width="18" height="18" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" aria-hidden="true" focusable="false"><path d="M6 6l8 8M14 6l-8 8"/></svg><span class="sr-only">Not included</span></td><td class="border-b border-[#e2e8f0] px-[18px] py-3.5 text-center align-middle bg-[#eef3ff]">Next business day</td><td class="border-b border-[#e2e8f0] px-[18px] py-3.5 text-center align-middle">Within 4 hours</td></tr>
        <tr><th scope="row" class="sticky left-0 z-[1] w-[34%] max-sm:w-[150px] max-sm:pl-3.5 max-sm:pr-3 bg-white px-[18px] py-3.5 text-left font-medium shadow-[1px_0_0_#e2e8f0]">Named account manager</th><td class="px-[18px] py-3.5 text-center align-middle"><svg class="inline-block align-middle text-[#526077]" viewBox="0 0 20 20" width="18" height="18" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" aria-hidden="true" focusable="false"><path d="M6 6l8 8M14 6l-8 8"/></svg><span class="sr-only">Not included</span></td><td class="px-[18px] py-3.5 text-center align-middle bg-[#eef3ff]"><svg class="inline-block align-middle text-[#526077]" viewBox="0 0 20 20" width="18" height="18" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" aria-hidden="true" focusable="false"><path d="M6 6l8 8M14 6l-8 8"/></svg><span class="sr-only">Not included</span></td><td class="px-[18px] py-3.5 text-center align-middle"><svg class="inline-block align-middle text-[#1d4ed8]" viewBox="0 0 20 20" width="18" height="18" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><path d="M4.5 10.5l3.5 3.5 7.5-8"/></svg><span class="sr-only">Included</span></td></tr>
      </tbody>
    </table>
  </div>
</section></div>

<div><span class="mb-4 block text-[.72rem] tracking-[.12em] text-[#526077] uppercase">Free and paid, with a caption</span>
<section class="text-[#0f172a]">
  <div class="relative max-w-[680px] rounded-2xl border border-[#e2e8f0] bg-white px-2 pt-2 pb-3">
    <table class="w-full border-separate border-spacing-0 text-[.92rem] leading-[1.4]">
      <caption class="px-3.5 pt-[18px] pb-4 text-left text-[1.2rem] font-extrabold tracking-[-.01em]">Sundial Free and Pro compared</caption>
      <thead><tr><th scope="col" class="border-b border-[#e2e8f0] px-3.5 py-3.5 text-left align-bottom text-[.84rem] font-bold text-[#526077] max-sm:px-2">Feature</th><th scope="col" class="border-b border-[#e2e8f0] px-3.5 py-3.5 text-center align-bottom font-normal max-sm:px-2"><span class="block text-[1.05rem] font-bold">Free</span><span class="mt-1.5 block text-[1.25rem] leading-[1.1] font-extrabold tracking-[-.03em]">$0</span></th><th scope="col" class="rounded-t-xl border-b border-[#e2e8f0] bg-[#eef3ff] shadow-[inset_0_4px_0_#1d4ed8] px-3.5 py-3.5 text-center align-bottom font-normal max-sm:px-2"><span class="mb-2 inline-block rounded-full bg-[#1d4ed8] px-[9px] py-1 text-[.68rem] leading-[1.1] font-extrabold tracking-[.08em] text-white uppercase">Recommended</span><span class="block text-[1.05rem] font-bold">Pro</span><span class="mt-1.5 block text-[1.25rem] leading-[1.1] font-extrabold tracking-[-.03em]">$5</span><span class="mt-0.5 block text-[.8rem] text-[#526077]">per month</span></th></tr></thead>
      <tbody>
        <tr><th scope="row" class="border-b border-[#e2e8f0] px-3.5 py-3 text-left font-medium max-sm:px-2 max-sm:py-2.5">Connected calendars</th><td class="border-b border-[#e2e8f0] px-3.5 py-3 max-sm:px-2 max-sm:py-2.5 text-center align-middle">2</td><td class="border-b border-[#e2e8f0] px-3.5 py-3 max-sm:px-2 max-sm:py-2.5 text-center align-middle bg-[#eef3ff]">Unlimited</td></tr>
        <tr><th scope="row" class="border-b border-[#e2e8f0] px-3.5 py-3 text-left font-medium max-sm:px-2 max-sm:py-2.5">Booking pages</th><td class="border-b border-[#e2e8f0] px-3.5 py-3 max-sm:px-2 max-sm:py-2.5 text-center align-middle">1</td><td class="border-b border-[#e2e8f0] px-3.5 py-3 max-sm:px-2 max-sm:py-2.5 text-center align-middle bg-[#eef3ff]">Unlimited</td></tr>
        <tr><th scope="row" class="border-b border-[#e2e8f0] px-3.5 py-3 text-left font-medium max-sm:px-2 max-sm:py-2.5">Email reminders</th><td class="border-b border-[#e2e8f0] px-3.5 py-3 max-sm:px-2 max-sm:py-2.5 text-center align-middle"><svg class="inline-block align-middle text-[#1d4ed8]" viewBox="0 0 20 20" width="18" height="18" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><path d="M4.5 10.5l3.5 3.5 7.5-8"/></svg><span class="sr-only">Included</span></td><td class="border-b border-[#e2e8f0] px-3.5 py-3 max-sm:px-2 max-sm:py-2.5 text-center align-middle bg-[#eef3ff]"><svg class="inline-block align-middle text-[#1d4ed8]" viewBox="0 0 20 20" width="18" height="18" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><path d="M4.5 10.5l3.5 3.5 7.5-8"/></svg><span class="sr-only">Included</span></td></tr>
        <tr><th scope="row" class="border-b border-[#e2e8f0] px-3.5 py-3 text-left font-medium max-sm:px-2 max-sm:py-2.5">Text message reminders</th><td class="border-b border-[#e2e8f0] px-3.5 py-3 max-sm:px-2 max-sm:py-2.5 text-center align-middle"><svg class="inline-block align-middle text-[#526077]" viewBox="0 0 20 20" width="18" height="18" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" aria-hidden="true" focusable="false"><path d="M6 6l8 8M14 6l-8 8"/></svg><span class="sr-only">Not included</span></td><td class="border-b border-[#e2e8f0] px-3.5 py-3 max-sm:px-2 max-sm:py-2.5 text-center align-middle bg-[#eef3ff]"><svg class="inline-block align-middle text-[#1d4ed8]" viewBox="0 0 20 20" width="18" height="18" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><path d="M4.5 10.5l3.5 3.5 7.5-8"/></svg><span class="sr-only">Included</span></td></tr>
        <tr><th scope="row" class="border-b border-[#e2e8f0] px-3.5 py-3 text-left font-medium max-sm:px-2 max-sm:py-2.5">Round-robin team scheduling</th><td class="border-b border-[#e2e8f0] px-3.5 py-3 max-sm:px-2 max-sm:py-2.5 text-center align-middle"><svg class="inline-block align-middle text-[#526077]" viewBox="0 0 20 20" width="18" height="18" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" aria-hidden="true" focusable="false"><path d="M6 6l8 8M14 6l-8 8"/></svg><span class="sr-only">Not included</span></td><td class="border-b border-[#e2e8f0] px-3.5 py-3 max-sm:px-2 max-sm:py-2.5 text-center align-middle bg-[#eef3ff]"><svg class="inline-block align-middle text-[#1d4ed8]" viewBox="0 0 20 20" width="18" height="18" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><path d="M4.5 10.5l3.5 3.5 7.5-8"/></svg><span class="sr-only">Included</span></td></tr>
        <tr><th scope="row" class="border-b border-[#e2e8f0] px-3.5 py-3 text-left font-medium max-sm:px-2 max-sm:py-2.5">Remove Sundial branding</th><td class="border-b border-[#e2e8f0] px-3.5 py-3 max-sm:px-2 max-sm:py-2.5 text-center align-middle"><svg class="inline-block align-middle text-[#526077]" viewBox="0 0 20 20" width="18" height="18" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" aria-hidden="true" focusable="false"><path d="M6 6l8 8M14 6l-8 8"/></svg><span class="sr-only">Not included</span></td><td class="border-b border-[#e2e8f0] px-3.5 py-3 max-sm:px-2 max-sm:py-2.5 text-center align-middle bg-[#eef3ff]"><svg class="inline-block align-middle text-[#1d4ed8]" viewBox="0 0 20 20" width="18" height="18" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><path d="M4.5 10.5l3.5 3.5 7.5-8"/></svg><span class="sr-only">Included</span></td></tr>
      </tbody>
      <tfoot><tr><td class="px-3.5 pt-3.5 pb-3 max-sm:px-2"><span class="sr-only">Choose a plan</span></td><td class="px-3.5 pt-3.5 pb-3 text-center max-sm:px-2"><a class="inline-block rounded-[10px] border-[1.5px] border-[#1d4ed8] px-4 py-2 text-[.86rem] leading-[1.3] font-bold whitespace-nowrap no-underline transition-[color,background-color,border-color] duration-200 motion-reduce:transition-none focus-visible:outline-3 focus-visible:outline-offset-2 focus-visible:outline-[#1d4ed8] bg-white text-[#1d4ed8] hover:bg-[#e6edff] max-sm:px-2.5" href="#">Use Free</a></td><td class="rounded-b-xl bg-[#eef3ff] px-3.5 pt-3.5 pb-3 text-center max-sm:px-2"><a class="inline-block rounded-[10px] border-[1.5px] border-[#1d4ed8] px-4 py-2 text-[.86rem] leading-[1.3] font-bold whitespace-nowrap no-underline transition-[color,background-color,border-color] duration-200 motion-reduce:transition-none focus-visible:outline-3 focus-visible:outline-offset-2 focus-visible:outline-[#1d4ed8] bg-[#1d4ed8] text-white hover:border-[#1e40af] hover:bg-[#1e40af] max-sm:px-2.5" href="#">Try Pro</a></td></tr></tfoot>
    </table>
  </div>
</section></div>

About this set

Feature comparison tables for pricing pages, built as real HTML tables rather than a grid of divs, so screen readers can announce the plan and the feature for every cell. Full comparison, sticky header and feature column compares three analytics plans across sixteen features in four groups: usage, reports, data and security, and support. The header row with each plan’s name, price and button stays at the top while you scroll the table, and the feature names stay on the left while you scroll sideways on a phone. The recommended column is tinted, outlined at the top and labelled Recommended. The table sits in a scroll region that is focusable with the keyboard, named by the section heading and described by a short hint. Free and paid, with a caption is a compact two-plan table for a scheduling app, with a visible caption, a tinted Pro column and the buttons in the table footer. Values that are words, such as Next business day, are written out, and ticks and crosses come with visually hidden Included and Not included text.

What’s included

  • Real table markup with column headers, row headers and row group headers
  • Sticky plan header and sticky feature column inside a scroll region
  • Scroll region is focusable, labelled and described for keyboard users
  • Ticks and crosses come with visually hidden Included and Not included text
  • Compact two-plan table with a visible caption and footer buttons

Accessibility

Plans are column headers, features are row headers and each group of rows has a rowgroup header, so a screen reader reads the plan and feature for each value. The scroll region has role region, a name from the heading, a description from the hint, tabindex 0 so it can be scrolled with the keyboard, and a 3px focus outline. Buttons show an outline on focus and their colour transition stops under prefers-reduced-motion.

Customise it

Change --ct-accent, --ct-rec for the recommended column tint and --ct-line on .ct, and the max-height of .ct-scroll. In Bootstrap the cells use --bs-table-bg and --bs-table-border-color; in Tailwind edit the bg-[#eef3ff] column utilities.