feat(sirius-x): footer everywhere, redesigned wallet button, dropdown auto-acts
Three UX fixes:
1. Beautiful footer on every page. Extracted the 4-column landing footer
into js/site-footer.js — reads the nav brand link to derive per-page
base ('./' at root, '../' in subdirs) so links resolve from any depth
without duplicating the HTML across 8 pages. Every page now ships an
empty <footer id="site-footer"></footer> and includes the injector;
inline footer + its CSS block removed from landing too so the source
stays in one place.
2. Wallet button redesign. Pill now shows a state dot (dim when not
signed in, green with subtle glow when signed in), a monospace short
address label when signed in ('qra6rs…7yl2') OR 'Wallet' when not,
a WC/seed badge on signed-in state, and a subtle caret. Full border
and hover states, proper aria-expanded/aria-label wiring. Dropdown
menu itself upgraded: grid layout per item (icon column + title +
hint), heavier backdrop blur, larger min-width, clearer typography.
3. Dropdown options actually do something. Removed the redundant 'Open
sign-in page →' item — the other three all land on portal too, so
listing 'open the page' as a fourth option was noise. On portal
arrival, the ?mode= handler now AUTO-TRIGGERS the primary action for
each mode:
new -> click Generate a phrase (12 words appear immediately)
import -> focus the seed textarea (cursor ready to paste)
wc -> click Connect wallet (WC session starts, URI shown)
No extra clicks between dropdown choice and the flow it names.
Cache-buster on the profile-menu.js include bumped to
?v=20260907wallet so cached copies pick up the new design; footer
injector at ?v=20260907rel.
2026-09-07 22:00:21 +02:00
|
|
|
|
// Injects the Sirius.X site footer into the current page. Every page in
|
|
|
|
|
|
// site-sirius-x/ ships an empty <footer id="site-footer"></footer> and a
|
|
|
|
|
|
// `<script defer src=".../js/site-footer.js">` include — this file paints
|
|
|
|
|
|
// the four-column layout, meta row, and CSS once, so nav changes stay
|
|
|
|
|
|
// single-source.
|
|
|
|
|
|
//
|
|
|
|
|
|
// Base URL detection: the nav's brand link is already set with the right
|
|
|
|
|
|
// relative path per page (./ at root, ../ in subdirs). Reuse it as the base
|
|
|
|
|
|
// for every same-site href, so root pages and subdir pages both link to the
|
|
|
|
|
|
// right destinations without the script needing to know its own depth.
|
|
|
|
|
|
|
|
|
|
|
|
(() => {
|
|
|
|
|
|
const mount = document.getElementById("site-footer");
|
|
|
|
|
|
if (!mount) return;
|
|
|
|
|
|
|
|
|
|
|
|
const brand = document.querySelector(".topnav .brand");
|
|
|
|
|
|
const base = (brand?.getAttribute("href") || "./").replace(/index\.html$/, "");
|
|
|
|
|
|
|
|
|
|
|
|
// Same-site link builder — prefixes the current-page base so ./docs/ becomes
|
|
|
|
|
|
// ./docs/ from root and ../docs/ from a subdir.
|
|
|
|
|
|
const s = (path) => base + path;
|
|
|
|
|
|
|
|
|
|
|
|
mount.className = "site-footer";
|
|
|
|
|
|
mount.innerHTML = `
|
|
|
|
|
|
<div class="cols">
|
|
|
|
|
|
<div class="brand-col">
|
|
|
|
|
|
<div class="mark">⭐</div>
|
|
|
|
|
|
<h4>Sirius<span class="g">.X</span></h4>
|
|
|
|
|
|
<p>The home for names on Bitcoin Cash. Register a TLD, register a name, verify anything against the chain.</p>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
<div>
|
|
|
|
|
|
<h5>Product</h5>
|
|
|
|
|
|
<ul>
|
2026-09-08 00:10:11 +02:00
|
|
|
|
<li><a href="${s("#search-input")}">✏️ Register a name</a></li>
|
feat(sirius-x): footer everywhere, redesigned wallet button, dropdown auto-acts
Three UX fixes:
1. Beautiful footer on every page. Extracted the 4-column landing footer
into js/site-footer.js — reads the nav brand link to derive per-page
base ('./' at root, '../' in subdirs) so links resolve from any depth
without duplicating the HTML across 8 pages. Every page now ships an
empty <footer id="site-footer"></footer> and includes the injector;
inline footer + its CSS block removed from landing too so the source
stays in one place.
2. Wallet button redesign. Pill now shows a state dot (dim when not
signed in, green with subtle glow when signed in), a monospace short
address label when signed in ('qra6rs…7yl2') OR 'Wallet' when not,
a WC/seed badge on signed-in state, and a subtle caret. Full border
and hover states, proper aria-expanded/aria-label wiring. Dropdown
menu itself upgraded: grid layout per item (icon column + title +
hint), heavier backdrop blur, larger min-width, clearer typography.
3. Dropdown options actually do something. Removed the redundant 'Open
sign-in page →' item — the other three all land on portal too, so
listing 'open the page' as a fourth option was noise. On portal
arrival, the ?mode= handler now AUTO-TRIGGERS the primary action for
each mode:
new -> click Generate a phrase (12 words appear immediately)
import -> focus the seed textarea (cursor ready to paste)
wc -> click Connect wallet (WC session starts, URI shown)
No extra clicks between dropdown choice and the flow it names.
Cache-buster on the profile-menu.js include bumped to
?v=20260907wallet so cached copies pick up the new design; footer
injector at ?v=20260907rel.
2026-09-07 22:00:21 +02:00
|
|
|
|
<li><a href="${s("tld.html")}">🌐 Register a TLD</a></li>
|
feat(bns): name marketplace and TLD-owner co-sign rule
Two gaps the owner panel left open. First, a hidden TLD was only a UI
gate: anyone could still broadcast a REG under it and every indexer
admitted it. Second, there was no way to sell a name without trusting
the other side.
Co-sign rule (consensus, applied in lockstep by bns.js and
resolver-web.js): a REG under a TLD whose records at that height say
policy "cosign" or hidden 1 is indexed only if the transaction carries
the TLD's own certificate. The certificate can only be spent by the
owner's key and is re-issued to them in the same transaction, so it is
a co-signature nobody can forge and nothing is consumed. The TLD map
now keeps the TUPD timeline so policy is evaluated at the REG height.
Owners register under their private TLDs with the certificate added
from their own wallet; third parties under a "cosign" TLD build the
full transaction, sign their inputs and queue it at /api/cosign, where
the owner approves it from the dashboard (signCosignRequest refuses to
sign unless the certificate returns to the same locking script).
Marketplace: a listing is the seller's certificate input plus a price
output signed SIGHASH_SINGLE|ANYONECANPAY, stored by the gateway as a
bulletin board (/api/market, verified against the on-chain owner and
pruned when the certificate moves). The buyer completes it in one
transaction, so the seller is paid exactly when the name moves.
Cancelling also spends the certificate once so the offer is void.
Site: market.html, Sell sub-tab and Pending approvals in the portal,
Market link in nav and footer, six dictionaries extended, cache tags
bumped. Verified on chipnet: cosigned.sc registered by a throwaway
wallet through the queue with the .sc certificate back at the owner;
aloevera.test listed and delisted through the API.
Ariadne's resolver-web.js copy and the mobile Bns.java port still need
the co-sign rule; until then they admit REGs this index rejects.
2026-09-17 04:04:22 +02:00
|
|
|
|
<li><a href="${s("market.html")}">🛒 Names for sale</a></li>
|
feat(sirius-x): footer everywhere, redesigned wallet button, dropdown auto-acts
Three UX fixes:
1. Beautiful footer on every page. Extracted the 4-column landing footer
into js/site-footer.js — reads the nav brand link to derive per-page
base ('./' at root, '../' in subdirs) so links resolve from any depth
without duplicating the HTML across 8 pages. Every page now ships an
empty <footer id="site-footer"></footer> and includes the injector;
inline footer + its CSS block removed from landing too so the source
stays in one place.
2. Wallet button redesign. Pill now shows a state dot (dim when not
signed in, green with subtle glow when signed in), a monospace short
address label when signed in ('qra6rs…7yl2') OR 'Wallet' when not,
a WC/seed badge on signed-in state, and a subtle caret. Full border
and hover states, proper aria-expanded/aria-label wiring. Dropdown
menu itself upgraded: grid layout per item (icon column + title +
hint), heavier backdrop blur, larger min-width, clearer typography.
3. Dropdown options actually do something. Removed the redundant 'Open
sign-in page →' item — the other three all land on portal too, so
listing 'open the page' as a fourth option was noise. On portal
arrival, the ?mode= handler now AUTO-TRIGGERS the primary action for
each mode:
new -> click Generate a phrase (12 words appear immediately)
import -> focus the seed textarea (cursor ready to paste)
wc -> click Connect wallet (WC session starts, URI shown)
No extra clicks between dropdown choice and the flow it names.
Cache-buster on the profile-menu.js include bumped to
?v=20260907wallet so cached copies pick up the new design; footer
injector at ?v=20260907rel.
2026-09-07 22:00:21 +02:00
|
|
|
|
<li><a href="${s("portal.html")}">🔑 My names portal</a></li>
|
|
|
|
|
|
<li><a href="${s("theseus/")}">🧭 Theseus browser</a></li>
|
|
|
|
|
|
</ul>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
<div>
|
|
|
|
|
|
<h5>Learn</h5>
|
|
|
|
|
|
<ul>
|
|
|
|
|
|
<li><a href="${s("docs/")}">📚 Docs</a></li>
|
|
|
|
|
|
<li><a href="${s("#roadmap")}">🗺 Roadmap</a></li>
|
|
|
|
|
|
<li><a href="${s("#pantheon")}">🏛 The Pantheon</a></li>
|
|
|
|
|
|
<li><a href="${s("brand/")}">🎨 Brand kit</a></li>
|
|
|
|
|
|
</ul>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
<div>
|
|
|
|
|
|
<h5>Silent Mode</h5>
|
|
|
|
|
|
<ul>
|
|
|
|
|
|
<li><a href="https://silentmode.st/" rel="noopener">silentmode.st <span class="ext">↗</span></a></li>
|
|
|
|
|
|
<li><a href="https://silentmode.st/tlds/" rel="noopener">TLD registry <span class="ext">↗</span></a></li>
|
|
|
|
|
|
<li><a href="https://silentmode.st/bns/theseus.x/" rel="noopener">theseus.x downloads <span class="ext">↗</span></a></li>
|
|
|
|
|
|
<li><a href="https://silentmode.st/bns/hephaestus.x/" rel="noopener">hephaestus.x forge <span class="ext">↗</span></a></li>
|
|
|
|
|
|
</ul>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
<div class="meta">
|
|
|
|
|
|
<span><span class="footer-badge">Alpha</span>Chipnet only. You hold your own keys; verify everything against the chain.</span>
|
|
|
|
|
|
<span>© 2026 · MIT-licensed content · <a href="${s("brand/")}">brand assets</a></span>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
`;
|
|
|
|
|
|
|
|
|
|
|
|
// Inline CSS — kept out of every page's <style> block so the footer stays
|
|
|
|
|
|
// single-source and consistent. Uses the CSS variables every page already
|
|
|
|
|
|
// sets on :root (so any page's palette applies automatically).
|
|
|
|
|
|
if (!document.getElementById("site-footer-css")) {
|
|
|
|
|
|
const css = document.createElement("style");
|
|
|
|
|
|
css.id = "site-footer-css";
|
|
|
|
|
|
css.textContent = `
|
|
|
|
|
|
footer.site-footer{background:linear-gradient(180deg,transparent,rgba(255,255,255,.015));
|
|
|
|
|
|
border-top:1px solid var(--line);padding:3.2rem 1.2rem 2rem;margin-top:3rem;color:var(--mut)}
|
|
|
|
|
|
footer.site-footer .cols{max-width:980px;margin:0 auto;display:grid;
|
|
|
|
|
|
grid-template-columns:1.4fr repeat(3,1fr);gap:2.2rem}
|
|
|
|
|
|
@media (max-width:760px){ footer.site-footer .cols{grid-template-columns:1fr 1fr;gap:1.6rem} }
|
|
|
|
|
|
@media (max-width:440px){ footer.site-footer .cols{grid-template-columns:1fr} }
|
|
|
|
|
|
footer.site-footer .brand-col .mark{font-size:26px;line-height:1;margin-bottom:.4rem}
|
|
|
|
|
|
footer.site-footer .brand-col h4{color:var(--ink);font-size:15px;font-weight:600;margin:0 0 .35rem;letter-spacing:.2px}
|
|
|
|
|
|
footer.site-footer .brand-col h4 .g{color:var(--acid)}
|
|
|
|
|
|
footer.site-footer .brand-col p{font-size:12.5px;color:var(--dim);max-width:260px;margin:0}
|
|
|
|
|
|
footer.site-footer h5{color:var(--ink);font-size:11.5px;font-weight:600;text-transform:uppercase;
|
|
|
|
|
|
letter-spacing:.6px;margin:0 0 .8rem}
|
|
|
|
|
|
footer.site-footer ul{list-style:none;padding:0;margin:0;display:grid;gap:.55rem}
|
|
|
|
|
|
footer.site-footer ul a{color:var(--mut);text-decoration:none;font-size:13.5px;transition:color .1s}
|
|
|
|
|
|
footer.site-footer ul a:hover{color:var(--acid)}
|
|
|
|
|
|
footer.site-footer ul a .ext{color:var(--dim);font-size:11px;margin-left:2px}
|
|
|
|
|
|
footer.site-footer .meta{max-width:980px;margin:2.4rem auto 0;padding-top:1.4rem;
|
|
|
|
|
|
border-top:1px solid var(--line);display:flex;flex-wrap:wrap;gap:.6rem 1.2rem;
|
|
|
|
|
|
font-size:12px;color:var(--dim);justify-content:space-between;align-items:center}
|
|
|
|
|
|
footer.site-footer .meta a{color:var(--mut);text-decoration:none}
|
|
|
|
|
|
footer.site-footer .meta a:hover{color:var(--acid)}
|
|
|
|
|
|
footer.site-footer .footer-badge{display:inline-block;padding:2px 8px;border-radius:999px;
|
|
|
|
|
|
background:rgba(255,199,95,.13);color:var(--warn);font-size:10.5px;font-weight:600;
|
|
|
|
|
|
text-transform:uppercase;letter-spacing:.4px;margin-right:.5rem}
|
|
|
|
|
|
`;
|
|
|
|
|
|
document.head.appendChild(css);
|
|
|
|
|
|
}
|
|
|
|
|
|
})();
|