feat(ui): dual-ecash wallet settings, buy-peer-files, seed backup, assorted fixes

- Tabbed Wallet Settings modal (Cashu + Fedimint) and dual-balance wallet card
- Buy a peer's paid file (ecash / node Lightning / on-chain / external QR)
- Recovery-phrase reveal + backup section; onboarding seed retry resilience
- NetBird HTTPS launch, remote-control two-finger scroll + external-open
- Shared BackButton, single-v version label, mesh Bitcoin header toggles

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
archipelago
2026-06-17 19:21:42 -04:00
co-authored by Claude Opus 4.8
parent bd567cd165
commit 87769cbfbf
46 changed files with 1527 additions and 283 deletions
@@ -11,7 +11,7 @@
<AnimatedLogo />
<div class="min-w-0 flex-1">
<h2 class="text-lg font-semibold text-white truncate">{{ serverName }}</h2>
<p class="text-xs text-white/60">v{{ version }}</p>
<p class="text-xs text-white/60">{{ $ver(version) }}</p>
</div>
</div>
@@ -91,6 +91,10 @@ export function useRouteTransitions() {
const wasFleet = previousPath === '/dashboard/fleet'
const isWeb5 = currentPath === '/dashboard/web5'
const wasWeb5 = previousPath === '/dashboard/web5'
// Any Web5 sub-detail (networking-profits, credentials, …) animates as a
// depth push from/back-to the Web5 tab — same feel as Find Nodes.
const isWeb5Detail = currentPath.startsWith('/dashboard/web5/')
const wasWeb5Detail = previousPath.startsWith('/dashboard/web5/')
let transitionName = 'fade'
@@ -146,6 +150,10 @@ export function useRouteTransitions() {
transitionName = 'depth-forward'
} else if (wasFleet && isWeb5) {
transitionName = 'depth-back'
} else if (wasWeb5 && isWeb5Detail) {
transitionName = 'depth-forward'
} else if (wasWeb5Detail && isWeb5) {
transitionName = 'depth-back'
} else if (wasMarketplaceList && isAppDetails) {
transitionName = 'depth-forward'
} else if (wasAppDetails && isMarketplaceList) {