/* Revision 19 task editor: same hierarchy on web, Windows, phone and Fold. */
/* По просьбе пользователя — убрать кнопку «Идеи» из бокового меню (не
 * scoped к .v19-task-menu, это боковая навигация, а не меню задачи).
 * На телефоне та же ссылка на «Идеи» рисуется ДРУГИМ узлом — прямоугольная
 * кнопка `data-v76-route="ideas"` (`data-idea-styled="1"`) внутри мобильного
 * меню `.v76-header-menu.v76-rose-menu` (открывается, например, из «Входящие»)
 * — атрибут другой (`data-v76-route`, не `data-route`), поэтому старое
 * правило её не ловило. Скрываем оба варианта. */
[data-route="ideas"],[data-v76-route="ideas"]{display:none!important}
/* Закладка Проекты — цвет фона/рамки кружков с цифрами у каждого проекта
 * должен совпадать с такими же кружками в закладке Тэги (`.entity-link.tag-
 * color-text .chip`: border rgb(220,220,220), фон прозрачный, текст
 * rgb(138,138,138)) — у Проектов (`.project-tree-head>.chip`/`.v15-active-
 * task-count`, v84.css) была чуть другая рамка (234,234,234). Текст и фон
 * уже совпадали, недостающее — только цвет рамки. */
.project-tree-head>.chip,.project-tree-head>.v15-active-task-count{border-color:rgb(220,220,220)!important}
/* Проект — строка статусов: значок «время» перед 3-м пунктом уже есть в
 * разметке (.project-duration-summary>.project-summary-icon), но v78.css
 * прячет его безусловно (.project-summary-icon{display:none}) и включает
 * обратно ТОЛЬКО в @media(600-1024px) — на десктопе и мобильном значка нет.
 * Показываем всегда, только для пункта «время» (пункт «задачи» не просили). */
.project-duration-summary>.project-summary-icon{display:inline-flex!important;vertical-align:middle!important}
.project-duration-summary>.project-summary-icon .v22-icon{width:16px!important;height:16px!important}
/* Проект — строка статусов: 5-й пункт «Заметки» (проект + все его задачи),
 * см. decorateProjectSummaryRow. Тот же визуальный язык, что и у родных
 * кнопок «Вехи»/«Ресурсы» в этой же строке. */
.project-meta-card[data-project-summary] [data-v19-project-notes]{display:inline-flex!important;align-items:center;gap:4px}
.project-meta-card[data-project-summary] [data-v19-project-notes] .v22-icon{width:19px!important;height:19px!important}
/* Проект — строка статусов: кнопка «Проект» (редактировать), см. decorateProjectSummaryRow. */
.project-meta-card[data-project-summary] [data-v19-project-edit]{display:inline-flex!important;align-items:center;gap:4px;margin-left:auto}
.project-meta-card[data-project-summary] [data-v19-project-edit] .v22-icon{width:19px!important;height:19px!important}
/* Название проекта — теперь курсор-указатель на разворот/сворот всех задач,
 * не открытие редактора (см. decorateProjectSummaryRow). */
h1.v27-editable-title.v19-expand-toggle{cursor:pointer}
/* Накопительные — кликабельное слово в пустом разделе (см. decorateGoalsList).
 * Буква «д» (ножки ниже базовой линии) визуально оставалась без подчёркивания —
 * браузер по умолчанию «пропускает чернила» (text-decoration-skip-ink:auto)
 * там, где линия пересекает штрих буквы; для «д» пропускался весь сегмент
 * под ней. Явно отключаем skip-ink — линия сплошная под всем словом. */
.v19-goals-empty-link{border:0;background:transparent;padding:0;font:inherit;font-weight:700;color:var(--accent);cursor:pointer;text-decoration:underline;text-underline-offset:2px;text-decoration-skip-ink:none}
.v19-goals-empty-link:hover{opacity:.8}
/* Заголовки разделов «Датчики»/«Ручные» в Накопительных — по просьбе
 * пользователя убираем значок (родной .v57-section-kind), остаются только
 * стрелка, текст и кружок с числом. Атрибут h2[data-v57-unified-section^=
 * "goals-"] специфичен именно для этой вкладки — другие h2 с той же родной
 * разметкой (если есть) не затронуты. */
h2[data-v57-unified-section^="goals-"] .v57-section-kind{display:none!important}
/* Пустой раздел Накопительных — родной .empty{padding:36px} рассчитан на
 * полноэкранный пустой список, здесь это один короткий раздел среди других —
 * уменьшаем белое поле. Размер текста — как у аналогичного пустого состояния
 * в закладке «Сегодня» («Бесцельный день… Нацелить!», см. .v14-aimless в
 * v14.css: font-size:17px;font-weight:650) — та же роль (приглашение
 * что-то создать), тот же размер. */
.v43-goal-list>.empty{padding:14px 16px!important;font-size:17px!important;font-weight:650!important;color:#aaa49d}

/* Ведущий элемент строки цели в списке Накопительных — см. decorateGoalRowFronts.
 * Ручная: настоящая кнопка «внести число» (родная, просто переставлена в 1-й
 * столбец) вместо кружка-статуса, окрашена в цвет приоритета (та же палитра,
 * что и родной .v57-goal-state). */
.v19-goal-number-front{
  width:20px!important;height:20px!important;min-width:20px!important;padding:0!important;
  color:var(--p4,#888)!important;
  /* сброс родного кружка (.check/.task-state-check несёт border/bg/border-radius —
   * нужен, когда мы подменяем ОБЩИЙ кружок статуса задачи вне .v43-goal-row,
   * см. decorateCumulativeTaskCircles) */
  border:0!important;background:transparent!important;border-radius:0!important;box-shadow:none!important;
}
.v43-goal-row>.v19-goal-number-front{grid-column:1!important;grid-row:1!important;align-self:start!important;margin:11px 0 0 10px!important}
.v19-goal-number-front.p1{color:var(--p1,#d55242)!important}
.v19-goal-number-front.p2{color:var(--p2,#d18d34)!important}
.v19-goal-number-front.p3{color:var(--p3,#568bb0)!important}
/* (баг, тот же что и раньше с тэг/проект-пикерами) .v22-icon красит себя в
 * var(--accent) НАПРЯМУЮ (v22.css) — это блокирует наследование цвета
 * приоритета через currentColor от кнопки. Красим сам значок явно. */
.v19-goal-number-front .v22-icon{width:20px!important;height:20px!important;color:inherit!important}
/* Датчик: некликабельный значок вместо кружка-статуса, тот же значок, что и
 * бейдж «датчик» в шапке редактора (v22Icon('automaticCumulative')) — не
 * придумываем новый. */
.v19-goal-sensor-icon{
  display:grid;place-items:center;width:20px;height:20px;
  color:var(--muted,#888)!important;pointer-events:none;
  border:0!important;background:transparent!important;border-radius:0!important;box-shadow:none!important;
}
.v43-goal-row>.v19-goal-sensor-icon{grid-column:1;grid-row:1;margin:11px 0 0 10px}
.v19-goal-sensor-icon .v22-icon{width:20px;height:20px;color:inherit!important}

/* Мини-меню выбора показателей датчика (.v40-source-popup/.v40-source-toolbar) —
 * справа оставалось пустое место под скрытую (mobile-client.css: display:none)
 * кнопку [data-v40-source-cancel] — убираем зарезервированный столбец и сужаем
 * попап.
 * ОК-кнопка — стиль «regbi» (условное имя для удобной ссылки в коде и
 * разговоре, ничего общего с реальным регби). Образец найден пользователем
 * ПРЯМО В ПРИЛОЖЕНИИ (не придуман нами): кнопка ОК у поля «добавить
 * комментарий» (см. `.v19-comment-ok` ниже) — вытянутый овал, накренённый
 * примерно на 30-35° (низ слева — верх справа, «/»), со сплошной заливкой
 * акцентным цветом и белой галочкой (v22Icon('ok')) внутри, накренённой
 * вместе с самим овалом. Подтверждено пользователем живьём: форма (овал)
 * — то, что нужно; ПОПРАВКА — галочка внутри должна остаться РОВНОЙ
 * (горизонтальной), не крениться вместе с овалом — контр-поворачиваем
 * значок на противоположный угол. Фактический computed-стиль
 * `.v19-comment-ok` на момент проверки (2026-09-13) овалом не оказался
 * (родной .v31-dialog-icon, 36×36, radius 6px) — расхождение с рисунком
 * пользователя не объяснено (возможно другая сборка/кэш), стиль ниже
 * реализован строго по рисунку, а не по текущему computed-стилю. */
.v40-source-popup{width:min(455px,calc(100vw - 16px))!important}
.v40-source-popup .v40-source-toolbar{grid-template-columns:34px repeat(2,34px) minmax(120px,1fr) 44px!important}
.v40-source-popup .v40-source-toolbar:has([data-v40-source-type="ritual"]){grid-template-columns:34px repeat(3,34px) minmax(120px,1fr) 44px!important}
.v40-source-popup [data-v40-source-ok]{
  width:38px!important;height:24px!important;min-width:38px!important;padding:0!important;
  border:0!important;border-radius:50%!important;background:var(--accent)!important;
  transform:rotate(-33deg)!important;
  display:grid!important;place-items:center!important;
}
.v40-source-popup [data-v40-source-ok] .v22-icon{transform:rotate(33deg)!important}
.v40-source-popup [data-v40-source-ok] .v22-icon{color:#fff!important;width:15px!important;height:15px!important}
.v40-source-popup [data-v40-source-ok] .v22-icon :is(.v22-main,.v22-echo,.architect-echo)>*{stroke:currentColor!important}
/* (жёсткое правило) Стена больше не выбирается отдельно от Камня — она
 * присваивается/снимается автоматически вместе с Камнем (см. v19SyncWallsFromStones
 * в task-menu-r19.js). Убираем сам пикер/выбранную строку «Стена» из меню
 * задачи целиком — значение остаётся только для фильтра/поиска, не для
 * ручного выбора в этом меню. */
.v19-task-menu.v19-task-menu .v18-artifact-pickers>button[data-v18-wall-picker],
.v19-task-menu.v19-task-menu .v19-pickers-chips>button[data-v18-wall-picker],
.v19-task-menu.v19-task-menu [data-v18-wall-picker],
.v19-task-menu.v19-task-menu [data-artifact-row="wall"]{display:none!important}
/* (74д) Псевдоним общей роли «Основной текст» из typography-tokens.css
 * (§190) — значение теперь берётся ИЗ единой системы, не дублируется;
 * заодно устраняет разрыв «14px десктоп / 15px моб.» — было замечено
 * пользователем как ненужное расхождение, роль «Основной текст» = 15px
 * одинаково на всех ширинах, отдельный mobile-override ниже по файлу
 * (строка ~173) для этой переменной больше не нужен, но оставлен —
 * теперь просто присваивает то же самое значение, безвредно. */
:root{
  --v19-task-menu-font-size:var(--dj-text-body-size,15px);
  --v19-task-menu-font-weight:var(--dj-text-body-weight,600);
  --v19-task-menu-line-height:var(--dj-text-body-line-height,1.25);
  --v19-task-menu-heading-size:var(--dj-text-heading-size,19px);
  --v19-task-menu-heading-weight:var(--dj-text-heading-weight,700);
  --v19-task-menu-heading-line-height:var(--dj-text-heading-line-height,1.15);
  --v19-task-menu-reading-size:var(--dj-text-reading-size,15px);
  --v19-task-menu-reading-weight:var(--dj-text-reading-weight,400);
  --v19-task-menu-reading-line-height:var(--dj-text-reading-line-height,1.35);
  --v19-task-menu-secondary-size:12px;
  --v19-task-menu-secondary-weight:600;
  --v19-task-menu-secondary-line-height:1.5;
}
@media(max-width:599px){
  :root{
    --v19-task-menu-secondary-size:var(--dj-text-secondary-size);
    --v19-task-menu-secondary-weight:var(--dj-text-secondary-weight);
    --v19-task-menu-secondary-line-height:var(--dj-text-secondary-line-height);
  }
}
@media(min-width:600px) and (max-width:1024px){
  :root{
    --v19-task-menu-secondary-size:var(--dj-text-secondary-size);
    --v19-task-menu-secondary-weight:var(--dj-text-secondary-weight);
    --v19-task-menu-secondary-line-height:var(--dj-text-secondary-line-height);
  }
}
.v19-task-menu{--v19-row-radius:10px}
/* Название накопительной цели — лишняя тонкая линия под полем названия.
 * Родная разметка (v41.css: .v40-title-wrap>input{border-bottom:0}) уже
 * ПЫТАЕТСЯ убрать её, но без !important — а общий .task-title-v09{border-
 * bottom:1px solid var(--line)} (v09.css) поставлен С !important, так что
 * побеждает несмотря на более низкую специфичность (важность решает раньше
 * специфичности). Добавляем !important с тем же (уже верным) native-scope. */
.v40-title-wrap>input{border-bottom:0!important}
.v19-task-menu :is(.time-line,.v18-priority-row,.v18-reminder,.v18-artifact-row>button,.v18-comments-head,.subtask-panel>.section-head){font-family:inherit!important;font-size:var(--v19-task-menu-font-size)!important;font-weight:var(--v19-task-menu-font-weight)!important;line-height:var(--v19-task-menu-line-height)!important;letter-spacing:normal!important}
.v19-task-menu .v19-task-title{font-family:var(--font-display,inherit)!important;font-style:normal!important;font-size:var(--v19-task-menu-heading-size)!important;font-weight:var(--v19-task-menu-heading-weight)!important;letter-spacing:-.01em!important;line-height:var(--v19-task-menu-heading-line-height)!important;overflow-wrap:anywhere;word-break:normal;writing-mode:horizontal-tb!important}
.v19-task-menu :is(.time-line,.v18-priority-row,.v18-reminder,.v18-artifact-row:not(.v18-artifact-pickers),.subtask-panel,.v18-comments){box-sizing:border-box!important;width:100%!important}
.v19-task-menu .v18-artifact-row:not(.v18-artifact-pickers){border-color:color-mix(in srgb,var(--v19-artifact-color,var(--line)) 34%,var(--line))!important;background:color-mix(in srgb,var(--v19-artifact-color,var(--panel)) 5%,var(--panel,#fff))!important;overflow:hidden!important}
.v19-task-menu .v18-artifact-row:not(.v18-artifact-pickers)>button{color:var(--v19-artifact-color,var(--ink))!important;width:100%!important;min-width:0!important;border:0!important;background:transparent!important;padding:0!important}
.v19-task-menu .v18-artifact-row>button span:not(.v22-icon){overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.v19-task-menu :is(.time-line,.v18-priority-row,.v18-reminder,.v18-artifact-row>button) span:not(.v22-icon){font:inherit!important;letter-spacing:inherit!important}
.v19-task-menu .v18-artifact-pickers{width:100%;min-height:42px;padding:3px 0!important;margin:2px 0;overflow-x:auto;overflow-y:hidden;scrollbar-width:thin}
.v19-task-menu .v18-artifact-pickers>button{min-height:38px;border:1px solid color-mix(in srgb,currentColor 24%,var(--line))!important;border-radius:9px!important;background:var(--panel,#fff)!important;padding:5px 8px!important}
.v19-task-menu .v18-comments{padding:0!important}
.v19-task-menu .v19-cumulative-kind{display:flex;align-items:center;align-self:flex-start;gap:7px;margin:0 10px 5px;padding:5px 9px;border-radius:7px;background:var(--accent);color:#fff;font-size:12px;font-weight:650}
.v19-task-menu .v19-cumulative-kind .v22-icon{width:18px;height:18px}.v19-task-menu .v18-cumulative-mode{display:none!important}

.v19-cumulative-kind-dialog{position:fixed;inset:50% auto auto 50%;transform:translate(-50%,-50%);width:min(520px,calc(100vw - 28px));max-height:calc(100dvh - 32px);box-sizing:border-box;border:1px solid var(--line);border-radius:18px;background:var(--panel,#fff);color:var(--ink);padding:22px;overflow:auto}
.v19-cumulative-kind-dialog::backdrop{background:rgba(20,18,15,.38);backdrop-filter:blur(2px)}
.v19-cumulative-kind-dialog h2{margin:0 42px 5px 0;font-family:var(--font-display,inherit);font-size:24px}.v19-cumulative-kind-dialog>p{margin:0 0 18px;color:var(--muted)}
.v19-kind-options{display:grid;grid-template-columns:1fr 1fr;gap:10px}.v19-kind-options>button{display:grid;grid-template-columns:34px 1fr;align-items:center;gap:2px 10px;min-height:88px;border:1px solid var(--line);border-radius:12px;background:var(--bg);color:var(--ink);padding:12px;text-align:left}.v19-kind-options>button:hover,.v19-kind-options>button:focus-visible{border-color:var(--accent);box-shadow:0 0 0 2px color-mix(in srgb,var(--accent) 20%,transparent)}.v19-kind-options .v22-icon{grid-row:1/3;width:30px;height:30px;color:var(--accent)}.v19-kind-options span{font-size:15px;font-weight:700}.v19-kind-options small{color:var(--muted);line-height:1.25}.v19-kind-cancel{position:absolute;right:14px;top:14px;width:36px;height:36px;border:0;background:transparent;color:var(--accent)}

.v19-reminder-dialog{position:fixed!important;inset:0!important;z-index:12000!important;display:grid!important;place-items:center!important;padding:max(12px,env(safe-area-inset-top)) max(12px,env(safe-area-inset-right)) max(12px,env(safe-area-inset-bottom)) max(12px,env(safe-area-inset-left))!important;background:rgba(20,18,15,.34)!important;box-sizing:border-box!important;overflow:hidden!important}
.v19-reminder-dialog .time-menu-card{position:relative!important;inset:auto!important;display:flex!important;flex-direction:column!important;width:min(440px,100%)!important;max-width:100%!important;max-height:min(680px,calc(100dvh - max(24px,env(safe-area-inset-top)) - max(24px,env(safe-area-inset-bottom))))!important;margin:0!important;padding:14px!important;border-radius:16px!important;background:var(--panel,#fff)!important;overflow:hidden!important;box-shadow:0 18px 56px rgba(0,0,0,.25)!important;transform:translateY(4px);opacity:.96;transition:transform .12s ease,opacity .12s ease}
.v19-reminder-dialog.v19-ready .time-menu-card{transform:none;opacity:1}
.v18-reminders-only.v19-reminder-dialog .time-menu-card>.v19-reminder-header{display:flex!important;align-items:center;gap:9px;padding:2px 2px 10px}.v19-reminder-header h2{margin:0;font-family:var(--font-display,inherit);font-size:22px}.v19-reminder-header .v22-icon{width:25px;height:25px;color:var(--accent)}
.v18-reminders-only.v19-reminder-dialog .time-menu-card>.v80-notification-panel{display:flex!important;flex:1 1 auto!important;flex-direction:column!important;gap:9px!important;position:static!important;inset:auto!important;transform:none!important;width:100%!important;max-width:none!important;min-height:0!important;max-height:none!important;margin:0!important;padding:0 2px!important;border:0!important;background:transparent!important;box-shadow:none!important;overflow-y:auto!important;box-sizing:border-box!important}
.v19-reminder-dialog .v80-notification-add[hidden]{display:none!important}
.v19-reminder-dialog .v80-notification-add:not([hidden]){display:grid!important;grid-template-columns:minmax(0,1fr) auto!important;align-items:center!important;gap:8px!important}.v19-reminder-dialog .v80-notification-add :is(select,input){box-sizing:border-box;min-height:42px}.v19-reminder-dialog .v80-notification-add select,.v19-reminder-dialog .v80-notification-add input{width:100%;min-width:0;border:1px solid var(--line);border-radius:9px;background:var(--bg);color:var(--ink);padding:7px}
/* кнопка «ОК» (.v31-dialog-icon, см. task-menu-r19.js) не должна растягиваться
 * под родную сетку 1fr/42px и min-height:42px — своя дорожка auto + сброс min-height. */
.v19-reminder-dialog .v80-notification-add button{min-height:0!important}
/* v84.css красит эти кнопки в фон панели (--panel) с !important и той же
 * специфичностью, что и наше «овал-ок» правило ниже — тут специфичность та
 * же, но этот файл грузится ПОСЛЕДНИМ, так что мы и должны победить; без
 * этого явного повтора фон/цвет оставались родными (белый фон + белая
 * иконка = «пустой кружок», см. задачу №10). */
.v19-reminder-dialog .v80-notification-add button[data-v80-notification-add],
.v19-reminder-dialog .v80-notification-add button[data-v80-notification-add-at]{
  background:var(--accent,#2f5d5a)!important;color:#fff!important;border:1px solid var(--accent,#2f5d5a)!important;
}
.v19-reminder-dialog .modal-actions{display:flex!important;justify-content:flex-end;gap:8px;margin-top:12px;padding-top:10px;border-top:1px solid var(--line)}
@media(max-width:760px){.v19-kind-options{grid-template-columns:1fr}.v19-cumulative-kind-dialog{padding:18px}.v19-reminder-dialog{align-items:end!important}.v19-reminder-dialog .time-menu-card{width:100%!important;border-radius:16px 16px 10px 10px!important}}

/* ==========================================================================
 * Rev.19 editor layout — consolidated pass (эскиз «Макеты меню задач»)
 * ========================================================================== */
.v19-task-menu{scrollbar-width:none}
.v19-task-menu::-webkit-scrollbar{width:0;height:0;display:none}

/* --- шапка: ровно 3 вещи — кружок задачи · название во всю строку · меню действий --- */
.v19-task-menu>:is(.task-head-v09,.v38-task-head){
  position:sticky;top:0;z-index:5;background:var(--panel,#fff);
  display:flex!important;align-items:center!important;flex-wrap:nowrap!important;gap:6px!important;
  padding:2px 0 0!important;margin-bottom:12px!important;box-shadow:0 8px 10px -10px rgba(35,31,26,.3);
}
.v19-task-menu>:is(.task-head-v09,.v38-task-head)>:is(.v18-editor-back:not(.v19-nav-back),.task-focus-mini,.task-focus,[data-task-focus],.close.v23-system-action,.save.v23-system-action){display:none!important}
/* вложенный редактор подзадачи — кнопка «назад» к основной задаче */
.v19-task-menu .v18-editor-back.v19-nav-back{
  display:inline-flex!important;align-items:center!important;justify-content:center!important;
  order:-3!important;flex:0 0 24px!important;width:24px!important;height:24px!important;min-width:24px!important;
  margin:0 4px 0 0!important;padding:0!important;border:0!important;background:transparent!important;
  color:var(--muted,#8a7d68)!important;cursor:pointer!important;
}
.v19-task-menu .v18-editor-back.v19-nav-back>:is(svg,.v22-icon){width:20px!important;height:20px!important}
.v19-task-menu .task-state-check.v23-task-circle{
  order:0;flex:0 0 22px!important;width:22px!important;height:22px!important;min-width:22px!important;
  margin:0!important;padding:0!important;border:0!important;background:transparent!important;
}
.v19-task-menu .v19-task-title{
  order:1;flex:1 1 auto!important;min-width:0!important;width:auto!important;max-width:none!important;
  font-family:inherit!important;font-size:var(--v19-task-menu-heading-size)!important;font-weight:var(--v19-task-menu-heading-weight)!important;line-height:var(--v19-task-menu-heading-line-height)!important;
  margin:0 0 0 6px!important;padding:2px 0!important;
}
.v19-task-menu>:is(.task-head-v09,.v38-task-head)>:is(.task-top-actions,.v76-task-state-wrap,.v76-task-state-toggle){
  order:2;flex:0 0 auto!important;margin:0 0 0 6px!important;
}
.v19-task-menu>.task-top-actions{display:none!important}
/* --- строки: единая высота (как у «Срок»), зазор ровно 2px, тёплый фон --- */
.v19-task-menu :is(.time-line,.v18-priority-row,.v18-artifact-row:not(.v18-artifact-pickers),
                   .subtask-panel>.section-head,.v18-comments>.v18-comments-head){
  box-sizing:border-box!important;width:100%!important;height:auto!important;min-height:var(--dj-task-property-min-height,34px)!important;max-height:none!important;
  flex:0 0 auto!important;
  margin:0 0 1px!important;padding:0 var(--dj-task-property-padding-x,12px)!important;gap:8px!important;
  display:flex!important;align-items:center!important;justify-content:flex-start!important;text-align:left!important;
  overflow:hidden!important;box-shadow:none!important;
  border:1px solid var(--panel,#fffdf8)!important;border-radius:var(--v19-row-radius,10px)!important;
  background:color-mix(in srgb,#8a7a5f 16%,var(--panel,#fffdf8))!important;
}
/* Найдено живой проверкой при теме "classic": `project-ideas-r21.css` несёт
 * `html[data-interface-design="classic"] .v19-task-menu :is(...)
 * {background:#fff!important}`, чей список :is() покрывает ту же самую
 * группу рядов (.time-line/.v18-priority-row/.v18-artifact-row/
 * .subtask-panel/.v18-comments/.v40-measure-row/…) — тип-селектор `html`
 * в его цепочке даёт лишний тип-тир специфичности (0,3,1), которого нет у
 * базового правила выше (0,2,0) — при теме "classic" тёплый фон ВСЕХ этих
 * рядов (включая «Срок») молча проигрывал и становился белым, хотя правило
 * выше и несёт !important. Та же природа ошибки, что и в §164/166
 * (см. память), просто на этот раз — в самой ПЕРВОЙ, базовой формуле фона
 * рядов, которую тогда ещё не утраивали (баг был скрыт всё это время, пока
 * тестовая тема была не "classic"). Утроенный якорь снимает вопрос
 * независимо от порядка файлов. */
.v19-task-menu.v19-task-menu.v19-task-menu :is(.time-line,.v18-priority-row,.subtask-panel>.section-head,.v18-comments>.v18-comments-head){
  background:color-mix(in srgb,#8a7a5f 16%,var(--panel,#fffdf8))!important;
}
/* «Срок» побывало отдельным правилом с плоским var(--panel) (сначала с
 * 50%-прозрачностью, затем без неё) — по прямой просьбе пользователя,
 * повторенной трижды в одном раунде («ещё раз — у прямоугольников должен
 * быть цвет фона задачи, не своего», «сами они должны быть одинакового
 * цвета — того что у Приоритета», «а Срок сейчас другого цвета — исправить»)
 * ВСЕ прямоугольники, включая «Срок», в итоге унифицированы обратно на
 * тот же тёплый тон, что несёт «Приоритет» (см. правило выше — .time-line
 * снова в общем :is()-списке, отдельное правило удалено как избыточное). */
.v19-task-menu :is(.subtask-panel,.v18-comments){
  box-sizing:border-box!important;width:100%!important;min-height:34px!important;height:auto!important;flex:0 0 auto!important;
  margin:0 0 1px!important;padding:0!important;overflow:hidden!important;box-shadow:none!important;
  border:0!important;border-radius:0!important;background:transparent!important;
}
.v19-task-menu :is(.v38-tag-artifacts,.v76-mobile-task-artifacts){display:block!important}
.v19-task-menu .v18-artifact-row:not(.v18-artifact-pickers){
  background:color-mix(in srgb,#8a7a5f 16%,var(--panel,#fffdf8))!important;
}
.v19-task-menu.v19-task-menu.v19-task-menu .v18-artifact-row:not(.v18-artifact-pickers){
  background:color-mix(in srgb,#8a7a5f 16%,var(--panel,#fffdf8))!important;
}
.v19-task-menu :is(.subtask-panel>.section-head,.v18-comments-head){
  margin:0!important;
  border:1px solid var(--panel,#fffdf8)!important;border-radius:var(--v19-row-radius,10px)!important;
  background:color-mix(in srgb,#8a7a5f 16%,var(--panel,#fffdf8))!important;
}

/* --- значки в одну вертикаль, текст следом --- */
.v19-task-menu :is(.v18-artifact-row:not(.v18-artifact-pickers)>button,.v18-priority-row){
  display:flex!important;align-items:center!important;gap:8px!important;justify-content:flex-start!important;
}
.v19-task-menu .v18-artifact-row:not(.v18-artifact-pickers)>button{width:100%!important;min-width:0;border:0!important;background:transparent!important;padding:0!important;color:var(--v19-artifact-color,var(--ink))!important}
.v19-task-menu :is(.v18-artifact-row:not(.v18-artifact-pickers)>button,.v18-priority-row)>:is(.v22-icon,.v58-priority-flag,.priority-flag){flex:0 0 20px!important;width:20px!important;height:20px!important;margin:0!important;padding:0!important}
/* Родное .priority-flag.v22-icon-button (v23.css) даёт width:28px;padding:2px —
 * шире значка (20px) и с центрированием (display:grid), из-за чего сам флаг
 * визуально сдвинут вправо на ~4px относительно значков в соседних строках
 * (Проект/Ритуал и т.п., у которых значок — прямой flex-ребёнок без обёртки-
 * кнопки). Перебито выше (width/padding:0), но т.к. это КНОПКА (а не просто
 * .v22-icon), явно выключаем и вложенное центрирование. */
.v19-task-menu .v18-priority-row>button.priority-flag{display:flex!important;align-items:center!important;justify-content:flex-start!important}
/* Та же история у кнопки «Время» (.time-line): родная .v22-icon-button даёт
 * width:30px (значок 20px) с центрированием — те же лишние ~5px слева. */
.v19-task-menu .time-line>button.v22-icon-button{width:20px!important;min-width:20px!important;padding:0!important;display:flex!important;align-items:center!important;justify-content:flex-start!important}
.v19-task-menu :is(.time-line>[data-time-summary],.v18-artifact-row>button>span:not(.v22-icon),.v18-priority-row>span){margin:0!important;flex:0 1 auto;min-width:0;font:inherit!important;text-align:left!important}
.v19-task-menu .time-line{padding-left:40px!important}
.v19-task-menu .time-line>button{flex:0 0 auto;margin-left:6px!important}
.v19-task-menu .v18-artifact-row:not(.v18-artifact-pickers):not(:has(span,img)){display:none!important}

/* --- «Напоминание» (полноширинный прямоугольник) + чипы выбора артефактов под ним --- */
.v19-task-menu .v18-artifact-pickers{
  display:flex!important;flex-wrap:wrap!important;gap:0!important;
  border:0!important;background:transparent!important;box-shadow:none!important;
  margin:0 0 1px!important;padding:0!important;min-height:0!important;height:auto!important;overflow:visible!important;
}
.v19-task-menu .v18-artifact-pickers>.v18-reminder{
  order:-1;flex:1 0 100%!important;box-sizing:border-box!important;
  height:auto!important;min-height:var(--dj-task-property-min-height,34px)!important;max-height:none!important;margin:0!important;padding:0 var(--dj-task-property-padding-x,12px)!important;gap:8px!important;
  display:flex!important;align-items:center!important;justify-content:flex-start!important;white-space:nowrap;overflow:hidden;
  border:1px solid var(--panel,#fffdf8)!important;border-radius:var(--v19-row-radius,10px)!important;
  background:color-mix(in srgb,#8a7a5f 16%,var(--panel,#fffdf8))!important;
}
.v19-task-menu .v18-artifact-pickers>.v18-reminder>:is(.v22-icon,svg){flex:0 0 20px!important;width:20px!important;height:20px!important;margin:0}
.v19-task-menu .v19-pickers-chips{
  flex:1 0 100%!important;display:flex!important;flex-wrap:nowrap!important;gap:6px!important;
  margin-top:3px!important;padding:1px 0!important;overflow-x:auto!important;scrollbar-width:none;
}
.v19-task-menu .v19-pickers-chips::-webkit-scrollbar{display:none}
/* «Хвост» строки выбора артефактов, когда кнопок не хватает на всю ширину —
 * не оставляем голый фон страницы, а «дорисовываем» прямоугольник того же
 * вида (цвет/рамка/радиус), что и у остальных базовых рядов меню (не такой
 * же высоты, как большие 34px-ряды — по высоте вровень с самими кнопками
 * выбора, это их непосредственный «хвост», а не отдельный самостоятельный
 * ряд). Чистый CSS (::after как ещё один flex-элемент, gap уже даёт нужный
 * отступ от последней кнопки): когда кнопки уже не помещаются (нужен
 * горизонтальный скролл), flex-shrink+min-width:0 сжимают его до 0 —
 * пропадает сам собой, без JS. */
.v19-task-menu .v19-pickers-chips::after{
  content:"";order:99!important;flex:1 1 0;min-width:0;align-self:stretch;
  border:1px solid var(--panel,#fffdf8);
  border-radius:9px;background:color-mix(in srgb,#8a7a5f 16%,var(--panel,#fffdf8));
}
/* (2) Порядок кнопок выбора артефактов: проект, тэг, напоминание, описание,
 * ритуал, камень, стена — чистым CSS по стабильным селекторам (не JS/inline-
 * style: те не переживают пересоздание узлов родным кодом при перерисовке). */
/* Накопительная цель (.v40-goal-form) отдаёт ТЕ ЖЕ по смыслу кнопки с ДРУГИМ
 * атрибутом — data-v40-artifact, не data-v36-artifact (обычная задача) — без
 * этого дубля порядок молча не применялся (все три кнопки падали на order:0
 * по умолчанию, вперемешку, и «хвостовой» прямоугольник ниже вылезал не в
 * конце ряда, а посреди него). */
.v19-task-menu .v19-pickers-chips>:is([data-v36-artifact="project"],[data-v40-artifact="project"]){order:1!important}
.v19-task-menu .v19-pickers-chips>:is([data-v36-artifact="tag"],[data-v40-artifact="tag"]){order:2!important}
.v19-task-menu .v19-pickers-chips>.v18-reminder{order:3!important}
.v19-task-menu .v19-pickers-chips>[data-v19-desc-chip]{order:4!important}
.v19-task-menu .v19-pickers-chips>:is([data-v36-artifact="ritual"],[data-v40-artifact="ritual"]){order:5!important}
.v19-task-menu .v19-pickers-chips>:is([data-v36-artifact="stone"],[data-v40-artifact="stone"]){order:6!important}
.v19-task-menu .v19-pickers-chips>[data-v18-wall-picker]{order:7!important}
.v19-task-menu .v19-pickers-chips>button{
  flex:0 0 auto!important;min-height:32px;display:inline-flex!important;align-items:center!important;gap:6px!important;
  line-height:1!important;white-space:nowrap;padding:5px 9px!important;
  border:1px solid color-mix(in srgb,currentColor 22%,var(--line))!important;border-radius:9px!important;background:var(--panel,#fff)!important;
}
.v19-task-menu .v19-pickers-chips>button>span{line-height:1!important;display:inline-flex;align-items:center}
.v19-task-menu .v19-pickers-chips>button>:is(.v22-icon,svg){flex:0 0 18px;width:18px!important;height:18px!important;margin:0}

/* --- подзадачи / комментарии: [→][текст]…[+][счётчик]; счётчик = кружок как во «Проектах» --- */
.v19-task-menu :is(.subtask-panel>.section-head,.v18-comments-head){padding-left:12px!important}
.v19-task-menu :is(.subtask-panel>.section-head,.v18-comments-head)>:is([data-v38-more],[data-v18-comments-toggle]){order:0!important;margin:0!important;opacity:1}
.v19-task-menu :is(.subtask-panel>.section-head>.section-title,.v18-comments-head>span:first-child){order:1!important;flex:0 1 auto;font:inherit!important;font-weight:var(--v19-task-menu-font-weight)!important;margin:0!important}
.v19-task-menu :is(.subtask-panel>.section-head,.v18-comments-head)>:is([data-v38-add],[data-v18-comments-add]){order:2!important;margin-left:auto!important}
.v19-task-menu :is(.subtask-panel>.section-head,.v18-comments-head)>.v19-count{order:3!important;margin:0 0 0 6px!important}
.v19-task-menu :is(.subtask-panel>.section-head,.v18-comments-head)>button{
  flex:0 0 auto;width:30px;height:30px;padding:0!important;border:0!important;background:transparent!important;color:var(--accent)!important;
  display:grid!important;place-items:center;
}
.v19-task-menu :is(.subtask-panel>.section-head,.v18-comments-head)>button :is(.v22-icon,.v18-plus,span){width:20px!important;height:20px!important;font-size:20px;line-height:1}
/* (74г) На мобильной ширине кнопка «+» Подзадач (design/mobile-controls.css,
 * `--dolijane-mobile-control-size`, 34px) и кнопка «+» Комментариев (никакого
 * класса не несёт, попадает под другое мобильное правило, живой замер —
 * 44px) расходились в размере — из-за этого те же самые «+» на глаз ещё и
 * не выстраивались по одной горизонтали (обе прижаты к правому краю через
 * margin-left:auto, но при разной ширине кнопки её левый край/зрительный
 * центр гуляет). Тройной якорь `.v19-task-menu`, чтобы гарантированно
 * перебить оба конкурирующих мобильных правила независимо от того, в каком
 * файле/порядке они загружены — тот же приём, что и везде в этом файле. */
@media(max-width:1024px){
  .v19-task-menu.v19-task-menu.v19-task-menu :is(.subtask-panel>.section-head,.v18-comments-head)>button{
    width:44px!important;height:44px!important;min-width:44px!important;min-height:44px!important;max-width:44px!important;max-height:44px!important;
  }
}
.v19-task-menu :is(.subtask-panel>.section-head,.v18-comments-head)>[data-v38-add]>svg{display:none}
.v19-task-menu :is(.subtask-panel>.section-head,.v18-comments-head) .v19-count{
  box-sizing:border-box!important;flex:0 0 auto;display:inline-flex!important;align-items:center!important;justify-content:center!important;
  width:30px!important;height:30px!important;min-width:30px!important;padding:0!important;position:static!important;
  border:1px solid var(--line)!important;border-radius:50%!important;background:transparent!important;
  font-size:13px!important;font-weight:600!important;color:var(--muted,#7a7161)!important;
}
.v19-task-menu .v19-count>.v22-icon{display:none!important}
.v19-task-menu .v19-count>.v19-count-n{position:static!important;font:inherit;font-weight:600}

/* нет кнопки «ок»/«Готово» нигде в меню задачи. Раньше требовали ЕЩЁ и класс
 * .v23-system-action на этом же элементе — родной код иногда снимает атрибут
 * hidden РАНЬШЕ, чем успевает навесить этот класс (или у датчика/накопительной
 * этот класс вовсе не совпадает с тем же таймингом), из-за чего кнопка на
 * миг реально показывалась (мигание при вводе названия). Матчим только по
 * aria-label — надёжнее, гонки с классом больше нет. */
/* (29) Уточнение: родная v23DecorateSystemActions() (v23.js) навешивает
 * aria-label="Готово" на ЛЮБУЮ кнопку с подходящим текстом/title, включая
 * статус-кружок подзадачи (title="Готово" у done-статуса) — общее правило
 * выше случайно прятало и ЕГО тоже («у выполненной подзадачи нет кружка»).
 * Кружки (свои, [data-v09-subdone]/[data-task-toggle-done]) явно исключены. */
.v19-task-menu:not(.r21-entity-editor) :is(.save,[aria-label="Готово"],[aria-label="Done"]):not(.v19-nav-back):not([data-v09-subdone]):not([data-task-toggle-done]){display:none!important}

/* ===== доп. правки (меню статуса вверху справа; кружок-глиф; выравнивание; срок; накопительная) ===== */
/* меню смены статуса задачи — держим в правом верхнем углу шапки */
.v19-task-menu>:is(.task-head-v09,.v38-task-head,.v40-goal-head)>:is(.task-top-actions,.v76-task-state-wrap,.v76-task-state-toggle,.v40-head-actions){
  display:flex!important;order:9!important;flex:0 0 auto!important;margin:0 0 0 auto!important;align-self:flex-start!important;
}
.v19-task-menu>.task-top-actions{display:none!important}
/* Кружок-статус в шапке НАКОПИТЕЛЬНОЙ цели стоял не по центру с названием —
 * причина: v41.css отдельно даёт именно .v40-goal-head>.task-state-check
 * align-self:start;margin-top:7px (расчёт под родную, другую по высоте шапку),
 * тогда как в обычном редакторе задачи тот же кружок везде центрируется
 * (.task-head-v09>.task-state-check{align-self:center;margin-top:0}, см.
 * v76.css/v78.css) — выравниваем накопительную шапку так же. */
.v19-task-menu>.v40-goal-head>.task-state-check{align-self:center!important;margin-top:0!important}
.v19-task-menu .v40-goal-head{display:flex!important;align-items:center!important;gap:6px!important;flex-wrap:nowrap!important}
.v19-task-menu :is(.v40-focus,[data-v40-goal-focus],.task-focus,.task-focus-mini){display:none!important}   /* фокус — дубль */
/* «кружок задачи» — только глиф выбранного стиля, без обводки-кнопки и псевдоэлементов */
.v19-task-menu :is(.task-state-check,[data-v40-goal-status]).v23-task-circle{border:0!important;background:transparent!important;box-shadow:none!important;width:22px!important;height:22px!important;min-width:22px!important;padding:0!important}
.v19-task-menu :is(.task-state-check,[data-v40-goal-status]).v23-task-circle::before,
.v19-task-menu :is(.task-state-check,[data-v40-goal-status]).v23-task-circle::after{display:none!important}
.v19-task-menu :is(.task-state-check,[data-v40-goal-status]) .v22-icon{width:22px!important;height:22px!important}
/* «Готово»/«Успех»/«Провал» — родной код красит такой кружок через класс
 * .v23-system-action (заливка var(--accent) + белый значок поверх неё — тот
 * же класс, что у обычных акцентных кнопок). Мы двумя строками выше сняли
 * саму заливку (background:transparent, ради плоского унифицированного
 * вида) — белый значок остался БЕЗ цветной подложки под собой и стал
 * фактически невидимым («белая кнопка» на светлом фоне, замечено
 * пользователем). Красим сам значок в системный акцент вместо белого. */
.v19-task-menu.v19-task-menu.v19-task-menu :is(.task-state-check,[data-v40-goal-status]).v23-task-circle.v23-system-action,
.v19-task-menu.v19-task-menu.v19-task-menu :is(.task-state-check,[data-v40-goal-status]).v23-task-circle.v23-system-action .v22-icon{
  color:var(--accent)!important;
}
/* значки в Подзадачах/Комментариях — по левому краю, как в остальных рядах */
.v19-task-menu :is(.subtask-panel>.section-head,.v18-comments-head){padding-left:12px!important}
.v19-task-menu :is(.subtask-panel>.section-head,.v18-comments-head)>:is([data-v38-more],[data-v18-comments-toggle]){margin:0!important}
.v19-task-menu :is(.subtask-panel>.section-head,.v18-comments-head)>:is([data-v38-more],[data-v18-comments-toggle]) :is(.v22-icon,svg){width:20px!important;height:20px!important}
/* «Срок» — текст не редактируется, всё поле кликабельно (открывает меню «Время») */
.v19-task-menu .time-line{cursor:pointer}
.v19-task-menu .time-line>[data-time-summary]{pointer-events:none;user-select:none;cursor:pointer}
/* теги: имена рядом со значком, в строчку (без обрезки в многоточие) */
.v19-task-menu .v18-artifact-row.tag>button>span:not(.v22-icon),
.v19-task-menu .v18-artifact-row[data-v36-artifact="tag"]>button>span:not(.v22-icon){
  overflow-x:auto!important;text-overflow:clip!important;white-space:nowrap!important;scrollbar-width:none;
}
/* накопительная: «Сумма/За раз» и «≥/≤» — сегментные переключатели; «Завершить числом» — кнопка */
.v19-task-menu .v40-manual-rules{display:inline-flex!important;gap:0!important;border:1px solid var(--line)!important;border-radius:8px!important;overflow:hidden;background:var(--panel,#fff)!important}
.v19-task-menu .v40-manual-rules>button{border:0!important;border-radius:0!important;background:transparent!important;color:var(--muted,#7a7161)!important;padding:6px 12px!important;font-weight:600!important;min-height:32px}
.v19-task-menu .v40-manual-rules>button+button{border-left:1px solid var(--line)!important}
.v19-task-menu .v40-manual-rules>button.active{background:var(--accent)!important;color:#fff!important}
.v19-task-menu .v40-manual-rules>[data-v40-comparison]{padding:6px 14px!important}
.v19-task-menu .v15-number-completion{display:inline-flex!important;align-items:center;gap:0!important;margin-left:6px}
.v19-task-menu .v15-number-completion>input[type="checkbox"]{position:absolute!important;opacity:0!important;width:1px;height:1px;pointer-events:none}
.v19-task-menu .v15-number-completion{border:1px solid var(--line)!important;border-radius:8px!important;padding:4px 8px!important;background:var(--panel,#fff)!important;color:var(--muted,#7a7161)!important;font:inherit!important;font-size:12px!important;font-weight:600!important;cursor:pointer;min-height:32px}
.v19-task-menu .v15-number-completion:has(>input:checked){background:var(--accent)!important;color:#fff!important;border-color:var(--accent)!important}

/* ===== r22: зазоры ещё меньше и единые; меню статуса вертикально; убрать линию под заголовком ===== */
.v19-task-menu,
.v19-task-menu :is(.v38-tag-artifacts,.v76-mobile-task-artifacts,.v36-artifacts,[data-v40-artifacts]){gap:0!important}
.v19-task-menu>:is(.task-head-v09,.v38-task-head,.v40-goal-head){
  margin-bottom:1px!important;box-shadow:none!important;border-bottom:0!important;padding-bottom:0!important;
}
/* единый вертикальный шаг между всеми прямоугольниками = 2px (1px margin у каждого) */
.v19-task-menu :is(.time-line,.v18-priority-row,.v18-artifact-row:not(.v18-artifact-pickers),
                   .subtask-panel,.v18-comments,.v18-artifact-pickers>.v18-reminder){margin:1px 0!important}
.v19-task-menu .v18-artifact-pickers{margin:1px 0!important}
.v19-task-menu .v19-pickers-chips{margin:1px 0 0!important}

/* «Напоминание» — тот же семантический minimum, что у остальных строк. */
.v19-task-menu .v18-artifact-pickers>.v18-reminder{
  height:auto!important;min-height:var(--dj-task-property-min-height,34px)!important;max-height:none!important;
  border:1px solid var(--panel,#fffdf8)!important;
  border-radius:var(--v19-row-radius,10px)!important;
  background:color-mix(in srgb,#8a7a5f 16%,var(--panel,#fffdf8))!important;
}

/* меню смены статуса (справа вверху) — вертикальное */
.v19-task-menu>:is(.task-head-v09,.v38-task-head,.v40-goal-head)>:is(.task-top-actions,.v76-task-state-wrap,.v40-head-actions){
  flex-direction:column!important;align-items:flex-end!important;justify-content:flex-start!important;gap:2px!important;
}
.v19-task-menu>:is(.task-head-v09,.v38-task-head,.v40-goal-head)>.v40-head-actions>button{margin:0!important}

/* r22b: убрать вертикальные «дыры» от пустых структурных блоков и обёрток */
.v19-task-menu>:is(.v38-tag-artifacts,.v76-mobile-task-artifacts,.v36-artifacts,[data-v40-artifacts]){margin:0!important;padding:0!important}
.v19-task-menu>:is([data-v40-special]:empty,[data-v40-artifacts]:empty,.v40-parse-error:empty,.form-grid:empty,div:empty:not([class])){display:none!important}
.v19-task-menu>.task-top-actions{display:none!important}
.v19-task-menu>:is(.subtask-panel,.v18-comments){margin-top:1px!important}

/* r22c: накопительная — короткий ярлык типа в первой строке; меню статуса как в меню задачи */
.v19-task-menu .v19-cumulative-kind{
  align-self:flex-start!important;margin:1px 0 2px!important;padding:3px 9px!important;
  border-radius:8px!important;font-size:12px!important;font-weight:650!important;text-transform:lowercase;
}
.v19-task-menu .v19-cumulative-kind .v22-icon{width:15px!important;height:15px!important;color:#fff!important}
.v19-task-menu .v19-cumulative-kind .v22-icon :is(.v22-main,.v22-echo,.architect-echo)>*{stroke:currentColor!important}
/* в шапке накопительной — нет «Готово» и «Отмена», только действия статуса (как в меню задачи) */
.v19-task-menu .v40-head-actions>[data-v40-goal-close]{display:none!important}
.v19-task-menu .v40-head-actions>button.primary:not([data-v40-goal-fail]):not([data-v40-goal-cancel-task]):not([data-v40-goal-delete]):not([data-v40-goal-close]){display:none!important}

/* ============================================================================
 * r26: меню задачи и накопительной уже (~60% ширины); ряды-прямоугольники —
 *      одна высота 34px, одинаковый шаг 2px, значок и текст слева. Аккуратный
 *      единый проход вместо накопленных r23–r25.
 * ==========================================================================*/
.modal.v19-task-menu{width:62%!important;max-width:62%!important;min-width:300px!important;margin-inline:auto!important}

/* обёртки не добавляют вертикальных отступов */
.v19-task-menu :is(.v38-tag-artifacts,.v76-mobile-task-artifacts,.v40-artifacts,.v36-artifacts,[data-v40-artifacts],[data-v40-special]){display:block!important;margin:0!important;padding:0!important;gap:0!important;border:0!important;background:transparent!important}
.v19-task-menu :is([data-v40-special]:empty,.v40-parse-error:empty){display:none!important}

/* каждый ряд-прямоугольник — общий вид */
.v19-task-menu :is(
  .time-line,.v18-priority-row,
  .v18-artifact-row:not(.v18-artifact-pickers),
  .v18-artifact-pickers>.v18-reminder,
  .subtask-panel>.section-head,.v18-comments-head,
  .v19-desc-row
){
  box-sizing:border-box!important;width:100%!important;
  height:auto!important;min-height:var(--dj-task-property-min-height,34px)!important;max-height:none!important;margin:1px 0!important;padding:0 var(--dj-task-property-padding-x,12px)!important;gap:8px!important;
  display:flex!important;align-items:center!important;justify-content:flex-start!important;text-align:left!important;
  border:1px solid var(--panel,#fffdf8)!important;
  border-radius:var(--v19-row-radius,10px)!important;
  background:color-mix(in srgb,#8a7a5f 16%,var(--panel,#fffdf8))!important;
  box-shadow:none!important;overflow:hidden!important;
}
.v19-task-menu :is(.time-line,.v18-priority-row,.v18-artifact-row:not(.v18-artifact-pickers),.v18-artifact-pickers>.v18-reminder,.subtask-panel>.section-head,.v18-comments-head){height:auto!important;min-height:var(--dj-task-property-min-height,34px)!important;max-height:none!important;flex:0 0 auto!important}
.v19-task-menu .v19-desc-row{height:auto!important;min-height:var(--dj-task-property-min-height,34px)!important;flex:0 0 auto!important;align-items:center!important;padding:var(--dj-task-content-padding-y,6px) var(--dj-task-property-padding-x,12px)!important}
.v19-task-menu :is(.subtask-panel,.v18-comments){margin:1px 0!important;padding:0!important;border:0!important;background:transparent!important;min-height:0!important;height:auto!important}
.v19-task-menu .v18-artifact-pickers{margin:1px 0!important}
.v19-task-menu .v19-pickers-chips{margin:1px 0 0!important}

/* содержимое ряда: ведущий значок фикс 20px, затем текст — слева, в одну линию.
 * Раскладка (flex) — для всех рядов; сброс рамки/фона/паддинга — ТОЛЬКО для кнопки
 * артефакта (она внутри уже обведённого .v18-artifact-row). Прочие перечисленные
 * элементы (.time-line, .v18-priority-row, .v18-reminder, .section-head,
 * .v18-comments-head) сами являются видимым прямоугольником — рамку не трогаем. */
.v19-task-menu :is(
  .v18-artifact-row:not(.v18-artifact-pickers)>button,
  .v18-artifact-pickers>.v18-reminder,
  .v18-priority-row,
  .subtask-panel>.section-head,.v18-comments-head,
  .time-line
){display:flex!important;align-items:center!important;gap:8px!important;justify-content:flex-start!important;box-sizing:border-box!important;min-width:0}
.v19-task-menu .v18-artifact-row:not(.v18-artifact-pickers)>button{width:100%!important;border:0!important;background:transparent!important;padding:0!important}
.v19-task-menu :is(
  .v18-artifact-row:not(.v18-artifact-pickers)>button,
  .v18-artifact-pickers>.v18-reminder,
  .v18-priority-row
)>:is(.v22-icon,.v58-priority-flag,.priority-flag,svg):first-child{order:-1!important;flex:0 0 20px!important;width:20px!important;height:20px!important;margin:0!important}
.v19-task-menu :is(.subtask-panel>.section-head,.v18-comments-head)>:is([data-v38-more],[data-v18-comments-toggle]){order:-1!important;flex:0 0 20px!important;width:20px!important;height:20px!important;margin:0!important;padding:0!important;border:0!important;background:transparent!important;color:var(--muted,#8a7d68)!important}
.v19-task-menu :is(.subtask-panel>.section-head>.section-title,.v18-comments-head>span:first-child){order:0!important;flex:0 1 auto;font:inherit!important;font-weight:var(--v19-task-menu-font-weight)!important;margin:0!important}
.v19-task-menu :is(.subtask-panel>.section-head,.v18-comments-head)>:is([data-v38-add],[data-v18-comments-add]){order:8!important;margin-left:auto!important;flex:0 0 auto}
.v19-task-menu :is(.subtask-panel>.section-head,.v18-comments-head)>.v19-count{order:9!important;flex:0 0 auto;margin:0 0 0 6px!important}
.v19-task-menu :is(.subtask-panel>.section-head,.v18-comments-head)>[data-v38-add]>svg{display:none}

/* «Срок»: значок слева, потом текст; текст не редактируется */
.v19-task-menu .time-line>:is([data-time-open],[data-v40-time-open],button){order:-1!important;flex:0 0 20px!important;width:20px!important;height:20px!important;margin:0!important;padding:0!important;border:0!important;background:transparent!important}
.v19-task-menu .time-line>:is([data-time-summary],.time-summary){order:0!important;flex:0 1 auto;margin:0!important;text-align:left!important;pointer-events:none;user-select:none}
.v19-task-menu .time-line{cursor:pointer}

/* Напоминание — чипы в строчку */
.v19-task-menu .v18-reminder>span:not(.v19-reminder-chips){flex:0 0 auto}
.v19-task-menu .v19-reminder-chips{display:inline-flex!important;gap:4px!important;overflow-x:auto;scrollbar-width:none;margin-left:6px;min-width:0}
.v19-task-menu .v19-reminder-chips::-webkit-scrollbar{display:none}
.v19-task-menu .v19-reminder-chip{flex:0 0 auto;padding:1px 8px;border-radius:999px;border:1px solid color-mix(in srgb,var(--accent) 40%,var(--line));color:var(--accent);font-size:var(--v19-task-menu-secondary-size);font-weight:var(--v19-task-menu-secondary-weight);white-space:nowrap;line-height:var(--v19-task-menu-secondary-line-height)}

/* «Описание» */
.v19-task-menu .v19-desc-row>textarea{width:100%!important;border:0!important;background:transparent!important;outline:0!important;resize:none!important;min-height:22px;max-height:88px;font:inherit;color:inherit;padding:0!important}
.v19-task-menu .v19-desc-row[hidden]{display:none!important}

/* теги: имена рядом со значком, в строчку без многоточия */
.v19-task-menu :is(.v18-artifact-row[data-artifact-row="tag"],[data-artifact-row="stone"],.v18-artifact-row.tag,.v18-artifact-row.stone,[data-v36-artifact="tag"]) :is(span,button){white-space:nowrap!important;overflow:visible!important;text-overflow:clip!important}
.v19-task-menu .v18-artifact-row[data-artifact-row="tag"]{overflow-x:auto!important;scrollbar-width:none}
.v19-task-menu .v18-artifact-row[data-artifact-row="tag"]::-webkit-scrollbar{display:none}

/* «завершить числом» и переключатели — одна строка, шаг как у всех */
/* Ручная: строка меры — наверх формы (сразу под названием), поверх родного
 * order:7 (client-refinements.css). Для датчика это НЕ действует: там сама
 * строка — не прямой flex-ребёнок формы (лежит внутри .v19-datchik-row,
 * см. v19DatchikRow), order на ней самой в этом случае ни на что не влияет. */
.v19-task-menu .v40-measure-row{order:1!important}
.v19-task-menu .v40-measure-row{display:flex!important;align-items:center!important;gap:6px!important;margin:1px 0!important;flex-wrap:nowrap!important;overflow-x:auto!important;scrollbar-width:none;height:auto!important;min-height:var(--dj-task-property-min-height,34px)!important;max-height:none!important}
.v19-task-menu .v40-measure-row::-webkit-scrollbar{display:none}
/* (13) порядок: [Задачи] [≥/≤] [число] [мера] [сумма/за раз] [завершить числом] */
.v19-task-menu .v40-measure-row>label{order:0!important}
.v19-task-menu .v40-measure-row>.v19-measure-cmp{order:1!important;display:inline-flex!important;flex:0 0 auto!important}
/* Ручная строка меры: поля выбора (после значка+подписи «Число») — той же
 * группой к правому краю прямоугольника, как и у датчика (см. auto-отступ
 * на .v19-datchik-cmp-text выше) — иначе оставался большой пустой хвост
 * справа. Для датчика это правило не действует — там .v19-measure-cmp
 * скрыт ([hidden]) и margin ни на что не влияет. */
.v19-task-menu .v40-measure-row:not(.v19-datchik-header-row)>.v19-measure-cmp{margin-left:auto!important}
.v19-task-menu .v19-measure-cmp .v19-cmp-locked{opacity:.5!important;cursor:default!important}
/* (12) сравнение и суммарно/за раз — <select>, не кнопки; сами кнопки остаются
 * в разметке (источник истины/обработчик клика для родного кода), но скрыты. */
.v19-task-menu .v19-measure-cmp [data-v40-comparison][hidden],
.v19-task-menu [data-v40-measure-action] [data-v40-mode][hidden]{display:none!important}
.v19-task-menu .v19-measure-cmp>select.v19-cmp-select,
.v19-task-menu [data-v40-measure-action]>select.v19-mode-select{
  min-width:0!important;flex:0 1 auto!important;
  height:22px!important;min-height:22px!important;box-sizing:border-box!important;
  font:inherit!important;font-size:11px!important;padding:0 4px!important;
  border:1px solid var(--line)!important;border-radius:7px!important;background:var(--panel,#fff)!important;
  color:var(--ink)!important;text-overflow:ellipsis;
}
/* (6) select показывает символ (≥/≤), как родные кнопки — полный текст
 * («больше или равно») остаётся в title-подсказке. Узкая дорожка, чтобы
 * вся строка меры помещалась на мобильном экране целиком. */
.v19-task-menu .v19-measure-cmp>select.v19-cmp-select{max-width:44px!important;text-align:center;text-align-last:center}
.v19-task-menu [data-v40-measure-action]>select.v19-mode-select{max-width:100px!important}
.v19-task-menu .v19-measure-cmp>select.v19-cmp-select:disabled{opacity:.6!important;cursor:default!important}
.v19-task-menu .v40-measure-row>input[name="target"]{order:2!important}
.v19-task-menu .v40-measure-row>select[name="unit"]{order:3!important}
/* «Завершить числом» переставлен ПЕРЕД переключателем сумма/за раз: на узком
 * экране ряд всё равно не помещается целиком (даже после сокращения полей) и
 * остаётся горизонтально прокручиваемым — но «Завершить числом» ВАЖНЕЕ и
 * должно быть видно без прокрутки, а переключатель режима можно долистать. */
.v19-task-menu .v40-measure-row>[data-v40-measure-action]{order:5!important;flex:0 0 auto!important;width:auto!important}
/* v84.css форсирует [data-v40-measure-action]{width:100%!important} на ширинах
 * ≤1024px (нативный «перенос действия на свою строку» для мобильных) — из-за
 * этого весь ряд меры раздувался на всю ширину экрана, хотя внутри только
 * узкий select. Перебиваем именно width (flex-grow/shrink уже сброшены выше,
 * но width — отдельное свойство, шорткод flex его не трогает). */
@media(max-width:1024px){.v19-task-menu .v40-measure-row>[data-v40-measure-action]{width:auto!important;flex:0 0 auto!important}}
.v19-task-menu .v40-measure-row>.v15-number-completion{order:6!important;flex:0 0 auto!important;white-space:nowrap!important}
/* «Завершить числом» → выбор «Одна попытка»/«Много попыток» (см.
 * v19CompletionModeSelect) — родной чекбокс скрыт (логика читается ТОЛЬКО
 * через его checked/onchange, см. JS), наш select стоит на его прежнем
 * месте в строке меры, тот же визуальный язык, что у select'ов сумма/за раз
 * и сравнения рядом. */
.v19-task-menu .v15-number-completion.v19-completion-native{display:none!important}
.v19-task-menu .v40-measure-row>select.v19-completion-select{
  order:6!important;flex:0 1 auto!important;min-width:132px!important;
  height:22px!important;min-height:22px!important;box-sizing:border-box!important;
  font:inherit!important;font-size:11px!important;padding:0 8px!important;
  border:1px solid var(--line)!important;border-radius:8px!important;background:var(--panel,#fff)!important;
  color:var(--ink)!important;
}

/* Строка меры ручной накопительной — прямоугольник ТОГО ЖЕ вида, что «Срок»/
 * «Приоритет» и т.п. (переиспользуем формулу фона/рамки/радиуса — не
 * изобретаем новую). Только для ручной ветки — у датчика своя обёртка
 * .v19-datchik-header-row ниже (аналог строки подзадачи). */
.v19-task-menu .v40-measure-row:not(.v19-datchik-header-row){
  box-sizing:border-box!important;
  border:1px solid var(--panel,#fffdf8)!important;
  border-radius:var(--v19-row-radius,10px)!important;
  background:color-mix(in srgb,#8a7a5f 16%,var(--panel,#fffdf8))!important;
  padding:0 10px!important;margin:0 0 1px!important;
}
/* Ведущие значок «123»/подпись «Число» ручной строки меры (см. v19DatchikRow,
 * ветка !selfTasks). Подпись — тот же шрифт/размер/цвет, что у «Приоритет N»
 * (.v19-priority-label: 14px/600/#1a1a1a, живой замер), значок — 20px, как
 * все ведущие значки строк-прямоугольников (см. общее правило ниже). */
.v19-task-menu .v40-measure-row>.v19-manual-number-icon{order:-3!important;flex:0 0 auto!important;display:grid;place-items:center;width:20px!important;height:20px!important;color:var(--ink)}
.v19-task-menu .v40-measure-row>.v19-manual-number-icon .v22-icon{width:20px!important;height:20px!important;color:inherit!important}
.v19-task-menu .v40-measure-row>.v19-manual-number-label{order:-2!important;flex:0 0 auto!important;white-space:nowrap;font-size:14px;font-weight:600;color:#1a1a1a}
/* Датчик: строка меры сама становится «шапкой» — та же формула фона/рамки,
 * но раскладка иная (стрелка+«Датчик» слева, «≥/число/мера/+» справа), и она
 * лежит внутри общей обёртки .v19-datchik-row вместе со сворачиваемым
 * списком критериев под ней (аналог «строки подзадачи» — заголовок + список). */
/* margin-top тоже 1px (не только bottom) — иначе шаг «шапка → строка датчика»
 * получался 1px вместо общих 2px (1px+1px), как у всех остальных рядов.
 * Одного !important мало: .v19-task-menu>*{margin-top:0!important} (общий
 * сброс, ниже по файлу) имеет ТУ ЖЕ специфичность (0,1,0) и стоит ПОЗЖЕ в
 * файле — при равной специфичности и важности побеждает последний по
 * порядку. Добавляем предок .v19-task-menu в сам селектор — специфичность
 * (0,2,0) выше, порядок в файле уже не имеет значения. */
/* (47) «Датчик» — по прямой просьбе пользователя перенесён НИЖЕ, после
 * выбора артефактов (обёртка артефактов/пикера — order:5, см. reshapeHeads/
 * родная разметка) — было order:0 (родное значение по умолчанию, никто
 * явно не задавал), из-за чего ряд физически оказывался ПЕРВЫМ в форме,
 * ещё выше «Срока». order:6 ставит его сразу после артефактов, перед
 * Комментариями (order:70). */
.v19-task-menu .v19-datchik-row{display:block;order:6!important;margin:1px 0!important}
.v19-task-menu .v40-measure-row.v19-datchik-header-row{
  box-sizing:border-box!important;width:100%!important;height:auto!important;min-height:var(--dj-task-property-min-height,34px)!important;max-height:none!important;
  display:flex!important;align-items:center!important;gap:8px!important;
  border:1px solid var(--panel,#fffdf8)!important;
  border-radius:var(--v19-row-radius,10px)!important;
  background:color-mix(in srgb,#8a7a5f 16%,var(--panel,#fffdf8))!important;
  padding:0 10px!important;margin:0!important;overflow:visible!important;
}
/* Утроенный якорь для фона отдельно — `.v40-measure-row` явно входит в
 * список classic-темы (project-ideas-r21.css), см. комментарий у базовой
 * формулы рядов выше по файлу.
 * (66) По прямой просьбе пользователя — прямоугольник «Датчик» именно
 * цвета фона задачи (var(--panel)), НЕ тёплого тона, как остальные
 * прямоугольники стека — сознательное исключение (пользователь дважды
 * отметил, что фон «Датчика» «сейчас не такой» после предыдущей
 * унификации на тёплый тон). */
.v19-task-menu.v19-task-menu.v19-task-menu .v40-measure-row.v19-datchik-header-row{
  background:var(--panel,#fffdf8)!important;
  border-color:var(--panel,#fffdf8)!important;
}
/* (60) «+» добавить критерий выравнивался с «+» Подзадач/Комментариев через
 * искусственный запас padding-right:56px (см. историю ниже) — по прямой
 * новой просьбе у «Датчика» теперь есть СВОЙ кружок-счётчик количества
 * критериев (см. v19DatchikRow, JS), той же формулы .v19-count, что у
 * Подзадач/Комментариев — искусственный запас больше не нужен, реальный
 * кружок занимает то же место естественно, тем же способом, что и у них.
 * (было: «У «Датчика» такого кружка нет, поэтому его «+» без поправки
 * уезжал вплотную к правому краю» — счётчик снимает саму причину.) */
.v19-task-menu .v40-measure-row.v19-datchik-header-row>.v19-count{order:4!important;flex:0 0 auto!important;margin:0 0 0 6px!important}
.v19-datchik-toggle{order:-2!important;flex:0 0 auto!important;display:grid;place-items:center;width:18px;height:18px;padding:0;border:0;background:transparent;color:var(--ink)}
.v19-datchik-toggle .v22-icon{width:16px;height:16px}
/* Шрифт текста «Датчик» — по прямой просьбе пользователя такой же, как у
 * «Комментарии»/«Подзадачи» (var(--v19-task-menu-font-weight), не отдельный
 * захардкоженный 650, см. правило для .v18-comments-head>span:first-child). */
.v19-datchik-label{order:-1!important;flex:0 0 auto!important;font:inherit!important;font-weight:var(--v19-task-menu-font-weight)!important;white-space:nowrap}
/* Текст «больше или равно» и поля числа/меры — сдвинуты вправо (ближе к
 * кнопке «+»), а не сразу после подписи «Датчик»: auto-отступ ставим на
 * ПЕРВОМ элементе этой правой группы (cmp-text), а не на самой кнопке «+» —
 * иначе при двух auto-отступах flexbox растащил бы ещё и «+» от полей. */
.v19-datchik-cmp-text{order:0!important;flex:0 0 auto!important;margin-left:auto!important;color:var(--muted);white-space:nowrap;font-size:var(--v19-task-menu-secondary-size);font-weight:var(--v19-task-menu-secondary-weight);line-height:var(--v19-task-menu-secondary-line-height)}
.v19-task-menu .v40-measure-row.v19-datchik-header-row>.v19-measure-cmp[hidden]{display:none!important}
.v19-task-menu .v40-measure-row.v19-datchik-header-row>select[name="unit"]{order:2!important}
.v19-task-menu .v40-measure-row.v19-datchik-header-row>input[name="target"]{order:1!important}
.v19-task-menu .v40-measure-row.v19-datchik-header-row [data-v40-measure-action]{order:3!important}
[data-v40-special][hidden]{display:none!important}
/* Вертикальный шаг у критериев — тот же 2px, что и между всеми остальными
 * прямоугольниками меню (не свои 4px/4px, как было). Живым замером найдено:
 * родной внутренний .v40-source-lines (v41.js) НЕСЁТ СВОЙ margin-top:5px
 * поверх нашего margin-top:2px на обёртке — суммарно получалось 7-8px
 * вместо 2px («явно не 2px», по фидбеку). Зануляем родной отступ явно. */
/* (52) По прямой просьбе пользователя — расстояние между критериями по
 * вертикали ноль («тот же обработчик, что и у прямоугольников выше» — та
 * же система нулевого зазора + скругление только у крайних, см.
 * v19StackEdges, а НЕ у каждого критерия по отдельности). gap/margin-top
 * были 2px — занулены. */
/* (58) padding-left:26px (отступ «вложено под Датчик») убран по прямой
 * новой просьбе — критерии должны быть той же ДЛИНЫ, что и верхние
 * прямоугольники (Срок/Приоритет), т.е. начинаться с той же левой границы,
 * а не быть уже/сдвинуты правее из-за лишнего отступа контейнера. */
.v19-datchik-criteria{display:grid;gap:0;margin-top:0}
.v19-datchik-criteria .v40-source-lines{margin-top:0!important;gap:0!important}
/* Строка критерия — ПОПРАВКА: не тон прямоугольников (было color-mix с
 * #8a7a5f, как у «Датчик»/«Срок»), а цвет фона самой задачи (var(--panel)),
 * без подкраски — по прямой просьбе пользователя («должен быть цвета фона
 * задачи»). Рамка — обычная var(--line), тоже без подкраски, только чтобы
 * строки отделялись друг от друга. Не родной плоский белый (v41.css:
 * border:1px solid var(--line);background:#fff) — фон именно от темы
 * (var(--panel)), не жёсткий #fff. */
/* (49→51б→52) По прямой просьбе пользователя — выбранные критерии
 * визуализируются по тем же правилам, что и прямоугольники-чипы
 * артефактов: цвет/высота/длина — как у них (22px, финальный размер
 * чипа-артефакта после (53), а не 34px как было на предыдущем шаге).
 * border-radius СЮДА больше не пишем явно — критерии подключены к общей
 * системе стека (§164/166: default прямые углы + скругление только у
 * фактически первого/последнего через .v19-stack-first/.v19-stack-last,
 * см. v19StackEdges) — жёсткий radius:var(--v19-row-radius) здесь раньше
 * ПЕРЕБИВАЛ её, каждый критерий скруглялся сам по себе вместо скругления
 * только по краям всей группы (та же ошибка класса «забыл, что этот ряд
 * уже подключён к общему механизму» — см. урок в §164 про :is()). Значок —
 * свой цвет (--artifact-color, та же поправка (53)), не системный. */
/* (56) Реальная причина, почему критерий выглядел не как чип, а как
 * старая полноразмерная строка: `.v42-source-line` — это ВНЕШНИЙ div
 * (рамка/фон уже стилизовались правильно), но значок+текст живут во
 * ВЛОЖЕННОЙ кнопке `[data-v40-source-line]` (родная разметка, v41.js:
 * `<div class="v42-source-line"><button data-v40-source-line
 * style="color:${v40SourceColor(row)}">…значок+текст…</button><button
 * data-v40-source-delete>✕</button></div>`) — свой цвет источника лежит
 * ИНЛАЙН на ЭТОЙ кнопке (`style="color:…"`, обычный CSS color, НЕ
 * custom-property — другой механизм, чем `--artifact-color` у тэгов) и
 * раньше никак не учитывался: внешний div высоту/фон получал, а
 * внутренняя кнопка со значком жила своей нативной раскладкой (родной
 * полноразмерный вид). Правильный фикс — не пытаться читать
 * несуществующую здесь custom-property, а дать значку `color:inherit`,
 * чтобы он подхватил РОДНОЙ инлайн-цвет кнопки через обычное CSS-наследование
 * (у `.v22-icon` иначе свой цвет по умолчанию, наследование блокируется). */
/* (58) Реверс (57)/(51б): по прямой новой просьбе пользователя критерии
 * снова красятся как ВЕРХНИЕ прямоугольники (Срок/Приоритет/шапка
 * «Датчика»), не как чип-артефакт — тот же тёплый color-mix фон/рамка и та
 * же высота 34px (было: цвет фона задачи, 22px). Ширина — уже 100% через
 * общую сетку строк стека, отдельно не пишем. */
.v19-task-menu .v19-datchik-criteria .v42-source-line{
  border:1px solid var(--panel,#fffdf8)!important;
  background:color-mix(in srgb,#8a7a5f 16%,var(--panel,#fffdf8))!important;
  width:100%!important;
  height:auto!important;min-height:var(--dj-task-content-min-height,34px)!important;max-height:none!important;box-sizing:border-box!important;
  padding:0!important;
  display:flex!important;align-items:center!important;overflow:hidden!important;
}
.v19-task-menu .v19-datchik-criteria .v42-source-line>[data-v40-source-line]{
  flex:1 1 auto!important;min-width:0!important;height:100%!important;box-sizing:border-box!important;
  display:flex!important;align-items:center!important;gap:6px!important;
  border:0!important;background:transparent!important;padding:0 8px!important;font:inherit!important;
}
/* Шрифт текста строк-критериев — по прямой новой просьбе такой же
 * стиль/размер, как у «Приоритет» (.v19-priority-label: 14px/600/#1a1a1a,
 * живой замер) — заменяет предыдущий грубый font-weight:700 («жирным») на
 * точное значение. Цвет НЕ трогаем — он свой (--artifact-color через
 * наследование color:inherit от родной инлайн-кнопки, см. (56) выше). */
.v19-task-menu .v19-datchik-criteria .v42-source-line>[data-v40-source-line]>span{overflow:hidden!important;text-overflow:ellipsis!important;white-space:nowrap!important;font-size:var(--v19-task-menu-font-size)!important;font-weight:var(--v19-task-menu-font-weight)!important;line-height:var(--v19-task-menu-line-height)!important}
.v19-task-menu .v19-datchik-criteria .v42-source-line>[data-v40-source-delete]{
  flex:0 0 22px!important;height:100%!important;width:22px!important;
  border:0!important;background:transparent!important;color:var(--muted,#8a7d68)!important;padding:0!important;
  display:flex!important;align-items:center!important;justify-content:center!important;
}
.v19-task-menu .v19-datchik-criteria .v42-source-line :is(.v22-icon,svg){color:inherit!important;width:14px!important;height:14px!important;flex:0 0 14px!important}
.v19-datchik-criteria[hidden]{display:none!important}
/* Кнопка «+» добавить критерий — была залитой кнопкой системного цвета
 * (родная .btn.primary); по просьбе пользователя — простая плоская кнопка со
 * значком «+», тот же визуальный язык, что у «+» добавить комментарий
 * (см. правило [data-v18-comments-add] выше: 30×30, прозрачный фон, без
 * рамки, цвет — акцент, глиф «+» вместо родного значка). */
.v19-task-menu [data-v40-add-source]{
  width:30px!important;height:30px!important;min-width:30px!important;padding:0!important;
  border:0!important;background:transparent!important;color:var(--accent)!important;
  display:grid!important;place-items:center;
}
.v19-task-menu [data-v40-add-source] svg{display:none!important}
.v19-task-menu [data-v40-add-source]::after{content:"+";font-size:22px;line-height:1}

/* r26b: чипы выбора артефактов — слово по центру по вертикали, значок ~16px,
 *       горизонтальный зазор 3px, по вертикали чуть ниже */
.v19-task-menu .v19-pickers-chips{gap:3px!important}
.v19-task-menu .v19-pickers-chips>button{
  min-height:0!important;height:28px!important;padding:0 8px!important;
  display:inline-flex!important;align-items:center!important;gap:5px!important;line-height:1!important;
}
.v19-task-menu .v19-pickers-chips>button>span{line-height:1!important;display:inline-flex!important;align-items:center!important}
.v19-task-menu .v19-pickers-chips>button>:is(.v22-icon,svg){flex:0 0 16px!important;width:16px!important;height:16px!important;margin:0!important}

/* r26c: убрать flex-gap контейнера-формы и любые отступы обёрток —
 *       тогда вертикальный шаг = только margin рядов (2px) и он одинаков ВЕЗДЕ */
.v19-task-menu{gap:0!important}
.v19-task-menu>*,
.v19-task-menu :is(.v38-tag-artifacts,.v76-mobile-task-artifacts,.v40-artifacts,.v36-artifacts,[data-v40-artifacts],[data-v40-special])>*{margin-top:0!important}
.v19-task-menu :is(.time-line,.v18-priority-row,.v18-artifact-row:not(.v18-artifact-pickers),
                   .v18-artifact-pickers,.v18-artifact-pickers>.v18-reminder,.v19-pickers-chips,
                   .subtask-panel,.v18-comments,.v19-desc-row,.v40-measure-row){margin:1px 0!important}

/* r26d: единый шрифт у всех чипов выбора (в т.ч. «Стена»); не резать «Напоминания»; шаг у .card */
.v19-task-menu .v19-pickers-chips>button,
.v19-task-menu .v19-pickers-chips>button *:not(.v22-icon):not(svg):not(path){
  font:inherit!important;font-size:13px!important;font-weight:600!important;font-style:normal!important;
  color:var(--accent)!important;letter-spacing:normal!important;line-height:1!important;text-transform:none!important;
}
.v19-task-menu .v18-artifact-pickers>.v18-reminder{overflow:visible!important}
.v19-task-menu .v18-artifact-pickers>.v18-reminder>span:not(.v19-reminder-chips){flex:0 1 auto!important;white-space:nowrap!important;overflow:visible!important;min-width:0}
.v19-task-menu .subtask-panel.card{margin:1px 0!important;padding:0!important;box-shadow:none!important;border:0!important;background:transparent!important}
/* контейнеры Подзадач/Комментариев без своих отступов — шаг задаёт только .section-head/head */
.v19-task-menu :is(.subtask-panel,.subtask-panel.card,.v18-comments){padding:0!important;border:0!important}
.v19-task-menu :is(.subtask-panel,.v18-comments)>:is(.section-head,.v18-comments-head){margin:0!important}

/* r26e: «Напоминания» — своя строка на всю ширину внутри строки пикеров (не 34px);
 *       равный вертикальный шаг 2px в блоке артефактов (у block-обёртки схлопывались margin'ы) */
.v19-task-menu .v18-artifact-pickers>.v18-reminder{
  flex:1 1 100%!important;flex-basis:100%!important;width:100%!important;
  justify-content:flex-start!important;
}
/* обёртки артефактов: flex-колонка БЕЗ собственного gap (иначе gap+margin=4px);
 * весь вертикальный шаг задаётся только margin:1px 0 у самих рядов → ровно 2px,
 * и во flex-контейнере margin'ы не схлопываются (в block-обёртке схлопывались до 1px) */
.v19-task-menu .v38-tag-artifacts,
.v19-task-menu .v76-mobile-task-artifacts,
.v19-task-menu .v40-artifacts,
.v19-task-menu .v36-artifacts,
.v19-task-menu [data-v40-artifacts]{
  display:flex!important;flex-direction:column!important;gap:0!important;
  margin:0!important;padding:0!important;border:0!important;background:transparent!important;
}
.v19-task-menu :is(.time-line,.v18-priority-row,.v18-artifact-row,
   .subtask-panel,.v18-comments,.v19-desc-row,.v40-measure-row){margin:1px 0!important}

/* r26i: ряд тэгов — несколько чипов в одну строку ПО СОДЕРЖИМОМУ (не каждый на всю
 * ширину: правило .v18-artifact-row:not(.v18-artifact-pickers)>button{width:100%} (0,4,0)
 * ломало ряд с 2+ тэгами — здесь спец. (0,4,1), перебивает) */
/* (46) Проект/Идея добавлены в этот же список — по прямой находке
 * пользователя (скриншот): их кнопка так и оставалась width:100% (родовое
 * правило было спец-случаем только для тэг/камень/ритуал), из-за чего у
 * унифицированного чипа (§165, свой border/bg) справа от текста тянулась
 * пустая, но всё ещё видимая (рамка!) область на всю ширину ряда. */
.v19-task-menu .v18-artifact-row:not(.v18-artifact-pickers):is([data-artifact-row="tag"],[data-artifact-row="stone"],[data-artifact-row="ritual"],[data-artifact-row="project"],[data-artifact-row="idea"],.tag,.stone,.ritual)>button{
  width:auto!important;flex:0 0 auto!important;max-width:none!important;gap:6px!important;padding:0 2px!important;
}
/* Тэг больше НЕ овал-чип (см. «Тэги/Ритуал/Проект/Стена — как Камни» ниже) —
 * этот override когда-то давал тэгу padding как у «срока»; теперь тэг плоский
 * как Камни, так что явно НЕ переопределяем padding здесь (наследует 0 2px
 * из правила выше, как ritual/stone). Оставлено пустым нарочно — искать
 * актуальный tag-стиль в правиле «камни»-унификации ниже по файлу. */
.v19-task-menu .v18-artifact-row:not(.v18-artifact-pickers):is([data-artifact-row="tag"],[data-artifact-row="stone"],[data-artifact-row="ritual"],.tag,.stone,.ritual)>button>span:not(.v22-icon){
  overflow:visible!important;text-overflow:clip!important;white-space:nowrap!important;
  flex:0 0 auto!important;width:auto!important;min-width:0!important;
}
.v19-task-menu .v18-artifact-row:not(.v18-artifact-pickers):is([data-artifact-row="tag"],[data-artifact-row="stone"],[data-artifact-row="ritual"],.tag,.stone,.ritual){
  gap:8px!important;overflow-x:auto!important;scrollbar-width:none;justify-content:flex-start!important;
}
.v19-task-menu .v18-artifact-row:not(.v18-artifact-pickers):is([data-artifact-row="tag"],[data-artifact-row="stone"],[data-artifact-row="ritual"],.tag,.stone,.ritual)::-webkit-scrollbar{display:none}

/* r26k: задача С выбранными напоминаниями — приложение (mobile-client paintReminder)
 * выносит .v18-reminder в НАЧАЛО формы (host=form при count>0), из-за чего появлялся
 * фантомный отступ ~36px между «приоритетом» и артефактами. Ставим этот прямоугольник
 * на место через flex-order (форма = flex-колонка), без переноса в JS — без DOM-борьбы. */
.v19-task-menu>.v18-reminder{
  order:50!important;
  box-sizing:border-box!important;width:100%!important;height:auto!important;min-height:var(--dj-task-property-min-height,34px)!important;
  max-height:none!important;flex:0 0 auto!important;margin:1px 0!important;padding:0 var(--dj-task-property-padding-x,12px)!important;gap:8px!important;
  display:flex!important;align-items:center!important;justify-content:flex-start!important;
  border:1px solid var(--panel,#fffdf8)!important;
  border-radius:var(--v19-row-radius,10px)!important;
  background:color-mix(in srgb,#8a7a5f 16%,var(--panel,#fffdf8))!important;overflow:hidden!important;
}
.v19-task-menu>.v18-reminder>:is(svg,.v22-icon){flex:0 0 20px!important;width:20px!important;height:20px!important;margin:0!important}
.v19-task-menu>.v18-reminder>span:not(.v19-reminder-chips){flex:0 0 auto!important;white-space:nowrap!important}
.v19-task-menu>.v18-reminder>.v19-reminder-chips{display:inline-flex!important;gap:4px!important;overflow-x:auto!important;scrollbar-width:none}
.v19-task-menu>.subtask-panel{order:60!important}
.v19-task-menu>.v18-comments{order:70!important}

/* r26l: порядок в блоке артефактов через flex-order на детях формы —
 * [выбранные артефакты (0)] · [Напоминание (50)] · [ряд пикеров-чипов (55)] · [Подзадачи (60)] · [Комментарии (70)] */
.v19-task-menu>.v18-artifact-pickers{order:55!important;width:100%!important;min-height:0!important;padding:0!important;margin:1px 0!important;overflow:visible!important}
.v19-task-menu>.v18-artifact-pickers>.v19-pickers-chips{margin:0!important}

/* r26o: «Срок» в стиле напоминаний — два чипа: «дата и время» и «длительность».
 * прошлое → красный, будущее / без срока → зелёный. */
.v19-task-menu .time-line>[data-time-summary][hidden]{display:none!important}
.v19-task-menu .time-line>.v19-time-chips{
  display:inline-flex!important;align-items:center!important;gap:6px!important;
  flex:1 1 auto!important;min-width:0!important;overflow-x:auto!important;scrollbar-width:none;
}
.v19-task-menu .time-line>.v19-time-chips::-webkit-scrollbar{display:none}
.v19-task-menu .v19-time-chip{
  padding:1px 8px!important;border-radius:999px!important;border:1px solid currentColor!important;
  font-size:var(--v19-task-menu-secondary-size)!important;font-weight:var(--v19-task-menu-secondary-weight)!important;white-space:nowrap!important;line-height:var(--v19-task-menu-secondary-line-height)!important;
}
/* (64) «Напоминание» — по прямой просьбе красится той же логикой, что и
 * «Срок» (красный/зелёный по статусу дедлайна задачи) — расширяем те же
 * селекторы на .v19-reminder-chip (JS-класс уже проставляется, см.
 * reminderChips()). */
.v19-task-menu :is(.v19-time-chip,.v19-reminder-chip).is-past{color:#b23b3b!important;border-color:#b23b3b!important}
.v19-task-menu .v19-time-chip.is-future{color:#2f7d4f!important;border-color:#2f7d4f!important}
/* (69) Ведущий значок ряда «Срок» — та же схема (красный/зелёный/чёрный),
 * класс v19-line-* ставится на сам .time-line (timeLineChips(), JS).
 * «Чёрный» — фактически системный var(--ink), а не отдельный будущий
 * зелёный: у чипов is-future даёт зелёный (2f7d4f) только под
 * revision23.css в паре с is-ongoing; здесь «без срока»/будущее равно
 * чёрному по прямой просьбе этого раунда (не зелёному). */
.v19-task-menu.v19-task-menu.v19-task-menu .time-line.v19-line-past>:first-child{color:#b23b3b!important}
.v19-task-menu.v19-task-menu.v19-task-menu .time-line.v19-line-ongoing>:first-child{color:#2f7d4f!important}
.v19-task-menu.v19-task-menu.v19-task-menu .time-line.v19-line-today>:first-child{color:#2f7d4f!important}
.v19-task-menu.v19-task-menu.v19-task-menu .time-line.v19-line-future>:first-child{color:var(--ink)!important}
/* (69) Убран безусловный приглушённый цвет длительности — по прямой
 * просьбе текст чипа длительности должен совпадать с цветом рамки, та
 * же логика статуса дедлайна, что и у чипа даты рядом (.v19-time-chip уже
 * несёт is-past/is-ongoing/is-future — JS проставляет тот же класс и на
 * .v19-time-dur, этот безусловный override просто перебивал его). border
 * автоматически совпадёт — базовая формула .v19-time-chip уже
 * border:1px solid currentColor. */

/* ============================================================================
 * r26q — подчистка (13 пунктов + анимация): ширина -30%, вертикальное меню
 * статуса, чистка линий, «Срок», приоритет, напоминания-кружок, «Описание»-значок,
 * накопительные меры, тусклая стрелка при 0, выезд снизу.
 * ========================================================================== */

/* (6) меню задачи всех типов — ещё уже на 30% (было 62% -> ~44%) */
.modal.v19-task-menu{width:44%!important;max-width:44%!important;min-width:330px!important;margin-inline:auto!important}
@media(max-width:900px){.modal.v19-task-menu{width:92%!important;max-width:92%!important;min-width:0!important}}

/* (14) окно ЖЁСТКО фиксируется в центре экрана — position:fixed + transform.
 * ВАЖНО: центрирование и анимация въезда/выезда живут в ОДНОМ свойстве `transform`
 * (не в отдельном `translate`+`transform` одновременно) — раньше центрирование
 * держалось на отдельном CSS-свойстве `translate:-50% -50%`, а анимация — на
 * `transform:translateY(...)`; они ДОЛЖНЫ композироваться (translate применяется
 * до transform по спецификации), но при недостаточной поддержке/своих квирках у
 * конкретного движка рендеринга второе перебивает первое вместо композиции —
 * тогда во время анимации центрирующий сдвиг по X терялся, и окно на подъезде
 * визуально «прилетало от правого угла», а в конце ЗАМЕТНО доскакивало/дёргалось
 * обратно в центр. Один общий `transform` со смещением центрирования, прописанным
 * явно в каждом кадре/состоянии, работает везде одинаково. */
.modal-backdrop.v19-backdrop{overflow:hidden!important}
.modal.v19-task-menu,
.modal-backdrop.v19-backdrop>.modal.v19-task-menu{
  position:fixed!important;left:50%!important;top:50%!important;right:auto!important;bottom:auto!important;
  transform:translate(-50%,-50%)!important;
  margin:0!important;
  /* (14в) верх окна НИКОГДА не за экраном: высота ≤ видимой области, дальше — внутренний скролл */
  max-height:calc(100dvh - 16px)!important;max-height:calc(100vh - 16px)!important;
  overflow-y:auto!important;overscroll-behavior:contain!important;
  will-change:transform;
  /* (14б) плавное расширение меню при добавлении артефактов (~0.2с) */
  transition:max-height .2s ease,width .2s ease!important;
}
/* выезд с самого низа экрана за ~0.45с; уезд туда же до конца при ОК/Cancel.
 * Центрирующий translate(-50%,-50%) прописан явно в КАЖДОМ кадре — никогда не
 * теряется и не должен «доезжать» отдельным скачком. */
@keyframes v19-slide-in{
  from{transform:translate(-50%,-50%) translateY(100vh);opacity:.15}
  to{transform:translate(-50%,-50%) translateY(0);opacity:1}
}
/* Анимация входа — ТОЛЬКО пока JS держит класс .v19-anim-in (снимается через ~520мс).
 * В покое окно без доп. transform, поэтому «замороженные» анимации не оставят его за экраном. */
.modal.v19-task-menu.v19-anim-in{animation:v19-slide-in .45s cubic-bezier(.22,.68,.24,1)}
@media (prefers-reduced-motion: reduce){.modal.v19-task-menu.v19-anim-in{animation:none!important}}
.modal-backdrop.v19-leaving{pointer-events:none}
.modal-backdrop.v19-leaving>.modal.v19-task-menu{
  animation:none!important;transition:transform .42s cubic-bezier(.5,0,.75,.4),opacity .42s ease!important;
  transform:translate(-50%,-50%) translateY(100vh)!important;opacity:.1!important;
}

/* (7) убрать лишние горизонтальные линии во всех меню задачи */
.v19-task-menu hr,
.v19-task-menu .modal-actions,
.v19-task-menu>:is(.task-head-v09,.v38-task-head,.v40-goal-head){border-top:0!important;border-bottom:0!important;box-shadow:none!important}
.v19-task-menu :is(.v40-special,[data-v40-special],.v40-measure-row,.v40-manual-block,.v40-goal-body,.subtask-panel,.v18-comments,.v38-tag-artifacts,.v76-mobile-task-artifacts,.v36-artifacts){border-top:0!important;border-bottom:0!important}
.v19-task-menu :is(.section-note,.v40-hint,.v40-divider,.divider){border:0!important}

/* (10) напоминания: без слова «Напоминания», счётчик в кружке справа (как у комментариев) */
.v19-task-menu :is(.v18-artifact-pickers>.v18-reminder,.v19-task-menu>.v18-reminder,.v18-reminder){
  justify-content:flex-start!important;gap:8px!important;
}
.v19-task-menu .v18-reminder>.v19-count{margin-left:auto!important;flex:0 0 auto!important}
.v19-task-menu .v19-count{
  box-sizing:border-box;display:inline-flex;align-items:center;justify-content:center;
  width:30px;height:30px;border:1px solid var(--line);border-radius:50%;
  color:var(--muted,#8a7d68);font-weight:600;font-size:13px;flex:0 0 30px;
}
.v19-task-menu .v19-count>.v19-count-n{font:inherit;font-weight:600}

/* (9) стрелка раскрытия при 0 подзадач/комментариев — неактивна и тусклая */
.v19-task-menu .v19-toggle-dead{opacity:.5!important;cursor:default!important}
.v19-task-menu .v19-toggle-dead:active{transform:none!important}

/* (9) кнопка ОК у поля «добавить комментарий» */
.v19-task-menu .v18-comment-composer[hidden]{display:none!important}
.v19-task-menu .v18-comment-composer:not([hidden]){display:flex!important;align-items:center;gap:6px;flex-wrap:nowrap}
.v19-task-menu .v18-comment-composer>textarea{flex:1 1 auto;min-width:0}
/* (3)+(9) точечные inline-подтверждения (одна запись добавляется, диалог/меню
 * остаётся открытым): комментарий, строчки добавления напоминания в меню
 * «Напоминания». ВАЖНО, уточнено пользователем: НЕ круг (border-radius:50% —
 * это фигура для кнопок, которые ЗАКРЫВАЮТ весь диалог целиком, см.
 * [data-v17-time-save]/[data-v17-time-cancel] ниже) — и НЕ придуманная нами
 * форма (был неверный clip-path-«лемон»), а буквально та же самая готовая
 * нативная кнопка ОК/Отмена, что и в редакторе тэга (`v26-tag-editor`):
 * класс `.v31-dialog-icon` (36×36px, border-radius:6px, см. v31.css/v31.js),
 * который мы теперь просто навешиваем в JS (task-menu-r19.js: v19-comment-ok
 * создание + openReminders→paintOkIcons) — здесь ничего переопределять не
 * нужно, форма приходит из v31.css как есть. */
.v19-task-menu .v19-comment-ok :is(svg,.v22-icon),
.v80-notification-add [data-v80-notification-add] :is(svg,.v22-icon),
.v80-notification-add [data-v80-notification-add-at] :is(svg,.v22-icon){color:#fff}
.v80-notification-add [data-v80-notification-add] .v22-icon :is(.v22-main,.v22-echo,.architect-echo)>*,
.v80-notification-add [data-v80-notification-add-at] .v22-icon :is(.v22-main,.v22-echo,.architect-echo)>*{stroke:currentColor!important}

/* (3)+(11) Меню срока и напоминаний переиспользуют одни и те же ОК/Отмена
 * (data-v17-time-save/cancel) — родной v31.js навешивает класс .v31-dialog-icon
 * (круг) уже ПОСЛЕ первой отрисовки (через MutationObserver), из-за чего кнопка
 * на миг рисуется овалом от родного .btn и только потом становится кругом.
 * Стилизуем по функциональным атрибутам НАПРЯМУЮ — круг сразу, без перерисовки. */
.v19-task-menu :is([data-v17-time-cancel],[data-v17-time-save]),
.v19-reminder-dialog :is([data-v17-time-cancel],[data-v17-time-save]),
.time-menu :is([data-v17-time-cancel],[data-v17-time-save]){
  display:grid!important;place-items:center!important;width:36px!important;min-width:36px!important;
  height:36px!important;padding:7px!important;border-radius:50%!important;
  background:var(--accent)!important;border-color:var(--accent)!important;color:#fff!important;
}

/* (3) меню статуса — вертикальный список, поверх окна, в экран, без овалов.
 *     Приложение отдаёт РАЗНЫЕ обёртки: .v76-task-state-wrap (телефон) и
 *     .task-top-actions>.v84-state-wrap (десктоп). Плюс наш синтез [data-v19-state-menu]. */
.v19-task-menu :is(.v76-task-state-wrap,.v84-state-wrap,.task-top-actions){position:relative!important;overflow:visible!important;background:transparent!important;border:0!important;box-shadow:none!important;padding:0!important}
.v19-task-menu:has(:is(.v76-task-state-popover,.v84-state-wrap>div,.task-state-popover):not([hidden])){overflow:visible!important}
.v19-task-menu>:is(.task-head-v09,.v38-task-head,.v40-goal-head){overflow:visible!important}
/* [hidden] должен реально прятать панель — наши display-правила его НЕ перебивают */
.v19-task-menu :is(.v76-task-state-popover,.v84-state-wrap>div,.task-state-popover)[hidden]{display:none!important}
/* всплывающая панель (любой из вариантов) — только когда открыта */
.v19-task-menu :is(.v76-task-state-popover,.v84-state-wrap>div,.task-state-popover):not([hidden]){
  position:absolute!important;right:0!important;top:calc(100% + 4px)!important;left:auto!important;bottom:auto!important;
  z-index:1200!important;min-width:180px!important;width:max-content!important;max-width:min(82vw,250px)!important;
  max-height:min(62vh,calc(100dvh - 110px))!important;overflow-y:auto!important;
  display:flex!important;flex-direction:column!important;gap:2px!important;
  padding:6px!important;border:1px solid var(--line)!important;border-radius:12px!important;
  background:var(--panel,#fffdf8)!important;box-shadow:0 16px 40px rgba(20,18,15,.22)!important;
}
.v19-task-menu :is(.v76-task-state-popover,.v84-state-wrap>div,.task-state-popover):not([hidden])>.task-state-actions{display:contents!important}
.v19-task-menu :is(.v76-task-state-popover,.v84-state-wrap>div,.task-state-popover):not([hidden]) button{
  display:flex!important;align-items:center!important;justify-content:flex-start!important;gap:10px!important;
  width:100%!important;min-height:36px!important;padding:6px 10px!important;margin:0!important;
  border:0!important;border-radius:8px!important;background:transparent!important;color:var(--ink)!important;
  font:inherit!important;font-weight:600!important;text-align:left!important;cursor:pointer;box-shadow:none!important;
}
.v19-task-menu :is(.v76-task-state-popover,.v84-state-wrap>div,.task-state-popover) button:hover{background:color-mix(in srgb,var(--accent) 12%,transparent)!important}
.v19-task-menu :is(.v76-task-state-popover,.v84-state-wrap>div,.task-state-popover) button :is(svg,.v22-icon){flex:0 0 20px!important;width:20px!important;height:20px!important;margin:0!important}
.v19-task-menu :is(.v76-task-state-popover,.v84-state-wrap>div,.task-state-popover) button .v18-state-label{font:inherit!important;flex:0 1 auto!important;display:inline!important}
/* кнопка-переключатель «стрелка вниз» без овала */
.v19-task-menu :is(.v76-task-state-toggle,.v84-state-wrap>button,.task-top-actions>.v84-state-wrap>button,[data-v76-task-state-toggle]){
  border:0!important;background:transparent!important;box-shadow:none!important;padding:0!important;
  width:26px!important;height:26px!important;min-width:26px!important;color:var(--muted,#8a7d68)!important;
}
.v19-task-menu :is(.v76-task-state-toggle,.v84-state-wrap>button,[data-v76-task-state-toggle]) :is(svg,.v22-icon){width:22px!important;height:22px!important}

/* (4) накопительная: ярлык «ручная/автоматическая» в шапке — по просьбе
 * пользователя убран целиком (и для датчика, и для ручной): строка меры/
 * датчика уже несёт свою подпись («Число»/«Датчик»), дублирующий ярлык в
 * правом верхнем углу шапки больше не нужен. */
.v19-task-menu .v19-cumulative-kind{display:none!important}
.v19-task-menu>:is(.task-head-v09,.v38-task-head,.v40-goal-head)>.v19-cumulative-kind.v19-kind-inline{
  order:8!important;margin:0 6px 0 auto!important;align-self:center!important;
  padding:3px 9px!important;font-size:12px!important;text-transform:lowercase;flex:0 0 auto!important;
}
.v19-task-menu>:is(.task-head-v09,.v38-task-head,.v40-goal-head)>:is(.v76-task-state-wrap,.v84-state-wrap,.task-top-actions,.v40-head-actions,[data-v19-state-menu]){order:9!important;margin-left:auto!important;flex:0 0 auto!important}
/* Правило «margin-left:6px после видимого ярлыка датчик/ручная» убрано —
 * сам ярлык (.v19-cumulative-kind) теперь всегда display:none (см. выше),
 * но CSS-соседний селектор (+) matчит его и НЕВИДИМЫМ (display:none не
 * убирает из DOM) — правило с margin-left:6px!important имело БОЛЬШУЮ
 * специфичность, чем margin-left:auto!important выше, и перебивало его:
 * меню статуса переставало быть прижато к правому краю. */
/* (10) значок Заметки, привязанной к задаче — в шапке, слева от меню статуса */
.v19-task-menu>:is(.task-head-v09,.v38-task-head,.v40-goal-head)>.v19-task-note-btn{
  order:8!important;flex:0 0 auto!important;align-self:center!important;margin:0 6px 0 0!important;
  display:inline-flex!important;align-items:center;justify-content:center;
  width:26px!important;height:26px!important;padding:0!important;border:0!important;background:transparent!important;
  color:var(--muted,#8a7d68);cursor:pointer;
}
.v19-task-menu>:is(.task-head-v09,.v38-task-head,.v40-goal-head)>.v19-task-note-btn :is(svg,.v22-icon){width:20px;height:20px}
/* (баг) Родной notes/bootstrap.js на КАЖДЫЙ render() (значит и на самый
 * первый показ формы) сам вставляет ЕЩЁ ОДИН значок заметки — обычной
 * кнопкой ПРЯМО внутрь .v38-tag-artifacts/.v76-mobile-task-artifacts
 * (`host.insertAdjacentHTML('beforeend', ...)`), т.е. отдельным рядом среди
 * рядов формы, а не в шапку. У нас уже есть свой (см. .v19-task-note-btn
 * выше, в шапке) — родной ряд снаружи оказывается ЛИШНИМ дублем: виден
 * при первом открытии формы, пропадает только после следующего render()
 * (когда кто-то ещё раз меняет фокус) — само не самоисправляется мгновенно.
 * Прячем чисто через CSS (никакого JS-таймина/гонки — эффект мгновенный,
 * ни один кадр не покажет дубль): наш собственный значок использует ДРУГОЙ
 * класс (.v19-task-note-btn), это правило его не касается. */
.v19-task-menu [data-notes-for]{display:none!important}

/* (13) приоритет — полная подпись «Приоритет N», цвет текста как у «Подзадачи»/
 * «Комментарии» (обычный, не приглушённый) */
.v19-task-menu .v18-priority-row>span:not(.v22-icon){font:inherit!important;font-weight:var(--v19-task-menu-font-weight)!important;color:var(--ink)!important}
.v19-task-menu .priority-menu button{font:inherit!important}

/* (11) значок «Описание» и общий шрифт текста описания */
.v19-task-menu .v19-desc-row>:is(svg,.v22-icon):first-child{flex:0 0 20px!important;width:20px!important;height:20px!important;margin:0!important;align-self:center!important}
.v19-task-menu .v19-desc-row{gap:8px!important}
.v19-task-menu .v19-desc-row>textarea{font-family:inherit!important;font-size:var(--v19-task-menu-reading-size)!important;font-weight:var(--v19-task-menu-reading-weight)!important;line-height:var(--v19-task-menu-reading-line-height)!important}

/* (11) все ведущие значки рядов — один размер и позиция (20px, слева) */
.v19-task-menu :is(.time-line,.v18-priority-row,.v18-artifact-row:not(.v18-artifact-pickers)>button,.v18-artifact-pickers>.v18-reminder,.subtask-panel>.section-head,.v18-comments-head,.v19-desc-row)>:is(.v22-icon,svg):first-child{
  flex:0 0 20px!important;width:20px!important;height:20px!important;margin:0!important;order:-1!important;
}

/* (5) накопительные меры: поле меры шире, поле числа — под 7-8 знаков; зазор 3px */
.v19-task-menu .v40-measure-row{gap:3px!important}
.v19-task-menu .v40-measure-row :is(select,[data-v40-measure],[name=measure],[name=unit]){min-width:100px!important;height:22px!important;min-height:22px!important;box-sizing:border-box!important;flex:0 0 auto!important;font:inherit!important;font-size:11px!important;padding:0 4px!important}
.v19-task-menu .v40-measure-row input:is([type=number],[type=text],[inputmode=decimal],[inputmode=numeric]){min-width:6.5ch!important;width:7.5ch!important;max-width:76px!important;height:22px!important;min-height:22px!important;box-sizing:border-box!important;flex:0 1 auto!important;font:inherit!important;font-size:11px!important;padding:0 4px!important}
.v19-task-menu .v40-manual-rules{gap:0!important}
.v19-task-menu .v40-manual-rules+.v40-manual-rules,
.v19-task-menu .v40-manual-rules>[data-v40-comparison]{margin-left:3px!important}

/* (8) накопительная считает минуты -> нет своей длительности */
.v19-task-menu .v19-dur-off{opacity:.45!important}
.v19-task-menu .v19-dur-off :is(input,select){pointer-events:none!important}
.v19-task-menu .v19-minutes-note{
  margin:2px 0!important;padding:4px 10px!important;font-size:12px!important;
  color:var(--muted,#8a7d68)!important;font-style:italic;
}

/* r26r: чипы данных в напоминаниях и «Сроке» — фон как у полей задачи (не прозрачные) */
.v19-task-menu :is(.v19-reminder-chip,.v19-time-chip){background:var(--panel,#fffdf8)!important}

/* r26u: скрытый исходный textarea названия иногда раздувается до scrollHeight и
 *       ломает высоту шапки — прячем (значение name=title всё равно уходит в форму). */
.v19-task-menu :is(textarea.v35-title-source,textarea.v22-task-title[aria-hidden="true"],.task-head-v09>textarea[name="title"]){display:none!important;height:0!important}

/* r26y: чипы выбора артефактов не должны «прыгать» в размерах между перерисовками
 *       приложения — единый жёсткий вид и до, и после обёртки в .v19-pickers-chips. */
.v19-task-menu :is(.v18-artifact-pickers,.v19-pickers-chips)>button,
.v19-task-menu .v18-artifact-pickers>button[data-v18-wall-picker],
.v19-task-menu .v18-artifact-pickers>button[data-v36-artifact]{
  /* Единый вид ВСЕХ кнопок выбора артефакта = вид «Напоминание». Фон/рамка —
   * тот же цвет, что у прямоугольников-рядов (было «как у заметки/карточки» —
   * теперь наоборот, специально). Высота — ПОСЛЕ короткого эксперимента с
   * 24px пользователь попросил вернуть как было: РАВНА высоте прямоугольников
   * (34px), шрифт/значки не трогаем. */
  box-sizing:border-box!important;height:34px!important;min-height:34px!important;max-height:34px!important;
  padding:5px 9px!important;margin:0!important;display:inline-flex!important;align-items:center!important;gap:6px!important;
  border:1px solid var(--panel,#fffdf8)!important;border-radius:9px!important;
  background:var(--panel,#fffdf8)!important;color:var(--accent)!important;
  font:inherit!important;font-size:15px!important;font-weight:600!important;line-height:1!important;white-space:nowrap!important;
}
.v19-task-menu :is(.v18-artifact-pickers,.v19-pickers-chips)>button>:is(.v22-icon,svg){flex:0 0 16px!important;width:16px!important;height:16px!important;margin:0!important}
.v19-task-menu :is(.v18-artifact-pickers,.v19-pickers-chips)>button>span{line-height:1!important;font:inherit!important}

/* ===== r27g: доводка (тэги-текст, кружок напоминаний справа) ===== */

/* тэги: имя тэга ВСЕГДА видно (иконка + текст), не сворачивается в 0 */
.v19-task-menu .v18-artifact-row:is([data-artifact-row="tag"],[data-artifact-row="stone"],[data-artifact-row="ritual"],.tag,.stone,.ritual) button>span:not(.v22-icon){
  display:inline-block!important;visibility:visible!important;
  width:auto!important;max-width:none!important;min-width:auto!important;
  overflow:visible!important;clip:auto!important;
  font-family:inherit!important;font-size:var(--v19-task-menu-font-size)!important;font-weight:var(--v19-task-menu-font-weight)!important;line-height:var(--v19-task-menu-line-height)!important;
  color:var(--artifact-color,var(--accent))!important;white-space:nowrap!important;
}
.v19-task-menu .v18-artifact-row:is([data-artifact-row="tag"],[data-artifact-row="stone"],[data-artifact-row="ritual"],.tag,.stone,.ritual) button{
  color:var(--artifact-color,var(--accent))!important;width:auto!important;flex:0 0 auto!important;gap:5px!important;
}
/* .v22-icon сам себе ставит color:var(--accent) (см. v22.css) — это ломает
 * currentColor-каскад от кнопки к иконке (svg-иконка красится в акцент, а не
 * в цвет конкретного тега/проекта). Перебиваем color ИМЕННО на иконке. */
.v19-task-menu .v18-artifact-row:is([data-artifact-row="tag"],[data-artifact-row="stone"],[data-artifact-row="ritual"],[data-artifact-row="project"],[data-artifact-row="idea"],.tag,.stone,.ritual) button>:is(.v22-icon,svg){
  color:var(--artifact-color,var(--accent))!important;
}
/* Тэг — плоский, как Камни (см. ниже): больше не резервируем 36px слева под
 * отдельный «ведущий» значок ряда — он убран, у каждого чипа свой значок. */
.v19-task-menu .v18-artifact-row[data-artifact-row="tag"]{gap:5px!important;position:relative!important}
.v19-task-menu .v18-artifact-row[data-artifact-row="tag"]>.v19-tagrow-icon{
  position:absolute!important;left:12px!important;top:50%!important;transform:translateY(-50%)!important;
  width:18px!important;height:18px!important;display:flex!important;align-items:center!important;justify-content:center!important;
  color:var(--muted,#8a7d68)!important;
}
.v19-task-menu .v18-artifact-row[data-artifact-row="tag"]>.v19-tagrow-icon svg{width:18px!important;height:18px!important}
/* Тэги/Ритуал/Проект/Стена — как Камни: просто значок+надпись цвета
 * артефакта, без овала-фона/рамки (было наоборот, овалом — переигрываем). */
.v19-task-menu .v18-artifact-row[data-artifact-row="tag"]>button{
  border:0!important;border-radius:0!important;padding:0 2px!important;background:transparent!important;
  font-size:inherit!important;font-weight:inherit!important;line-height:inherit!important;
}
.v19-task-menu .v18-artifact-row[data-artifact-row="tag"]>button>:is(.v22-icon,svg):first-child{width:16px!important;height:16px!important;flex:0 0 16px!important}
/* системные тэги (Веха и пр.) тоже с подписью */
.v19-task-menu .v18-artifact-row:is([data-artifact-row="tag"],[data-artifact-row="stone"],[data-artifact-row="ritual"],.tag,.stone,.ritual) button[data-v18-system] span:not(.v22-icon){display:inline-block!important}

/* кружок с числом напоминаний — справа, на одной вертикали с кружками комментариев/подзадач */
.v19-task-menu .v18-reminder{display:flex!important;align-items:center!important;gap:8px!important;padding:0 12px!important}
.v19-task-menu .v18-reminder>.v19-count{order:9!important;margin-left:auto!important;flex:0 0 30px!important}
.v19-task-menu .v18-reminder>.v19-reminder-chips{order:5!important;margin-left:0!important;flex:1 1 auto!important;min-width:0!important}
.v19-task-menu .v18-reminder>:is(svg,.v22-icon):first-child{order:-1!important}
/* (1) Нет напоминаний — кнопка «Напоминание» живёт внутри .v19-pickers-chips,
 * только сбрасываем «строка-прямоугольник» (width:100% и т.п. из правил для
 * состояния «есть срок» выше) — размер/цвет/шрифт берёт из общего правила для
 * .v19-pickers-chips>button (единый вид = вид «Напоминание» для всех кнопок). */
.v19-task-menu .v19-pickers-chips>.v18-reminder{width:auto!important}
.v19-task-menu .v19-pickers-chips>.v18-reminder>.v19-reminder-label{order:0!important;flex:0 0 auto!important;white-space:nowrap!important}

/* r27h: в выпадающем меню статуса — ПОКАЗАТЬ подписи пунктов (были только значки).
 * .v22-icon-button / visually-hidden прятали текст — перебиваем жёстко. */
.v19-task-menu :is(.v76-task-state-popover,.v84-state-wrap>div,.task-state-popover):not([hidden]) button{
  font-size:14px!important;color:var(--ink)!important;
  /* (7) Текст в подписи («Сделать задачей» и т.п.) должен реально помещаться —
   * .v22-icon-button держит кнопку на фиксированных 34px, из-за чего длинная
   * подпись либо обрезалась, либо наезжала на соседнюю кнопку. */
  width:auto!important;flex:0 1 auto!important;gap:6px!important;padding:0 8px!important;
}
.v19-task-menu :is(.v76-task-state-popover,.v84-state-wrap>div,.task-state-popover):not([hidden]) button>span:not(.v22-icon),
.v19-task-menu :is(.v76-task-state-popover,.v84-state-wrap>div,.task-state-popover):not([hidden]) button .v18-state-label{
  position:static!important;clip:auto!important;clip-path:none!important;
  width:auto!important;height:auto!important;max-width:none!important;margin:0!important;padding:0!important;
  overflow:visible!important;white-space:nowrap!important;text-indent:0!important;
  font:inherit!important;font-size:14px!important;font-weight:600!important;line-height:1.2!important;
  color:var(--ink)!important;display:inline!important;opacity:1!important;visibility:visible!important;
}

/* ===== r27i: доводка №2 (тест результата) ===== */

/* (5б) плавный ресайз окна — во время анимации не показываем скролл/дёрганье */
.modal.v19-task-menu.v19-resizing{overflow:hidden!important}

/* (баг) «выбор проекта/задачи в датчике виден внутри окна, а не поверх» —
 * родной v41.css дважды явно пишет `.v40-source-popup{overflow:visible}`
 * (чтобы вложенный абсолютно спозиционированный `.v42-source-dropdown` —
 * список проектов/задач — мог вылезать ЗА пределы попапа), но generic-правило
 * из viewport-ui.css (`:is(...,.v40-popup,...){overflow:auto;max-height:...}`,
 * без !important, но грузится ПОСЛЕ v41.css — специфичность у обоих (0,1,0),
 * позже в каскаде побеждает) сводит это обратно к `overflow:auto` — попап
 * становится маленьким скроллящимся окошком (высота по контенту тулбара,
 * ~50px), и весь список проектов/задач схлопывается ВНУТРЬ него со своим
 * скроллом, а не всплывает поверх. Восстанавливаем родное намерение явно,
 * с приоритетом выше, чем у generic-правила (у него нет !important). */
.v40-source-popup{overflow:visible!important}
/* (4) единый ВЕРТИКАЛЬНЫЙ список у пикера артефактов накопительной задачи
 * (был «облако» инлайн-кнопок в столбик — из-за чего выглядел другим меню, чем у задачи) */
.v40-popup.v40-artifact-popup{
  display:flex!important;flex-direction:column!important;gap:2px!important;
  width:min(280px,calc(100vw - 16px))!important;
}
.v40-popup.v40-artifact-popup>button{
  display:flex!important;align-items:center!important;gap:8px!important;
  width:100%!important;min-height:34px!important;height:auto!important;
  padding:5px 8px!important;border-radius:7px!important;
  text-align:left!important;font:inherit!important;font-weight:600!important;
}
.v40-popup.v40-artifact-popup>button:hover{background:var(--accent-soft,rgba(0,0,0,.06))!important}
.v40-popup.v40-artifact-popup>button .v22-icon{flex:0 0 20px!important;width:20px!important;height:20px!important;color:inherit!important}
.v40-popup.v40-artifact-popup>button>span{color:inherit!important}

/* «Проект / идея»: значок на пункт + цвет; разделительная линия перед первой идеей */
.v36-artifact-picker .v36-artifact-choice.v19-pi-sep{border-top:1px solid var(--line)!important;margin-top:4px!important;padding-top:8px!important}
.v36-artifact-picker .v19-pi-icon{flex:0 0 18px;width:18px;height:18px;display:inline-flex;align-items:center;justify-content:center;color:var(--choice-color,var(--ink))}
.v36-artifact-picker .v19-pi-icon svg{width:18px;height:18px}
/* Значок в списке проектов/идей уже красится в --choice-color (выше), а
 * подпись рядом — нет (для .tag-пикера аналог уже есть ниже, для project/
 * idea не было вовсе) — оставалась чёрной/ink независимо от цвета проекта. */
.v36-artifact-picker:is(.project,.idea) .v36-artifact-choice>span:not(.v19-pi-icon):not(.v22-icon){color:var(--choice-color,var(--ink))!important}

/* Списки БЕЗ множественного выбора (проект/идея) — кружок-радио вместо
 * квадратика-чекбокса: сам чекбокс визуально прячем, рисуем кружок сами.
 * Ритуал — НЕ здесь: задача может входить в несколько ритуалов сразу
 * (multiplechoice), поэтому там остаются обычные квадратики-чекбоксы. */
.v36-artifact-picker:is(.project,.idea) .v36-artifact-choice{gap:10px!important}
.v36-artifact-picker:is(.project,.idea) .v36-artifact-choice>input[type="checkbox"]{
  appearance:none!important;-webkit-appearance:none!important;margin:0!important;
  width:16px!important;height:16px!important;min-width:16px!important;flex:0 0 16px!important;
  border:2px solid color-mix(in srgb,var(--choice-color,var(--ink)) 55%,var(--line))!important;
  border-radius:50%!important;background:transparent!important;position:relative!important;
  box-sizing:border-box!important;cursor:pointer;
}
.v36-artifact-picker:is(.project,.idea) .v36-artifact-choice>input[type="checkbox"]:checked{
  border-color:var(--choice-color,var(--accent))!important;
}
.v36-artifact-picker:is(.project,.idea) .v36-artifact-choice>input[type="checkbox"]:checked::after{
  content:'';position:absolute!important;inset:2.5px!important;border-radius:50%!important;
  background:var(--choice-color,var(--accent))!important;
}
/* (7) Ритуал — квадратики multiplechoice, цвет как у остальных выборов. */
.v36-artifact-picker.ritual .v36-artifact-choice input[type="checkbox"]{
  accent-color:var(--choice-color,var(--accent))!important;
}

/* (9) камни — галочки все ОДНОГО цвета (родное правило красит accent-color
 * каждого чекбокса в цвет его Стены — визуально «разные квадратики»). */
.v36-artifact-picker.stone .v36-artifact-choice input{accent-color:var(--accent)!important}

/* (3)(4) тэги в пикере ЗАДАЧИ — значок + цвет тега (включая системные), вертикальный список уже есть.
 * Камни/Ритуалы — тот же попап-компонент, тот же визуальный язык (значок+цвет
 * у каждого пункта, см. decorateChoiceIcon в task-menu-r19.js) — расширяем
 * те же правила и на них, а не оставляем «голыми» без значка/цвета. */
.v36-artifact-picker.tag .v36-picker-list{display:flex!important;flex-direction:column!important}
.v36-artifact-picker:is(.tag,.stone,.ritual) .v36-artifact-choice{gap:8px!important}
.v36-artifact-picker:is(.tag,.stone,.ritual) .v36-artifact-choice>span:last-child{color:var(--choice-color,var(--ink))!important;font-weight:600!important}
.v36-artifact-picker:is(.tag,.stone,.ritual) .v19-tag-icon{flex:0 0 20px;width:20px;height:20px;display:inline-flex;align-items:center;justify-content:center;color:var(--choice-color,var(--ink))}
.v36-artifact-picker:is(.tag,.stone,.ritual) .v19-tag-icon svg{width:20px;height:20px}
.v36-artifact-picker:is(.tag,.stone,.ritual) .v19-tag-icon .v22-icon{color:inherit!important}
/* Нативное «.v36-artifact-choice.inactive span::after{content:' · inactive'}»
 * (v36.css) писалось до появления нашего значка (второй span в строке) — теперь
 * совпадает с ОБОИМИ span'ами и печатает «· inactive» дважды, один раз сразу
 * после иконки. Гасим псевдоэлемент именно у иконки, оставляя пометку только
 * у текста тэга (как и задумано изначально). */
.v36-artifact-picker.tag .v36-artifact-choice.inactive .v19-tag-icon::after{content:none!important}

/* крестик удаления тэга — по наведению/фокусу на строку; у системных тэгов его нет */
.v36-artifact-picker.tag .v36-artifact-choice{position:relative!important;padding-right:30px!important}
.v36-artifact-picker.tag .v19-tag-delete{
  position:absolute!important;right:6px!important;top:50%!important;transform:translateY(-50%)!important;
  width:22px!important;height:22px!important;display:none;align-items:center;justify-content:center;
  border-radius:6px!important;color:#b23b3b!important;cursor:pointer;
}
.v36-artifact-picker.tag .v19-tag-delete svg{width:16px!important;height:16px!important}
.v36-artifact-picker.tag .v19-tag-delete:hover{background:color-mix(in srgb,#b23b3b 12%,transparent)!important}
.v36-artifact-picker.tag .v36-artifact-choice:hover .v19-tag-delete,
.v36-artifact-picker.tag .v19-tag-delete:focus-visible{display:inline-flex!important}

/* «новый тэг»: чекбокс вместо кнопки ОК */
.v36-new-tag{display:flex!important;align-items:center!important;gap:8px!important;padding-left:7px!important}
.v19-new-tag-check{display:inline-flex!important;align-items:center!important;margin:0!important;cursor:pointer}
.v19-new-tag-check>input{width:17px!important;height:17px!important;margin:0!important;accent-color:var(--accent)!important;cursor:pointer}
/* Обычные чекбоксы тэгов держат браузерный дефолтный margin (не обнулён нигде
 * раньше) — у нового поля margin:0, отсюда видимый сдвиг ~4px между строками.
 * Обнуляем margin и у обычных, чтобы оба чекбокса стартовали от одного края. */
.v36-artifact-picker.tag .v36-artifact-choice input[type="checkbox"]{width:17px!important;height:17px!important;margin:0!important}

/* (14) у задачи «Когда-нибудь» ряда «Срок» нет вовсе — [hidden] должен реально
 * прятать (общее правило .time-line{display:flex!important} выше по файлу
 * не проверяет :not([hidden]), значит перебивает нативный display:none). */
.v19-task-menu .time-line[hidden]{display:none!important}
.v19-task-menu.v19-task-menu.v19-task-menu .time-line[hidden]{display:none!important}

/* окно отмены (удаление тэга) */
.v19-undo-toast{
  position:fixed!important;right:16px!important;bottom:16px!important;z-index:100000!important;
  display:flex!important;align-items:center!important;gap:12px!important;
  padding:10px 14px!important;border-radius:10px!important;
  background:var(--ink,#2a2620)!important;color:#fff!important;
  box-shadow:0 12px 32px rgba(0,0,0,.28)!important;font-size:13px!important;
}
.v19-undo-toast>button{border:0!important;background:transparent!important;color:#f2c94c!important;font-weight:700!important;cursor:pointer;padding:0!important}

/* (7) видимая подпись P1..P4 во ВСЕХ попапах выбора приоритета (не только в меню задачи) */
.priority-menu button,.mini-priority-menu button,.v17-priority-grid button,
.v47-priority-popover button,.v25-priority-picker button{
  width:auto!important;min-width:38px!important;height:auto!important;min-height:34px!important;
  display:inline-flex!important;align-items:center!important;gap:4px!important;padding:5px 9px!important;
}
.v19-pchip-label{font:inherit;font-size:12px;font-weight:700;color:inherit}

/* (2) многострочное описание — по умолчанию свёрнуто в одну строку, стрелка справа раскрывает */
.v19-task-menu .v19-desc-row{position:relative!important}
.v19-task-menu .v19-desc-row.v19-desc-has-toggle{padding-right:34px!important}
.v19-task-menu .v19-desc-row textarea.v19-desc-textarea-hidden{display:none!important}
.v19-task-menu .v19-desc-row .v19-desc-preview{
  display:block!important;white-space:nowrap!important;overflow:hidden!important;text-overflow:ellipsis!important;
  font-family:inherit!important;font-size:var(--v19-task-menu-reading-size)!important;font-weight:var(--v19-task-menu-reading-weight)!important;
  line-height:var(--v19-task-menu-reading-line-height)!important;color:var(--ink)!important;cursor:pointer!important;min-height:1.35em!important;
}
.v19-task-menu .v19-desc-row .v19-desc-preview[hidden]{display:none!important}
.v19-task-menu .v19-desc-toggle{
  position:absolute!important;right:8px!important;top:6px!important;width:22px!important;height:22px!important;
  display:inline-flex!important;align-items:center!important;justify-content:center!important;
  color:var(--muted,#8a7d68)!important;cursor:pointer!important;border-radius:6px!important;
  transition:transform .18s ease!important;
}
.v19-task-menu .v19-desc-toggle:hover{background:color-mix(in srgb,var(--accent) 10%,transparent)!important}
.v19-task-menu .v19-desc-toggle.v19-desc-toggle-open{transform:rotate(-90deg)!important}
.v19-task-menu .v19-desc-toggle svg{width:16px!important;height:16px!important}

/* (3 доп.) чипы «Срок»/«Напоминания» — чуть мельче текст, чуть светлее фон.
 * ВНИМАНИЕ: строка 4 (".v19-task-menu :is(...) span:not(.v22-icon){font:inherit!important}")
 * имеет специфичность (0,3,2) — выше нашей (0,2,0) — и раньше выигрывала font-size,
 * несмотря на порядок в файле. Утраиваем класс .v19-task-menu, чтобы гарантированно
 * перебить это по b-уровню специфичности (0,4,0) > (0,3,2). */
.v19-task-menu :is(.v19-reminder-chip,.v19-time-chip){
  background:color-mix(in srgb,#8a7a5f 8%,var(--panel,#fffdf8))!important;
}
.v19-task-menu.v19-task-menu.v19-task-menu :is(.v19-reminder-chip,.v19-time-chip){
  font-size:var(--v19-task-menu-secondary-size)!important;
}

/* подсказка в диалоге напоминаний, когда пресеты недоступны без срока/начала */
.v19-reminder-need-date{
  margin:0 0 6px!important;padding:6px 9px!important;border-radius:8px!important;
  background:color-mix(in srgb,var(--accent) 8%,transparent)!important;
  color:var(--muted,#8a7d68)!important;font-size:12px!important;line-height:1.35!important;
}

/* ===== r27j: доводка №3 (тест результата, часть 2) ===== */

/* время/приоритет — всплывающие меню ВСЕГДА поверх любых модалок, включая
 * мини-редактор подзадачи (тот держит z-index:110, а .time-menu был на 70 — тонул) */
.time-menu,.v13-time-menu,.v17-time-menu,.v38-time-menu{z-index:99999!important}

/* скроллбар модалки задачи/цели — нигде не виден (в т.ч. «выше названия») */
.modal.v19-task-menu{scrollbar-width:none!important}
.modal.v19-task-menu::-webkit-scrollbar{width:0!important;height:0!important;display:none!important}
.modal-backdrop.v19-backdrop{scrollbar-width:none!important}
.modal-backdrop.v19-backdrop::-webkit-scrollbar{width:0!important;height:0!important;display:none!important}

/* ===== r30j ===== */
/* (26) Выполненная/проваленная подзадача — перечёркнутый текст, как у обычной
 * задачи в списке (.task-title.done); родной шаблон подзадачи навешивает
 * класс статуса (done/failed/...) на .status-label, а не на .task-title —
 * своего правила зачёркивания для этого класса нигде не было. */
.v19-task-menu .subtask-panel .status-label.done{text-decoration:line-through!important;color:var(--muted)!important}
.v19-task-menu .subtask-panel .status-label.failed{color:var(--accent)!important}

/* (28) Комментарии в меню задачи: полный список должен раскрываться сразу
 * (JS выше принудительно снимает hidden с .compact-feed-all), без своей
 * внутренней прокрутки — client-refinements.css вешает на неё
 * `max-height:160px!important;overflow:auto` (второй скролл-бокс внутри уже
 * скроллящейся формы); здесь эта верхняя граница не нужна вовсе. */
.v19-task-menu .v18-comments .compact-feed-all{max-height:none!important;overflow:visible!important}
/* .compact-feed-last остаётся видимым даже когда полный список открыт
 * (v84.css: `.v84-compact-feed:not(.collapsed)>.compact-feed-last{display:
 * block!important}`) — раз последний комментарий и так последняя строка
 * полного списка, эта отдельная строка-дубликат прячется (JS выше ставит ей
 * `hidden`; здесь просто даём этому реально сработать поверх чужого
 * `!important` — [hidden] сам по себе такого не бьёт). */
.v19-task-menu .v18-comments .compact-feed .compact-feed-last[hidden]{display:none!important}
/* Кнопка «Все комментарии» становится не у дел — список и так всегда открыт
 * целиком; оставлять её видимой значило бы дать пользователю нажать на явно
 * рабочую на вид кнопку и не увидеть эффекта (наш JS тут же откроет список
 * заново на следующем проходе). */
.v19-task-menu .v18-comments .compact-feed-head [data-feed-expand]{display:none!important}

/* (37) Стрелка «Комментарии» — системного цвета (var(--accent)), не приглушённого
 * .v18-comments и .subtask-panel делят одно правило (color:var(--muted)…);
 * поднимаем специфичность лишним классом-предком, чтобы переопределить именно
 * и только комментарии, не трогая стрелку подзадач. */
.v19-task-menu .v18-comments .v18-comments-head>[data-v18-comments-toggle]{color:var(--accent)!important}

/* Android WebView shares this runtime with web/Windows. Its task card rises
   under the measured one- or two-row app header, leaving system bars and the
   bottom navigation clear. Desktop keeps the centered presentation above. */
html.v19-native-task-window .modal-backdrop.v19-backdrop>.modal.v19-task-menu{
  left:calc((100vw + var(--v78-sidebar-width,0px))/2)!important;
  top:var(--v19-native-task-top,70px)!important;
  width:min(620px,calc(100vw - var(--v78-sidebar-width,0px) - 24px))!important;
  max-width:calc(100vw - var(--v78-sidebar-width,0px) - 24px)!important;
  min-width:0!important;
  max-height:calc(100dvh - var(--v19-native-task-top,70px) - var(--v78-bottom-space,0px) - 8px)!important;
  transform:translateX(-50%)!important;
}
@keyframes v19-native-slide-in{
  from{transform:translate(-50%,100vh);opacity:.15}
  to{transform:translate(-50%,0);opacity:1}
}
html.v19-native-task-window .modal-backdrop.v19-backdrop>.modal.v19-task-menu.v19-anim-in{
  animation:v19-native-slide-in .45s cubic-bezier(.22,.68,.24,1)!important;
}
html.v19-native-task-window .modal-backdrop.v19-leaving>.modal.v19-task-menu{
  transform:translate(-50%,100vh)!important;
}
@media (prefers-reduced-motion:reduce){
  html.v19-native-task-window .modal-backdrop.v19-backdrop>.modal.v19-task-menu.v19-anim-in{animation:none!important}
}

/* ============================================================================
 * r36 — единый «стек» прямоугольников (2026-09-14, детальная просьба
 * пользователя, все 3 типа меню: обычная/датчик/ручная задача).
 * Срок…Приоритет…выбранные артефакты…поле выбора артефактов…Подзадачи…
 * Датчик-критерии…Комментарии визуально сливаются в ОДИН непрерывный список:
 * нулевой зазор между ВСЕМИ прямоугольниками, скруглены только САМЫЕ внешние
 * углы всего стека (верх у первого, низ у последнего), у остальных — прямые
 * (включая «внутренние» углы крайних рядов). «Секционные» заголовки
 * (Подзадачи/Комментарии/Датчик/Число) становятся прозрачными швами стека —
 * без рамки/фона, не своим прямоугольником. Поле выбора артефактов (пикер)
 * уменьшается по высоте и переезжает ВНУТРЬ одного прямоугольника обычного
 * вида. Единая горизонтальная сетка на всех рядах: значок — с одного и того
 * же отступа слева, текст/контент — с одного и того же отступа после значка.
 * Крайние ряды стека определяет JS (v19StackEdges, task-menu-r19.js) —
 * состав видимых рядов меняется на каждый проход (свёрнуты комментарии, нет
 * тэгов, датчик/ручная — разная структура), а флекс-order уже даёт визуальный
 * порядок, отличный от DOM-порядка — чистым :first-child/:last-child через
 * настолько разнородные вложенные обёртки это не выразить.
 * ========================================================================== */

/* --- нулевой шаг между ВСЕМИ прямоугольниками стека ---
 * «Описание» (.v19-desc-row) при непустом значении/фокусе переезжает в
 * начало формы (см. descriptionArtifact в JS) — становится визуально ПЕРВЫМ
 * рядом стека вместо «Срока». Логика (нулевой зазор, скругление только у
 * крайних) действует и тогда — по прямому уточнению пользователя. */
.v19-task-menu :is(
  .time-line,.v18-priority-row,.v19-desc-row,.v18-artifact-row:not(.v18-artifact-pickers),
  .v18-artifact-pickers,.subtask-panel>.section-head,.subtask-panel .subtask-line,
  .v19-datchik-header-row,.v19-datchik-criteria .v42-source-line,
  .v40-measure-row:not(.v19-datchik-header-row),.v18-comments-head,.v18-comments .feed-entry
){margin:0!important}
.v19-task-menu .subtask-panel,.v19-task-menu .v18-comments,.v19-task-menu .v19-datchik-criteria{margin:0!important;gap:0!important}
/* :not([hidden]) — иначе безусловный display:flex!important перебивал
 * родной [hidden] на этой же обёртке (список подзадач сворачивает/
 * разворачивает ИМЕННО через hidden-атрибут на этом div) — подзадачи
 * оставались видны ВСЕГДА, стрелка сворачивания переставала на что-либо
 * влиять (баг, найден пользователем: «подзадачи не раскрываются» —
 * реально они и не сворачивались, показывались одинаково в обоих
 * состояниях). */
.v19-task-menu .subtask-panel>div:not(.section-head):not([hidden]){display:flex!important;flex-direction:column!important;gap:0!important;margin:0!important;padding:0!important}
.v19-task-menu .subtask-panel>div[hidden]{display:none!important}
.v19-task-menu .compact-feed,.v19-task-menu .compact-feed-all,.v19-task-menu .compact-feed-last{gap:0!important;margin:0!important}

/* --- по умолчанию: прямые углы у ВСЕХ рядов стека (включая «внутренние» углы крайних) --- */
.v19-task-menu :is(
  .time-line,.v18-priority-row,.v19-desc-row,.v18-artifact-row:not(.v18-artifact-pickers),
  .v18-artifact-pickers,.subtask-panel .subtask-line,
  .v19-datchik-criteria .v42-source-line,.v18-comments .feed-entry
){border-radius:0!important}

/* --- скругление только у фактически первого/последнего видимого ряда всего стека
 * (см. v19StackEdges). Специфичность подстрахована повтором класса формы:
 * ":is(...)" в правиле «прямые углы» выше содержит 2-классовые альтернативы
 * (.subtask-panel .subtask-line и т.п.) — по спеке ":is()" берёт СВОЮ
 * специфичность как МАКСИМУМ среди всех альтернатив в списке, а не как у
 * конкретно совпавшей — поэтому даже для простого .time-line та :is()-строка
 * реально весит как (0,3,0), выше простого .v19-task-menu .v19-stack-first
 * (0,2,0), и побеждала несмотря на более поздний порядок в файле. */
.v19-task-menu.v19-task-menu .v19-stack-first{border-top-left-radius:var(--v19-row-radius,10px)!important;border-top-right-radius:var(--v19-row-radius,10px)!important}
.v19-task-menu.v19-task-menu .v19-stack-last{border-bottom-left-radius:var(--v19-row-radius,10px)!important;border-bottom-right-radius:var(--v19-row-radius,10px)!important}

/* --- секционные «швы»: Подзадачи/Комментарии — без рамки и фона задачи.
 * Специфичность утроена намеренно: html[data-interface-design="classic"] в
 * project-ideas-r21.css форсирует белый фон на этих же рядах с весом (0,3,1)
 * (голый селектор `html` в её цепочке добавляет тип-тир, которого не было в
 * нашем изначальном (0,3,0) — тип-тир побеждает при равном классовом тире
 * независимо от порядка файлов). Утроенный якорь даёт (0,4,0) — обходит по
 * классовому тиру уже без оглядки на тип-тир соперника.
 * (баг, найден живой проверкой под темой "classic") `.v19-datchik-header-row`
 * и `.v40-measure-row:not(.v19-datchik-header-row)` раньше ТОЖЕ были в этом
 * списке — с изначального замысла (§164/166), когда «Датчик»/«Число» были
 * простыми текстовыми «швами», как «Подзадачи»/«Комментарии». Но оба давно
 * получили СОБСТВЕННЫЕ формулы рамки/фона (см. выше по файлу — полноценный
 * прямоугольник в стиле «Срока», а не шов) — при РАВНОЙ утроенной
 * специфичности с этим правилом побеждал более поздний порядок в файле
 * (ЭТО правило), т.е. их border/background молча стирались обратно в 0/
 * transparent КАЖДЫЙ раз, независимо от темы — обе строки все прошлые
 * раунды жили без рамки и фона, хотя их собственные формулы выглядели
 * рабочими в коде. Убраны из списка — их фон/рамка теперь наконец
 * побеждают, как и задумано их собственными правилами. */
.v19-task-menu.v19-task-menu.v19-task-menu :is(.subtask-panel>.section-head,.v18-comments-head){
  border:0!important;background:transparent!important;box-shadow:none!important;
}

/* --- Подзадачи/Комментарии — каждая ОТДЕЛЬНАЯ запись тоже прямоугольник (формула
 * как у «Описание»: высота по контенту, не жёстко 34px — комментарий может быть
 * многострочным, обрезать/ломать текст не нужно). --- */
.v19-task-menu.v19-task-menu.v19-task-menu .subtask-panel .subtask-line,
.v19-task-menu.v19-task-menu.v19-task-menu .v18-comments .feed-entry{
  box-sizing:border-box!important;width:100%!important;height:auto!important;min-height:var(--dj-task-content-min-height,34px)!important;
  padding:var(--dj-task-content-padding-y,6px) var(--dj-task-property-padding-x,12px)!important;
  border:1px solid var(--panel,#fffdf8)!important;
  background:color-mix(in srgb,#8a7a5f 16%,var(--panel,#fffdf8))!important;
  display:flex!important;align-items:center!important;gap:8px!important;
}
.v19-task-menu.v19-task-menu.v19-task-menu .subtask-panel .subtask-line{
  font-size:var(--v19-task-menu-font-size)!important;font-weight:var(--v19-task-menu-font-weight)!important;line-height:var(--v19-task-menu-line-height)!important;
}
.v19-task-menu.v19-task-menu.v19-task-menu .v18-comments .feed-entry{
  font-size:var(--v19-task-menu-reading-size)!important;font-weight:var(--v19-task-menu-reading-weight)!important;line-height:var(--v19-task-menu-reading-line-height)!important;
}
.v19-task-menu .subtask-panel .subtask-line>:is(.task-state-check,.v22-icon-button):first-child{flex:0 0 20px!important;width:20px!important;height:20px!important;margin:0!important}
/* Статус подзадачи («Активна»/«Успех»/...) — по прямой просьбе пользователя
 * вправо (был сразу после названия, слева-по-центру). */
.v19-task-menu .subtask-panel .subtask-line>.chip{margin-left:auto!important;flex:0 0 auto!important}
/* Комментарий — по прямой просьбе пользователя дата+текст выровнены
 * ВПРАВО (align-items:flex-end, не flex-start как у остальных «иконных»
 * рядов — у записи комментария своего ведущего значка нет вовсе, поэтому
 * общий 40px-отступ под значок тут не нужен, убран). Родная разметка несёт
 * .feed-attachments ВСЕГДА, даже без вложений — пустой div всё равно
 * участвует в раскладке (лишняя пустая строка, замечено пользователем) —
 * прячем именно когда пуст. */
/* (55) Реверс (§167п6): дата+текст комментария — снова ВЛЕВО, не вправо
 * (прямая новая просьба «сдвинуть влево»). Утроенный якорь — иначе более
 * ранний общий блок «единая мини-формула чипа» (align-items:center на
 * .subtask-line/.feed-entry разом, тоже с утроенным якорем) выигрывает по
 * специфичности несмотря на более поздний порядок в файле (тот же класс
 * ошибки, что уже дважды пойман в этом файле — см. §164/166). */
.v19-task-menu.v19-task-menu.v19-task-menu .v18-comments .feed-entry{flex-direction:column!important;align-items:flex-start!important;gap:2px!important;text-align:left!important;position:relative!important}
.v19-task-menu .v18-comments .feed-entry .feed-entry-time{font-size:var(--dj-text-caption-size,11px)!important;font-weight:var(--dj-text-caption-weight,600)!important;line-height:var(--dj-text-caption-line-height,1.5)!important;color:var(--muted,#8a7d68)!important;order:-1}
.v19-task-menu .v18-comments .feed-entry .v56-feed-actions{align-self:flex-end!important;margin-top:2px!important}
.v19-task-menu .v18-comments .feed-entry .feed-attachments:empty{display:none!important;margin:0!important;padding:0!important}

/* --- Артефакт-пикер: меньше по высоте, цвет фона задачи, ВНУТРИ одного
 * прямоугольника как остальные (не отдельно «Напоминание» + отдельная
 * дорожка чипов россыпью). Уточнение пользователя: пикер НЕ должен визуально
 * вылезать за пределы своего прямоугольника — сам скроллится ВНУТРИ него
 * (overflow:hidden на обёртке, overflow-x:auto только на внутренней дорожке
 * чипов, которая и так уже это умеет). --- */
.v19-task-menu.v19-task-menu.v19-task-menu .v18-artifact-pickers{
  display:flex!important;flex-direction:column!important;flex-wrap:nowrap!important;
  align-items:stretch!important;
  box-sizing:border-box!important;width:100%!important;height:auto!important;min-height:var(--dj-task-property-min-height,34px)!important;
  padding:var(--dj-task-content-padding-y,6px) var(--dj-task-property-padding-x,12px)!important;gap:4px!important;
  border:1px solid var(--panel,#fffdf8)!important;
  background:color-mix(in srgb,#8a7a5f 16%,var(--panel,#fffdf8))!important;
  overflow:hidden!important;
}
.v19-task-menu .v18-artifact-pickers>.v18-reminder{
  height:auto!important;min-height:0!important;max-height:none!important;flex:0 0 auto!important;
  border:0!important;background:transparent!important;padding:0!important;margin:0!important;
}
/* --- Уточнение пользователя: поля выбора (пикер) И уже выбранные артефакты —
 * прямоугольники ОДНОЙ высоты (сначала было 28px, ещё уменьшено по прямой
 * просьбе до 22px), фон у обоих — цвет фона самой задачи/модалки
 * (var(--panel)), НЕ цвет обёртки-ряда (тёплый тон) и НЕ цвет артефакта.
 * :not([data-v18-wall-picker]) — иначе этот же !important-блок (по высокой
 * специфичности, нужной против конкурентов из §164/165) попутно перебивал
 * ДРУГОЕ, более раннее правило display:none у «Стены» (которая по решению
 * пользователя вообще не должна появляться в пикере — присваивается
 * автоматически по Камню, см. v19SyncWallsFromStones) — «Стена» протекала
 * обратно в список пикера как обычная видимая кнопка.
 * (48) Проект/Идея — по прямой поправке пользователя УБРАНЫ из этого
 * списка: «там где один вариант — просто текст + значок нужного цвета, ни
 * в каком кружочке/чипе». Чип-формула (рамка/фон/radius) — только для
 * артефактов, где МОЖЕТ быть несколько значений разом (тэг/камень/ритуал)
 * и каждое реально нужно визуально отделить друг от друга; Проект/Идея —
 * всегда ровно одно значение, отдельная «капсула» вокруг него не нужна,
 * то же самое, что и у «Срока»/«Приоритета» (голый значок+текст). См. ниже
 * отдельное правило для Проекта/Идеи (только цвет значка, без чипа).
 * (50) ПОПРАВКА (пользователь, «и ещё раз»): цвет значка/надписи/рамки
 * выбранного АРТЕФАКТА — свой (цвет самого артефакта), НЕ системный. Общий
 * системный/нейтральный вид остаётся ТОЛЬКО у полей выбора (пикер-чипов —
 * они не представляют конкретный цветной артефакт, только тип) — поэтому
 * ниже формула снова разделена на два отдельных правила вместо одного :is()
 * на оба сразу; фон при этом остаётся общим (цвет фона задачи) — эта
 * часть поправки не касалась, только icon/text/border. */
/* (54) Фон полей выбора — по прямой просьбе пользователя, как у «больших
 * прямоугольников» (тёплый тон обёртки-ряда, ТОТ ЖЕ color-mix, что несёт
 * сама `.v18-artifact-pickers`), а не плоский var(--panel). Реверс части
 * правки (48)/(53) — там фон был именно var(--panel) («цвет фона
 * задачи»), теперь наоборот. */
.v19-task-menu.v19-task-menu.v19-task-menu .v19-pickers-chips>button:not([data-v18-wall-picker]){
  height:22px!important;min-height:22px!important;box-sizing:border-box!important;
  display:inline-flex!important;align-items:center!important;gap:6px!important;
  padding:0 8px!important;border-radius:8px!important;
  /* (59→62) «Напоминание»/«Описание»/«Камни» и т.п. — прошли через var(--panel)
   * (с прозрачностью, потом без) и в итоге унифицированы на тот же тёплый
   * тон, что и все прямоугольники стека (см. правило у «Срока»/«Приоритет»
   * выше по файлу) — «должны быть одинакового цвета» по прямой просьбе. */
  background:color-mix(in srgb,#8a7a5f 16%,var(--panel,#fffdf8))!important;
  /* (65) Граница поля выбора артефакта — по прямой просьбе системного
   * цвета (var(--accent)), НЕ цвета фона — это отличает поля ВЫБОРА
   * (действие) от обычных прямоугольников-СОДЕРЖИМОГО (те — цвета фона
   * задачи, см. правило выше по файлу). */
  border:1px solid var(--accent)!important;
  color:var(--ink)!important;
}
.v19-task-menu.v19-task-menu.v19-task-menu .v19-pickers-chips>button:not([data-v18-wall-picker])>:is(.v22-icon,svg){
  width:14px!important;height:14px!important;flex:0 0 14px!important;color:var(--accent)!important;
}
/* (51) Высота чипа артефакта — по прямой просьбе пользователя снова
 * изменена: теперь РАВНА высоте ряда «Срок» (34px — тот же
 * `--v19-row-radius`-формат, не маленькая 22px-пилюля, как было).
 * «Небольшой отступ от границы прямоугольника до значка» — чуть больше
 * horizontal padding (10px вместо прежних 8px), значок остаётся 20px (как
 * везде в единой сетке), а не уменьшенный 14px пикер-чипа. Поле выбора
 * (.v19-pickers-chips>button) в это правило НЕ входит — просьба была
 * именно про «прямоугольники артефактов», не про поля выбора. */
/* (53) ДВЕ поправки разом, по прямому скриншоту пользователя:
 * (а) цвет читался из НЕПРАВИЛЬНОЙ custom-property — `--v19-artifact-color`
 * реально стоит на уровне РЯДА целиком (один на весь `.v18-artifact-row`,
 * задумано для одноцветной строки Проекта/Идеи) и наследуется ОДИНАКОВО
 * во ВСЕ дочерние кнопки — при нескольких тэгах в одном ряду все они
 * получали цвет ПЕРВОГО тэга. Родной инлайн-стиль на каждой КНОПКЕ несёт
 * СВОЙ, настоящий цвет именно этого элемента — `--artifact-color` (без
 * «v19-»-префикса). Переключено на неё.
 * (б) высота — снова 22px (=высота полей выбора), реверс правки (51) на
 * 34px — по прямой новой просьбе «уменьшить до размеров полей выбора». */
/* (57) Скругление чипа артефакта — то же, что у «Срока» (var(--v19-row-
 * radius,10px)), не отдельный маленький radius:8px. Отступ значок↔рамка
 * чуть увеличен (10px было 8px, «немного», по прямой просьбе). */
.v19-task-menu.v19-task-menu.v19-task-menu .v18-artifact-row:not(.v18-artifact-pickers):is([data-artifact-row="tag"],[data-artifact-row="stone"],[data-artifact-row="ritual"],.tag,.stone,.ritual)>button{
  height:22px!important;min-height:22px!important;box-sizing:border-box!important;
  display:inline-flex!important;align-items:center!important;gap:4px!important;
  padding:0 10px!important;border-radius:var(--v19-row-radius,10px)!important;
  /* (59→62) Прошло через var(--panel) (с прозрачностью, потом без) и в
   * итоге унифицировано на тот же тёплый тон, что и все прямоугольники
   * стека — та же формула, что у «Срока» и «Напоминания». */
  background:color-mix(in srgb,#8a7a5f 16%,var(--panel,#fffdf8))!important;
  /* 30%, не 40% — тот же процент подмеса, что у рамки «Срока» (color-mix
   * ...30%,var(--line)) — при 40% рамка того же 1px читалась визуально
   * «толще» из-за более насыщенного цвета артефакта, хотя физическая
   * ширина была идентична (проверено: оба 1px, без doп. box-shadow). */
  border:1px solid color-mix(in srgb,var(--artifact-color,var(--accent)) 30%,var(--line))!important;
  color:var(--artifact-color,var(--ink))!important;
}
.v19-task-menu.v19-task-menu.v19-task-menu .v18-artifact-row:not(.v18-artifact-pickers):is([data-artifact-row="tag"],[data-artifact-row="stone"],[data-artifact-row="ritual"],.tag,.stone,.ritual)>button>:is(.v22-icon,svg){
  width:14px!important;height:14px!important;flex:0 0 14px!important;color:var(--artifact-color,var(--accent))!important;
}
/* (74) Тэг — по прямой просьбе выделен из общей тэг/камень/ритуал формулы,
 * та же визуализация, что и у тэгов в других меню (task-presentation.js):
 * прямоугольник ПОЛНОСТЬЮ залит цветом тэга (не разбавленным тоном),
 * текст — чёрный/белый по контрасту (--v19-tag-contrast, считает JS —
 * v19TagChips(), тот же принцип, что contrastOn() в task-presentation.js).
 * Обычный тэг — БЕЗ значка «тэг» вовсе; системный тэг — значок остаётся,
 * но цветом СОВПАДАЕТ с текстом (тот же контраст), не цветом тэга. */
.v19-task-menu.v19-task-menu.v19-task-menu .v18-artifact-row:not(.v18-artifact-pickers)[data-artifact-row="tag"]>button{
  background:var(--artifact-color,var(--accent))!important;
  border-color:var(--artifact-color,var(--accent))!important;
  color:var(--v19-tag-contrast,var(--ink))!important;
  /* симметричный паддинг — тэг больше не несёт свой собственный ведущий
   * значок для выравнивания с рядом (см. padding-left:0 чуть ниже по
   * файлу, общий для тэг/камень/ритуал/проект — тэг явно из него
   * исключён отдельным правилом ещё ниже). */
}
/* (74б) Старое правило `...tag,.stone,.ritual) button>span:not(.v22-icon)
 * {color:var(--artifact-color...)}` чуть выше по файлу (r27g, «тэги: имя
 * тэга ВСЕГДА видно») красило текст тэга в цвет самого тэга ещё ДО того,
 * как появился контраст (--v19-tag-contrast); та же специфичность,
 * но тэг там встречается позже в списке :is(), не важно — обе строки
 * применяются к одному элементу, и то правило истинно только по
 * специфичности/порядку. Перебиваем именно для тэга — явной, более
 * специфичной привязкой, текст должен быть контрастным, не цветом тэга. */
.v19-task-menu.v19-task-menu.v19-task-menu .v18-artifact-row:not(.v18-artifact-pickers)[data-artifact-row="tag"]>button>span:not(.v22-icon){
  color:var(--v19-tag-contrast,var(--ink))!important;
}
.v19-task-menu.v19-task-menu.v19-task-menu .v18-artifact-row:not(.v18-artifact-pickers)[data-artifact-row="tag"]>button:not([data-v18-system])>:is(.v22-icon,svg){
  display:none!important;
}
.v19-task-menu.v19-task-menu.v19-task-menu .v18-artifact-row:not(.v18-artifact-pickers)[data-artifact-row="tag"]>button[data-v18-system]>:is(.v22-icon,svg){
  color:var(--v19-tag-contrast,var(--ink))!important;
}
/* Проект/Идея — единственное значение, БЕЗ чипа: прозрачный фон/без рамки
 * (наследуется от старой базовой формулы .v18-artifact-row>button — border:
 * 0;background:transparent), содержимое по факту текста (не на всю ширину
 * ряда — см. правило width:auto выше, «(46)»), значок системного цвета. */
.v19-task-menu.v19-task-menu.v19-task-menu .v18-artifact-row:not(.v18-artifact-pickers):is([data-artifact-row="project"],[data-artifact-row="idea"])>button{
  border:0!important;background:transparent!important;border-radius:0!important;
  height:auto!important;min-height:0!important;padding:0!important;
  /* (68) По прямой просьбе — текст названия проекта/идеи чёрный
   * (var(--ink)), значок остаётся цвета проекта/идеи (правило ниже) — то
   * же разделение, что теперь и у Камня. */
  color:var(--ink)!important;
}
.v19-task-menu.v19-task-menu.v19-task-menu .v18-artifact-row:not(.v18-artifact-pickers):is([data-artifact-row="project"],[data-artifact-row="idea"])>button>:is(.v22-icon,svg){
  color:var(--artifact-color,var(--accent))!important;
}
/* (68) Камень — по прямой просьбе выделен из общей тэг/камень/ритуал
 * формулы: рамка = ПОЛНЫЙ (не разбавленный) цвет камня, текст — чёрный
 * (var(--ink)); значок остаётся цвета камня — та же общая иконка-формула
 * чуть ниже уже это даёт, трогать не нужно. */
.v19-task-menu.v19-task-menu.v19-task-menu .v18-artifact-row:not(.v18-artifact-pickers)[data-artifact-row="stone"]>button{
  border-color:var(--artifact-color,var(--accent))!important;
  color:var(--ink)!important;
}
/* width:100% (не auto/по контенту) — иначе при align-items:center на
 * обёртке этот ряд центрируется по своей natural-ширине и при переполнении
 * съезжает влево за пределы паддинга обёртки (обнаружено пользователем —
 * «поля выбора начинаются не слева»); со stretch на обёртке (см. выше) это
 * уже не обязательно, но оставляем на случай смены align-items назад. */
/* (71) По прямой просьбе — скролл полей выбора должен доходить до самых
 * границ большого прямоугольника, а не останавливаться на паддинге
 * обёртки (.v18-artifact-pickers несёт padding:0 12px ради общего отступа
 * — нужного, например, «Напоминанию» внутри той же обёртки). Стандартный
 * приём «bleed»: сама скроллящаяся дорожка чуть ШИРЕ родителя (на те же
 * 12px с каждой стороны через отрицательный margin) и получает СВОЙ такой
 * же padding — визуально ничего не сдвигается в состоянии покоя, но
 * теперь этот отступ — ЧАСТЬ скроллящегося содержимого, а не жёсткая
 * рамка снаружи, поэтому докручивается до истинного края. */
.v19-task-menu.v19-task-menu.v19-task-menu .v19-pickers-chips{width:calc(100% + 24px)!important;flex-shrink:1!important;margin:0 -12px!important;padding:0 12px!important;box-sizing:border-box!important;min-height:0!important;height:22px!important;overflow-x:auto!important}
/* «Хвост» — прямоугольник-заполнитель, дорисовывавший пустое место справа
 * от чипов в цвет обычного ряда — по прямой просьбе пользователя убран: он
 * был нужен, когда дорожка чипов выглядела как САМОСТОЯТЕЛЬНЫЙ ряд без
 * своей обёртки; теперь чипы и так внутри одного прямоугольника-пикера,
 * дорисовывать за ними уже нечего. */
.v19-task-menu .v19-pickers-chips::after{content:none!important;display:none!important}

/* --- Ведущий значок ряда у Тэгов/Ритуалов/Камней (v19-artifact-row-icon,
 * см. task-menu-r19.js) — тот же слот/цвет/выравнивание, что у значка любой
 * другой строки стека (системный акцент, а не цвет артефакта). --- */
.v19-task-menu .v18-artifact-row:not(.v18-artifact-pickers) .v19-artifact-row-icon{
  order:-1!important;flex:0 0 20px!important;width:20px!important;height:20px!important;
  display:inline-flex!important;align-items:center!important;justify-content:center!important;
}
.v19-task-menu .v18-artifact-row:not(.v18-artifact-pickers) .v19-artifact-row-icon .v22-icon,
.v19-task-menu .v18-artifact-row:not(.v18-artifact-pickers) .v19-artifact-row-icon svg{
  width:20px!important;height:20px!important;color:var(--accent)!important;
}

/* --- единая горизонтальная сетка: значок всегда с одного отступа слева (12px
 * до значка, значок 20px, 8px до текста → текст/контент везде начинается
 * ровно с 40px от левого края прямоугольника). Ряды БЕЗ значка (запись
 * комментария) получают тот же отступ текста явным padding-left (см. выше).
 * «Напоминание» (.v18-artifact-pickers>.v18-reminder) сюда НЕ входит — он
 * уже лежит ВНУТРИ обёртки-пикера, у которой свой padding-left:12px; если
 * дать ему ЕЩЁ и свой такой же паддинг, инсет удваивается (24px вместо
 * 12px) и значок съезжает вправо относительно «Срока»/остальных строк
 * (баг, найден пользователем на живом скриншоте). --- */
.v19-task-menu :is(
  .time-line,.v18-priority-row,.v18-artifact-row:not(.v18-artifact-pickers)>button,
  .subtask-panel>.section-head,.subtask-panel .subtask-line,
  .v19-datchik-header-row,.v40-measure-row:not(.v19-datchik-header-row),.v18-comments-head
){padding-left:12px!important}
.v19-task-menu .v18-artifact-pickers>.v18-reminder{padding-left:0!important}
/* Разделительная линия между «Напоминанием» и рядом чипов ВНУТРИ одной
 * обёртки-пикера — по прямой просьбе пользователя (раньше их разделял
 * только gap:4px без видимой границы, выглядело как один слипшийся блок). */
.v19-task-menu .v18-artifact-pickers>.v18-reminder{
  padding-bottom:6px!important;margin-bottom:-2px!important;
  border-bottom:1px solid color-mix(in srgb,#8a7a5f 30%,var(--line))!important;
  /* border-radius:0 — иначе радиус 10px от старого правила (~404, из-под
   * которого только border был обнулён другим более ранним правилом, а
   * border-radius — никем) заставлял этот единственный нижний бордер
   * закругляться по краям («странная дуга», не прямая линия, см. скриншот
   * пользователя) вместо обычной прямой черты, как везде в стеке. */
  border-radius:0!important;
}
.v19-task-menu :is(
  .time-line,.v18-priority-row,.v18-artifact-row:not(.v18-artifact-pickers)>button,
  .subtask-panel .subtask-line,.v18-artifact-pickers>.v18-reminder
) > :is(.v22-icon,svg,.task-state-check,.v58-priority-flag,.priority-flag):first-child{
  flex:0 0 20px!important;width:20px!important;height:20px!important;margin:0!important;
  /* min-width — иначе родной .priority-flag.v22-icon-button (v23.css) даёт
   * min-width:28px (не просто width), а min-width побеждает более узкий
   * width/flex-basis независимо от !important на width — «Приоритет» текст
   * съезжал на 8px правее остальных подписей (найдено пользователем). */
  min-width:20px!important;
}
.v19-task-menu :is(
  .time-line,.v18-priority-row,.v18-artifact-row:not(.v18-artifact-pickers)>button,
  .subtask-panel>.section-head,.subtask-panel .subtask-line,.v18-comments-head,
  .v18-artifact-pickers>.v18-reminder
){gap:8px!important}

/* --- множественные значения одного типа артефакта (тэги/камни/ритуалы,
 * включая системные тэги) — каждое своим маленьким прямоугольничком, со
 * значком+названием внутри общего ряда-обёртки (высота/фон/рамка/значок —
 * см. единую мини-формулу чипа чуть выше, общую с полями выбора). Системные
 * тэги раньше оставались только значком — принудительно показываем подпись
 * и им тоже (родная разметка кладёт текст в тот же span, его просто
 * скрывали). */
.v19-task-menu.v19-task-menu.v19-task-menu .v18-artifact-row:not(.v18-artifact-pickers):is([data-artifact-row="tag"],[data-artifact-row="stone"],[data-artifact-row="ritual"],[data-artifact-row="project"],.tag,.stone,.ritual)>button[data-v18-system] span:not(.v22-icon){
  display:inline-block!important;overflow:visible!important;clip:auto!important;width:auto!important;height:auto!important;position:static!important;
}
/* padding-left:0 ПОВЕРХ единой мини-формулы чипа (которая даёт симметричный
 * padding:0 8px) — намеренно, только для артефакт-чипов (не для полей
 * выбора): первый чип в ряду и так получает выравнивание значка через
 * padding-left:12px САМОГО РЯДА (единая сетка выше по файлу) — если у чипа
 * есть ЕЩЁ и свой левый паддинг поверх, значок первого чипа съезжает на
 * 12+8=20px вместо 12px, ломая жёсткое выравнивание с остальными рядами.
 * Между чипами зазор даёт gap ряда (не паддинг чипа), 2й+ чип не слипается.
 * Поля выбора (.v19-pickers-chips) в эту сетку НЕ входят (не часть системы
 * выравнивания «первый значок строки») — их симметричный паддинг не трогаем. */
.v19-task-menu.v19-task-menu.v19-task-menu .v18-artifact-row:not(.v18-artifact-pickers):is([data-artifact-row="stone"],[data-artifact-row="ritual"],[data-artifact-row="project"],.stone,.ritual)>button{
  padding-left:0!important;
}
/* (74) Тэг исключён из правила выше — у него больше нет своего ведущего
 * значка, которому был нужен этот компенсирующий отступ (обычный тэг —
 * без значка вовсе, системный — значок есть, но выравнивание с рядом ему
 * не требуется, это просто пилюля-индикатор). Симметричный padding:0 10px
 * из базовой формулы (см. выше по файлу) остаётся как есть, ничем не
 * перебивается. */
