SaaS Trust Banner with Verified Badges
The compressed strip of credibility that sits directly under a SaaS hero — avatar stack, aggregate rating, two hard metrics and a rotating verified quote, all in one 88-pixel-tall band. CRO teams in Tier-1 markets consistently find this the highest-leverage 100 lines on a landing page, because it answers "do real companies use this?" before the visitor has scrolled once.
Published
The code
<section class="tr-02" aria-label="SaaS trust banner with verified badges demo">
<div class="tr-02__stage">
<div class="tr-02__hero" aria-hidden="true">
<p class="tr-02__kicker">Deploy previews for every branch</p>
<h2 class="tr-02__h">Ship on Friday.<br>Sleep on Saturday.</h2>
</div>
<div class="tr-02__band">
<div class="tr-02__seg">
<div class="tr-02__stack" aria-hidden="true">
<img src="https://images.unsplash.com/photo-1494790108377-be9c29b29330?q=80&w=96&h=96&fit=crop&auto=format" alt="" width="34" height="34" loading="lazy" decoding="async">
<img src="https://images.unsplash.com/photo-1506794778202-cad84cf45f1d?q=80&w=96&h=96&fit=crop&auto=format" alt="" width="34" height="34" loading="lazy" decoding="async">
<img src="https://images.unsplash.com/photo-1534528741775-53994a69daeb?q=80&w=96&h=96&fit=crop&auto=format" alt="" width="34" height="34" loading="lazy" decoding="async">
<img src="https://images.unsplash.com/photo-1472099645785-5658abf4ff4e?q=80&w=96&h=96&fit=crop&auto=format" alt="" width="34" height="34" loading="lazy" decoding="async">
<span class="tr-02__more">+9k</span>
</div>
<p class="tr-02__label">Trusted by <b>9,240</b> engineering teams</p>
</div>
<div class="tr-02__seg">
<div class="tr-02__rating" role="img" aria-label="Rated 4.8 out of 5 from 2,140 verified reviews">
<span class="tr-02__stars" aria-hidden="true">
<svg viewBox="0 0 20 20"><path d="M10 1.6l2.6 5.3 5.8.8-4.2 4.1 1 5.8L10 14.9 4.8 17.6l1-5.8L1.6 7.7l5.8-.8z"/></svg><svg viewBox="0 0 20 20"><path d="M10 1.6l2.6 5.3 5.8.8-4.2 4.1 1 5.8L10 14.9 4.8 17.6l1-5.8L1.6 7.7l5.8-.8z"/></svg><svg viewBox="0 0 20 20"><path d="M10 1.6l2.6 5.3 5.8.8-4.2 4.1 1 5.8L10 14.9 4.8 17.6l1-5.8L1.6 7.7l5.8-.8z"/></svg><svg viewBox="0 0 20 20"><path d="M10 1.6l2.6 5.3 5.8.8-4.2 4.1 1 5.8L10 14.9 4.8 17.6l1-5.8L1.6 7.7l5.8-.8z"/></svg><svg class="tr-02__half" viewBox="0 0 20 20"><defs><linearGradient id="tr-02-hg"><stop offset="80%" stop-color="currentColor"/><stop offset="80%" stop-color="transparent"/></linearGradient></defs><path fill="url(#tr-02-hg)" d="M10 1.6l2.6 5.3 5.8.8-4.2 4.1 1 5.8L10 14.9 4.8 17.6l1-5.8L1.6 7.7l5.8-.8z"/></svg>
</span>
<b class="tr-02__score">4.8</b>
</div>
<p class="tr-02__label">2,140 verified reviews</p>
</div>
<div class="tr-02__seg tr-02__seg--pills">
<span class="tr-02__pill"><svg viewBox="0 0 20 20" aria-hidden="true"><path d="M10 2l6 2.6v5c0 3.9-2.5 7.4-6 8.4-3.5-1-6-4.5-6-8.4v-5L10 2z" fill="none" stroke="currentColor" stroke-width="1.6"/><path d="M7.2 10.1l1.9 1.9 3.7-3.9" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"/></svg>SOC 2 Type II</span>
<span class="tr-02__pill"><b>99.99%</b> uptime, 12 mo</span>
<span class="tr-02__pill"><b><40ms</b> p95 edge</span>
</div>
<div class="tr-02__seg tr-02__seg--quote">
<div class="tr-02__rotator">
<figure class="tr-02__q" style="--tr-02-i:0">
<blockquote>“Cut our release cycle from ten days to a morning.”</blockquote>
<figcaption><b>Tomas Lindqvist</b> · Head of Eng, Ardent <span class="tr-02__ver"><svg viewBox="0 0 20 20" aria-hidden="true"><circle cx="10" cy="10" r="8.4" fill="currentColor"/><path d="M6.4 10.2l2.4 2.4 4.8-5" fill="none" stroke="oklch(0.16 0.02 260)" stroke-width="1.9" stroke-linecap="round" stroke-linejoin="round"/></svg>Verified customer</span></figcaption>
</figure>
<figure class="tr-02__q" style="--tr-02-i:1">
<blockquote>“The only vendor our security team approved without a call.”</blockquote>
<figcaption><b>Ayesha Nkomo</b> · CISO, Brightline <span class="tr-02__ver"><svg viewBox="0 0 20 20" aria-hidden="true"><circle cx="10" cy="10" r="8.4" fill="currentColor"/><path d="M6.4 10.2l2.4 2.4 4.8-5" fill="none" stroke="oklch(0.16 0.02 260)" stroke-width="1.9" stroke-linecap="round" stroke-linejoin="round"/></svg>Verified customer</span></figcaption>
</figure>
<figure class="tr-02__q" style="--tr-02-i:2">
<blockquote>“Onboarded 40 engineers in a day with no training budget.”</blockquote>
<figcaption><b>Ruth Kelleher</b> · VP Product, Camber <span class="tr-02__ver"><svg viewBox="0 0 20 20" aria-hidden="true"><circle cx="10" cy="10" r="8.4" fill="currentColor"/><path d="M6.4 10.2l2.4 2.4 4.8-5" fill="none" stroke="oklch(0.16 0.02 260)" stroke-width="1.9" stroke-linecap="round" stroke-linejoin="round"/></svg>Verified customer</span></figcaption>
</figure>
</div>
</div>
</div>
<p class="tr-02__chip" aria-hidden="true">flex band · negative-margin avatar stack · ring via box-shadow · CSS-only quote rotator</p>
</div>
</section><section class="tr-02" aria-label="SaaS trust banner with verified badges demo">
<div class="tr-02__stage">
<div class="tr-02__hero" aria-hidden="true">
<p class="tr-02__kicker">Deploy previews for every branch</p>
<h2 class="tr-02__h">Ship on Friday.<br>Sleep on Saturday.</h2>
</div>
<div class="tr-02__band">
<div class="tr-02__seg">
<div class="tr-02__stack" aria-hidden="true">
<img src="https://images.unsplash.com/photo-1494790108377-be9c29b29330?q=80&w=96&h=96&fit=crop&auto=format" alt="" width="34" height="34" loading="lazy" decoding="async">
<img src="https://images.unsplash.com/photo-1506794778202-cad84cf45f1d?q=80&w=96&h=96&fit=crop&auto=format" alt="" width="34" height="34" loading="lazy" decoding="async">
<img src="https://images.unsplash.com/photo-1534528741775-53994a69daeb?q=80&w=96&h=96&fit=crop&auto=format" alt="" width="34" height="34" loading="lazy" decoding="async">
<img src="https://images.unsplash.com/photo-1472099645785-5658abf4ff4e?q=80&w=96&h=96&fit=crop&auto=format" alt="" width="34" height="34" loading="lazy" decoding="async">
<span class="tr-02__more">+9k</span>
</div>
<p class="tr-02__label">Trusted by <b>9,240</b> engineering teams</p>
</div>
<div class="tr-02__seg">
<div class="tr-02__rating" role="img" aria-label="Rated 4.8 out of 5 from 2,140 verified reviews">
<span class="tr-02__stars" aria-hidden="true">
<svg viewBox="0 0 20 20"><path d="M10 1.6l2.6 5.3 5.8.8-4.2 4.1 1 5.8L10 14.9 4.8 17.6l1-5.8L1.6 7.7l5.8-.8z"/></svg><svg viewBox="0 0 20 20"><path d="M10 1.6l2.6 5.3 5.8.8-4.2 4.1 1 5.8L10 14.9 4.8 17.6l1-5.8L1.6 7.7l5.8-.8z"/></svg><svg viewBox="0 0 20 20"><path d="M10 1.6l2.6 5.3 5.8.8-4.2 4.1 1 5.8L10 14.9 4.8 17.6l1-5.8L1.6 7.7l5.8-.8z"/></svg><svg viewBox="0 0 20 20"><path d="M10 1.6l2.6 5.3 5.8.8-4.2 4.1 1 5.8L10 14.9 4.8 17.6l1-5.8L1.6 7.7l5.8-.8z"/></svg><svg class="tr-02__half" viewBox="0 0 20 20"><defs><linearGradient id="tr-02-hg"><stop offset="80%" stop-color="currentColor"/><stop offset="80%" stop-color="transparent"/></linearGradient></defs><path fill="url(#tr-02-hg)" d="M10 1.6l2.6 5.3 5.8.8-4.2 4.1 1 5.8L10 14.9 4.8 17.6l1-5.8L1.6 7.7l5.8-.8z"/></svg>
</span>
<b class="tr-02__score">4.8</b>
</div>
<p class="tr-02__label">2,140 verified reviews</p>
</div>
<div class="tr-02__seg tr-02__seg--pills">
<span class="tr-02__pill"><svg viewBox="0 0 20 20" aria-hidden="true"><path d="M10 2l6 2.6v5c0 3.9-2.5 7.4-6 8.4-3.5-1-6-4.5-6-8.4v-5L10 2z" fill="none" stroke="currentColor" stroke-width="1.6"/><path d="M7.2 10.1l1.9 1.9 3.7-3.9" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"/></svg>SOC 2 Type II</span>
<span class="tr-02__pill"><b>99.99%</b> uptime, 12 mo</span>
<span class="tr-02__pill"><b><40ms</b> p95 edge</span>
</div>
<div class="tr-02__seg tr-02__seg--quote">
<div class="tr-02__rotator">
<figure class="tr-02__q" style="--tr-02-i:0">
<blockquote>“Cut our release cycle from ten days to a morning.”</blockquote>
<figcaption><b>Tomas Lindqvist</b> · Head of Eng, Ardent <span class="tr-02__ver"><svg viewBox="0 0 20 20" aria-hidden="true"><circle cx="10" cy="10" r="8.4" fill="currentColor"/><path d="M6.4 10.2l2.4 2.4 4.8-5" fill="none" stroke="oklch(0.16 0.02 260)" stroke-width="1.9" stroke-linecap="round" stroke-linejoin="round"/></svg>Verified customer</span></figcaption>
</figure>
<figure class="tr-02__q" style="--tr-02-i:1">
<blockquote>“The only vendor our security team approved without a call.”</blockquote>
<figcaption><b>Ayesha Nkomo</b> · CISO, Brightline <span class="tr-02__ver"><svg viewBox="0 0 20 20" aria-hidden="true"><circle cx="10" cy="10" r="8.4" fill="currentColor"/><path d="M6.4 10.2l2.4 2.4 4.8-5" fill="none" stroke="oklch(0.16 0.02 260)" stroke-width="1.9" stroke-linecap="round" stroke-linejoin="round"/></svg>Verified customer</span></figcaption>
</figure>
<figure class="tr-02__q" style="--tr-02-i:2">
<blockquote>“Onboarded 40 engineers in a day with no training budget.”</blockquote>
<figcaption><b>Ruth Kelleher</b> · VP Product, Camber <span class="tr-02__ver"><svg viewBox="0 0 20 20" aria-hidden="true"><circle cx="10" cy="10" r="8.4" fill="currentColor"/><path d="M6.4 10.2l2.4 2.4 4.8-5" fill="none" stroke="oklch(0.16 0.02 260)" stroke-width="1.9" stroke-linecap="round" stroke-linejoin="round"/></svg>Verified customer</span></figcaption>
</figure>
</div>
</div>
</div>
<p class="tr-02__chip" aria-hidden="true">flex band · negative-margin avatar stack · ring via box-shadow · CSS-only quote rotator</p>
</div>
</section>.tr-02,
.tr-02 *,
.tr-02 *::before,
.tr-02 *::after {
box-sizing: border-box;
margin: 0;
padding: 0;
}
.tr-02 {
width: 100%;
min-height: 100vh;
min-height: 100svh;
display: block;
--tr-02-bg: oklch(0.18 0.028 264);
--tr-02-band: oklch(0.23 0.03 264);
--tr-02-ink: oklch(0.97 0.006 260);
--tr-02-mut: oklch(0.72 0.02 264);
--tr-02-acc: oklch(0.83 0.16 152);
--tr-02-star: oklch(0.84 0.15 88);
background: var(--tr-02-bg);
color: var(--tr-02-ink);
font-family: 'Segoe UI',system-ui,-apple-system,sans-serif;
-webkit-font-smoothing: antialiased;
}
.tr-02__stage {
min-height: 100vh;
min-height: 100svh;
display: grid;
place-items: center;
align-content: center;
gap: clamp(26px,4vw,44px);
padding: clamp(22px,5vw,60px);
background: radial-gradient(80% 55% at 50% 0%,color-mix(in oklch,var(--tr-02-acc) 14%,transparent),transparent 62%);
}
.tr-02__hero {
text-align: center;
display: grid;
gap: 12px;
}
.tr-02__kicker {
font-size: 12px;
font-weight: 700;
letter-spacing: .18em;
text-transform: uppercase;
color: var(--tr-02-acc);
}
.tr-02__h {
font-size: clamp(30px,5.6vw,58px);
font-weight: 680;
line-height: 1.05;
letter-spacing: -.04em;
text-wrap: balance;
}
.tr-02__band {
width: min(100%,1120px);
display: flex;
flex-wrap: wrap;
align-items: center;
gap: clamp(14px,2.4vw,28px);
padding: 16px clamp(16px,2.4vw,26px);
border-radius: 20px;
background: color-mix(in oklch,var(--tr-02-band) 88%,transparent);
border: 1px solid oklch(1 0 0/.1);
box-shadow: 0 24px 60px -30px oklch(0 0 0/.9),inset 0 1px 0 oklch(1 0 0/.06);
backdrop-filter: blur(14px);
animation: tr-02-up .8s cubic-bezier(.16,1,.3,1) both;
}
@keyframes tr-02-up {
from {
opacity: 0;
translate: 0 18px;
}
to {
opacity: 1;
translate: 0 0;
}
}
.tr-02__seg {
display: flex;
align-items: center;
gap: 12px;
position: relative;
min-height: 44px;
}
.tr-02__seg+.tr-02__seg::before {
content: '';
position: absolute;
inset-inline-start: calc(-1*clamp(7px,1.2vw,14px));
inline-size: 1px;
block-size: 34px;
background: oklch(1 0 0/.14);
}
.tr-02__stack {
display: flex;
align-items: center;
}
.tr-02__stack>*+* {
margin-inline-start: -12px;
}
.tr-02__stack img {
width: 34px;
height: 34px;
border-radius: 50%;
object-fit: cover;
box-shadow: 0 0 0 3px var(--tr-02-band);
background: linear-gradient(135deg,oklch(0.6 0.1 264),oklch(0.5 0.12 300));
}
.tr-02__more {
display: grid;
place-items: center;
width: 34px;
height: 34px;
border-radius: 50%;
background: color-mix(in oklch,var(--tr-02-acc) 88%,black);
color: oklch(0.2 0.03 160);
font-size: 11px;
font-weight: 750;
box-shadow: 0 0 0 3px var(--tr-02-band);
}
.tr-02__label {
font-size: 13px;
line-height: 1.35;
color: var(--tr-02-mut);
}
.tr-02__label b {
color: var(--tr-02-ink);
font-weight: 650;
font-variant-numeric: tabular-nums;
}
.tr-02__rating {
display: flex;
align-items: center;
gap: 8px;
}
.tr-02__stars {
display: flex;
gap: 2px;
color: var(--tr-02-star);
}
.tr-02__stars svg {
width: 16px;
height: 16px;
fill: var(--tr-02-star);
}
.tr-02__half {
fill: none;
}
.tr-02__score {
font-size: 20px;
font-weight: 700;
letter-spacing: -.03em;
font-variant-numeric: tabular-nums;
}
.tr-02__seg--pills {
flex-wrap: wrap;
gap: 8px;
}
.tr-02__pill {
display: inline-flex;
align-items: center;
gap: 6px;
padding: 7px 12px;
border-radius: 10px;
background: oklch(1 0 0/.06);
border: 1px solid oklch(1 0 0/.1);
font-size: 12.5px;
color: var(--tr-02-mut);
font-variant-numeric: tabular-nums;
}
.tr-02__pill b {
color: var(--tr-02-ink);
font-weight: 680;
}
.tr-02__pill svg {
width: 15px;
height: 15px;
color: var(--tr-02-acc);
}
.tr-02__seg--quote {
flex: 1 1 300px;
min-width: 260px;
}
.tr-02__rotator {
display: grid;
width: 100%;
}
.tr-02__q {
grid-area: 1/1;
opacity: 0;
animation: tr-02-rot 13.5s cubic-bezier(.16,1,.3,1) infinite;
animation-delay: calc(var(--tr-02-i)*4.5s);
}
@keyframes tr-02-rot {
0% {
opacity: 0;
translate: 0 8px;
}
4%,
30% {
opacity: 1;
translate: 0 0;
}
34%,
100% {
opacity: 0;
translate: 0 -8px;
}
}
.tr-02__q blockquote {
font-size: 14.5px;
line-height: 1.45;
letter-spacing: -.012em;
text-wrap: pretty;
}
.tr-02__q figcaption {
display: flex;
flex-wrap: wrap;
align-items: center;
gap: 8px;
margin-top: 7px;
font-size: 12px;
color: var(--tr-02-mut);
}
.tr-02__q figcaption b {
color: var(--tr-02-ink);
font-weight: 620;
}
.tr-02__ver {
display: inline-flex;
align-items: center;
gap: 5px;
padding: 3px 9px 3px 5px;
border-radius: 99px;
background: color-mix(in oklch,var(--tr-02-acc) 16%,transparent);
color: color-mix(in oklch,var(--tr-02-acc) 80%,white);
font-size: 11px;
font-weight: 640;
}
.tr-02__ver svg {
width: 14px;
height: 14px;
color: var(--tr-02-acc);
}
.tr-02__chip {
font-family: ui-monospace,Menlo,Consolas,monospace;
font-size: 11.5px;
color: var(--tr-02-mut);
padding: 8px 15px;
border: 1px solid oklch(1 0 0/.13);
border-radius: 99px;
}
@media (max-width: 760px) {
.tr-02__seg+.tr-02__seg::before {
display: none;
}
.tr-02__band {
gap: 16px;
}
}
@media (prefers-reduced-motion: reduce) {
.tr-02__band {
animation: none;
}
.tr-02__q {
animation: none;
opacity: 0;
}
.tr-02__q:first-child {
opacity: 1;
}
}.tr-02,
.tr-02 *,
.tr-02 *::before,
.tr-02 *::after {
box-sizing: border-box;
margin: 0;
padding: 0;
}
.tr-02 {
width: 100%;
min-height: 100vh;
min-height: 100svh;
display: block;
--tr-02-bg: oklch(0.18 0.028 264);
--tr-02-band: oklch(0.23 0.03 264);
--tr-02-ink: oklch(0.97 0.006 260);
--tr-02-mut: oklch(0.72 0.02 264);
--tr-02-acc: oklch(0.83 0.16 152);
--tr-02-star: oklch(0.84 0.15 88);
background: var(--tr-02-bg);
color: var(--tr-02-ink);
font-family: 'Segoe UI',system-ui,-apple-system,sans-serif;
-webkit-font-smoothing: antialiased;
}
.tr-02__stage {
min-height: 100vh;
min-height: 100svh;
display: grid;
place-items: center;
align-content: center;
gap: clamp(26px,4vw,44px);
padding: clamp(22px,5vw,60px);
background: radial-gradient(80% 55% at 50% 0%,color-mix(in oklch,var(--tr-02-acc) 14%,transparent),transparent 62%);
}
.tr-02__hero {
text-align: center;
display: grid;
gap: 12px;
}
.tr-02__kicker {
font-size: 12px;
font-weight: 700;
letter-spacing: .18em;
text-transform: uppercase;
color: var(--tr-02-acc);
}
.tr-02__h {
font-size: clamp(30px,5.6vw,58px);
font-weight: 680;
line-height: 1.05;
letter-spacing: -.04em;
text-wrap: balance;
}
.tr-02__band {
width: min(100%,1120px);
display: flex;
flex-wrap: wrap;
align-items: center;
gap: clamp(14px,2.4vw,28px);
padding: 16px clamp(16px,2.4vw,26px);
border-radius: 20px;
background: color-mix(in oklch,var(--tr-02-band) 88%,transparent);
border: 1px solid oklch(1 0 0/.1);
box-shadow: 0 24px 60px -30px oklch(0 0 0/.9),inset 0 1px 0 oklch(1 0 0/.06);
backdrop-filter: blur(14px);
animation: tr-02-up .8s cubic-bezier(.16,1,.3,1) both;
}
@keyframes tr-02-up {
from {
opacity: 0;
translate: 0 18px;
}
to {
opacity: 1;
translate: 0 0;
}
}
.tr-02__seg {
display: flex;
align-items: center;
gap: 12px;
position: relative;
min-height: 44px;
}
.tr-02__seg+.tr-02__seg::before {
content: '';
position: absolute;
inset-inline-start: calc(-1*clamp(7px,1.2vw,14px));
inline-size: 1px;
block-size: 34px;
background: oklch(1 0 0/.14);
}
.tr-02__stack {
display: flex;
align-items: center;
}
.tr-02__stack>*+* {
margin-inline-start: -12px;
}
.tr-02__stack img {
width: 34px;
height: 34px;
border-radius: 50%;
object-fit: cover;
box-shadow: 0 0 0 3px var(--tr-02-band);
background: linear-gradient(135deg,oklch(0.6 0.1 264),oklch(0.5 0.12 300));
}
.tr-02__more {
display: grid;
place-items: center;
width: 34px;
height: 34px;
border-radius: 50%;
background: color-mix(in oklch,var(--tr-02-acc) 88%,black);
color: oklch(0.2 0.03 160);
font-size: 11px;
font-weight: 750;
box-shadow: 0 0 0 3px var(--tr-02-band);
}
.tr-02__label {
font-size: 13px;
line-height: 1.35;
color: var(--tr-02-mut);
}
.tr-02__label b {
color: var(--tr-02-ink);
font-weight: 650;
font-variant-numeric: tabular-nums;
}
.tr-02__rating {
display: flex;
align-items: center;
gap: 8px;
}
.tr-02__stars {
display: flex;
gap: 2px;
color: var(--tr-02-star);
}
.tr-02__stars svg {
width: 16px;
height: 16px;
fill: var(--tr-02-star);
}
.tr-02__half {
fill: none;
}
.tr-02__score {
font-size: 20px;
font-weight: 700;
letter-spacing: -.03em;
font-variant-numeric: tabular-nums;
}
.tr-02__seg--pills {
flex-wrap: wrap;
gap: 8px;
}
.tr-02__pill {
display: inline-flex;
align-items: center;
gap: 6px;
padding: 7px 12px;
border-radius: 10px;
background: oklch(1 0 0/.06);
border: 1px solid oklch(1 0 0/.1);
font-size: 12.5px;
color: var(--tr-02-mut);
font-variant-numeric: tabular-nums;
}
.tr-02__pill b {
color: var(--tr-02-ink);
font-weight: 680;
}
.tr-02__pill svg {
width: 15px;
height: 15px;
color: var(--tr-02-acc);
}
.tr-02__seg--quote {
flex: 1 1 300px;
min-width: 260px;
}
.tr-02__rotator {
display: grid;
width: 100%;
}
.tr-02__q {
grid-area: 1/1;
opacity: 0;
animation: tr-02-rot 13.5s cubic-bezier(.16,1,.3,1) infinite;
animation-delay: calc(var(--tr-02-i)*4.5s);
}
@keyframes tr-02-rot {
0% {
opacity: 0;
translate: 0 8px;
}
4%,
30% {
opacity: 1;
translate: 0 0;
}
34%,
100% {
opacity: 0;
translate: 0 -8px;
}
}
.tr-02__q blockquote {
font-size: 14.5px;
line-height: 1.45;
letter-spacing: -.012em;
text-wrap: pretty;
}
.tr-02__q figcaption {
display: flex;
flex-wrap: wrap;
align-items: center;
gap: 8px;
margin-top: 7px;
font-size: 12px;
color: var(--tr-02-mut);
}
.tr-02__q figcaption b {
color: var(--tr-02-ink);
font-weight: 620;
}
.tr-02__ver {
display: inline-flex;
align-items: center;
gap: 5px;
padding: 3px 9px 3px 5px;
border-radius: 99px;
background: color-mix(in oklch,var(--tr-02-acc) 16%,transparent);
color: color-mix(in oklch,var(--tr-02-acc) 80%,white);
font-size: 11px;
font-weight: 640;
}
.tr-02__ver svg {
width: 14px;
height: 14px;
color: var(--tr-02-acc);
}
.tr-02__chip {
font-family: ui-monospace,Menlo,Consolas,monospace;
font-size: 11.5px;
color: var(--tr-02-mut);
padding: 8px 15px;
border: 1px solid oklch(1 0 0/.13);
border-radius: 99px;
}
@media (max-width: 760px) {
.tr-02__seg+.tr-02__seg::before {
display: none;
}
.tr-02__band {
gap: 16px;
}
}
@media (prefers-reduced-motion: reduce) {
.tr-02__band {
animation: none;
}
.tr-02__q {
animation: none;
opacity: 0;
}
.tr-02__q:first-child {
opacity: 1;
}
}Here's a working CSS Testimonials & Review from CodeFronts. Use it as-is or adapt to your framework. All classes are scoped under a unique prefix so the code won't collide with your existing styles. MIT licensed.
Demo: SaaS Trust Banner with Verified Badges
Source: https://codefronts.com/components/css-testimonials-reviews/saas-trust-banner-with-verified-badges/
The compressed strip of credibility that sits directly under a SaaS hero — avatar stack, aggregate rating, two hard metrics and a rotating verified quote, all in one 88-pixel-tall band. CRO teams in Tier-1 markets consistently find this the highest-leverage 100 lines on a landing page, because it answers "do real companies use this?" before the visitor has scrolled once.
## HTML
```html
<section class="tr-02" aria-label="SaaS trust banner with verified badges demo">
<div class="tr-02__stage">
<div class="tr-02__hero" aria-hidden="true">
<p class="tr-02__kicker">Deploy previews for every branch</p>
<h2 class="tr-02__h">Ship on Friday.<br>Sleep on Saturday.</h2>
</div>
<div class="tr-02__band">
<div class="tr-02__seg">
<div class="tr-02__stack" aria-hidden="true">
<img src="https://images.unsplash.com/photo-1494790108377-be9c29b29330?q=80&w=96&h=96&fit=crop&auto=format" alt="" width="34" height="34" loading="lazy" decoding="async">
<img src="https://images.unsplash.com/photo-1506794778202-cad84cf45f1d?q=80&w=96&h=96&fit=crop&auto=format" alt="" width="34" height="34" loading="lazy" decoding="async">
<img src="https://images.unsplash.com/photo-1534528741775-53994a69daeb?q=80&w=96&h=96&fit=crop&auto=format" alt="" width="34" height="34" loading="lazy" decoding="async">
<img src="https://images.unsplash.com/photo-1472099645785-5658abf4ff4e?q=80&w=96&h=96&fit=crop&auto=format" alt="" width="34" height="34" loading="lazy" decoding="async">
<span class="tr-02__more">+9k</span>
</div>
<p class="tr-02__label">Trusted by <b>9,240</b> engineering teams</p>
</div>
<div class="tr-02__seg">
<div class="tr-02__rating" role="img" aria-label="Rated 4.8 out of 5 from 2,140 verified reviews">
<span class="tr-02__stars" aria-hidden="true">
<svg viewBox="0 0 20 20"><path d="M10 1.6l2.6 5.3 5.8.8-4.2 4.1 1 5.8L10 14.9 4.8 17.6l1-5.8L1.6 7.7l5.8-.8z"/></svg><svg viewBox="0 0 20 20"><path d="M10 1.6l2.6 5.3 5.8.8-4.2 4.1 1 5.8L10 14.9 4.8 17.6l1-5.8L1.6 7.7l5.8-.8z"/></svg><svg viewBox="0 0 20 20"><path d="M10 1.6l2.6 5.3 5.8.8-4.2 4.1 1 5.8L10 14.9 4.8 17.6l1-5.8L1.6 7.7l5.8-.8z"/></svg><svg viewBox="0 0 20 20"><path d="M10 1.6l2.6 5.3 5.8.8-4.2 4.1 1 5.8L10 14.9 4.8 17.6l1-5.8L1.6 7.7l5.8-.8z"/></svg><svg class="tr-02__half" viewBox="0 0 20 20"><defs><linearGradient id="tr-02-hg"><stop offset="80%" stop-color="currentColor"/><stop offset="80%" stop-color="transparent"/></linearGradient></defs><path fill="url(#tr-02-hg)" d="M10 1.6l2.6 5.3 5.8.8-4.2 4.1 1 5.8L10 14.9 4.8 17.6l1-5.8L1.6 7.7l5.8-.8z"/></svg>
</span>
<b class="tr-02__score">4.8</b>
</div>
<p class="tr-02__label">2,140 verified reviews</p>
</div>
<div class="tr-02__seg tr-02__seg--pills">
<span class="tr-02__pill"><svg viewBox="0 0 20 20" aria-hidden="true"><path d="M10 2l6 2.6v5c0 3.9-2.5 7.4-6 8.4-3.5-1-6-4.5-6-8.4v-5L10 2z" fill="none" stroke="currentColor" stroke-width="1.6"/><path d="M7.2 10.1l1.9 1.9 3.7-3.9" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"/></svg>SOC 2 Type II</span>
<span class="tr-02__pill"><b>99.99%</b> uptime, 12 mo</span>
<span class="tr-02__pill"><b><40ms</b> p95 edge</span>
</div>
<div class="tr-02__seg tr-02__seg--quote">
<div class="tr-02__rotator">
<figure class="tr-02__q" style="--tr-02-i:0">
<blockquote>“Cut our release cycle from ten days to a morning.”</blockquote>
<figcaption><b>Tomas Lindqvist</b> · Head of Eng, Ardent <span class="tr-02__ver"><svg viewBox="0 0 20 20" aria-hidden="true"><circle cx="10" cy="10" r="8.4" fill="currentColor"/><path d="M6.4 10.2l2.4 2.4 4.8-5" fill="none" stroke="oklch(0.16 0.02 260)" stroke-width="1.9" stroke-linecap="round" stroke-linejoin="round"/></svg>Verified customer</span></figcaption>
</figure>
<figure class="tr-02__q" style="--tr-02-i:1">
<blockquote>“The only vendor our security team approved without a call.”</blockquote>
<figcaption><b>Ayesha Nkomo</b> · CISO, Brightline <span class="tr-02__ver"><svg viewBox="0 0 20 20" aria-hidden="true"><circle cx="10" cy="10" r="8.4" fill="currentColor"/><path d="M6.4 10.2l2.4 2.4 4.8-5" fill="none" stroke="oklch(0.16 0.02 260)" stroke-width="1.9" stroke-linecap="round" stroke-linejoin="round"/></svg>Verified customer</span></figcaption>
</figure>
<figure class="tr-02__q" style="--tr-02-i:2">
<blockquote>“Onboarded 40 engineers in a day with no training budget.”</blockquote>
<figcaption><b>Ruth Kelleher</b> · VP Product, Camber <span class="tr-02__ver"><svg viewBox="0 0 20 20" aria-hidden="true"><circle cx="10" cy="10" r="8.4" fill="currentColor"/><path d="M6.4 10.2l2.4 2.4 4.8-5" fill="none" stroke="oklch(0.16 0.02 260)" stroke-width="1.9" stroke-linecap="round" stroke-linejoin="round"/></svg>Verified customer</span></figcaption>
</figure>
</div>
</div>
</div>
<p class="tr-02__chip" aria-hidden="true">flex band · negative-margin avatar stack · ring via box-shadow · CSS-only quote rotator</p>
</div>
</section>
```
## CSS
```css
.tr-02,
.tr-02 *,
.tr-02 *::before,
.tr-02 *::after {
box-sizing: border-box;
margin: 0;
padding: 0;
}
.tr-02 {
width: 100%;
min-height: 100vh;
min-height: 100svh;
display: block;
--tr-02-bg: oklch(0.18 0.028 264);
--tr-02-band: oklch(0.23 0.03 264);
--tr-02-ink: oklch(0.97 0.006 260);
--tr-02-mut: oklch(0.72 0.02 264);
--tr-02-acc: oklch(0.83 0.16 152);
--tr-02-star: oklch(0.84 0.15 88);
background: var(--tr-02-bg);
color: var(--tr-02-ink);
font-family: 'Segoe UI',system-ui,-apple-system,sans-serif;
-webkit-font-smoothing: antialiased;
}
.tr-02__stage {
min-height: 100vh;
min-height: 100svh;
display: grid;
place-items: center;
align-content: center;
gap: clamp(26px,4vw,44px);
padding: clamp(22px,5vw,60px);
background: radial-gradient(80% 55% at 50% 0%,color-mix(in oklch,var(--tr-02-acc) 14%,transparent),transparent 62%);
}
.tr-02__hero {
text-align: center;
display: grid;
gap: 12px;
}
.tr-02__kicker {
font-size: 12px;
font-weight: 700;
letter-spacing: .18em;
text-transform: uppercase;
color: var(--tr-02-acc);
}
.tr-02__h {
font-size: clamp(30px,5.6vw,58px);
font-weight: 680;
line-height: 1.05;
letter-spacing: -.04em;
text-wrap: balance;
}
.tr-02__band {
width: min(100%,1120px);
display: flex;
flex-wrap: wrap;
align-items: center;
gap: clamp(14px,2.4vw,28px);
padding: 16px clamp(16px,2.4vw,26px);
border-radius: 20px;
background: color-mix(in oklch,var(--tr-02-band) 88%,transparent);
border: 1px solid oklch(1 0 0/.1);
box-shadow: 0 24px 60px -30px oklch(0 0 0/.9),inset 0 1px 0 oklch(1 0 0/.06);
backdrop-filter: blur(14px);
animation: tr-02-up .8s cubic-bezier(.16,1,.3,1) both;
}
@keyframes tr-02-up {
from {
opacity: 0;
translate: 0 18px;
}
to {
opacity: 1;
translate: 0 0;
}
}
.tr-02__seg {
display: flex;
align-items: center;
gap: 12px;
position: relative;
min-height: 44px;
}
.tr-02__seg+.tr-02__seg::before {
content: '';
position: absolute;
inset-inline-start: calc(-1*clamp(7px,1.2vw,14px));
inline-size: 1px;
block-size: 34px;
background: oklch(1 0 0/.14);
}
.tr-02__stack {
display: flex;
align-items: center;
}
.tr-02__stack>*+* {
margin-inline-start: -12px;
}
.tr-02__stack img {
width: 34px;
height: 34px;
border-radius: 50%;
object-fit: cover;
box-shadow: 0 0 0 3px var(--tr-02-band);
background: linear-gradient(135deg,oklch(0.6 0.1 264),oklch(0.5 0.12 300));
}
.tr-02__more {
display: grid;
place-items: center;
width: 34px;
height: 34px;
border-radius: 50%;
background: color-mix(in oklch,var(--tr-02-acc) 88%,black);
color: oklch(0.2 0.03 160);
font-size: 11px;
font-weight: 750;
box-shadow: 0 0 0 3px var(--tr-02-band);
}
.tr-02__label {
font-size: 13px;
line-height: 1.35;
color: var(--tr-02-mut);
}
.tr-02__label b {
color: var(--tr-02-ink);
font-weight: 650;
font-variant-numeric: tabular-nums;
}
.tr-02__rating {
display: flex;
align-items: center;
gap: 8px;
}
.tr-02__stars {
display: flex;
gap: 2px;
color: var(--tr-02-star);
}
.tr-02__stars svg {
width: 16px;
height: 16px;
fill: var(--tr-02-star);
}
.tr-02__half {
fill: none;
}
.tr-02__score {
font-size: 20px;
font-weight: 700;
letter-spacing: -.03em;
font-variant-numeric: tabular-nums;
}
.tr-02__seg--pills {
flex-wrap: wrap;
gap: 8px;
}
.tr-02__pill {
display: inline-flex;
align-items: center;
gap: 6px;
padding: 7px 12px;
border-radius: 10px;
background: oklch(1 0 0/.06);
border: 1px solid oklch(1 0 0/.1);
font-size: 12.5px;
color: var(--tr-02-mut);
font-variant-numeric: tabular-nums;
}
.tr-02__pill b {
color: var(--tr-02-ink);
font-weight: 680;
}
.tr-02__pill svg {
width: 15px;
height: 15px;
color: var(--tr-02-acc);
}
.tr-02__seg--quote {
flex: 1 1 300px;
min-width: 260px;
}
.tr-02__rotator {
display: grid;
width: 100%;
}
.tr-02__q {
grid-area: 1/1;
opacity: 0;
animation: tr-02-rot 13.5s cubic-bezier(.16,1,.3,1) infinite;
animation-delay: calc(var(--tr-02-i)*4.5s);
}
@keyframes tr-02-rot {
0% {
opacity: 0;
translate: 0 8px;
}
4%,
30% {
opacity: 1;
translate: 0 0;
}
34%,
100% {
opacity: 0;
translate: 0 -8px;
}
}
.tr-02__q blockquote {
font-size: 14.5px;
line-height: 1.45;
letter-spacing: -.012em;
text-wrap: pretty;
}
.tr-02__q figcaption {
display: flex;
flex-wrap: wrap;
align-items: center;
gap: 8px;
margin-top: 7px;
font-size: 12px;
color: var(--tr-02-mut);
}
.tr-02__q figcaption b {
color: var(--tr-02-ink);
font-weight: 620;
}
.tr-02__ver {
display: inline-flex;
align-items: center;
gap: 5px;
padding: 3px 9px 3px 5px;
border-radius: 99px;
background: color-mix(in oklch,var(--tr-02-acc) 16%,transparent);
color: color-mix(in oklch,var(--tr-02-acc) 80%,white);
font-size: 11px;
font-weight: 640;
}
.tr-02__ver svg {
width: 14px;
height: 14px;
color: var(--tr-02-acc);
}
.tr-02__chip {
font-family: ui-monospace,Menlo,Consolas,monospace;
font-size: 11.5px;
color: var(--tr-02-mut);
padding: 8px 15px;
border: 1px solid oklch(1 0 0/.13);
border-radius: 99px;
}
@media (max-width: 760px) {
.tr-02__seg+.tr-02__seg::before {
display: none;
}
.tr-02__band {
gap: 16px;
}
}
@media (prefers-reduced-motion: reduce) {
.tr-02__band {
animation: none;
}
.tr-02__q {
animation: none;
opacity: 0;
}
.tr-02__q:first-child {
opacity: 1;
}
}
```Here's a working CSS Testimonials & Review from CodeFronts. Use it as-is or adapt to your framework. All classes are scoped under a unique prefix so the code won't collide with your existing styles. MIT licensed.
Demo: SaaS Trust Banner with Verified Badges
Source: https://codefronts.com/components/css-testimonials-reviews/saas-trust-banner-with-verified-badges/
The compressed strip of credibility that sits directly under a SaaS hero — avatar stack, aggregate rating, two hard metrics and a rotating verified quote, all in one 88-pixel-tall band. CRO teams in Tier-1 markets consistently find this the highest-leverage 100 lines on a landing page, because it answers "do real companies use this?" before the visitor has scrolled once.
## HTML
```html
<section class="tr-02" aria-label="SaaS trust banner with verified badges demo">
<div class="tr-02__stage">
<div class="tr-02__hero" aria-hidden="true">
<p class="tr-02__kicker">Deploy previews for every branch</p>
<h2 class="tr-02__h">Ship on Friday.<br>Sleep on Saturday.</h2>
</div>
<div class="tr-02__band">
<div class="tr-02__seg">
<div class="tr-02__stack" aria-hidden="true">
<img src="https://images.unsplash.com/photo-1494790108377-be9c29b29330?q=80&w=96&h=96&fit=crop&auto=format" alt="" width="34" height="34" loading="lazy" decoding="async">
<img src="https://images.unsplash.com/photo-1506794778202-cad84cf45f1d?q=80&w=96&h=96&fit=crop&auto=format" alt="" width="34" height="34" loading="lazy" decoding="async">
<img src="https://images.unsplash.com/photo-1534528741775-53994a69daeb?q=80&w=96&h=96&fit=crop&auto=format" alt="" width="34" height="34" loading="lazy" decoding="async">
<img src="https://images.unsplash.com/photo-1472099645785-5658abf4ff4e?q=80&w=96&h=96&fit=crop&auto=format" alt="" width="34" height="34" loading="lazy" decoding="async">
<span class="tr-02__more">+9k</span>
</div>
<p class="tr-02__label">Trusted by <b>9,240</b> engineering teams</p>
</div>
<div class="tr-02__seg">
<div class="tr-02__rating" role="img" aria-label="Rated 4.8 out of 5 from 2,140 verified reviews">
<span class="tr-02__stars" aria-hidden="true">
<svg viewBox="0 0 20 20"><path d="M10 1.6l2.6 5.3 5.8.8-4.2 4.1 1 5.8L10 14.9 4.8 17.6l1-5.8L1.6 7.7l5.8-.8z"/></svg><svg viewBox="0 0 20 20"><path d="M10 1.6l2.6 5.3 5.8.8-4.2 4.1 1 5.8L10 14.9 4.8 17.6l1-5.8L1.6 7.7l5.8-.8z"/></svg><svg viewBox="0 0 20 20"><path d="M10 1.6l2.6 5.3 5.8.8-4.2 4.1 1 5.8L10 14.9 4.8 17.6l1-5.8L1.6 7.7l5.8-.8z"/></svg><svg viewBox="0 0 20 20"><path d="M10 1.6l2.6 5.3 5.8.8-4.2 4.1 1 5.8L10 14.9 4.8 17.6l1-5.8L1.6 7.7l5.8-.8z"/></svg><svg class="tr-02__half" viewBox="0 0 20 20"><defs><linearGradient id="tr-02-hg"><stop offset="80%" stop-color="currentColor"/><stop offset="80%" stop-color="transparent"/></linearGradient></defs><path fill="url(#tr-02-hg)" d="M10 1.6l2.6 5.3 5.8.8-4.2 4.1 1 5.8L10 14.9 4.8 17.6l1-5.8L1.6 7.7l5.8-.8z"/></svg>
</span>
<b class="tr-02__score">4.8</b>
</div>
<p class="tr-02__label">2,140 verified reviews</p>
</div>
<div class="tr-02__seg tr-02__seg--pills">
<span class="tr-02__pill"><svg viewBox="0 0 20 20" aria-hidden="true"><path d="M10 2l6 2.6v5c0 3.9-2.5 7.4-6 8.4-3.5-1-6-4.5-6-8.4v-5L10 2z" fill="none" stroke="currentColor" stroke-width="1.6"/><path d="M7.2 10.1l1.9 1.9 3.7-3.9" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"/></svg>SOC 2 Type II</span>
<span class="tr-02__pill"><b>99.99%</b> uptime, 12 mo</span>
<span class="tr-02__pill"><b><40ms</b> p95 edge</span>
</div>
<div class="tr-02__seg tr-02__seg--quote">
<div class="tr-02__rotator">
<figure class="tr-02__q" style="--tr-02-i:0">
<blockquote>“Cut our release cycle from ten days to a morning.”</blockquote>
<figcaption><b>Tomas Lindqvist</b> · Head of Eng, Ardent <span class="tr-02__ver"><svg viewBox="0 0 20 20" aria-hidden="true"><circle cx="10" cy="10" r="8.4" fill="currentColor"/><path d="M6.4 10.2l2.4 2.4 4.8-5" fill="none" stroke="oklch(0.16 0.02 260)" stroke-width="1.9" stroke-linecap="round" stroke-linejoin="round"/></svg>Verified customer</span></figcaption>
</figure>
<figure class="tr-02__q" style="--tr-02-i:1">
<blockquote>“The only vendor our security team approved without a call.”</blockquote>
<figcaption><b>Ayesha Nkomo</b> · CISO, Brightline <span class="tr-02__ver"><svg viewBox="0 0 20 20" aria-hidden="true"><circle cx="10" cy="10" r="8.4" fill="currentColor"/><path d="M6.4 10.2l2.4 2.4 4.8-5" fill="none" stroke="oklch(0.16 0.02 260)" stroke-width="1.9" stroke-linecap="round" stroke-linejoin="round"/></svg>Verified customer</span></figcaption>
</figure>
<figure class="tr-02__q" style="--tr-02-i:2">
<blockquote>“Onboarded 40 engineers in a day with no training budget.”</blockquote>
<figcaption><b>Ruth Kelleher</b> · VP Product, Camber <span class="tr-02__ver"><svg viewBox="0 0 20 20" aria-hidden="true"><circle cx="10" cy="10" r="8.4" fill="currentColor"/><path d="M6.4 10.2l2.4 2.4 4.8-5" fill="none" stroke="oklch(0.16 0.02 260)" stroke-width="1.9" stroke-linecap="round" stroke-linejoin="round"/></svg>Verified customer</span></figcaption>
</figure>
</div>
</div>
</div>
<p class="tr-02__chip" aria-hidden="true">flex band · negative-margin avatar stack · ring via box-shadow · CSS-only quote rotator</p>
</div>
</section>
```
## CSS
```css
.tr-02,
.tr-02 *,
.tr-02 *::before,
.tr-02 *::after {
box-sizing: border-box;
margin: 0;
padding: 0;
}
.tr-02 {
width: 100%;
min-height: 100vh;
min-height: 100svh;
display: block;
--tr-02-bg: oklch(0.18 0.028 264);
--tr-02-band: oklch(0.23 0.03 264);
--tr-02-ink: oklch(0.97 0.006 260);
--tr-02-mut: oklch(0.72 0.02 264);
--tr-02-acc: oklch(0.83 0.16 152);
--tr-02-star: oklch(0.84 0.15 88);
background: var(--tr-02-bg);
color: var(--tr-02-ink);
font-family: 'Segoe UI',system-ui,-apple-system,sans-serif;
-webkit-font-smoothing: antialiased;
}
.tr-02__stage {
min-height: 100vh;
min-height: 100svh;
display: grid;
place-items: center;
align-content: center;
gap: clamp(26px,4vw,44px);
padding: clamp(22px,5vw,60px);
background: radial-gradient(80% 55% at 50% 0%,color-mix(in oklch,var(--tr-02-acc) 14%,transparent),transparent 62%);
}
.tr-02__hero {
text-align: center;
display: grid;
gap: 12px;
}
.tr-02__kicker {
font-size: 12px;
font-weight: 700;
letter-spacing: .18em;
text-transform: uppercase;
color: var(--tr-02-acc);
}
.tr-02__h {
font-size: clamp(30px,5.6vw,58px);
font-weight: 680;
line-height: 1.05;
letter-spacing: -.04em;
text-wrap: balance;
}
.tr-02__band {
width: min(100%,1120px);
display: flex;
flex-wrap: wrap;
align-items: center;
gap: clamp(14px,2.4vw,28px);
padding: 16px clamp(16px,2.4vw,26px);
border-radius: 20px;
background: color-mix(in oklch,var(--tr-02-band) 88%,transparent);
border: 1px solid oklch(1 0 0/.1);
box-shadow: 0 24px 60px -30px oklch(0 0 0/.9),inset 0 1px 0 oklch(1 0 0/.06);
backdrop-filter: blur(14px);
animation: tr-02-up .8s cubic-bezier(.16,1,.3,1) both;
}
@keyframes tr-02-up {
from {
opacity: 0;
translate: 0 18px;
}
to {
opacity: 1;
translate: 0 0;
}
}
.tr-02__seg {
display: flex;
align-items: center;
gap: 12px;
position: relative;
min-height: 44px;
}
.tr-02__seg+.tr-02__seg::before {
content: '';
position: absolute;
inset-inline-start: calc(-1*clamp(7px,1.2vw,14px));
inline-size: 1px;
block-size: 34px;
background: oklch(1 0 0/.14);
}
.tr-02__stack {
display: flex;
align-items: center;
}
.tr-02__stack>*+* {
margin-inline-start: -12px;
}
.tr-02__stack img {
width: 34px;
height: 34px;
border-radius: 50%;
object-fit: cover;
box-shadow: 0 0 0 3px var(--tr-02-band);
background: linear-gradient(135deg,oklch(0.6 0.1 264),oklch(0.5 0.12 300));
}
.tr-02__more {
display: grid;
place-items: center;
width: 34px;
height: 34px;
border-radius: 50%;
background: color-mix(in oklch,var(--tr-02-acc) 88%,black);
color: oklch(0.2 0.03 160);
font-size: 11px;
font-weight: 750;
box-shadow: 0 0 0 3px var(--tr-02-band);
}
.tr-02__label {
font-size: 13px;
line-height: 1.35;
color: var(--tr-02-mut);
}
.tr-02__label b {
color: var(--tr-02-ink);
font-weight: 650;
font-variant-numeric: tabular-nums;
}
.tr-02__rating {
display: flex;
align-items: center;
gap: 8px;
}
.tr-02__stars {
display: flex;
gap: 2px;
color: var(--tr-02-star);
}
.tr-02__stars svg {
width: 16px;
height: 16px;
fill: var(--tr-02-star);
}
.tr-02__half {
fill: none;
}
.tr-02__score {
font-size: 20px;
font-weight: 700;
letter-spacing: -.03em;
font-variant-numeric: tabular-nums;
}
.tr-02__seg--pills {
flex-wrap: wrap;
gap: 8px;
}
.tr-02__pill {
display: inline-flex;
align-items: center;
gap: 6px;
padding: 7px 12px;
border-radius: 10px;
background: oklch(1 0 0/.06);
border: 1px solid oklch(1 0 0/.1);
font-size: 12.5px;
color: var(--tr-02-mut);
font-variant-numeric: tabular-nums;
}
.tr-02__pill b {
color: var(--tr-02-ink);
font-weight: 680;
}
.tr-02__pill svg {
width: 15px;
height: 15px;
color: var(--tr-02-acc);
}
.tr-02__seg--quote {
flex: 1 1 300px;
min-width: 260px;
}
.tr-02__rotator {
display: grid;
width: 100%;
}
.tr-02__q {
grid-area: 1/1;
opacity: 0;
animation: tr-02-rot 13.5s cubic-bezier(.16,1,.3,1) infinite;
animation-delay: calc(var(--tr-02-i)*4.5s);
}
@keyframes tr-02-rot {
0% {
opacity: 0;
translate: 0 8px;
}
4%,
30% {
opacity: 1;
translate: 0 0;
}
34%,
100% {
opacity: 0;
translate: 0 -8px;
}
}
.tr-02__q blockquote {
font-size: 14.5px;
line-height: 1.45;
letter-spacing: -.012em;
text-wrap: pretty;
}
.tr-02__q figcaption {
display: flex;
flex-wrap: wrap;
align-items: center;
gap: 8px;
margin-top: 7px;
font-size: 12px;
color: var(--tr-02-mut);
}
.tr-02__q figcaption b {
color: var(--tr-02-ink);
font-weight: 620;
}
.tr-02__ver {
display: inline-flex;
align-items: center;
gap: 5px;
padding: 3px 9px 3px 5px;
border-radius: 99px;
background: color-mix(in oklch,var(--tr-02-acc) 16%,transparent);
color: color-mix(in oklch,var(--tr-02-acc) 80%,white);
font-size: 11px;
font-weight: 640;
}
.tr-02__ver svg {
width: 14px;
height: 14px;
color: var(--tr-02-acc);
}
.tr-02__chip {
font-family: ui-monospace,Menlo,Consolas,monospace;
font-size: 11.5px;
color: var(--tr-02-mut);
padding: 8px 15px;
border: 1px solid oklch(1 0 0/.13);
border-radius: 99px;
}
@media (max-width: 760px) {
.tr-02__seg+.tr-02__seg::before {
display: none;
}
.tr-02__band {
gap: 16px;
}
}
@media (prefers-reduced-motion: reduce) {
.tr-02__band {
animation: none;
}
.tr-02__q {
animation: none;
opacity: 0;
}
.tr-02__q:first-child {
opacity: 1;
}
}
```How this works
The whole band is one flex row with a gap and vertical hairline separators drawn by a pseudo-element, so removing a segment never leaves an orphaned divider:
.seg + .seg::before {
content: '';
inline-size: 1px;
block-size: 34px;
background: color-mix(in oklch, var(--ink) 14%, transparent);
}The overlapping avatar stack is a flex row with a negative margin on every child except the first, and each avatar carries a ring drawn with box-shadow: 0 0 0 3px var(--bg) rather than a border — a border would eat into the 32 px box and misalign the circles.
.stack > * + * { margin-inline-start: -12px; }
.stack img { box-shadow: 0 0 0 3px var(--bg); }The verified badge is a single inline SVG check-in-shield plus text, and the quote rotates with a keyframe that swaps opacity and translate on a 12-second loop across three stacked <figure> elements — a CSS-only rotator with no layout thrash, since all three sit in the same grid cell.
Accessibility detail worth copying: the aggregate rating is a single role="img" labelled "Rated 4.8 out of 5 from 2,140 verified reviews", and the rotating quotes live in a container marked aria-roledescription-free plain text — no live region, because a quote that re-announces itself every four seconds is hostile to screen-reader users.
Make it yours
- Stack to two rows under 720 px by switching the band to
flex-wrap: wrapand letting the metric pills drop — the avatar stack and rating should always survive the first breakpoint. - Swap the rotating quote for a static one by deleting the animation-delay rules; the layout is unchanged because all three figures share one grid area.
- Pin the band to the viewport bottom on mobile with
position: sticky; bottom: 0for a persistent trust bar — pair withpadding-bottom: env(safe-area-inset-bottom). - Add your review-platform logos as inline SVG in the last segment; keep them monochrome via
fill: currentColorso they inherit the band's theme automatically.
Gotchas — read before shipping
- An avatar stack built with
borderinstead ofbox-shadowshifts every circle by 2× the border width. Use a ring shadow so the 32 px box stays 32 px. - Never wrap the rotating quotes in
aria-live. Rotation is decorative; announcing every swap interrupts whatever the user was reading. gapplus pseudo-element dividers double up if you also set margins. Pick one spacing mechanism.- Metric pills with different digit counts jitter the row when content is dynamic —
font-variant-numeric: tabular-numskeeps the advance width stable. - Verified badges are a trust claim. If the data is not actually verified, do not ship the badge — Tier-1 consumer protection regulators treat fabricated review badges as deceptive advertising.
Browser support
| Chrome | Safari | Firefox | Edge |
|---|---|---|---|
| 114+ | 17.5+ | 121+ | 114+ |
Floor set by oklch(), color-mix(), backdrop-filter, text-wrap as this demo is written. The core technique itself goes back further — Chrome 111+.
The floor is oklch() and color-mix() (Chrome 111, Safari 16.4, Firefox 113). Everything else — flex, gap, box-shadow rings, keyframes — is universally supported. Add hex fallbacks before each oklch declaration if you support browsers older than 2023.