{"id":1501,"date":"2026-09-26T05:04:55","date_gmt":"2026-09-26T05:04:55","guid":{"rendered":"https:\/\/neverlosebitcoin.com\/?page_id=1501"},"modified":"2026-09-30T00:17:07","modified_gmt":"2026-09-30T00:17:07","slug":"wizard","status":"publish","type":"page","link":"https:\/\/neverlosebitcoin.com\/de\/wizard\/","title":{"rendered":"Assistent f\u00fcr Multisig-Kompatibilit\u00e4t"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\">What this tool does<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The Multisig Compatibility Wizard recommends one recovery-capable multisig setup based on six short questions: your goal, your amount band, your technical comfort, your hardware budget, devices you already own, and whether you can store backups in more than one location.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">How it works:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Every result names a signing threshold (for example 2-of-3)<\/li>\n\n\n\n<li>Specific hardware devices<\/li>\n\n\n\n<li>One coordinator app<\/li>\n\n\n\n<li>Recovery model<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Each device and coordinator pair carries a compatibility status with a visible definition, plus the source behind it and its limits. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">If you already know your devices and want to check specific pairs, our <a href=\"https:\/\/neverlosebitcoin.com\/compatibility\/\">Compatibility Checker<\/a> is the tool for that job.<\/p>\n\n\n\n<style data-wp-block-html=\"css\">\n\/* Wizard buttons: reset to start over, then restyle.\n   Primary (Continue): site-standard orange button: accent orange\n   background with the theme button label color (dark in both modes).\n   Back: transparent background with grey outline border only.\n   Back and \"Start over\" labels follow the theme body-text palette so\n   they stay readable in both light and dark mode.\n   Flat, radius 12, no shadow, no blue. *\/\n#nlb-wizard .nlb-wiz-btn,\n#nlb-wizard .nlb-wiz-btn:hover,\n#nlb-wizard .nlb-wiz-btn:focus,\n#nlb-wizard .nlb-wiz-btn:focus-visible,\n#nlb-wizard .nlb-wiz-btn:active {\n  background: none;\n  background-color: transparent;\n  border: none;\n  border-radius: 12px;\n  box-shadow: none;\n  color: var(--global-palette4);\n}\n\n#nlb-wizard .nlb-wiz-btn-primary,\n#nlb-wizard .nlb-wiz-btn-primary:hover,\n#nlb-wizard .nlb-wiz-btn-primary:focus,\n#nlb-wizard .nlb-wiz-btn-primary:active {\n  background-color: var(--global-palette-btn-bg);\n  border-color: transparent;\n  color: var(--global-palette-btn);\n}\n\n#nlb-wizard .nlb-wiz-btn-secondary,\n#nlb-wizard .nlb-wiz-btn-secondary:hover,\n#nlb-wizard .nlb-wiz-btn-secondary:focus,\n#nlb-wizard .nlb-wiz-btn-secondary:active {\n  background-color: transparent;\n  border: 1px solid var(--global-gray-400, #a0aec0);\n  color: var(--global-palette4);\n}\n\n\/* \"Start over\" link-style button: same body-text palette color in all states. *\/\n#nlb-wizard .nlb-wiz-btn-link,\n#nlb-wizard .nlb-wiz-btn-link:hover,\n#nlb-wizard .nlb-wiz-btn-link:focus,\n#nlb-wizard .nlb-wiz-btn-link:focus-visible,\n#nlb-wizard .nlb-wiz-btn-link:active {\n  color: var(--global-palette4);\n}\n<\/style>\n\n<div id=\"nlb-wizard\"><p>Loading the wizard\u2026 If it does not appear, the script may be blocked.<\/p><\/div>\n<script>window.NLB_WIZARD_DATASET={\"combinationTests\":[{\"constraints\":\"Coldcard docs list Sparrow on Windows, macOS, Linux with BBQr on Coldcard Q. Sparrow docs require current Coldcard firmware for USB. No NeverLoseBitcoin hands-on test.\",\"coordinator_id\":\"sparrow\",\"device_id\":\"coldcard\",\"evidence_url\":\"https:\/\/coldcard.com\/docs\/compatible-wallets\/\",\"id\":\"coldcard-sparrow\",\"status\":\"Conditional\",\"tested_date\":null,\"tester\":null,\"workflow\":\"USB connection, or air-gapped SD card \/ QR (BBQr on Coldcard Q), multisig PSBT signing\"},{\"constraints\":\"BBQr flows need Coldcard Q with recent firmware. Nunchuk mobile and desktop signer lists differ.\",\"coordinator_id\":\"nunchuk\",\"device_id\":\"coldcard\",\"evidence_url\":\"https:\/\/coldcard.com\/docs\/compatible-wallets\/\",\"id\":\"coldcard-nunchuk\",\"status\":\"Conditional\",\"tested_date\":null,\"tester\":null,\"workflow\":\"USB, microSD, or QR (BBQr on Coldcard Q); Nunchuk supports single-sig and multisig\"},{\"constraints\":\"Desktop platforms per Coldcard docs (Windows, macOS, Linux) plus Android. No NeverLoseBitcoin hands-on test.\",\"coordinator_id\":\"electrum\",\"device_id\":\"coldcard\",\"evidence_url\":\"https:\/\/coldcard.com\/docs\/compatible-wallets\/\",\"id\":\"coldcard-electrum\",\"status\":\"Conditional\",\"tested_date\":null,\"tester\":null,\"workflow\":\"USB or SD-card PSBT multisig\"},{\"constraints\":\"BlueWallet is mobile-first; the documented path is file-based multisig import, not USB signing. BlueWallet documents multisig derivation paths m\/48'\/0'\/0'\/2' (native segwit), m\/48'\/0'\/0'\/1' (wrapped segwit), m\/45' (legacy).\",\"coordinator_id\":\"bluewallet\",\"device_id\":\"coldcard\",\"evidence_url\":\"https:\/\/github.com\/BlueWallet\/BlueWallet\/wiki\/Supported-wallet-types\",\"id\":\"coldcard-bluewallet\",\"status\":\"Conditional\",\"tested_date\":null,\"tester\":null,\"workflow\":\"Multisig vault import via Coldcard text file or cosigner xpubs\"},{\"constraints\":\"Sparrow documents Jade as a connected USB wallet; Jade also supports QR air-gapped flows. No NeverLoseBitcoin hands-on test.\",\"coordinator_id\":\"sparrow\",\"device_id\":\"jade\",\"evidence_url\":\"https:\/\/sparrowwallet.com\/docs\/connected-wallet.html\",\"id\":\"jade-sparrow\",\"status\":\"Conditional\",\"tested_date\":null,\"tester\":null,\"workflow\":\"USB connection or QR air-gapped PSBT multisig\"},{\"constraints\":\"Listed as compatible by Blockstream's official store listing and community multisig guides; no vendor step-by-step doc found.\",\"coordinator_id\":\"nunchuk\",\"device_id\":\"jade\",\"evidence_url\":\"https:\/\/blockdyor.com\/diy-bitcoin-multisig-wallet-nunchuk\/\",\"id\":\"jade-nunchuk\",\"status\":\"Unverified\",\"tested_date\":null,\"tester\":null,\"workflow\":\"QR or USB multisig signing\"},{\"constraints\":\"Compatibility reported in Jade Plus launch coverage; no vendor step-by-step doc found.\",\"coordinator_id\":\"bluewallet\",\"device_id\":\"jade\",\"evidence_url\":\"https:\/\/holder.io\/news\/blockstream-launches-jade-plus-wallet-bitcoin-anniversary\/\",\"id\":\"jade-bluewallet\",\"status\":\"Unverified\",\"tested_date\":null,\"tester\":null,\"workflow\":\"QR-based wallet pairing and PSBT signing\"},{\"constraints\":\"Third-party review lists Electrum among well-tested Jade companions; no vendor doc found.\",\"coordinator_id\":\"electrum\",\"device_id\":\"jade\",\"evidence_url\":\"https:\/\/cryptonews.com\/reviews\/blockstream-jade-review\/\",\"id\":\"jade-electrum\",\"status\":\"Unverified\",\"tested_date\":null,\"tester\":null,\"workflow\":\"USB or QR multisig signing\"},{\"constraints\":\"Sparrow documents BitBox02 as a supported USB wallet. USB-only device; needs a computer.\",\"coordinator_id\":\"sparrow\",\"device_id\":\"bitbox02\",\"evidence_url\":\"https:\/\/sparrowwallet.com\/docs\/connected-wallet.html\",\"id\":\"bitbox02-sparrow\",\"status\":\"Conditional\",\"tested_date\":null,\"tester\":null,\"workflow\":\"USB connection, multisig PSBT signing\"},{\"constraints\":\"Community reviews document Electrum support; Bitcoin Wiki lists BitBox as supported by Electrum and HWI-based wallets.\",\"coordinator_id\":\"electrum\",\"device_id\":\"bitbox02\",\"evidence_url\":\"https:\/\/blockdyor.com\/bitbox02-review\/\",\"id\":\"bitbox02-electrum\",\"status\":\"Conditional\",\"tested_date\":null,\"tester\":null,\"workflow\":\"USB multisig via Electrum hardware wallet support\"},{\"constraints\":\"Community multisig guide says Nunchuk desktop adds BitBox support; the mobile signer list is narrower.\",\"coordinator_id\":\"nunchuk\",\"device_id\":\"bitbox02\",\"evidence_url\":\"https:\/\/blockdyor.com\/diy-bitcoin-multisig-wallet-nunchuk\/\",\"id\":\"bitbox02-nunchuk\",\"status\":\"Unverified\",\"tested_date\":null,\"tester\":null,\"workflow\":\"USB multisig signing on Nunchuk desktop\"},{\"constraints\":\"Sparrow documents Trezor as a supported USB wallet. USB-only; needs a computer.\",\"coordinator_id\":\"sparrow\",\"device_id\":\"trezor-safe-3\",\"evidence_url\":\"https:\/\/sparrowwallet.com\/docs\/connected-wallet.html\",\"id\":\"trezor-safe-3-sparrow\",\"status\":\"Conditional\",\"tested_date\":null,\"tester\":null,\"workflow\":\"USB connection, multisig PSBT signing\"},{\"constraints\":\"Listed among Safe 3 third-party apps; Electrum has long-standing Trezor support.\",\"coordinator_id\":\"electrum\",\"device_id\":\"trezor-safe-3\",\"evidence_url\":\"https:\/\/thebitcoinhole.com\/hardware-wallets\/secux-neo-x-vs-trezor-safe-3-btconly\",\"id\":\"trezor-safe-3-electrum\",\"status\":\"Conditional\",\"tested_date\":null,\"tester\":null,\"workflow\":\"USB multisig signing\"},{\"constraints\":\"Community multisig guide says Nunchuk desktop supports Trezor; third-party comparison lists Nunchuk as a Safe 3 app.\",\"coordinator_id\":\"nunchuk\",\"device_id\":\"trezor-safe-3\",\"evidence_url\":\"https:\/\/blockdyor.com\/diy-bitcoin-multisig-wallet-nunchuk\/\",\"id\":\"trezor-safe-3-nunchuk\",\"status\":\"Unverified\",\"tested_date\":null,\"tester\":null,\"workflow\":\"USB multisig signing on Nunchuk desktop\"},{\"constraints\":\"Foundation documents the Sparrow QR multisig export flow. No USB data: QR or microSD only.\",\"coordinator_id\":\"sparrow\",\"device_id\":\"passport\",\"evidence_url\":\"https:\/\/foundation.xyz\/2022\/10\/casa-sparrow\/\",\"id\":\"passport-sparrow\",\"status\":\"Conditional\",\"tested_date\":null,\"tester\":null,\"workflow\":\"Air-gapped QR multisig: export multisig config QR from Sparrow, sign PSBTs via camera\"},{\"constraints\":\"Foundation's Vault Concierge builds 2-of-3 multisig vaults in Nunchuk with Passport signers. QR\/microSD only.\",\"coordinator_id\":\"nunchuk\",\"device_id\":\"passport\",\"evidence_url\":\"https:\/\/foundation.xyz\/2025\/03\/passport-is-now-passport-core\/\",\"id\":\"passport-nunchuk\",\"status\":\"Conditional\",\"tested_date\":null,\"tester\":null,\"workflow\":\"Air-gapped QR multisig vault\"},{\"constraints\":\"Foundation's Vault Concierge builds 2-of-3 multisig vaults in BlueWallet with Passport signers. QR\/microSD only.\",\"coordinator_id\":\"bluewallet\",\"device_id\":\"passport\",\"evidence_url\":\"https:\/\/foundation.xyz\/2025\/03\/passport-is-now-passport-core\/\",\"id\":\"passport-bluewallet\",\"status\":\"Conditional\",\"tested_date\":null,\"tester\":null,\"workflow\":\"Air-gapped QR multisig vault\"},{\"constraints\":\"Third-party review lists Electrum among Passport-compatible PSBT wallets; no vendor step-by-step doc found.\",\"coordinator_id\":\"electrum\",\"device_id\":\"passport\",\"evidence_url\":\"https:\/\/blockdyor.com\/foundation-passport-review\/\",\"id\":\"passport-electrum\",\"status\":\"Unverified\",\"tested_date\":null,\"tester\":null,\"workflow\":\"PSBT multisig via QR or microSD\"},{\"constraints\":\"SeedSigner is stateless: it rebuilds from seed every boot. Community guides document the QR multisig flow.\",\"coordinator_id\":\"sparrow\",\"device_id\":\"seedsigner\",\"evidence_url\":\"https:\/\/bitcoinmagazine.com\/guides\/how-to-use-the-seedsigner-bitcoin-wallet\",\"id\":\"seedsigner-sparrow\",\"status\":\"Conditional\",\"tested_date\":null,\"tester\":null,\"workflow\":\"Air-gapped QR: import multisig XPUBs into Sparrow, sign PSBTs via animated QR\"},{\"constraints\":\"Community multisig guide lists SeedSigner on Nunchuk mobile; DIY build, verify parts and software.\",\"coordinator_id\":\"nunchuk\",\"device_id\":\"seedsigner\",\"evidence_url\":\"https:\/\/blockdyor.com\/diy-bitcoin-multisig-wallet-nunchuk\/\",\"id\":\"seedsigner-nunchuk\",\"status\":\"Unverified\",\"tested_date\":null,\"tester\":null,\"workflow\":\"QR-based multisig signing\"},{\"constraints\":\"Community sources list BlueWallet among SeedSigner-compatible coordinators; DIY build, verify parts and software.\",\"coordinator_id\":\"bluewallet\",\"device_id\":\"seedsigner\",\"evidence_url\":\"https:\/\/bitcoinmagazine.com\/business\/building-your-own-hardware-wallet-seedsigner-and-satochip-combo-is-nuts\",\"id\":\"seedsigner-bluewallet\",\"status\":\"Unverified\",\"tested_date\":null,\"tester\":null,\"workflow\":\"QR-based multisig XPUB and PSBT exchange\"}],\"coordinators\":[{\"connection_methods\":[\"usb\",\"qr\",\"microsd\"],\"descriptor_format\":\"output descriptors\",\"id\":\"sparrow\",\"name\":\"Sparrow\",\"notes\":\"Desktop power tool with deep multisig and PSBT support. Best for users comfortable on a computer.\",\"platforms\":[\"Windows\",\"macOS\",\"Linux\"],\"psbt\":true,\"skill_level\":\"comfortable\",\"url\":\"https:\/\/sparrowwallet.com\/docs\/connected-wallet.html\"},{\"connection_methods\":[\"usb\",\"qr\",\"microsd\"],\"descriptor_format\":\"electrum multisig wallet files\",\"id\":\"electrum\",\"name\":\"Electrum\",\"notes\":\"Veteran desktop wallet. Powerful multisig support, dated interface, expects the user to know what they are doing.\",\"platforms\":[\"Windows\",\"macOS\",\"Linux\",\"Android\"],\"psbt\":true,\"skill_level\":\"advanced\"},{\"connection_methods\":[\"usb\",\"qr\",\"bluetooth\",\"nfc\"],\"descriptor_format\":\"BSMS and output descriptors\",\"id\":\"nunchuk\",\"name\":\"Nunchuk\",\"notes\":\"Mobile-first with guided multisig setup. Desktop version supports additional USB signers.\",\"platforms\":[\"iOS\",\"Android\",\"Windows\",\"macOS\",\"Linux\"],\"psbt\":true,\"skill_level\":\"beginner\"},{\"connection_methods\":[\"qr\",\"file-import\"],\"descriptor_format\":\"multisig vault files\",\"id\":\"bluewallet\",\"name\":\"BlueWallet\",\"notes\":\"Mobile-first. Multisig works through import (for example Coldcard text file or cosigner xpubs). A vault with no cosigner seeds is watch-only.\",\"platforms\":[\"iOS\",\"Android\",\"macOS\"],\"psbt\":true,\"skill_level\":\"beginner\"}],\"devices\":[{\"airgapped_option\":true,\"id\":\"coldcard\",\"multisig\":true,\"name\":\"Coldcard\",\"notes\":\"Bitcoin-only. Mk4 uses USB and microSD; Coldcard Q adds QR (BBQr). A common reference device for multisig.\",\"price_tier\":\"mid\",\"transports\":[\"usb\",\"microsd\",\"qr\"],\"url\":\"https:\/\/coldcard.com\/docs\/compatible-wallets\/\",\"vendor\":\"Coinkite\"},{\"airgapped_option\":true,\"id\":\"jade\",\"multisig\":true,\"name\":\"Blockstream Jade\",\"notes\":\"Budget open-source option with camera for QR air-gapped signing. Also has Bluetooth; prefer USB or QR for multisig setups.\",\"price_tier\":\"low\",\"transports\":[\"usb\",\"qr\",\"bluetooth\"],\"url\":\"https:\/\/blockstream.com\/jade\",\"vendor\":\"Blockstream\"},{\"airgapped_option\":false,\"id\":\"bitbox02\",\"multisig\":true,\"name\":\"BitBox02\",\"notes\":\"USB-only. Bitcoin-only edition recommended for multisig. Backs up to microSD card.\",\"price_tier\":\"mid\",\"transports\":[\"usb\"],\"url\":\"https:\/\/shiftcrypto.ch\/bitbox02\",\"vendor\":\"Shift Crypto\"},{\"airgapped_option\":false,\"id\":\"trezor-safe-3\",\"multisig\":true,\"name\":\"Trezor Safe 3\",\"notes\":\"USB-only. Bitcoin-only firmware available. Supports Shamir (SLIP-39) backup shares on device.\",\"price_tier\":\"low\",\"transports\":[\"usb\"],\"vendor\":\"Trezor\"},{\"airgapped_option\":true,\"id\":\"passport\",\"multisig\":true,\"name\":\"Foundation Passport\",\"notes\":\"Fully air-gapped: no USB data, camera and microSD only. Strong multisig UX.\",\"price_tier\":\"high\",\"transports\":[\"qr\",\"microsd\"],\"url\":\"https:\/\/foundation.xyz\",\"vendor\":\"Foundation Devices\"},{\"airgapped_option\":true,\"id\":\"seedsigner\",\"multisig\":true,\"name\":\"SeedSigner\",\"notes\":\"DIY build, stateless: it rebuilds from seed at every boot. Verify parts and software from the official project before use.\",\"price_tier\":\"low\",\"transports\":[\"qr\"],\"vendor\":\"SeedSigner (DIY open source)\"}],\"guides\":[{\"coordinator_id\":\"sparrow\",\"id\":\"setup-sparrow\",\"kind\":\"setup\",\"title\":\"Sparrow multisig setup guide\",\"url\":\"\/guides\/\"},{\"coordinator_id\":\"nunchuk\",\"id\":\"setup-nunchuk\",\"kind\":\"setup\",\"title\":\"Nunchuk multisig setup guide\",\"url\":\"\/guides\/\"},{\"coordinator_id\":\"electrum\",\"id\":\"setup-electrum\",\"kind\":\"setup\",\"title\":\"Electrum multisig setup guide\",\"url\":\"\/guides\/\"},{\"coordinator_id\":\"bluewallet\",\"id\":\"setup-bluewallet\",\"kind\":\"setup\",\"title\":\"BlueWallet multisig setup guide\",\"url\":\"\/guides\/\"},{\"id\":\"recovery-basics\",\"kind\":\"recovery\",\"title\":\"Multisig recovery basics: descriptors, backups, and test restores\",\"url\":\"\/guides\/\"},{\"id\":\"compare-hardware\",\"kind\":\"comparison\",\"title\":\"Hardware wallet comparison for multisig\",\"url\":\"\/compare\/\"},{\"id\":\"methodology\",\"kind\":\"methodology\",\"title\":\"How the wizard picks a setup (methodology)\",\"url\":\"\/wizard\/#methodology\"}],\"meta\":{\"honesty_notes\":[\"No Confirmed records in this seed dataset. NeverLoseBitcoin has not yet completed its own hands-on test of any pair.\",\"Conditional records rest on official vendor or coordinator documentation of the named workflow.\",\"Unverified records rest on community or editorial sources only.\",\"tested_date and tester are null everywhere: no dates or names are invented.\",\"Guide URLs are site-relative placeholders. Map them to real published guides before launch.\"],\"last_verified\":\"2026-09-25\",\"publisher\":\"NeverLoseBitcoin\",\"status_definitions\":{\"Conditional\":\"Works only with a named transport, firmware, setting, or limitation.\",\"Confirmed\":\"Tested for the named versions and documented workflow.\",\"Incompatible\":\"A documented blocker exists for the named versions or workflow.\",\"Unverified\":\"Vendor or community sources exist, but NeverLoseBitcoin has not completed its own test.\"},\"version\":\"1.0.0\"},\"useCaseRules\":[{\"amount_band\":\"any\",\"beginner_threshold\":null,\"goal\":\"learning\",\"rationale\":\"Learning setups should be cheap, forgiving, and easy to rebuild. 2-of-3 teaches quorum thinking while surviving one lost signer.\",\"signer_count\":3,\"threshold\":\"2-of-3\"},{\"amount_band\":\"under-10k\",\"beginner_threshold\":null,\"goal\":\"savings\",\"rationale\":\"For smaller savings, 2-of-3 removes the single point of failure without adding meaningful complexity.\",\"signer_count\":3,\"threshold\":\"2-of-3\"},{\"amount_band\":\"10k-100k\",\"beginner_threshold\":null,\"goal\":\"savings\",\"rationale\":\"2-of-3 with geographically separated backups is the standard serious-savings setup.\",\"signer_count\":3,\"threshold\":\"2-of-3\"},{\"amount_band\":\"over-100k\",\"beginner_threshold\":null,\"goal\":\"savings\",\"rationale\":\"At this size, redundancy and backup discipline matter more than a higher threshold. 2-of-3 keeps recovery realistic.\",\"signer_count\":3,\"threshold\":\"2-of-3\"},{\"amount_band\":\"under-10k\",\"beginner_threshold\":null,\"goal\":\"inheritance\",\"rationale\":\"Inheritance setups must be explainable to non-technical heirs. 2-of-3 with written instructions beats clever thresholds.\",\"signer_count\":3,\"threshold\":\"2-of-3\"},{\"amount_band\":\"10k-100k\",\"beginner_threshold\":null,\"goal\":\"inheritance\",\"rationale\":\"2-of-3 keeps the heir story simple: any two of three locations unlocks the funds, with clear written instructions.\",\"signer_count\":3,\"threshold\":\"2-of-3\"},{\"amount_band\":\"over-100k\",\"beginner_threshold\":\"2-of-3\",\"goal\":\"inheritance\",\"rationale\":\"Larger inheritance benefits from 3-of-5: it survives two lost signers. Beginners still get 2-of-3, because a setup heirs cannot operate is worse than a simpler one.\",\"signer_count\":5,\"threshold\":\"3-of-5\"},{\"amount_band\":\"under-10k\",\"beginner_threshold\":null,\"goal\":\"treasury\",\"rationale\":\"Small treasuries need the same single-key-failure protection as savings, with keys held by different people or locations.\",\"signer_count\":3,\"threshold\":\"2-of-3\"},{\"amount_band\":\"10k-100k\",\"beginner_threshold\":null,\"goal\":\"treasury\",\"rationale\":\"2-of-3 across people or sites gives a business continuity story without operational overhead.\",\"signer_count\":3,\"threshold\":\"2-of-3\"},{\"amount_band\":\"over-100k\",\"beginner_threshold\":\"2-of-3\",\"goal\":\"treasury\",\"rationale\":\"Larger treasuries justify 3-of-5: two signers can be lost or unavailable without locking funds. Beginners still get 2-of-3 to keep operations realistic.\",\"signer_count\":5,\"threshold\":\"3-of-5\"}]};<\/script>\n<script>\n\/* NeverLoseBitcoin multisig compatibility wizard (vanilla JS, no dependencies).\n *\n * Usage: include on \/wizard\/ only, with a container <div id=\"nlb-wizard\"><\/div>.\n * Dataset: window.NLB_WIZARD_DATASET takes precedence; otherwise the script\n * fetches \"dataset.json\" relative to the page. Answers stay categorical and\n * local to the browser. Nothing sensitive is ever requested or stored.\n *\/\n(function () {\n  'use strict';\n\n  var ROOT_ID = 'nlb-wizard';\n  var FRAG_PREFIX = 'wizard=';\n\n  \/* ------------------------------------------------------------------ *\/\n  \/* Step definitions                                                    *\/\n  \/* ------------------------------------------------------------------ *\/\n\n  var STEPS = [\n    {\n      id: 'goal',\n      question: 'What are you protecting?',\n      help: 'This sets the threshold and how simple the setup must stay.',\n      type: 'radio',\n      options: [\n        { value: 'savings', label: 'Long-term savings', desc: 'Bitcoin I plan to hold for years.' },\n        { value: 'inheritance', label: 'Inheritance planning', desc: 'Bitcoin my heirs must be able to recover.' },\n        { value: 'treasury', label: 'Business treasury', desc: 'Company funds with more than one stakeholder.' },\n        { value: 'learning', label: 'Learning multisig', desc: 'I want to practice with small amounts first.' }\n      ]\n    },\n    {\n      id: 'amount',\n      question: 'Roughly how much value will this protect?',\n      help: 'Categories only. This weights redundancy. It is never stored with your identity.',\n      type: 'radio',\n      options: [\n        { value: 'under-10k', label: 'Under $10k' },\n        { value: '10k-100k', label: '$10k to $100k' },\n        { value: 'over-100k', label: 'Over $100k' }\n      ]\n    },\n    {\n      id: 'comfort',\n      question: 'How comfortable are you with technical setup?',\n      help: 'This picks coordinator software you will actually enjoy using.',\n      type: 'radio',\n      options: [\n        { value: 'beginner', label: 'Beginner', desc: 'I want guided steps and plain language.' },\n        { value: 'comfortable', label: 'Comfortable', desc: 'I can follow a desktop app and manage files.' },\n        { value: 'advanced', label: 'Advanced', desc: 'I am fine with power tools and manual verification.' }\n      ]\n    },\n    {\n      id: 'budget',\n      question: 'What is your hardware budget?',\n      help: 'Total for the signing devices. Prices move, so the wizard uses rough tiers.',\n      type: 'radio',\n      options: [\n        { value: 'under-100', label: 'Under $100', desc: 'Cheapest viable devices only.' },\n        { value: '100-200', label: '$100 to $200', desc: 'Budget plus mid-range devices.' },\n        { value: 'over-200', label: 'Over $200', desc: 'Any device in the dataset.' },\n        { value: 'flexible', label: 'Flexible', desc: 'Recommend the best fit regardless of price.' }\n      ]\n    },\n    {\n      id: 'devices',\n      question: 'Do you already own any of these devices? (optional)',\n      help: 'Select all that apply. The wizard builds around hardware you already have.',\n      type: 'checkbox',\n      optional: true,\n      options: []\n    },\n    {\n      id: 'geo',\n      question: 'Can you store backups in two or more separate locations?',\n      help: 'For example home plus a safe deposit box, or two trusted family members in different cities.',\n      type: 'radio',\n      options: [\n        { value: 'yes', label: 'Yes' },\n        { value: 'no', label: 'No', desc: 'Only one safe location is realistic for me.' },\n        { value: 'unsure', label: 'Not sure yet' }\n      ]\n    }\n  ];\n\n  var STATUS_ORDER = { Incompatible: 0, Unverified: 1, Conditional: 2, Confirmed: 3 };\n\n  \/* ------------------------------------------------------------------ *\/\n  \/* Small DOM helpers                                                   *\/\n  \/* ------------------------------------------------------------------ *\/\n\n  function el(tag, attrs, text) {\n    var node = document.createElement(tag);\n    if (attrs) {\n      Object.keys(attrs).forEach(function (k) {\n        if (k === 'class') node.className = attrs[k];\n        else node.setAttribute(k, attrs[k]);\n      });\n    }\n    if (text !== undefined && text !== null) node.textContent = text;\n    return node;\n  }\n\n  function esc(s) {\n    return String(s == null ? '' : s);\n  }\n\n  \/* ------------------------------------------------------------------ *\/\n  \/* Dataset loading                                                     *\/\n  \/* ------------------------------------------------------------------ *\/\n\n  function loadDataset() {\n    return new Promise(function (resolve, reject) {\n      if (window.NLB_WIZARD_DATASET) {\n        resolve(window.NLB_WIZARD_DATASET);\n        return;\n      }\n      fetch('dataset.json', { credentials: 'same-origin' })\n        .then(function (r) {\n          if (!r.ok) throw new Error('HTTP ' + r.status);\n          return r.json();\n        })\n        .then(resolve)\n        .catch(reject);\n    });\n  }\n\n  \/* ------------------------------------------------------------------ *\/\n  \/* State: answers, step, URL fragment                                  *\/\n  \/* ------------------------------------------------------------------ *\/\n\n  function defaultAnswers() {\n    return { goal: null, amount: null, comfort: null, budget: null, devices: [], geo: null };\n  }\n\n  function serialize(answers, step) {\n    var parts = [\n      answers.goal || '-',\n      answers.amount || '-',\n      answers.comfort || '-',\n      answers.budget || '-',\n      answers.devices.length ? answers.devices.join('+') : '-',\n      answers.geo || '-',\n      's' + step\n    ];\n    return '#' + FRAG_PREFIX + parts.join('.');\n  }\n\n  function parseFragment() {\n    var h = window.location.hash || '';\n    if (h.indexOf('#' + FRAG_PREFIX) !== 0) return null;\n    var parts = h.slice(('#' + FRAG_PREFIX).length).split('.');\n    if (parts.length < 6) return null;\n    function v(x) { return x === '-' ? null : x; }\n    var stepPart = parts[6] || 's0';\n    return {\n      answers: {\n        goal: v(parts[0]),\n        amount: v(parts[1]),\n        comfort: v(parts[2]),\n        budget: v(parts[3]),\n        devices: parts[4] === '-' ? [] : parts[4].split('+'),\n        geo: v(parts[5])\n      },\n      step: parseInt(stepPart.slice(1), 10) || 0\n    };\n  }\n\n  \/* ------------------------------------------------------------------ *\/\n  \/* Recommendation engine                                               *\/\n  \/* ------------------------------------------------------------------ *\/\n\n  function findRule(ds, goal, amount) {\n    var rules = ds.useCaseRules || [];\n    var r = rules.find(function (x) { if (x.goal !== goal) return false; return x.amount_band === amount; });\n    if (!r) r = rules.find(function (x) { if (x.goal !== goal) return false; return x.amount_band === 'any'; });\n    return r;\n  }\n\n  function thresholdCount(t) { return parseInt(t.split('-of-')[1], 10); }\n  function thresholdM(t) { return parseInt(t.split('-of-')[0], 10); }\n\n  function budgetTiers(budget) {\n    if (budget === 'under-100') return ['low'];\n    if (budget === '100-200') return ['low', 'mid'];\n    return ['low', 'mid', 'high'];\n  }\n\n  function pairRecord(ds, deviceId, coordId) {\n    return (ds.combinationTests || []).find(function (t) {\n      if (t.device_id !== deviceId) return false; return t.coordinator_id === coordId;\n    }) || null;\n  }\n\n  function statusScore(status) {\n    if (status === 'Confirmed') return 3;\n    if (status === 'Conditional') return 2;\n    if (status === 'Unverified') return 1;\n    return -100;\n  }\n\n  function deviceById(ds, id) {\n    return (ds.devices || []).find(function (d) { return d.id === id; });\n  }\n\n  function coordById(ds, id) {\n    return (ds.coordinators || []).find(function (c) { return c.id === id; });\n  }\n\n  function guideFor(ds, kind, coordId) {\n    return (ds.guides || []).find(function (g) {\n      if (g.kind !== kind) return false;\n      if (kind === 'setup') return g.coordinator_id === coordId;\n      return true;\n    }) || null;\n  }\n\n  function recommend(ds, answers) {\n    var rule = findRule(ds, answers.goal, answers.amount);\n    var threshold = rule.threshold;\n    var signerCount = rule.signer_count;\n    var thresholdNote = null;\n    if (answers.comfort === 'beginner') { if (rule.beginner_threshold) {\n      threshold = rule.beginner_threshold;\n      signerCount = thresholdCount(threshold);\n      thresholdNote = 'Kept at ' + threshold + ' because a setup a beginner cannot operate is worse than a simpler one.';\n    } }\n\n    var tiers = budgetTiers(answers.budget);\n    var pool = (ds.devices || []).filter(function (d) { return tiers.indexOf(d.price_tier) !== -1; });\n    var ownedIds = answers.devices || [];\n    ownedIds.forEach(function (id) {\n      if (!pool.some(function (d) { return d.id === id; })) {\n        var d = deviceById(ds, id);\n        if (d) pool.push(d);\n      }\n    });\n\n    var coordPrefs = {\n      beginner: ['nunchuk', 'bluewallet', 'sparrow', 'electrum'],\n      comfortable: ['sparrow', 'nunchuk', 'electrum', 'bluewallet'],\n      advanced: ['sparrow', 'electrum', 'nunchuk', 'bluewallet']\n    }[answers.comfort] || ['sparrow', 'nunchuk', 'electrum', 'bluewallet'];\n\n    function preliminarySigners() {\n      var sorted = pool.slice().sort(function (a, b) {\n        var ao = ownedIds.indexOf(a.id) !== -1 ? 0 : 1;\n        var bo = ownedIds.indexOf(b.id) !== -1 ? 0 : 1;\n        if (ao !== bo) return ao - bo;\n        return a.id < b.id ? -1 : 1;\n      });\n      return sorted.slice(0, signerCount);\n    }\n\n    var prelim = preliminarySigners();\n    var coordinator = null;\n    var bestScore = -Infinity;\n    coordPrefs.forEach(function (cid, prefIndex) {\n      var score = 0;\n      prelim.forEach(function (d) {\n        var rec = pairRecord(ds, d.id, cid);\n        score += rec ? statusScore(rec.status) : -100;\n      });\n      \/* Comfort fit matters: the first preference gets a strong bonus so a\n         beginner is not pushed onto a power tool over a small source gap.\n         A coordinator with missing records still cannot win (-100 each). *\/\n      var skillFit = prefIndex === 0 ? 4 : 0;\n      if (score + skillFit > bestScore) {\n        bestScore = score + skillFit;\n        coordinator = coordById(ds, cid);\n      }\n    });\n\n    if (!coordinator) return { error: 'no-coordinator' };\n\n    var signers = pool.slice().sort(function (a, b) {\n      var ao = ownedIds.indexOf(a.id) !== -1 ? 0 : 1;\n      var bo = ownedIds.indexOf(b.id) !== -1 ? 0 : 1;\n      if (ao !== bo) return ao - bo;\n      var ra = pairRecord(ds, a.id, coordinator.id);\n      var rb = pairRecord(ds, b.id, coordinator.id);\n      var sa = ra ? statusScore(ra.status) : -100;\n      var sb = rb ? statusScore(rb.status) : -100;\n      if (sa !== sb) return sb - sa;\n      var aa = a.airgapped_option && answers.goal !== 'learning' ? 0 : 1;\n      var ab = b.airgapped_option && answers.goal !== 'learning' ? 0 : 1;\n      if (aa !== ab) return aa - ab;\n      var tierRank = { low: 0, mid: 1, high: 2 };\n      var ta = tierRank[a.price_tier], tb = tierRank[b.price_tier];\n      if (ta !== tb) return ta - tb;\n      return a.id < b.id ? -1 : 1;\n    }).slice(0, signerCount);\n\n    if (signers.length < signerCount) {\n      return { error: 'not-enough-devices', coordinator: coordinator, signers: signers };\n    }\n\n    var pairs = signers.map(function (d) { return pairRecord(ds, d.id, coordinator.id); });\n    var worst = 'Confirmed';\n    pairs.forEach(function (p) {\n      if (!p || STATUS_ORDER[p.status] < STATUS_ORDER[worst]) worst = p ? p.status : 'Unverified';\n    });\n\n    return {\n      rule: rule,\n      threshold: threshold,\n      signerCount: signerCount,\n      thresholdNote: thresholdNote,\n      coordinator: coordinator,\n      signers: signers,\n      pairs: pairs,\n      overallStatus: worst,\n      ownedUsed: signers.filter(function (d) { return ownedIds.indexOf(d.id) !== -1; })\n    };\n  }\n\n  \/* ------------------------------------------------------------------ *\/\n  \/* Copy builders for the five result blocks                            *\/\n  \/* ------------------------------------------------------------------ *\/\n\n  var GOAL_LABEL = { savings: 'long-term savings', inheritance: 'inheritance planning', treasury: 'business treasury', learning: 'learning multisig' };\n  var COMFORT_LABEL = { beginner: 'beginner', comfortable: 'comfortable', advanced: 'advanced' };\n\n  function whyParagraph(rec, answers) {\n    var names = rec.signers.map(function (d) { return d.name; });\n    var coord = rec.coordinator.name;\n    var bits = [];\n    bits.push('A ' + rec.threshold + ' quorum fits ' + (GOAL_LABEL[answers.goal] || answers.goal) + ': ' + rec.rule.rationale);\n    if (rec.ownedUsed.length) {\n      bits.push('It reuses your ' + rec.ownedUsed.map(function (d) { return d.name; }).join(' and ') + ', so you buy less new hardware.');\n    }\n    var vendors = {};\n    rec.signers.forEach(function (d) { vendors[d.vendor] = true; });\n    bits.push('The signers come from ' + Object.keys(vendors).length + ' different vendors (' + names.join(', ') + '), so one vendor bug cannot take the quorum down.');\n    bits.push(coord + ' matches a ' + (COMFORT_LABEL[answers.comfort] || answers.comfort) + ' workflow, and every signer pair is labeled with its real compatibility status below.');\n    if (rec.thresholdNote) bits.push(rec.thresholdNote);\n    return bits.join(' ');\n  }\n\n  function recoveryModel(rec, answers, ds) {\n    var m = thresholdM(rec.threshold);\n    var items = [];\n    items.push('Quorum: any ' + m + ' of the ' + rec.signerCount + ' signers can move funds. Losing ' + (rec.signerCount - m) + ' signer' + (rec.signerCount - m === 1 ? '' : 's') + ' does not lock you out; losing ' + (m + 1) + ' does.');\n    items.push('Back up every signer seed (ideally stamped on steel, not paper) AND the wallet descriptor or config file. Seeds alone are not enough for a smooth multisig restore; the descriptor tells any coordinator which keys belong together.');\n    if (answers.geo === 'yes') {\n      items.push('Geography: you confirmed two or more locations. Keep each seed backup in a different location, and keep a copy of the descriptor with each seed backup.');\n    } else if (answers.geo === 'no') {\n      items.push('Geography: you only have one realistic location. This is the weakest part of the plan. A fire or burglary could take every backup at once. Fix this before moving serious funds: a bank box or a trusted person in another city.');\n    } else {\n      items.push('Geography: you are unsure about separate locations. Decide this before funding: one location for all backups is a single point of failure.');\n    }\n    if (answers.goal === 'inheritance') {\n      items.push('Inheritance: write plain-language instructions your heirs can follow without you, including where each backup lives and who to call. Review them yearly. Bitcoin-specific legal advice is worth paying for here.');\n    }\n    if (answers.goal === 'treasury') {\n      items.push('Treasury: document who holds each signer, how signing is authorized internally, and what happens when someone leaves. Test the handover, not just the setup.');\n    }\n    items.push('Test procedure: fund the wallet with a small amount first. Receive, then sign and send a small transaction with the full quorum. Then practice a full restore from backups before trusting it with real money.');\n    return items;\n  }\n\n  function tradeoffs(rec, answers) {\n    var items = [];\n    var tierNames = { low: 'budget', mid: 'mid-range', high: 'premium' };\n    var tiers = rec.signers.map(function (d) { return tierNames[d.price_tier]; });\n    items.push('Cost: ' + rec.signers.map(function (d) { return d.name + ' (' + tierNames[d.price_tier] + ')'; }).join(', ') + '. Prices move; check the vendor before buying.');\n    var usbOnly = rec.signers.filter(function (d) { return !d.airgapped_option; }).length;\n    if (usbOnly === rec.signers.length) {\n      items.push('All signers connect over USB, so every signing session touches an online computer. Malware cannot steal keys from the devices, but verify addresses on each device screen.');\n    } else if (usbOnly > 0) {\n      items.push('Mixed transports: some signers are air-gapped (QR or SD), some use USB. This is deliberate: one compromised transport cannot reach every key.');\n    } else {\n      items.push('All signers are air-gapped (QR or SD card). Stronger isolation, slower signing sessions. Keep spare SD cards and good lighting for QR scans.');\n    }\n    if (rec.overallStatus === 'Unverified') {\n      items.push('At least one signer pair is Unverified: community or vendor sources exist, but NeverLoseBitcoin has not tested it hands-on. Treat the first setup as a trial run.');\n    } else {\n      items.push('Pair statuses are Conditional: each works with the named transport or limitation. Read the constraints before buying.');\n    }\n    items.push('What this does not protect against: coercion, all backup locations failing at once, or a coordinator bug showing you a wrong address. Always verify receive addresses on the hardware device screens.');\n    if (answers.goal === 'learning') {\n      items.push('Learning setup: fine for practice amounts. Revisit the wizard before protecting real savings.');\n    }\n    return items;\n  }\n\n  \/* ------------------------------------------------------------------ *\/\n  \/* Rendering                                                           *\/\n  \/* ------------------------------------------------------------------ *\/\n\n  function Wizard(root, ds) {\n    this.root = root;\n    this.ds = ds;\n    var fromFrag = parseFragment();\n    this.answers = fromFrag ? fromFrag.answers : defaultAnswers();\n    this.step = fromFrag && fromFrag.step <= STEPS.length ? fromFrag.step : 0;\n    this.render();\n    this.attachPasteGuard();\n  }\n\n  Wizard.prototype.persist = function () {\n    try {\n      history.replaceState(null, '', serialize(this.answers, this.step));\n    } catch (e) { \/* non-fatal *\/ }\n  };\n\n  Wizard.prototype.announce = function (msg) {\n    var live = this.root.querySelector('[data-live]');\n    if (live) {\n      live.textContent = '';\n      window.setTimeout(function () { live.textContent = msg; }, 30);\n    }\n  };\n\n  Wizard.prototype.track = function (eventName, detail) {\n    try {\n      var ev = new CustomEvent('nlb-wizard', { detail: Object.assign({ event: eventName }, detail || {}) });\n      document.dispatchEvent(ev);\n    } catch (e) { \/* non-fatal *\/ }\n  };\n\n  Wizard.prototype.render = function () {\n    var root = this.root;\n    root.innerHTML = '';\n    root.setAttribute('data-step', String(this.step));\n    var live = el('p', { 'class': 'nlb-wiz-live', 'data-live': '', 'aria-live': 'polite', 'role': 'status' });\n    live.style.cssText = 'position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);';\n    root.appendChild(live);\n    if (this.step < STEPS.length) {\n      this.renderStep(root);\n    } else {\n      this.renderResult(root);\n    }\n    this.persist();\n  };\n\n  Wizard.prototype.progressBar = function () {\n    var wrap = el('div', { 'class': 'nlb-wiz-progress', role: 'progressbar', 'aria-valuemin': '0', 'aria-valuemax': String(STEPS.length), 'aria-valuenow': String(Math.min(this.step + 1, STEPS.length)), 'aria-label': 'Wizard progress' });\n    var label = el('p', { 'class': 'nlb-wiz-progress-label' }, 'Step ' + Math.min(this.step + 1, STEPS.length) + ' of ' + STEPS.length);\n    wrap.appendChild(label);\n    return wrap;\n  };\n\n  Wizard.prototype.renderStep = function (root) {\n    var self = this;\n    var def = STEPS[this.step];\n    root.appendChild(this.progressBar());\n    var form = el('form', { 'class': 'nlb-wiz-form', novalidate: '' });\n    var fieldset = el('fieldset', { 'class': 'nlb-wiz-fieldset' });\n    var legend = el('legend', { 'class': 'nlb-wiz-question' }, def.question);\n    fieldset.appendChild(legend);\n    if (def.help) fieldset.appendChild(el('p', { 'class': 'nlb-wiz-help' }, def.help));\n    var error = el('p', { 'class': 'nlb-wiz-error', role: 'alert', hidden: '' });\n    fieldset.appendChild(error);\n    var options = def.options;\n    if (def.id === 'devices') {\n      options = this.ds.devices.map(function (d) {\n        return { value: d.id, label: d.name, desc: d.vendor + '. ' + d.notes };\n      });\n    }\n    var inputName = 'nlb-wiz-' + def.id;\n    options.forEach(function (opt, i) {\n      var id = inputName + '-' + i;\n      var wrap = el('div', { 'class': 'nlb-wiz-option' });\n      var input = el('input', {\n        type: def.type === 'checkbox' ? 'checkbox' : 'radio',\n        id: id,\n        name: inputName,\n        value: opt.value,\n        'class': 'nlb-wiz-input'\n      });\n      if (def.type === 'checkbox') {\n        if (self.answers.devices.indexOf(opt.value) !== -1) input.checked = true;\n      } else if (self.answers[def.id] === opt.value) {\n        input.checked = true;\n      }\n      var label = el('label', { 'for': id, 'class': 'nlb-wiz-label' });\n      label.appendChild(el('span', { 'class': 'nlb-wiz-label-text' }, opt.label));\n      if (opt.desc) label.appendChild(el('span', { 'class': 'nlb-wiz-label-desc' }, opt.desc));\n      wrap.appendChild(input);\n      wrap.appendChild(label);\n      fieldset.appendChild(wrap);\n    });\n    form.appendChild(fieldset);\n    var nav = el('div', { 'class': 'nlb-wiz-nav' });\n    if (this.step > 0) {\n      var back = el('button', { type: 'button', 'class': 'nlb-wiz-btn nlb-wiz-btn-secondary' }, 'Back');\n      back.addEventListener('click', function () {\n        self.step -= 1;\n        self.render();\n        self.focusHeading();\n        self.announce('Step ' + (self.step + 1) + ' of ' + STEPS.length);\n      });\n      nav.appendChild(back);\n    }\n    var next = el('button', { type: 'submit', 'class': 'nlb-wiz-btn nlb-wiz-btn-primary' },\n      this.step === STEPS.length - 1 ? 'See my setup' : 'Continue');\n    nav.appendChild(next);\n    var startOver = el('button', { type: 'button', 'class': 'nlb-wiz-btn nlb-wiz-btn-link' }, 'Start over');\n    startOver.addEventListener('click', function () {\n      self.answers = defaultAnswers();\n      self.step = 0;\n      self.render();\n      self.focusHeading();\n      self.announce('Wizard restarted. Step 1 of ' + STEPS.length);\n    });\n    nav.appendChild(startOver);\n    form.appendChild(nav);\n    form.addEventListener('submit', function (e) {\n      e.preventDefault();\n      var checked = Array.prototype.slice.call(form.querySelectorAll('input:checked')).map(function (i) { return i.value; });\n      if (!def.optional && checked.length === 0) {\n        error.textContent = def.type === 'checkbox' ? 'Select at least one option to continue.' : 'Choose an option to continue.';\n        error.hidden = false;\n        var first = form.querySelector('input');\n        if (first) first.focus();\n        return;\n      }\n      if (def.id === 'devices') self.answers.devices = checked;\n      else self.answers[def.id] = checked[0] || null;\n      self.step += 1;\n      self.render();\n      self.focusHeading();\n      if (self.step < STEPS.length) self.announce('Step ' + (self.step + 1) + ' of ' + STEPS.length);\n    });\n    root.appendChild(form);\n  };\n\n  Wizard.prototype.focusHeading = function () {\n    var h = this.root.querySelector('[data-focus-target]');\n    if (h) {\n      h.setAttribute('tabindex', '-1');\n      h.focus({ preventScroll: false });\n    } else {\n      var first = this.root.querySelector('input, button');\n      if (first) first.focus();\n    }\n  };\n\n  Wizard.prototype.renderResult = function (root) {\n    var self = this;\n    var ds = this.ds;\n    var rec = recommend(ds, this.answers);\n    root.appendChild(this.progressBar());\n    var article = el('article', { 'class': 'nlb-wiz-result', 'aria-labelledby': 'nlb-wiz-result-title' });\n    var title = el('h2', { id: 'nlb-wiz-result-title', 'data-focus-target': '' }, 'Your recommended setup');\n    article.appendChild(title);\n    if (rec.error) {\n      var msg = rec.error === 'no-coordinator'\n        ? 'The wizard could not find a coordinator that fits these answers. Try different answers or start over.'\n        : 'Your budget and device mix do not cover enough distinct signers for the recommended threshold. Widen the budget or remove owned-device filters, then try again.';\n      article.appendChild(el('p', { role: 'alert' }, msg));\n      article.appendChild(this.resultNav(true));\n      root.appendChild(article);\n      this.announce('No recommendation could be generated.');\n      return;\n    }\n\n    \/* Block 1: recommendation *\/\n    var s1 = el('section', { 'class': 'nlb-wiz-block', 'aria-label': 'Recommendation' });\n    s1.appendChild(el('h3', {}, '1. Recommendation'));\n    var sumLine = el('p', { 'class': 'nlb-wiz-rec-summary' },\n      rec.threshold + ' multisig: ' + rec.signers.map(function (d) { return d.name; }).join(' + ') + ' with ' + rec.coordinator.name + '.');\n    s1.appendChild(sumLine);\n    s1.appendChild(el('p', {}, whyParagraph(rec, this.answers)));\n    article.appendChild(s1);\n\n    \/* Block 2: compatibility status *\/\n    var s2 = el('section', { 'class': 'nlb-wiz-block', 'aria-label': 'Compatibility status' });\n    s2.appendChild(el('h3', {}, '2. Compatibility status'));\n    var defs = ds.meta.status_definitions || {};\n    var overall = el('p', {}, '');\n    var badge = el('strong', { 'class': 'nlb-wiz-status nlb-wiz-status-' + rec.overallStatus.toLowerCase() }, rec.overallStatus);\n    overall.appendChild(badge);\n    overall.appendChild(document.createTextNode(': ' + (defs[rec.overallStatus] || '')));\n    s2.appendChild(overall);\n    var list = el('ul', { 'class': 'nlb-wiz-pairs' });\n    rec.pairs.forEach(function (p, i) {\n      var d = rec.signers[i];\n      var li = el('li', {});\n      if (!p) {\n        li.appendChild(el('strong', {}, d.name + ' + ' + rec.coordinator.name + ': '));\n        li.appendChild(document.createTextNode('Unverified: no source record in the dataset.'));\n      } else {\n        li.appendChild(el('strong', {}, d.name + ' + ' + rec.coordinator.name + ': ' + p.status));\n        li.appendChild(document.createTextNode(' ' + p.workflow + '. Constraint: ' + p.constraints + ' '));\n        var a = el('a', { href: p.evidence_url, target: '_blank', rel: 'noopener noreferrer' }, 'Source');\n        li.appendChild(a);\n        if (!p.tested_date) {\n          li.appendChild(document.createTextNode(' (No hands-on test date; NeverLoseBitcoin has not tested this pair.)'));\n        }\n      }\n      list.appendChild(li);\n    });\n    s2.appendChild(list);\n    s2.appendChild(el('p', { 'class': 'nlb-wiz-help' }, 'Status definitions. Confirmed: ' + defs.Confirmed + ' Conditional: ' + defs.Conditional + ' Unverified: ' + defs.Unverified + ' Incompatible: ' + defs.Incompatible));\n    article.appendChild(s2);\n\n    \/* Block 3: recovery model *\/\n    var s3 = el('section', { 'class': 'nlb-wiz-block', 'aria-label': 'Recovery model' });\n    s3.appendChild(el('h3', {}, '3. Recovery model'));\n    var rul = el('ul', {});\n    recoveryModel(rec, this.answers, ds).forEach(function (t) { rul.appendChild(el('li', {}, t)); });\n    s3.appendChild(rul);\n    article.appendChild(s3);\n\n    \/* Block 4: tradeoffs *\/\n    var s4 = el('section', { 'class': 'nlb-wiz-block', 'aria-label': 'Tradeoffs' });\n    s4.appendChild(el('h3', {}, '4. Tradeoffs'));\n    var tul = el('ul', {});\n    tradeoffs(rec, this.answers).forEach(function (t) { tul.appendChild(el('li', {}, t)); });\n    s4.appendChild(tul);\n    article.appendChild(s4);\n\n    \/* Block 5: next steps (max one commercial CTA) *\/\n    var s5 = el('section', { 'class': 'nlb-wiz-block', 'aria-label': 'Next steps' });\n    s5.appendChild(el('h3', {}, '5. Next steps'));\n    var nul = el('ul', { 'class': 'nlb-wiz-next' });\n    function addLink(guide) {\n      if (!guide) return;\n      var li = el('li', {});\n      li.appendChild(el('a', { href: guide.url }, guide.title));\n      nul.appendChild(li);\n    }\n    addLink(guideFor(ds, 'setup', rec.coordinator.id));\n    addLink(guideFor(ds, 'recovery'));\n    addLink(guideFor(ds, 'comparison'));\n    addLink(guideFor(ds, 'methodology'));\n    var commercial = guideFor(ds, 'commercial');\n    if (commercial) {\n      var cli = el('li', { 'class': 'nlb-wiz-commercial' });\n      var ca = el('a', { href: commercial.url }, commercial.title);\n      cli.appendChild(ca);\n      cli.appendChild(document.createTextNode(' (paid)'));\n      nul.appendChild(cli);\n    }\n    s5.appendChild(nul);\n    article.appendChild(s5);\n\n    \/* Meta line *\/\n    var meta = el('p', { 'class': 'nlb-wiz-meta' });\n    meta.appendChild(document.createTextNode('Dataset version ' + esc(ds.meta.version) + '. Last verified ' + esc(ds.meta.last_verified) + '. '));\n    meta.appendChild(document.createTextNode('Covers 21 device-coordinator pairs. See the methodology section above for status definitions.'));\n    meta.appendChild(document.createTextNode('. Result states use URL fragments and are not indexed.'));\n    article.appendChild(meta);\n\n    article.appendChild(this.resultNav(false));\n    root.appendChild(article);\n\n    this.track('result_viewed', {\n      threshold: rec.threshold,\n      coordinator: rec.coordinator.id,\n      comfort: this.answers.comfort,\n      status: rec.overallStatus\n    });\n    this.announce('Your recommended setup is ready: ' + rec.threshold + ' multisig with ' + rec.coordinator.name + '.');\n  };\n\n  Wizard.prototype.resultNav = function (isError) {\n    var self = this;\n    var nav = el('div', { 'class': 'nlb-wiz-nav' });\n    var edit = el('button', { type: 'button', 'class': 'nlb-wiz-btn nlb-wiz-btn-secondary' }, 'Change answers');\n    edit.addEventListener('click', function () {\n      self.step = 0;\n      self.render();\n      self.focusHeading();\n      self.announce('Back to step 1 of ' + STEPS.length);\n    });\n    nav.appendChild(edit);\n    if (!isError) {\n      var print = el('button', { type: 'button', 'class': 'nlb-wiz-btn nlb-wiz-btn-secondary' }, 'Print result');\n      print.addEventListener('click', function () { window.print(); });\n      nav.appendChild(print);\n    }\n    var startOver = el('button', { type: 'button', 'class': 'nlb-wiz-btn nlb-wiz-btn-link' }, 'Start over');\n    startOver.addEventListener('click', function () {\n      self.answers = defaultAnswers();\n      self.step = 0;\n      self.render();\n      self.focusHeading();\n      self.announce('Wizard restarted. Step 1 of ' + STEPS.length);\n    });\n    nav.appendChild(startOver);\n    return nav;\n  };\n\n  \/* ------------------------------------------------------------------ *\/\n  \/* Seed-phrase paste guard: warn, never accept                         *\/\n  \/* ------------------------------------------------------------------ *\/\n\n  var BIP39_HINT = null;\n\n  function looksLikeSeed(text) {\n    if (!text) return false;\n    var words = text.trim().toLowerCase().split(\/[^a-z]+\/).filter(Boolean);\n    if (words.length === 12 || words.length === 15 || words.length === 18 || words.length === 21 || words.length === 24) {\n      var alpha = words.every(function (w) { return \/^[a-z]{3,8}$\/.test(w); });\n      if (alpha) return true;\n    }\n    return false;\n  }\n\n  Wizard.prototype.attachPasteGuard = function () {\n    var self = this;\n    this.root.addEventListener('paste', function (e) {\n      var text = '';\n      try {\n        text = (e.clipboardData || window.clipboardData).getData('text');\n      } catch (err) { \/* ignore *\/ }\n      if (looksLikeSeed(text)) {\n        e.preventDefault();\n        self.showSeedWarning();\n      }\n    });\n  };\n\n  Wizard.prototype.showSeedWarning = function () {\n    var old = this.root.querySelector('[data-seed-warning]');\n    if (old) old.remove();\n    var warn = el('div', {\n      'class': 'nlb-wiz-seed-warning',\n      'data-seed-warning': '',\n      role: 'alert',\n      tabindex: '-1'\n    });\n    warn.appendChild(el('strong', {}, 'That looks like a seed phrase. '));\n    warn.appendChild(document.createTextNode('Never enter seed words, private keys, xpubs, or addresses into this wizard or any website. The paste was blocked and nothing was stored.'));\n    this.root.insertBefore(warn, this.root.firstChild);\n    warn.focus();\n    this.announce('Warning: pasted text looked like a seed phrase. It was blocked and nothing was stored.');\n  };\n\n  \/* ------------------------------------------------------------------ *\/\n  \/* Minimal print + helper styles (scoped; needs Len approval as the    *\/\n  \/* site CSS exception before going live)                               *\/\n  \/* ------------------------------------------------------------------ *\/\n\n  function injectStyles() {\n    if (document.getElementById('nlb-wiz-styles')) return;\n    var css = [\n      '#' + ROOT_ID + ' .nlb-wiz-option{margin:.5rem 0;}',\n      '#' + ROOT_ID + ' .nlb-wiz-label{display:block;cursor:pointer;}',\n      '#' + ROOT_ID + ' .nlb-wiz-label-desc{display:block;font-size:.9em;opacity:.8;}',\n      '#' + ROOT_ID + ' .nlb-wiz-nav{margin-top:1rem;display:flex;gap:.75rem;flex-wrap:wrap;}',\n      '#' + ROOT_ID + ' .nlb-wiz-error{font-weight:bold;}',\n      '#' + ROOT_ID + ' .nlb-wiz-seed-warning{border:2px solid currentColor;padding:1rem;margin-bottom:1rem;}',\n      '#' + ROOT_ID + ' .nlb-wiz-block{margin:1.5rem 0;}',\n      '@media print{',\n      'body>*:not(#' + ROOT_ID + '-print-scope){display:none !important;}',\n      '}'\n    ].join('\\n');\n    var style = document.createElement('style');\n    style.id = 'nlb-wiz-styles';\n    style.textContent = css;\n    document.head.appendChild(style);\n  }\n\n  \/* ------------------------------------------------------------------ *\/\n  \/* Boot                                                              *\/\n  \/* ------------------------------------------------------------------ *\/\n\n  \/* Test\/QA hook: lets reviewers exercise the engine without a browser. *\/\n  window.NLBWizardEngine = {\n    recommend: recommend,\n    findRule: findRule,\n    pairRecord: pairRecord,\n    steps: STEPS,\n    serialize: serialize,\n    defaultAnswers: defaultAnswers\n  };\n\n  function boot() {\n    var root = document.getElementById(ROOT_ID);\n    if (!root) return;\n    injectStyles();\n    loadDataset()\n      .then(function (ds) {\n        new Wizard(root, ds);\n      })\n      .catch(function () {\n        root.innerHTML = '';\n        var p = el('p', { role: 'alert' }, 'The wizard could not load its compatibility dataset. Please reload the page. If the problem continues, the dataset file may be missing from the page.');\n        root.appendChild(p);\n      });\n  }\n\n  if (document.readyState === 'loading') {\n    document.addEventListener('DOMContentLoaded', boot);\n  } else {\n    boot();\n  }\n})();\n\n<\/script>\n\n\n\n<script>\n\/* Wizard patch 1.1.0 (2026-09-30): Coldcard-last device order, add Bitkey, dataset version 1.1.0, corrected print selector. Executes synchronously before the wizard boots. *\/\n(function () {\n  var ds = window.NLB_WIZARD_DATASET;\n  if (ds && ds.devices) {\n    var bitkey = {\"airgapped_option\":false,\"id\":\"bitkey\",\"multisig\":false,\"name\":\"Bitkey\",\"notes\":\"Beginner-friendly mobile-first hardware wallet from Block. About $250. No real multisig support: it cannot serve as a multisig signer.\",\"price_tier\":\"mid\",\"transports\":[\"nfc\"],\"url\":\"https:\/\/bitkey.build\",\"vendor\":\"Block\"};\n    var rest = [], coldcard = null, i, d, seen = {};\n    for (i = 0; i < ds.devices.length; i++) {\n      d = ds.devices[i];\n      if (d.id === 'coldcard') { coldcard = d; }\n      else if (!seen[d.id]) { seen[d.id] = true; rest.push(d); }\n    }\n    if (!seen['bitkey']) { rest.push(bitkey); }\n    if (coldcard) { rest.push(coldcard); }\n    ds.devices = rest;\n    if (ds.meta) { ds.meta.version = '1.1.0'; }\n  }\n  \/* Pre-inject the wizard scoped styles with the corrected print selector\n     (body>*:not(#nlb-wizard)) so the buggy -print-scope rule is never added. *\/\n  if (!document.getElementById('nlb-wiz-styles')) {\n    var css = [\n      '#nlb-wizard .nlb-wiz-option{margin:.5rem 0;}',\n      '#nlb-wizard .nlb-wiz-label{display:block;cursor:pointer;}',\n      '#nlb-wizard .nlb-wiz-label-desc{display:block;font-size:.9em;opacity:.8;}',\n      '#nlb-wizard .nlb-wiz-nav{margin-top:1rem;display:flex;gap:.75rem;flex-wrap:wrap;}',\n      '#nlb-wizard .nlb-wiz-error{font-weight:bold;}',\n      '#nlb-wizard .nlb-wiz-seed-warning{border:2px solid currentColor;padding:1rem;margin-bottom:1rem;}',\n      '#nlb-wizard .nlb-wiz-block{margin:1.5rem 0;}',\n      '@media print{',\n      'body>*:not(#nlb-wizard){display:none !important;}',\n      '}'\n    ].join('\\n');\n    var st = document.createElement('style');\n    st.id = 'nlb-wiz-styles';\n    st.textContent = css;\n    document.head.appendChild(st);\n  }\n})();\n<\/script>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Disclaimer: <\/strong>The wizard is not a wallet or wallet recommendation. It never touches keys, and it never asks for anything sensitive: no seed phrases, no private keys, no xpubs, no addresses, no balances, no serial numbers, no identity. Not investment, tax, or financial advice. Consult a qualified professional.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Privacy:<\/strong> Answers stay categorical and local to your browser. If you paste something that looks like a seed phrase, the wizard blocks it and warns you. Results are shareable through the page address without creating indexable pages: your answers live in the URL fragment, which search engines ignore. If you have questions, please inquire via our <a href=\"https:\/\/neverlosebitcoin.com\/contact\">contact page.<\/a><\/p>\n\n\n\n<h2 id=\"methodology\" class=\"wp-block-heading\">Methodology summary<\/h2>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Threshold first.<\/strong> Your goal and amount band map to a quorum through published use-case rules. Most setups land on 2-of-3. Larger inheritances and treasuries (over $100k) move to 3-of-5, unless you are a beginner, in which case the wizard keeps 2-of-3 because a setup you cannot operate is worse than a simpler one.<\/li>\n<\/ol>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Devices second.<\/strong> Your budget filters the device pool into rough tiers. Devices you already own are reused first, even above your budget tier, since you already paid for them. The wizard prefers signers from different vendors and favors mixing air-gapped (QR or SD card) with USB signers, so one transport problem cannot reach every key.<\/li>\n<\/ol>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Coordinator third.<\/strong> Your comfort level sets the preference order: beginners get mobile-first guided apps like Nunchuk, comfortable users get Sparrow, advanced users get Sparrow or Electrum. The wizard then scores each coordinator against your signer shortlist using the compatibility dataset and picks the best fit.<\/li>\n<\/ol>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Honest labels. Every pair is labeled Confirmed, Conditional, Unverified, or Incompatible, with the definition shown next to the label. Confirmed requires a real hands-on test of the named workflow and versions. Conditional means it works only with a named transport, firmware, or limitation. Unverified means vendor or community sources exist but NeverLoseBitcoin has not tested it yet. The current seed dataset contains zero Confirmed records: that is deliberate, and the result screen says so.<\/li>\n<\/ol>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Versioned dataset. The compatibility data is a versioned JSON file with a visible last-verified date. A compatibility change only ships with a source, named device, firmware, coordinator, OS, and transport, plus a review of the result wording and linked guides.<\/li>\n<\/ol>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>What the wizard does not do.<\/strong> It does not rank shops, it does not take affiliate input into the recommendation, and commerce appears at most once per result as a clearly marked next step.<\/li>\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\">Example result<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Answers: long-term savings, $10k to $100k, comfortable, $100 to $200 budget, no devices owned yet, backups in two or more locations: yes.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>1. Recommendation.<\/strong> 2-of-3 multisig: Blockstream Jade + SeedSigner + Coldcard, coordinated with Sparrow. A 2-of-3 quorum fits long-term savings: it removes the single point of failure without adding meaningful complexity. The signers come from 3 different vendors, so one vendor bug cannot take the quorum down. Sparrow matches a comfortable desktop workflow, and every signer pair is labeled with its real compatibility status below. Two signers are air-gapped (QR), one uses USB, so one transport problem cannot reach every key.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>2. Compatibility status.<\/strong> Conditional: works only with a named transport, firmware, setting, or limitation.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Blockstream Jade + Sparrow: Conditional. USB connection or QR air-gapped PSBT multisig. Constraint: Sparrow documents Jade as a connected USB wallet; Jade also supports QR air-gapped flows. (Source link. No hands-on test date; NeverLoseBitcoin has not tested this pair.)<\/li>\n\n\n\n<li>SeedSigner + Sparrow: Conditional. Air-gapped QR: import multisig XPUBs into Sparrow, sign PSBTs via animated QR. Constraint: SeedSigner is stateless and rebuilds from seed every boot. (Source link. No hands-on test date.)<\/li>\n\n\n\n<li>Coldcard + Sparrow: Conditional. USB connection, or air-gapped SD card \/ QR (BBQr on Coldcard Q), multisig PSBT signing. Constraint: Coldcard docs list Sparrow on Windows, macOS, Linux with BBQr on Coldcard Q; Sparrow docs require current Coldcard firmware for USB. (Source link. No hands-on test date.)<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>3. Recovery model.<\/strong> Any 2 of the 3 signers can move funds. Losing 1 signer does not lock you out; losing 3 does. Back up every signer seed (stamped on steel, not paper) AND the wallet descriptor or config file: seeds alone are not enough for a smooth multisig restore. Keep each seed backup in a different location, with a copy of the descriptor alongside each. Test procedure: fund with a small amount first, receive, then sign and send a small transaction with the full quorum. Practice a full restore from backups before trusting it with real money.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>4. Tradeoffs.<\/strong> Cost: Blockstream Jade (budget), SeedSigner (budget, DIY parts), Coldcard (mid-range). Prices move; check the vendor before buying. Mixed transports: two air-gapped signers plus one USB signer. Pair statuses are Conditional: each works with the named transport or limitation, so read the constraints before buying. What this does not protect against: coercion, all backup locations failing at once, or a coordinator bug showing a wrong address. Always verify receive addresses on the hardware device screens.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>5. Next steps.<\/strong> Sparrow multisig setup guide. Multisig recovery basics: descriptors, backups, and test restores. Hardware wallet comparison for multisig. How the wizard picks a setup (methodology). Multisig setup checklist, printable template (paid).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Dataset version 1.0.0. Last verified 2026-09-25. Covers 21 device-coordinator pairs; see the methodology section above for status definitions. Result states use URL fragments and are not indexed.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">FAQ<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Is this financial advice?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">No. It is an educational decision aid. It recommends a category of setup and explains the tradeoffs; it does not tell you what to buy or when. Do your own research and consider professional advice for large amounts.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Does the wizard store or send my answers?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">No. Answers stay in your browser as categories (for example &#8220;beginner&#8221;, &#8220;$10k to $100k&#8221;). Nothing is sent to a server beyond normal anonymous page analytics, and the site stores no identity alongside the result.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Why are there no &#8220;Confirmed&#8221; compatibility records?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Because NeverLoseBitcoin has not completed its own hands-on test of any pair yet. Vendor and community sources are labeled Conditional or Unverified, exactly as the status definitions say. Records get promoted to Confirmed only through the publishing gate: a real test of the named workflow and versions, with the source linked.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Can I share my result with someone?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Yes. Your answers are encoded in the page address after the # symbol, so you can copy the URL and send it. Fragments are not indexed by search engines and contain no personal data.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">What if I own a device that is not in the list?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">The device list is the seed dataset, not the whole market. The wizard only recommends from devices with source records. If your device is missing, the honest answer is that the wizard cannot vouch for it yet. Suggest it for the next dataset round. For help choosing devices, see our guide to the <a href=\"https:\/\/neverlosebitcoin.com\/best-bitcoin-wallet\/\">best bitcoin wallet<\/a>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">How accurate are the budget tiers?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Rough. Hardware prices move with sales, bundles, and new models. Tiers exist to filter sensibly, not to quote prices. Always check the vendor before buying.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Does it work on mobile?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Yes. The flow is mobile-first, keyboard navigable, and screen reader announced (&#8220;Step 3 of 6&#8221;, announced results). If the script fails to load, the page still shows the explanatory content and a notice instead of a broken tool.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Can I print my result?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Yes, the result screen has a print button. Print the recovery model section and store it with your backups (never print seeds; the wizard never had them).<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Why only one recommended setup instead of a comparison?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">One clear recommendation beats three confusing ones for the people this tool serves. Side-by-side comparison is on the roadmap after the MVP proves useful.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Who do I contact about a wrong compatibility record?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Every pair links its source. If you have a better source or a correction, send it with the device, firmware, coordinator, OS, transport, and what you tested. Corrections go through the same publishing gate as new records.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Frequently asked questions<\/h2>\n\n\n<style>.kt-accordion-id1501_a45587-27 .kt-accordion-inner-wrap{column-gap:var(--global-kb-gap-md, 2rem);row-gap:8px;}.kt-accordion-id1501_a45587-27 .kt-accordion-panel-inner{padding-top:var(--global-kb-spacing-sm, 1.5rem);padding-right:var(--global-kb-spacing-sm, 1.5rem);padding-bottom:var(--global-kb-spacing-sm, 1.5rem);padding-left:var(--global-kb-spacing-sm, 1.5rem);}.kt-accordion-id1501_a45587-27 > .kt-accordion-inner-wrap > .wp-block-kadence-pane > .kt-accordion-header-wrap > .kt-blocks-accordion-header{color:var(--global-palette4, #2D3748);padding-top:var(--global-kb-spacing-xxs, 0.5rem);padding-right:var(--global-kb-spacing-xs, 1rem);padding-bottom:var(--global-kb-spacing-xxs, 0.5rem);padding-left:var(--global-kb-spacing-xs, 1rem);}.kt-accordion-id1501_a45587-27:not( .kt-accodion-icon-style-basiccircle ):not( .kt-accodion-icon-style-xclosecircle ):not( .kt-accodion-icon-style-arrowcircle )  > .kt-accordion-inner-wrap > .wp-block-kadence-pane > .kt-accordion-header-wrap .kt-blocks-accordion-icon-trigger:after, .kt-accordion-id1501_a45587-27:not( .kt-accodion-icon-style-basiccircle ):not( .kt-accodion-icon-style-xclosecircle ):not( .kt-accodion-icon-style-arrowcircle )  > .kt-accordion-inner-wrap > .wp-block-kadence-pane > .kt-accordion-header-wrap .kt-blocks-accordion-icon-trigger:before{background:var(--global-palette4, #2D3748);}.kt-accordion-id1501_a45587-27:not( .kt-accodion-icon-style-basic ):not( .kt-accodion-icon-style-xclose ):not( .kt-accodion-icon-style-arrow ) .kt-blocks-accordion-icon-trigger{background:var(--global-palette4, #2D3748);}.kt-accordion-id1501_a45587-27 > .kt-accordion-inner-wrap > .wp-block-kadence-pane > .kt-accordion-header-wrap > .kt-blocks-accordion-header:hover, \n\t\t\t\tbody:not(.hide-focus-outline) .kt-accordion-id1501_a45587-27 .kt-blocks-accordion-header:focus-visible{color:var(--global-palette4, #2D3748);}.kt-accordion-id1501_a45587-27:not( .kt-accodion-icon-style-basiccircle ):not( .kt-accodion-icon-style-xclosecircle ):not( .kt-accodion-icon-style-arrowcircle ) .kt-accordion-header-wrap .kt-blocks-accordion-header:hover .kt-blocks-accordion-icon-trigger:after, .kt-accordion-id1501_a45587-27:not( .kt-accodion-icon-style-basiccircle ):not( .kt-accodion-icon-style-xclosecircle ):not( .kt-accodion-icon-style-arrowcircle ) .kt-accordion-header-wrap .kt-blocks-accordion-header:hover .kt-blocks-accordion-icon-trigger:before, body:not(.hide-focus-outline) .kt-accordion-id1501_a45587-27:not( .kt-accodion-icon-style-basiccircle ):not( .kt-accodion-icon-style-xclosecircle ):not( .kt-accodion-icon-style-arrowcircle ) .kt-blocks-accordion--visible .kt-blocks-accordion-icon-trigger:after, body:not(.hide-focus-outline) .kt-accordion-id1501_a45587-27:not( .kt-accodion-icon-style-basiccircle ):not( .kt-accodion-icon-style-xclosecircle ):not( .kt-accodion-icon-style-arrowcircle ) .kt-blocks-accordion-header:focus-visible .kt-blocks-accordion-icon-trigger:before{background:var(--global-palette4, #2D3748);}.kt-accordion-id1501_a45587-27:not( .kt-accodion-icon-style-basic ):not( .kt-accodion-icon-style-xclose ):not( .kt-accodion-icon-style-arrow ) .kt-accordion-header-wrap .kt-blocks-accordion-header:hover .kt-blocks-accordion-icon-trigger, body:not(.hide-focus-outline) .kt-accordion-id1501_a45587-27:not( .kt-accodion-icon-style-basic ):not( .kt-accodion-icon-style-xclose ):not( .kt-accodion-icon-style-arrow ) .kt-accordion-header-wrap .kt-blocks-accordion-header:focus-visible .kt-blocks-accordion-icon-trigger{background:var(--global-palette4, #2D3748);}.kt-accordion-id1501_a45587-27 .kt-accordion-header-wrap .kt-blocks-accordion-header:focus-visible,\n\t\t\t\t.kt-accordion-id1501_a45587-27 > .kt-accordion-inner-wrap > .wp-block-kadence-pane > .kt-accordion-header-wrap > .kt-blocks-accordion-header.kt-accordion-panel-active{color:var(--global-palette4, #2D3748);}.kt-accordion-id1501_a45587-27:not( .kt-accodion-icon-style-basiccircle ):not( .kt-accodion-icon-style-xclosecircle ):not( .kt-accodion-icon-style-arrowcircle )  > .kt-accordion-inner-wrap > .wp-block-kadence-pane > .kt-accordion-header-wrap > .kt-blocks-accordion-header.kt-accordion-panel-active .kt-blocks-accordion-icon-trigger:after, .kt-accordion-id1501_a45587-27:not( .kt-accodion-icon-style-basiccircle ):not( .kt-accodion-icon-style-xclosecircle ):not( .kt-accodion-icon-style-arrowcircle )  > .kt-accordion-inner-wrap > .wp-block-kadence-pane > .kt-accordion-header-wrap > .kt-blocks-accordion-header.kt-accordion-panel-active .kt-blocks-accordion-icon-trigger:before{background:var(--global-palette4, #2D3748);}.kt-accordion-id1501_a45587-27:not( .kt-accodion-icon-style-basic ):not( .kt-accodion-icon-style-xclose ):not( .kt-accodion-icon-style-arrow ) .kt-blocks-accordion-header.kt-accordion-panel-active .kt-blocks-accordion-icon-trigger{background:var(--global-palette4, #2D3748);}@media all and (max-width: 767px){.kt-accordion-id1501_a45587-27 .kt-accordion-inner-wrap{display:block;}.kt-accordion-id1501_a45587-27 .kt-accordion-inner-wrap .kt-accordion-pane:not(:first-child){margin-top:8px;}}<\/style>\n<div class=\"wp-block-kadence-accordion alignnone\"><div class=\"kt-accordion-wrap kt-accordion-id1501_a45587-27 kt-accordion-has-5-panes kt-active-pane-0 kt-accordion-block kt-pane-header-alignment-left kt-accodion-icon-style-basic kt-accodion-icon-side-right\" style=\"max-width:none\"><div class=\"kt-accordion-inner-wrap\" data-allow-multiple-open=\"false\" data-start-open=\"0\">\n<div class=\"wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-1 kt-pane1501_9c37f0-be\"><div class=\"kt-accordion-header-wrap\"><button class=\"kt-blocks-accordion-header kt-acccordion-button-label-show\" type=\"button\"><span class=\"kt-blocks-accordion-title-wrap\"><span class=\"kt-blocks-accordion-title\">What is the multisig wizard?<\/span><\/span><span class=\"kt-blocks-accordion-icon-trigger\"><\/span><\/button><\/div><div class=\"kt-accordion-panel kt-accordion-panel-hidden\"><div class=\"kt-accordion-panel-inner\">\n<p class=\"wp-block-paragraph\">A short tool that asks six questions about your stack size, technical comfort, and threat model, then recommends a bitcoin multisig setup. It shows the suggested quorum, compatible devices and software, the recovery model, and the tradeoffs.<\/p>\n<\/div><\/div><\/div>\n\n\n\n<div class=\"wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-2 kt-pane1501_66bfb0-9b\"><div class=\"kt-accordion-header-wrap\"><button class=\"kt-blocks-accordion-header kt-acccordion-button-label-show\" type=\"button\"><span class=\"kt-blocks-accordion-title-wrap\"><span class=\"kt-blocks-accordion-title\">Is multisig safer than single-sig?<\/span><\/span><span class=\"kt-blocks-accordion-icon-trigger\"><\/span><\/button><\/div><div class=\"kt-accordion-panel kt-accordion-panel-hidden\"><div class=\"kt-accordion-panel-inner\">\n<p class=\"wp-block-paragraph\">For larger amounts, yes. Multisig removes single points of failure, so one lost or stolen key does not lose your funds. For smaller spending amounts, single-sig with a passphrase is simpler and usually enough.<\/p>\n<\/div><\/div><\/div>\n\n\n\n<div class=\"wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-3 kt-pane1501_ac747f-49\"><div class=\"kt-accordion-header-wrap\"><button class=\"kt-blocks-accordion-header kt-acccordion-button-label-show\" type=\"button\"><span class=\"kt-blocks-accordion-title-wrap\"><span class=\"kt-blocks-accordion-title\">What does 2-of-3 mean?<br><\/span><\/span><span class=\"kt-blocks-accordion-icon-trigger\"><\/span><\/button><\/div><div class=\"kt-accordion-panel kt-accordion-panel-hidden\"><div class=\"kt-accordion-panel-inner\">\n<p class=\"wp-block-paragraph\">Three keys exist and any two of them can authorize a spend. You can lose one key completely and still recover your bitcoin.<\/p>\n<\/div><\/div><\/div>\n\n\n\n<div class=\"wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-4 kt-pane1501_d152c4-26\"><div class=\"kt-accordion-header-wrap\"><button class=\"kt-blocks-accordion-header kt-acccordion-button-label-show\" type=\"button\"><span class=\"kt-blocks-accordion-title-wrap\"><span class=\"kt-blocks-accordion-title\">Besides seed phrases, what must I back up?<\/span><\/span><span class=\"kt-blocks-accordion-icon-trigger\"><\/span><\/button><\/div><div class=\"kt-accordion-panel kt-accordion-panel-hidden\"><div class=\"kt-accordion-panel-inner\">\n<p class=\"wp-block-paragraph\">The wallet descriptor: the file that lists every cosigner&#8217;s xpub and the wallet configuration. Seeds alone cannot recover a multisig wallet, so back up the descriptor digitally in more than one place.<\/p>\n<\/div><\/div><\/div>\n\n\n\n<div class=\"wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-5 kt-pane1501_526d65-e4\"><div class=\"kt-accordion-header-wrap\"><button class=\"kt-blocks-accordion-header kt-acccordion-button-label-show\" type=\"button\"><span class=\"kt-blocks-accordion-title-wrap\"><span class=\"kt-blocks-accordion-title\">Is the wizard financial advice?<\/span><\/span><span class=\"kt-blocks-accordion-icon-trigger\"><\/span><\/button><\/div><div class=\"kt-accordion-panel kt-accordion-panel-hidden\"><div class=\"kt-accordion-panel-inner\">\n<p class=\"wp-block-paragraph\">No. It is an educational tool to help you compare setups. How you store your bitcoin is your decision.<\/p>\n<\/div><\/div><\/div>\n<\/div><\/div><\/div>\n","protected":false},"excerpt":{"rendered":"<p>What this tool does The Multisig Compatibility Wizard recommends one recovery-capable multisig setup based on six short questions: your goal, your amount band, your technical comfort, your hardware budget, devices you already own, and whether you can store backups in more than one location. How it works: Each device and coordinator pair carries a compatibility&#8230;<\/p>","protected":false},"author":5,"featured_media":1918,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_kad_blocks_custom_css":"","_kad_blocks_head_custom_js":"","_kad_blocks_body_custom_js":"","_kad_blocks_footer_custom_js":"","_kadence_starter_templates_imported_post":false,"_kad_post_transparent":"","_kad_post_title":"","_kad_post_layout":"","_kad_post_sidebar_id":"","_kad_post_content_style":"","_kad_post_vertical_padding":"","_kad_post_feature":"","_kad_post_feature_position":"","_kad_post_header":false,"_kad_post_footer":false,"_kad_post_classname":"","footnotes":""},"class_list":["post-1501","page","type-page","status-publish","has-post-thumbnail","hentry"],"taxonomy_info":[],"featured_image_src_large":["https:\/\/neverlosebitcoin.com\/wp-content\/uploads\/2026\/09\/nlb-default-thumbnail-1024x576.webp",1024,576,true],"author_info":{"display_name":"WUMBOLOVER","author_link":"https:\/\/neverlosebitcoin.com\/de\/author\/wumbolover\/"},"comment_info":0,"_links":{"self":[{"href":"https:\/\/neverlosebitcoin.com\/de\/wp-json\/wp\/v2\/pages\/1501","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/neverlosebitcoin.com\/de\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/neverlosebitcoin.com\/de\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/neverlosebitcoin.com\/de\/wp-json\/wp\/v2\/users\/5"}],"replies":[{"embeddable":true,"href":"https:\/\/neverlosebitcoin.com\/de\/wp-json\/wp\/v2\/comments?post=1501"}],"version-history":[{"count":9,"href":"https:\/\/neverlosebitcoin.com\/de\/wp-json\/wp\/v2\/pages\/1501\/revisions"}],"predecessor-version":[{"id":1917,"href":"https:\/\/neverlosebitcoin.com\/de\/wp-json\/wp\/v2\/pages\/1501\/revisions\/1917"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/neverlosebitcoin.com\/de\/wp-json\/wp\/v2\/media\/1918"}],"wp:attachment":[{"href":"https:\/\/neverlosebitcoin.com\/de\/wp-json\/wp\/v2\/media?parent=1501"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}