From df304918f8e486ae8226bda319a8457cae2d5a15 Mon Sep 17 00:00:00 2001
From: Nexoniarz
Date: Wed, 23 Sep 2026 14:45:36 +0200
Subject: [PATCH] site: "what it has" is a rail you move along, not a wall you
skim
Eleven cards in a grid is a list people stop reading somewhere around the
fourth one. A row you move through is one you go along, and the section is a
survey rather than a comparison -- nothing in it needs to be read beside
anything else, which is the test for whether a grid was carrying information
or just filling space.
So it is a `.nv-scroller`: snapping, hidden scrollbar, arrows that appear only
at the end that has something behind it, and an edge fade that says "more this
way" without a scrollbar having to. All of that is the component's.
**This site's part is one declaration.** `--nv-scroller-item: 21rem`, because
18rem is a width for a card carrying a line and these carry a paragraph. I had
also written `align-self: stretch` to make the heights match, then checked:
they already do, because a flex row stretches by default. The rule came back
out -- restating something the system already guarantees is exactly the drift
the split between Niveus and `app.css` exists to prevent.
The honest cost: a reader who does not scroll sees three cards rather than
eleven, and the section's own claim ("every card marked runs is in the tree")
is about all of them. The fade and the arrows are what pay for that, and they
are the reason this is a scroller rather than a row with a scrollbar.
Verified in a browser: 11 items, equal 256px heights with no rule of ours,
`data-nv-at-start` set and `data-nv-at-end` clear on load, and the arrows page
the rail and swap over as it reaches each end.
Co-Authored-By: Claude Opus 5
---
docs/Website/app.css | 13 +++++++++++++
docs/Website/index.html | 22 +++++++++++++++++++++-
2 files changed, 34 insertions(+), 1 deletion(-)
diff --git a/docs/Website/app.css b/docs/Website/app.css
index ec01730..4868c14 100644
--- a/docs/Website/app.css
+++ b/docs/Website/app.css
@@ -527,3 +527,16 @@
.doc li + li {
margin-block-start: var(--nv-space-2);
}
+
+/* --- The feature rail --------------------------------------------------------- */
+/*
+ One declaration, because the component already does the rest: the equal
+ heights are the flex default, the snapping, the hidden scrollbar and the
+ fade that marks which end has more behind it are all .nv-scroller's. The
+ only thing it cannot know is how wide a card of *this* content wants to be,
+ and 18rem is a line where these carry a paragraph.
+*/
+
+.features {
+ --nv-scroller-item: 21rem;
+}
diff --git a/docs/Website/index.html b/docs/Website/index.html
index 066c16c..674d226 100644
--- a/docs/Website/index.html
+++ b/docs/Website/index.html
@@ -246,7 +246,13 @@
-