fin1te/dsv1.0.0
  1. ds
  2. Foundations
  3. Layout

Layout

Max width, gutter, prose measure and the rem scaling.

TokenValueUse
--max80remPage content width. .wrap centres it.
--gutterclamp(1.25rem, 4vw, 2.5rem)Side padding. Grows from 20px on phones to 40px.
--prose68chMeasure for long-form text.

Root scaling

The root font size is 100% below 1400px, 112.5% from 1400px and 125% from 1800px. Because every size is in rem, the whole page scales together on big monitors instead of leaving a narrow column in a sea of background.

Section rhythm

Pages are a stack of .section blocks, each with a rule on top and generous padding. A .section-head puts the kicker in a 13.75rem left column and the heading next to it on wide screens, and stacks them on phones.

Selected work

Things that got faster

Each one started as a slow dashboard.

Code
<section class="section" style="padding:2rem 1.75rem;border-top:0">
  <header class="section-head" style="margin:0">
    <p class="label">Selected work</p>
    <div>
      <h2>Things that got faster</h2>
      <p>Each one started as a slow dashboard.</p>
    </div>
  </header>
</section>

Rows before cards

Lists of work, projects and posts are rows: a rule above each item, a meta column on the left. Reach for .card only when items are peers in a grid.

2026 · Rust

DataCraft

A Spark-compatible runtime in Rust.

2025 · ClickHouse

IPDR analytics

Two trillion rows, queried in seconds.

Code
<div class="rows">
  <div><p class="mono muted" style="font-size:.75rem">2026 · Rust</p><div><h3 class="accent">DataCraft</h3><p class="muted">A Spark-compatible runtime in Rust.</p></div></div>
  <div><p class="mono muted" style="font-size:.75rem">2025 · ClickHouse</p><div><h3 class="accent">IPDR analytics</h3><p class="muted">Two trillion rows, queried in seconds.</p></div></div>
</div>