/* Explicitly scoped: preserve legacy controls/listeners, expose one visual view.
 * Desktop aliases retain the established compact presentation. Phone and
 * Fold/tablet remap these roles to the shared typography scale below. */
:root{
  --dj-tp-title-size:15px;--dj-tp-title-weight:600;--dj-tp-title-line-height:1.35;
  --dj-tp-secondary-size:12px;--dj-tp-secondary-weight:400;--dj-tp-secondary-line-height:1.55;
  --dj-tp-caption-size:11px;--dj-tp-caption-weight:400;--dj-tp-caption-line-height:1.5;
  --dj-tp-amount-size:13px;--dj-tp-amount-weight:500;
  --dj-tp-focus-title-size:13px;
  --dj-tp-calendar-title-size:13px;
}
@media(max-width:599px){
  :root{
    --dj-tp-title-size:var(--dj-text-body-size);--dj-tp-title-weight:var(--dj-text-body-weight);--dj-tp-title-line-height:var(--dj-text-body-line-height);
    --dj-tp-secondary-size:var(--dj-text-secondary-size);--dj-tp-secondary-weight:var(--dj-text-secondary-weight);--dj-tp-secondary-line-height:var(--dj-text-secondary-line-height);
    --dj-tp-caption-size:var(--dj-text-caption-size);--dj-tp-caption-weight:var(--dj-text-caption-weight);--dj-tp-caption-line-height:var(--dj-text-caption-line-height);
    --dj-tp-amount-size:var(--dj-text-secondary-size);--dj-tp-amount-weight:var(--dj-text-secondary-weight);
    --dj-tp-focus-title-size:var(--dj-text-body-size);
    --dj-tp-calendar-title-size:var(--dj-text-body-size);
  }
}
@media(min-width:600px) and (max-width:1024px){
  :root{
    --dj-tp-title-size:var(--dj-text-body-size);--dj-tp-title-weight:var(--dj-text-body-weight);--dj-tp-title-line-height:var(--dj-text-body-line-height);
    --dj-tp-secondary-size:var(--dj-text-secondary-size);--dj-tp-secondary-weight:var(--dj-text-secondary-weight);--dj-tp-secondary-line-height:var(--dj-text-secondary-line-height);
    --dj-tp-caption-size:var(--dj-text-caption-size);--dj-tp-caption-weight:var(--dj-text-caption-weight);--dj-tp-caption-line-height:var(--dj-text-caption-line-height);
    --dj-tp-amount-size:var(--dj-text-secondary-size);--dj-tp-amount-weight:var(--dj-text-secondary-weight);
    --dj-tp-focus-title-size:var(--dj-text-body-size);
    --dj-tp-calendar-title-size:var(--dj-text-body-size);
  }
}
.tp-row> :not(.tp-view):not(.v15-disclosure):not(.v15-disclosure-spacer):not(.v17-select-box):not(.task-row-tools):not(.habit-history-row):not(.tp-habit-tools):not(.v43-goal-progress):not(.r25-goal-progress):not(.cumulative-chart){display:none!important}
.tp-row{display:flex!important;flex-wrap:wrap!important;align-items:center!important;gap:4px!important;min-width:0!important;position:relative}
.tp-view{display:flex!important;align-items:flex-start;gap:7px;flex:1 1 180px;min-width:0;text-align:left;padding-block:3px;order:1}
.tp-copy{flex:1;min-width:0}.tp-line1,.tp-line2,.tp-focus-title,.tp-calendar-copy{display:flex;flex-wrap:wrap;align-items:center;justify-content:flex-start;gap:4px 6px;min-width:0}
.tp-line2{margin-top:3px;font-size:var(--dj-tp-secondary-size);font-weight:var(--dj-tp-secondary-weight);line-height:var(--dj-tp-secondary-line-height);color:var(--muted)}
.tp-title{font-family:var(--font,inherit)!important;font-size:var(--dj-tp-title-size)!important;font-weight:var(--dj-tp-title-weight)!important;color:var(--ink)!important;line-height:var(--dj-tp-title-line-height)!important;display:inline!important;min-width:0!important;max-width:100%;text-align:left!important;white-space:normal!important;overflow-wrap:anywhere!important;padding:0!important;margin:0!important;border:0!important;background:transparent!important;border-radius:0!important;box-shadow:none!important;text-decoration:none!important}
.tp-title.tp-status-someday{color:var(--muted,#777)!important}.tp-title.tp-status-done{color:#398353!important;text-decoration:line-through!important;font-weight:400!important}.tp-title.tp-status-failed{color:#bf4141!important;text-decoration:line-through!important;font-weight:400!important}
.tp-marker{display:inline-flex!important;align-items:center;justify-content:center;flex:0 0 22px;width:22px!important;height:22px!important;min-width:22px!important;min-height:22px!important;border:0!important;background:transparent!important;padding:0!important;margin:0!important;box-shadow:none!important}
.tp-marker>.v22-icon{width:21px!important;height:21px!important;margin:0!important;color:inherit!important}.tp-marker::before,.tp-marker::after{content:none!important}
.tp-artifact{display:inline-flex!important;align-items:center;gap:3px;padding:0!important;margin:0!important;min-width:0!important;min-height:20px;border:0!important;background:transparent!important;box-shadow:none!important;font:inherit;text-align:left;max-width:100%;color:var(--ink)}
.tp-artifact>span{min-width:0;overflow-wrap:anywhere}.tp-artifact .v22-icon,.tp-goal-mark .v22-icon,.tp-repeat .v22-icon,.tp-reminder .v22-icon{width:16px!important;height:16px!important;flex:0 0 16px;margin:0!important}.tp-goal-mark,.tp-repeat,.tp-reminder{display:inline-flex;align-items:center;gap:2px}
/* v.2: значок артефакта — свой цвет (--tp-color, проставлен инлайн на кнопке,
 * читается ниже по файлу правилом .tp-artifact .v22-icon — было
 * color:inherit, обновлено там же); название — всегда стандартный цвет
 * текста (только тэг — исключение, целая пилюля цвета тэга).
 * (доп.) Тэг переработан на 3 формы (см. tagChip/tagCategory в .js):
 * обычный тэг — пилюля БЕЗ значка, только текст, цвет текста —
 * контрастный (--tp-on: чёрный/белый по яркости фона, не всегда var(--ink));
 * системный тэг — КРУЖОК (не пилюля) со своим значком внутри, тот же
 * принцип контраста для цвета значка; «как факт» (свёрнутая категория) —
 * просто значок «тэг» системного цвета, без пилюли/кружка вовсе. */
.tp-artifact.tp-tag{background:var(--tp-color,var(--accent))!important;border-radius:999px!important;padding:0 10px!important;color:var(--tp-on,var(--ink))!important}
.tp-artifact.tp-tag-circle{background:var(--tp-color,var(--accent))!important;border-radius:50%!important;width:18px!important;height:18px!important;min-height:18px!important;padding:0!important;justify-content:center}
.tp-artifact.tp-tag-circle>.v22-icon{width:13px!important;height:13px!important;flex:0 0 13px;color:var(--tp-on,var(--ink))!important}
.tp-artifact.tp-tag-fact>.v22-icon{color:var(--accent)!important}
.tp-reminder{color:var(--muted)}
.tp-right{display:flex;align-items:center;justify-content:flex-end;gap:5px;max-width:32%;flex:0 1 auto;font-size:var(--dj-tp-caption-size);font-weight:var(--dj-tp-caption-weight);line-height:var(--dj-tp-caption-line-height);min-width:0;flex-wrap:wrap}
.tp-right:empty{display:none}.tp-amount,.tp-child-count,.tp-mode{font-size:var(--dj-tp-amount-size);white-space:nowrap;font-weight:var(--dj-tp-amount-weight)}.tp-single{color:#c53e3e!important}.tp-time{white-space:normal}.tp-time.tp-overdue{color:var(--danger,#c53e3e)}.tp-time.tp-today,.tp-calendar-time.tp-today{color:var(--success,#2f7d4f)!important}
.tp-row>.task-row-tools{flex:0 0 auto!important;order:2}.tp-row .task-row-tools [data-v40-number-goal],.tp-row>.v18-task-progress{display:none!important}
.tp-row>.v43-goal-progress,.tp-row>.r25-goal-progress{flex:1 0 100%;width:100%;order:5;margin:0!important;cursor:pointer}.tp-row>.v43-goal-progress{padding:0!important}.tp-row>.v43-goal-progress>span,.tp-row>.v43-goal-progress>strong{display:none!important}.tp-row>.cumulative-chart{order:6;flex:1 0 100%}
.tp-row>.habit-history-row{order:5;flex:1 0 100%}.tp-habit-tools{order:4;margin-left:auto;font-size:var(--dj-tp-caption-size);font-weight:var(--dj-tp-caption-weight);line-height:var(--dj-tp-caption-line-height)}
.tp-focus> :not(.time):not(.tp-focus-title){display:none!important}
.tp-focus-title .tp-title{font-size:var(--dj-tp-focus-title-size)!important}.tp-focus::before{background:var(--tp-priority)!important;border-color:var(--tp-priority)!important}.tp-focus .time::before{background:var(--tp-priority)!important}
.tp-calendar.calendar-task-v11{display:flex!important;gap:7px;align-items:center;min-width:0;position:relative;padding:5px 8px 5px 12px;border-radius:5px;background:var(--panel);margin-block:3px}
.tp-calendar::before{content:'';position:absolute;left:2px;top:4px;bottom:4px;width:3px;border-radius:2px;background:var(--tp-priority)}
.tp-calendar-copy{flex:1;min-width:0}.tp-calendar-copy .tp-title{font-size:var(--dj-tp-calendar-title-size)!important}.tp-calendar-right{display:flex;gap:7px;align-items:center;justify-content:flex-end;max-width:45%;font-size:var(--dj-tp-secondary-size);font-weight:var(--dj-tp-secondary-weight);line-height:var(--dj-tp-secondary-line-height);flex-wrap:wrap}.tp-calendar-time{white-space:nowrap}.tp-calendar .tp-marker{width:18px!important;height:18px!important;flex-basis:18px}.tp-calendar .tp-amount{font-size:var(--dj-tp-secondary-size)}
@media(max-width:760px){.tp-view{gap:5px}.tp-right{max-width:29%}.tp-row>.task-row-tools{gap:1px!important}.tp-calendar{flex-wrap:wrap}.tp-calendar-copy{flex-basis:65%}.tp-calendar-right{max-width:100%;margin-left:auto}}
[data-idea-inbox]{display:none!important}
[data-route="ideas"],[data-v76-route="ideas"]{display:flex!important}
.v43-goal-list,.v43-goal-section>h2,.v43-goal-section>.v57-unified-head{border-top:0!important;border-bottom:0!important;box-shadow:none!important}
.rightbar-scroll,main.main{scrollbar-gutter:stable}
@media(min-width:1101px){.rightbar{box-sizing:border-box;min-width:320px;max-width:320px;width:320px}.app-shell{grid-template-columns:250px minmax(0,1fr) 320px}}
@media(max-width:1024px){.v43-task-status,.v28-done-undo,.v43-auto-status-stack{bottom:calc(max(var(--v78-bottom-space,80px),var(--v75-mobile-bar,68px)) + 84px + env(safe-area-inset-bottom,0px))!important;max-width:calc(100vw - 24px)!important;z-index:100110!important}}
.tp-wall-palette{position:fixed;z-index:100200;display:grid;grid-template-columns:repeat(9,24px);grid-template-rows:repeat(3,24px);gap:6px;padding:10px;background:var(--panel);border:1px solid var(--line);border-radius:12px;box-shadow:var(--shadow);box-sizing:content-box;max-width:calc(100vw - 24px)}
.tp-wall-palette>button{width:24px!important;height:24px!important;min-width:24px!important;min-height:24px!important;padding:0!important;border:1px solid #7775!important;border-radius:50%!important;aspect-ratio:1}.tp-wall-palette>button[aria-pressed=true]{outline:2px solid var(--accent);outline-offset:1px}
/* v.2: раньше значок наследовал цвет ОТ КНОПКИ (тогда сама кнопка была
 * артефакт-цветной) — теперь кнопка стандартного цвета (см. выше), значок
 * же остаётся цветным через --tp-color; color:inherit здесь молча делал
 * значок тоже чёрным (наследуя от текста), перебивая правило .tp-artifact>
 * .v22-icon выше по файлу той же специфичностью, но более поздним
 * порядком. Заменено на ту же переменную, дублирования нет — старое
 * .tp-artifact>.v22-icon-правило можно было бы удалить, оставлено единым
 * источником здесь для .tp-goal-mark тоже. */
.tp-artifact .v22-icon,.tp-goal-mark .v22-icon{color:var(--tp-color,inherit)!important}

/* v.2 п.9: сводный ряд подзадач за пределом тира 1 (см. subtaskSummaryMarkup
 * в task-presentation.js) — та же геометрия ряда (высота/паддинг) через
 * базовый .task-row-v11, раскладка проще: значок-стрелка слева, подпись
 * «X/Y задач», опциональный кружок-счётчик Z справа. Границы/фон/скругление
 * — общее правило п.8 ниже (та же :is(...), тот же stack-first/-last). */
.task-row-v11.tp-sub-summary{display:flex!important;align-items:center!important;gap:10px!important;width:100%;font:inherit;color:var(--ink);cursor:pointer;text-align:left}
.tp-sub-summary-lead{display:inline-flex;align-items:center;justify-content:center;flex:0 0 22px;width:22px;height:22px;border:1px solid var(--line);border-radius:50%;color:var(--muted)}
.tp-sub-summary-lead>.v22-icon{width:14px!important;height:14px!important;margin:0!important}
.tp-sub-summary-label{flex:1;min-width:0;font-size:var(--dj-tp-title-size);font-weight:var(--dj-tp-title-weight);line-height:var(--dj-tp-title-line-height);color:var(--ink)}
.tp-sub-summary-count{display:inline-flex;align-items:center;justify-content:center;flex:0 0 auto;width:20px;height:20px;min-width:20px;border:1px solid var(--line);border-radius:50%;font-size:var(--dj-tp-caption-size);font-weight:var(--dj-tp-caption-weight);line-height:var(--dj-tp-caption-line-height);color:var(--muted)}

/* v.2 п.8, исправлено по живому скриншоту пользователя — скругление и зазор
 * НЕ «первый/последний ряд в группе по общему DOM-родителю» (это молчаливо
 * ломается ровно на границе уровней: задача верхнего уровня со своей
 * раскрытой подзадачей сразу под ней никогда не была «последней в своей
 * группе», хотя следом идёт уже не сосед её уровня, а её собственный
 * ребёнок). Прямая цитата: «если после них идёт НЕ задача их уровня, а
 * меньше [вложеннее], или вообще нет задачи — скругляются внешние углы».
 * stackEdges() (task-presentation.js) теперь сравнивает КАЖДЫЙ ряд с его
 * непосредственным визуальным соседом сверху/снизу (не с краями группы) —
 * ряд получает .tp-stack-first, если сосед СВЕРХУ другого уровня (или его
 * вовсе нет), .tp-stack-last — если сосед СНИЗУ другого уровня (или его нет).
 * Внутри одного уровня — 0px, общий шов (верхняя рамка снята у всех, кроме
 * .tp-stack-first). На границе уровней — по прямой просьбе именно 1px, не
 * 0 и не старые 3+3=6px — несёт его ТОЛЬКО margin-top на .tp-stack-first
 * (не margin-bottom на .tp-stack-last тоже — иначе на стыке было бы 1+1=2px,
 * у грид-элементов соседние margin не схлопываются, как в обычном потоке). */
:is([data-v15-task-row],.v35-tag-task-row,.tp-sub-summary){border:1px solid var(--line)!important;border-top:0!important;border-radius:0!important;background:var(--panel)!important}
.tp-stack-first{border-top:1px solid var(--line)!important;border-top-left-radius:10px!important;border-top-right-radius:10px!important;margin-top:1px!important}
.tp-stack-last{border-bottom-left-radius:10px!important;border-bottom-right-radius:10px!important}
/* Само border/radius/margin-top правило выше уже даёт верную геометрию, но
 * между строками всё равно был виден зазор 6px = ДВЕ независимые, более
 * ранние (до этого раунда) системы, о которых оно не знало: `.v15-tree-list`/
 * `.v15-children` — `display:grid;gap:3px` (v80.css/v82.css, комментарий там
 * «recursive projects: three-point breathing room» — старая, тоже «своя
 * рамка у каждого ряда», но БЕЗ учёта уровней, всегда 3px зазор) и
 * `.v15-task-node+.v15-task-node{margin-top:3px}` (viewport-ui.css). Обе
 * загружаются РАНЬШЕ task-presentation.css — побеждаем порядком файлов той
 * же специфичностью. */
:is(.v15-tree-list,.v15-children){gap:0!important}
.v15-task-node+.v15-task-node{margin-top:0!important}
/* Третий, отдельный источник — `.v15-children{padding:3px 0 0 57px}`
 * (v80.css, тот же «three-point breathing room» блок) — верхний паддинг 3px
 * добавлялся ИМЕННО при входе на новый уровень (первый ребёнок раскрытого
 * родителя), но не при выходе обратно — из-за чего «вглубь» зазор выходил
 * 3+1=4px, а «наружу» — верно 1px. Левый паддинг (57px, отступ вложенности)
 * не трогаем — он даёт нужный визуальный сдвиг, не часть зазора. */
.v15-children{padding-top:0!important}
