diff --git a/backend/app/services/detailing.py b/backend/app/services/detailing.py index 245d023..cf3d4d7 100644 --- a/backend/app/services/detailing.py +++ b/backend/app/services/detailing.py @@ -11,6 +11,7 @@ import json import logging +import re from typing import Any import httpx @@ -52,7 +53,10 @@ text = value.strip() if not text or text.lower() in PLACEHOLDERS: return None - return text[:max_len] + # LLM вместо markdown приносит HTML (
, ,
    ) — при утверждении он + # попадал в описание и вылезал тегами при редактировании; просили markdown + text = re.sub(r"]*>", " ", text, flags=re.IGNORECASE) + return re.sub(r"[ \t]{2,}", " ", text)[:max_len] def build_prompt( diff --git a/frontend/src/App.vue b/frontend/src/App.vue index 4c430e4..c34c202 100644 --- a/frontend/src/App.vue +++ b/frontend/src/App.vue @@ -150,6 +150,14 @@ .nav-topbar-current .new-task-label { display: none; } + /* кнопка-иконка: .btn кита width:100% и несимметричные паддинги — на мобильном + она растягивается с пустым хвостом после скрытия лейбла */ + .nav-topbar-current .btn { + width: auto; + min-height: 38px; + padding: 8px 10px; + justify-content: center; + } } /* У кита .card имеет intrinsic max-width: 340px / width: max-content — в наших видах карточки должны заполнять колонку контента целиком (иначе обрезаются действия). @@ -222,6 +230,14 @@ .badge .ph { margin-right: 0.35em; } +/* Тосты: у .toast-progress-bar кита анимация без duration — мгновенно доходит + до scaleX(0) (forwards) и перекрывает inline transform, которым полоской + таймера управляет Vue-адаптер. Отключаем — полоска снова видна. + Селектор повторяет специфичность кита (.toast .toast-progress .toast-progress-bar), + иначе переопределение проигрывает независимо от порядка. */ +.toast .toast-progress .toast-progress-bar { + animation: none; +} /* конфетти за закрытую задачу (gamification.ts рисует слой частиц) */ .confetti-layer { position: fixed; diff --git a/frontend/src/views/TaskView.vue b/frontend/src/views/TaskView.vue index 52c1bfd..1403409 100644 --- a/frontend/src/views/TaskView.vue +++ b/frontend/src/views/TaskView.vue @@ -1024,6 +1024,9 @@ /* чипы-переходы в шапке (родитель, проект) */ .meta-link { text-decoration: none; + /* инлайн- внутри flex-меты даёт бейджу на 1px другой базлайн — + делаем сам flex-элементом */ + display: inline-flex; } .meta-link:hover .badge { color: var(--accent, #7aa2f7); @@ -1197,6 +1200,10 @@ flex-direction: column; gap: 0.5rem; } +/* у .form-group кита max-width: 600px — редактор описания на весь контейнер */ +.inline-desc :deep(.form-group) { + max-width: 100%; +} .inline-desc .inline-actions { display: flex; gap: 0.25rem;