Import page for a single CRM contact list — paste-text or file (CSV/TXT)
upload, a dry-run preview (no writes), then a chunked real run with
progress so a large file doesn't block the LiveView process for minutes,
finishing with the full ImportReport broken out by skip reason.
Phases (@phase): :input → :preview → :running → :done. :back
from :preview returns to :input; :restart from :done returns to
:input for another file.