Move ftpSrv.handleFTP() from Arduino loop() into a dedicated FreeRTOS
task pinned to core 0, leaving core 1 free for LVGL display updates.
FTP callbacks now only set volatile flags (ftp_ui_dirty, ftp_sd_dirty)
which the main loop polls to safely update UI and NeoPixel from core 1.
This eliminates the 20-second PASV data connection timeouts caused by
handleFTP() competing with display.update() for CPU time.
Also fix pre-existing BLACK constant build error in display_manager.cpp.