Cartthrob_authorize_net.php:charge (175-176) where the code treats anything that is not successful as a failure:
if (!$response->isSuccessful()) {
return $this->fail($response->getMessage());
}
CT does have the framework for a 'declined' response, but it looks like anything that isn't a success in authorize.net gets recorded as 'failed'. Which... is not necessarily a bug, but if we can catch a 'declined' it would be nice.