diff --git a/src/app/search/SearchResultsClient.tsx b/src/app/search/SearchResultsClient.tsx
index 356c3b2bf..521c74a57 100644
--- a/src/app/search/SearchResultsClient.tsx
+++ b/src/app/search/SearchResultsClient.tsx
@@ -445,7 +445,11 @@ function SearchCard({ product }: { product: SearchCardProduct }) {
onError={() => {
setImageError(true);
}}
- className="relative z-10 block h-full w-full max-h-[220px] object-contain p-2 transition-transform duration-300 group-hover:scale-[1.03]"
+ // BUY-64266: drop group-hover:scale-[1.03] which pushed the rightmost
+ // card image beyond the grid column on desktop. Keep BUY-64736's
+ // max-h-[220px] / max-w-full / object-contain bounds so the image
+ // can never exceed its 220px-tall card frame.
+ className="relative z-10 block h-full w-full max-h-[220px] max-w-full object-contain p-2"
style={{ maxHeight: '220px', width: '100%', objectFit: 'contain' }}
/>
) : imageError || !product.imageUrl ? (
diff --git a/src/components/ProductCard.tsx b/src/components/ProductCard.tsx
index b831ec07c..22aa1eae9 100644
--- a/src/components/ProductCard.tsx
+++ b/src/components/ProductCard.tsx
@@ -140,21 +140,22 @@ export const ProductCard = React.memo(function ProductCard({ deal, comparisonEna
rel="noopener noreferrer"
className="group block bg-white rounded-xl border border-gray-100 overflow-hidden hover:shadow-lg hover:border-indigo-100 transition-all duration-200"
>
-
-
+
+
{deal.image_url ? (
) : (
-
{config.icon}
+
+ {config.icon}
+
)}
{deal.discount_pct && deal.discount_pct > 0 && (
diff --git a/src/components/seo/SeoLandingPage.tsx b/src/components/seo/SeoLandingPage.tsx
index 37e0d5bdd..96efdba57 100644
--- a/src/components/seo/SeoLandingPage.tsx
+++ b/src/components/seo/SeoLandingPage.tsx
@@ -145,7 +145,7 @@ export async function SeoLandingPage({ config }: { config: SeoLandingPageConfig
-
+
{config.heroEyebrow}
@@ -154,17 +154,25 @@ export async function SeoLandingPage({ config }: { config: SeoLandingPageConfig
{config.heroBody}
-
-
- ✓
+ {/*
+ BUY-66322: single-column layout for the hero checkmark list.
+ The previous `flex flex-wrap gap-x-6 gap-y-2` layout could wrap
+ to two rows on narrow/mid viewports, leaving a perceived empty
+ bottom-right cell (VidMee layout flag). A vertical stack is
+ unambiguous and matches the editorial intent (page metadata,
+ not a feature grid).
+ */}
+
+
+ ✓
{buildRefreshedLabel(config, products)}
-
- ✓
+
+ ✓
{config.country} market coverage
-
- ✓
+
+ ✓
Live BuyWhere search results
@@ -177,7 +185,7 @@ export async function SeoLandingPage({ config }: { config: SeoLandingPageConfig
{shopperCta.label}
@@ -196,10 +204,10 @@ export async function SeoLandingPage({ config }: { config: SeoLandingPageConfig
-
Live catalog snapshot
+
Live catalog snapshot
{config.productSectionTitle}
-
+
Open full search
@@ -275,7 +283,7 @@ export async function SeoLandingPage({ config }: { config: SeoLandingPageConfig
-
{config.categoryComparisonEyebrow || "Featured models"}
+
{config.categoryComparisonEyebrow || "Featured models"}
{config.categoryComparisonTitle || "Models compared"}
@@ -313,7 +321,7 @@ export async function SeoLandingPage({ config }: { config: SeoLandingPageConfig
-
Buying signals
+
Buying signals
{config.highlightSectionTitle}
{config.highlights.map((highlight) => (
@@ -332,7 +340,7 @@ export async function SeoLandingPage({ config }: { config: SeoLandingPageConfig
{config.advicePoints.map((point) => (
-
+
✓
{point}