User page: hash-routed view, full block hash, aligned rewards

The per-user view was an overlay modal, but users asked for an
actual page — focused, scrollable, addressable. Replace the modal
with a hash-routed page: selectUser(addr) sets window.location.hash
to #/user/<addr> and a hashchange listener syncs the selection
state back, so browser back/forward and direct-link refresh all
work without a routing library. App renders the dashboard or the
UserDetailPage based on selection.user.

Make the clickable BTC addresses in the Miners table obviously
interactive: accent colour, always-on dashed underline, brighter on
hover/focus. The previous styling rendered them as dim static text
with a hover underline, so it wasn't obvious they were links.

BlocksTable: show the full 64-char block hash as a link to
mempool.space (auto-picks testnet4/signet based on snap.chain).
word-break: break-all keeps the hash from blowing out the column
width. Reward column is split into a tabular-num number span and a
dim 0.75em "BTC" unit span, matching the Block reward tile in the
overview, so numbers line up cleanly across rows.
This commit is contained in:
satoshi
2026-04-24 01:02:11 +03:00
parent c104c1eefa
commit 49c951f94f
6 changed files with 397 additions and 337 deletions
+9 -6
View File
@@ -138,21 +138,24 @@
}
.addr-btn {
display: inline-block;
color: var(--fg-dim);
font-size: 0.8em;
color: var(--accent);
font-size: 0.82em;
background: transparent;
border: none;
padding: 0;
margin: 0;
margin-top: 0.1em;
cursor: pointer;
text-align: left;
text-decoration: none;
border-bottom: 1px dashed transparent;
border-bottom: 1px dashed var(--accent-dim);
transition: color 0.15s, border-bottom-color 0.15s;
}
.addr-btn:hover {
color: var(--accent);
.addr-btn:hover,
.addr-btn:focus-visible {
color: #ff9a5f;
border-bottom-color: var(--accent);
background: transparent;
outline: none;
}
tr.offline {
opacity: 0.4;