Slopcheck
← All recipes

mesh-gradient

Brand mesh gradient

Soft, slowly drifting color fields built from your own palette — atmosphere without the violet-cyan AI glow.

All modern browsers (CSS gradients + filter).

Use it for

  • A hero or one section that needs warmth behind real content
  • Brands with a defined palette of 3–5 colors close in lightness

Don't — this is how it turns into slop

  • Default violet/indigo/cyan on black — that is exactly the look Slopcheck flags
  • Behind glass cards or small text; combine with grain-overlay instead

Accessibility

  • Drift only runs without prefers-reduced-motion and is slow (40s) to avoid vestibular issues
  • Check text contrast against the brightest blob, not just the base color

Performance

  • One blurred pseudo-element, animated by transform only
  • Avoid stacking several mesh sections in one viewport

The code

/* Mesh gradient from YOUR palette — soft overlapping color fields that
   drift very slowly. The slop version is violet→indigo→cyan on black;
   this one is built from brand tokens and meant to be quiet. */
.mesh {
  /* Replace with your brand colors (kit palette). Keep them close in
     lightness so no single blob screams. */
  --mesh-base: #f4f1ea;
  --mesh-1: #f2c6a0;
  --mesh-2: #c8553d;
  --mesh-3: #9fb8ad;
  --mesh-4: #e8d9b5;
  position: relative;
  isolation: isolate;
  overflow: hidden;
  background-color: var(--mesh-base);
}

.mesh::before {
  content: "";
  position: absolute;
  inset: -25%;
  z-index: -1;
  background:
    radial-gradient(40% 50% at 20% 25%, var(--mesh-1), transparent 70%),
    radial-gradient(35% 45% at 80% 20%, var(--mesh-4), transparent 70%),
    radial-gradient(45% 55% at 70% 80%, var(--mesh-3), transparent 70%),
    radial-gradient(30% 40% at 25% 85%, var(--mesh-2), transparent 70%);
  filter: blur(40px) saturate(1.1);
  opacity: 0.75;
}

@keyframes mesh-drift {
  0% { transform: translate(0, 0) rotate(0deg) scale(1); }
  50% { transform: translate(-4%, 3%) rotate(8deg) scale(1.05); }
  100% { transform: translate(3%, -2%) rotate(-6deg) scale(1); }
}

@media (prefers-reduced-motion: no-preference) {
  .mesh--drift::before {
    animation: mesh-drift 40s ease-in-out infinite alternate;
  }
}

Which of these fit your site?

Scan your URL for free. The full review picks recipes for each section and hands your AI a complete design kit.

Check my site ↑