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

Interactive preview
Open preview
9:41 100%
devsnips.dev/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

AI-ready

Available to your agent.

This section is reachable through the DevSnips CLI, MCP server and Skills integrations — one registry, one resource path.

Resource path

devsnips://sections/saas/screenshot-showcase/sharp-glassmorphism

Continue browsing

View all