Загрузка...

Секция отзывов с плавающими glassmorphism карточками и анимированным фоном. Идеально для лендингов SaaS и продуктов.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Clean Glassmorphic Testimonial Constellation</title>
<!-- Google Fonts: Inter & Space Grotesk for accents -->
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link
href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&family=Space+Grotesk:wght@300;400;600&display=swap"
rel="stylesheet">
<!-- Tailwind CSS -->
<script src="https://cdn.tailwindcss.com"></script>
<script>
tailwind.config = {
theme: {
extend: {
fontFamily: {
sans: ['Inter', 'sans-serif'],
display:['Space Grotesk', 'sans-serif'],
},
colors: {
darkBg: '#050505',
clean: {
light: '#ffffff',
muted: '#a1a1aa',
slate: '#71717a',
dark: '#18181b'
}
}
}
}
}
</script>
<style>
/* Base Reset */
body {
background-color: #050505;
margin: 0;
overflow-x: hidden;
font-family: 'Inter', sans-serif;
color: #ffffff;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
/* --- Clean Ambient Background System --- */
.ambient-container {
position: fixed;
inset: 0;
z-index: 0;
overflow: hidden;
background: #050505;
}
.ambient-blob {
position: absolute;
border-radius: 50%;
filter: blur(150px);
opacity: 0.4;
will-change: transform;
animation: ambient-move 25s infinite alternate cubic-bezier(0.4, 0, 0.2, 1);
}
/* Using soft whites, slates, and pale grays for a clean look */
.ambient-1 {
top: -10%;
left: -10%;
width: 50vw;
height: 50vw;
background: rgba(255, 255, 255, 0.15);
animation-delay: 0s;
}
.ambient-2 {
bottom: -20%;
right: -10%;
width: 60vw;
height: 60vw;
background: rgba(161, 161, 170, 0.15);
animation-duration: 30s;
animation-direction: alternate-reverse;
}
.ambient-3 {
top: 20%;
right: 20%;
width: 40vw;
height: 40vw;
background: rgba(255, 255, 255, 0.1);
animation-duration: 20s;
animation-delay: -5s;
}
.ambient-4 {
bottom: 10%;
left: 10%;
width: 45vw;
height: 45vw;
background: rgba(113, 113, 122, 0.15);
animation-duration: 28s;
animation-delay: -10s;
}
@keyframes ambient-move {
0% {
transform: translate(0, 0) scale(1) rotate(0deg);
}
33% {
transform: translate(10vw, 15vh) scale(1.1) rotate(45deg);
}
66% {
transform: translate(-15vw, 10vh) scale(0.9) rotate(-30deg);
}
100% {
transform: translate(-5vw, -15vh) scale(1.05) rotate(15deg);
}
}
/* Subtle Noise Overlay for Texture */
.noise-overlay {
position: absolute;
inset: 0;
opacity: 0.05;
mix-blend-mode: overlay;
background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 200 200' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='noiseFilter'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='3' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23noiseFilter)'/%3E%3C/svg%3E");
pointer-events: none;
}
/* --- Spatial Constellation Layout --- */
.constellation {
position: relative;
width: 100%;
max-width: 1400px;
min-height: 100vh;
margin: 0 auto;
display: flex;
align-items: center;
justify-content: center;
perspective: 2000px;
padding: 2rem;
z-index: 10;
}
/* Floating Animation Wrappers */
.card-wrapper {
position: relative;
will-change: transform;
transition: z-index 0s;
}
/* Individual Float Timings */
.float-1 {
animation: float 8s ease-in-out infinite;
}
.float-2 {
animation: float 10s ease-in-out infinite 1s;
}
.float-3 {
animation: float 9s ease-in-out infinite 2s;
}
.float-4 {
animation: float 11s ease-in-out infinite 0.5s;
}
.float-5 {
animation: float 12s ease-in-out infinite 1.5s;
}
@keyframes float {
0%,
100% {
transform: translateY(0) translateX(0);
}
33% {
transform: translateY(-12px) translateX(8px);
}
66% {
transform: translateY(8px) translateX(-4px);
}
}
/* --- Pristine Glassmorphic Card Engine --- */
.glass-card {
background: linear-gradient(135deg, rgba(255, 255, 255, 0.05) 0%, rgba(255, 255, 255, 0.01) 100%);
backdrop-filter: blur(24px) saturate(120%);
-webkit-backdrop-filter: blur(24px) saturate(120%);
border: 1px solid rgba(255, 255, 255, 0.08);
border-top: 1px solid rgba(255, 255, 255, 0.15);
border-left: 1px solid rgba(255, 255, 255, 0.12);
border-radius: 2rem;
box-shadow:
0 30px 60px -15px rgba(0, 0, 0, 0.6),
inset 0 0 20px rgba(255, 255, 255, 0.02);
padding: 2rem;
width: 380px;
transition: all 0.7s cubic-bezier(0.2, 0.8, 0.2, 1);
transform-style: preserve-3d;
cursor: crosshair;
position: relative;
overflow: hidden;
}
/* Internal Specular Shine */
.glass-card::before {
content: '';
position: absolute;
top: 0;
left: -100%;
width: 50%;
height: 100%;
background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.06), transparent);
transform: skewX(-20deg);
transition: 0.8s ease-out;
pointer-events: none;
z-index: 10;
}
/* --- Symbiotic Hover Engine --- */
@media (min-width: 1024px) {
/* Initial Scattered Base States */
.wrapper-center {
z-index: 30;
}
.card-center {
transform: scale(1) translateZ(0) rotate(0deg);
}
.wrapper-tl {
position: absolute;
top: 10%;
left: 8%;
z-index: 20;
}
.card-tl {
transform: scale(0.85) translateZ(-50px) rotate(-6deg);
opacity: 0.8;
}
.wrapper-tr {
position: absolute;
top: 18%;
right: 5%;
z-index: 25;
}
.card-tr {
transform: scale(0.9) translateZ(-30px) rotate(4deg);
opacity: 0.85;
}
.wrapper-bl {
position: absolute;
bottom: 12%;
left: 5%;
z-index: 22;
}
.card-bl {
transform: scale(0.8) translateZ(-60px) rotate(8deg);
opacity: 0.75;
}
.wrapper-br {
position: absolute;
bottom: 8%;
right: 10%;
z-index: 15;
}
.card-br {
transform: scale(0.75) translateZ(-80px) rotate(-5deg);
opacity: 0.7;
}
/* Focus Mechanic */
.constellation:has(.card-wrapper:hover) .card-wrapper .glass-card {
transform: scale(0.75) translateZ(-150px) rotate(0deg);
filter: blur(12px) brightness(0.7);
opacity: 0.4;
border-color: rgba(255, 255, 255, 0.02);
}
.constellation .card-wrapper:hover {
z-index: 50 !important;
}
.constellation .card-wrapper:hover .glass-card {
transform: scale(1.15) translateZ(80px) rotate(0deg) !important;
filter: blur(0px) brightness(1.1) !important;
opacity: 1 !important;
border-color: rgba(255, 255, 255, 0.25);
box-shadow:
0 50px 100px -20px rgba(0, 0, 0, 0.8),
0 0 60px rgba(255, 255, 255, 0.08),
/* Soft white outer glow */
inset 0 1px 0 rgba(255, 255, 255, 0.3);
}
.constellation .card-wrapper:hover .glass-card::before {
left: 200%;
}
}
/* Mobile Layout Fallback */
@media (max-width: 1023px) {
.constellation {
flex-direction: column;
gap: 2rem;
padding-top: 4rem;
padding-bottom: 4rem;
}
.card-wrapper {
width: 100%;
display: flex;
justify-content: center;
}
.glass-card {
width: 100%;
max-width: 400px;
}
}
/* --- Element Styles for Clean Look --- */
/* Subtle white/silver rotation glow for avatars */
.avatar-glow {
position: absolute;
inset: -3px;
border-radius: 50%;
background: linear-gradient(135deg, rgba(255, 255, 255, 0.4), rgba(255, 255, 255, 0));
filter: blur(4px);
opacity: 0.5;
z-index: 0;
transition: opacity 0.4s ease;
}
.card-wrapper:hover .avatar-glow {
opacity: 1;
animation: spin-glow 4s linear infinite;
}
@keyframes spin-glow {
100% {
transform: rotate(360deg);
}
}
/* Monochrome text gradient */
.text-gradient {
background: linear-gradient(to right, #ffffff, #71717a);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
}
/* Soft white stars instead of bright yellow */
.star {
color: rgba(255, 255, 255, 0.8);
filter: drop-shadow(0 0 4px rgba(255, 255, 255, 0.3));
}
/* Subtle Quote Icon */
.quote-icon {
background: linear-gradient(135deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0.02));
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
}
</style>
</head>
<body>
<!-- Environment Layer -->
<div class="ambient-container pointer-events-none">
<div class="ambient-blob ambient-1"></div>
<div class="ambient-blob ambient-2"></div>
<div class="ambient-blob ambient-3"></div>
<div class="ambient-blob ambient-4"></div>
<div class="noise-overlay"></div>
</div>
<!-- Spatial Content Layer -->
<main class="constellation">
<!-- 1. Center Card (Primary) -->
<div class="card-wrapper float-1 wrapper-center">
<div class="glass-card card-center">
<span class="absolute top-2 right-6 text-8xl font-serif leading-none quote-icon">"</span>
<div class="flex items-center gap-1.5 mb-6">
<svg class="w-4 h-4 star" fill="currentColor" viewBox="0 0 24 24">
<path
d="M12 17.27L18.18 21l-1.64-7.03L22 9.24l-7.19-.61L12 2 9.19 8.63 2 9.24l5.46 4.73L5.82 21z" />
</svg>
<svg class="w-4 h-4 star" fill="currentColor" viewBox="0 0 24 24">
<path
d="M12 17.27L18.18 21l-1.64-7.03L22 9.24l-7.19-.61L12 2 9.19 8.63 2 9.24l5.46 4.73L5.82 21z" />
</svg>
<svg class="w-4 h-4 star" fill="currentColor" viewBox="0 0 24 24">
<path
d="M12 17.27L18.18 21l-1.64-7.03L22 9.24l-7.19-.61L12 2 9.19 8.63 2 9.24l5.46 4.73L5.82 21z" />
</svg>
<svg class="w-4 h-4 star" fill="currentColor" viewBox="0 0 24 24">
<path
d="M12 17.27L18.18 21l-1.64-7.03L22 9.24l-7.19-.61L12 2 9.19 8.63 2 9.24l5.46 4.73L5.82 21z" />
</svg>
<svg class="w-4 h-4 star" fill="currentColor" viewBox="0 0 24 24">
<path
d="M12 17.27L18.18 21l-1.64-7.03L22 9.24l-7.19-.61L12 2 9.19 8.63 2 9.24l5.46 4.73L5.82 21z" />
</svg>
</div>
<blockquote class="text-xl font-light leading-relaxed text-gray-100 mb-8 relative z-10">
The precision and minimalist brilliance of this platform completely redefined our workflow. It feels
perfectly engineered.
</blockquote>
<div class="flex items-center gap-4 relative z-10 pt-6 border-t border-white/10">
<div class="relative w-12 h-12 shrink-0 flex items-center justify-center">
<div class="avatar-glow"></div>
<img src="https://images.unsplash.com/photo-1534528741775-53994a69daeb?ixlib=rb-4.0.3&auto=format&fit=crop&w=150&q=80" alt="Avatar" class="relative z-10 w-full h-full object-cover rounded-full border border-white/20">
</div>
<div class="flex flex-col">
<span class="text-sm font-semibold text-white tracking-wide">Elena Rostova</span>
<span class="text-xs font-medium text-gray-400 font-display tracking-widest uppercase mt-0.5">Creative Director, Lumina</span>
</div>
</div>
</div>
</div>
<!-- 2. Top Left Card -->
<div class="card-wrapper float-2 wrapper-tl">
<div class="glass-card card-tl">
<span class="absolute top-2 right-6 text-7xl font-serif leading-none quote-icon">"</span>
<div class="flex items-center gap-1.5 mb-4">
<svg class="w-3.5 h-3.5 star" fill="currentColor" viewBox="0 0 24 24">
<path
d="M12 17.27L18.18 21l-1.64-7.03L22 9.24l-7.19-.61L12 2 9.19 8.63 2 9.24l5.46 4.73L5.82 21z" />
</svg>
<svg class="w-3.5 h-3.5 star" fill="currentColor" viewBox="0 0 24 24">
<path
d="M12 17.27L18.18 21l-1.64-7.03L22 9.24l-7.19-.61L12 2 9.19 8.63 2 9.24l5.46 4.73L5.82 21z" />
</svg>
<svg class="w-3.5 h-3.5 star" fill="currentColor" viewBox="0 0 24 24">
<path
d="M12 17.27L18.18 21l-1.64-7.03L22 9.24l-7.19-.61L12 2 9.19 8.63 2 9.24l5.46 4.73L5.82 21z" />
</svg>
<svg class="w-3.5 h-3.5 star" fill="currentColor" viewBox="0 0 24 24">
<path
d="M12 17.27L18.18 21l-1.64-7.03L22 9.24l-7.19-.61L12 2 9.19 8.63 2 9.24l5.46 4.73L5.82 21z" />
</svg>
<svg class="w-3.5 h-3.5 star" fill="currentColor" viewBox="0 0 24 24">
<path
d="M12 17.27L18.18 21l-1.64-7.03L22 9.24l-7.19-.61L12 2 9.19 8.63 2 9.24l5.46 4.73L5.82 21z" />
</svg>
</div>
<blockquote class="text-base font-light leading-relaxed text-gray-300 mb-6 relative z-10">
It's not just a tool, it's an extension of our design language. Absolutely flawless execution across
the board.
</blockquote>
<div class="flex items-center gap-3 relative z-10 pt-4 border-t border-white/5">
<div class="relative w-10 h-10 shrink-0 flex items-center justify-center">
<div class="avatar-glow"></div>
<img src="https://images.unsplash.com/photo-1506794778202-cad84cf45f1d?ixlib=rb-4.0.3&auto=format&fit=crop&w=150&q=80" alt="Avatar" class="relative z-10 w-full h-full object-cover rounded-full border border-white/20">
</div>
<div class="flex flex-col">
<span class="text-sm font-medium text-white">Marcus Vance</span>
<span class="text-[10px] text-gray-400 font-display tracking-wider uppercase mt-0.5">Lead Architect, Nexus</span>
</div>
</div>
</div>
</div>
<!-- 3. Top Right Card -->
<div class="card-wrapper float-3 wrapper-tr">
<div class="glass-card card-tr">
<span class="absolute top-2 right-6 text-7xl font-serif leading-none quote-icon">"</span>
<div class="flex items-center gap-1.5 mb-4">
<svg class="w-3.5 h-3.5 star" fill="currentColor" viewBox="0 0 24 24">
<path
d="M12 17.27L18.18 21l-1.64-7.03L22 9.24l-7.19-.61L12 2 9.19 8.63 2 9.24l5.46 4.73L5.82 21z" />
</svg>
<svg class="w-3.5 h-3.5 star" fill="currentColor" viewBox="0 0 24 24">
<path
d="M12 17.27L18.18 21l-1.64-7.03L22 9.24l-7.19-.61L12 2 9.19 8.63 2 9.24l5.46 4.73L5.82 21z" />
</svg>
<svg class="w-3.5 h-3.5 star" fill="currentColor" viewBox="0 0 24 24">
<path
d="M12 17.27L18.18 21l-1.64-7.03L22 9.24l-7.19-.61L12 2 9.19 8.63 2 9.24l5.46 4.73L5.82 21z" />
</svg>
<svg class="w-3.5 h-3.5 star" fill="currentColor" viewBox="0 0 24 24">
<path
d="M12 17.27L18.18 21l-1.64-7.03L22 9.24l-7.19-.61L12 2 9.19 8.63 2 9.24l5.46 4.73L5.82 21z" />
</svg>
<svg class="w-3.5 h-3.5 star" fill="currentColor" viewBox="0 0 24 24">
<path
d="M12 17.27L18.18 21l-1.64-7.03L22 9.24l-7.19-.61L12 2 9.19 8.63 2 9.24l5.46 4.73L5.82 21z" />
</svg>
</div>
<blockquote class="text-base font-light leading-relaxed text-gray-300 mb-6 relative z-10">
I've never seen data presented this cleanly. The integration of analytics with such a pristine UI is
simply unmatched.
</blockquote>
<div class="flex items-center gap-3 relative z-10 pt-4 border-t border-white/5">
<div class="relative w-10 h-10 shrink-0 flex items-center justify-center">
<div class="avatar-glow"></div>
<img src="https://images.unsplash.com/photo-1494790108377-be9c29b29330?ixlib=rb-4.0.3&auto=format&fit=crop&w=150&q=80" alt="Avatar" class="relative z-10 w-full h-full object-cover rounded-full border border-white/20">
</div>
<div class="flex flex-col">
<span class="text-sm font-medium text-white">Aisha Chen</span>
<span class="text-[10px] text-gray-400 font-display tracking-wider uppercase mt-0.5">Head of Data, Synthetix</span>
</div>
</div>
</div>
</div>
<!-- 4. Bottom Left Card -->
<div class="card-wrapper float-4 wrapper-bl">
<div class="glass-card card-bl">
<span class="absolute top-2 right-6 text-7xl font-serif leading-none quote-icon">"</span>
<div class="flex items-center gap-1.5 mb-4">
<svg class="w-3.5 h-3.5 star" fill="currentColor" viewBox="0 0 24 24">
<path
d="M12 17.27L18.18 21l-1.64-7.03L22 9.24l-7.19-.61L12 2 9.19 8.63 2 9.24l5.46 4.73L5.82 21z" />
</svg>
<svg class="w-3.5 h-3.5 star" fill="currentColor" viewBox="0 0 24 24">
<path
d="M12 17.27L18.18 21l-1.64-7.03L22 9.24l-7.19-.61L12 2 9.19 8.63 2 9.24l5.46 4.73L5.82 21z" />
</svg>
<svg class="w-3.5 h-3.5 star" fill="currentColor" viewBox="0 0 24 24">
<path
d="M12 17.27L18.18 21l-1.64-7.03L22 9.24l-7.19-.61L12 2 9.19 8.63 2 9.24l5.46 4.73L5.82 21z" />
</svg>
<svg class="w-3.5 h-3.5 star" fill="currentColor" viewBox="0 0 24 24">
<path
d="M12 17.27L18.18 21l-1.64-7.03L22 9.24l-7.19-.61L12 2 9.19 8.63 2 9.24l5.46 4.73L5.82 21z" />
</svg>
<svg class="w-3.5 h-3.5 star" fill="currentColor" viewBox="0 0 24 24">
<path
d="M12 17.27L18.18 21l-1.64-7.03L22 9.24l-7.19-.61L12 2 9.19 8.63 2 9.24l5.46 4.73L5.82 21z" />
</svg>
</div>
<blockquote class="text-base font-light leading-relaxed text-gray-300 mb-6 relative z-10">
A complete paradigm shift in interface design. Every interaction is deliberate, subtle, and
exceptionally smooth.
</blockquote>
<div class="flex items-center gap-3 relative z-10 pt-4 border-t border-white/5">
<div class="relative w-10 h-10 shrink-0 flex items-center justify-center">
<div class="avatar-glow"></div>
<img src="https://images.unsplash.com/photo-1507003211169-0a1dd7228f2d?ixlib=rb-4.0.3&auto=format&fit=crop&w=150&q=80" alt="Avatar" class="relative z-10 w-full h-full object-cover rounded-full border border-white/20">
</div>
<div class="flex flex-col">
<span class="text-sm font-medium text-white">David Park</span>
<span class="text-[10px] text-gray-400 font-display tracking-wider uppercase mt-0.5">Product Designer, Vora</span>
</div>
</div>
</div>
</div>
<!-- 5. Bottom Right Card -->
<div class="card-wrapper float-5 wrapper-br">
<div class="glass-card card-br">
<span class="absolute top-2 right-6 text-7xl font-serif leading-none quote-icon">"</span>
<div class="flex items-center gap-1.5 mb-4">
<svg class="w-3.5 h-3.5 star" fill="currentColor" viewBox="0 0 24 24">
<path
d="M12 17.27L18.18 21l-1.64-7.03L22 9.24l-7.19-.61L12 2 9.19 8.63 2 9.24l5.46 4.73L5.82 21z" />
</svg>
<svg class="w-3.5 h-3.5 star" fill="currentColor" viewBox="0 0 24 24">
<path
d="M12 17.27L18.18 21l-1.64-7.03L22 9.24l-7.19-.61L12 2 9.19 8.63 2 9.24l5.46 4.73L5.82 21z" />
</svg>
<svg class="w-3.5 h-3.5 star" fill="currentColor" viewBox="0 0 24 24">
<path
d="M12 17.27L18.18 21l-1.64-7.03L22 9.24l-7.19-.61L12 2 9.19 8.63 2 9.24l5.46 4.73L5.82 21z" />
</svg>
<svg class="w-3.5 h-3.5 star" fill="currentColor" viewBox="0 0 24 24">
<path
d="M12 17.27L18.18 21l-1.64-7.03L22 9.24l-7.19-.61L12 2 9.19 8.63 2 9.24l5.46 4.73L5.82 21z" />
</svg>
<svg class="w-3.5 h-3.5 star" fill="currentColor" viewBox="0 0 24 24">
<path
d="M12 17.27L18.18 21l-1.64-7.03L22 9.24l-7.19-.61L12 2 9.19 8.63 2 9.24l5.46 4.73L5.82 21z" />
</svg>
</div>
<blockquote class="text-base font-light leading-relaxed text-gray-300 mb-6 relative z-10">
Unprecedented clarity. The interface melts away, leaving only pure intent and instant results
without the noise.
</blockquote>
<div class="flex items-center gap-3 relative z-10 pt-4 border-t border-white/5">
<div class="relative w-10 h-10 shrink-0 flex items-center justify-center">
<div class="avatar-glow"></div>
<img src="https://images.unsplash.com/photo-1524504388940-b1c1722653e1?ixlib=rb-4.0.3&auto=format&fit=crop&w=150&q=80" alt="Avatar" class="relative z-10 w-full h-full object-cover rounded-full border border-white/20">
</div>
<div class="flex flex-col">
<span class="text-sm font-medium text-white">Sarah Jenkins</span>
<span class="text-[10px] text-gray-400 font-display tracking-wider uppercase mt-0.5">VP Engineering, Opex</span>
</div>
</div>
</div>
</div>
</main>
</body>
</html>