Lab and press marquee

Mono wordmark marquee with masked edges that pauses on hover and stays static for reduced motion.

blocklogosany
$npx shadcn@latest add @storekit/trust-logos
trust-logos

Live and interactive. Switch the brand in the frame header to see the same source under another token file.

Installation

$npx shadcn@latest add @storekit/trust-logos
$pnpm dlx shadcn@latest add @storekit/trust-logos
$yarn dlx shadcn@latest add @storekit/trust-logos
$bunx --bun shadcn@latest add @storekit/trust-logos

Source

components/storekit/trust/trust-logos.tsx
49 lines
import { cn } from "@/components/storekit/lib/cn"

/* "As tested by" marquee. Wordmarks are set in the mono face as text, so
   there are no third-party logos to license. Edges fade with a mask, the
   track pauses on hover or focus, and reduced motion gets a static row. */

export function TrustLogos({
  label = "As tested by",
  names = ["Arclight Labs", "Meridian Analytical", "Northfield QA", "Praxis Assay", "Halden and Co", "Verity Testing"],
  className,
}: {
  label?: string
  names?: string[]
  className?: string
}) {
  const Row = ({ hidden }: { hidden?: boolean }) => (
    <ul
      aria-hidden={hidden || undefined}
      className={cn("flex shrink-0 items-center", hidden && "motion-reduce:hidden")}
    >
      {names.map((n) => (
        <li
          key={n}
          className="flex items-center gap-3 px-6 font-sk-mono text-sm uppercase tracking-[0.18em] text-sk-muted transition-colors duration-200 hover:text-sk-ink sm:px-10"
        >
          <span className="h-2 w-2 rotate-45 border border-current" aria-hidden />
          <span className="whitespace-nowrap">{n}</span>
        </li>
      ))}
    </ul>
  )

  return (
    <div data-sk-section="trust" data-sk-variant="trust-logos" className={cn("flex flex-col items-center gap-5", className)}>
      <p className="font-sk-mono text-[11px] uppercase tracking-[0.14em] text-sk-muted">{label}</p>
      <div
        className="group w-full overflow-hidden [mask-image:linear-gradient(90deg,transparent,rgb(0_0_0)_12%,rgb(0_0_0)_88%,transparent)]"
        role="region"
        aria-label={label}
      >
        <div className="flex w-max animate-sk-marquee group-focus-within:[animation-play-state:paused] group-hover:[animation-play-state:paused] motion-reduce:w-full motion-reduce:animate-none motion-reduce:flex-wrap motion-reduce:justify-center">
          <Row />
          <Row hidden />
        </div>
      </div>
    </div>
  )
}

Usage

Import from "@/components/storekit/trust/trust-logos" and pass your product data. The demo above exercises the full prop surface with sample values.

Lab and press marquee, StoreKit