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

Interactive preview
Open preview
9:41 100%
devsnips.site/library/tailwind/sections/saas/screenshot-showcase/sharp-glassmorphism/
fluid · no fixed width 100%
Dependencies: Tailwind CSS (CDN) · Google Fonts: Sora, JetBrains Mono Responsive · Keyboard-ready

Install

Add to your project

terminal
npx devsnips add Tailwind/Sections/SaaS/screenshot-showcase/sharp-glassmorphism
registry path: Tailwind/Sections/SaaS/screenshot-showcase/sharp-glassmorphism

Source

Implementation

code.html
<!--
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
Prompt instruction
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