Section
Product Screenshot Showcase — Sharp Glassmorphism
Frosted-glass product screenshot showcase over an animated gradient mesh — a tabbed gallery with a large framed screenshot, thumbnail tabs, and caption metadata. Active tab swaps the preview live via a scoped script. Cyan glow accents and luminous edges.
- Section
- Tailwind
- HTML
- MIT
Preview
Live section
9:41 100%
devsnips.dev/library/tailwind/sections/saas/screenshot-showcase/sharp-glassmorphism/ fluid · no fixed width 100%
Install
Add to your project
npx devsnips add Tailwind/Sections/SaaS/screenshot-showcase/sharp-glassmorphism Tailwind/Sections/SaaS/screenshot-showcase/sharp-glassmorphism <!--
Snippet Name: Product Screenshot Showcase — Sharp Glassmorphism
Description: Frosted-glass tabbed screenshot gallery that swaps the large preview live.
Author: DevSnips Contributors
Usage Example: Drop into a product/gallery section. Click a thumbnail to swap the preview.
-->
<section class="relative w-full px-6 py-16 sm:py-24" data-showcase="sg">
<div class="mx-auto max-w-6xl">
<div class="mb-10 max-w-2xl">
<span class="sg-mono inline-flex items-center gap-2 rounded-full border border-white/20 bg-white/10 px-3 py-1 text-[12px] text-white/80 backdrop-blur-md"><span class="sg-dot"></span> Product tour</span>
<h2 class="font-sora mt-5 text-[36px] font-bold leading-[1.05] tracking-tight sm:text-[48px]">Take a walk through<br><span class="bg-gradient-to-r from-fuchsia-300 to-cyan-200 bg-clip-text text-transparent">the whole product.</span></h2>
</div>
<div class="grid grid-cols-1 gap-5 lg:grid-cols-[1fr_220px]">
<!-- Large preview -->
<div class="overflow-hidden rounded-2xl border border-white/20 bg-white/10 backdrop-blur-2xl">
<div class="flex items-center justify-between border-b border-white/15 px-4 py-3">
<div class="flex items-center gap-2">
<span class="h-2.5 w-2.5 rounded-full bg-white/30"></span>
<span class="h-2.5 w-2.5 rounded-full bg-white/30"></span>
<span class="h-2.5 w-2.5 rounded-full bg-white/30"></span>
</div>
<p class="sg-mono text-[11px] text-white/55" data-cap-title>Inbox · triage view</p>
<span class="sg-dot"></span>
</div>
<div class="p-4 sm:p-6">
<!-- Mock screenshot: inbox -->
<div data-shot="1" class="shot">
<div class="grid grid-cols-1 sm:grid-cols-[140px_1fr]">
<aside class="hidden rounded-xl border border-white/15 bg-white/5 p-3 sm:block">
<div class="space-y-2">
<div class="h-8 rounded-lg bg-gradient-to-r from-fuchsia-500/30 to-indigo-500/30"></div>
<div class="h-6 rounded-lg bg-white/10"></div>
<div class="h-6 rounded-lg bg-white/10"></div>
<div class="h-6 rounded-lg bg-white/10"></div>
</div>
</aside>
<div class="space-y-2 sm:pl-4">
<div class="flex items-center gap-3 rounded-xl border border-white/15 bg-white/5 p-3">
<span class="h-6 w-6 rounded-md bg-[#6ee7ff]/40"></span>
<div class="flex-1 space-y-1.5">
<div class="h-2.5 w-2/3 rounded bg-white/20"></div>
<div class="h-2 w-1/2 rounded bg-white/10"></div>
</div>
<span class="h-2 w-10 rounded bg-[#e879f9]/40"></span>
</div>
<div class="flex items-center gap-3 rounded-xl border border-white/15 bg-white/5 p-3">
<span class="h-6 w-6 rounded-md bg-[#e879f9]/40"></span>
<div class="flex-1 space-y-1.5">
<div class="h-2.5 w-3/4 rounded bg-white/20"></div>
<div class="h-2 w-1/3 rounded bg-white/10"></div>
</div>
</div>
<div class="flex items-center gap-3 rounded-xl border border-white/15 bg-white/5 p-3">
<span class="h-6 w-6 rounded-md bg-[#a5b4fc]/40"></span>
<div class="flex-1 space-y-1.5">
<div class="h-2.5 w-2/3 rounded bg-white/20"></div>
<div class="h-2 w-2/5 rounded bg-white/10"></div>
</div>
</div>
</div>
</div>
</div>
<!-- Mock screenshot: analytics -->
<div data-shot="2" class="shot hidden">
<div class="rounded-xl border border-white/15 bg-white/5 p-4">
<div class="flex items-end justify-between">
<div class="space-y-2"><div class="h-3 w-24 rounded bg-white/20"></div><div class="h-6 w-32 rounded bg-gradient-to-r from-fuchsia-500/40 to-cyan-300/40"></div></div>
<div class="h-8 w-20 rounded-lg bg-[#6ee7ff]/30"></div>
</div>
<div class="mt-4 flex h-32 items-end gap-2">
<div class="w-full rounded-t bg-gradient-to-t from-fuchsia-500/40 to-cyan-300/40" style="height:40%"></div>
<div class="w-full rounded-t bg-gradient-to-t from-fuchsia-500/40 to-cyan-300/40" style="height:72%"></div>
<div class="w-full rounded-t bg-gradient-to-t from-fuchsia-500/40 to-cyan-300/40" style="height:55%"></div>
<div class="w-full rounded-t bg-gradient-to-t from-fuchsia-500/40 to-cyan-300/40" style="height:90%"></div>
<div class="w-full rounded-t bg-gradient-to-t from-fuchsia-500/40 to-cyan-300/40" style="height:62%"></div>
<div class="w-full rounded-t bg-gradient-to-t from-fuchsia-500/40 to-cyan-300/40" style="height:78%"></div>
</div>
</div>
</div>
<!-- Mock screenshot: automations -->
<div data-shot="3" class="shot hidden">
<div class="space-y-3">
<div class="flex items-center gap-3 rounded-xl border border-white/15 bg-white/5 p-3">
<span class="h-8 w-8 rounded-lg bg-gradient-to-br from-fuchsia-500/50 to-indigo-500/50"></span>
<div class="flex-1"><div class="h-2.5 w-1/2 rounded bg-white/20"></div></div>
<div class="h-5 w-16 rounded-md bg-white/10"></div>
</div>
<div class="ml-6 flex items-center gap-2"><span class="h-px w-6 bg-white/20"></span><span class="sg-mono text-[11px] text-white/40">if billing</span></div>
<div class="ml-10 flex items-center gap-3 rounded-xl border border-white/15 bg-white/5 p-3">
<span class="h-8 w-8 rounded-lg bg-gradient-to-br from-cyan-400/50 to-indigo-500/50"></span>
<div class="flex-1"><div class="h-2.5 w-2/3 rounded bg-white/20"></div></div>
<div class="h-5 w-20 rounded-md bg-[#6ee7ff]/30"></div>
</div>
</div>
</div>
</div>
<!-- caption rail -->
<div class="flex flex-wrap items-center gap-x-5 gap-y-2 border-t border-white/15 px-4 py-3">
<p class="sg-mono text-[11px] text-white/60" data-cap-body>AI-routed queue with live SLA indicators.</p>
<span class="sg-mono ml-auto rounded-md border border-white/15 bg-white/10 px-2 py-0.5 text-[10px] text-white/60" data-cap-tag>/inbox</span>
</div>
</div>
<!-- Thumbnail tabs -->
<div class="flex gap-3 overflow-x-auto lg:flex-col" role="tablist" aria-label="Screenshots">
<button type="button" data-tab="1" aria-pressed="true" role="tab"
class="shot-tab shrink-0 rounded-xl border border-white/20 bg-white/10 p-3 text-left backdrop-blur-md transition-colors hover:bg-white/20 focus:outline-none focus-visible:ring-2 focus-visible:ring-white/40 lg:w-full">
<span class="mb-2 block h-14 w-24 overflow-hidden rounded-lg border border-white/15 bg-white/5 lg:w-full">
<span class="block h-2.5 bg-[#6ee7ff]/40"></span>
<span class="block h-2 m-1.5 w-2/3 bg-white/20"></span>
<span class="block h-2 m-1.5 w-1/2 bg-white/10"></span>
</span>
<p class="font-sora text-[13px] font-semibold text-white">Inbox</p>
<p class="sg-mono text-[11px] text-white/50">Triage view</p>
</button>
<button type="button" data-tab="2" aria-pressed="false" role="tab"
class="shot-tab shrink-0 rounded-xl border border-white/20 bg-white/10 p-3 text-left backdrop-blur-md transition-colors hover:bg-white/20 focus:outline-none focus-visible:ring-2 focus-visible:ring-white/40 lg:w-full">
<span class="mb-2 block h-14 w-24 overflow-hidden rounded-lg border border-white/15 bg-white/5 lg:w-full">
<span class="flex h-full items-end gap-0.5 p-1">
<span class="w-full rounded-t bg-gradient-to-t from-fuchsia-500/40 to-cyan-300/40" style="height:50%"></span>
<span class="w-full rounded-t bg-gradient-to-t from-fuchsia-500/40 to-cyan-300/40" style="height:80%"></span>
<span class="w-full rounded-t bg-gradient-to-t from-fuchsia-500/40 to-cyan-300/40" style="height:60%"></span>
</span>
</span>
<p class="font-sora text-[13px] font-semibold text-white">Analytics</p>
<p class="sg-mono text-[11px] text-white/50">Live charts</p>
</button>
<button type="button" data-tab="3" aria-pressed="false" role="tab"
class="shot-tab shrink-0 rounded-xl border border-white/20 bg-white/10 p-3 text-left backdrop-blur-md transition-colors hover:bg-white/20 focus:outline-none focus-visible:ring-2 focus-visible:ring-white/40 lg:w-full">
<span class="mb-2 block h-14 w-24 overflow-hidden rounded-lg border border-white/15 bg-white/5 lg:w-full">
<span class="m-1.5 block h-2 w-2/3 rounded bg-white/20"></span>
<span class="block h-px w-4 bg-white/30" style="margin-left:1.5rem"></span>
<span class="m-1.5 block h-2 w-1/2 rounded bg-white/10" style="margin-left:2rem"></span>
</span>
<p class="font-sora text-[13px] font-semibold text-white">Automations</p>
<p class="sg-mono text-[11px] text-white/50">Workflow builder</p>
</button>
</div>
</div>
</div>
<script>
(function () {
const root = document.currentScript.closest('[data-showcase]');
const tabs = root.querySelectorAll('[data-tab]');
const shots = root.querySelectorAll('[data-shot]');
const capTitle = root.querySelector('[data-cap-title]');
const capBody = root.querySelector('[data-cap-body]');
const capTag = root.querySelector('[data-cap-tag]');
const caps = {
"1": { t: "Inbox · triage view", b: "AI-routed queue with live SLA indicators.", tag: "/inbox" },
"2": { t: "Analytics · realtime", b: "Cohort revenue and reply-time at a glance.", tag: "/analytics" },
"3": { t: "Automations · builder", b: "Branch on intent, sentiment, and customer tier.", tag: "/automations" }
};
function set(n) {
tabs.forEach(t => {
const active = t.dataset.tab === n;
t.setAttribute('aria-pressed', active ? 'true' : 'false');
t.classList.toggle('border-[#6ee7ff]/50', active);
t.classList.toggle('bg-white/20', active);
});
shots.forEach(s => s.classList.toggle('hidden', s.dataset.shot !== n));
const c = caps[n];
if (capTitle) capTitle.textContent = c.t;
if (capBody) capBody.textContent = c.b;
if (capTag) capTag.textContent = c.tag;
}
tabs.forEach(t => t.addEventListener('click', () => set(t.dataset.tab)));
set("1");
})();
</script>
</section> 176 lines UTF-8 · LF · Spaces: 2
Continue browsing