a930c035c0
Two related improvements requested while testing the private fork: 1. Custom TCP/QUIC listen ports (SidecarConfig.tcpListenPort, .quicListenPort). With ephemeral ports, the daemon's peer-listen port changes at every restart, which makes port-forwarding on a home router useless after the first daemon stop. Pinning these keeps the same port across restarts so other private-network nodes can dial in reliably. Backend uses the configured port if Some, falls back to pick_port_skip otherwise. Frontend exposes two inputs in Settings → Daemon configuration with a help line explaining when to fill them. 2. Daemon-failure banner in App.vue. The previous behaviour was silent: a click on \"Start daemon\" that hit a backend error only flipped the sidebar dot to red, with no message visible. Now an inline banner at the top of the main content area shows the error, plus a \"Go to Settings\" shortcut when the message mentions a network config issue.