Column 1
Layout
Responsive layout primitives — grid, sidebar, overflow, embed, cluster, sticky, and app shell.
Auto Grid
Auto-fit responsive grid — wraps at 18rem by default.
Column 2
Column 3
<div class="fap-grid">
<article><p>Column 1</p></article>
<article><p>Column 2</p></article>
<article><p>Column 3</p></article>
</div>
Sidebar layout
.fap-sidebar — flex-based sidebar + main content pattern.
<div class="fap-sidebar">
<aside>
<p>Sidebar content</p>
</aside>
<div>
<p>Main content — takes remaining space.</p>
</div>
</div>
App shell layout
[data-app] on <body> — YouTube-style fixed viewport layout. Header auto-sizes, sidebar and main each scroll independently. This page uses it.
<body data-app>
<nav data-sticky>header bar</nav>
<div class="fap-sidebar">
<aside>sidebar nav</aside>
<main>content</main>
</div>
</body>
Overflow wrapper
Wrap wide content (tables) in .fap-overflow for horizontal scrolling.
| A | B | C | D | E | F | G | H |
|---|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
<div class="fap-overflow">
<table>
<thead><tr><th>A</th><th>B</th><th>C</th>…</tr></thead>
<tbody><tr><td>1</td><td>2</td><td>3</td>…</tr></tbody>
</table>
</div>
Responsive embed
<div class="fap-embed">
<iframe src="https://example.com" title="Embed"></iframe>
</div>
<!-- Aspect ratio variants -->
<div class="fap-embed" data-ratio="4:3">…</div>
<div class="fap-embed" data-ratio="1:1">…</div>
Cluster
.fap-cluster — flex wrap with gap.
<div class="fap-cluster">
<button>One</button>
<button data-secondary>Two</button>
<button data-outline>Three</button>
<button data-ghost>Four</button>
</div>
Sticky positioning
[data-sticky] makes any element sticky at the top of its scroll container.
<nav data-sticky>
<strong>Brand</strong>
<ul>…</ul>
</nav>