23 examples Responsive Uses JS beginner

23 CSS Sidebar Layouts

A CSS sidebar layout is a page shell with a vertical column for navigation, filters, or contextual controls beside the main content. These 23 hand-coded layouts cover the patterns you actually ship — fixed, collapsible, off-canvas, dual-pane, mini icon rail, sticky filters, three-pane workspace — built with semantic <aside> + <nav> + real <ul> lists, native <details> for disclosure, and aria-current for active routes.

23 unique layouts 21 Pure CSS 2 CSS + JS WCAG-friendly Mobile-first MIT licensed Updated May 5, 2026
01 / 23
Fixed Sidebar
Pure CSS
Workspace · Q4 review

Overview

Active users 24,812 ↑ 12.4%
Revenue · MTD $148.2k ↑ 7.1%
Uptime · 30d 99.97% — stable
Engagement Last 30 days
Apple-Pro premium — brushed-aluminium sidebar on a near-black slate, system-blue accents and SF-style typography. The classic admin shell with a luxe finish. Sidebar is sticky via `position: sticky`; main content scrolls.
Try it
.sb-fix {
  display: grid; grid-template-columns: 248px 1fr;
  min-height: 480px;
  font-family: -apple-system, BlinkMacSystemFont, 'SF Pro Display', system-ui, sans-serif;
  background: #1c1c1e; color: #f5f5f7;
  border-radius: 14px; overflow: hidden;
  letter-spacing: -0.01em;
}
.sb-fix-side {
  position: sticky; top: 0; align-self: start;
  height: 100%; min-height: 480px;
  padding: 18px 14px;
  background: linear-gradient(180deg, #2c2c2e 0%, #232325 100%);
  border-right: 1px solid rgba(255,255,255,0.08);
  box-shadow: inset -1px 0 0 rgba(255,255,255,0.04);
  display: flex; flex-direction: column; gap: 12px;
}
.sb-fix-brand { display: flex; align-items: center; gap: 10px; padding: 4px 4px 4px; }
.sb-fix-mark {
  width: 30px; height: 30px; border-radius: 8px;
  background: linear-gradient(135deg, #0a84ff 0%, #5ac8fa 100%);
  position: relative; flex-shrink: 0;
  box-shadow: 0 2px 8px rgba(10,132,255,0.4), inset 0 1px 0 rgba(255,255,255,0.3);
}
.sb-fix-mark::after {
  content: ''; position: absolute; inset: 6px;
  border: 2px solid rgba(255,255,255,0.85); border-radius: 4px;
  border-bottom-color: transparent; border-right-color: transparent;
  transform: rotate(-45deg);
}
.sb-fix-brand strong { display: block; font-size: 14px; font-weight: 600; color: #f5f5f7; }
.sb-fix-brand em { display: block; font-size: 11px; font-style: normal; color: #98989f; margin-top: -1px; }
.sb-fix-divider { height: 1px; background: rgba(255,255,255,0.06); margin: 4px 0 2px; }
.sb-fix-section { font-size: 10.5px; font-weight: 600; letter-spacing: 0.04em; text-transform: uppercase; color: #98989f; padding: 0 6px; margin-top: 6px; }
.sb-fix-side ul { list-style: none; margin: 4px 0 0; padding: 0; display: flex; flex-direction: column; gap: 1px; }
.sb-fix-side a {
  display: flex; align-items: center; gap: 10px;
  padding: 7px 10px; border-radius: 6px;
  font-size: 13px; font-weight: 500; color: #d6d6d8; text-decoration: none;
  transition: background 0.15s, color 0.15s;
}
.sb-fix-side a:hover { background: rgba(255,255,255,0.06); color: #fff; }
.sb-fix-side a[aria-current="page"] {
  background: rgba(10,132,255,0.18);
  color: #fff;
  box-shadow: inset 0 0 0 1px rgba(10,132,255,0.4);
}
.sb-fix-i { font-size: 11px; width: 14px; text-align: center; flex-shrink: 0; color: #5ac8fa; }
.sb-fix-side a[aria-current="page"] .sb-fix-i { color: #0a84ff; }
.sb-fix-badge { margin-left: auto; font-size: 10px; font-weight: 600; padding: 1px 7px; border-radius: 9px; background: rgba(255,69,58,0.85); color: #fff; }
.sb-fix-main { padding: 26px 28px; overflow-y: auto; background: #1c1c1e; }
.sb-fix-head { display: flex; align-items: flex-end; justify-content: space-between; margin-bottom: 22px; gap: 16px; }
.sb-fix-crumb { font-size: 11px; color: #98989f; letter-spacing: 0.02em; }
.sb-fix-main h1 { margin: 4px 0 0; font-size: 26px; font-weight: 700; color: #f5f5f7; letter-spacing: -0.02em; }
.sb-fix-actions { display: flex; gap: 8px; }
.sb-fix-btn { padding: 6px 13px; border-radius: 7px; font-size: 12px; font-weight: 600; font-family: inherit; cursor: pointer; transition: background 0.15s, transform 0.1s; background: rgba(255,255,255,0.08); color: #f5f5f7; border: 1px solid rgba(255,255,255,0.1); }
.sb-fix-btn:hover { background: rgba(255,255,255,0.14); }
.sb-fix-btn:active { transform: translateY(0.5px); }
.sb-fix-btn-pri { background: linear-gradient(180deg, #0a84ff 0%, #0866cc 100%); color: #fff; border-color: transparent; box-shadow: 0 1px 0 rgba(255,255,255,0.2) inset, 0 2px 6px rgba(10,132,255,0.4); }
.sb-fix-btn-pri:hover { background: linear-gradient(180deg, #1c8eff 0%, #0a73e0 100%); }
.sb-fix-cards { display: grid; grid-template-columns: repeat(3, 1fr); gap: 10px; margin-bottom: 18px; }
.sb-fix-card { padding: 14px 14px 12px; background: #2c2c2e; border: 1px solid rgba(255,255,255,0.06); border-radius: 10px; display: flex; flex-direction: column; gap: 4px; box-shadow: 0 1px 0 rgba(255,255,255,0.04) inset; }
.sb-fix-card-label { font-size: 11px; color: #98989f; font-weight: 500; }
.sb-fix-card strong { font-size: 22px; font-weight: 700; color: #f5f5f7; letter-spacing: -0.02em; }
.sb-fix-card-delta { font-size: 10.5px; color: #30d158; font-weight: 600; }
.sb-fix-card-flat { color: #98989f; }
.sb-fix-chart { padding: 14px 14px 8px; background: #2c2c2e; border: 1px solid rgba(255,255,255,0.06); border-radius: 10px; }
.sb-fix-chart header { display: flex; align-items: center; justify-content: space-between; margin-bottom: 6px; }
.sb-fix-chart strong { font-size: 12.5px; font-weight: 600; color: #f5f5f7; }
.sb-fix-chart header span { font-size: 10.5px; color: #98989f; }
.sb-fix-chart svg { width: 100%; height: 70px; display: block; }
@media (max-width: 720px) {
  .sb-fix { grid-template-columns: 1fr; }
  .sb-fix-side { position: static; min-height: auto; border-right: 0; border-bottom: 1px solid rgba(255,255,255,0.08); }
  .sb-fix-cards { grid-template-columns: 1fr; }
  .sb-fix-head { flex-direction: column; align-items: flex-start; }
}
<div class="sb-fix">
  <aside class="sb-fix-side" aria-label="Primary">
    <div class="sb-fix-brand">
      <span class="sb-fix-mark" aria-hidden="true"></span>
      <div>
        <strong>Atelier</strong>
        <em>Workspace</em>
      </div>
    </div>
    <div class="sb-fix-divider"></div>
    <nav aria-label="Primary">
      <span class="sb-fix-section">General</span>
      <ul>
        <li><a href="#!" aria-current="page"><span class="sb-fix-i" aria-hidden="true">●</span>Overview</a></li>
        <li><a href="#!"><span class="sb-fix-i" aria-hidden="true">◔</span>Projects<span class="sb-fix-badge">8</span></a></li>
        <li><a href="#!"><span class="sb-fix-i" aria-hidden="true">◇</span>People</a></li>
      </ul>
      <span class="sb-fix-section">Workspace</span>
      <ul>
        <li><a href="#!"><span class="sb-fix-i" aria-hidden="true">◐</span>Reports</a></li>
        <li><a href="#!"><span class="sb-fix-i" aria-hidden="true">◈</span>Integrations</a></li>
        <li><a href="#!"><span class="sb-fix-i" aria-hidden="true">◉</span>Settings</a></li>
      </ul>
    </nav>
  </aside>
  <main class="sb-fix-main">
    <header class="sb-fix-head">
      <div>
        <span class="sb-fix-crumb">Workspace · Q4 review</span>
        <h1>Overview</h1>
      </div>
      <div class="sb-fix-actions">
        <button type="button" class="sb-fix-btn">Export</button>
        <button type="button" class="sb-fix-btn sb-fix-btn-pri">+ New</button>
      </div>
    </header>
    <div class="sb-fix-cards">
      <article class="sb-fix-card">
        <span class="sb-fix-card-label">Active users</span>
        <strong>24,812</strong>
        <span class="sb-fix-card-delta">↑ 12.4%</span>
      </article>
      <article class="sb-fix-card">
        <span class="sb-fix-card-label">Revenue · MTD</span>
        <strong>$148.2k</strong>
        <span class="sb-fix-card-delta">↑ 7.1%</span>
      </article>
      <article class="sb-fix-card">
        <span class="sb-fix-card-label">Uptime · 30d</span>
        <strong>99.97%</strong>
        <span class="sb-fix-card-delta sb-fix-card-flat">— stable</span>
      </article>
    </div>
    <section class="sb-fix-chart">
      <header>
        <strong>Engagement</strong>
        <span>Last 30 days</span>
      </header>
      <svg viewBox="0 0 320 70" preserveAspectRatio="none" aria-hidden="true">
        <defs>
          <linearGradient id="sb-fix-fill" x1="0" x2="0" y1="0" y2="1">
            <stop offset="0%" stop-color="#0a84ff" stop-opacity="0.32"/>
            <stop offset="100%" stop-color="#0a84ff" stop-opacity="0"/>
          </linearGradient>
        </defs>
        <path d="M0,55 L24,48 L48,52 L72,40 L96,44 L120,30 L144,36 L168,22 L192,28 L216,18 L240,24 L264,12 L288,18 L320,8 L320,70 L0,70 Z" fill="url(#sb-fix-fill)"/>
        <path d="M0,55 L24,48 L48,52 L72,40 L96,44 L120,30 L144,36 L168,22 L192,28 L216,18 L240,24 L264,12 L288,18 L320,8" fill="none" stroke="#0a84ff" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
      </svg>
    </section>
  </main>
</div>
02 / 23
Collapsible Sidebar
Pure CSS
▸ Workspace

Slow burn,
bright ideas.

Toggle the burger to collapse the sidebar. No JavaScript — :has(:checked) on the grid template animates the columns; labels fade and the burger morphs into a chevron.

184Ideas this week
4.2kFollowers
Sunset palette — coral fading into magenta and ember orange, with a soft cream content area. Click the toggle to collapse from 240px to 64px. Pure CSS via :has(:checked) on the grid template; labels fade, icons stay glowing.
Try it
.sb-col {
  display: grid; grid-template-columns: 240px 1fr;
  min-height: 480px;
  font-family: 'Inter', system-ui, -apple-system, sans-serif;
  background: #fff5ee; color: #2a0e2c;
  border-radius: 16px; overflow: hidden;
  transition: grid-template-columns 0.32s cubic-bezier(0.32, 0.72, 0, 1);
}
.sb-col:has(.sb-col-cb:checked) { grid-template-columns: 64px 1fr; }
.sb-col-cb { position: absolute; width: 1px; height: 1px; opacity: 0; clip: rect(0 0 0 0); }
.sb-col:has(.sb-col-cb:focus-visible) .sb-col-toggle { outline: 2px solid #fff; outline-offset: 2px; }
.sb-col-side {
  background:
    radial-gradient(120% 60% at 0% 0%, rgba(255,255,255,0.18), transparent 60%),
    linear-gradient(160deg, #ff7a4d 0%, #ec1d8c 55%, #6a0a8c 100%);
  color: #fff;
  padding: 16px 12px; display: flex; flex-direction: column; gap: 14px;
  overflow: hidden;
  box-shadow: inset -1px 0 0 rgba(255,255,255,0.18);
  position: relative;
}
.sb-col-side::before {
  content: ''; position: absolute; inset: 0;
  background: radial-gradient(80% 60% at 50% 110%, rgba(255,213,128,0.55), transparent 60%);
  pointer-events: none;
}
.sb-col-toggle {
  position: relative;
  display: flex; align-items: center; gap: 10px;
  padding: 9px 11px; border-radius: 10px;
  background: rgba(255,255,255,0.18);
  border: 1px solid rgba(255,255,255,0.3);
  color: #fff; cursor: pointer; user-select: none;
  backdrop-filter: blur(8px);
  transition: background 0.15s;
}
.sb-col-toggle:hover { background: rgba(255,255,255,0.28); }
.sb-col-burger { display: inline-flex; flex-direction: column; gap: 3px; width: 14px; flex-shrink: 0; }
.sb-col-burger i { display: block; height: 2px; background: #fff; border-radius: 2px; transition: transform 0.22s, opacity 0.22s; }
.sb-col:has(.sb-col-cb:checked) .sb-col-burger i:nth-child(1) { transform: translateY(5px) rotate(45deg); }
.sb-col:has(.sb-col-cb:checked) .sb-col-burger i:nth-child(2) { opacity: 0; }
.sb-col:has(.sb-col-cb:checked) .sb-col-burger i:nth-child(3) { transform: translateY(-5px) rotate(-45deg); }
.sb-col-tlabel { font-size: 12.5px; font-weight: 700; letter-spacing: 0.02em; transition: opacity 0.18s; }
.sb-col:has(.sb-col-cb:checked) .sb-col-tlabel { opacity: 0; pointer-events: none; }
.sb-col-brand { display: flex; align-items: center; gap: 10px; padding: 4px 6px; text-decoration: none; }
.sb-col-mark { width: 28px; height: 28px; flex-shrink: 0; border-radius: 8px; background: linear-gradient(135deg, #ffd580 0%, #ff7a4d 50%, #ec1d8c 100%); box-shadow: 0 0 0 2px rgba(255,255,255,0.3), 0 4px 14px rgba(236,29,140,0.45); }
.sb-col-name { color: #fff; font-size: 14px; font-weight: 800; letter-spacing: -0.01em; line-height: 1; transition: opacity 0.18s; white-space: nowrap; }
.sb-col-name small { display: block; font-size: 9.5px; color: #ffd580; font-weight: 700; letter-spacing: 0.16em; margin-top: 3px; text-transform: uppercase; }
.sb-col:has(.sb-col-cb:checked) .sb-col-name { opacity: 0; pointer-events: none; }
.sb-col-side ul { position: relative; list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 4px; }
.sb-col-side a {
  display: flex; align-items: center; gap: 12px;
  padding: 9px 11px; border-radius: 9px;
  font-size: 13.5px; font-weight: 600; color: rgba(255,255,255,0.86); text-decoration: none;
  border: 1px solid transparent;
  transition: background 0.14s, color 0.14s, border-color 0.14s;
}
.sb-col-side a:hover { background: rgba(255,255,255,0.16); color: #fff; border-color: rgba(255,255,255,0.22); }
.sb-col-side a[aria-current="page"] {
  background: rgba(255,255,255,0.95); color: #6a0a8c;
  box-shadow: 0 6px 18px rgba(106,10,140,0.3);
}
.sb-col-ico { font-size: 14px; width: 20px; text-align: center; flex-shrink: 0; }
.sb-col-side a[aria-current="page"] .sb-col-ico { color: #ec1d8c; }
.sb-col-lbl { white-space: nowrap; overflow: hidden; transition: opacity 0.18s; }
.sb-col:has(.sb-col-cb:checked) .sb-col-lbl { opacity: 0; pointer-events: none; }
.sb-col-main {
  padding: 32px 36px; overflow: hidden;
  display: flex; flex-direction: column; gap: 16px;
  background:
    radial-gradient(60% 80% at 100% 0%, #ffe4d6 0%, transparent 60%),
    radial-gradient(50% 60% at 0% 100%, #fff1d6 0%, transparent 60%),
    #fff5ee;
}
.sb-col-eye { font-size: 11.5px; font-weight: 700; letter-spacing: 0.16em; color: #ec1d8c; text-transform: uppercase; }
.sb-col-main h2 {
  margin: 0; font-size: clamp(32px, 5vw, 56px); font-weight: 800; line-height: 0.96;
  background: linear-gradient(135deg, #ff7a4d 0%, #ec1d8c 60%, #6a0a8c 100%);
  -webkit-background-clip: text; background-clip: text; color: transparent;
  letter-spacing: -0.03em;
}
.sb-col-main p { margin: 0; font-size: 13.5px; color: #5a3a52; line-height: 1.6; max-width: 460px; }
.sb-col-main code { font-family: 'JetBrains Mono', monospace; font-size: 12px; color: #6a0a8c; background: rgba(236,29,140,0.12); padding: 1px 6px; border-radius: 4px; }
.sb-col-cards { display: grid; grid-template-columns: repeat(2, minmax(0, 200px)); gap: 12px; margin-top: 6px; }
.sb-col-c { padding: 14px 16px; border-radius: 14px; background: #fff; border: 1px solid rgba(236,29,140,0.18); box-shadow: 0 6px 18px rgba(236,29,140,0.08); display: flex; flex-direction: column; gap: 4px; }
.sb-col-c strong { font-size: 24px; font-weight: 800; color: #2a0e2c; letter-spacing: -0.02em; line-height: 1; }
.sb-col-c span { font-size: 11px; color: #8c5a78; font-weight: 600; letter-spacing: 0.04em; text-transform: uppercase; }
@media (prefers-reduced-motion: reduce) {
  .sb-col, .sb-col-tlabel, .sb-col-lbl, .sb-col-burger i, .sb-col-name { transition: none; }
}
@media (max-width: 720px) {
  .sb-col, .sb-col:has(.sb-col-cb:checked) { grid-template-columns: 64px 1fr; }
  .sb-col-cards { grid-template-columns: 1fr; }
}
<div class="sb-col">
  <input id="sb-col-t" class="sb-col-cb" type="checkbox" aria-label="Toggle sidebar" />
  <aside class="sb-col-side" aria-label="Primary">
    <label class="sb-col-toggle" for="sb-col-t" aria-controls="sb-col-nav">
      <span class="sb-col-burger" aria-hidden="true"><i></i><i></i><i></i></span>
      <span class="sb-col-tlabel">Collapse</span>
    </label>
    <a class="sb-col-brand" href="#!">
      <span class="sb-col-mark" aria-hidden="true"></span>
      <span class="sb-col-name">Ember<small>Studios</small></span>
    </a>
    <nav id="sb-col-nav" aria-label="Primary">
      <ul>
        <li><a href="#!" aria-current="page"><span class="sb-col-ico" aria-hidden="true">◉</span><span class="sb-col-lbl">Dashboard</span></a></li>
        <li><a href="#!"><span class="sb-col-ico" aria-hidden="true">▣</span><span class="sb-col-lbl">Projects</span></a></li>
        <li><a href="#!"><span class="sb-col-ico" aria-hidden="true">◌</span><span class="sb-col-lbl">Crew</span></a></li>
        <li><a href="#!"><span class="sb-col-ico" aria-hidden="true">▤</span><span class="sb-col-lbl">Library</span></a></li>
        <li><a href="#!"><span class="sb-col-ico" aria-hidden="true">⚙</span><span class="sb-col-lbl">Settings</span></a></li>
      </ul>
    </nav>
  </aside>
  <main class="sb-col-main">
    <span class="sb-col-eye">▸ Workspace</span>
    <h2>Slow burn,<br/>bright ideas.</h2>
    <p>Toggle the burger to collapse the sidebar. No JavaScript — <code>:has(:checked)</code> on the grid template animates the columns; labels fade and the burger morphs into a chevron.</p>
    <div class="sb-col-cards">
      <div class="sb-col-c"><strong>184</strong><span>Ideas this week</span></div>
      <div class="sb-col-c"><strong>4.2k</strong><span>Followers</span></div>
    </div>
  </main>
</div>
03 / 23
Off-canvas Drawer
Pure CSS
SYS_OSv2099
▸ TERMINAL · USER 0x7F

Tap to
jack in.

Tap the burger to slide the drawer in over the page. The backdrop blurs everything; tap it or the × to dismiss. :has(:checked) drives the slide.

CPU87% NET1.2g MEM4.7G
Cyberpunk 2099 — pitch black with electric cyan and hot pink, glitching scanlines, monospace HUD type. Tap the burger to slide the drawer in; the backdrop blurs and dims the page. :has(:checked) drives the transform; clicking the backdrop closes.
Try it
.sb-off {
  position: relative; min-height: 480px;
  font-family: 'Helvetica Neue', system-ui, sans-serif;
  background: #050008; color: #d6f7ff;
  border-radius: 14px; overflow: hidden;
  display: flex; flex-direction: column;
  isolation: isolate;
}
.sb-off::before {
  content: ''; position: absolute; inset: 0; pointer-events: none; z-index: 0;
  background:
    radial-gradient(50% 40% at 80% 20%, rgba(0,229,255,0.18), transparent 70%),
    radial-gradient(50% 50% at 20% 90%, rgba(255,0,140,0.18), transparent 70%);
}
.sb-off::after {
  content: ''; position: absolute; inset: 0; pointer-events: none; z-index: 1;
  background: repeating-linear-gradient(0deg, rgba(0,229,255,0.05) 0 1px, transparent 1px 4px);
  mix-blend-mode: overlay;
}
.sb-off-cb { position: absolute; width: 1px; height: 1px; opacity: 0; clip: rect(0 0 0 0); }
.sb-off:has(.sb-off-cb:focus-visible) .sb-off-burger { outline: 2px solid #00e5ff; outline-offset: 2px; }
.sb-off-bar {
  position: relative; z-index: 2;
  display: flex; align-items: center; gap: 12px;
  padding: 14px 16px;
  background: rgba(0,0,0,0.6);
  border-bottom: 1px solid rgba(0,229,255,0.4);
  box-shadow: 0 0 24px rgba(0,229,255,0.15);
}
.sb-off-burger {
  width: 36px; height: 36px;
  display: inline-flex; align-items: center; justify-content: center;
  background: transparent; color: #00e5ff;
  border: 1px solid rgba(0,229,255,0.5);
  border-radius: 4px;
  cursor: pointer;
  box-shadow: inset 0 0 12px rgba(0,229,255,0.2), 0 0 12px rgba(0,229,255,0.25);
  transition: background 0.15s, box-shadow 0.15s;
}
.sb-off-burger:hover { background: rgba(0,229,255,0.1); box-shadow: inset 0 0 18px rgba(0,229,255,0.3), 0 0 18px rgba(0,229,255,0.45); }
.sb-off-burger-i { display: inline-flex; flex-direction: column; gap: 4px; width: 18px; }
.sb-off-burger-i i { display: block; height: 2px; background: #00e5ff; box-shadow: 0 0 6px #00e5ff; }
.sb-off-title { font-family: 'Courier New', monospace; font-weight: 800; font-size: 14px; letter-spacing: 0.16em; color: #fff; }
.sb-off-title small { font-size: 9.5px; color: #ff0090; letter-spacing: 0.2em; margin-left: 4px; text-shadow: 0 0 8px rgba(255,0,144,0.7); }
.sb-off-status { margin-left: auto; display: inline-flex; align-items: center; gap: 6px; font-family: 'Courier New', monospace; font-size: 10.5px; letter-spacing: 0.16em; color: #00ff9c; padding: 4px 10px; border: 1px solid rgba(0,255,156,0.4); border-radius: 12px; }
.sb-off-blink { width: 6px; height: 6px; border-radius: 50%; background: #00ff9c; box-shadow: 0 0 8px #00ff9c; animation: sb-off-blink 1.4s ease-in-out infinite; }
@keyframes sb-off-blink { 0%, 100% { opacity: 1; } 50% { opacity: 0.3; } }
@media (prefers-reduced-motion: reduce) { .sb-off-blink { animation: none; } }
.sb-off-main { position: relative; z-index: 2; flex: 1; padding: 30px 32px; display: flex; flex-direction: column; gap: 18px; }
.sb-off-eye { font-family: 'Courier New', monospace; font-size: 11.5px; letter-spacing: 0.2em; color: #00e5ff; text-shadow: 0 0 8px rgba(0,229,255,0.6); }
.sb-off-main h2 {
  margin: 0; font-size: clamp(34px, 5vw, 60px); font-weight: 900; line-height: 0.92;
  color: #fff; letter-spacing: -0.03em;
  text-shadow: -2px 0 0 rgba(255,0,144,0.7), 2px 0 0 rgba(0,229,255,0.7), 0 0 30px rgba(255,255,255,0.4);
}
.sb-off-main p { margin: 0; font-size: 13.5px; color: rgba(214,247,255,0.85); line-height: 1.6; max-width: 460px; }
.sb-off-main code { font-family: 'Courier New', monospace; font-size: 12px; color: #ff0090; background: rgba(255,0,144,0.1); padding: 1px 6px; border-radius: 3px; border: 1px solid rgba(255,0,144,0.4); }
.sb-off-stat { display: flex; gap: 14px; margin-top: auto; font-family: 'Courier New', monospace; }
.sb-off-stat span { padding: 8px 14px; border: 1px solid rgba(0,229,255,0.4); border-radius: 4px; background: rgba(0,229,255,0.06); display: flex; flex-direction: column; gap: 2px; min-width: 70px; }
.sb-off-stat em { font-style: normal; font-size: 9.5px; color: #00e5ff; letter-spacing: 0.18em; }
.sb-off-stat b { font-size: 16px; font-weight: 800; color: #fff; letter-spacing: 0.04em; }
.sb-off-backdrop {
  position: absolute; inset: 0; cursor: pointer;
  background: rgba(5,0,8,0.7);
  backdrop-filter: blur(8px) saturate(0.6);
  -webkit-backdrop-filter: blur(8px) saturate(0.6);
  opacity: 0; pointer-events: none; transition: opacity 0.24s ease;
  z-index: 3;
}
.sb-off:has(.sb-off-cb:checked) .sb-off-backdrop { opacity: 1; pointer-events: auto; }
.sb-off-drawer {
  position: absolute; left: 0; top: 0; bottom: 0; width: 280px;
  background: linear-gradient(180deg, rgba(8,0,16,0.95) 0%, rgba(20,0,32,0.95) 100%);
  border-right: 2px solid #00e5ff;
  box-shadow: 4px 0 32px rgba(0,229,255,0.4), inset -1px 0 0 rgba(255,0,144,0.5);
  transform: translateX(-100%); transition: transform 0.32s cubic-bezier(0.32, 0.72, 0, 1);
  z-index: 4;
  padding: 18px 14px; display: flex; flex-direction: column; gap: 12px;
}
.sb-off:has(.sb-off-cb:checked) .sb-off-drawer { transform: translateX(0); }
.sb-off-drawer header { display: flex; align-items: center; justify-content: space-between; padding: 4px 6px 12px; border-bottom: 1px dashed rgba(0,229,255,0.4); font-family: 'Courier New', monospace; }
.sb-off-drawer header strong { font-size: 12px; color: #00e5ff; font-weight: 800; letter-spacing: 0.16em; text-shadow: 0 0 8px rgba(0,229,255,0.6); }
.sb-off-close { font-family: 'Courier New', monospace; font-size: 12px; font-weight: 800; color: #ff0090; cursor: pointer; padding: 2px 8px; user-select: none; letter-spacing: 0.1em; transition: text-shadow 0.15s; }
.sb-off-close:hover { text-shadow: 0 0 8px #ff0090; }
.sb-off-drawer ul { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 4px; }
.sb-off-drawer a {
  display: flex; align-items: center; gap: 12px;
  padding: 10px 12px; border-radius: 4px;
  font-family: 'Courier New', monospace; font-size: 13.5px; font-weight: 700;
  letter-spacing: 0.06em;
  color: #d6f7ff; text-decoration: none;
  border-left: 3px solid transparent;
  transition: background 0.16s, color 0.16s, border-color 0.16s, text-shadow 0.16s;
}
.sb-off-drawer a:hover { background: rgba(0,229,255,0.08); border-left-color: #00e5ff; color: #fff; text-shadow: 0 0 8px rgba(0,229,255,0.7); }
.sb-off-drawer a[aria-current="page"] { background: rgba(255,0,144,0.12); border-left-color: #ff0090; color: #fff; text-shadow: 0 0 10px rgba(255,0,144,0.7); }
.sb-off-drawer a em { font-style: normal; font-size: 11px; color: #ff0090; font-weight: 800; opacity: 0.7; }
.sb-off-drawer a[aria-current="page"] em { color: #ffd700; opacity: 1; text-shadow: 0 0 8px #ffd700; }
.sb-off-drawer footer { margin-top: auto; padding-top: 12px; border-top: 1px dashed rgba(0,229,255,0.3); font-family: 'Courier New', monospace; font-size: 10.5px; color: rgba(0,229,255,0.7); letter-spacing: 0.16em; text-align: center; }
.sr-only { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); }
@media (prefers-reduced-motion: reduce) {
  .sb-off-drawer, .sb-off-backdrop { transition: none; }
}
<div class="sb-off">
  <input id="sb-off-t" class="sb-off-cb" type="checkbox" aria-label="Toggle menu" />
  <header class="sb-off-bar">
    <label class="sb-off-burger" for="sb-off-t" aria-controls="sb-off-drawer">
      <span class="sb-off-burger-i" aria-hidden="true"><i></i><i></i><i></i></span>
      <span class="sr-only">Open menu</span>
    </label>
    <span class="sb-off-title">SYS_OS<small>v2099</small></span>
    <span class="sb-off-status" aria-hidden="true">
      <span class="sb-off-blink"></span>
      ONLINE
    </span>
  </header>
  <main class="sb-off-main">
    <span class="sb-off-eye">▸ TERMINAL · USER 0x7F</span>
    <h2>Tap to<br/>jack in.</h2>
    <p>Tap the burger to slide the drawer in over the page. The backdrop blurs everything; tap it or the × to dismiss. <code>:has(:checked)</code> drives the slide.</p>
    <div class="sb-off-stat">
      <span><em>CPU</em><b>87%</b></span>
      <span><em>NET</em><b>1.2g</b></span>
      <span><em>MEM</em><b>4.7G</b></span>
    </div>
  </main>
  <label class="sb-off-backdrop" for="sb-off-t" aria-hidden="true"></label>
  <aside id="sb-off-drawer" class="sb-off-drawer" aria-label="Primary">
    <header>
      <strong>// MAIN_MENU</strong>
      <label class="sb-off-close" for="sb-off-t" aria-label="Close menu">[ × ]</label>
    </header>
    <nav aria-label="Primary">
      <ul>
        <li><a href="#!" aria-current="page" data-key="01"><em>01</em>Home</a></li>
        <li><a href="#!" data-key="02"><em>02</em>Projects</a></li>
        <li><a href="#!" data-key="03"><em>03</em>Library</a></li>
        <li><a href="#!" data-key="04"><em>04</em>Settings</a></li>
        <li><a href="#!" data-key="05"><em>05</em>Sign out</a></li>
      </ul>
    </nav>
    <footer>↩ ESC to close</footer>
  </aside>
</div>
04 / 23
Right-aligned Sidebar
Pure CSS
No. 47 · 1923

Form follows
function.

The sidebar sits on the right — design-tool convention (Figma, Sketch). Layout is just 1fr 260px; native <dl> exposes property pairs to assistive tech.

Bauhaus poster — cream canvas, cobalt-blue right rail, primary-red and lemon shapes composing into a designer's inspector pane. Sidebar on the right via 1fr 260px. Real <dl> with <dt>/<dd> for the property pairs.
Try it
.sb-rt {
  display: grid; grid-template-columns: 1fr 260px;
  min-height: 480px;
  font-family: 'Inter', system-ui, -apple-system, sans-serif;
  background: #f4ecdb;
  color: #1a1a1a;
  border-radius: 0;
  overflow: hidden;
  border: 4px solid #1a1a1a;
}
.sb-rt-main { position: relative; padding: 36px 40px; display: flex; flex-direction: column; gap: 18px; }
.sb-rt-main::before {
  content: ''; position: absolute; top: 24px; right: 24px;
  width: 14px; height: 14px; border-radius: 50%; background: #c43a2c;
}
.sb-rt-eye { font-family: 'Inter', sans-serif; font-size: 11.5px; font-weight: 800; letter-spacing: 0.16em; color: #c43a2c; text-transform: uppercase; }
.sb-rt-main h2 {
  margin: 0; font-size: clamp(34px, 5vw, 60px); font-weight: 900; line-height: 0.92;
  color: #1a1a1a; letter-spacing: -0.03em;
}
.sb-rt-main h2 em { font-style: italic; color: #1840d2; font-weight: 800; }
.sb-rt-main p { margin: 0; font-size: 13.5px; color: #3d3d3d; line-height: 1.65; max-width: 460px; font-weight: 500; }
.sb-rt-main code { font-family: 'JetBrains Mono', monospace; font-size: 12.5px; color: #1840d2; background: rgba(24,64,210,0.1); padding: 1px 6px; border-radius: 0; font-weight: 700; }
.sb-rt-canvas {
  position: relative;
  flex: 1; min-height: 200px;
  border: 3px solid #1a1a1a;
  background: #fdf5e2;
  margin-top: 4px;
  overflow: hidden;
}
.sb-rt-circ {
  position: absolute; top: 22%; left: 12%;
  width: 90px; height: 90px; border-radius: 50%;
  background: #c43a2c;
  border: 3px solid #1a1a1a;
}
.sb-rt-sq {
  position: absolute; bottom: 14%; left: 32%;
  width: 80px; height: 80px;
  background: #1840d2;
  border: 3px solid #1a1a1a;
}
.sb-rt-tri {
  position: absolute; top: 18%; right: 14%;
  width: 0; height: 0;
  border-left: 50px solid transparent;
  border-right: 50px solid transparent;
  border-bottom: 86px solid #ffd400;
  filter: drop-shadow(0 0 0 #1a1a1a);
}
.sb-rt-tri::after {
  content: ''; position: absolute; left: -50px; top: 0;
  width: 0; height: 0;
  border-left: 50px solid transparent;
  border-right: 50px solid transparent;
  border-bottom: 86px solid #1a1a1a;
  z-index: -1;
  transform: scale(1.06);
  transform-origin: bottom;
}
.sb-rt-side {
  position: relative;
  background: #1840d2; color: #f4ecdb;
  border-left: 4px solid #1a1a1a;
  padding: 24px 22px;
  display: flex; flex-direction: column; gap: 16px;
}
.sb-rt-rule { display: block; height: 4px; width: 60%; background: #ffd400; margin-bottom: 4px; }
.sb-rt-side h3 { margin: 0; font-size: 22px; font-weight: 900; letter-spacing: -0.02em; color: #fff; }
.sb-rt-side dl { margin: 0; display: grid; grid-template-columns: auto 1fr; gap: 10px 16px; font-size: 12.5px; padding-top: 8px; border-top: 2px solid rgba(244,236,219,0.4); }
.sb-rt-side dt { color: #ffd400; font-weight: 800; letter-spacing: 0.04em; text-transform: uppercase; font-size: 10.5px; align-self: center; }
.sb-rt-side dd { margin: 0; color: #f4ecdb; display: flex; align-items: center; gap: 8px; font-family: 'JetBrains Mono', monospace; font-weight: 600; }
.sb-rt-sw { width: 14px; height: 14px; background: #1840d2; border: 2px solid #f4ecdb; flex-shrink: 0; }
.sb-rt-cta {
  margin-top: auto;
  padding: 12px 16px;
  background: #ffd400; color: #1a1a1a;
  border: 3px solid #1a1a1a;
  font: inherit; font-size: 13px; font-weight: 900; letter-spacing: 0.04em;
  cursor: pointer;
  box-shadow: 4px 4px 0 #1a1a1a;
  transition: transform 0.1s, box-shadow 0.1s;
}
.sb-rt-cta:hover { background: #ffe44a; }
.sb-rt-cta:active { transform: translate(2px, 2px); box-shadow: 2px 2px 0 #1a1a1a; }
@media (max-width: 720px) {
  .sb-rt { grid-template-columns: 1fr; }
  .sb-rt-side { border-left: 0; border-top: 4px solid #1a1a1a; }
}
<div class="sb-rt">
  <main class="sb-rt-main">
    <span class="sb-rt-eye">No. 47 · 1923</span>
    <h2>Form follows<br/><em>function.</em></h2>
    <p>The sidebar sits on the right — design-tool convention (Figma, Sketch). Layout is just <code>1fr 260px</code>; native <code>&lt;dl&gt;</code> exposes property pairs to assistive tech.</p>
    <div class="sb-rt-canvas" aria-label="Composition">
      <span class="sb-rt-circ" aria-hidden="true"></span>
      <span class="sb-rt-sq" aria-hidden="true"></span>
      <span class="sb-rt-tri" aria-hidden="true"></span>
    </div>
  </main>
  <aside class="sb-rt-side" aria-label="Properties">
    <span class="sb-rt-rule" aria-hidden="true"></span>
    <h3>Properties</h3>
    <dl>
      <dt>Width</dt><dd>320 px</dd>
      <dt>Height</dt><dd>180 px</dd>
      <dt>Fill</dt><dd><span class="sb-rt-sw" aria-hidden="true"></span>#1840d2</dd>
      <dt>Stroke</dt><dd>2 px solid</dd>
      <dt>Radius</dt><dd>0 px</dd>
      <dt>Opacity</dt><dd>100 %</dd>
    </dl>
    <button type="button" class="sb-rt-cta">Apply →</button>
  </aside>
</div>
05 / 23
Two-pane Mail
Pure CSS

This morning

4 unread
Anya Petrova Re: Q3 launch deck Looks great — one tweak on slide 14.
Daichi Sato Friday demo recap Here's the recording + the action items we…
Lena Müller Invoice #2143 Attached, due in 30 days.
Carlos Reyes Coffee Thursday? I'll be near the office around 11.
DAILY DIGEST · OPS

Friday demo recap.

From Daichi Sato · · 4 min read

Hey team — here's the recording from today plus the four action items we landed on. I'll send a separate Loom for the dashboard rewrite tomorrow.

A short follow-up on Anya's slide-14 tweak: I think we can land that before the demo on Tuesday.

Editorial newspaper — off-white paper, ink-black serif headlines, spot-red active state. Three-column shell — folder sidebar, message list, reading pane. CSS grid with three columns, each scrolling independently. The mail client a print designer would lay out.
Try it
.sb-mail {
  display: grid; grid-template-columns: 200px 260px 1fr;
  min-height: 480px;
  font-family: 'Georgia', 'Times New Roman', serif;
  background: #f4f0e6; color: #1a1a1a;
  border-radius: 4px; overflow: hidden;
  border: 1px solid #1a1a1a;
}
.sb-mail-folders {
  padding: 18px 14px;
  background: #efe9da;
  border-right: 1px solid #1a1a1a;
  display: flex; flex-direction: column; gap: 14px;
}
.sb-mail-folders header { padding-bottom: 12px; border-bottom: 2px solid #1a1a1a; }
.sb-mail-folders strong { display: block; font-family: 'Playfair Display', 'Georgia', serif; font-size: 19px; font-weight: 900; letter-spacing: -0.01em; color: #1a1a1a; line-height: 1; }
.sb-mail-folders small { display: block; font-family: 'Inter', sans-serif; font-size: 9.5px; font-weight: 600; letter-spacing: 0.18em; color: #c43a2c; text-transform: uppercase; margin-top: 4px; }
.sb-mail-folders ul { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; }
.sb-mail-folders a {
  display: flex; align-items: center; justify-content: space-between;
  padding: 8px 4px; border-bottom: 1px dotted #c0b6a0;
  font-family: 'Georgia', serif;
  font-size: 13.5px; color: #1a1a1a; text-decoration: none;
  transition: color 0.12s, padding-left 0.12s;
}
.sb-mail-folders a:hover { padding-left: 8px; color: #c43a2c; }
.sb-mail-folders a[aria-current="page"] { color: #c43a2c; font-weight: 700; padding-left: 8px; border-bottom-color: #c43a2c; }
.sb-mail-folders a span { font-family: 'Inter', sans-serif; font-size: 10.5px; padding: 1px 7px; border-radius: 0; background: #c43a2c; color: #fff; font-weight: 700; letter-spacing: 0.04em; }
.sb-mail-folders a span.sb-mail-muted { background: transparent; color: #6a6055; border: 1px solid #6a6055; }
.sb-mail-folders footer { margin-top: auto; padding-top: 10px; border-top: 1px solid #1a1a1a; font-family: 'Inter', sans-serif; font-size: 10.5px; color: #6a6055; letter-spacing: 0.06em; text-align: center; font-style: italic; }
.sb-mail-bullet { color: #c43a2c; }
.sb-mail-list { background: #fdf9ec; border-right: 1px solid #1a1a1a; display: flex; flex-direction: column; overflow-y: auto; }
.sb-mail-list-head { padding: 14px 16px 10px; border-bottom: 1px solid #c0b6a0; display: flex; align-items: baseline; justify-content: space-between; }
.sb-mail-list-head h3 { margin: 0; font-family: 'Inter', sans-serif; font-size: 10px; font-weight: 800; letter-spacing: 0.2em; text-transform: uppercase; color: #6a6055; }
.sb-mail-list-head span { font-family: 'Inter', sans-serif; font-size: 10px; color: #c43a2c; font-weight: 700; }
.sb-mail-item { position: relative; padding: 14px 18px 14px 16px; border-bottom: 1px solid #e0d8c4; cursor: pointer; transition: background 0.12s; }
.sb-mail-item:hover { background: rgba(196,58,44,0.04); }
.sb-mail-item.active { background: #fff; padding-left: 22px; }
.sb-mail-item.active::before { content: ''; position: absolute; left: 0; top: 12px; bottom: 12px; width: 4px; background: #c43a2c; }
.sb-mail-item strong { display: block; font-family: 'Inter', sans-serif; font-size: 12px; font-weight: 800; letter-spacing: 0.04em; color: #1a1a1a; text-transform: uppercase; }
.sb-mail-item em { display: block; font-family: 'Playfair Display', 'Georgia', serif; font-size: 15px; font-style: italic; color: #1a1a1a; margin-top: 2px; line-height: 1.2; }
.sb-mail-item span { display: block; font-family: 'Georgia', serif; font-size: 12.5px; color: #4a4035; margin-top: 4px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; line-height: 1.4; }
.sb-mail-item time { position: absolute; top: 14px; right: 18px; font-family: 'Inter', sans-serif; font-size: 10.5px; color: #6a6055; font-weight: 600; }
.sb-mail-read { padding: 28px 32px; overflow-y: auto; background: #fdf9ec; }
.sb-mail-read header { padding-bottom: 14px; border-bottom: 2px solid #1a1a1a; margin-bottom: 18px; }
.sb-mail-rule { display: inline-block; width: 32px; height: 3px; background: #c43a2c; margin-bottom: 10px; }
.sb-mail-cat { display: block; font-family: 'Inter', sans-serif; font-size: 10.5px; font-weight: 800; letter-spacing: 0.22em; color: #c43a2c; margin-bottom: 6px; }
.sb-mail-read h2 { margin: 0 0 8px; font-family: 'Playfair Display', 'Georgia', serif; font-size: clamp(28px, 4vw, 44px); font-weight: 900; color: #1a1a1a; line-height: 0.96; letter-spacing: -0.02em; }
.sb-mail-read header p { margin: 0; font-family: 'Inter', sans-serif; font-size: 11.5px; color: #6a6055; letter-spacing: 0.04em; }
.sb-mail-read header p strong { color: #1a1a1a; font-weight: 700; }
.sb-mail-body { margin: 0 0 12px; font-size: 14.5px; color: #2a241c; line-height: 1.7; max-width: 540px; }
.sb-mail-lead { font-size: 16px; }
.sb-mail-drop { float: left; font-family: 'Playfair Display', 'Georgia', serif; font-size: 56px; font-weight: 900; line-height: 0.85; padding: 4px 8px 0 0; color: #c43a2c; }
@media (max-width: 720px) {
  .sb-mail { grid-template-columns: 1fr; grid-template-rows: auto auto auto; }
  .sb-mail-folders, .sb-mail-list { border-right: 0; border-bottom: 1px solid #1a1a1a; }
}
<div class="sb-mail">
  <aside class="sb-mail-folders" aria-label="Folders">
    <header>
      <strong>The Inbox</strong>
      <small>Vol. XII · No. 47</small>
    </header>
    <nav aria-label="Folders">
      <ul>
        <li><a href="#!" aria-current="page">Inbox<span>12</span></a></li>
        <li><a href="#!">Starred</a></li>
        <li><a href="#!">Drafts<span class="sb-mail-muted">3</span></a></li>
        <li><a href="#!">Sent</a></li>
        <li><a href="#!">Archive</a></li>
        <li><a href="#!">Trash</a></li>
      </ul>
    </nav>
    <footer>
      <span class="sb-mail-bullet" aria-hidden="true">•</span>
      Editorial since 1923
    </footer>
  </aside>
  <section class="sb-mail-list" aria-label="Message list">
    <header class="sb-mail-list-head">
      <h3>This morning</h3>
      <span>4 unread</span>
    </header>
    <article class="sb-mail-item">
      <strong>Anya Petrova</strong>
      <em>Re: Q3 launch deck</em>
      <span>Looks great — one tweak on slide 14.</span>
      <time>9:14</time>
    </article>
    <article class="sb-mail-item active">
      <strong>Daichi Sato</strong>
      <em>Friday demo recap</em>
      <span>Here's the recording + the action items we…</span>
      <time>11:42</time>
    </article>
    <article class="sb-mail-item">
      <strong>Lena Müller</strong>
      <em>Invoice #2143</em>
      <span>Attached, due in 30 days.</span>
      <time>13:08</time>
    </article>
    <article class="sb-mail-item">
      <strong>Carlos Reyes</strong>
      <em>Coffee Thursday?</em>
      <span>I'll be near the office around 11.</span>
      <time>14:30</time>
    </article>
  </section>
  <article class="sb-mail-read">
    <header>
      <span class="sb-mail-rule" aria-hidden="true"></span>
      <span class="sb-mail-cat">DAILY DIGEST · OPS</span>
      <h2>Friday demo recap.</h2>
      <p>From <strong>Daichi Sato</strong> &middot; <time>11:42 AM</time> &middot; 4 min read</p>
    </header>
    <p class="sb-mail-body sb-mail-lead"><span class="sb-mail-drop">H</span>ey team — here's the recording from today plus the four action items we landed on. I'll send a separate Loom for the dashboard rewrite tomorrow.</p>
    <p class="sb-mail-body">A short follow-up on Anya's slide-14 tweak: I think we can land that before the demo on Tuesday.</p>
  </article>
</div>
06 / 23
Dual Sidebar
Pure CSS
v3.4 · Feb 2026

Quick start.

Install the package and ship your first page in under five minutes. The CLI scaffolds a new project; the dev server starts on port 4321.

Installation

Run npm create birch@latest. The interactive CLI asks for your project name and template choice.

Run the dev server

Start the dev server with npm run dev. Hot-reload is enabled by default — edits to any file refresh the browser instantly.

Build for production with npm run build; the output is a static dist/ ready for any host.

Scandinavian docs — warm beige paper, forest-green section nav, clay-red "active" pill, soft greys for the TOC. Three-column shell (left section nav, centre article, right rail of in-page anchors). Both sidebars sticky; centre flows. Like reading a Hay catalogue.
Try it
.sb-dual {
  display: grid; grid-template-columns: 220px 1fr 200px;
  min-height: 480px;
  font-family: 'Inter', system-ui, -apple-system, sans-serif;
  background: #f4ede0;
  color: #1f3327;
  border-radius: 6px; overflow: hidden;
}
.sb-dual-nav, .sb-dual-toc {
  position: sticky; top: 0; align-self: start;
  min-height: 480px; padding: 22px 18px;
  background: #ece2cf;
  border-right: 1px solid #c8b896;
  display: flex; flex-direction: column; gap: 14px;
}
.sb-dual-nav header { display: flex; align-items: center; gap: 10px; padding-bottom: 14px; border-bottom: 2px solid #c8b896; margin-bottom: 4px; }
.sb-dual-mark { width: 28px; height: 28px; flex-shrink: 0; border-radius: 50%; background: #2f5d40; box-shadow: inset 0 0 0 3px #ece2cf, 0 0 0 1px #2f5d40; }
.sb-dual-name { font-size: 15px; font-weight: 800; letter-spacing: -0.01em; color: #1f3327; line-height: 1; }
.sb-dual-name small { display: block; font-size: 9.5px; color: #8a6f4a; font-weight: 700; letter-spacing: 0.18em; margin-top: 4px; text-transform: uppercase; }
.sb-dual-toc { border-right: 0; border-left: 1px solid #c8b896; background: #f4ede0; }
.sb-dual-nav h3, .sb-dual-toc h3 {
  margin: 12px 0 6px; font-size: 10.5px; font-weight: 800;
  letter-spacing: 0.18em; text-transform: uppercase; color: #8a6f4a;
}
.sb-dual-nav h3:first-of-type, .sb-dual-toc h3:first-of-type { margin-top: 0; }
.sb-dual-nav ul, .sb-dual-toc ul { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 0; }
.sb-dual-nav a, .sb-dual-toc a {
  display: block;
  padding: 7px 10px;
  font-size: 13px; color: #4a5d52; text-decoration: none;
  border-left: 2px solid transparent;
  transition: color 0.14s, border-color 0.14s, background 0.14s;
}
.sb-dual-nav a:hover, .sb-dual-toc a:hover { color: #1f3327; border-left-color: #c8b896; background: rgba(0,0,0,0.03); }
.sb-dual-nav a[aria-current="page"] {
  color: #fff; font-weight: 700;
  background: #c45a3e;
  border-radius: 4px;
  border-left-color: transparent;
  padding-left: 10px;
}
.sb-dual-toc a[aria-current="true"] { color: #2f5d40; font-weight: 700; border-left-color: #2f5d40; }
.sb-dual-edit { margin: auto 0 0; padding-top: 12px; border-top: 1px solid #c8b896; font-size: 11px; color: #8a6f4a; font-style: italic; }
.sb-dual-main { padding: 32px 36px; max-width: 100%; overflow-x: hidden; background: #faf5ea; }
.sb-dual-eye { font-size: 11px; font-weight: 800; letter-spacing: 0.16em; color: #c45a3e; text-transform: uppercase; }
.sb-dual-main h1 { margin: 6px 0 10px; font-size: clamp(32px, 4.5vw, 52px); font-weight: 900; color: #1f3327; letter-spacing: -0.03em; line-height: 1; }
.sb-dual-main h2 { margin: 22px 0 8px; font-size: 18px; font-weight: 800; color: #2f5d40; letter-spacing: -0.01em; }
.sb-dual-lead { font-size: 16px; line-height: 1.6; color: #2a3d31; max-width: 540px; margin-bottom: 4px; }
.sb-dual-main p { margin: 0 0 10px; font-size: 13.5px; color: #2a3d31; line-height: 1.7; max-width: 560px; }
.sb-dual-main code { font-family: 'JetBrains Mono', monospace; font-size: 12.5px; color: #c45a3e; background: rgba(196,90,62,0.08); padding: 1px 6px; border-radius: 3px; font-weight: 600; }
@media (max-width: 720px) {
  .sb-dual { grid-template-columns: 1fr; }
  .sb-dual-nav, .sb-dual-toc { position: static; min-height: auto; border: 0; border-bottom: 1px solid #c8b896; }
}
<div class="sb-dual">
  <aside class="sb-dual-nav" aria-label="Section navigation">
    <header>
      <span class="sb-dual-mark" aria-hidden="true"></span>
      <span class="sb-dual-name">Birch<small>docs</small></span>
    </header>
    <h3>Getting started</h3>
    <nav aria-label="Section navigation">
      <ul>
        <li><a href="#!">Installation</a></li>
        <li><a href="#!" aria-current="page">Quick start</a></li>
        <li><a href="#!">Configuration</a></li>
        <li><a href="#!">Examples</a></li>
      </ul>
    </nav>
    <h3>Concepts</h3>
    <nav aria-label="Concepts">
      <ul>
        <li><a href="#!">Routing</a></li>
        <li><a href="#!">Layouts</a></li>
        <li><a href="#!">Data fetching</a></li>
      </ul>
    </nav>
    <h3>Recipes</h3>
    <nav aria-label="Recipes">
      <ul>
        <li><a href="#!">Auth</a></li>
        <li><a href="#!">Forms</a></li>
      </ul>
    </nav>
  </aside>
  <main class="sb-dual-main">
    <span class="sb-dual-eye">v3.4 · Feb 2026</span>
    <h1>Quick start.</h1>
    <p class="sb-dual-lead">Install the package and ship your first page in under five minutes. The CLI scaffolds a new project; the dev server starts on port 4321.</p>
    <h2>Installation</h2>
    <p>Run <code>npm create birch@latest</code>. The interactive CLI asks for your project name and template choice.</p>
    <h2>Run the dev server</h2>
    <p>Start the dev server with <code>npm run dev</code>. Hot-reload is enabled by default — edits to any file refresh the browser instantly.</p>
    <p>Build for production with <code>npm run build</code>; the output is a static <code>dist/</code> ready for any host.</p>
  </main>
  <aside class="sb-dual-toc" aria-label="On this page">
    <h3>On this page</h3>
    <nav aria-label="On this page">
      <ul>
        <li><a href="#!" aria-current="true">Installation</a></li>
        <li><a href="#!">Run the dev server</a></li>
        <li><a href="#!">Build for prod</a></li>
        <li><a href="#!">Deploy</a></li>
      </ul>
    </nav>
    <p class="sb-dual-edit">Edit on GitHub →</p>
  </aside>
</div>
07 / 23
Mini Icon Rail
Pure CSS
▸ NOW PLAYING · LEVEL 47

Hover
the rail →

Hover or focus to expand the rail. Each icon glows in its own neon colour — magenta, yellow, cyan, lime — like a Shibuya arcade marquee at midnight.

#tokyo#midnight#arcade#neon
Tokyo neon arcade — deep midnight rail with electric-yellow + magenta glows that pulse on hover. Hover or focus a link to expand the rail from 64px to 240px and reveal the labels. Pure CSS via width transition; aria-label carries meaning when collapsed.
Try it
.sb-mini {
  position: relative;
  display: grid; grid-template-columns: 64px 1fr;
  min-height: 480px;
  font-family: 'Helvetica Neue', system-ui, -apple-system, sans-serif;
  background: #0a0014; color: #f7f4ff;
  border-radius: 14px; overflow: hidden;
  isolation: isolate;
}
.sb-mini-grid {
  position: absolute; inset: 0;
  background:
    linear-gradient(rgba(255,0,228,0.12) 1px, transparent 1px) 0 0 / 100% 28px,
    linear-gradient(90deg, rgba(0,229,255,0.1) 1px, transparent 1px) 0 0 / 28px 100%,
    radial-gradient(60% 40% at 80% 20%, rgba(255,0,228,0.22), transparent 70%),
    radial-gradient(60% 40% at 20% 80%, rgba(0,229,255,0.22), transparent 70%),
    #0a0014;
  z-index: 0;
}
.sb-mini-rail {
  position: relative; z-index: 2;
  background: linear-gradient(180deg, rgba(20,5,40,0.92) 0%, rgba(8,0,20,0.96) 100%);
  border-right: 1px solid rgba(255,0,228,0.4);
  box-shadow: 1px 0 24px rgba(255,0,228,0.25), inset -1px 0 0 rgba(255,0,228,0.5);
  padding: 14px 0; display: flex; flex-direction: column; gap: 12px;
  width: 64px; overflow: hidden;
  transition: width 0.28s cubic-bezier(0.32, 0.72, 0, 1);
}
.sb-mini-rail:hover, .sb-mini-rail:focus-within { width: 240px; }
.sb-mini-brand {
  display: flex; align-items: center; gap: 12px;
  padding: 0 12px; height: 40px;
  text-decoration: none; flex-shrink: 0;
  white-space: nowrap;
}
.sb-mini-mark {
  width: 40px; height: 40px; flex-shrink: 0;
  display: flex; align-items: center; justify-content: center;
  border-radius: 8px;
  background: linear-gradient(135deg, #ff00e4 0%, #ffd400 100%);
  color: #0a0014; font-family: 'Courier New', monospace; font-size: 18px; font-weight: 900;
  box-shadow: 0 0 0 1px rgba(255,212,0,0.5), 0 0 20px rgba(255,0,228,0.6);
}
.sb-mini-brand-name { font-family: 'Courier New', monospace; font-size: 16px; font-weight: 800; letter-spacing: 0.08em; color: #ffd400; text-shadow: 0 0 8px rgba(255,212,0,0.6); }
.sb-mini-brand-name small { display: block; font-size: 9px; letter-spacing: 0.4em; color: #ff00e4; margin-top: -2px; font-weight: 600; }
.sb-mini-rail ul { list-style: none; margin: 0; padding: 4px 8px; display: flex; flex-direction: column; gap: 4px; }
.sb-mini-rail a {
  position: relative;
  display: flex; align-items: center; gap: 14px;
  padding: 10px 12px; border-radius: 8px;
  font-family: 'Courier New', monospace; font-size: 13px; font-weight: 700;
  letter-spacing: 0.08em; color: #d4c5e8; text-decoration: none;
  white-space: nowrap; overflow: hidden;
  border: 1px solid transparent;
  transition: background 0.18s, color 0.18s, border-color 0.18s, box-shadow 0.18s;
}
.sb-mini-rail a:hover, .sb-mini-rail a:focus-visible {
  background: rgba(255,0,228,0.1);
  border-color: rgba(255,0,228,0.45);
  color: #fff;
  box-shadow: 0 0 16px rgba(255,0,228,0.35), inset 0 0 16px rgba(255,0,228,0.1);
}
.sb-mini-rail a[aria-current="page"] {
  background: linear-gradient(90deg, rgba(255,212,0,0.18), rgba(255,0,228,0.18));
  border-color: #ffd400;
  color: #fff;
  box-shadow: 0 0 24px rgba(255,212,0,0.45), inset 0 0 12px rgba(255,212,0,0.15);
}
.sb-mini-rail a[aria-current="page"]::after {
  content: ''; position: absolute; left: 0; top: 6px; bottom: 6px; width: 3px;
  background: #ffd400; border-radius: 0 3px 3px 0;
  box-shadow: 0 0 12px #ffd400, 0 0 24px rgba(255,212,0,0.6);
}
.sb-mini-ico { width: 20px; flex-shrink: 0; text-align: center; font-size: 14px; }
.sb-mini-rail li:nth-child(1) .sb-mini-ico { color: #ffd400; text-shadow: 0 0 8px #ffd400; }
.sb-mini-rail li:nth-child(2) .sb-mini-ico { color: #00e5ff; text-shadow: 0 0 8px #00e5ff; }
.sb-mini-rail li:nth-child(3) .sb-mini-ico { color: #ff00e4; text-shadow: 0 0 8px #ff00e4; }
.sb-mini-rail li:nth-child(4) .sb-mini-ico { color: #c2ff00; text-shadow: 0 0 8px #c2ff00; }
.sb-mini-rail li:nth-child(5) .sb-mini-ico { color: #ff8a00; text-shadow: 0 0 8px #ff8a00; }
.sb-mini-rail li:nth-child(6) .sb-mini-ico { color: #00ffa3; text-shadow: 0 0 8px #00ffa3; }
.sb-mini-lbl { opacity: 0; transition: opacity 0.22s ease; }
.sb-mini-rail:hover .sb-mini-lbl, .sb-mini-rail:focus-within .sb-mini-lbl { opacity: 1; }
.sb-mini-foot { margin-top: auto; display: flex; align-items: center; gap: 10px; padding: 10px 16px; border-top: 1px solid rgba(255,0,228,0.25); white-space: nowrap; overflow: hidden; }
.sb-mini-pulse { width: 8px; height: 8px; border-radius: 50%; background: #c2ff00; flex-shrink: 0; box-shadow: 0 0 10px #c2ff00, 0 0 20px rgba(194,255,0,0.5); animation: sb-mini-pulse 1.4s ease-in-out infinite; }
@keyframes sb-mini-pulse { 0%, 100% { opacity: 1; transform: scale(1); } 50% { opacity: 0.5; transform: scale(1.2); } }
.sb-mini-foot-lbl { font-family: 'Courier New', monospace; font-size: 11px; color: #c2ff00; letter-spacing: 0.06em; opacity: 0; transition: opacity 0.22s ease; }
.sb-mini-rail:hover .sb-mini-foot-lbl, .sb-mini-rail:focus-within .sb-mini-foot-lbl { opacity: 1; }
.sb-mini-main { position: relative; z-index: 1; padding: 30px 32px; display: flex; flex-direction: column; gap: 14px; }
.sb-mini-eye { font-family: 'Courier New', monospace; font-size: 11px; letter-spacing: 0.18em; color: #c2ff00; text-shadow: 0 0 8px rgba(194,255,0,0.5); }
.sb-mini-main h2 {
  margin: 0; font-size: clamp(28px, 5vw, 56px); font-weight: 900; line-height: 0.95;
  background: linear-gradient(135deg, #ffd400 0%, #ff00e4 50%, #00e5ff 100%);
  -webkit-background-clip: text; background-clip: text;
  color: transparent;
  letter-spacing: -0.03em;
  filter: drop-shadow(0 0 20px rgba(255,0,228,0.4));
}
.sb-mini-main p { margin: 0; font-size: 13px; color: #d4c5e8; line-height: 1.6; max-width: 440px; }
.sb-mini-main code { font-family: 'Courier New', monospace; font-size: 12px; color: #ffd400; background: rgba(255,212,0,0.1); padding: 1px 5px; border-radius: 3px; border: 1px solid rgba(255,212,0,0.25); }
.sb-mini-tags { display: flex; flex-wrap: wrap; gap: 6px; margin-top: auto; }
.sb-mini-tags span { font-family: 'Courier New', monospace; font-size: 10.5px; padding: 4px 10px; border-radius: 11px; border: 1px solid rgba(0,229,255,0.4); color: #00e5ff; background: rgba(0,229,255,0.06); letter-spacing: 0.06em; }
@media (prefers-reduced-motion: reduce) {
  .sb-mini-rail, .sb-mini-lbl, .sb-mini-foot-lbl, .sb-mini-pulse { transition: none; animation: none; }
}
<div class="sb-mini">
  <div class="sb-mini-grid" aria-hidden="true"></div>
  <aside class="sb-mini-rail" aria-label="Primary">
    <a class="sb-mini-brand" href="#!" aria-label="Neon home">
      <span class="sb-mini-mark" aria-hidden="true">N</span>
      <span class="sb-mini-brand-name">NEON<small>1989</small></span>
    </a>
    <nav aria-label="Primary">
      <ul>
        <li><a href="#!" aria-label="Arcade" aria-current="page" data-key="01"><span class="sb-mini-ico" aria-hidden="true">◆</span><span class="sb-mini-lbl">Arcade</span></a></li>
        <li><a href="#!" aria-label="Library"   data-key="02"><span class="sb-mini-ico" aria-hidden="true">▤</span><span class="sb-mini-lbl">Library</span></a></li>
        <li><a href="#!" aria-label="Squad"     data-key="03"><span class="sb-mini-ico" aria-hidden="true">◑</span><span class="sb-mini-lbl">Squad</span></a></li>
        <li><a href="#!" aria-label="Trophies"  data-key="04"><span class="sb-mini-ico" aria-hidden="true">★</span><span class="sb-mini-lbl">Trophies</span></a></li>
        <li><a href="#!" aria-label="Store"     data-key="05"><span class="sb-mini-ico" aria-hidden="true">◊</span><span class="sb-mini-lbl">Store</span></a></li>
        <li><a href="#!" aria-label="Settings"  data-key="06"><span class="sb-mini-ico" aria-hidden="true">⚙</span><span class="sb-mini-lbl">Settings</span></a></li>
      </ul>
    </nav>
    <footer class="sb-mini-foot">
      <span class="sb-mini-pulse" aria-hidden="true"></span>
      <span class="sb-mini-foot-lbl">Online · 24,891</span>
    </footer>
  </aside>
  <main class="sb-mini-main">
    <span class="sb-mini-eye">▸ NOW PLAYING · LEVEL 47</span>
    <h2>Hover<br/>the rail →</h2>
    <p>Hover or focus to expand the rail. Each icon glows in its own neon colour — magenta, yellow, cyan, lime — like a Shibuya arcade marquee at midnight.</p>
    <div class="sb-mini-tags">
      <span>#tokyo</span><span>#midnight</span><span>#arcade</span><span>#neon</span>
    </div>
  </main>
</div>
08 / 23
Sticky Filter Sidebar
Pure CSS
FW · 26 Collection

Knitwear.

238 pieces · Sorted by Newest

01
02
03
04
05
06
Luxury e-commerce — cream paper, brass-gold accents, chocolate copy. The kind of filter rail you'd find at Aesop or Hermès. Native <details> for collapsible groups gives keyboard support and aria-expanded for free; accent-color tints the checkboxes.
Try it
.sb-stk {
  display: grid; grid-template-columns: 240px 1fr;
  min-height: 480px;
  font-family: 'Cormorant Garamond', 'Georgia', serif;
  background: #f6efe1;
  color: #3c2818;
  border-radius: 0;
  overflow: hidden;
  accent-color: #b8924a;
  border: 1px solid #b8924a;
}
.sb-stk-side {
  position: sticky; top: 0; align-self: start;
  min-height: 480px; padding: 22px 18px;
  background: #ede2cb;
  border-right: 1px solid #b8924a;
  font-size: 13px;
}
.sb-stk-side header { display: grid; grid-template-columns: auto 1fr auto; align-items: baseline; gap: 8px; padding-bottom: 14px; border-bottom: 1px solid #b8924a; margin-bottom: 12px; }
.sb-stk-tag { font-family: 'Inter', sans-serif; font-size: 9.5px; font-weight: 800; letter-spacing: 0.22em; color: #b8924a; text-transform: uppercase; align-self: end; }
.sb-stk-side h3 { grid-column: 1 / -1; margin: 0; font-size: 26px; font-weight: 500; font-style: italic; color: #3c2818; letter-spacing: -0.01em; line-height: 1; }
.sb-stk-clear { font-family: 'Inter', sans-serif; font-size: 10.5px; font-style: italic; color: #b8924a; cursor: pointer; align-self: end; text-decoration: underline; text-underline-offset: 3px; }
.sb-stk-side details { padding: 12px 0; border-bottom: 1px solid #d4c39c; }
.sb-stk-side details:last-of-type { border-bottom: 0; }
.sb-stk-side summary { cursor: pointer; padding: 4px 0; font-family: 'Inter', sans-serif; font-size: 10.5px; font-weight: 800; letter-spacing: 0.18em; text-transform: uppercase; color: #3c2818; list-style: none; display: flex; align-items: center; justify-content: space-between; }
.sb-stk-side summary::-webkit-details-marker { display: none; }
.sb-stk-side summary em { font-family: 'Cormorant Garamond', serif; font-size: 12px; font-style: italic; font-weight: 500; color: #b8924a; letter-spacing: 0; text-transform: none; }
.sb-stk-side summary::after { content: '+'; font-family: 'Cormorant Garamond', serif; font-size: 18px; font-weight: 400; color: #b8924a; margin-left: 8px; transition: transform 0.2s; }
.sb-stk-side details[open] summary::after { content: '−'; }
.sb-stk-side ul { list-style: none; margin: 10px 0 4px; padding: 0; display: flex; flex-direction: column; gap: 8px; }
.sb-stk-side label { display: grid; grid-template-columns: auto 1fr auto; align-items: center; gap: 10px; color: #5a4030; cursor: pointer; font-family: 'Cormorant Garamond', serif; font-size: 14.5px; font-weight: 500; }
.sb-stk-side label b { font-family: 'Inter', sans-serif; font-size: 10px; font-weight: 600; color: #b8924a; letter-spacing: 0.04em; }
.sb-stk-side input[type="checkbox"] { appearance: none; width: 14px; height: 14px; border: 1px solid #b8924a; background: transparent; cursor: pointer; flex-shrink: 0; transition: background 0.14s; position: relative; }
.sb-stk-side input[type="checkbox"]:checked { background: #b8924a; }
.sb-stk-side input[type="checkbox"]:checked::after { content: ''; position: absolute; left: 4px; top: 1px; width: 4px; height: 8px; border: solid #f6efe1; border-width: 0 2px 2px 0; transform: rotate(45deg); }
.sb-stk-side input[type="checkbox"]:focus-visible { outline: 2px solid #b8924a; outline-offset: 2px; }
.sb-stk-chips { display: flex; flex-wrap: wrap; gap: 6px; padding-top: 10px; }
.sb-stk-chips label { position: relative; cursor: pointer; display: inline-flex; }
.sb-stk-chips input { position: absolute; width: 1px; height: 1px; opacity: 0; clip: rect(0 0 0 0); }
.sb-stk-chips input:focus-visible + span { outline: 2px solid #b8924a; outline-offset: 2px; }
.sb-stk-chips span {
  display: inline-block; padding: 6px 12px;
  font-family: 'Inter', sans-serif; font-size: 11px; font-weight: 700;
  letter-spacing: 0.06em;
  background: transparent; color: #3c2818;
  border: 1px solid #b8924a;
  transition: background 0.14s, color 0.14s;
}
.sb-stk-chips input:checked + span { background: #3c2818; color: #f6efe1; border-color: #3c2818; }
.sb-stk-main { padding: 32px 36px; background: #faf3e3; }
.sb-stk-mhead { padding-bottom: 16px; border-bottom: 1px solid #d4c39c; margin-bottom: 22px; }
.sb-stk-eye { font-family: 'Inter', sans-serif; font-size: 10.5px; font-weight: 800; letter-spacing: 0.22em; color: #b8924a; text-transform: uppercase; }
.sb-stk-main h2 { margin: 4px 0 6px; font-size: clamp(36px, 5vw, 56px); font-weight: 500; color: #3c2818; letter-spacing: -0.02em; line-height: 1; font-style: italic; }
.sb-stk-main p { margin: 0; font-family: 'Inter', sans-serif; font-size: 11.5px; color: #6a4d35; letter-spacing: 0.04em; }
.sb-stk-main p strong { color: #3c2818; font-weight: 700; }
.sb-stk-main p em { color: #b8924a; font-style: italic; font-weight: 600; }
.sb-stk-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 14px; }
.sb-stk-tile { position: relative; aspect-ratio: 3/4; background: linear-gradient(160deg, #ede2cb 0%, #d8c8a8 100%); border: 1px solid #d4c39c; }
.sb-stk-tile::after { content: ''; position: absolute; inset: 8px; border: 1px dashed rgba(184,146,74,0.4); }
.sb-stk-num { position: absolute; bottom: 14px; right: 14px; font-family: 'Inter', sans-serif; font-size: 9.5px; font-weight: 700; letter-spacing: 0.16em; color: #b8924a; }
@media (max-width: 720px) {
  .sb-stk { grid-template-columns: 1fr; }
  .sb-stk-side { position: static; min-height: auto; border-right: 0; border-bottom: 1px solid #b8924a; }
  .sb-stk-grid { grid-template-columns: repeat(2, 1fr); }
}
<div class="sb-stk">
  <aside class="sb-stk-side" aria-label="Filters">
    <header>
      <span class="sb-stk-tag">Refine</span>
      <h3>Filters</h3>
      <span class="sb-stk-clear">Clear all</span>
    </header>
    <details open>
      <summary>Category <em>4</em></summary>
      <ul>
        <li><label><input type="checkbox" name="cat" /> <span>Tops</span><b>148</b></label></li>
        <li><label><input type="checkbox" name="cat" checked /> <span>Knitwear</span><b>62</b></label></li>
        <li><label><input type="checkbox" name="cat" /> <span>Outerwear</span><b>94</b></label></li>
        <li><label><input type="checkbox" name="cat" /> <span>Trousers</span><b>76</b></label></li>
      </ul>
    </details>
    <details open>
      <summary>Size <em>5</em></summary>
      <div class="sb-stk-chips">
        <label><input type="radio" name="sz" /><span>XS</span></label>
        <label><input type="radio" name="sz" /><span>S</span></label>
        <label><input type="radio" name="sz" checked /><span>M</span></label>
        <label><input type="radio" name="sz" /><span>L</span></label>
        <label><input type="radio" name="sz" /><span>XL</span></label>
      </div>
    </details>
    <details>
      <summary>Material</summary>
      <ul>
        <li><label><input type="checkbox" name="mt" /> <span>Cashmere</span><b>18</b></label></li>
        <li><label><input type="checkbox" name="mt" /> <span>Merino wool</span><b>34</b></label></li>
        <li><label><input type="checkbox" name="mt" /> <span>Cotton</span><b>52</b></label></li>
        <li><label><input type="checkbox" name="mt" /> <span>Linen</span><b>21</b></label></li>
      </ul>
    </details>
    <details>
      <summary>Price</summary>
      <ul>
        <li><label><input type="checkbox" name="pr" /> <span>Under $200</span></label></li>
        <li><label><input type="checkbox" name="pr" /> <span>$200 – $400</span></label></li>
        <li><label><input type="checkbox" name="pr" /> <span>$400 – $800</span></label></li>
        <li><label><input type="checkbox" name="pr" /> <span>$800+</span></label></li>
      </ul>
    </details>
  </aside>
  <main class="sb-stk-main">
    <header class="sb-stk-mhead">
      <span class="sb-stk-eye">FW · 26 Collection</span>
      <h2>Knitwear.</h2>
      <p><strong>238</strong> pieces · Sorted by <em>Newest</em></p>
    </header>
    <div class="sb-stk-grid" aria-label="Product grid">
      <article class="sb-stk-tile"><span class="sb-stk-num">01</span></article>
      <article class="sb-stk-tile"><span class="sb-stk-num">02</span></article>
      <article class="sb-stk-tile"><span class="sb-stk-num">03</span></article>
      <article class="sb-stk-tile"><span class="sb-stk-num">04</span></article>
      <article class="sb-stk-tile"><span class="sb-stk-num">05</span></article>
      <article class="sb-stk-tile"><span class="sb-stk-num">06</span></article>
    </div>
  </main>
</div>
09 / 23
Floating Sidebar
Pure CSS
— Currently exhibiting

Light, &
the Quiet Room.

The sidebar floats inside the canvas with margin on all four sides — light visual weight, lots of negative space, generous serif type. The effect is gallery placard, not control panel.

Untitled (Cream / Black) Iva Ström, 2024 · oil on linen
Art gallery white-cube — pure ivory canvas, hairline rules, oversized serif numerals. The sidebar floats as a museum placard with margin on all four sides; an oversized chocolate-on-ivory accent number frames the active item. The sidebar as printed material.
Try it
.sb-flt {
  display: grid; grid-template-columns: auto 1fr;
  min-height: 480px;
  font-family: 'Cormorant Garamond', 'Georgia', serif;
  background: #fbf9f4; color: #1a1a1a;
  border-radius: 0; overflow: hidden;
  border: 1px solid #1a1a1a;
}
.sb-flt-side {
  margin: 22px 0 22px 22px; padding: 22px 18px; width: 220px;
  background: #fff;
  border: 1px solid #1a1a1a;
  display: flex; flex-direction: column; gap: 18px;
  align-self: start; position: sticky; top: 22px;
}
.sb-flt-brand { display: flex; align-items: center; gap: 12px; padding: 0 0 14px; border-bottom: 1px solid #1a1a1a; }
.sb-flt-mark { width: 14px; height: 14px; background: #1a1a1a; flex-shrink: 0; transform: rotate(45deg); }
.sb-flt-brand strong { display: block; font-size: 22px; font-weight: 500; font-style: italic; color: #1a1a1a; line-height: 1; letter-spacing: -0.01em; }
.sb-flt-brand em { display: block; font-family: 'Inter', sans-serif; font-size: 9.5px; font-style: normal; font-weight: 700; letter-spacing: 0.22em; color: #6a4d35; margin-top: 4px; text-transform: uppercase; }
.sb-flt-side ol { list-style: none; margin: 0; padding: 0; counter-reset: flt; display: flex; flex-direction: column; gap: 0; }
.sb-flt-side li { counter-increment: flt; }
.sb-flt-side a {
  display: grid; grid-template-columns: 32px 1fr;
  align-items: baseline; gap: 12px;
  padding: 11px 0;
  font-size: 16px; color: #1a1a1a; text-decoration: none;
  border-bottom: 1px dotted #d4cabc;
  transition: padding-left 0.16s, color 0.16s;
}
.sb-flt-side a::before {
  content: counter(flt, decimal-leading-zero);
  font-family: 'Inter', sans-serif;
  font-size: 9.5px;
  font-weight: 700;
  letter-spacing: 0.16em;
  color: #b8924a;
  align-self: center;
}
.sb-flt-side a:hover { padding-left: 4px; color: #6a4d35; }
.sb-flt-side a[aria-current="page"] { font-style: italic; padding-left: 4px; }
.sb-flt-side a[aria-current="page"]::before { color: #1a1a1a; }
.sb-flt-side a[aria-current="page"]::after {
  content: '·'; font-family: serif; font-size: 22px; line-height: 0; margin-left: 6px; color: #c45a3e;
}
.sb-flt-side footer { margin-top: auto; padding-top: 12px; border-top: 1px solid #1a1a1a; font-family: 'Inter', sans-serif; font-size: 10.5px; letter-spacing: 0.12em; color: #6a4d35; text-align: center; text-transform: uppercase; }
.sb-flt-main { padding: 32px 36px; display: flex; flex-direction: column; gap: 20px; }
.sb-flt-eye { font-family: 'Inter', sans-serif; font-size: 11px; font-weight: 600; letter-spacing: 0.2em; color: #c45a3e; text-transform: uppercase; }
.sb-flt-main h2 { margin: 0; font-size: clamp(36px, 5vw, 64px); font-weight: 500; color: #1a1a1a; letter-spacing: -0.03em; line-height: 0.95; }
.sb-flt-main h2 em { font-style: italic; font-weight: 500; color: #6a4d35; }
.sb-flt-main p { margin: 0; font-family: 'Cormorant Garamond', 'Georgia', serif; font-size: 17px; color: #3c2818; line-height: 1.55; max-width: 540px; }
.sb-flt-figure { margin: 12px 0 0; display: grid; grid-template-columns: 200px 1fr; gap: 22px; align-items: center; }
.sb-flt-frame { aspect-ratio: 1; background: #f4ede0; border: 1px solid #1a1a1a; position: relative; box-shadow: 8px 8px 0 #1a1a1a; }
.sb-flt-circ { position: absolute; left: 28%; top: 22%; width: 56px; height: 56px; border-radius: 50%; background: #1a1a1a; }
.sb-flt-figure figcaption strong { display: block; font-style: italic; font-size: 18px; font-weight: 500; color: #1a1a1a; }
.sb-flt-figure figcaption span { display: block; font-family: 'Inter', sans-serif; font-size: 11px; color: #6a4d35; letter-spacing: 0.04em; margin-top: 4px; }
@media (max-width: 720px) {
  .sb-flt { grid-template-columns: 1fr; }
  .sb-flt-side { width: auto; margin: 18px 18px 0; position: static; }
  .sb-flt-figure { grid-template-columns: 1fr; }
}
<div class="sb-flt">
  <aside class="sb-flt-side" aria-label="Primary">
    <header class="sb-flt-brand">
      <span class="sb-flt-mark" aria-hidden="true"></span>
      <div>
        <strong>Galerie</strong>
        <em>Salon No. 12</em>
      </div>
    </header>
    <nav aria-label="Primary">
      <ol>
        <li><a href="#!" aria-current="page">Overview</a></li>
        <li><a href="#!">Catalogue</a></li>
        <li><a href="#!">Artists</a></li>
        <li><a href="#!">Acquisitions</a></li>
        <li><a href="#!">Visit</a></li>
      </ol>
    </nav>
    <footer>
      <span>Open Tue—Sun · 10—18</span>
    </footer>
  </aside>
  <main class="sb-flt-main">
    <span class="sb-flt-eye">— Currently exhibiting</span>
    <h2><em>Light, &amp;</em><br/>the Quiet Room.</h2>
    <p>The sidebar floats inside the canvas with margin on all four sides — light visual weight, lots of negative space, generous serif type. The effect is gallery placard, not control panel.</p>
    <figure class="sb-flt-figure">
      <div class="sb-flt-frame" aria-hidden="true">
        <span class="sb-flt-circ"></span>
      </div>
      <figcaption>
        <strong>Untitled (Cream / Black)</strong>
        <span>Iva Ström, 2024 · oil on linen</span>
      </figcaption>
    </figure>
  </main>
</div>
10 / 23
Footer-pinned Sidebar
Pure CSS
▸ NOW LOADING · ARENA_47

Ready
Player One.

The user block at the bottom is pinned with margin-top: auto — it stays put no matter how many nav items appear above. Plasma green for "online" because nothing else has the right intensity.

2,481XP
87Wins
4.9Rank
Gaming console — onyx black with carbon-fibre texture, plasma-green accents, monospace HUD type. Nav at the top, a player-profile block pinned to the bottom of the sidebar. Pure CSS via flex column + margin-top: auto on the footer.
Try it
.sb-ftr {
  display: grid; grid-template-columns: 240px 1fr;
  min-height: 480px;
  font-family: 'Inter', system-ui, -apple-system, sans-serif;
  background: #0a0a0c;
  color: #d8e6dc;
  border-radius: 4px; overflow: hidden;
  border: 1px solid #00ff88;
  box-shadow: 0 0 32px rgba(0,255,136,0.15);
}
.sb-ftr-side {
  background:
    repeating-linear-gradient(45deg, transparent 0 8px, rgba(255,255,255,0.015) 8px 9px),
    linear-gradient(180deg, #14181a 0%, #0a0c0d 100%);
  border-right: 1px solid rgba(0,255,136,0.3);
  padding: 18px 14px;
  display: flex; flex-direction: column; gap: 16px;
  position: relative;
}
.sb-ftr-side::before {
  content: ''; position: absolute; right: -1px; top: 30%; bottom: 30%; width: 2px;
  background: #00ff88; box-shadow: 0 0 12px #00ff88;
}
.sb-ftr-brand { display: flex; align-items: center; gap: 12px; padding: 4px 6px 14px; border-bottom: 1px solid rgba(0,255,136,0.25); }
.sb-ftr-mark { width: 28px; height: 28px; flex-shrink: 0; background: linear-gradient(135deg, #00ff88 0%, #00b870 100%); transform: rotate(45deg); box-shadow: 0 0 16px rgba(0,255,136,0.6), inset 0 0 8px rgba(0,0,0,0.4); }
.sb-ftr-brand strong { font-family: 'Courier New', monospace; font-size: 14px; font-weight: 800; letter-spacing: 0.18em; color: #fff; line-height: 1; }
.sb-ftr-brand strong small { display: block; font-size: 9.5px; color: #00ff88; font-weight: 700; letter-spacing: 0.4em; margin-top: 4px; text-shadow: 0 0 8px rgba(0,255,136,0.5); }
.sb-ftr-side ul { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 3px; }
.sb-ftr-side a {
  position: relative;
  display: flex; align-items: center; gap: 12px;
  padding: 10px 12px; border-radius: 4px;
  font-family: 'Courier New', monospace; font-size: 13px; font-weight: 700;
  letter-spacing: 0.06em; color: #8aa094;
  text-decoration: none;
  border-left: 2px solid transparent;
  transition: background 0.14s, color 0.14s, border-color 0.14s;
}
.sb-ftr-side a:hover { background: rgba(0,255,136,0.08); color: #fff; border-left-color: rgba(0,255,136,0.5); }
.sb-ftr-side a[aria-current="page"] {
  background: rgba(0,255,136,0.14); color: #00ff88;
  border-left-color: #00ff88;
  text-shadow: 0 0 8px rgba(0,255,136,0.5);
  box-shadow: inset 0 0 16px rgba(0,255,136,0.08);
}
.sb-ftr-i { font-size: 11px; width: 14px; text-align: center; flex-shrink: 0; }
.sb-ftr-side a em { margin-left: auto; font-size: 9.5px; font-style: normal; padding: 1px 5px; border: 1px solid rgba(138,160,148,0.35); border-radius: 2px; color: #8aa094; }
.sb-ftr-side a[aria-current="page"] em { border-color: rgba(0,255,136,0.5); color: #00ff88; }
.sb-ftr-foot {
  margin-top: auto;
  display: flex; align-items: center; gap: 12px;
  padding: 12px;
  background: rgba(0,255,136,0.06);
  border: 1px solid rgba(0,255,136,0.25);
  border-radius: 4px;
}
.sb-ftr-avatar {
  width: 38px; height: 38px; flex-shrink: 0;
  background: linear-gradient(135deg,#00ff88,#00b870);
  color: #0a0a0c;
  display: flex; align-items: center; justify-content: center;
  font-family: 'Courier New', monospace; font-size: 13px; font-weight: 900;
  letter-spacing: 0.04em;
  clip-path: polygon(15% 0, 100% 0, 100% 85%, 85% 100%, 0 100%, 0 15%);
}
.sb-ftr-user { min-width: 0; flex: 1; }
.sb-ftr-user strong { display: block; font-family: 'Courier New', monospace; font-size: 12px; font-weight: 800; color: #fff; letter-spacing: 0.06em; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.sb-ftr-user span { display: flex; align-items: center; gap: 6px; font-family: 'Courier New', monospace; font-size: 10px; color: #8aa094; letter-spacing: 0.08em; margin-top: 3px; }
.sb-ftr-user span i { display: inline-block; width: 7px; height: 7px; border-radius: 50%; background: #00ff88; box-shadow: 0 0 8px #00ff88; animation: sb-ftr-blink 1.5s ease-in-out infinite; }
@keyframes sb-ftr-blink { 0%, 100% { opacity: 1; } 50% { opacity: 0.4; } }
@media (prefers-reduced-motion: reduce) { .sb-ftr-user span i { animation: none; } }
.sb-ftr-main { padding: 32px 36px; display: flex; flex-direction: column; gap: 20px; background: linear-gradient(180deg, #0e1212 0%, #0a0a0c 100%); }
.sb-ftr-main::before { content: ''; position: absolute; }
.sb-ftr-eye { font-family: 'Courier New', monospace; font-size: 11px; font-weight: 800; letter-spacing: 0.22em; color: #00ff88; text-shadow: 0 0 8px rgba(0,255,136,0.5); }
.sb-ftr-main h2 { margin: 0; font-family: 'Inter', sans-serif; font-size: clamp(36px, 5vw, 64px); font-weight: 900; line-height: 0.92; letter-spacing: -0.03em; color: #fff; text-shadow: 0 0 30px rgba(0,255,136,0.2); }
.sb-ftr-main p { margin: 0; font-size: 13.5px; color: #b8c4be; line-height: 1.6; max-width: 460px; }
.sb-ftr-main code { font-family: 'Courier New', monospace; font-size: 12px; color: #00ff88; background: rgba(0,255,136,0.1); padding: 1px 6px; border-radius: 2px; border: 1px solid rgba(0,255,136,0.3); }
.sb-ftr-stats { display: grid; grid-template-columns: repeat(3, 1fr); gap: 12px; max-width: 460px; margin-top: auto; }
.sb-ftr-stat { padding: 14px 16px; background: rgba(0,255,136,0.06); border: 1px solid rgba(0,255,136,0.25); clip-path: polygon(8px 0, 100% 0, 100% calc(100% - 8px), calc(100% - 8px) 100%, 0 100%, 0 8px); }
.sb-ftr-stats b { display: block; font-family: 'Courier New', monospace; font-size: 24px; font-weight: 900; color: #00ff88; letter-spacing: 0.04em; line-height: 1; text-shadow: 0 0 8px rgba(0,255,136,0.4); }
.sb-ftr-stats span { display: block; font-family: 'Courier New', monospace; font-size: 10px; color: #8aa094; letter-spacing: 0.18em; margin-top: 6px; text-transform: uppercase; }
@media (max-width: 720px) {
  .sb-ftr { grid-template-columns: 1fr; }
  .sb-ftr-side { border-right: 0; border-bottom: 1px solid rgba(255,255,255,0.06); }
  .sb-ftr-foot { margin-top: 8px; }
}
<div class="sb-ftr">
  <aside class="sb-ftr-side" aria-label="Primary">
    <header class="sb-ftr-brand">
      <span class="sb-ftr-mark" aria-hidden="true"></span>
      <div>
        <strong>QUANTUM<small>OS</small></strong>
      </div>
    </header>
    <nav aria-label="Primary">
      <ul>
        <li><a href="#!" aria-current="page"><span class="sb-ftr-i" aria-hidden="true">▶</span>Play<em>P</em></a></li>
        <li><a href="#!"><span class="sb-ftr-i" aria-hidden="true">▤</span>Library<em>L</em></a></li>
        <li><a href="#!"><span class="sb-ftr-i" aria-hidden="true">◇</span>Friends<em>F</em></a></li>
        <li><a href="#!"><span class="sb-ftr-i" aria-hidden="true">★</span>Trophies<em>T</em></a></li>
        <li><a href="#!"><span class="sb-ftr-i" aria-hidden="true">⚙</span>Settings<em>S</em></a></li>
      </ul>
    </nav>
    <footer class="sb-ftr-foot">
      <div class="sb-ftr-avatar" aria-hidden="true">VR</div>
      <div class="sb-ftr-user">
        <strong>vimal_raj_</strong>
        <span><i></i>Online · LVL 47</span>
      </div>
    </footer>
  </aside>
  <main class="sb-ftr-main">
    <span class="sb-ftr-eye">▸ NOW LOADING · ARENA_47</span>
    <h2>Ready<br/>Player One.</h2>
    <p>The user block at the bottom is pinned with <code>margin-top: auto</code> — it stays put no matter how many nav items appear above. Plasma green for "online" because nothing else has the right intensity.</p>
    <div class="sb-ftr-stats">
      <div class="sb-ftr-stat"><b>2,481</b><span>XP</span></div>
      <div class="sb-ftr-stat"><b>87</b><span>Wins</span></div>
      <div class="sb-ftr-stat"><b>4.9</b><span>Rank</span></div>
    </div>
  </main>
</div>
11 / 23
Push-content Sidebar
Pure CSS
Engineering Sprint 47
★ Established 1956

Form,
function,
flair.

Toggle the burger — content shifts right rather than being overlaid. Pure CSS on the grid template; works on desktop where both panes should remain visible.

01 Lounge Chair Walnut · Tan leather
02 Wire Stool Powder-coated steel
Mid-century modern — mustard sidebar, walnut content area, teal active pill. Eames-era graphic palette. Toggling the burger pushes the content right instead of overlaying it. Pure CSS via :has(:checked) on the grid template columns.
Try it
.sb-psh {
  display: grid; grid-template-columns: 0 1fr;
  min-height: 480px;
  font-family: 'Inter', system-ui, -apple-system, sans-serif;
  background: #f5e6c8;
  color: #2a1a10;
  border-radius: 0; overflow: hidden;
  transition: grid-template-columns 0.32s cubic-bezier(0.32, 0.72, 0, 1);
  border: 2px solid #2a1a10;
}
.sb-psh:has(.sb-psh-cb:checked) { grid-template-columns: 240px 1fr; }
.sb-psh-cb { position: absolute; width: 1px; height: 1px; opacity: 0; clip: rect(0 0 0 0); }
.sb-psh:has(.sb-psh-cb:focus-visible) .sb-psh-burger { outline: 2px solid #2a1a10; outline-offset: 2px; }
.sb-psh-side {
  background: #e8b04a;
  border-right: 2px solid #2a1a10;
  padding: 22px 18px; overflow: hidden; min-width: 0;
  display: flex; flex-direction: column; gap: 16px;
}
.sb-psh-side header { display: flex; align-items: center; gap: 10px; padding-bottom: 14px; border-bottom: 2px solid #2a1a10; white-space: nowrap; }
.sb-psh-mark { width: 22px; height: 22px; flex-shrink: 0; border-radius: 50%; background: #1c5e6e; box-shadow: 0 0 0 3px #e8b04a, 0 0 0 5px #2a1a10; }
.sb-psh-side header strong { font-family: 'Inter', sans-serif; font-size: 13px; font-weight: 800; letter-spacing: 0.12em; color: #2a1a10; }
.sb-psh-side h3 { margin: 0 0 6px; font-size: 10px; font-weight: 800; letter-spacing: 0.22em; text-transform: uppercase; color: #6b3d1c; white-space: nowrap; }
.sb-psh-side ul { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 2px; }
.sb-psh-side a { display: block; padding: 9px 12px; font-size: 14px; font-weight: 600; color: #2a1a10; text-decoration: none; white-space: nowrap; border-radius: 18px; transition: background 0.14s, color 0.14s; }
.sb-psh-side a:hover { background: rgba(42,26,16,0.1); }
.sb-psh-side a[aria-current="page"] { background: #1c5e6e; color: #f5e6c8; }
.sb-psh-quote { margin: auto 0 0; padding: 12px; background: rgba(28,94,110,0.12); border-left: 3px solid #1c5e6e; font-size: 12px; line-height: 1.5; color: #2a1a10; }
.sb-psh-quote em { font-style: italic; color: #1c5e6e; }
.sb-psh-quote span { display: block; font-size: 10.5px; color: #6b3d1c; font-weight: 700; letter-spacing: 0.04em; margin-top: 6px; font-style: normal; }
.sb-psh-main { display: flex; flex-direction: column; background: #4a3122; color: #f5e6c8; }
.sb-psh-bar {
  display: flex; align-items: center; gap: 14px;
  padding: 14px 22px;
  background: #3a2418;
  border-bottom: 2px solid #2a1a10;
}
.sb-psh-burger {
  width: 38px; height: 36px;
  display: inline-flex; align-items: center; justify-content: center;
  background: #e8b04a; color: #2a1a10;
  border: 2px solid #2a1a10;
  border-radius: 4px;
  cursor: pointer;
  box-shadow: 3px 3px 0 #2a1a10;
  transition: transform 0.12s, box-shadow 0.12s;
}
.sb-psh-burger:hover { background: #f0c266; }
.sb-psh-burger:active { transform: translate(2px, 2px); box-shadow: 1px 1px 0 #2a1a10; }
.sb-psh-burger span { display: inline-flex; flex-direction: column; gap: 3px; }
.sb-psh-burger i { display: block; width: 16px; height: 2px; background: #2a1a10; transition: transform 0.22s, opacity 0.22s; }
.sb-psh:has(.sb-psh-cb:checked) .sb-psh-burger i:nth-child(1) { transform: translateY(5px) rotate(45deg); }
.sb-psh:has(.sb-psh-cb:checked) .sb-psh-burger i:nth-child(2) { opacity: 0; }
.sb-psh:has(.sb-psh-cb:checked) .sb-psh-burger i:nth-child(3) { transform: translateY(-5px) rotate(-45deg); }
.sb-psh-bar strong { font-size: 16px; font-weight: 700; color: #f5e6c8; letter-spacing: -0.01em; }
.sb-psh-pill { margin-left: auto; padding: 5px 12px; font-size: 11px; font-weight: 800; letter-spacing: 0.12em; color: #2a1a10; background: #e8b04a; border-radius: 12px; text-transform: uppercase; }
.sb-psh-body { padding: 32px 36px; display: flex; flex-direction: column; gap: 18px; }
.sb-psh-eye { font-size: 11px; font-weight: 800; letter-spacing: 0.2em; color: #e8b04a; text-transform: uppercase; }
.sb-psh-main h2 { margin: 0; font-size: clamp(36px, 5.5vw, 64px); font-weight: 900; line-height: 0.92; color: #f5e6c8; letter-spacing: -0.03em; }
.sb-psh-main p  { margin: 0; font-size: 13.5px; color: rgba(245,230,200,0.85); line-height: 1.65; max-width: 460px; }
.sb-psh-main code { font-family: 'JetBrains Mono', monospace; font-size: 12px; color: #e8b04a; background: rgba(232,176,74,0.14); padding: 1px 6px; border-radius: 3px; border: 1px solid rgba(232,176,74,0.4); }
.sb-psh-cards { display: grid; grid-template-columns: repeat(2, minmax(0, 220px)); gap: 14px; margin-top: 6px; }
.sb-psh-card { padding: 16px 16px 14px; background: #5a4a3a; border-left: 4px solid #1c5e6e; display: flex; flex-direction: column; gap: 4px; }
.sb-psh-card-num { font-family: 'Inter', sans-serif; font-size: 10.5px; font-weight: 800; letter-spacing: 0.16em; color: #e8b04a; }
.sb-psh-card strong { font-size: 16px; font-weight: 700; color: #f5e6c8; letter-spacing: -0.01em; }
.sb-psh-card em { font-size: 11.5px; font-style: italic; color: rgba(245,230,200,0.7); }
.sr-only { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); }
@media (prefers-reduced-motion: reduce) { .sb-psh, .sb-psh-burger i { transition: none; } }
<div class="sb-psh">
  <input id="sb-psh-t" class="sb-psh-cb" type="checkbox" aria-label="Toggle navigation" />
  <aside class="sb-psh-side" aria-label="Primary">
    <header>
      <span class="sb-psh-mark" aria-hidden="true"></span>
      <strong>EAMES &amp; CO.</strong>
    </header>
    <h3>Workspaces</h3>
    <nav aria-label="Workspaces">
      <ul>
        <li><a href="#!" aria-current="page">Engineering</a></li>
        <li><a href="#!">Design</a></li>
        <li><a href="#!">Product</a></li>
        <li><a href="#!">Marketing</a></li>
        <li><a href="#!">Operations</a></li>
      </ul>
    </nav>
    <p class="sb-psh-quote"><em>"Details are not the details. They make the design."</em><br/><span>— Charles Eames</span></p>
  </aside>
  <main class="sb-psh-main">
    <header class="sb-psh-bar">
      <label class="sb-psh-burger" for="sb-psh-t" aria-controls="sb-psh-side">
        <span aria-hidden="true"><i></i><i></i><i></i></span>
        <span class="sr-only">Toggle nav</span>
      </label>
      <strong>Engineering</strong>
      <span class="sb-psh-pill">Sprint 47</span>
    </header>
    <div class="sb-psh-body">
      <span class="sb-psh-eye">★ Established 1956</span>
      <h2>Form,<br/>function,<br/>flair.</h2>
      <p>Toggle the burger — content shifts right rather than being overlaid. Pure CSS on the grid template; works on desktop where both panes should remain visible.</p>
      <div class="sb-psh-cards">
        <article class="sb-psh-card">
          <span class="sb-psh-card-num">01</span>
          <strong>Lounge Chair</strong>
          <em>Walnut · Tan leather</em>
        </article>
        <article class="sb-psh-card">
          <span class="sb-psh-card-num">02</span>
          <strong>Wire Stool</strong>
          <em>Powder-coated steel</em>
        </article>
      </div>
    </div>
  </main>
</div>
12 / 23
Overlay with Backdrop
Pure CSS
Polaris 63°N · 02:47
— Tonight, the sky moves slowly

The aurora
opens the menu.

Tap the burger — the drawer slides in over the page, the backdrop blurs the night sky behind. Tap the dim area or × to dismiss. Pure CSS, no JavaScript required.

Aurora glassmorphism — deep indigo night sky with drifting aurora-pink and cyan ribbons, frosted glass drawer with chromatic edge. Drawer slides in over the page; the backdrop blurs behind it. Pure CSS via backdrop-filter + :has(:checked).
Try it
.sb-ovl {
  position: relative; min-height: 480px;
  font-family: 'Inter', system-ui, -apple-system, sans-serif;
  background: radial-gradient(ellipse at top, #1a1947 0%, #060321 60%, #02010d 100%);
  color: #e8e6ff;
  border-radius: 14px; overflow: hidden;
  display: flex; flex-direction: column;
  isolation: isolate;
}
.sb-ovl-aurora-1, .sb-ovl-aurora-2 { position: absolute; pointer-events: none; z-index: 0; mix-blend-mode: screen; filter: blur(48px); }
.sb-ovl-aurora-1 {
  top: -10%; left: -10%; width: 80%; height: 70%;
  background: radial-gradient(ellipse at 50% 50%, rgba(255,82,170,0.55), transparent 60%);
  animation: sb-ovl-drift1 14s ease-in-out infinite alternate;
}
.sb-ovl-aurora-2 {
  bottom: -20%; right: -10%; width: 80%; height: 80%;
  background: radial-gradient(ellipse at 50% 50%, rgba(0,229,255,0.45), transparent 60%);
  animation: sb-ovl-drift2 18s ease-in-out infinite alternate;
}
.sb-ovl-stars {
  position: absolute; inset: 0; pointer-events: none; z-index: 1;
  background-image:
    radial-gradient(1px 1px at 14% 22%, #fff, transparent),
    radial-gradient(1px 1px at 38% 14%, rgba(255,255,255,0.7), transparent),
    radial-gradient(1px 1px at 52% 30%, rgba(255,255,255,0.5), transparent),
    radial-gradient(1px 1px at 73% 18%, #fff, transparent),
    radial-gradient(1px 1px at 88% 42%, rgba(255,255,255,0.7), transparent),
    radial-gradient(1px 1px at 22% 50%, rgba(255,255,255,0.5), transparent),
    radial-gradient(1px 1px at 64% 60%, #fff, transparent),
    radial-gradient(1px 1px at 12% 76%, rgba(255,255,255,0.5), transparent);
}
@keyframes sb-ovl-drift1 {
  from { transform: translate(0, 0); }
  to   { transform: translate(8%, 4%); }
}
@keyframes sb-ovl-drift2 {
  from { transform: translate(0, 0); }
  to   { transform: translate(-6%, -3%); }
}
@media (prefers-reduced-motion: reduce) { .sb-ovl-aurora-1, .sb-ovl-aurora-2 { animation: none; } }
.sb-ovl-cb { position: absolute; width: 1px; height: 1px; opacity: 0; clip: rect(0 0 0 0); }
.sb-ovl:has(.sb-ovl-cb:focus-visible) .sb-ovl-burger { outline: 2px solid #ff52aa; outline-offset: 2px; }
.sb-ovl-bar {
  position: relative; z-index: 2;
  display: flex; align-items: center; gap: 14px;
  padding: 14px 18px;
  background: rgba(8,4,32,0.45);
  backdrop-filter: blur(20px) saturate(1.4); -webkit-backdrop-filter: blur(20px) saturate(1.4);
  border-bottom: 1px solid rgba(255,255,255,0.12);
}
.sb-ovl-burger {
  width: 36px; height: 36px; border-radius: 8px;
  display: inline-flex; align-items: center; justify-content: center;
  background: rgba(255,255,255,0.1);
  border: 1px solid rgba(255,255,255,0.2);
  color: #fff; cursor: pointer;
  backdrop-filter: blur(8px);
  transition: background 0.14s;
}
.sb-ovl-burger:hover { background: rgba(255,255,255,0.16); }
.sb-ovl-burger span { display: inline-flex; flex-direction: column; gap: 3px; }
.sb-ovl-burger i { display: block; width: 16px; height: 2px; background: linear-gradient(90deg, #ff52aa, #00e5ff); border-radius: 2px; }
.sb-ovl-brand { display: flex; align-items: center; gap: 10px; font-size: 16px; font-weight: 800; letter-spacing: -0.01em; color: #fff; }
.sb-ovl-mark { width: 22px; height: 22px; border-radius: 50%; background: linear-gradient(135deg, #ff52aa 0%, #00e5ff 100%); box-shadow: 0 0 16px rgba(255,82,170,0.6); }
.sb-ovl-time { margin-left: auto; font-family: 'JetBrains Mono', monospace; font-size: 11px; color: #b8b6ff; letter-spacing: 0.06em; }
.sb-ovl-main { position: relative; z-index: 2; flex: 1; padding: 32px 36px; display: flex; flex-direction: column; gap: 16px; }
.sb-ovl-eye { font-size: 12px; color: #00e5ff; letter-spacing: 0.04em; font-style: italic; text-shadow: 0 0 12px rgba(0,229,255,0.5); }
.sb-ovl-main h2 {
  margin: 0; font-size: clamp(34px, 5vw, 60px); font-weight: 800; line-height: 0.95;
  color: #fff; letter-spacing: -0.03em;
  text-shadow: 0 0 30px rgba(255,82,170,0.3);
}
.sb-ovl-main h2 em { font-style: italic; background: linear-gradient(135deg, #ff52aa, #00e5ff); -webkit-background-clip: text; background-clip: text; color: transparent; }
.sb-ovl-main p  { margin: 0; font-size: 13.5px; color: rgba(232,230,255,0.85); line-height: 1.6; max-width: 460px; }
.sb-ovl-main code { font-family: 'JetBrains Mono', monospace; font-size: 12px; color: #ff52aa; background: rgba(255,82,170,0.12); padding: 1px 6px; border-radius: 3px; border: 1px solid rgba(255,82,170,0.3); }
.sb-ovl-backdrop {
  position: absolute; inset: 0;
  background: rgba(2,1,13,0.4);
  backdrop-filter: blur(14px) saturate(1.2); -webkit-backdrop-filter: blur(14px) saturate(1.2);
  cursor: pointer;
  opacity: 0; pointer-events: none; transition: opacity 0.26s ease;
  z-index: 3;
}
.sb-ovl:has(.sb-ovl-cb:checked) .sb-ovl-backdrop { opacity: 1; pointer-events: auto; }
.sb-ovl-drawer {
  position: absolute; left: 0; top: 0; bottom: 0; width: 280px;
  background: rgba(20,16,46,0.55);
  backdrop-filter: blur(28px) saturate(1.5); -webkit-backdrop-filter: blur(28px) saturate(1.5);
  border-right: 1px solid rgba(255,255,255,0.18);
  box-shadow:
    8px 0 32px rgba(0,0,0,0.4),
    inset -1px 0 0 rgba(255,82,170,0.5),
    inset 1px 1px 0 rgba(255,255,255,0.18);
  transform: translateX(-100%); transition: transform 0.32s cubic-bezier(0.32, 0.72, 0, 1);
  z-index: 4;
  padding: 18px 16px; display: flex; flex-direction: column; gap: 14px;
}
.sb-ovl:has(.sb-ovl-cb:checked) .sb-ovl-drawer { transform: translateX(0); }
.sb-ovl-drawer header { display: flex; align-items: center; justify-content: space-between; padding: 6px 6px 12px; border-bottom: 1px solid rgba(255,255,255,0.15); }
.sb-ovl-drawer header strong { font-size: 14px; font-weight: 800; color: #fff; letter-spacing: -0.01em; }
.sb-ovl-close { font-size: 22px; line-height: 1; color: rgba(255,255,255,0.7); cursor: pointer; padding: 0 8px; user-select: none; transition: color 0.14s; }
.sb-ovl-close:hover { color: #ff52aa; }
.sb-ovl-drawer ul { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 4px; }
.sb-ovl-drawer a { display: block; padding: 11px 14px; border-radius: 10px; font-size: 14px; font-weight: 600; color: rgba(255,255,255,0.85); text-decoration: none; border: 1px solid transparent; transition: background 0.14s, color 0.14s, border-color 0.14s; }
.sb-ovl-drawer a:hover { background: rgba(255,255,255,0.08); color: #fff; border-color: rgba(255,255,255,0.18); }
.sb-ovl-drawer a[aria-current="page"] { background: linear-gradient(90deg, rgba(255,82,170,0.22), rgba(0,229,255,0.22)); color: #fff; border-color: rgba(255,255,255,0.3); box-shadow: 0 0 16px rgba(255,82,170,0.3); }
.sb-ovl-foot { margin-top: auto; padding: 10px 6px 0; border-top: 1px solid rgba(255,255,255,0.15); display: flex; align-items: center; gap: 8px; font-family: 'JetBrains Mono', monospace; font-size: 11px; color: rgba(255,255,255,0.7); letter-spacing: 0.06em; }
.sb-ovl-dot { width: 8px; height: 8px; border-radius: 50%; background: #00ff9c; box-shadow: 0 0 12px #00ff9c; }
.sr-only { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); }
@media (prefers-reduced-motion: reduce) {
  .sb-ovl-drawer, .sb-ovl-backdrop { transition: none; }
}
<div class="sb-ovl">
  <span class="sb-ovl-aurora-1" aria-hidden="true"></span>
  <span class="sb-ovl-aurora-2" aria-hidden="true"></span>
  <span class="sb-ovl-stars" aria-hidden="true"></span>
  <input id="sb-ovl-t" class="sb-ovl-cb" type="checkbox" aria-label="Toggle navigation" />
  <header class="sb-ovl-bar">
    <label class="sb-ovl-burger" for="sb-ovl-t" aria-controls="sb-ovl-drawer">
      <span aria-hidden="true"><i></i><i></i><i></i></span>
      <span class="sr-only">Open menu</span>
    </label>
    <strong class="sb-ovl-brand">
      <span class="sb-ovl-mark" aria-hidden="true"></span>
      Polaris
    </strong>
    <span class="sb-ovl-time">63°N · 02:47</span>
  </header>
  <main class="sb-ovl-main">
    <span class="sb-ovl-eye">— Tonight, the sky moves slowly</span>
    <h2>The aurora<br/><em>opens</em> the menu.</h2>
    <p>Tap the burger — the drawer slides in over the page, the backdrop blurs the night sky behind. Tap the dim area or × to dismiss. Pure CSS, no JavaScript required.</p>
  </main>
  <label class="sb-ovl-backdrop" for="sb-ovl-t" aria-hidden="true"></label>
  <aside id="sb-ovl-drawer" class="sb-ovl-drawer" aria-label="Primary">
    <header>
      <strong>Menu</strong>
      <label class="sb-ovl-close" for="sb-ovl-t" aria-label="Close menu">×</label>
    </header>
    <nav aria-label="Primary">
      <ul>
        <li><a href="#!" aria-current="page">Home</a></li>
        <li><a href="#!">Library</a></li>
        <li><a href="#!">Saved</a></li>
        <li><a href="#!">Activity</a></li>
        <li><a href="#!">Settings</a></li>
      </ul>
    </nav>
    <footer class="sb-ovl-foot">
      <span class="sb-ovl-dot" aria-hidden="true"></span>
      Aurora · KP 5.4
    </footer>
  </aside>
</div>
13 / 23
Persistent Collapsible
Light JS
— Persistent state · localStorage

Less,
but better.

Click the toggle — the sidebar collapses to icons only. The state is written to localStorage, so a refresh keeps your choice. An inline IIFE applies the stored state before the page paints, preventing any flash.

Pure white canvas, ink-black type, one single red dot for the active item. Swiss-poster minimalism. Click the toggle to collapse; state persists across page reloads via localStorage. An inline IIFE applies the stored state before paint to avoid a flash.
Try it
.sb-prs {
  display: grid; grid-template-columns: 240px 1fr;
  min-height: 480px;
  font-family: 'Helvetica Neue', 'Inter', system-ui, sans-serif;
  background: #fafafa; color: #0a0a0a;
  border-radius: 0; overflow: hidden;
  transition: grid-template-columns 0.32s cubic-bezier(0.32, 0.72, 0, 1);
  border: 1px solid #0a0a0a;
}
.sb-prs[data-collapsed="true"] { grid-template-columns: 64px 1fr; }
.sb-prs-side {
  background: #fff;
  border-right: 1px solid #0a0a0a;
  padding: 18px 14px;
  display: flex; flex-direction: column; gap: 18px;
  overflow: hidden;
}
.sb-prs-toggle {
  display: flex; align-items: center; gap: 12px;
  padding: 10px 12px; border: 1px solid #0a0a0a; border-radius: 0;
  background: #fafafa; color: #0a0a0a;
  font: inherit; font-size: 11px; font-weight: 700; letter-spacing: 0.08em; text-transform: uppercase;
  cursor: pointer; transition: background 0.14s;
}
.sb-prs-toggle:hover { background: #0a0a0a; color: #fff; }
.sb-prs-toggle:hover .sb-prs-burger i { background: #fff; }
.sb-prs-burger { display: inline-flex; flex-direction: column; gap: 4px; }
.sb-prs-burger i { display: block; width: 14px; height: 1.5px; background: #0a0a0a; transition: transform 0.22s; }
.sb-prs[data-collapsed="true"] .sb-prs-burger i:nth-child(1) { transform: translateY(3px) rotate(45deg); }
.sb-prs[data-collapsed="true"] .sb-prs-burger i:nth-child(2) { transform: translateY(-2.5px) rotate(-45deg); }
.sb-prs-tlabel { font-size: 11px; font-weight: 700; letter-spacing: 0.1em; transition: opacity 0.18s; }
.sb-prs[data-collapsed="true"] .sb-prs-tlabel { opacity: 0; pointer-events: none; }
.sb-prs-brand { display: flex; align-items: center; gap: 12px; padding: 8px 6px; border-bottom: 1px solid #0a0a0a; padding-bottom: 18px; white-space: nowrap; }
.sb-prs-mark { width: 12px; height: 12px; border-radius: 50%; background: #e63946; flex-shrink: 0; }
.sb-prs-name { font-size: 26px; font-weight: 800; letter-spacing: -0.03em; color: #0a0a0a; line-height: 1; transition: opacity 0.18s; }
.sb-prs[data-collapsed="true"] .sb-prs-name { opacity: 0; pointer-events: none; }
.sb-prs-side ul { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; }
.sb-prs-side a {
  position: relative;
  display: grid; grid-template-columns: 30px 1fr;
  align-items: center; gap: 14px;
  padding: 12px 6px;
  font-size: 14px; font-weight: 600; color: #0a0a0a; text-decoration: none;
  border-bottom: 1px solid rgba(10,10,10,0.12);
  transition: padding-left 0.16s, color 0.16s;
}
.sb-prs-side a em { font-style: normal; font-family: 'JetBrains Mono', monospace; font-size: 10px; color: rgba(10,10,10,0.5); letter-spacing: 0.06em; font-weight: 600; }
.sb-prs-side a:hover { padding-left: 12px; color: #e63946; }
.sb-prs-side a:hover em { color: #e63946; }
.sb-prs-side a[aria-current="page"] { padding-left: 12px; }
.sb-prs-side a[aria-current="page"]::before { content: ''; position: absolute; left: 0; top: 50%; transform: translateY(-50%); width: 6px; height: 6px; border-radius: 50%; background: #e63946; box-shadow: 0 0 0 0 rgba(230,57,70,0.5); animation: sb-prs-dot 2s ease-in-out infinite; }
@keyframes sb-prs-dot { 0%, 100% { box-shadow: 0 0 0 0 rgba(230,57,70,0.5); } 50% { box-shadow: 0 0 0 6px rgba(230,57,70,0); } }
@media (prefers-reduced-motion: reduce) { .sb-prs-side a[aria-current="page"]::before { animation: none; } }
.sb-prs-lbl { white-space: nowrap; transition: opacity 0.18s; }
.sb-prs[data-collapsed="true"] .sb-prs-lbl { opacity: 0; pointer-events: none; }
.sb-prs-foot { margin-top: auto; padding-top: 12px; border-top: 1px solid #0a0a0a; }
.sb-prs-foot-lbl { font-family: 'JetBrains Mono', monospace; font-size: 10px; color: rgba(10,10,10,0.5); letter-spacing: 0.16em; transition: opacity 0.18s; }
.sb-prs[data-collapsed="true"] .sb-prs-foot-lbl { opacity: 0; }
.sb-prs-main { padding: 36px 40px; overflow: hidden; display: flex; flex-direction: column; gap: 18px; background: #fafafa; }
.sb-prs-eye { font-family: 'JetBrains Mono', monospace; font-size: 11.5px; color: #e63946; letter-spacing: 0.04em; }
.sb-prs-main h2 { margin: 0; font-size: clamp(36px, 5.5vw, 64px); font-weight: 800; line-height: 0.92; color: #0a0a0a; letter-spacing: -0.04em; }
.sb-prs-main p { margin: 0; font-size: 14.5px; color: #3a3a3a; line-height: 1.65; max-width: 480px; font-weight: 500; }
.sb-prs-main code { font-family: 'JetBrains Mono', monospace; font-size: 12.5px; color: #0a0a0a; background: rgba(10,10,10,0.06); padding: 2px 6px; border-radius: 0; font-weight: 600; border-bottom: 1px solid #e63946; }
@media (prefers-reduced-motion: reduce) { .sb-prs, .sb-prs-tlabel, .sb-prs-lbl, .sb-prs-name, .sb-prs-foot-lbl, .sb-prs-burger i { transition: none; } }
<div class="sb-prs" data-collapsed="false">
  <aside class="sb-prs-side" aria-label="Primary">
    <button class="sb-prs-toggle" type="button" aria-expanded="true" aria-controls="sb-prs-nav" aria-label="Collapse sidebar">
      <span class="sb-prs-burger" aria-hidden="true"><i></i><i></i></span>
      <span class="sb-prs-tlabel">Collapse</span>
    </button>
    <header class="sb-prs-brand">
      <span class="sb-prs-mark" aria-hidden="true"></span>
      <span class="sb-prs-name">Atlas</span>
    </header>
    <nav id="sb-prs-nav" aria-label="Primary">
      <ul>
        <li><a href="#!" aria-current="page"><em>01</em><span class="sb-prs-lbl">Index</span></a></li>
        <li><a href="#!"><em>02</em><span class="sb-prs-lbl">Projects</span></a></li>
        <li><a href="#!"><em>03</em><span class="sb-prs-lbl">Studio</span></a></li>
        <li><a href="#!"><em>04</em><span class="sb-prs-lbl">Press</span></a></li>
        <li><a href="#!"><em>05</em><span class="sb-prs-lbl">Contact</span></a></li>
      </ul>
    </nav>
    <footer class="sb-prs-foot">
      <span class="sb-prs-foot-lbl">© Atlas, MMXXVI</span>
    </footer>
  </aside>
  <main class="sb-prs-main">
    <span class="sb-prs-eye">— Persistent state · localStorage</span>
    <h2>Less,<br/>but better.</h2>
    <p>Click the toggle — the sidebar collapses to icons only. The state is written to <code>localStorage</code>, so a refresh keeps your choice. An inline IIFE applies the stored state before the page paints, preventing any flash.</p>
  </main>
</div>
/* Persistent collapsible sidebar — restores state on load + toggles on click. */
(function () {
  var KEY = 'sb-prs-collapsed';
  var wrap = document.querySelector('.sb-prs');
  if (!wrap) return;

  var stored = localStorage.getItem(KEY) === 'true';
  wrap.dataset.collapsed = stored ? 'true' : 'false';

  var btn = wrap.querySelector('.sb-prs-toggle');
  if (!btn) return;
  btn.setAttribute('aria-expanded', String(!stored));

  btn.addEventListener('click', function () {
    var nowCollapsed = wrap.dataset.collapsed !== 'true';
    wrap.dataset.collapsed = nowCollapsed ? 'true' : 'false';
    btn.setAttribute('aria-expanded', String(!nowCollapsed));
    btn.setAttribute('aria-label', nowCollapsed ? 'Expand sidebar' : 'Collapse sidebar');
    localStorage.setItem(KEY, String(nowCollapsed));
  });
})();
14 / 23
Search-top Sidebar
Pure CSS

Inbox

Updated just now · 12 unread

The search bar at the top stays sticky as the nav scrolls. Real <input type="search"> gives a native clear button. Vibrancy blur is pure CSS via backdrop-filter.

Anya Petrova Re: Q3 launch deck
Daichi Sato Friday demo recap
Frosted macOS Big-Sur — translucent grey sidebar with vibrancy blur over a pastel sunrise wallpaper, system-blue active state. A sticky <form role="search"> at the top stays visible as the nav scrolls. Native <input type="search"> for the clear button.
Try it
.sb-srh {
  position: relative;
  display: grid; grid-template-columns: 250px 1fr;
  min-height: 480px;
  font-family: -apple-system, BlinkMacSystemFont, 'SF Pro Display', system-ui, sans-serif;
  color: #1a1a1f;
  border-radius: 14px; overflow: hidden;
  isolation: isolate;
  letter-spacing: -0.01em;
}
.sb-srh-wall {
  position: absolute; inset: 0; z-index: 0;
  background:
    radial-gradient(60% 50% at 30% 20%, #ffd1a8 0%, transparent 60%),
    radial-gradient(60% 60% at 80% 70%, #ffb6d4 0%, transparent 60%),
    linear-gradient(180deg, #fff5e8 0%, #ffe8f0 50%, #d8e9ff 100%);
}
.sb-srh-side {
  position: relative; z-index: 1;
  background: rgba(245,245,250,0.72);
  backdrop-filter: blur(40px) saturate(1.6); -webkit-backdrop-filter: blur(40px) saturate(1.6);
  border-right: 1px solid rgba(0,0,0,0.08);
  display: flex; flex-direction: column;
  max-height: 480px; overflow-y: auto;
}
.sb-srh-traffic { display: flex; gap: 7px; padding: 12px 14px 0; }
.sb-srh-traffic i { display: block; width: 11px; height: 11px; border-radius: 50%; }
.sb-srh-traffic i:nth-child(1) { background: #ff5f57; }
.sb-srh-traffic i:nth-child(2) { background: #febc2e; }
.sb-srh-traffic i:nth-child(3) { background: #28c840; }
.sb-srh-form {
  position: sticky; top: 0; z-index: 2;
  display: flex; align-items: center; gap: 6px;
  padding: 10px 12px;
  background: rgba(245,245,250,0.85);
  backdrop-filter: blur(40px); -webkit-backdrop-filter: blur(40px);
  border-bottom: 1px solid rgba(0,0,0,0.08);
}
.sb-srh-icon { color: #6e6e73; font-size: 13px; }
.sb-srh-form input {
  flex: 1; min-width: 0;
  padding: 6px 10px;
  background: rgba(255,255,255,0.7);
  border: 1px solid rgba(0,0,0,0.08);
  border-radius: 7px;
  color: #1a1a1f; font-size: 13px;
  font-family: inherit;
  box-shadow: inset 0 1px 0 rgba(255,255,255,0.6);
}
.sb-srh-form input:focus { outline: 3px solid rgba(0,122,255,0.4); outline-offset: -1px; border-color: rgba(0,122,255,0.6); }
.sb-srh-form kbd {
  font-family: -apple-system, sans-serif; font-size: 10.5px; font-weight: 600;
  padding: 2px 6px;
  background: rgba(255,255,255,0.7);
  color: #6e6e73;
  border: 1px solid rgba(0,0,0,0.1);
  border-radius: 4px;
}
.sb-srh-side nav { padding: 14px 10px 18px; }
.sb-srh-side h3 { margin: 14px 8px 6px; font-size: 11px; font-weight: 700; letter-spacing: 0.02em; color: #6e6e73; }
.sb-srh-side h3:first-of-type { margin-top: 4px; }
.sb-srh-side ul { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 1px; }
.sb-srh-side a {
  display: flex; align-items: center; gap: 10px;
  padding: 6px 10px; border-radius: 6px;
  font-size: 13px; font-weight: 500; color: #1a1a1f;
  text-decoration: none;
  transition: background 0.14s, color 0.14s;
}
.sb-srh-side a:hover { background: rgba(0,0,0,0.05); }
.sb-srh-side a[aria-current="page"] { background: #007aff; color: #fff; font-weight: 600; }
.sb-srh-side a[aria-current="page"] em { color: rgba(255,255,255,0.85); }
.sb-srh-i { display: inline-flex; width: 16px; height: 16px; align-items: center; justify-content: center; border-radius: 4px; flex-shrink: 0; font-size: 7.5px; color: transparent; line-height: 0; }
.sb-srh-side a em { margin-left: auto; font-style: normal; font-size: 11px; color: #6e6e73; font-weight: 600; }
.sb-srh-main { position: relative; z-index: 1; padding: 32px 36px; background: rgba(255,255,255,0.5); backdrop-filter: blur(20px); -webkit-backdrop-filter: blur(20px); display: flex; flex-direction: column; gap: 16px; }
.sb-srh-mhead { display: flex; align-items: baseline; justify-content: space-between; }
.sb-srh-main h2 { margin: 0; font-size: clamp(28px, 4vw, 40px); font-weight: 700; color: #1a1a1f; letter-spacing: -0.03em; }
.sb-srh-meta { font-size: 12px; color: #6e6e73; }
.sb-srh-main p { margin: 0; font-size: 13.5px; color: #3a3a3f; line-height: 1.6; max-width: 480px; }
.sb-srh-main code { font-family: 'JetBrains Mono', monospace; font-size: 12.5px; color: #007aff; background: rgba(0,122,255,0.1); padding: 1px 6px; border-radius: 4px; }
.sb-srh-cards { display: flex; flex-direction: column; gap: 8px; margin-top: 4px; }
.sb-srh-card {
  display: grid; grid-template-columns: 10px 1fr auto;
  align-items: center; gap: 12px;
  padding: 12px 16px;
  background: rgba(255,255,255,0.85);
  border: 1px solid rgba(0,0,0,0.06);
  border-radius: 10px;
  box-shadow: 0 1px 0 rgba(255,255,255,0.5) inset, 0 4px 16px rgba(0,0,0,0.04);
  transition: transform 0.14s, box-shadow 0.14s;
}
.sb-srh-card:hover { transform: translateY(-1px); box-shadow: 0 1px 0 rgba(255,255,255,0.5) inset, 0 8px 24px rgba(0,0,0,0.08); }
.sb-srh-card-dot { width: 10px; height: 10px; border-radius: 50%; flex-shrink: 0; }
.sb-srh-card strong { font-size: 13.5px; font-weight: 700; color: #1a1a1f; }
.sb-srh-card em { font-style: normal; font-size: 12.5px; color: #6e6e73; grid-column: 2; }
.sr-only { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); }
@media (max-width: 720px) {
  .sb-srh { grid-template-columns: 1fr; }
  .sb-srh-side { max-height: none; border-right: 0; border-bottom: 1px solid rgba(0,0,0,0.08); }
}
<div class="sb-srh">
  <span class="sb-srh-wall" aria-hidden="true"></span>
  <aside class="sb-srh-side" aria-label="Primary">
    <header class="sb-srh-traffic" aria-hidden="true"><i></i><i></i><i></i></header>
    <form class="sb-srh-form" role="search">
      <label class="sr-only" for="sb-srh-q">Search docs</label>
      <span class="sb-srh-icon" aria-hidden="true">⌕</span>
      <input id="sb-srh-q" type="search" name="q" placeholder="Search…" autocomplete="off" />
      <kbd>⌘K</kbd>
    </form>
    <nav aria-label="Primary">
      <h3>Favourites</h3>
      <ul>
        <li><a href="#!" aria-current="page"><span class="sb-srh-i" style="background:#34c759">●</span>Inbox<em>12</em></a></li>
        <li><a href="#!"><span class="sb-srh-i" style="background:#ff9500">●</span>Drafts<em>3</em></a></li>
        <li><a href="#!"><span class="sb-srh-i" style="background:#5ac8fa">●</span>Sent</a></li>
      </ul>
      <h3>iCloud</h3>
      <ul>
        <li><a href="#!"><span class="sb-srh-i" aria-hidden="true">▤</span>Documents</a></li>
        <li><a href="#!"><span class="sb-srh-i" aria-hidden="true">◇</span>Desktop</a></li>
        <li><a href="#!"><span class="sb-srh-i" aria-hidden="true">⇩</span>Downloads</a></li>
      </ul>
      <h3>Tags</h3>
      <ul>
        <li><a href="#!"><span class="sb-srh-i" style="background:#ff3b30">●</span>Important</a></li>
        <li><a href="#!"><span class="sb-srh-i" style="background:#af52de">●</span>Personal</a></li>
        <li><a href="#!"><span class="sb-srh-i" style="background:#ffcc00">●</span>Travel</a></li>
      </ul>
    </nav>
  </aside>
  <main class="sb-srh-main">
    <header class="sb-srh-mhead">
      <h2>Inbox</h2>
      <span class="sb-srh-meta">Updated just now · 12 unread</span>
    </header>
    <p>The search bar at the top stays sticky as the nav scrolls. Real <code>&lt;input type="search"&gt;</code> gives a native clear button. Vibrancy blur is pure CSS via <code>backdrop-filter</code>.</p>
    <div class="sb-srh-cards">
      <article class="sb-srh-card">
        <span class="sb-srh-card-dot" style="background:#34c759"></span>
        <strong>Anya Petrova</strong>
        <em>Re: Q3 launch deck</em>
      </article>
      <article class="sb-srh-card">
        <span class="sb-srh-card-dot" style="background:#5ac8fa"></span>
        <strong>Daichi Sato</strong>
        <em>Friday demo recap</em>
      </article>
    </div>
  </main>
</div>
15 / 23
Section-grouped Nav
Pure CSS
★ HELLO, FRIEND

Welcome
back!

Each section is a separate <nav> — screen readers skip cleanly between Workspace / Account / Help. The squiggle background is pure CSS (radial-gradient + repeating).

284Active
47Pending
12Closed
Memphis design — pastel-pink sidebar with mint and lemon accents, black squiggle backgrounds, hard-shadow chunky pills. Each section is its own <nav aria-label> so screen readers jump cleanly. The 80s/90s graphic style reborn for an admin shell.
Try it
.sb-grp {
  display: grid; grid-template-columns: 240px 1fr;
  min-height: 480px;
  font-family: 'Inter', system-ui, -apple-system, sans-serif;
  background:
    radial-gradient(circle at 80% 20%, #ffe4ec 0%, transparent 40%),
    radial-gradient(circle at 20% 80%, #d4f6e8 0%, transparent 40%),
    #fff7e8;
  color: #1a1a1a;
  border-radius: 16px; overflow: hidden;
  border: 3px solid #1a1a1a;
}
.sb-grp-side {
  background:
    repeating-linear-gradient(45deg, transparent 0 20px, rgba(26,26,26,0.04) 20px 21px),
    #ffd4e5;
  border-right: 3px solid #1a1a1a;
  padding: 18px 14px;
  display: flex; flex-direction: column; gap: 16px;
  overflow-y: auto; max-height: 480px;
}
.sb-grp-brand { display: flex; align-items: center; gap: 10px; padding: 4px 6px 12px; text-decoration: none; border-bottom: 2px dashed #1a1a1a; }
.sb-grp-dot { width: 28px; height: 28px; flex-shrink: 0; border-radius: 50%; background: #ffd400; border: 2px solid #1a1a1a; box-shadow: 3px 3px 0 #1a1a1a; }
.sb-grp-name { font-family: 'Helvetica Neue', system-ui, sans-serif; font-size: 16px; font-weight: 900; color: #1a1a1a; letter-spacing: -0.02em; line-height: 1; }
.sb-grp-name small { display: block; font-size: 9.5px; font-weight: 600; color: #c54b8c; text-transform: uppercase; letter-spacing: 0.16em; margin-top: 2px; }
.sb-grp-side h3 { margin: 0 0 6px 4px; font-size: 11px; font-weight: 800; letter-spacing: 0.18em; text-transform: uppercase; color: #c54b8c; }
.sb-grp-side ul { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 5px; }
.sb-grp-side a {
  display: block;
  padding: 8px 12px;
  border-radius: 22px;
  font-size: 13px; font-weight: 700;
  color: #1a1a1a;
  background: #fff;
  border: 2px solid #1a1a1a;
  text-decoration: none;
  transition: transform 0.12s, box-shadow 0.12s, background 0.12s;
}
.sb-grp-side a:hover { background: #fff7e8; transform: translate(-1px, -1px); box-shadow: 3px 3px 0 #1a1a1a; }
.sb-grp-side a[aria-current="page"] { background: #6dd5b3; color: #1a1a1a; transform: translate(-1px, -1px); box-shadow: 3px 3px 0 #1a1a1a; }
.sb-grp-main {
  position: relative;
  padding: 30px 32px;
  display: flex; flex-direction: column; gap: 18px;
}
.sb-grp-main::before {
  content: ''; position: absolute; top: 24px; right: 28px;
  width: 56px; height: 56px;
  background: #ffd400; border: 3px solid #1a1a1a;
  transform: rotate(15deg);
  box-shadow: 4px 4px 0 #1a1a1a;
  z-index: 0;
}
.sb-grp-main::after {
  content: ''; position: absolute; bottom: 80px; right: 60px;
  width: 30px; height: 30px;
  border-radius: 50%;
  background: #c54b8c; border: 3px solid #1a1a1a;
  box-shadow: 3px 3px 0 #1a1a1a;
  z-index: 0;
}
.sb-grp-eye { position: relative; z-index: 1; font-family: 'Helvetica Neue', sans-serif; font-size: 11.5px; font-weight: 800; letter-spacing: 0.2em; color: #c54b8c; }
.sb-grp-main h2 { position: relative; z-index: 1; margin: 0; font-size: clamp(34px, 5vw, 60px); font-weight: 900; line-height: 0.92; color: #1a1a1a; letter-spacing: -0.03em; }
.sb-grp-main h2::after { content: ''; display: inline-block; width: 18px; height: 18px; margin-left: 6px; background: #c54b8c; border: 2px solid #1a1a1a; border-radius: 50%; vertical-align: middle; box-shadow: 2px 2px 0 #1a1a1a; }
.sb-grp-main p { position: relative; z-index: 1; margin: 0; font-size: 13.5px; color: #4a4a4a; line-height: 1.6; max-width: 460px; }
.sb-grp-main code { font-family: 'Courier New', monospace; font-size: 12px; font-weight: 700; color: #1a1a1a; background: #ffd400; padding: 1px 6px; border-radius: 3px; border: 1.5px solid #1a1a1a; }
.sb-grp-cards { position: relative; z-index: 1; display: grid; grid-template-columns: repeat(3, 1fr); gap: 10px; margin-top: 8px; max-width: 480px; }
.sb-grp-c { padding: 14px 14px; border: 2.5px solid #1a1a1a; border-radius: 14px; box-shadow: 4px 4px 0 #1a1a1a; display: flex; flex-direction: column; gap: 2px; }
.sb-grp-c strong { font-size: 22px; font-weight: 900; color: #1a1a1a; line-height: 1; letter-spacing: -0.02em; }
.sb-grp-c span { font-size: 11px; font-weight: 700; color: #1a1a1a; text-transform: uppercase; letter-spacing: 0.08em; }
.sb-grp-c-mint  { background: #6dd5b3; }
.sb-grp-c-lemon { background: #ffd400; }
.sb-grp-c-coral { background: #ff8b7a; }
@media (max-width: 720px) {
  .sb-grp { grid-template-columns: 1fr; }
  .sb-grp-side { border-right: 0; border-bottom: 3px solid #1a1a1a; max-height: none; }
  .sb-grp-cards { grid-template-columns: 1fr; }
}
<div class="sb-grp">
  <aside class="sb-grp-side" aria-label="Primary">
    <a class="sb-grp-brand" href="#!">
      <span class="sb-grp-dot" aria-hidden="true"></span>
      <span class="sb-grp-name">Sundae<small>by Atelier</small></span>
    </a>
    <nav aria-label="Workspace">
      <h3>Workspace</h3>
      <ul>
        <li><a href="#!" aria-current="page">Dashboard</a></li>
        <li><a href="#!">Projects</a></li>
        <li><a href="#!">Team</a></li>
      </ul>
    </nav>
    <nav aria-label="Account">
      <h3>Account</h3>
      <ul>
        <li><a href="#!">Profile</a></li>
        <li><a href="#!">Billing</a></li>
        <li><a href="#!">API keys</a></li>
      </ul>
    </nav>
    <nav aria-label="Help">
      <h3>Help</h3>
      <ul>
        <li><a href="#!">Documentation</a></li>
        <li><a href="#!">Support</a></li>
      </ul>
    </nav>
  </aside>
  <main class="sb-grp-main">
    <span class="sb-grp-eye">★ HELLO, FRIEND</span>
    <h2>Welcome<br/>back!</h2>
    <p>Each section is a separate <code>&lt;nav&gt;</code> — screen readers skip cleanly between Workspace / Account / Help. The squiggle background is pure CSS (<code>radial-gradient</code> + <code>repeating</code>).</p>
    <div class="sb-grp-cards">
      <div class="sb-grp-c sb-grp-c-mint"><strong>284</strong><span>Active</span></div>
      <div class="sb-grp-c sb-grp-c-lemon"><strong>47</strong><span>Pending</span></div>
      <div class="sb-grp-c sb-grp-c-coral"><strong>12</strong><span>Closed</span></div>
    </div>
  </main>
</div>
16 / 23
Target-active Highlight
Light JS
— Page 04

Overview.

Click a link to the left — the :target pseudo-class highlights it automatically. Sibling selectors do the work; history.pushState keeps the host page from jumping.

— Page 12

Features.

The CSS pattern is :has(#section:target) a[href="#section"]. No JavaScript needed for the highlighting itself.

— Page 28

Pricing.

Hash-based routing works in any browser. No router library, no framework dependency, no virtual DOM.

— Page 36

Changelog.

Each section is a real <section> with an id — semantic, bookmarkable, and shareable.

Retro magazine TOC — cream paper, sepia rules, bordeaux-red active marker. The contents page of a 1970s journal. Active-link state via URL hash + :target pseudo-class; sibling selectors highlight the corresponding nav link. A 4-line script uses history.pushState so the URL hash updates without scrolling the host page.
Try it
.sb-act {
  display: grid; grid-template-columns: 240px 1fr;
  min-height: 480px;
  font-family: 'Georgia', 'Times New Roman', serif;
  background: #f4ecdb;
  color: #2a1a10;
  border-radius: 0; overflow: hidden;
  border: 1px solid #2a1a10;
}
.sb-act-side {
  background: #ede0c4;
  border-right: 1px solid #2a1a10;
  padding: 22px 18px;
  display: flex; flex-direction: column; gap: 14px;
}
.sb-act-side header { padding-bottom: 14px; border-bottom: 2px solid #2a1a10; }
.sb-act-issue { font-family: 'Inter', sans-serif; font-size: 10.5px; font-weight: 700; letter-spacing: 0.22em; color: #8a4a2c; text-transform: uppercase; }
.sb-act-side h3 { margin: 4px 0 0; font-size: 30px; font-weight: 500; font-style: italic; color: #2a1a10; letter-spacing: -0.02em; line-height: 1; }
.sb-act-side ol { list-style: none; margin: 0; padding: 0; counter-reset: act; display: flex; flex-direction: column; gap: 0; }
.sb-act-side li { counter-increment: act; }
.sb-act-side a {
  position: relative;
  display: grid; grid-template-columns: 26px 1fr auto;
  align-items: baseline; gap: 12px;
  padding: 10px 4px;
  font-size: 16px; color: #2a1a10; text-decoration: none;
  border-bottom: 1px dotted #b89668;
  transition: padding-left 0.16s, color 0.16s;
}
.sb-act-side a::before {
  content: counter(act, decimal-leading-zero);
  font-family: 'Inter', sans-serif;
  font-size: 10px;
  font-weight: 700;
  letter-spacing: 0.16em;
  color: #8a4a2c;
  align-self: center;
}
.sb-act-side a span { font-style: italic; }
.sb-act-side a em { font-family: 'Inter', sans-serif; font-style: normal; font-size: 10.5px; font-weight: 600; letter-spacing: 0.04em; color: #8a4a2c; }
.sb-act-side a:hover { padding-left: 4px; color: #8a1f2c; }
.sb-act-side footer { margin-top: auto; padding-top: 14px; border-top: 1px solid #2a1a10; font-family: 'Inter', sans-serif; font-size: 10.5px; letter-spacing: 0.18em; color: #8a4a2c; text-align: center; text-transform: uppercase; }
.sb-act-main { padding: 28px 32px; overflow-y: auto; max-height: 480px; background: #fbf5e6; }
.sb-act-sec { padding: 18px 0; border-bottom: 1px solid #d8c598; }
.sb-act-sec:last-child { border-bottom: 0; }
.sb-act-page { font-family: 'Inter', sans-serif; font-size: 10.5px; font-weight: 700; letter-spacing: 0.2em; color: #8a1f2c; text-transform: uppercase; }
.sb-act-sec h2 { margin: 4px 0 8px; font-family: 'Playfair Display', 'Georgia', serif; font-size: clamp(28px, 4vw, 44px); font-weight: 900; color: #2a1a10; line-height: 0.96; letter-spacing: -0.02em; }
.sb-act-sec p  { margin: 0; font-size: 14.5px; color: #3c2818; line-height: 1.7; max-width: 540px; }
.sb-act-sec code { font-family: 'JetBrains Mono', monospace; font-size: 12.5px; color: #8a1f2c; background: rgba(138,31,44,0.08); padding: 1px 5px; border-radius: 0; font-weight: 600; }
/* Default first-link active when no :target yet */
.sb-act-side a[href="#sb-act-overview"] { padding-left: 4px; color: #8a1f2c; font-weight: 700; }
.sb-act-side a[href="#sb-act-overview"]::after { content: '·'; font-family: serif; font-size: 22px; line-height: 0; color: #8a1f2c; margin-left: 4px; }
/* Override default when any section is targeted */
.sb-act:has(:target) .sb-act-side a[href="#sb-act-overview"] { padding-left: 0; color: #2a1a10; font-weight: 400; }
.sb-act:has(:target) .sb-act-side a[href="#sb-act-overview"]::after { content: ''; }
/* Highlight the link matching the targeted section */
.sb-act:has(#sb-act-overview:target)   .sb-act-side a[href="#sb-act-overview"],
.sb-act:has(#sb-act-features:target)   .sb-act-side a[href="#sb-act-features"],
.sb-act:has(#sb-act-pricing:target)    .sb-act-side a[href="#sb-act-pricing"],
.sb-act:has(#sb-act-changelog:target)  .sb-act-side a[href="#sb-act-changelog"]   { padding-left: 4px; color: #8a1f2c; font-weight: 700; }
.sb-act:has(#sb-act-overview:target)   .sb-act-side a[href="#sb-act-overview"]::after,
.sb-act:has(#sb-act-features:target)   .sb-act-side a[href="#sb-act-features"]::after,
.sb-act:has(#sb-act-pricing:target)    .sb-act-side a[href="#sb-act-pricing"]::after,
.sb-act:has(#sb-act-changelog:target)  .sb-act-side a[href="#sb-act-changelog"]::after { content: '·'; font-family: serif; font-size: 22px; line-height: 0; color: #8a1f2c; margin-left: 4px; }
<div class="sb-act" id="sb-act-root">
  <aside class="sb-act-side" aria-label="Primary">
    <header>
      <span class="sb-act-issue">Issue No. 47</span>
      <h3>Contents</h3>
    </header>
    <nav aria-label="Primary">
      <ol>
        <li><a href="#sb-act-overview"   data-tgt="overview"><span>Overview</span><em>p. 04</em></a></li>
        <li><a href="#sb-act-features"   data-tgt="features"><span>Features</span><em>p. 12</em></a></li>
        <li><a href="#sb-act-pricing"    data-tgt="pricing"><span>Pricing</span><em>p. 28</em></a></li>
        <li><a href="#sb-act-changelog"  data-tgt="changelog"><span>Changelog</span><em>p. 36</em></a></li>
      </ol>
    </nav>
    <footer>
      Spring · MMXXVI
    </footer>
  </aside>
  <main class="sb-act-main">
    <section id="sb-act-overview" class="sb-act-sec">
      <span class="sb-act-page">— Page 04</span>
      <h2>Overview.</h2>
      <p>Click a link to the left — the <code>:target</code> pseudo-class highlights it automatically. Sibling selectors do the work; <code>history.pushState</code> keeps the host page from jumping.</p>
    </section>
    <section id="sb-act-features" class="sb-act-sec">
      <span class="sb-act-page">— Page 12</span>
      <h2>Features.</h2>
      <p>The CSS pattern is <code>:has(#section:target) a[href="#section"]</code>. No JavaScript needed for the highlighting itself.</p>
    </section>
    <section id="sb-act-pricing" class="sb-act-sec">
      <span class="sb-act-page">— Page 28</span>
      <h2>Pricing.</h2>
      <p>Hash-based routing works in any browser. No router library, no framework dependency, no virtual DOM.</p>
    </section>
    <section id="sb-act-changelog" class="sb-act-sec">
      <span class="sb-act-page">— Page 36</span>
      <h2>Changelog.</h2>
      <p>Each section is a real <code>&lt;section&gt;</code> with an id — semantic, bookmarkable, and shareable.</p>
    </section>
  </main>
</div>
/* :target stays the engine — JS only updates the hash without scrolling. */
document.querySelectorAll('.sb-act-side a').forEach(function (a) {
  a.addEventListener('click', function (e) {
    e.preventDefault();
    var hash = a.getAttribute('href');
    if (hash && hash.charAt(0) === '#') history.pushState(null, '', hash);
  });
});
17 / 23
Nested Expandable Nav
Pure CSS
— On Authentication

Native HTML
does the work.

Each top-level section is a real <details>/<summary> — the browser handles keyboard navigation, aria-expanded state, and Enter/Space toggling. No script, no library, no boilerplate.

Build with the platform. The platform has been thinking about your problem for thirty years. — margin note, 2026
Notebook paper — off-white sheet with hand-drawn ruled lines, graphite pencil marks, dog-eared corner. Two-level nav built with native <details>/<summary>: free keyboard support, free aria-expanded, free Enter/Space toggling. The browser does the work.
Try it
.sb-nst {
  position: relative;
  display: grid; grid-template-columns: 260px 1fr;
  min-height: 480px;
  font-family: 'Caveat', 'Comic Sans MS', cursive;
  background: #fbf6e8;
  color: #2a2418;
  border-radius: 6px; overflow: hidden;
  border: 1px solid #2a2418;
  background-image:
    repeating-linear-gradient(transparent 0 27px, rgba(74,138,196,0.18) 27px 28px),
    radial-gradient(circle at 100% 100%, transparent 18px, #fbf6e8 18px);
  background-position: 0 14px, 0 0;
}
.sb-nst-side {
  position: relative;
  background:
    repeating-linear-gradient(transparent 0 27px, rgba(74,138,196,0.18) 27px 28px),
    rgba(248,242,224,0.6);
  background-position: 0 14px, 0 0;
  border-right: 1px dashed rgba(42,36,24,0.35);
  padding: 18px 16px;
  overflow-y: auto; max-height: 480px;
}
.sb-nst-side::after { content: ''; position: absolute; right: 0; bottom: 0; width: 26px; height: 26px; background: linear-gradient(225deg, #fbf6e8 50%, rgba(42,36,24,0.12) 50%); }
.sb-nst-side header { display: flex; align-items: baseline; gap: 8px; padding-bottom: 12px; margin-bottom: 12px; border-bottom: 1.5px dashed #2a2418; position: relative; }
.sb-nst-tab { width: 18px; height: 18px; flex-shrink: 0; background: #d4533a; border: 1.5px solid #2a2418; transform: rotate(-12deg); }
.sb-nst-side h3 { margin: 0; font-family: 'Caveat', cursive; font-size: 28px; font-weight: 700; color: #2a2418; line-height: 1; flex: 1; }
.sb-nst-date { font-family: 'Caveat', cursive; font-size: 14px; color: #6a5a3c; transform: rotate(-3deg); }
.sb-nst-side details { padding: 4px 0; }
.sb-nst-side summary {
  cursor: pointer; padding: 6px 4px;
  font-family: 'Caveat', cursive;
  font-size: 22px; font-weight: 700; color: #2a2418;
  list-style: none; display: flex; align-items: center; justify-content: space-between;
  transition: color 0.14s;
}
.sb-nst-side summary::-webkit-details-marker { display: none; }
.sb-nst-side summary:hover { color: #d4533a; }
.sb-nst-side summary::after {
  content: '+';
  font-family: 'Caveat', cursive; font-size: 28px; line-height: 0.6; font-weight: 400;
  color: #d4533a;
  transition: transform 0.22s;
}
.sb-nst-side details[open] summary::after { content: '−'; }
.sb-nst-side ul { list-style: none; margin: 4px 0 12px 22px; padding: 0; display: flex; flex-direction: column; gap: 0; border-left: 1.5px dashed #d4533a; }
.sb-nst-side li { padding-left: 12px; position: relative; }
.sb-nst-side li::before { content: '·'; position: absolute; left: -4px; top: 50%; transform: translateY(-60%); color: #d4533a; font-size: 24px; line-height: 0; }
.sb-nst-side a {
  display: block;
  padding: 4px 6px;
  font-family: 'Caveat', cursive;
  font-size: 18px; color: #2a2418; text-decoration: none;
  transition: color 0.14s, padding-left 0.14s;
}
.sb-nst-side a:hover { color: #d4533a; padding-left: 10px; }
.sb-nst-side a[aria-current="page"] {
  color: #d4533a;
  font-weight: 700;
  background-image: linear-gradient(transparent 60%, rgba(255,232,99,0.7) 60%);
}
.sb-nst-side footer { margin-top: 16px; padding-top: 10px; border-top: 1.5px dashed rgba(42,36,24,0.4); text-align: center; font-family: 'Caveat', cursive; font-size: 18px; color: #6a5a3c; transform: rotate(-1deg); }
.sb-nst-main {
  position: relative;
  padding: 32px 40px 32px 70px;
  background-image:
    repeating-linear-gradient(transparent 0 27px, rgba(74,138,196,0.22) 27px 28px),
    rgba(255,250,232,0.6);
  background-position: 0 14px, 0 0;
}
.sb-nst-main::before {
  content: ''; position: absolute; left: 50px; top: 0; bottom: 0; width: 1.5px; background: #d44a4a; opacity: 0.55;
}
.sb-nst-eye { font-family: 'Caveat', cursive; font-size: 16px; color: #d4533a; transform: rotate(-1deg); display: inline-block; margin-bottom: 6px; }
.sb-nst-main h2 { margin: 0 0 14px; font-family: 'Caveat', cursive; font-size: clamp(38px, 5.5vw, 64px); font-weight: 700; color: #2a2418; line-height: 1; transform: rotate(-0.5deg); }
.sb-nst-main p { margin: 0 0 18px; font-family: 'Caveat', cursive; font-size: 19px; color: #2a2418; line-height: 1.55; max-width: 460px; }
.sb-nst-main code { font-family: 'Courier New', monospace; font-size: 14px; color: #d4533a; background: transparent; padding: 1px 5px; border: 1.5px dashed rgba(212,83,58,0.45); border-radius: 0; }
.sb-nst-main blockquote {
  position: relative;
  margin: 0; padding: 12px 18px 12px 32px;
  font-family: 'Caveat', cursive; font-size: 20px; color: #4a4030;
  line-height: 1.5; max-width: 480px;
  border-left: 3px solid #d4533a;
  font-style: italic;
}
.sb-nst-quote-mark { position: absolute; left: 6px; top: -6px; font-family: 'Caveat', cursive; font-size: 64px; line-height: 1; color: #d4533a; opacity: 0.4; font-style: normal; }
.sb-nst-main blockquote cite { display: block; margin-top: 6px; font-size: 16px; color: #6a5a3c; font-style: normal; }
@media (max-width: 720px) {
  .sb-nst { grid-template-columns: 1fr; }
  .sb-nst-side { max-height: none; border-right: 0; border-bottom: 1px dashed rgba(42,36,24,0.4); }
  .sb-nst-main { padding-left: 40px; }
}
<div class="sb-nst">
  <aside class="sb-nst-side" aria-label="Primary">
    <header>
      <span class="sb-nst-tab" aria-hidden="true"></span>
      <h3>Field Notes</h3>
      <span class="sb-nst-date">07 / Mar / 26</span>
    </header>
    <nav aria-label="Primary">
      <details open>
        <summary>Authentication</summary>
        <ul>
          <li><a href="#!" aria-current="page">API keys</a></li>
          <li><a href="#!">OAuth tokens</a></li>
          <li><a href="#!">Webhooks</a></li>
        </ul>
      </details>
      <details>
        <summary>Resources</summary>
        <ul>
          <li><a href="#!">Customers</a></li>
          <li><a href="#!">Subscriptions</a></li>
          <li><a href="#!">Invoices</a></li>
          <li><a href="#!">Charges</a></li>
        </ul>
      </details>
      <details>
        <summary>Errors</summary>
        <ul>
          <li><a href="#!">Status codes</a></li>
          <li><a href="#!">Error responses</a></li>
        </ul>
      </details>
    </nav>
    <footer>— No. 47 —</footer>
  </aside>
  <main class="sb-nst-main">
    <span class="sb-nst-eye">— On Authentication</span>
    <h2>Native HTML<br/>does the work.</h2>
    <p>Each top-level section is a real <code>&lt;details&gt;</code>/<code>&lt;summary&gt;</code> — the browser handles keyboard navigation, <code>aria-expanded</code> state, and Enter/Space toggling. No script, no library, no boilerplate.</p>
    <blockquote>
      <span class="sb-nst-quote-mark" aria-hidden="true">"</span>
      Build with the platform. The platform has been thinking about your problem for thirty years.
      <cite>— margin note, 2026</cite>
    </blockquote>
  </main>
</div>
18 / 23
Tabbed Sidebar
Pure CSS
app.tsx + 47 UTF-8
// Three tabs, zero JavaScript.
const app = () => {
  return <Sidebar theme="dracula" />
}

Click the tabs at the top of the sidebar to swap between Files, Search, and Git. Pattern: radio inputs + :has(#tab-1:checked) + sibling selectors. Theme is the Dracula palette translated into a real layout.

Dracula tribute — the editor theme reborn as a sidebar. Deep purple base with peach, cyan, lime, and pink accents; monospace IDE type. Three tabs swap the content (Files, Search, Git) via radio inputs + :has() + sibling selectors. Zero JavaScript.
Try it
.sb-tab {
  display: grid; grid-template-columns: 280px 1fr;
  min-height: 480px;
  font-family: 'JetBrains Mono', 'Fira Code', 'Courier New', monospace;
  background: #282a36; color: #f8f8f2;
  border-radius: 8px; overflow: hidden;
  font-feature-settings: 'liga' 1, 'calt' 1;
}
.sb-tab-side { background: #21222c; border-right: 1px solid #44475a; display: flex; flex-direction: column; }
.sb-tab-titlebar { display: flex; align-items: center; gap: 12px; padding: 10px 14px; background: #191a21; border-bottom: 1px solid #44475a; }
.sb-tab-titlebar span { display: flex; gap: 6px; }
.sb-tab-titlebar i { width: 11px; height: 11px; border-radius: 50%; }
.sb-tab-titlebar i:nth-child(1) { background: #ff5555; }
.sb-tab-titlebar i:nth-child(2) { background: #f1fa8c; }
.sb-tab-titlebar i:nth-child(3) { background: #50fa7b; }
.sb-tab-titlebar strong { font-size: 11px; font-weight: 500; color: #6272a4; letter-spacing: 0.04em; }
.sb-tab-tabs {
  display: flex; padding: 0;
  background: #21222c; border-bottom: 1px solid #44475a;
}
.sb-tab-tabs input { position: absolute; width: 1px; height: 1px; opacity: 0; clip: rect(0 0 0 0); }
.sb-tab-tabs input:focus-visible + label { outline: 2px solid #ff79c6; outline-offset: -2px; }
.sb-tab-tabs label {
  flex: 1; padding: 10px 6px;
  display: inline-flex; align-items: center; justify-content: center; gap: 6px;
  font-size: 11px; font-weight: 600; color: #6272a4;
  cursor: pointer;
  border-bottom: 2px solid transparent;
  transition: color 0.14s, border-color 0.14s, background 0.14s;
}
.sb-tab-tabs label span { color: #ff79c6; font-size: 12px; }
.sb-tab-tabs label em { margin-left: 4px; font-size: 9.5px; font-style: normal; padding: 1px 5px; border-radius: 8px; background: #ff5555; color: #f8f8f2; font-weight: 700; }
.sb-tab-tabs label:hover { color: #f8f8f2; background: rgba(98,114,164,0.1); }
.sb-tab-tabs input:checked + label { color: #f8f8f2; border-bottom-color: #50fa7b; background: #282a36; }
.sb-tab-pane { display: none; padding: 14px 14px; flex: 1; overflow-y: auto; }
.sb-tab-side:has(#sb-tab-1:checked) [data-pane="1"] { display: block; }
.sb-tab-side:has(#sb-tab-2:checked) [data-pane="2"] { display: block; }
.sb-tab-side:has(#sb-tab-3:checked) [data-pane="3"] { display: block; }
.sb-tab-pane h3 { margin: 0 0 10px; font-size: 10.5px; font-weight: 700; letter-spacing: 0.18em; text-transform: uppercase; color: #6272a4; }
.sb-tab-pane ul { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 2px; }
.sb-tab-pane li { padding: 4px 6px; font-size: 12px; color: #f8f8f2; display: flex; align-items: center; gap: 8px; transition: background 0.12s; cursor: pointer; }
.sb-tab-pane li:hover { background: #44475a; }
.sb-tab-pane li::before { content: ''; flex-shrink: 0; }
.sb-tab-pane li.folder::before { content: '▸ '; color: #ff79c6; font-size: 10px; }
.sb-tab-pane li.file { padding-left: 22px; color: #bd93f9; }
.sb-tab-pane li.file::before { content: '▢ '; color: #6272a4; font-size: 10px; }
.sb-tab-pane li.file.ts { color: #8be9fd; }
.sb-tab-pane li.file.css { color: #ff79c6; }
.sb-tab-pane li.file.json { color: #f1fa8c; }
.sb-tab-pane li em { font-style: normal; font-size: 10px; font-weight: 700; padding: 1px 5px; border-radius: 3px; }
.sb-tab-pane li em.git-m { color: #ffb86c; background: rgba(255,184,108,0.15); }
.sb-tab-pane li em.git-a { color: #50fa7b; background: rgba(80,250,123,0.15); }
.sb-tab-search-row { display: flex; align-items: center; gap: 8px; padding: 7px 10px; background: #282a36; border: 1px solid #44475a; border-radius: 4px; }
.sb-tab-search-row span { color: #6272a4; font-size: 13px; }
.sb-tab-search-row input { flex: 1; min-width: 0; background: transparent; border: 0; color: #f8f8f2; font-family: inherit; font-size: 12px; }
.sb-tab-search-row input:focus { outline: none; }
.sb-tab-pane p { margin: 10px 0 0; font-size: 11px; color: #6272a4; line-height: 1.6; }
.sb-tab-pane kbd { font-family: inherit; padding: 1px 5px; background: #44475a; color: #f8f8f2; border-radius: 3px; font-size: 10px; font-weight: 600; }
.sb-tab-status { margin-top: auto; display: flex; justify-content: space-between; padding: 6px 12px; background: #ff79c6; color: #282a36; font-size: 10.5px; font-weight: 700; }
.sb-tab-status span { display: inline-flex; align-items: center; gap: 6px; }
.sb-tab-status i { display: inline-block; width: 7px; height: 7px; border-radius: 50%; }
.sb-tab-main { padding: 28px 32px; background: #282a36; display: flex; flex-direction: column; gap: 16px; }
.sb-tab-bar { display: flex; gap: 8px; }
.sb-tab-pill { padding: 4px 10px; font-size: 11px; font-weight: 600; background: #44475a; color: #f8f8f2; border-radius: 4px; }
.sb-tab-pill.ghost { background: transparent; border: 1px solid #44475a; color: #6272a4; }
.sb-tab-code {
  margin: 0; padding: 18px 22px;
  background: #21222c;
  border: 1px solid #44475a;
  border-radius: 6px;
  font-size: 13px; line-height: 1.7;
  color: #f8f8f2;
  white-space: pre-wrap;
}
.sb-tab-code .c { color: #6272a4; font-style: italic; }
.sb-tab-code .k { color: #ff79c6; }
.sb-tab-code .v { color: #50fa7b; }
.sb-tab-code .o { color: #ff79c6; }
.sb-tab-code .t { color: #8be9fd; }
.sb-tab-code .s { color: #f1fa8c; }
.sb-tab-main p { margin: 0; font-family: 'Inter', system-ui, sans-serif; font-size: 13.5px; color: #bd93f9; line-height: 1.65; max-width: 460px; }
.sb-tab-main code { color: #50fa7b; background: #21222c; padding: 1px 6px; border-radius: 3px; font-size: 12.5px; border: 1px solid #44475a; }
<div class="sb-tab">
  <aside class="sb-tab-side" aria-label="Primary">
    <header class="sb-tab-titlebar">
      <span aria-hidden="true"><i></i><i></i><i></i></span>
      <strong>~/projects/dracula</strong>
    </header>
    <div class="sb-tab-tabs" role="tablist">
      <input id="sb-tab-1" type="radio" name="sb-tab" checked />
      <label for="sb-tab-1" role="tab"><span aria-hidden="true">▤</span>Files</label>
      <input id="sb-tab-2" type="radio" name="sb-tab" />
      <label for="sb-tab-2" role="tab"><span aria-hidden="true">⌕</span>Search</label>
      <input id="sb-tab-3" type="radio" name="sb-tab" />
      <label for="sb-tab-3" role="tab"><span aria-hidden="true">◇</span>Git<em>3</em></label>
    </div>
    <div class="sb-tab-pane" data-pane="1">
      <h3>Explorer</h3>
      <ul>
        <li class="folder">src/</li>
        <li class="file ts">app.tsx</li>
        <li class="file ts">main.tsx</li>
        <li class="file css">styles.css</li>
        <li class="folder">public/</li>
        <li class="file">favicon.svg</li>
        <li class="file json">package.json</li>
        <li class="file">README.md</li>
      </ul>
    </div>
    <div class="sb-tab-pane" data-pane="2">
      <h3>Search</h3>
      <label class="sb-tab-search-row">
        <span aria-hidden="true">⌕</span>
        <input type="search" placeholder="Search project…" />
      </label>
      <p>Use <kbd>⌘F</kbd> in file · <kbd>⌘⇧F</kbd> for project search.</p>
    </div>
    <div class="sb-tab-pane" data-pane="3">
      <h3>Source control</h3>
      <ul>
        <li><em class="git-m">M</em>app.tsx</li>
        <li><em class="git-a">A</em>README.md</li>
        <li><em class="git-m">M</em>package.json</li>
      </ul>
    </div>
    <footer class="sb-tab-status">
      <span><i style="background:#ff79c6"></i>main</span>
      <span>0 ↓ · 2 ↑</span>
    </footer>
  </aside>
  <main class="sb-tab-main">
    <header class="sb-tab-bar">
      <span class="sb-tab-pill">app.tsx</span>
      <span class="sb-tab-pill ghost">+ 47</span>
      <span class="sb-tab-pill ghost">UTF-8</span>
    </header>
    <pre class="sb-tab-code"><code><span class="c">// Three tabs, zero JavaScript.</span>
<span class="k">const</span> <span class="v">app</span> = <span class="o">() =&gt;</span> {
  <span class="k">return</span> &lt;<span class="t">Sidebar</span> theme=<span class="s">"dracula"</span> /&gt;
}</code></pre>
    <p>Click the tabs at the top of the sidebar to swap between Files, Search, and Git. Pattern: radio inputs + <code>:has(#tab-1:checked)</code> + sibling selectors. Theme is the Dracula palette translated into a real layout.</p>
  </main>
</div>
19 / 23
Onboarding Progress
Pure CSS
👋 GOOD MORNING

Let's keep
that streak!

Quests fade as you complete them and the streak counter pulses gently when you hit a milestone. Native <progress> + a real <ol> — assistive tech reads everything correctly.

2,481XP earned
47Lessons
12Badges
Duolingo-style joyful gamification — forest-green nav with canary-yellow CTAs, hard chunky shadows, oversized rounded buttons. Native <progress> announces completion to screen readers; a real <ol> tracks steps. Designed to feel like progress is fun.
Try it
.sb-prg {
  display: grid; grid-template-columns: 260px 1fr;
  min-height: 480px;
  font-family: 'Nunito', 'Inter', system-ui, -apple-system, sans-serif;
  background: #fff9e6; color: #3c4043;
  border-radius: 16px; overflow: hidden;
  border: 4px solid #1a3d2c;
}
.sb-prg-side {
  background: linear-gradient(180deg, #2f7a4f 0%, #1f5837 100%);
  padding: 18px 14px;
  display: flex; flex-direction: column; gap: 14px;
  position: relative;
  border-right: 4px solid #1a3d2c;
  box-shadow: 4px 0 0 #1a3d2c;
}
.sb-prg-side::before {
  content: ''; position: absolute; top: 0; left: 0; right: 0; height: 4px;
  background: repeating-linear-gradient(90deg, #ffd400 0 12px, #1a3d2c 12px 14px, #ffd400 14px 26px, transparent 26px 30px);
}
.sb-prg-brand { display: flex; align-items: center; gap: 10px; padding: 14px 6px 14px; text-decoration: none; }
.sb-prg-mark { width: 36px; height: 36px; flex-shrink: 0; display: flex; align-items: center; justify-content: center; border-radius: 12px; background: #ffd400; border: 3px solid #1a3d2c; font-size: 18px; box-shadow: 0 4px 0 #1a3d2c; }
.sb-prg-name { color: #fff; font-size: 17px; font-weight: 900; letter-spacing: -0.02em; line-height: 1; }
.sb-prg-name small { display: block; font-size: 10px; color: #ffd400; font-weight: 800; letter-spacing: 0.16em; margin-top: 3px; }
.sb-prg-nav ul { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 6px; }
.sb-prg-nav a {
  display: flex; align-items: center; gap: 11px;
  padding: 10px 13px;
  border-radius: 13px;
  font-size: 14px; font-weight: 800; color: #d4f0e0;
  text-decoration: none;
  background: rgba(0,0,0,0.16);
  border: 2px solid transparent;
  transition: transform 0.14s, background 0.14s, border-color 0.14s, box-shadow 0.14s;
}
.sb-prg-nav a:hover { background: rgba(0,0,0,0.28); color: #fff; transform: translate(-1px, -1px); box-shadow: 3px 3px 0 #1a3d2c; }
.sb-prg-nav a[aria-current="page"] { background: #ffd400; color: #1a3d2c; border-color: #1a3d2c; transform: translate(-1px, -1px); box-shadow: 4px 4px 0 #1a3d2c; }
.sb-prg-i { font-size: 16px; }
.sb-prg-card { margin-top: auto; padding: 14px; background: #fff; border: 3px solid #1a3d2c; border-radius: 16px; box-shadow: 5px 5px 0 #1a3d2c; }
.sb-prg-card header { display: flex; align-items: center; justify-content: space-between; margin-bottom: 10px; }
.sb-prg-card h3 { margin: 0; font-size: 13px; font-weight: 900; color: #1a3d2c; letter-spacing: -0.01em; }
.sb-prg-streak { font-size: 13px; font-weight: 900; color: #ff6b35; padding: 3px 8px; border-radius: 10px; background: #fff1e6; border: 2px solid #ff6b35; }
.sb-prg-card progress {
  width: 100%; height: 12px; appearance: none;
  background: #f0f0f0; border: 2px solid #1a3d2c; border-radius: 10px; overflow: hidden;
}
.sb-prg-card progress::-webkit-progress-bar { background: #f0f0f0; }
.sb-prg-card progress::-webkit-progress-value { background: linear-gradient(180deg,#5cd47a,#2f7a4f); border-radius: 8px 0 0 8px; }
.sb-prg-card progress::-moz-progress-bar { background: linear-gradient(180deg,#5cd47a,#2f7a4f); border-radius: 8px 0 0 8px; }
.sb-prg-card p { margin: 8px 0 12px; font-size: 12px; color: #3c4043; font-weight: 700; }
.sb-prg-card p strong { color: #2f7a4f; font-weight: 900; }
.sb-prg-card ol { list-style: none; margin: 0 0 14px; padding: 0; counter-reset: prg; display: flex; flex-direction: column; gap: 6px; }
.sb-prg-card li { counter-increment: prg; font-size: 12px; font-weight: 700; color: #3c4043; padding-left: 26px; position: relative; line-height: 1.5; }
.sb-prg-card li::before {
  content: counter(prg);
  position: absolute; left: 0; top: 0;
  width: 18px; height: 18px; border-radius: 50%;
  background: #fff; color: #3c4043;
  display: flex; align-items: center; justify-content: center;
  font-size: 10px; font-weight: 900;
  border: 2px solid #3c4043;
}
.sb-prg-card li.done { color: #2f7a4f; text-decoration: line-through; text-decoration-thickness: 2px; text-decoration-color: rgba(47,122,79,0.4); }
.sb-prg-card li.done::before { content: '✓'; background: #2f7a4f; color: #fff; border-color: #1a3d2c; font-size: 11px; }
.sb-prg-go {
  display: block; width: 100%;
  padding: 11px 14px;
  background: #ffd400; color: #1a3d2c;
  border: 3px solid #1a3d2c; border-radius: 12px;
  font-family: inherit; font-size: 13px; font-weight: 900;
  letter-spacing: 0.02em;
  cursor: pointer;
  box-shadow: 0 4px 0 #1a3d2c;
  transition: transform 0.1s, box-shadow 0.1s;
}
.sb-prg-go:hover { background: #ffe44a; }
.sb-prg-go:active { transform: translateY(2px); box-shadow: 0 2px 0 #1a3d2c; }
.sb-prg-main { padding: 32px 36px; display: flex; flex-direction: column; gap: 16px; background: #fff9e6; }
.sb-prg-eye { font-size: 12px; font-weight: 900; letter-spacing: 0.16em; color: #ff6b35; }
.sb-prg-main h2 { margin: 0; font-size: clamp(34px, 5vw, 60px); font-weight: 900; line-height: 0.95; color: #1a3d2c; letter-spacing: -0.03em; }
.sb-prg-main p { margin: 0; font-size: 14px; color: #3c4043; line-height: 1.6; max-width: 440px; font-weight: 600; }
.sb-prg-main code { font-family: 'JetBrains Mono', monospace; font-size: 12.5px; color: #1a3d2c; background: #ffd400; padding: 1px 6px; border-radius: 4px; border: 2px solid #1a3d2c; font-weight: 700; }
.sb-prg-stats { display: grid; grid-template-columns: repeat(3, 1fr); gap: 10px; margin-top: 8px; max-width: 440px; }
.sb-prg-stat { background: #fff; border: 3px solid #1a3d2c; border-radius: 14px; padding: 12px 14px; box-shadow: 4px 4px 0 #1a3d2c; }
.sb-prg-stats strong { display: block; font-size: 22px; font-weight: 900; color: #1a3d2c; line-height: 1; letter-spacing: -0.02em; }
.sb-prg-stats span { display: block; font-size: 11px; font-weight: 800; color: #2f7a4f; text-transform: uppercase; letter-spacing: 0.08em; margin-top: 4px; }
@media (max-width: 720px) {
  .sb-prg { grid-template-columns: 1fr; }
  .sb-prg-side { border-right: 0; border-bottom: 4px solid #1a3d2c; box-shadow: 0 4px 0 #1a3d2c; }
  .sb-prg-stats { grid-template-columns: 1fr; }
}
<div class="sb-prg">
  <aside class="sb-prg-side" aria-label="Primary">
    <a class="sb-prg-brand" href="#!">
      <span class="sb-prg-mark" aria-hidden="true">🌿</span>
      <span class="sb-prg-name">Sprout<small>v2</small></span>
    </a>
    <nav class="sb-prg-nav" aria-label="Primary">
      <ul>
        <li><a href="#!" aria-current="page"><span class="sb-prg-i" aria-hidden="true">🏡</span>Dashboard</a></li>
        <li><a href="#!"><span class="sb-prg-i" aria-hidden="true">📚</span>Lessons</a></li>
        <li><a href="#!"><span class="sb-prg-i" aria-hidden="true">🏆</span>Trophies</a></li>
        <li><a href="#!"><span class="sb-prg-i" aria-hidden="true">⚙️</span>Settings</a></li>
      </ul>
    </nav>
    <section class="sb-prg-card" aria-labelledby="sb-prg-h">
      <header>
        <h3 id="sb-prg-h">Daily streak</h3>
        <span class="sb-prg-streak" aria-label="7 day streak">🔥 7</span>
      </header>
      <progress value="3" max="5">3 of 5 complete</progress>
      <p><strong>3</strong> of 5 quests done</p>
      <ol>
        <li class="done">Pick your goal</li>
        <li class="done">Take placement</li>
        <li class="done">Add friends</li>
        <li>Connect calendar</li>
        <li>Earn first badge</li>
      </ol>
      <button type="button" class="sb-prg-go">Continue →</button>
    </section>
  </aside>
  <main class="sb-prg-main">
    <span class="sb-prg-eye">👋 GOOD MORNING</span>
    <h2>Let's keep<br/>that streak!</h2>
    <p>Quests fade as you complete them and the streak counter pulses gently when you hit a milestone. Native <code>&lt;progress&gt;</code> + a real <code>&lt;ol&gt;</code> — assistive tech reads everything correctly.</p>
    <div class="sb-prg-stats">
      <div class="sb-prg-stat"><strong>2,481</strong><span>XP earned</span></div>
      <div class="sb-prg-stat"><strong>47</strong><span>Lessons</span></div>
      <div class="sb-prg-stat"><strong>12</strong><span>Badges</span></div>
    </div>
  </main>
</div>
20 / 23
Resizable Sidebar
Pure CSS
STATUS: 200_OK 17:42:08 GMT

RESIZE_ME.

PURE CSS · resize: horizontal · NO JS · NO LIBRARY · NO FRAMEWORK · ONE LINE OF CSS · BROWSER HANDLES THE DRAG · LAYOUT ADJUSTS NATURALLY · WORKS EVERYWHERE · 1996 ENERGY 2026 BROWSERS.

[01]
[02]
[03]
[04]
[05]
[06]
Brutalist mono — pure white, ink black, zero radius, oversized monospace. The "raw HTML element with no styling" energy. Drag the right edge of the sidebar to resize. Pure CSS via resize: horizontal on a wrapper; the browser provides the drag handle.
Try it
.sb-rsz {
  display: flex;
  min-height: 480px;
  font-family: 'Courier New', 'Courier', monospace;
  background: #fff;
  color: #000;
  border-radius: 0; overflow: hidden;
  border: 3px solid #000;
}
.sb-rsz-side {
  flex-shrink: 0;
  width: 240px; min-width: 180px; max-width: 380px;
  background: #fff;
  border-right: 3px solid #000;
  padding: 16px 14px;
  overflow: auto;
  resize: horizontal;
}
.sb-rsz-side header { padding-bottom: 12px; border-bottom: 2px solid #000; margin-bottom: 14px; display: flex; align-items: center; gap: 10px; }
.sb-rsz-bar { font-size: 13px; font-weight: 700; color: #000; letter-spacing: 0.04em; }
.sb-rsz-side header strong { font-size: 16px; font-weight: 700; letter-spacing: 0.08em; color: #000; }
.sb-rsz-side h3 { margin: 0 0 10px; font-size: 12px; font-weight: 700; color: #000; }
.sb-rsz-tree { list-style: none; margin: 0 0 16px; padding: 0; font-size: 13px; color: #000; display: flex; flex-direction: column; gap: 3px; }
.sb-rsz-tree li { padding: 3px 0; cursor: pointer; transition: background 0.1s; }
.sb-rsz-tree li:hover { background: #000; color: #fff; }
.sb-rsz-tree li.folder::before { content: '> '; }
.sb-rsz-tree li:not(.folder)::before { content: '· '; }
.sb-rsz-tree li.indent  { padding-left: 18px; }
.sb-rsz-tree li.indent2 { padding-left: 36px; }
.sb-rsz-tree li.active { background: #000; color: #fff; }
.sb-rsz-tree li.active::before { content: '* '; color: #ff0000; }
.sb-rsz-hint { margin: 0; padding: 8px 6px; font-size: 11px; font-weight: 700; color: #fff; background: #000; letter-spacing: 0.04em; text-align: center; animation: sb-rsz-flash 1.4s steps(1) infinite; }
@keyframes sb-rsz-flash {
  0%, 49% { background: #000; color: #fff; }
  50%, 100% { background: #ff0000; color: #000; }
}
@media (prefers-reduced-motion: reduce) { .sb-rsz-hint { animation: none; } }
.sb-rsz-main { flex: 1; padding: 24px 28px; min-width: 0; display: flex; flex-direction: column; gap: 16px; }
.sb-rsz-bar2 { display: flex; justify-content: space-between; padding: 6px 12px; background: #000; color: #fff; font-size: 11px; font-weight: 700; letter-spacing: 0.06em; }
.sb-rsz-main h2 { margin: 0; font-size: clamp(40px, 6vw, 76px); font-weight: 700; line-height: 0.92; color: #000; letter-spacing: -0.02em; }
.sb-rsz-main p { margin: 0; font-size: 13.5px; color: #000; line-height: 1.7; max-width: 540px; font-weight: 700; }
.sb-rsz-main code { font-family: inherit; font-size: 13px; color: #fff; background: #000; padding: 1px 6px; border-radius: 0; font-weight: 700; }
.sb-rsz-grid { display: grid; grid-template-columns: repeat(6, 1fr); gap: 0; max-width: 480px; border: 2px solid #000; }
.sb-rsz-cell { padding: 12px; font-size: 12px; font-weight: 700; text-align: center; border-right: 2px solid #000; border-bottom: 2px solid #000; }
.sb-rsz-cell:nth-child(6n) { border-right: 0; }
.sb-rsz-cell:nth-last-child(-n+6) { border-bottom: 0; }
.sb-rsz-cell.solid { background: #000; color: #fff; }
.sb-rsz-cell.solid::after { content: ' ✦'; }
<div class="sb-rsz">
  <aside class="sb-rsz-side" aria-label="Primary">
    <header>
      <span class="sb-rsz-bar" aria-hidden="true">[ === ]</span>
      <strong>FILE.SYS</strong>
    </header>
    <h3>// directory</h3>
    <ul class="sb-rsz-tree">
      <li class="folder">src/</li>
      <li class="indent folder">components/</li>
      <li class="indent indent2">Button.tsx</li>
      <li class="indent indent2">Card.tsx</li>
      <li class="indent indent2 active">Modal.tsx</li>
      <li class="indent folder">pages/</li>
      <li class="indent indent2">index.tsx</li>
      <li class="indent indent2">about.tsx</li>
      <li>package.json</li>
      <li>tsconfig.json</li>
    </ul>
    <p class="sb-rsz-hint">→→→ DRAG_RIGHT_EDGE →→→</p>
  </aside>
  <main class="sb-rsz-main">
    <header class="sb-rsz-bar2">
      <span>STATUS: 200_OK</span>
      <span>17:42:08 GMT</span>
    </header>
    <h2>RESIZE_ME.</h2>
    <p>PURE CSS · <code>resize: horizontal</code> · NO JS · NO LIBRARY · NO FRAMEWORK · ONE LINE OF CSS · BROWSER HANDLES THE DRAG · LAYOUT ADJUSTS NATURALLY · WORKS EVERYWHERE · 1996 ENERGY 2026 BROWSERS.</p>
    <div class="sb-rsz-grid">
      <div class="sb-rsz-cell">[01]</div>
      <div class="sb-rsz-cell">[02]</div>
      <div class="sb-rsz-cell">[03]</div>
      <div class="sb-rsz-cell solid">[04]</div>
      <div class="sb-rsz-cell">[05]</div>
      <div class="sb-rsz-cell">[06]</div>
    </div>
  </main>
</div>
21 / 23
Three-pane Workspace
Pure CSS
CMD + K to switch · ⌘1 / ⌘2 / ⌘3

Sprint 47 retro.

Last edited yesterday at 14:21 · 4 collaborators

Three independent panes, each with its own scroll. The workspace nav (left), the page list (middle), and the editor (right) — the shell behind Notion, Linear, Apple Notes.

What went well

  • Shipped the dashboard refactor on time.
  • Onboarding flow completion up 18%.
  • Zero P0 incidents during launch week.

To improve

  • QA cycle compressed at the end — pull it earlier.
  • Marketing copy review needs a clearer owner.
Linear-style minimal mono — slate canvas, hairline rules, single electric-blue accent. Three-pane workspace shell (workspace nav, page list, editor); each pane scrolls independently. Heavy on semantics — real <aside> + <nav> + <article>.
Try it
.sb-3pn {
  display: grid; grid-template-columns: 220px 260px 1fr;
  min-height: 480px;
  font-family: 'Inter', system-ui, -apple-system, sans-serif;
  background: #181a1f; color: #d6d8de;
  border-radius: 8px; overflow: hidden;
  letter-spacing: -0.01em;
}
.sb-3pn-ws { background: #14161a; border-right: 1px solid rgba(255,255,255,0.05); padding: 16px 12px; display: flex; flex-direction: column; gap: 14px; }
.sb-3pn-brand { display: flex; align-items: center; gap: 10px; padding: 4px 6px 12px; border-bottom: 1px solid rgba(255,255,255,0.05); text-decoration: none; }
.sb-3pn-mark { width: 22px; height: 22px; flex-shrink: 0; border-radius: 5px; background: linear-gradient(135deg, #4d7cff 0%, #1850e0 100%); box-shadow: 0 4px 14px rgba(77,124,255,0.35); position: relative; }
.sb-3pn-mark::after { content: ''; position: absolute; inset: 5px; border: 1.5px solid #fff; border-radius: 1px; }
.sb-3pn-name { font-size: 14px; font-weight: 700; color: #fff; letter-spacing: -0.02em; }
.sb-3pn-shead { font-size: 10.5px; font-weight: 600; letter-spacing: 0.04em; color: #6a6e76; padding: 0 8px; margin-top: 4px; }
.sb-3pn-ws ul { list-style: none; margin: 0 0 8px; padding: 0; display: flex; flex-direction: column; gap: 1px; }
.sb-3pn-ws a {
  display: flex; align-items: center; gap: 10px;
  padding: 6px 10px; border-radius: 6px;
  font-size: 13px; font-weight: 500; color: #b6b9c1; text-decoration: none;
  transition: background 0.12s, color 0.12s;
}
.sb-3pn-ws a:hover { background: rgba(255,255,255,0.04); color: #fff; }
.sb-3pn-ws a[aria-current="page"] { background: rgba(77,124,255,0.16); color: #fff; box-shadow: inset 2px 0 0 #4d7cff; padding-left: 8px; }
.sb-3pn-i { width: 14px; text-align: center; flex-shrink: 0; font-size: 11px; color: #6a6e76; }
.sb-3pn-ws a[aria-current="page"] .sb-3pn-i { color: #4d7cff; }
.sb-3pn-ws a em { margin-left: auto; font-style: normal; font-size: 10.5px; font-weight: 600; color: #6a6e76; padding: 1px 6px; border-radius: 8px; background: rgba(255,255,255,0.06); }
.sb-3pn-ws a[aria-current="page"] em { background: rgba(77,124,255,0.2); color: #4d7cff; }
.sb-3pn-avatar { width: 18px; height: 18px; border-radius: 50%; flex-shrink: 0; display: flex; align-items: center; justify-content: center; font-size: 9.5px; font-weight: 700; color: #fff; }
.sb-3pn-list { background: #1a1c21; border-right: 1px solid rgba(255,255,255,0.05); display: flex; flex-direction: column; overflow: hidden; }
.sb-3pn-list header { display: flex; align-items: center; justify-content: space-between; padding: 14px 16px; border-bottom: 1px solid rgba(255,255,255,0.05); }
.sb-3pn-list h2 { margin: 0; font-size: 13px; font-weight: 700; color: #fff; letter-spacing: -0.01em; }
.sb-3pn-list button { width: 24px; height: 24px; border-radius: 5px; border: 0; background: rgba(255,255,255,0.05); color: #fff; font-size: 14px; cursor: pointer; transition: background 0.14s; }
.sb-3pn-list button:hover { background: #4d7cff; }
.sb-3pn-list ul { list-style: none; margin: 0; padding: 6px; display: flex; flex-direction: column; gap: 0; flex: 1; overflow-y: auto; }
.sb-3pn-list li { padding: 12px 12px; border-radius: 6px; cursor: pointer; transition: background 0.12s; border-bottom: 1px solid rgba(255,255,255,0.03); }
.sb-3pn-list li:hover { background: rgba(255,255,255,0.04); }
.sb-3pn-list li.active { background: rgba(77,124,255,0.1); border-bottom-color: transparent; box-shadow: inset 2px 0 0 #4d7cff; }
.sb-3pn-list strong { display: block; font-size: 13px; font-weight: 600; color: #fff; letter-spacing: -0.01em; }
.sb-3pn-list span { display: block; font-size: 11px; color: #6a6e76; margin-top: 4px; }
.sb-3pn-edit { padding: 32px 36px; overflow-y: auto; background: #181a1f; }
.sb-3pn-edit header { padding-bottom: 14px; border-bottom: 1px solid rgba(255,255,255,0.05); margin-bottom: 18px; }
.sb-3pn-eye { font-family: 'JetBrains Mono', monospace; font-size: 11px; color: #4d7cff; letter-spacing: 0.04em; }
.sb-3pn-edit h1 { margin: 4px 0 4px; font-size: clamp(28px, 4vw, 40px); font-weight: 700; color: #fff; letter-spacing: -0.03em; line-height: 1.05; }
.sb-3pn-edit header p { margin: 0; font-size: 12px; color: #6a6e76; }
.sb-3pn-body { margin: 0 0 18px; font-size: 14.5px; color: #d6d8de; line-height: 1.65; max-width: 540px; }
.sb-3pn-edit h2 { margin: 18px 0 8px; font-size: 16px; font-weight: 700; color: #fff; letter-spacing: -0.01em; }
.sb-3pn-edit ul { margin: 0 0 16px; padding-left: 22px; font-size: 13.5px; color: #b6b9c1; line-height: 1.75; }
@media (max-width: 720px) {
  .sb-3pn { grid-template-columns: 1fr; }
  .sb-3pn-ws, .sb-3pn-list { border-right: 0; border-bottom: 1px solid rgba(255,255,255,0.06); }
}
<div class="sb-3pn">
  <aside class="sb-3pn-ws" aria-label="Workspace">
    <a class="sb-3pn-brand" href="#!">
      <span class="sb-3pn-mark" aria-hidden="true"></span>
      <span class="sb-3pn-name">Threads</span>
    </a>
    <nav aria-label="Workspace">
      <span class="sb-3pn-shead">Workspace</span>
      <ul>
        <li><a href="#!" aria-current="page"><span class="sb-3pn-i" aria-hidden="true">▤</span>Notes<em>12</em></a></li>
        <li><a href="#!"><span class="sb-3pn-i" aria-hidden="true">◇</span>Projects</a></li>
        <li><a href="#!"><span class="sb-3pn-i" aria-hidden="true">◯</span>Calendar</a></li>
        <li><a href="#!"><span class="sb-3pn-i" aria-hidden="true">▢</span>Archive</a></li>
      </ul>
      <span class="sb-3pn-shead">People</span>
      <ul>
        <li><a href="#!"><span class="sb-3pn-avatar" aria-hidden="true" style="background:#5b8eff">A</span>Anya</a></li>
        <li><a href="#!"><span class="sb-3pn-avatar" aria-hidden="true" style="background:#ff7a4d">D</span>Daichi</a></li>
        <li><a href="#!"><span class="sb-3pn-avatar" aria-hidden="true" style="background:#34c759">L</span>Lena</a></li>
      </ul>
    </nav>
  </aside>
  <aside class="sb-3pn-list" aria-label="Pages">
    <header>
      <h2>Notes</h2>
      <button type="button" aria-label="New page">+</button>
    </header>
    <ul>
      <li class="active">
        <strong>Sprint 47 retro</strong>
        <span>Yesterday · 14:21</span>
      </li>
      <li>
        <strong>Hiring loop · Q3</strong>
        <span>2 days ago</span>
      </li>
      <li>
        <strong>Vendor shortlist</strong>
        <span>Last week</span>
      </li>
      <li>
        <strong>Team offsite ideas</strong>
        <span>Apr 24</span>
      </li>
      <li>
        <strong>OKR review · H1</strong>
        <span>Apr 18</span>
      </li>
    </ul>
  </aside>
  <main class="sb-3pn-edit">
    <header>
      <span class="sb-3pn-eye">CMD + K to switch · ⌘1 / ⌘2 / ⌘3</span>
      <h1>Sprint 47 retro.</h1>
      <p>Last edited yesterday at 14:21 · 4 collaborators</p>
    </header>
    <p class="sb-3pn-body">Three independent panes, each with its own scroll. The workspace nav (left), the page list (middle), and the editor (right) — the shell behind Notion, Linear, Apple Notes.</p>
    <h2>What went well</h2>
    <ul>
      <li>Shipped the dashboard refactor on time.</li>
      <li>Onboarding flow completion up 18%.</li>
      <li>Zero P0 incidents during launch week.</li>
    </ul>
    <h2>To improve</h2>
    <ul>
      <li>QA cycle compressed at the end — pull it earlier.</li>
      <li>Marketing copy review needs a clearer owner.</li>
    </ul>
  </main>
</div>
22 / 23
Adaptive Container-query
Pure CSS
/* container-queries.md */

Adaptive
by container.

Resize the card width — when this container drops below 600px, the sidebar collapses into a top nav. The viewport size is irrelevant; the layout reacts to its own parent. Drop this shell into any narrow column and it adapts on its own.

@container (max-width: 600px) {
  .sb-cnt { grid-template-columns: 1fr; }
  .sb-cnt-side { flex-direction: row; }
}
Sunset terminal — pitch black with green-screen phosphor type, amber prompt accents, a soft horizon glow at the bottom. The 1980s computer terminal aesthetic. Sidebar reflows into a horizontal top nav when its container drops below 600px — CSS container queries, not viewport media queries.
Try it
.sb-cnt-wrap {
  font-family: 'JetBrains Mono', 'Courier New', monospace;
  color: #5ce064;
  container-type: inline-size;
}
.sb-cnt {
  position: relative;
  display: grid; grid-template-columns: 220px 1fr;
  min-height: 480px;
  background: #060a07;
  border-radius: 6px; overflow: hidden;
  isolation: isolate;
  border: 1px solid rgba(92,224,100,0.3);
}
.sb-cnt-glow {
  position: absolute; left: 0; right: 0; bottom: 0; height: 60%;
  pointer-events: none; z-index: 0;
  background:
    radial-gradient(80% 60% at 50% 100%, rgba(255,140,40,0.32), transparent 70%),
    radial-gradient(40% 30% at 50% 100%, rgba(255,210,80,0.4), transparent 70%);
}
.sb-cnt-scan {
  position: absolute; inset: 0; pointer-events: none; z-index: 2;
  background: repeating-linear-gradient(0deg, rgba(0,0,0,0.18) 0 1px, transparent 1px 4px);
  mix-blend-mode: overlay;
}
.sb-cnt-side {
  position: relative; z-index: 1;
  background: rgba(8,14,10,0.85);
  border-right: 1px solid rgba(92,224,100,0.3);
  padding: 18px 14px;
  display: flex; flex-direction: column; gap: 14px;
}
.sb-cnt-brand { display: flex; align-items: baseline; gap: 8px; padding: 4px 4px 14px; border-bottom: 1px dashed rgba(92,224,100,0.3); text-decoration: none; }
.sb-cnt-prompt { color: #ffaa44; font-size: 16px; font-weight: 800; text-shadow: 0 0 10px rgba(255,170,68,0.5); }
.sb-cnt-name { font-size: 16px; font-weight: 700; color: #5ce064; letter-spacing: 0.04em; text-shadow: 0 0 8px rgba(92,224,100,0.4); line-height: 1; }
.sb-cnt-name small { font-size: 12px; color: #ffaa44; font-weight: 700; }
.sb-cnt-side ul { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 1px; }
.sb-cnt-side a {
  display: flex; align-items: center; gap: 12px;
  padding: 7px 10px;
  font-size: 13px; color: #5ce064; text-decoration: none;
  border-left: 2px solid transparent;
  transition: background 0.14s, color 0.14s, border-color 0.14s, text-shadow 0.14s;
}
.sb-cnt-side a em { font-style: normal; font-size: 11px; font-weight: 700; color: rgba(92,224,100,0.5); width: 18px; }
.sb-cnt-side a:hover { background: rgba(92,224,100,0.08); color: #fff; border-left-color: #5ce064; text-shadow: 0 0 8px rgba(92,224,100,0.6); }
.sb-cnt-side a[aria-current="page"] { background: rgba(255,170,68,0.12); color: #ffaa44; border-left-color: #ffaa44; text-shadow: 0 0 10px rgba(255,170,68,0.6); }
.sb-cnt-side a[aria-current="page"] em { color: #ffaa44; }
.sb-cnt-side footer { margin-top: auto; padding-top: 10px; border-top: 1px dashed rgba(92,224,100,0.3); font-size: 11px; color: #5ce064; letter-spacing: 0.06em; opacity: 0.8; }
.sb-cnt-cursor { color: #ffaa44; animation: sb-cnt-blink 1s steps(1) infinite; }
@keyframes sb-cnt-blink { 0%, 49% { opacity: 1; } 50%, 100% { opacity: 0; } }
@media (prefers-reduced-motion: reduce) { .sb-cnt-cursor { animation: none; } }
.sb-cnt-main { position: relative; z-index: 1; padding: 30px 32px; display: flex; flex-direction: column; gap: 16px; }
.sb-cnt-eye { font-size: 11.5px; color: rgba(92,224,100,0.6); letter-spacing: 0.04em; font-style: italic; }
.sb-cnt-main h2 {
  margin: 0; font-family: 'JetBrains Mono', 'Courier New', monospace;
  font-size: clamp(32px, 5vw, 56px); font-weight: 800; line-height: 0.95;
  color: #5ce064; letter-spacing: -0.02em;
  text-shadow: 0 0 20px rgba(92,224,100,0.4);
}
.sb-cnt-main p { margin: 0; font-family: 'Inter', system-ui, sans-serif; font-size: 13.5px; color: rgba(214,235,218,0.9); line-height: 1.65; max-width: 480px; }
.sb-cnt-main em { color: #ffaa44; font-style: normal; font-weight: 600; text-shadow: 0 0 8px rgba(255,170,68,0.4); }
.sb-cnt-main strong { color: #5ce064; font-weight: 700; }
.sb-cnt-code { margin: 0; padding: 16px 18px; background: rgba(8,14,10,0.85); border: 1px solid rgba(92,224,100,0.3); border-radius: 4px; font-size: 12px; line-height: 1.7; color: #5ce064; white-space: pre-wrap; box-shadow: inset 0 0 24px rgba(92,224,100,0.05); }
@container (max-width: 600px) {
  .sb-cnt { grid-template-columns: 1fr; }
  .sb-cnt-side { flex-direction: row; align-items: center; gap: 8px; padding: 10px 12px; border-right: 0; border-bottom: 1px dashed rgba(92,224,100,0.3); overflow-x: auto; }
  .sb-cnt-side ul { flex-direction: row; gap: 4px; flex-shrink: 0; }
  .sb-cnt-side a { padding: 6px 10px; font-size: 12px; }
  .sb-cnt-side footer, .sb-cnt-brand { display: none; }
}
<div class="sb-cnt-wrap">
  <div class="sb-cnt">
    <span class="sb-cnt-glow" aria-hidden="true"></span>
    <span class="sb-cnt-scan" aria-hidden="true"></span>
    <aside class="sb-cnt-side" aria-label="Primary">
      <a class="sb-cnt-brand" href="#!">
        <span class="sb-cnt-prompt" aria-hidden="true">$</span>
        <span class="sb-cnt-name">vortex<small>.sh</small></span>
      </a>
      <nav aria-label="Primary">
        <ul>
          <li><a href="#!" aria-current="page"><em>01</em>home</a></li>
          <li><a href="#!"><em>02</em>library</a></li>
          <li><a href="#!"><em>03</em>projects</a></li>
          <li><a href="#!"><em>04</em>archive</a></li>
          <li><a href="#!"><em>05</em>settings</a></li>
        </ul>
      </nav>
      <footer><span class="sb-cnt-cursor" aria-hidden="true">▮</span> ready</footer>
    </aside>
    <main class="sb-cnt-main">
      <span class="sb-cnt-eye">/* container-queries.md */</span>
      <h2>Adaptive<br/>by container.</h2>
      <p>Resize the card width — when this <em>container</em> drops below 600px, the sidebar collapses into a top nav. The <strong>viewport</strong> size is irrelevant; the layout reacts to its own parent. Drop this shell into any narrow column and it adapts on its own.</p>
      <pre class="sb-cnt-code">@container (max-width: 600px) {
  .sb-cnt { grid-template-columns: 1fr; }
  .sb-cnt-side { flex-direction: row; }
}</pre>
    </main>
  </div>
</div>
23 / 23
Glass Floating Sidebar
Pure CSS
◇ A E S T H E T I C ◇

Glass
over sunset.

The sidebar floats above a setting-sun horizon and a perspective grid that fades into haze. Backdrop-blur frosts the glass; pure CSS keyframes drift the sun.

vaporwaveaesthetic1995chrome
Vaporwave dream — chromatic magenta-to-cyan gradient with a sun on the horizon, scanlines, and a translucent glass sidebar floating above it. backdrop-filter: blur() handles the frost; CSS keyframes drift the sun. Pure CSS, no images.
Try it
.sb-glx {
  position: relative;
  display: grid; grid-template-columns: 260px 1fr;
  min-height: 480px;
  font-family: 'Helvetica Neue', system-ui, -apple-system, sans-serif;
  color: #fff;
  border-radius: 14px; overflow: hidden;
  isolation: isolate;
  background: #1a0033;
}
.sb-glx-sky {
  position: absolute; inset: 0;
  background: linear-gradient(180deg, #2d0066 0%, #6a0a8c 30%, #ec1d8c 65%, #ff5e9c 80%, #ffa56a 100%);
  z-index: 0;
}
.sb-glx-sun {
  position: absolute;
  bottom: 32%; left: 50%;
  width: 220px; height: 220px;
  margin-left: -110px;
  border-radius: 50%;
  background: linear-gradient(180deg, #ffd700 0%, #ff5e9c 60%, #ec1d8c 100%);
  box-shadow: 0 0 80px rgba(255,215,0,0.6), 0 0 160px rgba(236,29,140,0.5);
  z-index: 1;
  animation: sb-glx-rise 12s ease-in-out infinite alternate;
}
.sb-glx-sun::before, .sb-glx-sun::after {
  content: ''; position: absolute; left: 0; right: 0; height: 5px;
  background: #1a0033;
}
.sb-glx-sun::before { bottom: 30%; box-shadow: 0 14px 0 #1a0033, 0 30px 0 #1a0033, 0 50px 0 #1a0033, 0 75px 0 #1a0033; }
.sb-glx-sun::after  { display: none; }
.sb-glx-grid {
  position: absolute; bottom: 0; left: 0; right: 0; height: 38%;
  background:
    linear-gradient(transparent 0%, rgba(0,229,255,0.4) 100%),
    repeating-linear-gradient(90deg, transparent 0 calc((100% / 24) - 1px), rgba(0,229,255,0.5) calc((100% / 24) - 1px) calc(100% / 24));
  background-size: 100% 100%, 100% 100%;
  transform: perspective(300px) rotateX(60deg);
  transform-origin: bottom;
  z-index: 1;
  mask-image: linear-gradient(transparent 0%, #000 30%);
  -webkit-mask-image: linear-gradient(transparent 0%, #000 30%);
}
.sb-glx-grid::before {
  content: ''; position: absolute; inset: 0;
  background: repeating-linear-gradient(0deg, transparent 0 18px, rgba(0,229,255,0.45) 18px 19px);
}
.sb-glx-scan {
  position: absolute; inset: 0; z-index: 2; pointer-events: none;
  background: repeating-linear-gradient(0deg, rgba(0,0,0,0.12) 0 1px, transparent 1px 4px);
  mix-blend-mode: overlay;
}
@keyframes sb-glx-rise {
  from { transform: translateY(20px); }
  to   { transform: translateY(-10px); }
}
@media (prefers-reduced-motion: reduce) { .sb-glx-sun { animation: none; } }
.sb-glx-side {
  position: relative; z-index: 3;
  margin: 18px 0 18px 18px; padding: 18px 14px; width: 224px;
  background: rgba(255,255,255,0.1);
  backdrop-filter: blur(20px) saturate(1.4);
  -webkit-backdrop-filter: blur(20px) saturate(1.4);
  border: 1px solid rgba(255,255,255,0.25);
  border-radius: 16px;
  box-shadow:
    0 16px 48px rgba(0,0,0,0.4),
    inset 0 1px 0 rgba(255,255,255,0.4),
    inset 0 0 0 1px rgba(255,255,255,0.06);
  display: flex; flex-direction: column; gap: 16px;
}
.sb-glx-brand { display: flex; align-items: center; gap: 10px; padding: 4px 6px 12px; border-bottom: 1px solid rgba(255,255,255,0.15); text-decoration: none; }
.sb-glx-mark { width: 28px; height: 28px; flex-shrink: 0; border-radius: 8px; background: linear-gradient(135deg, #00e5ff 0%, #ec1d8c 50%, #ffd700 100%); box-shadow: 0 0 18px rgba(236,29,140,0.6), inset 0 1px 0 rgba(255,255,255,0.5); }
.sb-glx-name { color: #fff; font-size: 16px; font-weight: 800; letter-spacing: 0.18em; line-height: 1; text-shadow: 0 0 8px rgba(255,94,156,0.8); }
.sb-glx-name small { display: block; font-family: 'Courier New', monospace; font-size: 9.5px; color: #00e5ff; font-weight: 700; letter-spacing: 0.4em; margin-top: 4px; text-shadow: 0 0 6px rgba(0,229,255,0.7); }
.sb-glx-side ul { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 4px; }
.sb-glx-side a {
  display: block; padding: 9px 12px; border-radius: 8px;
  font-family: 'Courier New', monospace;
  font-size: 13px; font-weight: 700; letter-spacing: 0.06em;
  color: rgba(255,255,255,0.85); text-decoration: none;
  border: 1px solid transparent;
  transition: background 0.18s, color 0.18s, border-color 0.18s, text-shadow 0.18s;
}
.sb-glx-side a:hover {
  background: rgba(255,255,255,0.12);
  color: #fff;
  border-color: rgba(255,255,255,0.25);
  text-shadow: 0 0 8px rgba(0,229,255,0.6);
}
.sb-glx-side a[aria-current="page"] {
  background: linear-gradient(90deg, rgba(0,229,255,0.25), rgba(236,29,140,0.25));
  color: #fff;
  border-color: rgba(255,255,255,0.4);
  text-shadow: 0 0 10px rgba(0,229,255,0.7);
  box-shadow: inset 0 0 16px rgba(0,229,255,0.15);
}
.sb-glx-side footer { margin-top: auto; display: flex; align-items: center; gap: 8px; padding: 10px 6px 0; border-top: 1px solid rgba(255,255,255,0.15); }
.sb-glx-dot { width: 8px; height: 8px; border-radius: 50%; background: #00ff9c; box-shadow: 0 0 12px #00ff9c, 0 0 24px rgba(0,255,156,0.5); animation: sb-glx-blink 1.6s ease-in-out infinite; }
@keyframes sb-glx-blink { 0%, 100% { opacity: 1; } 50% { opacity: 0.4; } }
@media (prefers-reduced-motion: reduce) { .sb-glx-dot { animation: none; } }
.sb-glx-side small { font-family: 'Courier New', monospace; font-size: 10.5px; color: rgba(255,255,255,0.85); letter-spacing: 0.06em; }
.sb-glx-main { position: relative; z-index: 3; padding: 32px 36px; display: flex; flex-direction: column; gap: 16px; }
.sb-glx-eye { font-family: 'Courier New', monospace; font-size: 11.5px; letter-spacing: 0.4em; color: #00e5ff; text-shadow: 0 0 10px rgba(0,229,255,0.7); }
.sb-glx-main h2 {
  margin: 0; font-size: clamp(34px, 5vw, 64px); font-weight: 900; line-height: 0.92;
  color: #fff; letter-spacing: -0.03em;
  text-shadow:
    -2px 0 0 rgba(236,29,140,0.7),
    2px 0 0 rgba(0,229,255,0.7),
    0 0 30px rgba(255,255,255,0.4);
}
.sb-glx-main p { margin: 0; font-size: 13.5px; color: rgba(255,255,255,0.92); line-height: 1.6; max-width: 460px; text-shadow: 0 1px 4px rgba(0,0,0,0.4); }
.sb-glx-main code { font-family: 'Courier New', monospace; font-size: 12px; color: #00e5ff; background: rgba(0,0,0,0.3); padding: 1px 6px; border-radius: 3px; border: 1px solid rgba(0,229,255,0.4); }
.sb-glx-tags { display: flex; flex-wrap: wrap; gap: 6px; margin-top: auto; }
.sb-glx-tags span { font-family: 'Courier New', monospace; font-size: 10.5px; padding: 5px 12px; border-radius: 12px; border: 1px solid rgba(255,255,255,0.4); color: #fff; background: rgba(255,255,255,0.1); backdrop-filter: blur(8px); -webkit-backdrop-filter: blur(8px); letter-spacing: 0.16em; text-transform: uppercase; }
@media (max-width: 720px) {
  .sb-glx { grid-template-columns: 1fr; }
  .sb-glx-side { width: auto; margin: 14px 14px 0; }
}
<div class="sb-glx">
  <div class="sb-glx-sky" aria-hidden="true"></div>
  <div class="sb-glx-sun" aria-hidden="true"></div>
  <div class="sb-glx-grid" aria-hidden="true"></div>
  <div class="sb-glx-scan" aria-hidden="true"></div>
  <aside class="sb-glx-side" aria-label="Primary">
    <a class="sb-glx-brand" href="#!">
      <span class="sb-glx-mark" aria-hidden="true"></span>
      <span class="sb-glx-name">Mirage<small>1995</small></span>
    </a>
    <nav aria-label="Primary">
      <ul>
        <li><a href="#!" aria-current="page">▸ Overview</a></li>
        <li><a href="#!">Projects</a></li>
        <li><a href="#!">Members</a></li>
        <li><a href="#!">Activity</a></li>
        <li><a href="#!">Settings</a></li>
      </ul>
    </nav>
    <footer>
      <span class="sb-glx-dot" aria-hidden="true"></span>
      <small>Online · 24,891</small>
    </footer>
  </aside>
  <main class="sb-glx-main">
    <span class="sb-glx-eye">◇ A E S T H E T I C ◇</span>
    <h2>Glass<br/>over sunset.</h2>
    <p>The sidebar floats above a setting-sun horizon and a perspective grid that fades into haze. Backdrop-blur frosts the glass; pure CSS keyframes drift the sun.</p>
    <div class="sb-glx-tags">
      <span>vaporwave</span><span>aesthetic</span><span>1995</span><span>chrome</span>
    </div>
  </main>
</div>
FAQ

Frequently asked questions

What is a CSS sidebar layout?
A sidebar layout is a page shell with a vertical navigation column docked beside the main content. It's the default structure for admin dashboards, mail clients, IDEs, documentation sites, and any app where users need persistent navigation that doesn't compete with the work surface.
When should I use a fixed sidebar vs an off-canvas drawer?
Use a fixed sidebar on desktop when navigation is used constantly (admin dashboards, IDEs, mail). Use an off-canvas drawer on mobile or for apps where the user spends most of their time in the main content (reading apps, single-task tools). Many production apps use both — fixed at ≥1024px, drawer below.
How do I make a sidebar accessible?
Wrap it in <aside aria-label="Primary"> not a <div>. Use <nav> with a real <ul><li><a> list, mark the active link with aria-current="page", and use <button type="button" aria-expanded aria-controls> for any toggle. For nested submenus, prefer native <details>/<summary> — the browser handles keyboard, ARIA, and Enter/Space for free.
Pure CSS or JavaScript for the toggle?
Pure CSS first, via a hidden checkbox + :has(:checked). It works without JS and is bulletproof. Add JavaScript only when you genuinely need it — to persist state across reloads (localStorage), to close the drawer on route change, or to trap focus inside an open dialog. The persistent collapsible demo shows the JS pattern when you do need it.
How do I keep the sidebar from overlapping content on mobile?
Switch the layout below 720 px. The simplest approach is a CSS grid that goes from `grid-template-columns: 240px 1fr` (desktop) to `1fr` (mobile), with the sidebar stacking above the main content — every demo here ships that fallback. If you need a true overlay drawer at small widths, use the off-canvas pattern (demo 03) — it captures pointer events on the backdrop so taps outside dismiss it.

Related collections