Andrey Epifancev f4c3bd50a5 feat(web): панель «Эпики» на «Бэклоге» (#112)
Панель эпиков слева (240px, на узком окне скрыта, вместо неё выбор «Эпик»),
кнопка «Эпики» в панели фильтров, фильтр эпика в том числе для прошлых спринтов.
Заодно T4.1 (регэксп секции), T4.6 (хелпер visible), T4.7 (проверка кнопок).

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-25 20:35:35 +04:00

86 lines
6.7 KiB
CSS

/* экраны доски (бэклог, спринт, Kanban): только токены дизайн-системы */
.agile{display:flex;flex-direction:column;gap:var(--space-4);padding-top:var(--space-6)}
.agile .ui-page-header{margin-bottom:0}
.agile__gate{min-width:0}
.agile__link{color:var(--color-action-primary);font-weight:600;text-decoration:none}
.agile__link:hover{text-decoration:underline}
.agile__empty{margin:0;color:var(--color-text-secondary)}
.agile-section{display:flex;flex-direction:column;gap:var(--space-3);min-width:0}
.agile-section__head{display:flex;flex-wrap:wrap;align-items:center;gap:var(--space-2) var(--space-4)}
.agile-section__title{margin:0;font-size:var(--fs-lg);line-height:var(--lh-lg);font-weight:700}
.agile-section__meta{font-size:var(--fs-body);color:var(--color-text-secondary)}
.agile-section__goal{font-size:var(--fs-body);min-width:0;overflow-wrap:anywhere}
.agile-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column}
.agile-row{display:flex;align-items:center;gap:var(--space-3);min-width:0;padding:var(--space-2) var(--space-1);
border-top:1px solid var(--color-border-default);font-size:var(--fs-body);line-height:var(--lh-body);cursor:pointer}
.agile-row:first-child{border-top:0}
.agile-row:hover{background:var(--color-bg-hover)}
.agile-row.is-done{color:var(--color-text-secondary)}
.agile-row.is-done .agile-row__summary{text-decoration:line-through}
.agile-row__key{flex:0 0 auto;font-family:var(--font-mono);font-size:13px;color:var(--color-action-primary);text-decoration:none}
.agile-row__key:hover{text-decoration:underline}
.agile-row__summary{flex:1 1 auto;min-width:0;overflow-wrap:anywhere}
.agile-row__assignee{flex:0 1 160px;min-width:0;color:var(--color-text-secondary);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.agile-row__sp{flex:0 0 32px;text-align:right;color:var(--color-text-secondary)}
.agile-row__mark{flex:0 0 auto;font-size:var(--fs-caption);color:var(--color-status-warning)}
.agile-type{display:inline-flex;align-items:center;justify-content:center;flex:0 0 auto;width:16px;height:16px;border-radius:var(--radius-xs);
color:var(--color-text-on-primary);background:var(--color-text-secondary)}
.agile-type--epic{background:var(--k-ui)}
.agile-type--story{background:var(--color-status-success)}
.agile-type--task,.agile-type--subtask{background:var(--color-action-primary)}
.agile-type--bug{background:var(--color-status-error)}
.agile-past{display:flex;flex-direction:column;gap:var(--space-2)}
.agile-past>summary{cursor:pointer;font-weight:600;padding:var(--space-2) 0}
.agile-past__sprint{background:var(--color-bg-surface);border:1px solid var(--color-border-default);border-radius:var(--radius-lg);padding:var(--space-2) var(--space-4)}
.agile-past__sprint>summary{cursor:pointer;padding:var(--space-1) 0}
@container page (max-width: 640px){
.agile-row{flex-wrap:wrap}
.agile-row__assignee{flex-basis:100%}
}
/* «Спринт»: страница во всю ширину, колонки прокручиваются внутри контейнера */
.agile--wide{min-width:0}
.agile-columns{display:flex;align-items:flex-start;gap:var(--space-3);overflow-x:auto;padding-bottom:var(--space-2);min-width:0}
.agile-col{flex:0 0 280px;min-width:0;display:flex;flex-direction:column;gap:var(--space-2);
background:var(--color-bg-subtle);border:1px solid var(--color-border-default);border-radius:var(--radius-xl);padding:var(--space-3)}
.agile-col.is-extra{border-style:dashed}
.agile-col__head{display:flex;align-items:center;justify-content:space-between;gap:var(--space-2)}
.agile-col__name{margin:0;font-size:var(--fs-body);line-height:var(--lh-body);font-weight:700;overflow-wrap:anywhere}
.agile-col__count{font-size:var(--fs-caption);color:var(--color-text-secondary)}
.agile-col__caption{margin:0;font-size:var(--fs-caption);color:var(--color-text-secondary)}
.agile-col__list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:var(--space-2)}
.agile-card{display:flex;flex-direction:column;gap:var(--space-2);min-width:0;padding:var(--space-3);cursor:pointer;
background:var(--color-bg-surface);border:1px solid var(--color-border-default);border-radius:var(--radius-lg);
font-size:var(--fs-body);line-height:var(--lh-body)}
.agile-card:hover{background:var(--color-bg-hover)}
.agile-card.is-done{color:var(--color-text-secondary)}
.agile-card.is-done .agile-card__summary{text-decoration:line-through}
.agile-card__summary{overflow-wrap:anywhere}
.agile-card__foot{display:flex;align-items:center;gap:var(--space-2);min-width:0}
.agile-card__assignee{flex:1 1 auto;min-width:0;color:var(--color-text-secondary);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
/* панель фильтров */
.agile-toolbar{display:flex;flex-wrap:wrap;align-items:center;gap:var(--space-3)}
.agile-toolbar__search{flex:1 1 220px;min-width:0}
.agile-section__toggle{display:inline-flex;align-items:center;gap:var(--space-2);margin:0;padding:0;border:0;background:none;color:inherit;font:inherit;cursor:pointer}
.agile-section__toggle:focus-visible{outline:2px solid var(--color-focus-ring);outline-offset:2px}
/* «Бэклог»: панель «Эпики» слева; на узком окне — выбор «Эпик» в панели фильтров */
.agile-backlog{display:grid;grid-template-columns:minmax(0,1fr);gap:var(--space-4);align-items:start}
.agile-backlog.has-epics{grid-template-columns:240px minmax(0,1fr)}
.agile-backlog__main{display:flex;flex-direction:column;gap:var(--space-4);min-width:0}
.agile-epics{min-width:0;background:var(--color-bg-surface);border:1px solid var(--color-border-default);border-radius:var(--radius-lg);padding:var(--space-2)}
.agile-epics__list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:var(--space-1)}
.agile-epics__item{display:flex;align-items:baseline;flex-wrap:wrap;gap:0 var(--space-2);width:100%;margin:0;padding:var(--space-2);text-align:left;
border:0;border-radius:var(--radius-md);background:none;color:inherit;font:inherit;font-size:var(--fs-body);cursor:pointer}
.agile-epics__item:hover{background:var(--color-bg-hover)}
.agile-epics__item[aria-pressed="true"]{background:var(--color-bg-subtle);font-weight:600}
.agile-epics__item:focus-visible{outline:2px solid var(--color-focus-ring);outline-offset:2px}
.agile-epics__title{flex:1 1 100%;min-width:0;overflow-wrap:anywhere}
.agile-epics__key{font-family:var(--font-mono);font-size:var(--fs-caption);color:var(--color-text-secondary)}
.agile-epics__count{margin-left:auto;font-size:var(--fs-caption);color:var(--color-text-secondary)}
.agile-epic-select{display:none}
@container page (max-width: 899px){
.agile-backlog.has-epics{grid-template-columns:minmax(0,1fr)}
.agile-epics{display:none}
.agile-epic-select{display:inline-block}
.agile-epics-toggle{display:none}
}