| 2026-10-10 |

Теплокарта проекта, облако тегов, две колонки, иконка подвала (0.83)
...
- ProjectHeatmap.vue: своя карточка «Активность» в сайдбаре страницы
проекта — та же сетка «как в гитхабе», что в статистике, но по задачам
одного проекта: столбец — неделя, строка — день недели, заливка — по
числу закрытых за день (done_at), в подсказке клетки дата и оба числа
(«закрыто N, создано M»). Периодов два: «За месяц» (5 недель, по
умолчанию) и «За полгода» (26 недель). Запросов к серверу нет: страница
проекта и так держит все свои задачи, включая завершённые. В месячном
режиме ячейки 18px, в полугодовом 9px (26 недель — 284px, влезает в
сайдбар без прокрутки): пятью неделями мелкая сетка терялась бы в
широкой карточке. Легенда шкалы встаёт рядом с сеткой, а когда сетка во
всю ширину — переносится под неё.
- ProjectView: карточка «Теги» — облаком, а не списком: размер шрифта по
ранжиру частоты (0.85–1.2em, число задач — в подсказке), клик ставит тег
в фильтр (тот же поиск по подстроке), повторный клик снимает, активный
тег подсвечен; до 960px список подтягивается к верху экрана — там
сайдбар стоит ниже списка.
- ProjectView: карточки задач раскладываются по две в ряд (до 700px — одна
колонка, как и раньше).
- TaskCard: пункт меню «Переместить в проект» сокращён до «В другой
проект» — длинная надпись рвалась на две строки в китовом меню 220px.
- kit-overrides.css: в подвале карточки снята китовская поправка иконки
(.ph.normalize, top:.15em). Она рассчитана на иконку на общей базовой
линии с текстом, а строка подвала — флекс с align-items:center: коробка
иконки центрируется сама (у иконочного шрифта нет нижнего выноса), и
поправка складывалась с этим центрированием — глиф уезжал вниз на 1.3px
(замер по пикселям: центр глифа ниже центра цифры «2» в «2 недели
назад»). Без поправки низ глифа садится на базовую линию, как у буквы.
Правка самого кита заказана отдельной задачей (vertical-align вместо
position:relative; top — на флекс-элемент он не действует).
- ТЗ 0.83.
Co-Authored-By: Claude Code <noreply@anthropic.com>
root
committed
16 hours ago
|

Корешок у карточки проекта, «без активности», перенос задачи в проект (0.82)
...
- ProjectsView/ArchiveView: у карточки проекта левая грань 6px (китовый
--gn-border-width-accent, тот же шаг, что у полосы шапки страницы) и цвета
проекта — того же, что метка у имени и заливка прогресса; у проекта без
цвета грань берёт акцент кита. У карточки задачи рамка осталась ровной 2px:
по одной этой грани видно, что перед тобой папка с задачами, а не сама
задача. Тот же корешок у карточки проекта в архиве и у заготовок списков,
иначе при загрузке карточка дёрнула бы ширину содержимого. Наведение
подкрашивает рамку, но не корешок — цвет грани принадлежит проекту, а не
состоянию карточки.
- ProjectsView: у проекта без задач подвал больше не пустует — вместо
свежести стоит «без активности» (ключ projects.noActivity, три локали).
- kit-overrides.css: полоса прокрутки спрятана у всех табов — правило было
только у фильтра «Списка задач», и на странице проекта табы статуса
оставались с полосой. Прокрутка сохранена.
- TaskCard/TaskMoveDialog: в «⋯»-меню карточки задачи появились «Перейти к
проекту» (нет у задачи без проекта и на странице самого проекта) и
«Переместить в проект». Перенос — модалка с выбором проекта (GnModal +
GnSelect кита, первым пунктом «без проекта», текущий проект выбран по
умолчанию) → PATCH /api/tasks/{id} с project_id: XP и монеты за перенос не
начисляются, успех подтверждается тостом, а списки перечитываются по
событию moved (в «Выдаче» и на странице задачи подписки на task.changed
нет — без события карточка осталась бы в старом проекте).
- ТЗ 0.82.
Co-Authored-By: Claude Code <noreply@anthropic.com>
root
committed
16 hours ago
|
Подвал карточки проекта как у задачи, строка подвала по центру (0.81)
...
- ProjectsView: подвал карточки проекта переехал в китовый слот #footer —
раньше это была строка внутри содержимого, без черты; теперь подвал прижат
к низу карточки и отделён чертой во всю ширину, как в карточке задачи.
Скелетон списка повторяет ту же полосу.
- kit-overrides.css: полоса подвала стала общей для карточек задач и проектов
(правила были одни и те же в двух местах). Отступы выровнены: у кита 8px
сверху против 15px снизу — строка висела на 3.5px выше середины полосы;
пустой подвал (проект без задач и без срока) держит высоту строки, иначе
черта у соседей по ряду встала бы на разной высоте.
- ProjectsView: иконки свежести и срока — с китовым классом normalize (глиф
иконочного шрифта садился выше середины строки и читался подвешенным).
- ТЗ 0.81.
Co-Authored-By: Claude Code <noreply@anthropic.com>
root
committed
16 hours ago
|
Шторка дропдауна из шапки, полосы прокрутки, меню у правого края (0.79)
...
- App.vue: position:relative + z-index у .page-header — только с 768px.
На мобильных они запирали fixed-шторку в контексте наложения шапки, и
затемнение (вне #app, z 1090) ложилось поверх неё, съедая тапы: меню «⋯»
на странице задачи открывалось затемнённым и не нажималось.
- kit-overrides.css: полосы прокрутки снова китовые (10px, дорожка #16161e,
бегунок #414868) — добавлено только скругление бегунка; scrollbar-width /
scrollbar-color больше не задаются, иначе Chromium игнорирует
::-webkit-scrollbar-* и скругление пропадает.
- dropdownClamp.ts: при развороте меню влево выставляем ещё и left: auto —
китовый left:0 продолжал действовать, и у правой колонки карточек меню
выезжало за вьюпорт (right 1593 при ширине 1440).
- ТЗ 0.79.
Co-Authored-By: Claude Code <noreply@anthropic.com>
root
committed
17 hours ago
|

Список задач, карточки и шторка дропдауна на мобильных (0.68–0.77)
...
- Цвета проектов (0.68–0.72): палитра пересобрана с объективным порогом
различимости — 8 базовых тонов × ступени светлоты + 5 нейтральных = 27
клеток, минимальная попарная ΔE76 в CIELAB 12.5 (приглушённые варианты
сливались, чёрный не виден на тёмной панели). Метка проекта — кружок, у
проекта с сайтом — фавикон внутри метки.
- Список задач (0.70–0.74): фильтр по проекту и табы приоритета убраны,
приоритет — переключателем «Приоритетные» с серверной отсечкой
priority_min (7–10; задача без приоритета в отсечку не попадает). Тег
ищется подстрокой имени (параметр tag, icontains с autoescape) с debounce,
ввод — GnCombobox; статус — табы кита с горизонтальной прокруткой. То же
на странице проекта. Фильтры-поля переехали в слот действий шапки.
- Выравнивание фильтров (0.76): кит держит 8px margin-top у input и 15px
margin-bottom у form-group — внутри flex-обёртки они не схлопываются, и
поле стояло на 3.5px выше центра ряда, а крестик сброса (отсчёт от низа
обёртки) уезжал к нижнему краю поля. Отступы внутри фильтра обнулены:
обёртка стала ровно в коробку поля, центры сходятся до пикселя.
- Карточка задачи (0.75–0.76): кликабельна целиком (клик мимо внутренних
ссылок/кнопок и по невыделенному тексту), бейдж проекта — ссылкой.
Свежесть задачи переехала из ряда бейджей в подвал карточки (слот footer,
черта 1px, прижат к низу — в сетке все карточки на одной линии): height
100% содержимого у кита выталкивало подвал, карточка стала flex-колонкой.
Иконка рядом с текстом — с китовым классом normalize.
- Полосы прокрутки (0.76): тонкие, бегунок акцентом, скругление в пилюлю,
прозрачная дорожка — как у полосы меню-дровера кита. Заданы и
scrollbar-width/color, и ::-webkit-scrollbar-*; у дровера приоритетнее
правило кита.
- Шторка дропдауна на мобильных (0.77): до 767px меню — лист снизу во всю
ширину экрана с затемнением и «ручкой», пункты 44px, выезд снизу 0.22s
вместо китового overlay_reveal. Слой затемнения — div вне #app (index.html)
и body:has(.dropdown.is-open): для китового обработчика клик по нему «вне
меню», поэтому тап по затемнению закрывает меню без JS, а JS-кламп
координат на мобильных выключен. Китовый panel_boot оставляет у шапки
transform (содержащий блок для position:fixed) — на мобильных анимация
шапки снята, правило «меню в шапке прижато вправо» тоже оставлено
десктопу. Задача на перенос в кит оформлена отдельно:
gnexus-ui-kit/docs/tasks/gn-dropdown-mobile-sheet.md.
- Кнопка «назад» над шапкой страницы (0.70): показывается, когда в истории
приложения есть предыдущий экран; возврат на экран входа не предлагается.
ТЗ 0.68–0.77; тесты бэкенда 209, ruff/mypy чисто, сборка фронта зелёная.
Co-Authored-By: Claude Code <noreply@anthropic.com>
root
committed
19 hours ago
|
| 2026-09-22 |
iOS Safari: типовые проблемы iPhone-версии
...
- 16px на полях/селектах/поле тегов на touch (media hover:none, pointer:coarse) —
иначе iOS зумит страницу при фокусе и зум застревает
- 100dvh у drawer'ов/меню/модалок (100vh в iOS выше видимой области — низ
уезжал под панель браузера), фолбэк 100vh остаётся
- safe-area (viewport-fit=cover): тосты, drawer-body, топбар и refresh-лоадер
отступают от индикатора «домой» и статус-бара
- apple-mobile-web-app-* меты: standalone до iOS 16.4, black-translucent
статус-бар, тайтл
- тап-подсветка WebKit отключена; кнопка fullscreen сада скрыта там, где
requestFullscreen нет (iPhone Safari умеет только video)
ТЗ 0.47 (§3.15).
Co-Authored-By: Claude Code <noreply@anthropic.com>
root
committed
18 days ago
|
Лоадеры и скелетоны: спиннер обновления в шапках, скелетоны под макет страниц
...
- Спиннер обновления (GnLoader circle, .refresh-loader fixed под топбаром) в
#actions шапок списков: задачи, стек, проекты, архив, проект, задача, опции
- Скелетоны заменены с рамочного .skeleton-stack на макет-мимикрирующие
карточки кита: списки — сетка карточек с бейджами, задача — сетка main/сайд,
статы — метрики, сад — блок + строки
- kit-overrides.css: только теговые бейджи/чипы без uppercase, позиция спиннера
- Локаль common.loading (ru/en/uk)
Проверено headless на живом фронте: скелетоны на первом входе (list 4 карточки,
task 5 карточек/12 линий, stats 3 метрики, garden блок+2 линии, projects 3,
archive 2, stack 3+6 бейджей), спиннер появляется при обновлении данных.
Co-Authored-By: Claude Code <noreply@anthropic.com>
root
committed
18 days ago
|
Теги: подсказки существующих по набору в полях тегов
...
GnTagInput кита (v0.4.0) без автодополнения — тонкая обёртка TagField:
строка чипов-подсказок под полем, фильтр по набираемому тексту (он читается
из всплывающего input-события внутреннего поля кита). Клик по подсказке
добавляет тег и очищает ввод синтетическим input-событием.
Co-Authored-By: Claude Code <noreply@anthropic.com>
root
committed
18 days ago
|
Теги — без аперкейса кита (бейджи тегов и чипы ввода тегов)
...
Co-Authored-By: Claude Code <noreply@anthropic.com>
root
committed
18 days ago
|