GODRICH

SaaS Landing Page Design: 9 Clean Trust Sections

Good SaaS landing page design leans on two neutral backgrounds — white and a barely-there off-white — plus exactly one brand blue, gray shadows, and corners

Unlike the pastel or candy-gradient look, the brightness here comes from empty space and restraint, not from more colors.

Below is a full one-page landing built from that recipe, the kind of screen people save from Stripe or Linear without knowing what to call it. Scroll from the nav to the footer and count how many colors you actually see.

Open the full page

The nine pieces that make up that page are pulled apart and laid out in the grid below, in the order a visitor's eye actually moves — get noticed, browse features, check pricing, feel trust, act. Blue is the only accent color in the whole kit; everything else is white, off-white, or gray.

Auto-plays · click a tile to jump to its section · all nine in one zip

The whole kit runs on eight colors. Never using the brand blue for small body text is what keeps this palette readable.

Role Color Used for
Off-white #f7f9fc Page background
Blue tint #eaf1ff Card-grid stage, icon backgrounds
Gray tint #f1f5f9 Nav and logo-strip stage
Mint tint #eaf6f1 Checkmark icons, input stage
Brand blue #2f6df6 Buttons, icons, borders, accents
Blue deep #1d4ed8 CTA band background, pressed buttons
Slate #475569 Secondary text
Ink #17141a Headings and body text

01Soft-grid hero

A faint dot grid sits over an off-white background while the white card in front drifts up and down at an easy pace. The only accent is a small blue badge — every shadow underneath stays a soft, neutral gray.

점 격자 배경중립 그림자radius 16
<section class="dotgrid relative overflow-hidden rounded-card py-20">
  <div class="relative mx-auto flex max-w-xl flex-col items-start gap-4
              rounded-card bg-white p-10 shadow-soft">
    <p class="text-xs font-bold uppercase tracking-widest text-brand">Trusted by teams</p>
    <h1 class="text-4xl font-bold leading-tight">Ship faster, safer</h1>
    <button class="rounded-pill bg-brand px-6 py-3 text-sm font-bold text-white shadow-brand">Start free</button>
  </div>
</section>

02Underline nav

A single blue underline glides to the active tab as it moves between menu items. In the actual demo a pale blue highlight block travels on the same beat as the line — a 3px underline alone barely reads as motion.

translateX 이동slideUnderlineradius pill
<nav class="mx-auto flex max-w-5xl items-center gap-6 rounded-pill bg-white px-5 py-3 shadow-soft-sm">
  <span class="relative whitespace-nowrap text-xs font-semibold pb-1
               after:absolute after:-bottom-[13px] after:left-0
               after:h-[3px] after:w-full after:rounded-control after:bg-brand">Home</span>
  <span class="whitespace-nowrap text-xs font-semibold text-slate">Features</span>
</nav>

03Icon card grid

Four white cards sit in a grid with only a faint gray shadow, and the blue circle holding each icon grows slightly and deepens in tone, one card after another on a staggered delay. Every card shares the exact same blue.

단일 브랜드 컬러scale 호버2열→1열
<div class="flex flex-col items-start gap-3 rounded-card bg-white p-5 shadow-soft-sm">
  <span class="grid h-9 w-9 place-items-center rounded-full bg-bluetint text-brand">
    <svg><!-- ph:shield-check-duotone --></svg>
  </span>
  <p class="text-sm font-bold">Security</p>
</div>

04Checkmark feature list

Each row carries a blue checkmark in a pale mint circle, and the rows slide down into place from top to bottom, then fade back out and repeat. The check is a real Phosphor Duotone icon, not a hand-drawn shape.

두 막대 체크순차 슬라이드인radius pill
<li class="flex items-center gap-3 rounded-pill bg-white px-5 py-3 shadow-soft-sm">
  <span class="grid h-7 w-7 shrink-0 place-items-center rounded-full bg-mint text-brand">
    <svg><!-- ph:check-duotone --></svg>
  </span>
  <span class="text-sm font-semibold">Unlimited team seats</span>
</li>

05Simple pricing

All three plans share the same white card, but the recommended one gets a thin blue border and a slightly deeper shadow. Hierarchy comes from border weight and shadow depth, never from a different background color.

테두리 위계그림자 깊이차radius card
<div class="relative flex-1 max-w-[240px] rounded-card border-2 border-brand
            bg-white p-6 text-center shadow-brand">
  <span class="absolute -top-3 left-1/2 -translate-x-1/2 rounded-pill
               bg-brand px-3 py-1 text-[11px] font-bold text-white">Popular</span>
  <p class="text-sm font-bold">Pro</p>
</div>

06Logo-trust testimonial

Above the quote, six gray logo chips scroll sideways in an endless loop by stitching an original set to a cloned copy and sliding the whole track by -50%. Only the hovered chip regains full blue color.

무한 로고 마퀴grayscale 호버 해제margin-right 간격
<div class="track flex w-max" style="animation: scrollLogos 6s linear infinite">
  <span class="mr-3 shrink-0 rounded-pill bg-white px-5 py-2 text-xs
               font-bold text-slate shadow-soft-sm">Nimbus</span>
  <!-- repeat the same six chips a second time right after -->
</div>

07Solid CTA band

The band is a single flat brand-blue fill with no gradient, and only the white button inside lifts and deepens its shadow in a loop. Restraint here means one color, not a blend of several.

단색 배경버튼 lift 호버radius pill
<div class="rounded-card bg-brand-deep px-10 py-14 shadow-brand-deep text-center">
  <h2 class="text-3xl font-bold text-white">Start free today</h2>
  <button class="mt-4 rounded-pill bg-white px-8 py-3 text-sm font-bold text-brand-deep">Request a demo</button>
</div>

08Minimal 4-column footer

A single pale-gray rule sits above the column links, and each social icon circle fills blue and grows a little on hover — cycled automatically in the demo. The only ornament on the whole footer is that one line.

단일 구분선아이콘 배경 채움4열→1열
<div class="grid h-9 w-9 place-items-center rounded-full bg-graytint text-slate
            transition hover:bg-brand hover:text-white">
  <svg><!-- ph:twitter-logo-duotone --></svg>
</div>

09Clean buttons & inputs

The button darkens slightly and lifts by a pixel on hover, while the input's thin gray border softens into a two-layer blue focus ring. This one item bundles the whole kit's tactile feel into a single pair of controls.

1px lift 호버focus 2중 링radius 12
<input class="w-full rounded-control border border-border bg-white px-4 py-3
              text-sm outline-none focus:border-brand
              focus:ring-4 focus:ring-brand/20" placeholder="[email protected]">
<button class="rounded-control bg-brand px-6 py-3 text-sm font-bold text-white
               shadow-brand hover:bg-brand-deep hover:-translate-y-px">Continue</button>

Custom tailwind.config

Two backgrounds, one brand blue, and four shadows — two neutral, two brand-tinted — live in this one file so the one-pager and all nine pieces stay equally restrained. The gray shadow-soft and shadow-soft-sm sit under plain cards, while the blue-tinted shadow-brand and shadow-brand-deep mark only the buttons, the pro plan, and the CTA band.

theme: {
  extend: {
    colors: {
      offwhite: "#f7f9fc", bluetint: "#eaf1ff", graytint: "#f1f5f9", mint: "#eaf6f1",
      ink: "#17141a", slate: "#475569", brand: "#2f6df6", "brand-deep": "#1d4ed8",
      border: "#e2e8f0",
    },
    borderRadius: { card: "16px", control: "12px", pill: "999px" },
    boxShadow: {
      soft: "0 14px 28px rgba(23,20,26,.08)",
      "soft-sm": "0 8px 16px rgba(23,20,26,.07)",
      brand: "0 10px 22px rgba(47,109,246,.28)",
      "brand-deep": "0 16px 30px rgba(29,78,216,.32)",
    },
  },
},

Vibe-Coding Prompt

Once the config is in your project, this is the entire instruction you hand to Claude Code or Cursor. It runs ten rules instead of five because, unlike the candy or citrus kits, it has to spell out what not to use. The unabridged version sits inside the zip as prompt.md.

Use only two backgrounds: white and offwhite (#f7f9fc). The only brand color is
brand (#2f6df6), and every card stays white. Shadows stay a soft gray
(shadow-soft) — never a colored shadow. Text is always ink or slate, never
brand. Hierarchy comes from border weight and shadow depth, not card color.

Here's the full 1280px screenshot of that prompt applied to page/index.html.

Result

Where it breaks (the trap)

The first real snag was the nav indicator's motion. A 3px underline alone barely read as movement once rendered — the changed-pixel area was too small to notice on an 480×300 stage. Adding a pale blue highlight block the width of a tab, moving on the same beat as the underline, is what actually made the motion visible.

The second was viewport width. With three 108px tabs plus side padding, the nav's real layout box came out to 332px — 12px over the 320px phone check even though nothing looked wrong at 480px. Shrinking each tab to 92px and the whole bar to 284px is what cleared the 320×200 overflow check. The third was one word: "Enterprise" wrapped mid-word inside a 92px pricing card until it was shortened to "Team" so it fit on a single line. All three fixes are in the zip behind the password 8h4q5uur — open it and you can confirm every one directly.

All nine demos check for the MDN prefers-reduced-motion media feature and, when it's set, freeze every element at its resting state — cards stay put, list rows stay visible, focus rings stay off. Visitors who've asked for less motion lose the drift and the scroll, not the information in the card, button, or input itself.

Accessibility

This style has an easier time with contrast than the pastel or candy kits simply because the background is almost always white or off-white. Measured directly: ink text (#17141a) hits 18.24:1 on white, and the slate (#475569) used for secondary text hits 7.58:1 — both comfortably clear the WCAG 2.1 minimum contrast ratio of 4.5:1 for body text. The brand blue (#2f6df6), though, only reaches 4.53:1 as text on white — right at the line — so this kit's code never uses it for body copy, only for buttons, icons, and borders where it covers enough area or weight to stay legible. Where blue needs to be a background (the CTA band), the code switches to the deeper blue-deep (#1d4ed8), which clears white text at 6.70:1. Shadows follow the MDN box-shadow syntax at low opacity (.07–.32) so they never double as a border, and keyboard focus is drawn separately with a :focus-visible outline and a two-layer blue ring.

For other homepage trends beyond trustworthy SaaS, browse the design trends category, and the about page explains what this whole blog covers.

FAQ

Why doesn't this bright style look like pastel candy?

Because the brightness comes from a different place. Pastel-candy kits get their brightness from many colors — pink, lemon, mint, lavender — one per card. This kit fixes the background at two neutral tones and adds exactly one brand color, so it can be bright while keeping the color count to a minimum. More colors read as playful; fewer read as serious.

Can I swap in a different brand color instead of blue?

Yes, but if that color is going to sit as text on a white background, you have to check its 4.5:1 contrast yourself. This kit's blue (#2f6df6) sits right at 4.53:1, which is why it's never used for body copy — a green or purple at the same lightness could land under the line, so don't carry the ratio over without recalculating it.

Does adding a light color to each card still count as this style?

No — once a card's own surface takes on a color, it has moved into the candy or fruit family of bright design. In this kit, cards stay white; light tints only ever sit on the stage behind them or inside small accents like an icon circle.

Enter the archive password

The password is inside this article. You will find it as you read.