MODULE
Platform card
One machine's builds, with what to do after the download. A download page's real question is not which file — it is and then what, and every card carries the answer for its own machine right next to the button.
Two machines, two answers
Each card draws its own edge and its own corner, so it sits in a split rather than a hairline mesh: these are self-contained offers, not cells of one table. Three fit on a line at --split-min: 280px and stack in source order when they cannot.
Linux
YOUR SYSTEMx86_64 · glibc 2.28 or newer
AppImage 62 MB tar.gz 58 MBchmod +x Flatty.AppImage
./Flatty.AppImage
No terminal? Right-click the file, Properties, Permissions, allow executing. Same thing.
Windows
Windows 10 and 11 · x64
Portable .zip 71 MB Installer soonExtract the folder, run the program inside it, and keep the folder wherever you like. Nothing is written outside it.
<div class="split" style="--split-min:280px; width:100%">
<div class="platform-card">
<div class="platform-card-head">
<h3 class="platform-card-name">Linux</h3>
<span class="chip chip-open">YOUR SYSTEM</span>
</div>
<p class="platform-card-spec">x86_64 · glibc 2.28 or newer</p>
<a class="platform-card-get" href="#">AppImage <span class="platform-card-size">62 MB</span></a>
<a class="platform-card-get platform-card-get-quiet" href="#">tar.gz <span class="platform-card-size">58 MB</span></a>
<div class="platform-card-steps">
<span class="platform-card-steps-label">THEN, IN A TERMINAL</span>
<pre class="code-block code-block-sunk"><code>chmod +x Flatty.AppImage
./Flatty.AppImage</code></pre>
<p class="platform-card-note">No terminal? Right-click the file, Properties, Permissions, allow executing. Same thing.</p>
</div>
</div>
<div class="platform-card">
<div class="platform-card-head">
<h3 class="platform-card-name">Windows</h3>
</div>
<p class="platform-card-spec">Windows 10 and 11 · x64</p>
<a class="platform-card-get" href="#">Portable .zip <span class="platform-card-size">71 MB</span></a>
<span class="platform-card-get btn-soon">Installer <span class="platform-card-size">soon</span></span>
<div class="platform-card-steps">
<span class="platform-card-steps-label">THEN, THREE CLICKS</span>
<p class="platform-card-note">Extract the folder, run the program inside it, and keep the folder wherever you like. Nothing is written outside it.</p>
</div>
</div>
</div>Reference
Read from modules/platform-card.css when this page was built, so it cannot fall behind the stylesheet.
.platform-card.platform-card-head.platform-card-name.platform-card-spec.platform-card-get.platform-card-size.platform-card-get-quiet.platform-card-steps.platform-card-steps-label.platform-card-note--platform-card-pad — falls back to --ds-pad-card--ds-action--ds-font-body--ds-font-display--ds-gap--ds-gap-loose--ds-gap-tight--ds-hairline--ds-hit-min--ds-ink--ds-ink-faint--ds-ink-on-action--ds-ink-read--ds-ink-soft--ds-muted-on-cream--ds-pad-control--ds-radius--ds-radius-control--ds-raised--ds-rule--ds-rule-strong--ds-text-caption--ds-text-h3--ds-text-meta--ds-text-ui--ds-track-button--ds-track-meta--ds-track-note--ds-track-snug--ds-weight-displayNotes
The row is a <span> wearing btn-soon, so there is nothing to focus and nothing to press. It still holds its place, keeps the card level with its neighbours, and says what is coming. Drop it instead and the row re-lays out, sliding the next card's real button under a cursor already on its way down.
It is dashed rather than merely dimmed, and that is the one thing on the card drawn differently instead of quieter. "Coming" is not the same claim as "you may not have this".
That dash is the button's, not this module's. There was a -get-soon here for one morning, which was the same edge spelled twice. It composes because of the layer order rather than by luck: a module is ds-modules and a component is ds-components, so the button paints the edge and the row keeps the geometry.
A deliberate omission rather than a plain style. Every focus ring in this library is a box-shadow drawn in @layer base, and any component layer outranks it — so a row that grows a resting shadow and no focus rule of its own drops its ring entirely, silently. Depth here comes from the fill, so there is nothing to swallow.
A reader picks the format first and checks the weight second, so the two go to opposite ends of the row rather than running together. On the filled row the size is muted and the label is not, for the same reason.