"via Manual" had nothing useful left to say once the "updated" part was dropped, so statusLine() now returns empty for Manual and both UIs skip rendering it entirely instead of showing a blank line/footer. onManualRateChanged also now clears manualSource.rate whenever the field doesn't parse (emptied, or mid-edit on an incomplete number) rather than only ever updating it on a successful parse. refresh()'s early-return for a null Manual rate now also clears the cached rates and pricedCurrencyCodes, so a cleared/incomplete manual rate stops fiat amounts from continuing to show a stale computed value. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01FXcrACM5sok3M1KQJ8kByy