Layout Updated
Object-shaped cards
Where a record stands for a physical thing, the card is drawn as that thing — nine variations in pure gradients.
Good for collections, catalogues, inventories
Layout Updated Added Aug 21, 2026 · Updated Sep 28, 2026
A row of stat tiles joined by hairlines that are grid gap, not borders — the container paints the border color and the tiles paint the surface, so separators never double up or break when the row wraps — in a reporting form and in a second form where each tile is the filter for the list beneath it.
Reach for it when building
Reporting only — the figures are the whole job.
Same strip, working as the filter. Press a tile to narrow the list; press it again to clear.
Showing all 6 downloads.
<p class="cap">Reporting only — the figures are the whole job.</p>
<dl class="hss-strip">
<div class="hss-tile"><dt class="hss-label">Documents</dt><dd class="hss-fig">1,482</dd><dd class="hss-sub">this period</dd></div>
<div class="hss-tile"><dt class="hss-label">Median time</dt><dd class="hss-fig">3.2s</dd><dd class="hss-sub">last 24h</dd></div>
<div class="hss-tile"><dt class="hss-label">Clean runs</dt><dd class="hss-fig">98.4%</dd><dd class="hss-sub">no retries</dd></div>
<div class="hss-tile"><dt class="hss-label">Quality score</dt><dd class="hss-fig dim">—</dd><dd class="hss-sub">not rated yet</dd></div>
</dl>
<p class="cap">Same strip, working as the filter. Press a tile to narrow the list; press it again to clear.</p>
<div class="hss-strip five" role="group" aria-label="Filter downloads by status">
<button class="hss-tile" type="button" data-hss-filter="All" aria-pressed="true"><span class="hss-label">All</span><span class="hss-fig">6</span><span class="hss-sub">downloads</span></button>
<button class="hss-tile" type="button" data-hss-filter="Queued" aria-pressed="false"><span class="hss-label">Queued</span><span class="hss-fig">2</span><span class="hss-sub">downloads</span></button>
<button class="hss-tile" type="button" data-hss-filter="Downloading" aria-pressed="false"><span class="hss-label">Downloading</span><span class="hss-fig">1</span><span class="hss-sub">download</span></button>
<button class="hss-tile" type="button" data-hss-filter="Done" aria-pressed="false"><span class="hss-label">Done</span><span class="hss-fig">2</span><span class="hss-sub">downloads</span></button>
<button class="hss-tile" type="button" data-hss-filter="Failed" aria-pressed="false"><span class="hss-label">Failed</span><span class="hss-fig">1</span><span class="hss-sub">download</span></button>
</div>
<ul class="hss-list">
<li data-status="Done">Bicycle drivetrain teardown <span>Done</span></li>
<li data-status="Downloading">Kiln firing, part three <span>Downloading</span></li>
<li data-status="Queued">Field recording — marsh at dawn <span>Queued</span></li>
<li data-status="Done">Lathe restoration, episode 12 <span>Done</span></li>
<li data-status="Failed">Sourdough hydration tests <span>Failed</span></li>
<li data-status="Queued">Bookbinding: the long stitch <span>Queued</span></li>
</ul>
<p class="hss-status" role="status" aria-live="polite">Showing all 6 downloads.</p>Colors come from shared theme tokens — --surface, --ink, --border, --accent and friends — so this CSS carries no palette of its own. Use Runnable file to copy the tokens along with it.
.hss-strip {
display: grid;
gap: 1px; /* the hairline */
background: var(--border); /* shows through the gap */
border: 1px solid var(--border);
border-radius: var(--radius);
overflow: hidden;
grid-template-columns: 1fr;
}
@media (min-width: 21rem) { .hss-strip { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
@media (min-width: 42rem) { .hss-strip { grid-template-columns: repeat(4, minmax(0, 1fr)); } }
.hss-tile { background: var(--surface); padding: .9rem 1rem; min-width: 0; }
.hss-label {
font-family: ui-monospace, monospace;
font-size: .8125rem;
text-transform: uppercase;
letter-spacing: .07em;
color: var(--dim);
}
.hss-fig { font-size: 1.6rem; font-weight: 700; font-variant-numeric: tabular-nums; }
.hss-fig.dim { color: var(--dim); font-weight: 400; }
button.hss-tile[aria-pressed="true"] {
background: color-mix(in srgb, var(--accent) 14%, var(--surface));
}const tiles = document.querySelectorAll('[data-hss-filter]');
const rows = document.querySelectorAll('.hss-list li');
const status = document.querySelector('.hss-status');
tiles.forEach((tile) => tile.addEventListener('click', () => {
const alreadyOn = tile.getAttribute('aria-pressed') === 'true';
const value = alreadyOn ? 'All' : tile.dataset.hssFilter;
tiles.forEach((other) =>
other.setAttribute('aria-pressed', String(other.dataset.hssFilter === value)));
let shown = 0;
rows.forEach((row) => {
row.hidden = value !== 'All' && row.dataset.status !== value;
if (!row.hidden) shown += 1;
});
status.textContent = value === 'All'
? `Showing all ${rows.length} downloads.`
: `Filtered to ${value}: ${shown} of ${rows.length}. Press the lit tile again to clear.`;
}));Build a strip of statistic tiles that reads as one joined instrument panel rather than a row of floating cards.
The separators between tiles must not be borders. Make the container a CSS grid with gap: 1px and give the container itself the border color as its background; each tile then paints the surface color on top. The 1px of container showing through the gap is the hairline. This is the entire pattern: real borders double where two tiles meet and leave a stray edge when auto-fit wraps the row, and a gap physically cannot do either.
The full prompt continues with:
aria-pressed rather than tab roles:root { --surface:#fff; --border:#d2d8e0; --dim:#56606e; --accent:#364f6a; --radius:10px; }
.hss-strip {
display: grid;
gap: 1px; /* the hairline */
background: var(--border); /* shows through the gap */
border: 1px solid var(--border);
border-radius: var(--radius);
overflow: hidden;
grid-template-columns: 1fr;
}
@media (min-width: 21rem) { .hss-strip { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
@media (min-width: 42rem) { .hss-strip { grid-template-columns: repeat(4, minmax(0, 1fr)); } }
.hss-tile { background: var(--surface); padding: .9rem 1rem; min-width: 0; }
.hss-label {
font-family: ui-monospace, monospace;
font-size: .8125rem;
text-transform: uppercase;
letter-spacing: .07em;
color: var(--dim);
}
.hss-fig { font-size: 1.6rem; font-weight: 700; font-variant-numeric: tabular-nums; }
.hss-fig.dim { color: var(--dim); font-weight: 400; }
button.hss-tile[aria-pressed="true"] {
background: color-mix(in srgb, var(--accent) 14%, var(--surface));
}
<p class="cap">Reporting only — the figures are the whole job.</p>
<dl class="hss-strip">
<div class="hss-tile"><dt class="hss-label">Documents</dt><dd class="hss-fig">1,482</dd><dd class="hss-sub">this period</dd></div>
<div class="hss-tile"><dt class="hss-label">Median time</dt><dd class="hss-fig">3.2s</dd><dd class="hss-sub">last 24h</dd></div>
<div class="hss-tile"><dt class="hss-label">Clean runs</dt><dd class="hss-fig">98.4%</dd><dd class="hss-sub">no retries</dd></div>
<div class="hss-tile"><dt class="hss-label">Quality score</dt><dd class="hss-fig dim">—</dd><dd class="hss-sub">not rated yet</dd></div>
</dl>
<p class="cap">Same strip, working as the filter. Press a tile to narrow the list; press it again to clear.</p>
<div class="hss-strip five" role="group" aria-label="Filter downloads by status">
<button class="hss-tile" type="button" data-hss-filter="All" aria-pressed="true"><span class="hss-label">All</span><span class="hss-fig">6</span><span class="hss-sub">downloads</span></button>
<button class="hss-tile" type="button" data-hss-filter="Queued" aria-pressed="false"><span class="hss-label">Queued</span><span class="hss-fig">2</span><span class="hss-sub">downloads</span></button>
<button class="hss-tile" type="button" data-hss-filter="Downloading" aria-pressed="false"><span class="hss-label">Downloading</span><span class="hss-fig">1</span><span class="hss-sub">download</span></button>
<button class="hss-tile" type="button" data-hss-filter="Done" aria-pressed="false"><span class="hss-label">Done</span><span class="hss-fig">2</span><span class="hss-sub">downloads</span></button>
<button class="hss-tile" type="button" data-hss-filter="Failed" aria-pressed="false"><span class="hss-label">Failed</span><span class="hss-fig">1</span><span class="hss-sub">download</span></button>
</div>
<ul class="hss-list">
<li data-status="Done">Bicycle drivetrain teardown <span>Done</span></li>
<li data-status="Downloading">Kiln firing, part three <span>Downloading</span></li>
<li data-status="Queued">Field recording — marsh at dawn <span>Queued</span></li>
<li data-status="Done">Lathe restoration, episode 12 <span>Done</span></li>
<li data-status="Failed">Sourdough hydration tests <span>Failed</span></li>
<li data-status="Queued">Bookbinding: the long stitch <span>Queued</span></li>
</ul>
<p class="hss-status" role="status" aria-live="polite">Showing all 6 downloads.</p>
<script>const tiles = document.querySelectorAll('[data-hss-filter]');
const rows = document.querySelectorAll('.hss-list li');
const status = document.querySelector('.hss-status');
tiles.forEach((tile) => tile.addEventListener('click', () => {
const alreadyOn = tile.getAttribute('aria-pressed') === 'true';
const value = alreadyOn ? 'All' : tile.dataset.hssFilter;
tiles.forEach((other) =>
other.setAttribute('aria-pressed', String(other.dataset.hssFilter === value)));
let shown = 0;
rows.forEach((row) => {
row.hidden = value !== 'All' && row.dataset.status !== value;
if (!row.hidden) shown += 1;
});
status.textContent = value === 'All'
? `Showing all ${rows.length} downloads.`
: `Filtered to ${value}: ${shown} of ${rows.length}. Press the lit tile again to clear.`;
}));</script>
All nine Layout patterns. The outlined frame is the one you are on.
Layout Updated
Where a record stands for a physical thing, the card is drawn as that thing — nine variations in pure gradients.
Good for collections, catalogues, inventories
Layout
A container with no artwork draws one from up to four member tiles, grid tracks following tile count.
Good for playlists, albums, folders
Layout Updated
Text printed over unreviewed artwork, scrimmed to an alpha that can be written down rather than guessed.
Good for heroes, cover cards, user artwork
Layout Updated
Stat tiles joined by hairlines that are grid gap, not borders.
Good for summary strips, KPI rows, usage overviews
Layout
Conversation bubbles with a speaker-colored spine and a fixed metadata gutter.
Good for chat logs, agent transcripts, interviews
Layout
Pinned paper notes on a cork board where every texture is layered CSS gradients.
Good for notes, reminders, family boards
Layout Updated
Markers at percentage coordinates over a fixed-aspect picture, turning into a list when too narrow.
Good for annotated images, floor plans, product tours
Layout
Inline drawings for empty surfaces stroked in the inherited text colour.
Good for empty lists, first runs, zero results
Layout
Cards flowing down columns instead of across rows, with the reading-order cost stated plainly.
Good for mood boards, galleries, notes walls