17679cc81e
Centering the whole non-lg: range (previous fix) overcorrected — only true Mobile should center (matches other centered content there); the 640-1023px Tablet band left-aligns instead, each badge's left edge lining up via items-start (no per-badge centering, so nothing reads crooked). Same tiered-alignment pattern as Hero's social-proof row.
46 lines
2.4 KiB
TypeScript
46 lines
2.4 KiB
TypeScript
import Image from "next/image";
|
|
import { getTrustBadges } from "../lib/payload";
|
|
|
|
// Content now lives in Payload (TrustBadges collection) instead of being
|
|
// hardcoded here, so copy (e.g. the shipping timeframe/threshold numbers)
|
|
// can be updated without a code deploy. If the fetch fails or nothing is
|
|
// seeded yet, the row just doesn't render rather than showing stale
|
|
// hardcoded fallback text that could drift from the real numbers.
|
|
export async function TrustRow() {
|
|
const items = await getTrustBadges();
|
|
if (items.length === 0) return null;
|
|
|
|
return (
|
|
// Structural breakpoint is lg:, not sm: — a deliberate exception to
|
|
// the site's sm: (640px) structural consolidation, same category as
|
|
// Footer's legal-links row (see that component's own comment):
|
|
// multiple whitespace-nowrap title+description badges side by side
|
|
// don't fit in one row below ~1024px regardless of fluid scaling.
|
|
// Confirmed via a real horizontal-overflow measurement against the
|
|
// live site (2026-07-29): scrollWidth exceeded the viewport by
|
|
// ~100px at 666px and ~54px at 768px before this fix.
|
|
//
|
|
// Alignment is tiered, same pattern as Hero's social-proof row:
|
|
// centered below sm: (true Mobile), left-aligned from sm: to lg:
|
|
// (each stacked badge's left edge lines up via items-start — no risk
|
|
// of a "crooked" look since it's a shared start edge, not per-badge
|
|
// centering), centered again once it's a single row at lg:.
|
|
<div className="w-full bg-bg-base flex flex-col lg:flex-row gap-6 lg:gap-12 items-center sm:items-start lg:items-center justify-center py-8 px-[var(--layout-padding-x)]">
|
|
{items.map((item, i) => (
|
|
<div key={item.id} className="flex items-center gap-6 lg:gap-12">
|
|
{i > 0 && <div className="hidden lg:block h-10 w-px bg-border" />}
|
|
<div className="flex gap-4 items-center">
|
|
<div className="relative size-8 shrink-0">
|
|
<Image alt="" src={item.icon} fill sizes="32px" className="object-contain" />
|
|
</div>
|
|
<div className="flex flex-col gap-0.5 items-start">
|
|
<p className="font-semibold text-body text-text-primary whitespace-nowrap">{item.title}</p>
|
|
<p className="text-body-sm text-text-muted whitespace-nowrap">{item.description}</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
))}
|
|
</div>
|
|
);
|
|
}
|