Инбокс Tududi разгружен: четыре открытые задачи проекта оформлены файлами в docs/backlog и помечены выполненными в Tududi. - режиссёр в блоке «Распознано как» на странице загрузки (средний); - карточка информации о торренте вылезает за экран на мобильном (средний); - сигнал Jellyfin после отката и удаления файлов (средний); - кнопки выглядят как кнопки: btn-ghost и рассогласование весов (низкий). Каждая задача проверена по коду: все четыре актуальны, ни одну не закрыли прошлые коммиты. В телах — точки правки, развилки и нужные дельты спек. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
65 lines
4.5 KiB
Markdown
65 lines
4.5 KiB
Markdown
# Кнопки выглядят как кнопки: `btn-ghost` и рассогласование весов
|
||
|
||
**Приоритет:** низкий
|
||
|
||
Кнопка «Откатить» в списке загрузок неотличима от текста/ссылки. Это **не**
|
||
разметка — там уже `<button type="submit">` внутри `<form>`; проблема чисто
|
||
визуальная, в классе `btn-ghost`:
|
||
|
||
- `web/static/css/jellybit.css:165-166` — `.btn-ghost{background:transparent;
|
||
border-color:transparent;color:var(--text-dim)}`. Прозрачный фон + прозрачный
|
||
бордер + приглушённый текст = в покое нет аффорданса. Он появляется только на
|
||
`:hover`, а на тач-устройствах hover'а нет вообще.
|
||
|
||
## Инвентаризация
|
||
|
||
| Действие | Список (`card.html`) | Страница (`download_main.html`) |
|
||
|---|---|---|
|
||
| Ревью | `:28` `btn btn-primary btn-sm` | `:21` `btn btn-primary` |
|
||
| **Откатить** | `:29` **`btn btn-sm btn-ghost`** | `:23` **`btn btn-danger`** «↩ Откатить» |
|
||
| Привязать заново | `:30` `btn btn-sm` | `:24` `btn` |
|
||
| Повторить | `:31` `btn btn-sm` | `:25` `btn` |
|
||
| **Отменить/Отклонить** | `:32` **`btn btn-sm btn-danger`** | `:26` **`btn btn-ghost`** |
|
||
| Обновить имя | — | `:22` `btn btn-ghost` |
|
||
|
||
Расхождения:
|
||
|
||
1. `btn-ghost` — корень проблемы, 3 места: `card.html:29`,
|
||
`download_main.html:22`, `download_main.html:26`.
|
||
2. «Откатить» несогласован сам с собой: невидимая `btn-ghost` в списке против
|
||
красной `btn-danger` на странице.
|
||
3. «Отменить» инвертирован ровно наоборот: `btn-danger` в списке против
|
||
`btn-ghost` на странице. В списке Откатить тише Отменить, на странице — наоборот.
|
||
4. Эмодзи-префиксы несогласованы: `↩ Откатить` (страница) vs `Откатить` (список);
|
||
`review_main.html:76-78` — эмодзи на всех (`🕗/❌/✅`), `card.html` — ни одного.
|
||
5. Вероятно ок: `review_main.html:54,58`, `review_source_block.html:49`,
|
||
`index.html:32,65-67` (пагинация — ссылка-как-кнопка законно),
|
||
`download_main.html:112,124` (danger-zone).
|
||
6. `.copy-btn` (`card.html:9`, `download_main.html:15,90`) — отдельная система
|
||
классов (`jellybit.css:210-214`), не `.btn`. Формально вне скоупа, но при
|
||
унификации всплывёт.
|
||
|
||
База CSS — `jellybit.css:153-171`.
|
||
|
||
## Развилки
|
||
|
||
- **(а)** дать `.btn-ghost` видимый бордер/фон — одна строка, чинит все 3 места.
|
||
- **(б)** выкинуть `.btn-ghost` и назначить семантику явно: Откатить = `btn-danger`
|
||
везде, Отменить = `btn-danger` везде, Обновить имя = нейтральный `.btn`.
|
||
- **(в)** решить судьбу `↩` — оставляем или убираем.
|
||
|
||
Рекомендация — б+в: (а) чинит видимость, но оставляет пункты 2-4 (одно действие
|
||
имеет два разных визуальных веса на разных экранах).
|
||
|
||
**Подводный камень:** `.btn-ghost` портирован из макета (`tmp/design/index.html:109`
|
||
— тоже `btn btn-sm btn-ghost` для «Откатить», а `tmp/design/download.html:43` —
|
||
`btn btn-danger`). Макет сам непоследователен → либо чинить и `tmp/design/*`, либо
|
||
явно зафиксировать, что макет больше не источник истины (см. `tmp/design/handoff.md:96-97`).
|
||
|
||
## Спеки
|
||
|
||
`openspec/specs/web-ui/spec.md:249-264` («Действия соответствуют состоянию»)
|
||
описывает, какие действия показывать и имена полей форм; требований к визуальной
|
||
стилизации нет. «Откатить» упоминается только в htmx-сценариях (`:435`, `:444`).
|
||
→ чистый nit-фикс либо новая дельта, если хотим зафиксировать семантику весов.
|