diff --git a/booth/templates/base.html b/booth/templates/base.html
index 46e6e62..325d4cd 100644
--- a/booth/templates/base.html
+++ b/booth/templates/base.html
@@ -101,6 +101,9 @@
.empty{border:1.5px dashed var(--border-strong);border-radius:var(--radius-xl);
padding:48px 24px;text-align:center;color:var(--text-muted);background:var(--surface-sunken);
font-family:var(--font-mono);font-size:var(--size-sm)}
+ .empty b{color:var(--text-heading);font-weight:600}
+ .empty a{margin-left:6px}
+ .rail+.empty{margin-bottom:16px}
/* ---- upload / pickup -------------------------------------------------- */
.uploader{display:flex;gap:var(--space-3);align-items:stretch;margin-bottom:28px;flex-wrap:wrap}
@@ -339,6 +342,10 @@
/* THE RAIL. Sticky, opaque, and counted in mono because the counts are
records. The active filter is a place you are, not an armed thing, so it
is lifted rather than coloured. */
+ /* A fragment jump or a cursor move must land its tile BELOW the stuck rail,
+ not under it (heid bug-hunt, 2026-09-23). The rail wraps, so its height is
+ not knowable in CSS: --rail-h is measured by the script at the foot of
+ this template, and the 120px fallback clears a three-line desktop rail with JS off. */
.rail{position:sticky;top:0;z-index:5;display:flex;gap:6px 8px;align-items:center;flex-wrap:wrap;
padding:10px 0;margin:0 0 16px;background:var(--surface-base);
border-bottom:1px solid var(--border-subtle);font-family:var(--font-mono);font-size:var(--size-caption)}
@@ -361,7 +368,7 @@
.gallery{display:grid;gap:var(--space-5);grid-template-columns:repeat(auto-fill,minmax(320px,1fr));align-items:start}
.item{position:relative;margin:0;background:var(--surface-card);border:1px solid var(--border-default);
border-radius:var(--radius-xl);overflow:hidden;display:flex;flex-direction:column;box-shadow:var(--shadow-sm);
- scroll-margin-top:72px}
+ scroll-margin-top:calc(var(--rail-h, 120px) + 12px)}
.item img,.item video{width:100%;height:auto;display:block;background:var(--surface-sunken)}
.item audio{width:100%;margin:20px 14px 6px;max-width:calc(100% - 28px)}
.item .dl{padding:22px 14px;font-family:var(--font-mono);font-size:var(--size-sm);word-break:break-all}
@@ -631,6 +638,21 @@
ephemeral media · auto-wipes {{ ttl_hours }}h · kept boards don't
{% block content %}{% endblock %}
+