_sweeping/_scanning flags were never reset when workers finished, leaving the UI stuck in "Stopping..." forever. Both _do_sweep and _do_scan now use try/finally to always clear state and reset button styles. Firmware sweep checks the flag after the blocking serial call returns and discards results if Stop was pressed mid-execution.