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
What it does
Capabilities
- Tabbed screenshot gallery
- Large framed preview
- Thumbnail tabs that swap preview live
- Caption metadata rail
- Cyan glow accents
- Luminous top edges
- Scoped keyboard-accessible tabs
Preview
Live section
9:41 100%
devsnips.site/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
DevSnips AI ready Claude · Cursor · Windsurf
Agent skill & Model Context Protocol
Pass this section straight into your AI workflow. DevSnips exposes each resource as a structured, addressable registry entry, so your agent installs the real files instead of approximating them.
devsnips://sections/saas/screenshot-showcase/sharp-glassmorphism I want to use this DevSnips resource in production: Page: https://devsnips.site/library/tailwind/sections/saas/screenshot-showcase/sharp-glassmorphism/ Install: npx devsnips add Tailwind/Sections/SaaS/screenshot-showcase/sharp-glassmorphism This is the 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. Use this DevSnips resource as the starting point for my project. Adapt it to my project's stack and conventions, fix any issues, and make it production-ready while preserving its intended design and behavior.
Paste into ChatGPT, Claude or your agent — it already carries the page URL and the exact install path.
Resource URI
devsnips://sections/saas/screenshot-showcase/sharp-glassmorphism