871 lines
45 KiB
HTML
871 lines
45 KiB
HTML
<!DOCTYPE html>
|
||
<html lang="en" class="nojs">
|
||
<head>
|
||
<meta charset="UTF-8">
|
||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||
<title>Bitcoin After Life Protocol — Decentralized Bitcoin Inheritance</title>
|
||
<meta name="description" content="Bitcoin After Life (BAL) Protocol — Decentralized Bitcoin inheritance through time-locked transactions. No notary, no custodian. Open-source Electrum plugin and Will-Executor network.">
|
||
<link rel="icon" type="image/x-icon" href="/pitura/ico/Logo_nero.ico">
|
||
<link rel="canonical" href="https://bitcoin-after.life/index.html">
|
||
<meta property="og:type" content="website">
|
||
<meta property="og:site_name" content="Bitcoin After Life">
|
||
<meta property="og:title" content="Bitcoin After Life Protocol — Decentralized Bitcoin Inheritance">
|
||
<meta property="og:description" content="Decentralized Bitcoin inheritance through time-locked transactions. No notary, no lawyer, no custodian. Open-source Electrum plugin and Will-Executor network.">
|
||
<meta property="og:url" content="https://bitcoin-after.life/index.html">
|
||
<meta property="og:image" content="https://bitcoin-after.life/pitura/og-default.png">
|
||
<meta property="og:image:width" content="1200">
|
||
<meta property="og:image:height" content="630">
|
||
<meta name="twitter:card" content="summary_large_image">
|
||
<meta name="twitter:site" content="@BitcoinAfterLif">
|
||
<meta name="twitter:title" content="Bitcoin After Life Protocol — Decentralized Bitcoin Inheritance">
|
||
<meta name="twitter:description" content="Decentralized Bitcoin inheritance through time-locked transactions. No notary, no lawyer, no custodian. Open-source Electrum plugin and Will-Executor network.">
|
||
<meta name="twitter:image" content="https://bitcoin-after.life/pitura/og-default.png">
|
||
<meta name="theme-color" content="#2d6cdf">
|
||
<script>
|
||
/* Runs before first paint: removes the `nojs` class set on <html>, so the
|
||
mobile menu button is only shown when it can actually work. */
|
||
document.documentElement.classList.remove('nojs');
|
||
</script>
|
||
<!--
|
||
=========================================================
|
||
Bitcoin After Life Protocol — landing page
|
||
Visual system: "Slate" (adapted from bal-welist-preview.html)
|
||
Accent: blue (#2d6cdf), faithful to the reference file.
|
||
Content: index2.html + updated facts from the GitHub repo
|
||
(Electrum 4.8.0, PyQt6, install flow, Anticipate/Postpone,
|
||
Server-column states, release v0.6.1, MIT license).
|
||
All UI copy is in English by project convention.
|
||
=========================================================
|
||
-->
|
||
<style>
|
||
:root{
|
||
--maxw:1120px;
|
||
--radius:10px;
|
||
|
||
--bg:#eef1f4;
|
||
--panel:#ffffff;
|
||
--ink:#1a2027;
|
||
--muted:#5b6672;
|
||
--line:#dfe4ea;
|
||
--line-strong:#cbd2da;
|
||
--accent:#2d6cdf;
|
||
--accent-soft:#e6eefc;
|
||
--ok:#1f9d57;
|
||
--ok-soft:#e3f4ea;
|
||
--warn:#b5701b;
|
||
--warn-soft:#fbf0df;
|
||
|
||
--display:"Inter","Segoe UI",system-ui,-apple-system,sans-serif;
|
||
--body:"Inter","Segoe UI",system-ui,-apple-system,sans-serif;
|
||
--mono:ui-monospace,"SF Mono",Menlo,Consolas,monospace;
|
||
--shadow:0 1px 2px rgba(20,30,50,.05);
|
||
--shadow-lg:0 6px 20px rgba(20,30,50,.08);
|
||
}
|
||
|
||
*{box-sizing:border-box}
|
||
html{scroll-behavior:smooth}
|
||
html,body{margin:0}
|
||
body{
|
||
background:var(--bg);
|
||
color:var(--ink);
|
||
font-family:var(--body);
|
||
line-height:1.55;
|
||
-webkit-font-smoothing:antialiased;
|
||
}
|
||
.wrap{max-width:var(--maxw);margin:0 auto;padding:0 20px}
|
||
a{color:var(--accent);text-decoration:none}
|
||
a:hover{text-decoration:underline}
|
||
section{scroll-margin-top:72px}
|
||
|
||
/* ---------- Top bar ---------- */
|
||
.topbar{
|
||
position:sticky;top:0;z-index:30;
|
||
background:rgba(255,255,255,.86);backdrop-filter:saturate(150%) blur(8px);
|
||
border-bottom:1px solid var(--line);
|
||
}
|
||
.topbar .wrap{display:flex;align-items:center;gap:18px;height:60px}
|
||
.topbar .logo{display:flex;align-items:center;gap:10px;font-family:var(--display);font-weight:600;color:var(--ink)}
|
||
.topbar .logo img{width:30px;height:30px;display:block}
|
||
.topbar .logo span{font-size:15px;letter-spacing:-.01em}
|
||
.topbar nav{margin-left:auto;display:flex;gap:4px;flex-wrap:wrap}
|
||
.topbar nav a{
|
||
color:var(--muted);font-size:13px;padding:7px 11px;border-radius:7px;
|
||
}
|
||
.topbar nav a:hover{color:var(--ink);background:var(--accent-soft);text-decoration:none}
|
||
.topbar .x{color:var(--ink);font-weight:600}
|
||
.topbar nav a.manifesto{color:var(--accent);font-weight:600;border:1px solid #cfe0fb;background:var(--accent-soft)}
|
||
.topbar nav a.manifesto:hover{background:#d9e7fd;color:var(--accent)}
|
||
|
||
/* ---------- Hero ---------- */
|
||
header.hero{padding:56px 0 40px;border-bottom:1px solid var(--line);background:
|
||
radial-gradient(900px 300px at 80% -40%,var(--accent-soft),transparent 70%);}
|
||
.hero .wrap{display:grid;grid-template-columns:1.4fr .9fr;gap:40px;align-items:center}
|
||
.hero .badge{
|
||
display:inline-flex;align-items:center;gap:8px;font-size:12px;font-weight:600;
|
||
color:var(--accent);background:var(--accent-soft);border:1px solid #cfe0fb;
|
||
padding:5px 11px;border-radius:999px;letter-spacing:.02em;margin-bottom:18px;
|
||
}
|
||
.hero h1{
|
||
font-family:var(--display);font-weight:600;letter-spacing:-.02em;
|
||
font-size:42px;line-height:1.06;margin:0 0 14px;
|
||
}
|
||
.hero h1 .blue{color:var(--accent)}
|
||
.hero .lead{color:var(--muted);font-size:17px;max-width:540px;margin:0 0 26px}
|
||
.cta-row{display:grid;grid-template-columns:1fr 1fr;gap:11px;max-width:540px;margin-bottom:22px}
|
||
.cta-row .btn{justify-content:center;text-align:center}
|
||
.btn{
|
||
font:inherit;font-size:14px;font-weight:600;cursor:pointer;text-decoration:none;
|
||
padding:11px 18px;border-radius:9px;border:1px solid var(--accent);
|
||
background:var(--accent);color:#fff;display:inline-flex;gap:8px;align-items:center;
|
||
}
|
||
.btn:hover{filter:brightness(1.07);text-decoration:none}
|
||
.btn.ghost{background:var(--panel);color:var(--ink);border-color:var(--line-strong)}
|
||
.btn.ghost:hover{border-color:var(--accent);color:var(--accent);filter:none}
|
||
.fiat-note{font-size:13px;color:var(--muted);max-width:540px;line-height:1.6}
|
||
.fiat-note strong{color:var(--ink)}
|
||
/* B2 — accent-bar callout for the "Bitcoin-only / no FIAT" statement */
|
||
.fiat-bar{
|
||
display:flex;gap:13px;align-items:flex-start;max-width:540px;
|
||
background:var(--panel);border:1px solid var(--line);border-left:3px solid var(--accent);
|
||
border-radius:0 10px 10px 0;padding:14px 18px;box-shadow:var(--shadow);
|
||
}
|
||
.fiat-bar .btc{font-size:22px;line-height:1.3;color:#f7931a;font-weight:700;flex:none}
|
||
.fiat-bar .t{font-size:13.5px;line-height:1.6;color:var(--ink)}
|
||
.fiat-bar .t strong{font-weight:600}
|
||
.fiat-bar .t .m{color:var(--muted)}
|
||
|
||
.hero-card{
|
||
background:var(--panel);border:1px solid var(--line);border-radius:14px;
|
||
box-shadow:var(--shadow-lg);padding:30px 28px;text-align:center;
|
||
}
|
||
.hero-card img{width:138px;height:138px;margin:0 auto 14px;display:block}
|
||
.hero-card .name{font-family:var(--display);font-weight:600;font-size:18px}
|
||
.hero-card .tag{color:var(--muted);font-size:13px;margin-top:2px}
|
||
.hero-card .stats{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin-top:20px}
|
||
.hero-card .stat{background:var(--bg);border:1px solid var(--line);border-radius:10px;padding:12px 8px}
|
||
.hero-card .stat .n{font-family:var(--display);font-weight:600;font-size:20px;line-height:1}
|
||
.hero-card .stat .l{font-size:10px;letter-spacing:.1em;text-transform:uppercase;color:var(--muted);margin-top:6px}
|
||
.hero-card .stat .sig{font-size:10px;margin-top:2px;display:none}
|
||
.hero-card .stat .sig a{color:var(--muted);text-decoration:underline}
|
||
.hero-card .stat .sig a:hover{color:var(--accent)}
|
||
|
||
/* ---------- Section scaffolding ---------- */
|
||
.section{padding:56px 0}
|
||
.section.alt{background:var(--panel);border-top:1px solid var(--line);border-bottom:1px solid var(--line)}
|
||
.eyebrow{font-family:var(--mono);font-size:12px;color:var(--accent);letter-spacing:.12em;text-transform:uppercase;display:block;margin-bottom:10px}
|
||
.section h2{font-family:var(--display);font-size:28px;font-weight:600;letter-spacing:-.01em;margin:0 0 12px}
|
||
.section .sub{color:var(--muted);font-size:16px;max-width:760px;margin:0 0 30px}
|
||
.prose p{color:var(--muted);font-size:15.5px;max-width:820px;margin:0 0 16px}
|
||
.prose p strong,.prose p em{color:var(--ink)}
|
||
.prose p em{font-style:italic;font-weight:500}
|
||
|
||
/* ---------- Feature grid ---------- */
|
||
.grid{display:grid;gap:16px}
|
||
.cols-3{grid-template-columns:repeat(3,1fr)}
|
||
.cols-2{grid-template-columns:repeat(2,1fr)}
|
||
.card{
|
||
background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);
|
||
padding:24px;box-shadow:var(--shadow);
|
||
}
|
||
.section.alt .card{background:var(--bg)}
|
||
.card .ic{
|
||
width:42px;height:42px;border-radius:10px;display:grid;place-items:center;
|
||
background:var(--accent-soft);font-size:20px;margin-bottom:14px;
|
||
}
|
||
.card h3{font-size:16px;margin:0 0 8px;letter-spacing:.01em}
|
||
.card p{font-size:14px;color:var(--muted);margin:0 0 14px;line-height:1.6}
|
||
.chips{display:flex;gap:6px;flex-wrap:wrap}
|
||
.chip{
|
||
font-size:10.5px;letter-spacing:.06em;text-transform:uppercase;color:var(--muted);
|
||
border:1px solid var(--line-strong);border-radius:5px;padding:3px 7px;
|
||
}
|
||
.card .more{font-size:13px;font-weight:600;color:var(--accent)}
|
||
|
||
/* ---------- Steps ---------- */
|
||
.steps{display:grid;grid-template-columns:repeat(3,1fr);gap:16px}
|
||
.step{
|
||
background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);
|
||
padding:22px;box-shadow:var(--shadow);position:relative;
|
||
}
|
||
.section.alt .step{background:var(--bg)}
|
||
.step .no{
|
||
font-family:var(--mono);font-size:12px;font-weight:600;color:#fff;background:var(--ink);
|
||
width:26px;height:26px;border-radius:7px;display:grid;place-items:center;margin-bottom:13px;
|
||
}
|
||
.step h3{font-size:15px;margin:0 0 7px}
|
||
.step p{font-size:13.5px;color:var(--muted);margin:0;line-height:1.6}
|
||
.phase-row{display:flex;gap:10px;flex-wrap:wrap;margin-top:20px}
|
||
.phase{font-size:12px;color:var(--muted);background:var(--accent-soft);border:1px solid #cfe0fb;border-radius:7px;padding:6px 12px}
|
||
.phase b{color:var(--ink)}
|
||
|
||
/* ---------- Callout ---------- */
|
||
.callout{
|
||
display:flex;gap:14px;background:var(--accent-soft);border:1px solid #cfe0fb;
|
||
border-radius:var(--radius);padding:18px 20px;margin-top:22px;font-size:14px;color:var(--ink);
|
||
}
|
||
.callout .k{font-size:20px;line-height:1}
|
||
.callout.warn{background:var(--warn-soft);border-color:#eed8b4}
|
||
.callout p{margin:0;line-height:1.6}
|
||
.callout p strong{font-weight:600}
|
||
/* FAQ "see the manual" box: match the FAQ column exactly (880px, left-aligned) */
|
||
.callout.faq-more{max-width:880px}
|
||
|
||
/* ---------- Install ---------- */
|
||
.install-grid{display:grid;grid-template-columns:1fr 1fr;gap:16px}
|
||
.req-list{list-style:none;margin:0;padding:0}
|
||
.req-list li{display:flex;gap:10px;padding:10px 0;border-bottom:1px solid var(--line);font-size:14px}
|
||
.req-list li:last-child{border-bottom:0}
|
||
.req-list .b{font-weight:600;min-width:118px}
|
||
.req-list .v{color:var(--muted)}
|
||
pre.code{
|
||
background:var(--ink);color:#e8edf3;border-radius:10px;padding:16px 18px;
|
||
font-family:var(--mono);font-size:12.5px;line-height:1.7;overflow-x:auto;margin:0 0 12px;
|
||
}
|
||
pre.code .c{color:#8aa0b6}
|
||
.ol{margin:0;padding-left:20px;color:var(--muted);font-size:14px}
|
||
.ol li{margin:8px 0;line-height:1.55}
|
||
.ol code{font-family:var(--mono);background:var(--bg);border:1px solid var(--line);padding:1px 6px;border-radius:5px;color:var(--ink);font-size:12.5px}
|
||
|
||
/* ---------- Server states table ---------- */
|
||
.table-card{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);overflow:hidden;box-shadow:var(--shadow);margin-top:8px}
|
||
.section.alt .table-card{background:var(--bg)}
|
||
table{width:100%;border-collapse:collapse;font-size:14px}
|
||
thead th{
|
||
text-align:left;font-weight:600;color:var(--muted);font-size:11px;letter-spacing:.08em;
|
||
text-transform:uppercase;padding:13px 16px;border-bottom:1px solid var(--line-strong);white-space:nowrap;
|
||
}
|
||
tbody td{padding:13px 16px;border-bottom:1px solid var(--line);vertical-align:top}
|
||
tbody tr:last-child td{border-bottom:0}
|
||
td.label{font-family:var(--mono);font-size:12.5px;color:var(--ink);white-space:nowrap}
|
||
td.mean{color:var(--muted)}
|
||
|
||
/* ---------- FAQ ---------- */
|
||
.faq{display:grid;gap:10px;max-width:880px}
|
||
.qa{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow);overflow:hidden}
|
||
.section.alt .qa{background:var(--bg)}
|
||
.qa>summary{
|
||
list-style:none;cursor:pointer;
|
||
display:flex;align-items:center;gap:14px;padding:16px 18px;color:var(--ink);
|
||
}
|
||
.qa>summary::-webkit-details-marker{display:none}
|
||
.qa .qn{font-family:var(--mono);font-size:12px;color:var(--accent);font-weight:600;flex:none;width:26px}
|
||
.qa .qt{font-weight:600;font-size:15px;flex:1}
|
||
.qa .chev{flex:none;color:var(--muted);transition:transform .2s}
|
||
.qa[open] .chev{transform:rotate(180deg)}
|
||
.qa .ans{padding:0 18px 18px 58px;color:var(--muted);font-size:14.5px;line-height:1.65}
|
||
.qa .ans p{margin:0 0 10px}.qa .ans p:last-child{margin:0}
|
||
.qa .ans ul{margin:6px 0;padding-left:18px}
|
||
.qa .ans li{margin:5px 0}
|
||
.qa .ans strong{color:var(--ink)}
|
||
.qa .ans em{color:var(--ink);font-style:italic}
|
||
|
||
/* ---------- Footer ---------- */
|
||
footer{border-top:1px solid var(--line);padding:34px 0 40px;color:var(--muted);font-size:14px;background:var(--panel)}
|
||
footer .sig{font-family:var(--display);font-weight:600;color:var(--ink);font-size:16px}
|
||
footer .links{display:flex;gap:16px;flex-wrap:wrap;margin:14px 0}
|
||
footer .built{font-size:13px;color:var(--muted);margin-top:8px}
|
||
|
||
/* ---------- Mobile navigation ---------- */
|
||
/*
|
||
The hamburger button is hidden on desktop and only revealed under 900px.
|
||
WHY a button and not the old `display:none` on the links: hiding the nav
|
||
removed every in-page destination on phones. The button keeps all sections
|
||
reachable, and the <noscript> rule below keeps the menu usable even when
|
||
JavaScript is unavailable.
|
||
*/
|
||
.navtoggle{
|
||
display:none;margin-left:auto;
|
||
width:44px;height:44px;flex:none;
|
||
align-items:center;justify-content:center;
|
||
background:var(--panel);border:1px solid var(--line-strong);border-radius:9px;
|
||
color:var(--ink);cursor:pointer;padding:0;
|
||
}
|
||
.navtoggle:hover{border-color:var(--accent);color:var(--accent)}
|
||
.navtoggle .bars{display:block;width:18px;height:2px;background:currentColor;position:relative}
|
||
.navtoggle .bars::before,.navtoggle .bars::after{
|
||
content:"";position:absolute;left:0;width:18px;height:2px;background:currentColor;
|
||
}
|
||
.navtoggle .bars::before{top:-6px}
|
||
.navtoggle .bars::after{top:6px}
|
||
.navtoggle[aria-expanded="true"] .bars{background:transparent}
|
||
.navtoggle[aria-expanded="true"] .bars::before{top:0;transform:rotate(45deg)}
|
||
.navtoggle[aria-expanded="true"] .bars::after{top:0;transform:rotate(-45deg)}
|
||
|
||
/* ---------- Responsive ---------- */
|
||
@media (max-width:900px){
|
||
.hero .wrap{grid-template-columns:1fr;gap:28px}
|
||
.hero-card{order:-1}
|
||
.cols-3,.steps,.install-grid{grid-template-columns:1fr}
|
||
.cta-row{grid-template-columns:1fr;max-width:none}
|
||
.cols-2{grid-template-columns:1fr}
|
||
.hero h1{font-size:34px}
|
||
|
||
/* Off-canvas navigation panel, anchored to the sticky top bar. */
|
||
.navtoggle{display:inline-flex}
|
||
.topbar nav{
|
||
position:absolute;top:100%;left:0;right:0;
|
||
margin-left:0;display:none;flex-direction:column;gap:2px;flex-wrap:nowrap;
|
||
background:var(--panel);border-bottom:1px solid var(--line);
|
||
box-shadow:var(--shadow-lg);padding:10px 20px 16px;
|
||
}
|
||
.topbar nav.open{display:flex}
|
||
/* 44px minimum height: the smallest reliable touch target. */
|
||
.topbar nav a{
|
||
font-size:15.5px;padding:0 12px;min-height:44px;
|
||
display:flex;align-items:center;border-radius:8px;
|
||
}
|
||
.topbar nav a.manifesto{justify-content:flex-start}
|
||
}
|
||
|
||
/*
|
||
Type scale for phones. The desktop sizes (14px cards, 13.5px steps,
|
||
10.5px chips) are legible on a 1440px monitor but tiny on a 6-inch
|
||
screen, which is the "everything is too small" complaint. Sizes go up
|
||
on small screens, not down.
|
||
*/
|
||
@media (max-width:700px){
|
||
.wrap{padding:0 18px}
|
||
header.hero{padding:34px 0 30px}
|
||
.section{padding:40px 0}
|
||
.hero .lead{font-size:16.5px}
|
||
.section .sub{font-size:15.5px}
|
||
.prose p{font-size:16px}
|
||
.card p{font-size:15px}
|
||
.card h3{font-size:17px}
|
||
.step p{font-size:15px}
|
||
.step h3{font-size:16px}
|
||
.chip{font-size:11.5px}
|
||
.qa .qt{font-size:15.5px}
|
||
.qa .ans{font-size:15.5px;padding-left:18px}
|
||
.req-list li{font-size:15px}
|
||
.ol{font-size:15px}
|
||
.callout{font-size:15px}
|
||
.fiat-bar .t{font-size:14.5px}
|
||
.btn{font-size:15px;padding:13px 18px}
|
||
footer .links{gap:12px 18px}
|
||
}
|
||
@media (max-width:560px){
|
||
.section h2{font-size:24px}
|
||
.hero h1{font-size:29px}
|
||
.hero-card{padding:24px 18px}
|
||
.hero-card img{width:112px;height:112px}
|
||
.card{padding:20px}
|
||
.step{padding:19px}
|
||
.req-list .b{min-width:0}
|
||
.req-list li{flex-direction:column;gap:2px}
|
||
}
|
||
@media (max-width:400px){
|
||
.wrap{padding:0 15px}
|
||
.hero h1{font-size:26px}
|
||
.section h2{font-size:22px}
|
||
.hero-card .stats{grid-template-columns:1fr}
|
||
}
|
||
|
||
/*
|
||
Wide tables cannot shrink below their content, so on narrow screens they
|
||
either overflow the page or crush the text. Scrolling the table alone
|
||
keeps the rest of the layout intact.
|
||
*/
|
||
.table-scroll{overflow-x:auto;-webkit-overflow-scrolling:touch}
|
||
.table-scroll table{min-width:420px}
|
||
|
||
/*
|
||
Without JavaScript the panel cannot be toggled, so the links are shown
|
||
inline. On narrow screens they wrap under the logo and the bar is allowed
|
||
to grow, instead of being clipped by the fixed 60px height.
|
||
*/
|
||
.nojs .navtoggle{display:none}
|
||
.nojs .topbar nav{position:static;display:flex;flex-direction:row;flex-wrap:wrap;
|
||
box-shadow:none;border-bottom:0;padding:0;margin-left:auto;background:transparent}
|
||
@media (max-width:900px){
|
||
.nojs .topbar .wrap{height:auto;min-height:56px;flex-wrap:wrap;padding-bottom:8px;gap:10px}
|
||
.nojs .topbar nav{margin-left:0;width:100%;gap:4px 6px}
|
||
.nojs .topbar nav a{font-size:14.5px;min-height:40px;padding:0 10px;
|
||
display:flex;align-items:center;border:1px solid var(--line);border-radius:8px}
|
||
}
|
||
@media (prefers-reduced-motion:reduce){*{transition:none!important;scroll-behavior:auto!important}}
|
||
:focus-visible{outline:2px solid var(--accent);outline-offset:2px}
|
||
</style>
|
||
<script type="application/ld+json">
|
||
{
|
||
"@context": "https://schema.org",
|
||
"@type": "Organization",
|
||
"name": "Bitcoin After Life",
|
||
"url": "https://bitcoin-after.life",
|
||
"logo": "https://bitcoin-after.life/pitura/logo/Logo_nero.svg",
|
||
"sameAs": [
|
||
"https://x.com/BitcoinAfterLif"
|
||
]
|
||
}
|
||
</script>
|
||
<script type="application/ld+json">
|
||
{
|
||
"@context": "https://schema.org",
|
||
"@type": "WebSite",
|
||
"name": "Bitcoin After Life",
|
||
"url": "https://bitcoin-after.life"
|
||
}
|
||
</script>
|
||
<script type="application/ld+json">
|
||
{
|
||
"@context": "https://schema.org",
|
||
"@type": "FAQPage",
|
||
"mainEntity": [
|
||
{
|
||
"@type": "Question",
|
||
"name": "What is the Bitcoin After Life Protocol for?",
|
||
"acceptedAnswer": {
|
||
"@type": "Answer",
|
||
"text": "It is open-source software to manage the inheritance of Bitcoin held with a seed phrase, and to create an emergency backup of a wallet. It uses time-locked transactions sent to Will-Executor servers, which broadcast them to the Bitcoin network on a pre-set delivery date."
|
||
}
|
||
},
|
||
{
|
||
"@type": "Question",
|
||
"name": "Why a plugin for Electrum rather than a dedicated wallet?",
|
||
"acceptedAnswer": {
|
||
"@type": "Answer",
|
||
"text": "Electrum is heavily tested and widely regarded as a reference Bitcoin wallet. The BAL plugin never signs transactions itself, Electrum does. This maximises security, reduces maintenance, and lets users trust the signing process independently of BAL."
|
||
}
|
||
},
|
||
{
|
||
"@type": "Question",
|
||
"name": "How much does an inheritance or wallet backup cost?",
|
||
"acceptedAnswer": {
|
||
"@type": "Answer",
|
||
"text": "An inheritance involves two fees, both paid in Bitcoin only: a miner fee chosen by the user at signing time, and a Will-Executor fee deducted from the inheritance when the transaction is broadcast. There are no subscriptions or card payments."
|
||
}
|
||
},
|
||
{
|
||
"@type": "Question",
|
||
"name": "What is a Will-Executor?",
|
||
"acceptedAnswer": {
|
||
"@type": "Answer",
|
||
"text": "A Will-Executor is a server that receives your pre-signed, time-locked transaction, stores it, and broadcasts it on the delivery date. It cannot alter or steal the transaction because you have already signed it; its only incentive is the fee embedded in the transaction, received once the inheritance confirms on-chain."
|
||
}
|
||
},
|
||
{
|
||
"@type": "Question",
|
||
"name": "Can I use the plugin with a hardware wallet?",
|
||
"acceptedAnswer": {
|
||
"@type": "Answer",
|
||
"text": "Yes. The plugin is compatible with any hardware wallet supported by Electrum, such as Ledger, Trezor, Coldcard, BitBox02, Jade and KeepKey. Using a dedicated computer for cold-wallet signing is recommended for maximum security."
|
||
}
|
||
},
|
||
{
|
||
"@type": "Question",
|
||
"name": "Is the plugin compatible with all Electrum wallet types?",
|
||
"acceptedAnswer": {
|
||
"@type": "Answer",
|
||
"text": "It works with standard seed-based single-signature Electrum wallets and with supported hardware wallets. Multisig wallets are not yet supported, and compatibility with Electrum's TrustedCoin (2FA) wallets is currently unknown."
|
||
}
|
||
},
|
||
{
|
||
"@type": "Question",
|
||
"name": "Is a BAL 2.0 version planned?",
|
||
"acceptedAnswer": {
|
||
"@type": "Answer",
|
||
"text": "Yes. BAL 2.0 is in development. Its main new feature will be staggered inheritance: scheduling gradual distributions over time instead of a single lump-sum transfer."
|
||
}
|
||
}
|
||
]
|
||
}
|
||
</script>
|
||
</head>
|
||
<body>
|
||
|
||
<!-- ===== Top bar ===== -->
|
||
<div class="topbar">
|
||
<div class="wrap">
|
||
<a class="logo" href="#top"><img src="/pitura/logo/Logo_nero.svg" alt="Bitcoin After Life logo" width="30" height="30"><span translate="no">Bitcoin After Life</span></a>
|
||
<button class="navtoggle" id="navToggle" type="button"
|
||
aria-expanded="false" aria-controls="mainNav" aria-label="Open menu">
|
||
<span class="bars"></span>
|
||
</button>
|
||
<nav id="mainNav">
|
||
<a href="#features">Features</a>
|
||
<a href="#how">How it works</a>
|
||
<a href="#executors">Will-Executors</a>
|
||
<a href="#plugin">Plugin</a>
|
||
<a href="#install">Install</a>
|
||
<a href="#faq">FAQ</a>
|
||
<a href="blog.html">Blog</a>
|
||
<a href="https://bitcoin-after.life/docs/">Docs</a>
|
||
<a class="manifesto" href="manifesto.html">Manifesto</a>
|
||
<a class="x" href="https://x.com/BitcoinAfterLif" title="@BitcoinAfterLif on X">@X</a>
|
||
</nav>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- ===== Hero ===== -->
|
||
<header class="hero" id="top">
|
||
<div class="wrap">
|
||
<div>
|
||
<span class="badge">● Open-source · Bitcoin-only · No custodian</span>
|
||
<h1>Leave your Bitcoin to your heirs — <span class="blue">without a third party.</span></h1>
|
||
<p class="lead">The <span translate="no">Bitcoin After Life</span> (BAL) Protocol uses time-locked transactions and an open-source Will-Executor network to make decentralized Bitcoin inheritance possible. No notary, no lawyer, no custodian.</p>
|
||
<div class="cta-row">
|
||
<a class="btn" href="https://bitcoin-after.life/gitea/bitcoinafterlife/bal-electrum-plugin/releases">Electrum Plugin Releases</a>
|
||
<a class="btn ghost" href="https://bitcoin-after.life/gitea/bitcoinafterlife/bal-server/releases">BAL Server Releases</a>
|
||
<a class="btn ghost" href="https://welist.bitcoin-after.life/">Will-Executor List</a>
|
||
<a class="btn ghost" href="https://bitcoin-after.life/gitea/bitcoinafterlife">Source Code</a>
|
||
</div>
|
||
<div class="fiat-bar">
|
||
<span class="btc">₿</span>
|
||
<span class="t"><strong>Open-source project.</strong> <span class="m">The BAL Protocol is built and funded exclusively with Bitcoin — no FIAT currencies were used.</span></span>
|
||
</div>
|
||
</div>
|
||
|
||
<aside class="hero-card">
|
||
<img src="/pitura/logo/Logo_nero.svg" alt="Bitcoin After Life Protocol logo" width="138" height="138">
|
||
<div class="name">BAL Protocol</div>
|
||
<div class="tag">Electrum plugin + Will-Executor</div>
|
||
<div class="stats">
|
||
<div class="stat"><div class="n"><a id="latest-release-link" href="https://bitcoin-after.life/gitea/bitcoinafterlife/bal-electrum-plugin/releases">-</a></div><div class="l">Latest release</div><div class="sig"><a id="latest-release-sig" href="#">sig</a></div></div>
|
||
<div class="stat"><div class="n">10 yr</div><div class="l">Min. support</div></div>
|
||
<div class="stat"><div class="n">MIT</div><div class="l">License</div></div>
|
||
<div class="stat"><div class="n">100%</div><div class="l">Bitcoin-funded</div></div>
|
||
</div>
|
||
</aside>
|
||
</div>
|
||
</header>
|
||
|
||
<main>
|
||
|
||
<!-- ===== Key features ===== -->
|
||
<section class="section alt" id="features">
|
||
<div class="wrap">
|
||
<span class="eyebrow">Key features</span>
|
||
<h2>What BAL gives you</h2>
|
||
<p class="sub">Five capabilities, all peer-to-peer, all Bitcoin-only, all open source.</p>
|
||
<div class="grid cols-3">
|
||
<div class="card">
|
||
<div class="ic">🔐</div>
|
||
<h3>Decentralized inheritance</h3>
|
||
<p>Plan Bitcoin inheritance without any third party — notary, spouse or custodian. Fully peer-to-peer, with no legal overhead and no intermediaries, ever.</p>
|
||
<div class="chips"><span class="chip">Bitcoin only</span><span class="chip">Peer-to-peer</span></div>
|
||
</div>
|
||
<div class="card">
|
||
<div class="ic">⏱️</div>
|
||
<h3>Time-locked transactions</h3>
|
||
<p>Transactions are created with a Locktime set to a future date. Will-Executors retain and broadcast them automatically on the delivery date. Your keys never leave your device — Electrum handles all signing.</p>
|
||
<div class="chips"><span class="chip">Desktop</span><span class="chip">Self-custody</span></div>
|
||
</div>
|
||
<div class="card">
|
||
<div class="ic">💾</div>
|
||
<h3>Wallet backup</h3>
|
||
<p>Pre-sign a recovery transaction to a secondary address. If you lose your seed, the funds are sent automatically to your backup wallet.</p>
|
||
<div class="chips"><span class="chip">Recovery</span><span class="chip">Open source</span></div>
|
||
</div>
|
||
<div class="card">
|
||
<div class="ic">💰</div>
|
||
<h3>Economic incentives</h3>
|
||
<p>Each inheritance transaction includes a fee for the Will-Executor, paid on confirmation. Incentives grow with Bitcoin's value over time.</p>
|
||
<div class="chips"><span class="chip">Server</span><span class="chip">Bitcoin only</span></div>
|
||
</div>
|
||
<div class="card">
|
||
<div class="ic">🌐</div>
|
||
<h3>Open source & community</h3>
|
||
<p>Anyone can run a Will-Executor server and earn commissions. The community is encouraged to discover new use cases.</p>
|
||
<div class="chips"><span class="chip">Open source</span><span class="chip">Community</span></div>
|
||
</div>
|
||
<div class="card">
|
||
<div class="ic">🪪</div>
|
||
<h3>You stay in control</h3>
|
||
<p>The plugin never signs on your behalf. It asks — you decide. Every refresh of your will is confirmed by you, password or hardware wallet included.</p>
|
||
<div class="chips"><span class="chip">Non-custodial</span><span class="chip">Hardware-wallet</span></div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</section>
|
||
|
||
<!-- ===== How it works ===== -->
|
||
<section class="section" id="how">
|
||
<div class="wrap">
|
||
<span class="eyebrow">How it works</span>
|
||
<h2>From setup to automatic execution</h2>
|
||
<p class="sub">Six steps — from first setup to the automatic execution of your Bitcoin will. For the full protocol walkthrough, see <a href="https://bitcoin-after.life/docs/protocol/how-it-works.html">How it works</a> in the manual.</p>
|
||
<div class="steps">
|
||
<div class="step"><div class="no">01</div><h3>Add heirs</h3><p>Enter the Bitcoin address of your heir(s) in the BAL plugin. No notary or intermediary required.</p></div>
|
||
<div class="step"><div class="no">02</div><h3>Prepare transaction</h3><p>The wizard builds a time-locked transaction with your delivery date and the Will-Executor fee.</p></div>
|
||
<div class="step"><div class="no">03</div><h3>Sign</h3><p>Electrum signs with your key. The plugin never touches your keys — the signed will is stored locally.</p></div>
|
||
<div class="step"><div class="no">04</div><h3>Send to Will-Executors</h3><p>Your signed will is sent to Will-Executor servers from the WeList. They hold it until the delivery date.</p></div>
|
||
<div class="step"><div class="no">05</div><h3>Use Electrum normally</h3><p>Keep using Electrum as usual. Every session auto-postpones your delivery date — Check Alive, zero effort. <span style="font-size:.82em;color:var(--muted)">(in Advanced mode)</span></p></div>
|
||
<div class="step"><div class="no">06</div><h3>Always up to date</h3><p>On close of your wallet, the plugin checks your balance and asks to refresh your will. You confirm — it never signs for you.</p></div>
|
||
</div>
|
||
<div class="phase-row">
|
||
<div class="phase"><b>01–03</b> Setup</div>
|
||
<div class="phase"><b>04</b> Deploy</div>
|
||
<div class="phase"><b>05</b> Stay alive</div>
|
||
<div class="phase"><b>06</b> Auto-execute</div>
|
||
</div>
|
||
<div class="callout">
|
||
<span class="k">🔑</span>
|
||
<p><strong>Note on signing.</strong> The plugin never signs on your behalf. If your wallet uses a password or a hardware wallet, you will be prompted to confirm. The plugin asks — you decide. Your will stays accurate and always under your control.</p>
|
||
</div>
|
||
</div>
|
||
</section>
|
||
|
||
<!-- ===== Will-Executors ===== -->
|
||
<section class="section alt" id="executors">
|
||
<div class="wrap prose">
|
||
<span class="eyebrow">Will-Executors</span>
|
||
<h2>The beating heart of the protocol</h2>
|
||
<p>The economic incentive that makes all this possible is a fee included in each inheritance transaction. It is paid when the Will-Executor transmits the inheritance transaction to the nodes, and is therefore inserted into the block. The first one to send the transaction to the nodes wins the inheritance fee.</p>
|
||
<p>We expect the BAL Protocol to succeed thanks to these incentives. They are <strong>substantial and grow with the value of Bitcoin over time</strong>, and they are attractive to more and more servers joining the inheritance transactions with a prospect of medium- to long-term gains.</p>
|
||
<p>Anybody can create a Will-Executor server to contribute to the protocol and earn commissions, since the code is available as open source. Read more in the manual: <a href="https://bitcoin-after.life/docs/will-executors/what-they-are.html">what Will-Executors are</a> and <a href="https://bitcoin-after.life/docs/will-executors/running-a-server.html">running a Will-Executor</a>.</p>
|
||
<div class="callout">
|
||
<span class="k">📋</span>
|
||
<p>Will-Executors are listed on the public <strong>WeList</strong> directory and shown directly inside the plugin. <a href="https://welist.bitcoin-after.life/">Browse the Will-Executor List →</a></p>
|
||
</div>
|
||
</div>
|
||
</section>
|
||
|
||
<!-- ===== Components / Plugin ===== -->
|
||
<section class="section" id="plugin">
|
||
<div class="wrap">
|
||
<span class="eyebrow">Components</span>
|
||
<h2>Plugin, server and docs</h2>
|
||
<p class="sub">Two open-source components and the documentation that ties them together.</p>
|
||
<div class="grid cols-3">
|
||
<div class="card">
|
||
<div class="ic">🔌</div>
|
||
<h3><span translate="no">Bitcoin After Life</span> plugin</h3>
|
||
<p>Created for the <strong>Electrum</strong> wallet — the gold standard among Bitcoin wallets. We hope Electrum developers will one day integrate it by default.</p>
|
||
<div class="chips"><span class="chip">Desktop</span><span class="chip">PyQt6</span></div>
|
||
<p style="margin-top:14px"><a class="more" href="https://bitcoin-after.life/gitea/bitcoinafterlife/bal-electrum-plugin">View plugin repository →</a></p>
|
||
</div>
|
||
<div class="card">
|
||
<div class="ic">🖥️</div>
|
||
<h3>BAL Server</h3>
|
||
<p>The server acts as a Will-Executor: it retains signed transactions and broadcasts them at the delivery date, so the inheritance runs without human intervention.</p>
|
||
<div class="chips"><span class="chip">Server</span><span class="chip">Open source</span></div>
|
||
<p style="margin-top:14px"><a class="more" href="https://bitcoin-after.life/gitea/bitcoinafterlife/bal-server">View server repository →</a></p>
|
||
</div>
|
||
<div class="card">
|
||
<div class="ic">📖</div>
|
||
<h3>Documentation & examples</h3>
|
||
<p>On bitcoin-after.life you'll find instructions to install the plug-in in Electrum and several practical examples on how to manage inheritance.</p>
|
||
<div class="chips"><span class="chip">Guides</span><span class="chip">Examples</span></div>
|
||
<p style="margin-top:14px"><a class="more" href="https://bitcoin-after.life">View website →</a></p>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</section>
|
||
|
||
<!-- ===== Requirements & Installation (from GitHub) ===== -->
|
||
<section class="section alt" id="install">
|
||
<div class="wrap">
|
||
<span class="eyebrow">Requirements & installation</span>
|
||
<h2>Get the plugin running</h2>
|
||
<p class="sub">The plugin is a behavior-preserving refactor that cleanly separates the business logic from the PyQt GUI. Build a clean, integrity-checkable archive and install it in Electrum. For the full step-by-step walkthrough with screenshots, see the <a href="https://bitcoin-after.life/docs/getting-started/installation.html">installation guide</a> in the manual.</p>
|
||
<div class="install-grid">
|
||
<div class="card">
|
||
<h3>Requirements</h3>
|
||
<ul class="req-list">
|
||
<li><span class="b">Electrum</span><span class="v">4.8.0 — latest stable release, tested against plugin v0.6.1.</span></li>
|
||
<li><span class="b">License</span><span class="v">MIT.</span></li>
|
||
</ul>
|
||
</div>
|
||
<div class="card">
|
||
<h3>Install as an external plugin (zip)</h3>
|
||
<ol class="ol">
|
||
<li>Electrum → <strong>Tools → Plugins</strong> → install from file → pick the built zip.</li>
|
||
<li>Enable <strong><span translate="no">Bitcoin After Life</span></strong> and restart Electrum.</li>
|
||
<li>Recommended: verify the zip's SHA-256 matches the value printed by <code>build_zip.py</code>.</li>
|
||
</ol>
|
||
</div>
|
||
</div>
|
||
<div class="callout warn">
|
||
<span class="k">⚠️</span>
|
||
<p><strong>Safety.</strong> This plugin builds real Bitcoin inheritance transactions with time-locks. Test on <strong>testnet</strong> or a small fund wallet first, and you always can review the generated transactions before broadcasting.</p>
|
||
</div>
|
||
</div>
|
||
</section>
|
||
|
||
<!-- ===== Plugin operations ===== -->
|
||
<section class="section" id="operations">
|
||
<div class="wrap">
|
||
<span class="eyebrow">Plugin operations</span>
|
||
<h2>How a will is built and kept safe</h2>
|
||
<div class="prose">
|
||
<p>The plugin generates a transaction with a <strong>Locktime</strong> set to a future date. The transaction is signed and sent to one or several Will-Executors, who retain it and broadcast it at the expiry date.</p>
|
||
<p>To provide the economic incentive for the Will-Executor to keep and broadcast the transaction, an output contains a <strong>fee payment</strong>, received only once the inheritance transaction is confirmed in the blockchain.</p>
|
||
</div>
|
||
|
||
<div class="grid cols-2" style="margin-top:8px">
|
||
<div class="card">
|
||
<h3>Changes to the beneficiaries or the Wallet Balance</h3>
|
||
<p>If there are any changes to the will – for example, prior to the signed locktime, the addition of a beneficiary, or a change to the wallet balance – the will is anticipated by one day and resubmitted to the will executors, without the need to invalidate the old one, saving costly On-Chain fees.</p>
|
||
</div>
|
||
<div class="card">
|
||
<h3>Postpone</h3>
|
||
<p>If the new delivery time is <em>later</em> than a will that was already signed and/or pushed, the previously committed coins must be invalidated on-chain <strong>first</strong> — otherwise a Will-Executor could broadcast the old, earlier-locktime transaction and execute the inheritance too early.</p>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="callout" style="margin-top:22px">
|
||
<span class="k">🖥️</span>
|
||
<p>The will-transaction list also shows a dedicated <strong>Server</strong> column, so you always know whether each inheritance transaction is actually stored on the Will-Executor servers — independently of the row colour. See the full reference (labels, statuses, and available actions) in the <a href="https://bitcoin-after.life/docs/user-guide/will-tab.html">WILL tab guide →</a></p>
|
||
</div>
|
||
</div>
|
||
</section>
|
||
|
||
<!-- ===== FAQ ===== -->
|
||
<section class="section alt" id="faq">
|
||
<div class="wrap">
|
||
<span class="eyebrow">FAQ</span>
|
||
<h2>Frequently asked questions</h2>
|
||
<p class="sub">Seven quick answers to the most common questions about the protocol and the plugin.</p>
|
||
<div class="faq" id="faqList">
|
||
|
||
<details class="qa"><summary><span class="qn">01</span><span class="qt">What is the <span translate="no">Bitcoin After Life</span> Protocol for?</span><span class="chev">▾</span></summary>
|
||
<div class="ans"><p>It is software designed to manage the <strong>inheritance of your Bitcoin</strong> stored with a seed phrase (private key). It also lets you create an <strong>emergency backup</strong> of your wallet in case you lose your seed. The protocol uses time-locked transactions sent to Will-Executor servers, which broadcast them to the Bitcoin network at the pre-set delivery date.</p></div>
|
||
</details>
|
||
|
||
<details class="qa"><summary><span class="qn">02</span><span class="qt">Why a plugin for Electrum rather than a dedicated wallet?</span><span class="chev">▾</span></summary>
|
||
<div class="ans"><p>Because <strong>Electrum is hyper-tested</strong> and considered the gold standard among Bitcoin wallets. The BAL plugin does <em>not</em> sign transactions itself — that is entirely Electrum's job. This maximises security, reduces the maintenance burden, and lets users trust the signing process completely independently of BAL.</p></div>
|
||
</details>
|
||
|
||
<details class="qa"><summary><span class="qn">03</span><span class="qt">How much does an inheritance or wallet backup cost?</span><span class="chev">▾</span></summary>
|
||
<div class="ans"><p>An inheritance costs two fees, both paid <strong>exclusively in Bitcoin</strong> — no subscriptions, no credit cards:</p>
|
||
<ul><li><strong>Miner fee:</strong> chosen by the user at signing time. A higher fee is recommended to ensure future confirmation.</li><li><strong>Will-Executor fee:</strong> deducted directly from the inheritance at execution, when the Will-Executor broadcasts the transaction.</li></ul></div>
|
||
</details>
|
||
|
||
<details class="qa"><summary><span class="qn">04</span><span class="qt">What is a Will-Executor?</span><span class="chev">▾</span></summary>
|
||
<div class="ans"><p>Will-Executor servers are the <strong>beating heart of the BAL Protocol</strong>. They receive your pre-signed, time-locked transactions, store them securely, and broadcast them at the pre-set delivery date. They <em>cannot alter or steal</em> the transaction, because it is already fully signed by you. Their only incentive to act correctly is the <strong>fee embedded in the transaction</strong>, received only once the inheritance is confirmed on-chain.</p></div>
|
||
</details>
|
||
|
||
<details class="qa"><summary><span class="qn">05</span><span class="qt">Can I use the plugin with a hardware wallet?</span><span class="chev">▾</span></summary>
|
||
<div class="ans"><p>Yes — the BAL plugin is compatible with <strong>any hardware wallet</strong> supported by Electrum (Ledger, Trezor, Coldcard, BitBox02, Jade, KeepKey and others). Using a dedicated PC for cold-wallet signing is recommended for maximum security.</p></div>
|
||
</details>
|
||
|
||
<details class="qa"><summary><span class="qn">06</span><span class="qt">Is the plugin compatible with all Electrum wallet types?</span><span class="chev">▾</span></summary>
|
||
<div class="ans"><p>BAL works with <strong>standard Electrum wallets</strong> (single-signature, seed-based) and with <strong>hardware wallets</strong> supported by Electrum (see FAQ 11). It is <strong>not yet compatible with multisig wallets</strong> — support is planned for a future plugin release. Compatibility with <strong>Electrum's TrustedCoin (2FA) wallets</strong> is currently <strong>unknown / unsupported</strong>; it has not yet been determined whether or when this will be addressed.</p>
|
||
<p>If you use a multisig or TrustedCoin (2FA) wallet, please do not rely on BAL for inheritance until compatibility is confirmed.</p></div>
|
||
</details>
|
||
|
||
<details class="qa"><summary><span class="qn">07</span><span class="qt">Is a BAL 2.0 version planned?</span><span class="chev">▾</span></summary>
|
||
<div class="ans"><p>Yes — <strong>BAL 2.0</strong> is in development. The main new feature will be support for <strong>staggered inheritance</strong>: instead of a single lump-sum transfer, it will be possible to schedule gradual distributions over time (for example 10% per year), giving heirs a more structured and flexible inheritance plan.</p></div>
|
||
</details>
|
||
|
||
</div>
|
||
|
||
<div class="callout faq-more" style="margin-top:22px;max-width:880px">
|
||
<span class="k">📖</span>
|
||
<p>Looking for something more specific — Check Alive, running a Will-Executor, wallet compatibility, and more? See the <strong>full FAQ in the manual</strong>. <a href="https://bitcoin-after.life/docs/faq.html">Browse the full FAQ →</a></p>
|
||
</div>
|
||
</div>
|
||
</section>
|
||
|
||
</main>
|
||
|
||
<!-- ===== Footer ===== -->
|
||
<footer>
|
||
<div class="wrap">
|
||
<div class="sig">Svātantrya</div>
|
||
<div>Signed — <span translate="no">Bitcoin After Life</span> Protocol</div>
|
||
<div class="links">
|
||
<a href="https://bitcoin-after.life">bitcoin-after.life</a>
|
||
<a href="mailto:info@bitcoin-after.life">info@bitcoin-after.life</a>
|
||
<a href="https://x.com/BitcoinAfterLif">@BitcoinAfterLif</a>
|
||
<a href="https://bitcoin-after.life/svatantrya.asc">PGP Key</a>
|
||
<a href="https://bitcoin-after.life/docs/press-kit.html">Press Kit</a>
|
||
<a href="https://bitcoin-after.life/gitea/bitcoinafterlife">Source Code</a>
|
||
</div>
|
||
<div class="built">Built with ₿itcoin. No FIAT was used in the making of this protocol.</div>
|
||
</div>
|
||
</footer>
|
||
|
||
<script>
|
||
/*
|
||
Mobile menu toggle.
|
||
The `nojs` class is set on <html> in the document head and removed here,
|
||
so a visitor without JavaScript keeps a plain inline navigation rather
|
||
than a button that does nothing.
|
||
*/
|
||
(function () {
|
||
const toggle = document.getElementById('navToggle');
|
||
const nav = document.getElementById('mainNav');
|
||
if (!toggle || !nav) return;
|
||
|
||
function setOpen(open) {
|
||
nav.classList.toggle('open', open);
|
||
toggle.setAttribute('aria-expanded', open ? 'true' : 'false');
|
||
toggle.setAttribute('aria-label', open ? 'Close menu' : 'Open menu');
|
||
}
|
||
|
||
toggle.addEventListener('click', function () {
|
||
setOpen(!nav.classList.contains('open'));
|
||
});
|
||
|
||
// Close after choosing a destination, otherwise the panel would cover
|
||
// the section the visitor just jumped to.
|
||
nav.addEventListener('click', function (e) {
|
||
if (e.target.tagName === 'A') setOpen(false);
|
||
});
|
||
|
||
document.addEventListener('keydown', function (e) {
|
||
if (e.key === 'Escape') setOpen(false);
|
||
});
|
||
})();
|
||
</script>
|
||
|
||
<script>
|
||
/*
|
||
FAQ accordion built on native <details>/<summary>.
|
||
WHY native: it stays accessible and keyboard-friendly with zero JS.
|
||
This small script just enforces single-open behavior (clicking one
|
||
question closes the others) for a tidier reading experience.
|
||
*/
|
||
const items = document.querySelectorAll('#faqList details.qa');
|
||
items.forEach(d => {
|
||
d.addEventListener('toggle', () => {
|
||
if (d.open) items.forEach(o => { if (o !== d) o.open = false; });
|
||
});
|
||
});
|
||
</script>
|
||
|
||
<script>
|
||
(function () {
|
||
const apiUrl = 'https://bitcoin-after.life/gitea/api/v1/repos/bitcoinafterlife/bal-electrum-plugin/releases/latest';
|
||
const link = document.getElementById('latest-release-link');
|
||
const sig = document.getElementById('latest-release-sig');
|
||
const releasesUrl = 'https://bitcoin-after.life/gitea/bitcoinafterlife/bal-electrum-plugin/releases';
|
||
if (!link) return;
|
||
fetch(apiUrl)
|
||
.then(r => r.ok ? r.json() : Promise.reject(new Error('HTTP ' + r.status)))
|
||
.then(data => {
|
||
if (!data || !data.tag_name) return;
|
||
link.textContent = data.tag_name;
|
||
|
||
const assets = data.assets || [];
|
||
// Take the real zip asset straight from the API instead of
|
||
// rebuilding its name from a fixed template. The publisher does
|
||
// not always use the same filename (e.g. "bal_electrum_plugin_v0.6.0.zip"
|
||
// vs "bal_v0.6.1.zip"), so any reconstructed name eventually breaks.
|
||
const zipAsset = assets.find(a => /\.zip$/i.test(a.name));
|
||
const sigAsset = assets.find(a => /\.zip\.(sig|asc)$/i.test(a.name));
|
||
|
||
// If no zip asset is found, fall back to the releases page so the
|
||
// link is never dead.
|
||
link.href = zipAsset ? zipAsset.browser_download_url : releasesUrl;
|
||
|
||
if (sig) {
|
||
if (sigAsset) {
|
||
sig.href = sigAsset.browser_download_url;
|
||
sig.style.display = 'inline';
|
||
} else {
|
||
sig.style.display = 'none';
|
||
}
|
||
}
|
||
})
|
||
.catch(err => {
|
||
console.error('Failed to fetch latest release:', err);
|
||
link.href = releasesUrl;
|
||
if (sig) sig.style.display = 'none';
|
||
});
|
||
})();
|
||
</script>
|
||
</body>
|
||
</html>
|