diff --git a/src/components/Card/Card.stories.tsx b/src/components/Card/Card.stories.tsx
index 32c7768..cde35c9 100644
--- a/src/components/Card/Card.stories.tsx
+++ b/src/components/Card/Card.stories.tsx
@@ -1,5 +1,9 @@
import type { Meta, StoryObj } from "@storybook/react-vite";
import { CardLayout } from "./CardLayout";
+import { HeadingField } from "../Heading/HeadingField";
+import { RichTextDisplayField } from "../RichText/RichTextDisplayField";
+import { TextItem } from "../RichText/TextItem";
+import { ButtonWidget } from "../Button/ButtonWidget";
const meta = {
title: "Components/Card",
@@ -235,6 +239,113 @@ export const BorderAndShadow: Story = {
},
};
+export const VerticalAlignment: Story = {
+ args: { children: null },
+ parameters: { layout: "padded" },
+ render: () => (
+
+
+
+ Cards use flex flex-col internally.
+ Put mt-auto on your footer element to pin it to the bottom when cards stretch to equal height.
+
+
+
+ {/* Food menu pattern */}
+
+
Variable content, footer pinned to bottom
+
+
+
+
+ ]} marginBelow="NONE" className="[&>div]:leading-tight!" />
+
+ ]} marginBelow="NONE" />
+
+
+
+
+
+
+
+ ]} marginBelow="NONE" className="[&>div]:leading-tight!" />
+
+ $8.00
+
+
+
+
+
+
+
+ ]} marginBelow="NONE" className="[&>div]:leading-tight!" />
+
+ $8.50
+
+
+
+
+
+
+
+ ]} marginBelow="NONE" className="[&>div]:leading-tight!" />
+
+ $7.00
+
+
+
+
+
+
+ {/* Pricing pattern */}
+
+
Variable feature list, button at bottom
+
+
+
+
+
+ - ✓ 5 projects
+ - ✓ Basic analytics
+
+
+
+
+
+
+
+
+
+
+ - ✓ Unlimited projects
+ - ✓ Advanced analytics
+ - ✓ Team collaboration
+ - ✓ Priority support
+ - ✓ Custom integrations
+
+
+
+
+
+
+
+
+
+
+ - ✓ Everything in Pro
+ - ✓ SSO & SAML
+ - ✓ Dedicated support
+
+
+
+
+
+
+
+
+ ),
+};
+
export const CardStyles: Story = {
args: { children: null },
render: () => (
diff --git a/src/components/Card/CardLayout.tsx b/src/components/Card/CardLayout.tsx
index 0a6026f..f5e25cd 100644
--- a/src/components/Card/CardLayout.tsx
+++ b/src/components/Card/CardLayout.tsx
@@ -174,7 +174,8 @@ export const CardLayout: React.FC = ({
marginBelowMap[marginBelow],
showBorder ? `border ${borderProps.className || ''}` : '',
showShadow ? 'shadow-md' : '',
- 'relative'
+ 'relative',
+ 'flex flex-col'
].filter(Boolean).join(' ')
// Merge with optional className override
@@ -202,7 +203,7 @@ export const CardLayout: React.FC = ({
aria-hidden="true"
/>
)}
-