26 / 30
All 30 in 30 Tailwind CSS Grid Layouts
- 01Tailwind Full-Bleed Article Layout for Long-Form Editorial
- 02Tailwind Docs Layout with Sticky Table of Contents
- 03Tailwind Photo Gallery Grid with auto-fill and Real Images
- 04Tailwind Holy Grail Page Layout for a News Site
- 05Tailwind Data Table with Subgrid Rows and Status Pills
- 06Tailwind Overlapping Card Hero for a Case Study
- 07Tailwind Help Center Layout with Fixed Sidebars
- 08Tailwind 12 Column Grid System for Marketing Pages
- 09Tailwind Bento Grid for a Product Feature Section
- 10Tailwind Magazine Spread Layout with Overlapping Headline
- 11Tailwind Responsive Card Grid for an Integrations Directory
- 12Tailwind CMS Category Grid that Compacts Itself with has()
- 13Tailwind Masonry Layout for a Saved Ideas Board
- 14Tailwind Hexagon Team Grid with clip-path Avatars
- 15Tailwind Subgrid Cards with Perfectly Aligned Buttons
- 16Tailwind Analytics Dashboard Layout with Grid App Shell
- 17Tailwind Pricing Table with Subgrid and a Featured Plan
- 18Tailwind Kanban Board with Scroll Snap Columns
- 19Tailwind Video Thumbnail Grid with Zero Layout Shift
- 20Tailwind Container Query Card for Reusable Article Teasers
- 21Tailwind Diagonal Section Band with skewY Counter-Skew
- 22Tailwind Asymmetric Poster Hero with Layered Grid Regions
- 23Tailwind Mosaic Photo Wall with a Designed Span Sequence
- 24Tailwind Dense Grid Packing for a Mixed-Size Asset Library
- 25Tailwind Onboarding Stepper with CSS Counters
- 26Tailwind macOS Window Layout with Vibrancy Sidebar
- 27Tailwind Scroll Snap Carousel with Peeking Slides
- 28Tailwind Status Map UI with Grid Coordinate Pins
- 29Tailwind Logo Wall with 1px Gap Hairline Dividers
- 30Tailwind Periodic Table Layout with Grid Coordinates
Tailwind macOS Window Layout with Vibrancy Sidebar
A native-feeling desktop notes app: translucent source list with grouped folders and counts, a unified toolbar spanning both columns, and a document pane that owns the only scrollbar — vibrancy in two utilities.
Untitled UI Pro: 5,000+ React + Tailwind CSS v4 components · from $349 one-time
Untitled UI React · Affiliate link
The code
<section class="tgx-26 w-full min-h-svh font-tgx26-sans p-6 bg-[linear-gradient(140deg,oklch(0.75_0.08_300),oklch(0.7_0.09_220)_50%,oklch(0.78_0.07_170))]">
<div class="grid grid-cols-[224px_minmax(0,1fr)] grid-rows-[auto_minmax(0,1fr)] max-sm:grid-cols-[minmax(0,1fr)] h-[400px] w-[min(680px,100%)] mx-auto rounded-2xl overflow-hidden border border-white/40 shadow-[0_30px_70px_-30px_oklch(0.2_0.05_260/0.7)]">
<header class="col-span-2 max-sm:col-span-1 flex items-center gap-4 px-3.5 py-2.5 bg-white/85 backdrop-blur-lg border-b border-tgx26-hair">
<span aria-hidden="true" class="flex gap-[7px]"><i class="size-[11px] rounded-full bg-[oklch(0.68_0.19_25)]"></i><i class="size-[11px] rounded-full bg-[oklch(0.8_0.15_85)]"></i><i class="size-[11px] rounded-full bg-[oklch(0.75_0.17_145)]"></i></span>
<strong class="text-[0.82rem] text-tgx26-ink">Fieldnotes</strong>
<span class="text-[0.72rem] text-tgx26-dim max-sm:hidden">Edited 14:06</span>
<button type="button" class="ml-auto text-[0.75rem] font-medium text-tgx26-accent bg-tgx26-accenttint border border-tgx26-accent/30 rounded-lg px-3 min-h-9 cursor-pointer transition-colors hover:bg-tgx26-accenthover focus-visible:outline-2 focus-visible:outline-tgx26-accent focus-visible:outline-offset-2">+ New note</button>
</header>
<nav aria-label="Folders" class="max-sm:hidden overflow-y-auto bg-white/60 backdrop-blur-xl backdrop-saturate-150 border-r border-tgx26-hair px-2 py-2.5 flex flex-col gap-0.5">
<p class="text-[0.62rem] font-bold tracking-[0.08em] uppercase text-tgx26-dim px-2 pt-2 pb-1">iCloud</p>
<a href="#0" aria-current="page" class="grid grid-cols-[1.3em_minmax(0,1fr)_auto] items-center gap-x-2 text-[0.8rem] no-underline text-tgx26-ink px-2 min-h-8 rounded-lg transition-colors hover:bg-black/5 aria-[current=page]:bg-tgx26-sel aria-[current=page]:font-semibold focus-visible:outline-2 focus-visible:outline-tgx26-accent focus-visible:-outline-offset-2"><span aria-hidden="true">📝</span>All Notes<em class="not-italic text-[0.68rem] tabular-nums text-tgx26-dim">128</em></a>
<a href="#0" class="grid grid-cols-[1.3em_minmax(0,1fr)_auto] items-center gap-x-2 text-[0.8rem] no-underline text-tgx26-ink px-2 min-h-8 rounded-lg transition-colors hover:bg-black/5 focus-visible:outline-2 focus-visible:outline-tgx26-accent focus-visible:-outline-offset-2"><span aria-hidden="true">📌</span>Pinned<em class="not-italic text-[0.68rem] tabular-nums text-tgx26-dim">6</em></a>
<a href="#0" class="grid grid-cols-[1.3em_minmax(0,1fr)_auto] items-center gap-x-2 text-[0.8rem] no-underline text-tgx26-ink px-2 min-h-8 rounded-lg transition-colors hover:bg-black/5 focus-visible:outline-2 focus-visible:outline-tgx26-accent focus-visible:-outline-offset-2"><span aria-hidden="true">🗂️</span>Field trips<em class="not-italic text-[0.68rem] tabular-nums text-tgx26-dim">34</em></a>
<a href="#0" class="grid grid-cols-[1.3em_minmax(0,1fr)_auto] items-center gap-x-2 text-[0.8rem] no-underline text-tgx26-ink px-2 min-h-8 rounded-lg transition-colors hover:bg-black/5 focus-visible:outline-2 focus-visible:outline-tgx26-accent focus-visible:-outline-offset-2"><span aria-hidden="true">🗑️</span>Recently deleted<em class="not-italic text-[0.68rem] tabular-nums text-tgx26-dim">3</em></a>
<p class="text-[0.62rem] font-bold tracking-[0.08em] uppercase text-tgx26-dim px-2 pt-3 pb-1">Tags</p>
<a href="#0" class="grid grid-cols-[1.3em_minmax(0,1fr)_auto] items-center gap-x-2 text-[0.8rem] no-underline text-tgx26-ink px-2 min-h-8 rounded-lg transition-colors hover:bg-black/5 focus-visible:outline-2 focus-visible:outline-tgx26-accent focus-visible:-outline-offset-2"><span aria-hidden="true" class="text-tgx26-accent">#</span>coast-road<em class="not-italic text-[0.68rem] tabular-nums text-tgx26-dim">12</em></a>
<a href="#0" class="grid grid-cols-[1.3em_minmax(0,1fr)_auto] items-center gap-x-2 text-[0.8rem] no-underline text-tgx26-ink px-2 min-h-8 rounded-lg transition-colors hover:bg-black/5 focus-visible:outline-2 focus-visible:outline-tgx26-accent focus-visible:-outline-offset-2"><span aria-hidden="true" class="text-tgx26-accent">#</span>ferries<em class="not-italic text-[0.68rem] tabular-nums text-tgx26-dim">9</em></a>
</nav>
<main class="overflow-y-auto bg-white p-5 flex flex-col gap-3">
<p class="text-[0.7rem] text-tgx26-dim">Thursday 18 September · 14:06</p>
<h2 class="text-[1.05rem] font-semibold text-tgx26-ink">Vestmanna, day three</h2>
<p class="text-[0.84rem] leading-[1.7] text-tgx26-body">Ferry ran at 17:20 after all. The sound was flat for about an hour, which is apparently all anyone needs. Shot the ridge from the top of the pass while the light held — four minutes, maybe five.</p>
<figure class="flex flex-col gap-1.5">
<div class="aspect-[16/9] overflow-hidden rounded-lg bg-tgx26-cell"><img src="https://images.unsplash.com/photo-1470071459604-3b5ec3a7fe05?w=800&h=450&q=80&auto=format&fit=crop" alt="Coastal ridge with low cloud breaking above dark water" loading="lazy" class="w-full h-full object-cover"></div>
<figcaption class="text-[0.7rem] text-tgx26-dim">IMG_4471.heic · attached from Photos</figcaption>
</figure>
<p class="text-[0.84rem] leading-[1.7] text-tgx26-body">Note for the edit: the sidebar of this app is the layout worth stealing — translucent fill, blur plus saturate over the window's own backdrop, and a three-track row grid so icon, label and count line up on every row.</p>
<ul class="flex flex-col gap-1.5 text-[0.84rem] leading-[1.6] text-tgx26-body list-disc list-inside marker:text-tgx26-accent">
<li>Check the 06:40 bus on Sunday</li>
<li>Ask about the harbour light schedule</li>
</ul>
</main>
</div>
</section><section class="tgx-26 w-full min-h-svh font-tgx26-sans p-6 bg-[linear-gradient(140deg,oklch(0.75_0.08_300),oklch(0.7_0.09_220)_50%,oklch(0.78_0.07_170))]">
<div class="grid grid-cols-[224px_minmax(0,1fr)] grid-rows-[auto_minmax(0,1fr)] max-sm:grid-cols-[minmax(0,1fr)] h-[400px] w-[min(680px,100%)] mx-auto rounded-2xl overflow-hidden border border-white/40 shadow-[0_30px_70px_-30px_oklch(0.2_0.05_260/0.7)]">
<header class="col-span-2 max-sm:col-span-1 flex items-center gap-4 px-3.5 py-2.5 bg-white/85 backdrop-blur-lg border-b border-tgx26-hair">
<span aria-hidden="true" class="flex gap-[7px]"><i class="size-[11px] rounded-full bg-[oklch(0.68_0.19_25)]"></i><i class="size-[11px] rounded-full bg-[oklch(0.8_0.15_85)]"></i><i class="size-[11px] rounded-full bg-[oklch(0.75_0.17_145)]"></i></span>
<strong class="text-[0.82rem] text-tgx26-ink">Fieldnotes</strong>
<span class="text-[0.72rem] text-tgx26-dim max-sm:hidden">Edited 14:06</span>
<button type="button" class="ml-auto text-[0.75rem] font-medium text-tgx26-accent bg-tgx26-accenttint border border-tgx26-accent/30 rounded-lg px-3 min-h-9 cursor-pointer transition-colors hover:bg-tgx26-accenthover focus-visible:outline-2 focus-visible:outline-tgx26-accent focus-visible:outline-offset-2">+ New note</button>
</header>
<nav aria-label="Folders" class="max-sm:hidden overflow-y-auto bg-white/60 backdrop-blur-xl backdrop-saturate-150 border-r border-tgx26-hair px-2 py-2.5 flex flex-col gap-0.5">
<p class="text-[0.62rem] font-bold tracking-[0.08em] uppercase text-tgx26-dim px-2 pt-2 pb-1">iCloud</p>
<a href="#0" aria-current="page" class="grid grid-cols-[1.3em_minmax(0,1fr)_auto] items-center gap-x-2 text-[0.8rem] no-underline text-tgx26-ink px-2 min-h-8 rounded-lg transition-colors hover:bg-black/5 aria-[current=page]:bg-tgx26-sel aria-[current=page]:font-semibold focus-visible:outline-2 focus-visible:outline-tgx26-accent focus-visible:-outline-offset-2"><span aria-hidden="true">📝</span>All Notes<em class="not-italic text-[0.68rem] tabular-nums text-tgx26-dim">128</em></a>
<a href="#0" class="grid grid-cols-[1.3em_minmax(0,1fr)_auto] items-center gap-x-2 text-[0.8rem] no-underline text-tgx26-ink px-2 min-h-8 rounded-lg transition-colors hover:bg-black/5 focus-visible:outline-2 focus-visible:outline-tgx26-accent focus-visible:-outline-offset-2"><span aria-hidden="true">📌</span>Pinned<em class="not-italic text-[0.68rem] tabular-nums text-tgx26-dim">6</em></a>
<a href="#0" class="grid grid-cols-[1.3em_minmax(0,1fr)_auto] items-center gap-x-2 text-[0.8rem] no-underline text-tgx26-ink px-2 min-h-8 rounded-lg transition-colors hover:bg-black/5 focus-visible:outline-2 focus-visible:outline-tgx26-accent focus-visible:-outline-offset-2"><span aria-hidden="true">🗂️</span>Field trips<em class="not-italic text-[0.68rem] tabular-nums text-tgx26-dim">34</em></a>
<a href="#0" class="grid grid-cols-[1.3em_minmax(0,1fr)_auto] items-center gap-x-2 text-[0.8rem] no-underline text-tgx26-ink px-2 min-h-8 rounded-lg transition-colors hover:bg-black/5 focus-visible:outline-2 focus-visible:outline-tgx26-accent focus-visible:-outline-offset-2"><span aria-hidden="true">🗑️</span>Recently deleted<em class="not-italic text-[0.68rem] tabular-nums text-tgx26-dim">3</em></a>
<p class="text-[0.62rem] font-bold tracking-[0.08em] uppercase text-tgx26-dim px-2 pt-3 pb-1">Tags</p>
<a href="#0" class="grid grid-cols-[1.3em_minmax(0,1fr)_auto] items-center gap-x-2 text-[0.8rem] no-underline text-tgx26-ink px-2 min-h-8 rounded-lg transition-colors hover:bg-black/5 focus-visible:outline-2 focus-visible:outline-tgx26-accent focus-visible:-outline-offset-2"><span aria-hidden="true" class="text-tgx26-accent">#</span>coast-road<em class="not-italic text-[0.68rem] tabular-nums text-tgx26-dim">12</em></a>
<a href="#0" class="grid grid-cols-[1.3em_minmax(0,1fr)_auto] items-center gap-x-2 text-[0.8rem] no-underline text-tgx26-ink px-2 min-h-8 rounded-lg transition-colors hover:bg-black/5 focus-visible:outline-2 focus-visible:outline-tgx26-accent focus-visible:-outline-offset-2"><span aria-hidden="true" class="text-tgx26-accent">#</span>ferries<em class="not-italic text-[0.68rem] tabular-nums text-tgx26-dim">9</em></a>
</nav>
<main class="overflow-y-auto bg-white p-5 flex flex-col gap-3">
<p class="text-[0.7rem] text-tgx26-dim">Thursday 18 September · 14:06</p>
<h2 class="text-[1.05rem] font-semibold text-tgx26-ink">Vestmanna, day three</h2>
<p class="text-[0.84rem] leading-[1.7] text-tgx26-body">Ferry ran at 17:20 after all. The sound was flat for about an hour, which is apparently all anyone needs. Shot the ridge from the top of the pass while the light held — four minutes, maybe five.</p>
<figure class="flex flex-col gap-1.5">
<div class="aspect-[16/9] overflow-hidden rounded-lg bg-tgx26-cell"><img src="https://images.unsplash.com/photo-1470071459604-3b5ec3a7fe05?w=800&h=450&q=80&auto=format&fit=crop" alt="Coastal ridge with low cloud breaking above dark water" loading="lazy" class="w-full h-full object-cover"></div>
<figcaption class="text-[0.7rem] text-tgx26-dim">IMG_4471.heic · attached from Photos</figcaption>
</figure>
<p class="text-[0.84rem] leading-[1.7] text-tgx26-body">Note for the edit: the sidebar of this app is the layout worth stealing — translucent fill, blur plus saturate over the window's own backdrop, and a three-track row grid so icon, label and count line up on every row.</p>
<ul class="flex flex-col gap-1.5 text-[0.84rem] leading-[1.6] text-tgx26-body list-disc list-inside marker:text-tgx26-accent">
<li>Check the 06:40 bus on Sunday</li>
<li>Ask about the harbour light schedule</li>
</ul>
</main>
</div>
</section>@import "tailwindcss";
@theme {
--color-tgx26-ink: #2a2b33;
--color-tgx26-ink: oklch(0.29 0.01 270);
--color-tgx26-body: #4c505c;
--color-tgx26-body: oklch(0.43 0.015 265);
--color-tgx26-dim: #6c707c;
--color-tgx26-dim: oklch(0.55 0.015 265);
--color-tgx26-hair: #d4d6dd;
--color-tgx26-hair: oklch(0.86 0.01 265);
--color-tgx26-cell: #e8eaef;
--color-tgx26-cell: oklch(0.92 0.008 265);
--color-tgx26-accent: #4257c4;
--color-tgx26-accent: oklch(0.47 0.18 265);
--color-tgx26-accenttint: #eceefb;
--color-tgx26-accenttint: oklch(0.95 0.02 265);
--color-tgx26-accenthover: #dfe3f8;
--color-tgx26-accenthover: oklch(0.92 0.03 265);
--color-tgx26-sel: #dde2f9;
--color-tgx26-sel: oklch(0.91 0.04 265);
--font-tgx26-sans: 'Inter Tight', system-ui, -apple-system, sans-serif;
}
.tgx-26 {
width: 100%;
min-height: 100svh;
}
/* Safari < 16.4 prefixes for the toolbar and the source list. */
.tgx-26 header {
-webkit-backdrop-filter: blur(16px);
}
.tgx-26 nav {
-webkit-backdrop-filter: blur(24px) saturate(150%);
}@import "tailwindcss";
@theme {
--color-tgx26-ink: #2a2b33;
--color-tgx26-ink: oklch(0.29 0.01 270);
--color-tgx26-body: #4c505c;
--color-tgx26-body: oklch(0.43 0.015 265);
--color-tgx26-dim: #6c707c;
--color-tgx26-dim: oklch(0.55 0.015 265);
--color-tgx26-hair: #d4d6dd;
--color-tgx26-hair: oklch(0.86 0.01 265);
--color-tgx26-cell: #e8eaef;
--color-tgx26-cell: oklch(0.92 0.008 265);
--color-tgx26-accent: #4257c4;
--color-tgx26-accent: oklch(0.47 0.18 265);
--color-tgx26-accenttint: #eceefb;
--color-tgx26-accenttint: oklch(0.95 0.02 265);
--color-tgx26-accenthover: #dfe3f8;
--color-tgx26-accenthover: oklch(0.92 0.03 265);
--color-tgx26-sel: #dde2f9;
--color-tgx26-sel: oklch(0.91 0.04 265);
--font-tgx26-sans: 'Inter Tight', system-ui, -apple-system, sans-serif;
}
.tgx-26 {
width: 100%;
min-height: 100svh;
}
/* Safari < 16.4 prefixes for the toolbar and the source list. */
.tgx-26 header {
-webkit-backdrop-filter: blur(16px);
}
.tgx-26 nav {
-webkit-backdrop-filter: blur(24px) saturate(150%);
}Setup — do this once per project
Skip this if your project already runs Tailwind v4.
<script src="https://cdn.jsdelivr.net/npm/@tailwindcss/browser@4"></script>
<script src="https://cdn.jsdelivr.net/npm/@tailwindcss/browser@4"></script>Compiles in the browser — perfect for a CodePen or a quick test, not for production.
npm install tailwindcss @tailwindcss/vite
npm install tailwindcss @tailwindcss/vite// vite.config.js ("type": "module" in package.json)
import { defineConfig } from 'vite'
import tailwindcss from '@tailwindcss/vite'
export default defineConfig({
plugins: [tailwindcss()],
})// vite.config.js ("type": "module" in package.json)
import { defineConfig } from 'vite'
import tailwindcss from '@tailwindcss/vite'
export default defineConfig({
plugins: [tailwindcss()],
})Any v4 setup works — Vite, PostCSS or the CLI. Nothing in this demo is bundler-specific.
@import "tailwindcss";
@theme {
--color-tgx26-ink: #2a2b33;
--color-tgx26-ink: oklch(0.29 0.01 270);
--color-tgx26-body: #4c505c;
--color-tgx26-body: oklch(0.43 0.015 265);
--color-tgx26-dim: #6c707c;
--color-tgx26-dim: oklch(0.55 0.015 265);
--color-tgx26-hair: #d4d6dd;
--color-tgx26-hair: oklch(0.86 0.01 265);
--color-tgx26-cell: #e8eaef;
--color-tgx26-cell: oklch(0.92 0.008 265);
--color-tgx26-accent: #4257c4;
--color-tgx26-accent: oklch(0.47 0.18 265);
--color-tgx26-accenttint: #eceefb;
--color-tgx26-accenttint: oklch(0.95 0.02 265);
--color-tgx26-accenthover: #dfe3f8;
--color-tgx26-accenthover: oklch(0.92 0.03 265);
--color-tgx26-sel: #dde2f9;
--color-tgx26-sel: oklch(0.91 0.04 265);
--font-tgx26-sans: 'Inter Tight', system-ui, -apple-system, sans-serif;
}
.tgx-26 {
width: 100%;
min-height: 100svh;
}
/* Safari < 16.4 prefixes for the toolbar and the source list. */
.tgx-26 header {
-webkit-backdrop-filter: blur(16px);
}
.tgx-26 nav {
-webkit-backdrop-filter: blur(24px) saturate(150%);
}@import "tailwindcss";
@theme {
--color-tgx26-ink: #2a2b33;
--color-tgx26-ink: oklch(0.29 0.01 270);
--color-tgx26-body: #4c505c;
--color-tgx26-body: oklch(0.43 0.015 265);
--color-tgx26-dim: #6c707c;
--color-tgx26-dim: oklch(0.55 0.015 265);
--color-tgx26-hair: #d4d6dd;
--color-tgx26-hair: oklch(0.86 0.01 265);
--color-tgx26-cell: #e8eaef;
--color-tgx26-cell: oklch(0.92 0.008 265);
--color-tgx26-accent: #4257c4;
--color-tgx26-accent: oklch(0.47 0.18 265);
--color-tgx26-accenttint: #eceefb;
--color-tgx26-accenttint: oklch(0.95 0.02 265);
--color-tgx26-accenthover: #dfe3f8;
--color-tgx26-accenthover: oklch(0.92 0.03 265);
--color-tgx26-sel: #dde2f9;
--color-tgx26-sel: oklch(0.91 0.04 265);
--font-tgx26-sans: 'Inter Tight', system-ui, -apple-system, sans-serif;
}
.tgx-26 {
width: 100%;
min-height: 100svh;
}
/* Safari < 16.4 prefixes for the toolbar and the source list. */
.tgx-26 header {
-webkit-backdrop-filter: blur(16px);
}
.tgx-26 nav {
-webkit-backdrop-filter: blur(24px) saturate(150%);
}<link rel="preconnect" href="https://fonts.googleapis.com"> <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> <link rel="preconnect" href="https://images.unsplash.com"> <link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Inter+Tight:wght@400;500;600;700&display=swap">
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link rel="preconnect" href="https://images.unsplash.com">
<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Inter+Tight:wght@400;500;600;700&display=swap">What changed in the port
Which parts became utilities, which stayed CSS, and why.
- An attached photo inside the document pane is what makes the scroll discipline visible: the image scrolls, the toolbar and the source list do not.
backdrop-blur-xlandbackdrop-saturate-150are separate composable utilities, which is strictly better than the single CSS declaration — you can tune the saturation without rewriting the blur.- Product upgrade: three lines about grid became a real note with a timestamp, an image attachment with a filename caption and a checklist; folders gained a deleted bin and the tags read like a real notebook.
Here's a working CSS demo from CodeFronts. Use it as-is or adapt to your framework. All classes are scoped under a unique prefix so the code won't collide with your existing styles. MIT licensed.
Demo: Tailwind macOS Window Layout with Vibrancy Sidebar
Source: https://codefronts.com/layouts/tailwind-css-grid-layouts/tailwind-macos-window-layout-vibrancy-sidebar/
A native-feeling desktop notes app: translucent source list with grouped folders and counts, a unified toolbar spanning both columns, and a document pane that owns the only scrollbar — vibrancy in two utilities.
## HTML
```html
<section class="tgx-26 w-full min-h-svh font-tgx26-sans p-6 bg-[linear-gradient(140deg,oklch(0.75_0.08_300),oklch(0.7_0.09_220)_50%,oklch(0.78_0.07_170))]">
<div class="grid grid-cols-[224px_minmax(0,1fr)] grid-rows-[auto_minmax(0,1fr)] max-sm:grid-cols-[minmax(0,1fr)] h-[400px] w-[min(680px,100%)] mx-auto rounded-2xl overflow-hidden border border-white/40 shadow-[0_30px_70px_-30px_oklch(0.2_0.05_260/0.7)]">
<header class="col-span-2 max-sm:col-span-1 flex items-center gap-4 px-3.5 py-2.5 bg-white/85 backdrop-blur-lg border-b border-tgx26-hair">
<span aria-hidden="true" class="flex gap-[7px]"><i class="size-[11px] rounded-full bg-[oklch(0.68_0.19_25)]"></i><i class="size-[11px] rounded-full bg-[oklch(0.8_0.15_85)]"></i><i class="size-[11px] rounded-full bg-[oklch(0.75_0.17_145)]"></i></span>
<strong class="text-[0.82rem] text-tgx26-ink">Fieldnotes</strong>
<span class="text-[0.72rem] text-tgx26-dim max-sm:hidden">Edited 14:06</span>
<button type="button" class="ml-auto text-[0.75rem] font-medium text-tgx26-accent bg-tgx26-accenttint border border-tgx26-accent/30 rounded-lg px-3 min-h-9 cursor-pointer transition-colors hover:bg-tgx26-accenthover focus-visible:outline-2 focus-visible:outline-tgx26-accent focus-visible:outline-offset-2">+ New note</button>
</header>
<nav aria-label="Folders" class="max-sm:hidden overflow-y-auto bg-white/60 backdrop-blur-xl backdrop-saturate-150 border-r border-tgx26-hair px-2 py-2.5 flex flex-col gap-0.5">
<p class="text-[0.62rem] font-bold tracking-[0.08em] uppercase text-tgx26-dim px-2 pt-2 pb-1">iCloud</p>
<a href="#0" aria-current="page" class="grid grid-cols-[1.3em_minmax(0,1fr)_auto] items-center gap-x-2 text-[0.8rem] no-underline text-tgx26-ink px-2 min-h-8 rounded-lg transition-colors hover:bg-black/5 aria-[current=page]:bg-tgx26-sel aria-[current=page]:font-semibold focus-visible:outline-2 focus-visible:outline-tgx26-accent focus-visible:-outline-offset-2"><span aria-hidden="true">📝</span>All Notes<em class="not-italic text-[0.68rem] tabular-nums text-tgx26-dim">128</em></a>
<a href="#0" class="grid grid-cols-[1.3em_minmax(0,1fr)_auto] items-center gap-x-2 text-[0.8rem] no-underline text-tgx26-ink px-2 min-h-8 rounded-lg transition-colors hover:bg-black/5 focus-visible:outline-2 focus-visible:outline-tgx26-accent focus-visible:-outline-offset-2"><span aria-hidden="true">📌</span>Pinned<em class="not-italic text-[0.68rem] tabular-nums text-tgx26-dim">6</em></a>
<a href="#0" class="grid grid-cols-[1.3em_minmax(0,1fr)_auto] items-center gap-x-2 text-[0.8rem] no-underline text-tgx26-ink px-2 min-h-8 rounded-lg transition-colors hover:bg-black/5 focus-visible:outline-2 focus-visible:outline-tgx26-accent focus-visible:-outline-offset-2"><span aria-hidden="true">🗂️</span>Field trips<em class="not-italic text-[0.68rem] tabular-nums text-tgx26-dim">34</em></a>
<a href="#0" class="grid grid-cols-[1.3em_minmax(0,1fr)_auto] items-center gap-x-2 text-[0.8rem] no-underline text-tgx26-ink px-2 min-h-8 rounded-lg transition-colors hover:bg-black/5 focus-visible:outline-2 focus-visible:outline-tgx26-accent focus-visible:-outline-offset-2"><span aria-hidden="true">🗑️</span>Recently deleted<em class="not-italic text-[0.68rem] tabular-nums text-tgx26-dim">3</em></a>
<p class="text-[0.62rem] font-bold tracking-[0.08em] uppercase text-tgx26-dim px-2 pt-3 pb-1">Tags</p>
<a href="#0" class="grid grid-cols-[1.3em_minmax(0,1fr)_auto] items-center gap-x-2 text-[0.8rem] no-underline text-tgx26-ink px-2 min-h-8 rounded-lg transition-colors hover:bg-black/5 focus-visible:outline-2 focus-visible:outline-tgx26-accent focus-visible:-outline-offset-2"><span aria-hidden="true" class="text-tgx26-accent">#</span>coast-road<em class="not-italic text-[0.68rem] tabular-nums text-tgx26-dim">12</em></a>
<a href="#0" class="grid grid-cols-[1.3em_minmax(0,1fr)_auto] items-center gap-x-2 text-[0.8rem] no-underline text-tgx26-ink px-2 min-h-8 rounded-lg transition-colors hover:bg-black/5 focus-visible:outline-2 focus-visible:outline-tgx26-accent focus-visible:-outline-offset-2"><span aria-hidden="true" class="text-tgx26-accent">#</span>ferries<em class="not-italic text-[0.68rem] tabular-nums text-tgx26-dim">9</em></a>
</nav>
<main class="overflow-y-auto bg-white p-5 flex flex-col gap-3">
<p class="text-[0.7rem] text-tgx26-dim">Thursday 18 September · 14:06</p>
<h2 class="text-[1.05rem] font-semibold text-tgx26-ink">Vestmanna, day three</h2>
<p class="text-[0.84rem] leading-[1.7] text-tgx26-body">Ferry ran at 17:20 after all. The sound was flat for about an hour, which is apparently all anyone needs. Shot the ridge from the top of the pass while the light held — four minutes, maybe five.</p>
<figure class="flex flex-col gap-1.5">
<div class="aspect-[16/9] overflow-hidden rounded-lg bg-tgx26-cell"><img src="https://images.unsplash.com/photo-1470071459604-3b5ec3a7fe05?w=800&h=450&q=80&auto=format&fit=crop" alt="Coastal ridge with low cloud breaking above dark water" loading="lazy" class="w-full h-full object-cover"></div>
<figcaption class="text-[0.7rem] text-tgx26-dim">IMG_4471.heic · attached from Photos</figcaption>
</figure>
<p class="text-[0.84rem] leading-[1.7] text-tgx26-body">Note for the edit: the sidebar of this app is the layout worth stealing — translucent fill, blur plus saturate over the window's own backdrop, and a three-track row grid so icon, label and count line up on every row.</p>
<ul class="flex flex-col gap-1.5 text-[0.84rem] leading-[1.6] text-tgx26-body list-disc list-inside marker:text-tgx26-accent">
<li>Check the 06:40 bus on Sunday</li>
<li>Ask about the harbour light schedule</li>
</ul>
</main>
</div>
</section>
```
## CSS
```css
@import "tailwindcss";
@theme {
--color-tgx26-ink: #2a2b33;
--color-tgx26-ink: oklch(0.29 0.01 270);
--color-tgx26-body: #4c505c;
--color-tgx26-body: oklch(0.43 0.015 265);
--color-tgx26-dim: #6c707c;
--color-tgx26-dim: oklch(0.55 0.015 265);
--color-tgx26-hair: #d4d6dd;
--color-tgx26-hair: oklch(0.86 0.01 265);
--color-tgx26-cell: #e8eaef;
--color-tgx26-cell: oklch(0.92 0.008 265);
--color-tgx26-accent: #4257c4;
--color-tgx26-accent: oklch(0.47 0.18 265);
--color-tgx26-accenttint: #eceefb;
--color-tgx26-accenttint: oklch(0.95 0.02 265);
--color-tgx26-accenthover: #dfe3f8;
--color-tgx26-accenthover: oklch(0.92 0.03 265);
--color-tgx26-sel: #dde2f9;
--color-tgx26-sel: oklch(0.91 0.04 265);
--font-tgx26-sans: 'Inter Tight', system-ui, -apple-system, sans-serif;
}
.tgx-26 {
width: 100%;
min-height: 100svh;
}
/* Safari < 16.4 prefixes for the toolbar and the source list. */
.tgx-26 header {
-webkit-backdrop-filter: blur(16px);
}
.tgx-26 nav {
-webkit-backdrop-filter: blur(24px) saturate(150%);
}
```Here's a working CSS demo from CodeFronts. Use it as-is or adapt to your framework. All classes are scoped under a unique prefix so the code won't collide with your existing styles. MIT licensed.
Demo: Tailwind macOS Window Layout with Vibrancy Sidebar
Source: https://codefronts.com/layouts/tailwind-css-grid-layouts/tailwind-macos-window-layout-vibrancy-sidebar/
A native-feeling desktop notes app: translucent source list with grouped folders and counts, a unified toolbar spanning both columns, and a document pane that owns the only scrollbar — vibrancy in two utilities.
## HTML
```html
<section class="tgx-26 w-full min-h-svh font-tgx26-sans p-6 bg-[linear-gradient(140deg,oklch(0.75_0.08_300),oklch(0.7_0.09_220)_50%,oklch(0.78_0.07_170))]">
<div class="grid grid-cols-[224px_minmax(0,1fr)] grid-rows-[auto_minmax(0,1fr)] max-sm:grid-cols-[minmax(0,1fr)] h-[400px] w-[min(680px,100%)] mx-auto rounded-2xl overflow-hidden border border-white/40 shadow-[0_30px_70px_-30px_oklch(0.2_0.05_260/0.7)]">
<header class="col-span-2 max-sm:col-span-1 flex items-center gap-4 px-3.5 py-2.5 bg-white/85 backdrop-blur-lg border-b border-tgx26-hair">
<span aria-hidden="true" class="flex gap-[7px]"><i class="size-[11px] rounded-full bg-[oklch(0.68_0.19_25)]"></i><i class="size-[11px] rounded-full bg-[oklch(0.8_0.15_85)]"></i><i class="size-[11px] rounded-full bg-[oklch(0.75_0.17_145)]"></i></span>
<strong class="text-[0.82rem] text-tgx26-ink">Fieldnotes</strong>
<span class="text-[0.72rem] text-tgx26-dim max-sm:hidden">Edited 14:06</span>
<button type="button" class="ml-auto text-[0.75rem] font-medium text-tgx26-accent bg-tgx26-accenttint border border-tgx26-accent/30 rounded-lg px-3 min-h-9 cursor-pointer transition-colors hover:bg-tgx26-accenthover focus-visible:outline-2 focus-visible:outline-tgx26-accent focus-visible:outline-offset-2">+ New note</button>
</header>
<nav aria-label="Folders" class="max-sm:hidden overflow-y-auto bg-white/60 backdrop-blur-xl backdrop-saturate-150 border-r border-tgx26-hair px-2 py-2.5 flex flex-col gap-0.5">
<p class="text-[0.62rem] font-bold tracking-[0.08em] uppercase text-tgx26-dim px-2 pt-2 pb-1">iCloud</p>
<a href="#0" aria-current="page" class="grid grid-cols-[1.3em_minmax(0,1fr)_auto] items-center gap-x-2 text-[0.8rem] no-underline text-tgx26-ink px-2 min-h-8 rounded-lg transition-colors hover:bg-black/5 aria-[current=page]:bg-tgx26-sel aria-[current=page]:font-semibold focus-visible:outline-2 focus-visible:outline-tgx26-accent focus-visible:-outline-offset-2"><span aria-hidden="true">📝</span>All Notes<em class="not-italic text-[0.68rem] tabular-nums text-tgx26-dim">128</em></a>
<a href="#0" class="grid grid-cols-[1.3em_minmax(0,1fr)_auto] items-center gap-x-2 text-[0.8rem] no-underline text-tgx26-ink px-2 min-h-8 rounded-lg transition-colors hover:bg-black/5 focus-visible:outline-2 focus-visible:outline-tgx26-accent focus-visible:-outline-offset-2"><span aria-hidden="true">📌</span>Pinned<em class="not-italic text-[0.68rem] tabular-nums text-tgx26-dim">6</em></a>
<a href="#0" class="grid grid-cols-[1.3em_minmax(0,1fr)_auto] items-center gap-x-2 text-[0.8rem] no-underline text-tgx26-ink px-2 min-h-8 rounded-lg transition-colors hover:bg-black/5 focus-visible:outline-2 focus-visible:outline-tgx26-accent focus-visible:-outline-offset-2"><span aria-hidden="true">🗂️</span>Field trips<em class="not-italic text-[0.68rem] tabular-nums text-tgx26-dim">34</em></a>
<a href="#0" class="grid grid-cols-[1.3em_minmax(0,1fr)_auto] items-center gap-x-2 text-[0.8rem] no-underline text-tgx26-ink px-2 min-h-8 rounded-lg transition-colors hover:bg-black/5 focus-visible:outline-2 focus-visible:outline-tgx26-accent focus-visible:-outline-offset-2"><span aria-hidden="true">🗑️</span>Recently deleted<em class="not-italic text-[0.68rem] tabular-nums text-tgx26-dim">3</em></a>
<p class="text-[0.62rem] font-bold tracking-[0.08em] uppercase text-tgx26-dim px-2 pt-3 pb-1">Tags</p>
<a href="#0" class="grid grid-cols-[1.3em_minmax(0,1fr)_auto] items-center gap-x-2 text-[0.8rem] no-underline text-tgx26-ink px-2 min-h-8 rounded-lg transition-colors hover:bg-black/5 focus-visible:outline-2 focus-visible:outline-tgx26-accent focus-visible:-outline-offset-2"><span aria-hidden="true" class="text-tgx26-accent">#</span>coast-road<em class="not-italic text-[0.68rem] tabular-nums text-tgx26-dim">12</em></a>
<a href="#0" class="grid grid-cols-[1.3em_minmax(0,1fr)_auto] items-center gap-x-2 text-[0.8rem] no-underline text-tgx26-ink px-2 min-h-8 rounded-lg transition-colors hover:bg-black/5 focus-visible:outline-2 focus-visible:outline-tgx26-accent focus-visible:-outline-offset-2"><span aria-hidden="true" class="text-tgx26-accent">#</span>ferries<em class="not-italic text-[0.68rem] tabular-nums text-tgx26-dim">9</em></a>
</nav>
<main class="overflow-y-auto bg-white p-5 flex flex-col gap-3">
<p class="text-[0.7rem] text-tgx26-dim">Thursday 18 September · 14:06</p>
<h2 class="text-[1.05rem] font-semibold text-tgx26-ink">Vestmanna, day three</h2>
<p class="text-[0.84rem] leading-[1.7] text-tgx26-body">Ferry ran at 17:20 after all. The sound was flat for about an hour, which is apparently all anyone needs. Shot the ridge from the top of the pass while the light held — four minutes, maybe five.</p>
<figure class="flex flex-col gap-1.5">
<div class="aspect-[16/9] overflow-hidden rounded-lg bg-tgx26-cell"><img src="https://images.unsplash.com/photo-1470071459604-3b5ec3a7fe05?w=800&h=450&q=80&auto=format&fit=crop" alt="Coastal ridge with low cloud breaking above dark water" loading="lazy" class="w-full h-full object-cover"></div>
<figcaption class="text-[0.7rem] text-tgx26-dim">IMG_4471.heic · attached from Photos</figcaption>
</figure>
<p class="text-[0.84rem] leading-[1.7] text-tgx26-body">Note for the edit: the sidebar of this app is the layout worth stealing — translucent fill, blur plus saturate over the window's own backdrop, and a three-track row grid so icon, label and count line up on every row.</p>
<ul class="flex flex-col gap-1.5 text-[0.84rem] leading-[1.6] text-tgx26-body list-disc list-inside marker:text-tgx26-accent">
<li>Check the 06:40 bus on Sunday</li>
<li>Ask about the harbour light schedule</li>
</ul>
</main>
</div>
</section>
```
## CSS
```css
@import "tailwindcss";
@theme {
--color-tgx26-ink: #2a2b33;
--color-tgx26-ink: oklch(0.29 0.01 270);
--color-tgx26-body: #4c505c;
--color-tgx26-body: oklch(0.43 0.015 265);
--color-tgx26-dim: #6c707c;
--color-tgx26-dim: oklch(0.55 0.015 265);
--color-tgx26-hair: #d4d6dd;
--color-tgx26-hair: oklch(0.86 0.01 265);
--color-tgx26-cell: #e8eaef;
--color-tgx26-cell: oklch(0.92 0.008 265);
--color-tgx26-accent: #4257c4;
--color-tgx26-accent: oklch(0.47 0.18 265);
--color-tgx26-accenttint: #eceefb;
--color-tgx26-accenttint: oklch(0.95 0.02 265);
--color-tgx26-accenthover: #dfe3f8;
--color-tgx26-accenthover: oklch(0.92 0.03 265);
--color-tgx26-sel: #dde2f9;
--color-tgx26-sel: oklch(0.91 0.04 265);
--font-tgx26-sans: 'Inter Tight', system-ui, -apple-system, sans-serif;
}
.tgx-26 {
width: 100%;
min-height: 100svh;
}
/* Safari < 16.4 prefixes for the toolbar and the source list. */
.tgx-26 header {
-webkit-backdrop-filter: blur(16px);
}
.tgx-26 nav {
-webkit-backdrop-filter: blur(24px) saturate(150%);
}
```How this works
The toolbar spans; the panes split. One grid does the chrome, and each pane owns its own scroll — exactly how a native source list behaves while the document holds still.
Vibrancy needs a backdrop. backdrop-filter composites what is painted beneath, so the gradient must be on the frame. Put it on the sidebar and the blur has nothing to work with — the most common failure of this effect.
Make it yours
- Collapse the sidebar with a
has-[:checked]rule on the window plus a narrower first track. - One accent token recolours selection, tags and the toolbar button.
- Add an inspector column: one more track, same
minmax(0,…)discipline.
Gotchas — read before shipping
- Backdrop blur with no backdrop is invisible; check the gradient is on an ancestor.
- The document pane scrolls, not the window — otherwise the toolbar scrolls away and the illusion breaks.
- Safari below 16.4 needs
-webkit-backdrop-filter; Tailwind does not emit it, so the shim stays in the stylesheet.
Browser support
| Chrome | Safari | Firefox | Edge |
|---|---|---|---|
| 111+ | 16.4+ | 128+ | 111+ |
backdrop-filter universal since 2022; the frame grid works everywhere since 2017.