06Logo-trust testimonial
Above the quote, six gray logo chips scroll sideways in an endless loop, showing which companies use the product. Only the hovered chip regains full color.
Best forClient logo bars, trust signals
무한 로고 마퀴grayscale 호버 해제margin-right 간격

<main class="stage">
<div class="logotrust">
<figure class="logotrust__quote">
<blockquote>"Onboarding was done in a single day."</blockquote>
<figcaption>— Nimbus · Operations Lead</figcaption>
</figure>
<div class="logotrust__viewport">
<div class="logotrust__track" aria-hidden="true">
<span class="logotrust__chip">Nimbus</span>
<span class="logotrust__chip">Ledger</span>
<span class="logotrust__chip">Northwind</span>
<span class="logotrust__chip">Vertex</span>
<span class="logotrust__chip">Harborline</span>
<span class="logotrust__chip">Anchorpay</span>
<span class="logotrust__chip">Nimbus</span>
<span class="logotrust__chip">Ledger</span>
<span class="logotrust__chip">Northwind</span>
<span class="logotrust__chip">Vertex</span>
<span class="logotrust__chip">Harborline</span>
<span class="logotrust__chip">Anchorpay</span>
</div>
</div>
</div>
</main>@use "../../../../site/static/demo-tokens" as *;
$duration: 6s; // 열두 칩(원본6+복제6)이 한 바퀴 도는 시간 — $dur-loop 보다 길어야 흐름이 자연스럽다(합치지 않는다, 규칙2)
$easing: linear;
$color: $subject-blue;
$trust-graytint: #f1f5f9;
$trust-ink: $subject-ink;
$trust-slate: #475569;
$trust-blue: $subject-blue;
@include stage($trust-graytint);
.logotrust {
display: flex;
flex-direction: column;
align-items: center;
gap: $sp-4;
width: 320px;
}
.logotrust__quote {
margin: 0;
box-sizing: border-box;
width: 100%;
padding: $sp-3 $sp-4;
border-radius: $r-card;
background: $stage-paper;
box-shadow: 0 8px 18px rgba($trust-ink, .07);
text-align: center;
}
.logotrust__quote blockquote {
margin: 0 0 $sp-1;
color: $trust-ink;
font-weight: 700; font-size: 13px; line-height: 1.4;
font-family: inherit;
}
.logotrust__quote figcaption {
color: $trust-slate;
font-weight: 500; font-size: 11px; line-height: 1.3;
font-family: inherit;
}
.logotrust__viewport {
width: 100%;
overflow: hidden;
}
.logotrust__track {
display: flex;
width: max-content;
animation: scrollLogos $duration $easing infinite;
}
.logotrust__chip {
flex: 0 0 auto;
margin-right: $sp-3;
border-radius: $r-pill;
background: $stage-paper;
color: $trust-slate;
padding: $sp-1 $sp-4;
font-weight: 700; font-size: 12px; line-height: 1.6;
font-family: inherit;
box-shadow: 0 4px 10px rgba($trust-ink, .06);
}
.logotrust__chip:hover {
color: $trust-blue;
box-shadow: 0 6px 14px rgba($trust-blue, .18);
}
// 데모: 원본 6개 + 복제 6개를 이어 붙여 -50% 만큼 옮기면 이음새 없이 무한히 흐른다. 간격은 flex gap 대신 margin-right(BD15)
@keyframes scrollLogos {
from { transform: translateX(0); }
to { transform: translateX(-50%); }
}
@media (max-width: 340px), (max-height: 220px) {
.logotrust { width: 260px; gap: $sp-2; }
.logotrust__quote { padding: $sp-2 $sp-3; }
.logotrust__quote blockquote { font-size: 11px; }
.logotrust__chip { padding: 4px $sp-3; font-size: 11px; margin-right: $sp-2; }
}
@media (prefers-reduced-motion: reduce) {
.logotrust__track { animation: none !important; }
}html, body {
margin: 0;
overflow: hidden;
}
.stage {
box-sizing: border-box;
min-height: 100vh;
display: grid;
place-items: center;
margin: 0;
background: #f1f5f9;
font-family: -apple-system, "Segoe UI", "Noto Sans KR", sans-serif;
padding: clamp(8px, 4vw, 24px);
}
.logotrust {
display: flex;
flex-direction: column;
align-items: center;
gap: 16px;
width: 320px;
}
.logotrust__quote {
margin: 0;
box-sizing: border-box;
width: 100%;
padding: 12px 16px;
border-radius: 16px;
background: #ffffff;
box-shadow: 0 8px 18px rgba(23, 20, 26, 0.07);
text-align: center;
}
.logotrust__quote blockquote {
margin: 0 0 4px;
color: #17141a;
font-weight: 700;
font-size: 13px;
line-height: 1.4;
font-family: inherit;
}
.logotrust__quote figcaption {
color: #475569;
font-weight: 500;
font-size: 11px;
line-height: 1.3;
font-family: inherit;
}
.logotrust__viewport {
width: 100%;
overflow: hidden;
}
.logotrust__track {
display: flex;
width: max-content;
animation: scrollLogos 6s linear infinite;
}
.logotrust__chip {
flex: 0 0 auto;
margin-right: 12px;
border-radius: 999px;
background: #ffffff;
color: #475569;
padding: 4px 16px;
font-weight: 700;
font-size: 12px;
line-height: 1.6;
font-family: inherit;
box-shadow: 0 4px 10px rgba(23, 20, 26, 0.06);
}
.logotrust__chip:hover {
color: #2f6df6;
box-shadow: 0 6px 14px rgba(47, 109, 246, 0.18);
}
@keyframes scrollLogos {
from {
transform: translateX(0);
}
to {
transform: translateX(-50%);
}
}
@media (max-width: 340px), (max-height: 220px) {
.logotrust {
width: 260px;
gap: 8px;
}
.logotrust__quote {
padding: 8px 12px;
}
.logotrust__quote blockquote {
font-size: 11px;
}
.logotrust__chip {
padding: 4px 12px;
font-size: 11px;
margin-right: 8px;
}
}
@media (prefers-reduced-motion: reduce) {
.logotrust__track {
animation: none !important;
}
}import type { CSSProperties } from "react";
import styles from "./LogoTrust.module.scss";
export type LogoTrustProps = {
quote?: string;
author?: string;
logos?: string[];
duration?: number;
easing?: string;
color?: string;
};
type Vars = CSSProperties & { "--duration"?: string; "--easing"?: string; "--color"?: string };
export default function LogoTrust({
quote = '"온보딩이 하루 만에 끝났습니다"',
author = "— 니임버스 · 운영팀장",
logos = ["Nimbus", "Ledger", "Northwind", "Vertex", "Harborline", "Anchorpay"],
duration = 6000,
easing = "linear",
color = "#2f6df6",
}: LogoTrustProps) {
const vars: Vars = { "--duration": `${duration}ms`, "--easing": easing, "--color": color };
const doubled = [...logos, ...logos];
return (
<div className={styles.wrap} style={vars}>
<figure className={styles.quote}>
<blockquote>{quote}</blockquote>
<figcaption>{author}</figcaption>
</figure>
<div className={styles.viewport}>
<div className={styles.track} aria-hidden="true">
{doubled.map((name, i) => (
<span key={`${name}-${i}`} className={styles.chip}>{name}</span>
))}
</div>
</div>
</div>
);
}06 Logo-trust testimonial — Measured area 5.942% · moving frames 23/23Original by GODRICH · SCSS and React ship in the zip · SaaS Landing Page Design: 9 Clean Trust Sections
The post this demo lives in
SaaS Landing Page Design: 9 Clean Trust SectionsGood SaaS landing page design leans on two neutral backgrounds — white and a barely-there off-white — plus exactly one b See all demos in this post


