cc71ec191f
Closes #1433. Harvested from PR #1479 by @CrepuscularIRIS / autoghclaw, with two changes from the original PR: * `is_some_and` instead of `.map_or(false, |v| !v.is_empty())` — the latter trips `clippy::unnecessary_map_or` on Rust 1.94+ under `-D warnings`, which is what blocked the PR's Lint check in CI. is_some_and reads cleaner and ships the same behavior. * `non_vscode_term_program_does_not_force_low_motion` now clears SSH_CLIENT / SSH_TTY before iterating its negative-case fixtures so the suite still passes when run from a developer's actual SSH session. Detection logic mirrors the existing VS Code (#1356) and Ghostty (#1445) overrides: any of TERM_PROGRAM=Termius, SSH_CLIENT set, or SSH_TTY set unconditionally flips low_motion = true and fancy_animations = false. The 120 FPS cursor-repositioning that caused the cursor to cycle through input boxes over SSH is dropped to the 30 FPS cap the typewriter path already uses. Two new tests: termius_term_program_forces_low_motion_on and ssh_session_forces_low_motion_on. Both serialise through the existing term_program_test_guard / crate-wide test lock to avoid racing concurrent env-var-mutating tests in the suite.