31 CSS Hero Sections22 / 31

Pure CSSMIT licensed

Price Card Hero

Heritage-banking pricing-led hero — copy left, single-tier brass-on-forest pricing card right. The 37signals-style "we have one price" treatment with a vintage finance feel.

Published

Live Demo
Try it

The code

<section class="hs-22" aria-label="Hero">
  <div class="hs-22__copy">
    <span class="hs-22__eye">— Est. 1924 · still independent</span>
    <h2>One ledger. <em>One price.</em> One ridiculously responsive team.</h2>
    <p>
      The bookkeeping software trusted by family-owned businesses since before "SaaS" was a word.
    </p>
  </div>
  <article class="hs-22__card">
    <header>
      <span>The Members' Plan</span>
      <span class="hs-22__badge">No tiers</span>
    </header>
    <div class="hs-22__price"><em>$</em><strong>49</strong><span>/ month, all in</span></div>
    <ul>
      <li>Unlimited invoices</li>
      <li>Multi-entity ledger</li>
      <li>Audit-ready exports</li>
      <li>A real human for support</li>
    </ul>
    <a class="hs-22__cta" href="#join">Become a member</a>
  </article>
</section>
.hs-22 {
  display: grid;
  grid-template-columns: 1.05fr 1fr;
  width: 100%;
  min-height: 100vh;
  padding: clamp(28px, 5vw, 64px) clamp(20px, 5vw, 56px);
  gap: clamp(28px, 4vw, 64px);
  align-items: center;
  background: #f5ecd8;
  font-family: 'Inter', system-ui, sans-serif;
  color: #1a3322;
  box-sizing: border-box;
}

.hs-22__eye {
  display: block;
  font-family: 'Cormorant Garamond', Georgia, serif;
  font-style: italic;
  font-size: 16px;
  color: #8a7a3a;
  margin-bottom: 14px;
}

.hs-22 h2 {
  margin: 0 0 16px;
  font-family: 'Playfair Display', Georgia, serif;
  font-size: clamp(28px, 4.5vw, 46px);
  font-weight: 700;
  letter-spacing: -0.015em;
  line-height: 1.1;
  color: #1a3322;
}

.hs-22 h2 em {
  color: #8a7a3a;
  font-style: italic;
}

.hs-22 p {
  margin: 0;
  font-size: 15.5px;
  line-height: 1.6;
  color: #4a5a48;
  max-width: 460px;
}

.hs-22__card {
  background: #1a3322;
  color: #f5ecd8;
  padding: clamp(24px, 3vw, 36px);
  border-radius: 0;
  border: 2px solid #8a7a3a;
  box-shadow: inset 0 0 0 4px #1a3322, inset 0 0 0 5px rgba(138,122,58,0.4);
}

.hs-22__card header {
  display: flex;
  justify-content: space-between;
  align-items: center;
  font-family: 'Playfair Display', Georgia, serif;
  font-size: 13px;
  font-weight: 700;
  letter-spacing: 0.16em;
  text-transform: uppercase;
  padding-bottom: 16px;
  border-bottom: 1px solid #8a7a3a;
  margin-bottom: 18px;
}

.hs-22__badge {
  font-family: 'JetBrains Mono', monospace;
  font-size: 10px;
  letter-spacing: 0.12em;
  padding: 2px 8px;
  border: 1px solid #8a7a3a;
  color: #c0a960;
}

.hs-22__price {
  display: flex;
  align-items: baseline;
  gap: 6px;
  margin-bottom: 22px;
}

.hs-22__price em {
  font-size: 24px;
  font-style: normal;
  color: #8a7a3a;
  font-weight: 700;
}

.hs-22__price strong {
  font-family: 'Playfair Display', Georgia, serif;
  font-size: clamp(56px, 6vw, 80px);
  font-weight: 800;
  line-height: 1;
  color: #f5ecd8;
}

.hs-22__price span {
  font-size: 13px;
  color: #c0a960;
}

.hs-22__card ul {
  list-style: none;
  padding: 0;
  margin: 0 0 24px;
  font-size: 14px;
  line-height: 1.95;
  color: #c8d2c4;
}

.hs-22__card ul li::before {
  content: '✓ ';
  color: #c0a960;
  font-weight: 800;
}

.hs-22__cta {
  display: block;
  text-align: center;
  padding: 14px 24px;
  background: #c0a960;
  color: #1a3322;
  text-decoration: none;
  font-weight: 800;
  font-size: 14.5px;
  letter-spacing: 0.04em;
  border: 0;
  transition: background 0.15s;
}

.hs-22__cta:hover {
  background: #f5ecd8;
}

@media (max-width: 720px) {
  .hs-22 {
    grid-template-columns: 1fr;
  }
}

@media (prefers-reduced-motion: reduce) {
  .hs-22__cta {
    transition: none;
  }
}
Paste this into ChatGPT, Claude, Cursor, or any coding assistant. The block below is pre-framed with everything the AI needs to integrate this demo into your project — markup, styles, scoping notes, and the source URL. Hit Copy and paste straight into your chat.
Here's a working CSS Hero Section from CodeFronts. Use it as-is or adapt to your framework. All classes are scoped under a unique prefix so the code won't collide with your existing styles. MIT licensed.
Demo: Price Card Hero
Source: https://codefronts.com/layouts/css-hero-sections/price-card-hero/

Heritage-banking pricing-led hero — copy left, single-tier brass-on-forest pricing card right. The 37signals-style "we have one price" treatment with a vintage finance feel.
## HTML
```html
<section class="hs-22" aria-label="Hero">
  <div class="hs-22__copy">
    <span class="hs-22__eye">— Est. 1924 · still independent</span>
    <h2>One ledger. <em>One price.</em> One ridiculously responsive team.</h2>
    <p>
      The bookkeeping software trusted by family-owned businesses since before "SaaS" was a word.
    </p>
  </div>
  <article class="hs-22__card">
    <header>
      <span>The Members' Plan</span>
      <span class="hs-22__badge">No tiers</span>
    </header>
    <div class="hs-22__price"><em>$</em><strong>49</strong><span>/ month, all in</span></div>
    <ul>
      <li>Unlimited invoices</li>
      <li>Multi-entity ledger</li>
      <li>Audit-ready exports</li>
      <li>A real human for support</li>
    </ul>
    <a class="hs-22__cta" href="#join">Become a member</a>
  </article>
</section>
```
## CSS
```css
.hs-22 {
  display: grid;
  grid-template-columns: 1.05fr 1fr;
  width: 100%;
  min-height: 100vh;
  padding: clamp(28px, 5vw, 64px) clamp(20px, 5vw, 56px);
  gap: clamp(28px, 4vw, 64px);
  align-items: center;
  background: #f5ecd8;
  font-family: 'Inter', system-ui, sans-serif;
  color: #1a3322;
  box-sizing: border-box;
}

.hs-22__eye {
  display: block;
  font-family: 'Cormorant Garamond', Georgia, serif;
  font-style: italic;
  font-size: 16px;
  color: #8a7a3a;
  margin-bottom: 14px;
}

.hs-22 h2 {
  margin: 0 0 16px;
  font-family: 'Playfair Display', Georgia, serif;
  font-size: clamp(28px, 4.5vw, 46px);
  font-weight: 700;
  letter-spacing: -0.015em;
  line-height: 1.1;
  color: #1a3322;
}

.hs-22 h2 em {
  color: #8a7a3a;
  font-style: italic;
}

.hs-22 p {
  margin: 0;
  font-size: 15.5px;
  line-height: 1.6;
  color: #4a5a48;
  max-width: 460px;
}

.hs-22__card {
  background: #1a3322;
  color: #f5ecd8;
  padding: clamp(24px, 3vw, 36px);
  border-radius: 0;
  border: 2px solid #8a7a3a;
  box-shadow: inset 0 0 0 4px #1a3322, inset 0 0 0 5px rgba(138,122,58,0.4);
}

.hs-22__card header {
  display: flex;
  justify-content: space-between;
  align-items: center;
  font-family: 'Playfair Display', Georgia, serif;
  font-size: 13px;
  font-weight: 700;
  letter-spacing: 0.16em;
  text-transform: uppercase;
  padding-bottom: 16px;
  border-bottom: 1px solid #8a7a3a;
  margin-bottom: 18px;
}

.hs-22__badge {
  font-family: 'JetBrains Mono', monospace;
  font-size: 10px;
  letter-spacing: 0.12em;
  padding: 2px 8px;
  border: 1px solid #8a7a3a;
  color: #c0a960;
}

.hs-22__price {
  display: flex;
  align-items: baseline;
  gap: 6px;
  margin-bottom: 22px;
}

.hs-22__price em {
  font-size: 24px;
  font-style: normal;
  color: #8a7a3a;
  font-weight: 700;
}

.hs-22__price strong {
  font-family: 'Playfair Display', Georgia, serif;
  font-size: clamp(56px, 6vw, 80px);
  font-weight: 800;
  line-height: 1;
  color: #f5ecd8;
}

.hs-22__price span {
  font-size: 13px;
  color: #c0a960;
}

.hs-22__card ul {
  list-style: none;
  padding: 0;
  margin: 0 0 24px;
  font-size: 14px;
  line-height: 1.95;
  color: #c8d2c4;
}

.hs-22__card ul li::before {
  content: '✓ ';
  color: #c0a960;
  font-weight: 800;
}

.hs-22__cta {
  display: block;
  text-align: center;
  padding: 14px 24px;
  background: #c0a960;
  color: #1a3322;
  text-decoration: none;
  font-weight: 800;
  font-size: 14.5px;
  letter-spacing: 0.04em;
  border: 0;
  transition: background 0.15s;
}

.hs-22__cta:hover {
  background: #f5ecd8;
}

@media (max-width: 720px) {
  .hs-22 {
    grid-template-columns: 1fr;
  }
}

@media (prefers-reduced-motion: reduce) {
  .hs-22__cta {
    transition: none;
  }
}
```

How this works

The price card hero is a two-column CSS grid — grid-template-columns: 1.05fr 1fr — with heritage-serif copy on the left and a bordered .hs-22__card pricing plan on the right, stacking to a single column below 720px. The whole SaaS hero section sits on a warm cream #f5ecd8 (linen) base with forest green #1a3322 as the primary ink and brass #8a7a3a/#c0a960 as the accent — a heritage-banking palette that reads "we've been solvent since 1924." The .hs-22__card uses border-radius: 0 and a 2px solid #8a7a3a outer border stacked with a double inset shadow (inset 0 0 0 4px #1a3322, inset 0 0 0 5px rgba(138,122,58,0.4)) to fake an engraved-certificate frame in pure CSS — no images, no SVG.

Typography does the trust work: Playfair Display drives the h2 (clamp(28px, 4.5vw, 46px)) and the card headers in letter-spacing: 0.16em all-caps — the visual register of an old share certificate. Cormorant Garamond italics carry the eyebrow — Est. 1924 · still independent; JetBrains Mono 10px labels the No tiers badge in the same monospace idiom banks use on cheque stubs. The .hs-22__price uses display: flex; align-items: baseline so the $, the clamp(56px, 6vw, 80px) number, and the / month, all in suffix align on the type baseline instead of the box baseline — the small detail that separates a real pricing hero from a template.

Why it converts: Baymard research shows a visible-price hero converts 30-45% higher than a "See pricing" click-through because it removes the friction of a second navigation. The 37signals-style single-plan framing ("One ledger. One price.") pre-empts choice paralysis — Iyengar/Lepper's jam-shelf research — and the checklist items (Unlimited invoices, Multi-entity ledger, Audit-ready exports, A real human for support) function as objection-handlers stacked in reading order. This is the highest-RPM landing-page hero pattern for SaaS pricing pages.

Make it yours

  • Recolor to your brand by swapping four values: the linen background #f5ecd8, the forest ink #1a3322, the brass accent #8a7a3a, and the lighter brass highlight #c0a960. Keep the brass tones 15-25% apart in luminance — that separation is what reads as "engraved," not "muddy."
  • Swap the serif: Playfair Display is heritage-banking. For editorial luxury → 'Fraunces'. For law-firm/trust → 'Libre Caslon Text'. For contemporary SaaS with a heritage nod → 'DM Serif Display'. Cormorant Garamond stays on the eyebrow either way; the italic-serif eyebrow above a display-serif h2 is the whole trick.
  • Change the CTA shape: border-radius: 0 is the flat-brass ticket. For a slightly softer brand, use border-radius: 4px — anything higher breaks the certificate metaphor. If you want the CTA to read as a stamp, add box-shadow: 0 3px 0 #6a5a20 so the brass button gets flat depth.
  • For dark mode: invert to background: #0d1f14 (deeper forest) with body text in #f5ecd8, and flip the .hs-22__card to background: #f5ecd8 with forest ink — the cream card on a dark forest section reads as a printed page under lamp light, which is a stronger heritage cue than a solid-dark card.
  • For Tailwind: bg-[#f5ecd8] grid grid-cols-[1.05fr_1fr] min-h-[480px] on the section, font-serif text-[#1a3322] text-5xl tracking-tight leading-[1.1] on the h2, bg-[#1a3322] text-[#f5ecd8] border-2 border-[#8a7a3a] on the card, bg-[#c0a960] text-[#1a3322] uppercase tracking-widest font-extrabold on the CTA. In Next.js, load Playfair Display via next/font/google with display: 'swap'.

Gotchas — read before shipping

  • The .hs-22__card uses border-radius: 0 plus a stacked border + double inset shadow — visually rich but paint-heavy. On low-end Android the card can push LCP over 2.5s if it's the largest contentful element. If your card is the LCP candidate, drop one of the inset shadows or set content-visibility: auto on the card to defer paint until it's in view.
  • The .hs-22__price strong uses clamp(56px, 6vw, 80px) — huge Playfair Display glyphs. If Playfair loads late, the fallback (Georgia, serif) is narrower and the price reflows by ~40px on desktop, causing a visible CLS spike well over 0.1. Preload Playfair or use size-adjust in the @font-face to lock fallback metrics.
  • The brass CTA (#c0a960 on forest #1a3322) has a contrast ratio of ~7.1:1, which passes WCAG AA and AAA for the CTA text — but the hover state flips to #f5ecd8 on the same forest, which is fine. What isn't fine: the .hs-22__price span (#c0a960 on forest) at 13px hits ~7.1:1 — passes AA, but the tiny type + brass tone reads as watermark. Users skip it. Bump to #e0c880 at 14px if the copy matters.
  • Cormorant Garamond ships true italics — good — but if you're routing through a font-subsetting pipeline (like Fontsource + tree-shake), verify the italic variant is included. A missing italic silently falls back to synthesised oblique on the eyebrow and the heritage effect collapses. Same warning for Playfair Display's italic on the h2 <em>.
  • The letter-spacing: 0.16em uppercase card header is on the edge of WCAG 1.4.12 (Text Spacing) — some screen readers announce letter-spaced words character by character ("T-H-E M-E-M-B-E-R-S"). Use text-transform: uppercase in CSS but keep the source HTML in normal case, and add aria-label="The Members' Plan" on the wrapping element so assistive tech gets the clean string.
  • In React/Vue, the <em> inside the h2 (One price.) is meaningful — don't let a Markdown renderer rewrite it to <strong> or strip the italics for "cleaner semantics." The italic is the design; without it, the h2 reads as three flat sentences and the heritage rhythm collapses.

Techniques used in this demo

Search CodeFronts

Loading…