Feature Card Grid with Hover Effects

Features

Why Wellory?

We simplify complex health data. A lifestyle plan that is actionable, sustainable, and unique to you.

Holistic Nutrition

Beyond counting calories. Smart meal plans that optimize your hormone balance and energy levels.

Smart Activity

Adaptive workouts that push limits when you're energetic and respect your rest when you're tired.

Data Privacy

Your health data is personal. End-to-end encryption ensures your data stays in your control.

Cardio Analysis

Measure and manage stress levels with Heart Rate Variability (HRV) analysis.

Sleep Coaching

Sleep windows aligned with your circadian rhythm to increase deep sleep duration.

Habit Tracking

Small steps, big changes. Build new habits without breaking the chain.

About this block

Feature Card Grid with Hover EffectsFREE

Six-card grid with icons in rounded containers that animate on hover, plus titles and descriptions. Perfect for wellness platforms, health apps, or service benefit showcases.

Feature26: Feature Card Grid with Hover Effects

Six-card feature grid where each card's icon sits in a rounded square that inverts from a tinted background to a solid primary fill on hover, alongside a title and description. A centered badge, heading, and description sit above the grid.

Free block

This block is free. No license or account is required: install it with the CLI and use it in unlimited projects.

Installation

Radix flavor

bash
npx shadcn add "https://ui.beste.co/r/feature26"

Base UI flavor

bash
npx shadcn add "https://ui.beste.co/r-base/feature26"

This installs the block to components/beste/block/feature26.tsx and the shadcn/ui badge component it depends on.

Quick start

The installed file exports feature26Demo alongside the block: the exact props behind the preview above. Spread it to get a working feature grid in one line.

tsx
import { Feature26, feature26Demo } from "@/components/beste/block/feature26";

export default function Page() {
  return <Feature26 {...feature26Demo} />;
}

Then replace the demo with your own props. Written out, a trimmed setup looks like this:

tsx
import { Leaf, Shield, Heart } from "lucide-react";
import { Feature26 } from "@/components/beste/block/feature26";

export default function Page() {
  return (
    <Feature26
      badge={{ label: "Features", variant: "default" }}
      heading="Why Wellory?"
      description="A lifestyle plan that is actionable, sustainable, and unique to you."
      features={[
        {
          id: "feature-1",
          icon: <Leaf className="size-6" />,
          title: "Holistic Nutrition",
          description: "Smart meal plans that optimize your energy levels.",
        },
        {
          id: "feature-2",
          icon: <Shield className="size-6" />,
          title: "Data Privacy",
          description: "End-to-end encryption keeps your data in your control.",
        },
        {
          id: "feature-3",
          icon: <Heart className="size-6" />,
          title: "Cardio Analysis",
          description: "Manage stress levels with HRV analysis.",
        },
      ]}
    />
  );
}

Props

PropTypeDefaultDescription
badge{ label: string; variant?: "default" | "secondary" | "outline" }–Badge above the heading
headingstring–Section heading
descriptionstring–Section intro text
featuresFeature[][]Cards rendered in the grid; the grid wrapper itself is omitted when empty
classNamestring–Extra classes for the outer <section>
ts
type Feature = {
  id: string;
  icon?: React.ReactNode;
  title: string;
  description: string;
};

Behavior notes

  • Each card carries its own named hover group (group/feature26), so the icon's background/text inversion (bg-primary/10 text-primary to bg-primary text-background) is scoped to that card and does not leak to sibling cards.
  • A card with no icon falls back to a Check icon rather than an empty square, so the icon slot is never blank.
  • Hovering a card lifts it (hover:-translate-y-1) and expands its shadow (hover:shadow-xl) over a 300ms transition, in addition to the icon color inversion.
  • The description paragraph uses text-balance on the intro copy so multi-line headers/descriptions wrap more evenly, but individual card descriptions do not use text-balance.
  • The grid section itself has overflow-hidden, which clips the -translate-y-1 hover lift's shadow slightly at the section edges on cards in the outer columns.

More Feature blocks

View all Feature
FREE

feature29

Platform Feature Cards with Metrics

PRO

feature196

Module Cards Grid With Hover Lift

FREE

feature107

Icon-Centered Grid Cards