## Context

Изменение презентационное и уже реализовано в коде (шаблоны, поиск, view-структуры).
Дизайн-документ здесь короткий и нужен лишь как зависимость для `tasks` и чтобы
зафиксировать одно продуктовое решение. Полноценного двухчекпоинтного ревью
задача не требует (тривиальная — достаточно прохода по коду).

## Goals / Non-Goals

**Goals:**
- Показывать и копировать в карточках `download.id` — тот же ключ, что в логах
  (`download_id`), чтобы «скопировал → нашёл в логах» работало без перекодировки.
- Поиск по списку — по любому идентификатору загрузки (`download.id` ИЛИ infohash).

**Non-Goals:**
- Не убираем infohash из UI совсем: он остаётся в блоке «Информация о торренте».
- Не меняем модель данных, API-DTO и формат логов.

## Decisions

- **Идентификатор карточки — `download.id`, не infohash.** В логах основной ключ
  связывания — `download_id` (см. `internal/worker/*`), поэтому именно его нужно
  копировать и грепать. Infohash второстепенен и уместен только в детальном блоке
  о торренте. Альтернатива (оставить infohash в шапке) отвергнута: заставляет
  пользователя вручную сопоставлять хэш с id при чтении логов.
- **Поиск матчит любой идентификатор.** В LIKE-условие `internal/store/list.go`
  добавлен `download.id` рядом с уже имевшимся infohash; название/контекст
  сохранены. Так скопированный из карточки id находится обратным поиском.
- **Чистка мёртвого кода.** Поля `Infohash`/`InfohashShort` во view-структурах и
  хелпер `shortenHash` стали не нужны — удалены, чтобы не копить неиспользуемое.

## Risks / Trade-offs

- [ULID менее узнаваем на глаз, чем hex-infohash] → показываем полностью (26
  символов помещаются в строку), рядом кнопка копирования; в детальном блоке
  infohash остаётся для тех, кому он нужен.
- [Проза `## Purpose` в live-спеке упоминает «копирование infohash»] → правится
  прямой правкой live-спеки при archive (Purpose не покрывается дельта-операциями).
