@import '../../../../styles/design-tokens'; // Постоянная боковая панель (всегда открыта). Раскладку колонок задаёт корень; // здесь — только внутреннее оформление панели. .panel { display: flex; flex-direction: column; height: 100%; background: $white; border: 1px solid $gray-200; border-radius: $r-lg; box-shadow: $sh-1; overflow: hidden; } .header { display: flex; align-items: center; justify-content: space-between; gap: $sp-2; padding: $sp-4 $sp-5; border-bottom: 1px solid $gray-200; } .collapseToggle { flex-shrink: 0; display: inline-flex; align-items: center; justify-content: center; width: 26px; height: 26px; padding: 0; border: 1px solid $gray-300; border-radius: $r-sm; background: $white; color: $navy-700; cursor: pointer; transition: .16s; &:hover { border-color: $gold-400; color: $gold-600; } } .panelCollapsed { align-items: center; padding: $sp-3 0; } .title { font-family: $font-serif; font-size: 18px; color: $navy-900; } .searchWrap { padding: $sp-3 $sp-5 0; } .search { width: 100%; padding: 8px 12px; border: 1px solid $gray-300; border-radius: $r-sm; background: $white; font-family: $font-sans; font-size: $fs-sm; color: $gray-900; transition: .18s; @include input-focus-gold; &::placeholder { color: $gray-400; } } .body { flex: 1; overflow-y: auto; padding: $sp-5; font-size: $fs-sm; } .empty, .error { color: $gray-500; } .error { color: $red-500; } .section + .section { margin-top: $sp-6; padding-top: $sp-6; border-top: 1px solid $gray-200; } .sectionTitle { font-family: $font-sans; font-size: $fs-caption; font-weight: 600; color: $gray-500; text-transform: uppercase; letter-spacing: .04em; margin-bottom: $sp-4; } .pager { display: flex; align-items: center; gap: 4px; margin-top: $sp-3; flex-wrap: wrap; } .pagerBtn { min-width: 24px; height: 24px; padding: 0 6px; border: 1px solid $gray-200; border-radius: $r-sm; background: $white; color: $gray-700; font-family: $font-sans; font-size: $fs-caption; cursor: pointer; transition: .16s; &:hover:not(:disabled) { border-color: $gold-400; color: $gold-600; } &:disabled { opacity: .4; cursor: default; } } .pagerBtnActive { background: $navy-800; border-color: $navy-800; color: $white; &:hover { border-color: $navy-800 !important; color: $white !important; } } .pagerEllipsis { color: $gray-400; font-size: $fs-caption; padding: 0 2px; } .table { width: 100%; border-collapse: collapse; table-layout: fixed; font-size: $fs-caption; th { text-align: left; font-weight: 600; color: $gray-500; font-size: $fs-caption; text-transform: uppercase; letter-spacing: .03em; padding: 6px 8px; border-bottom: 1px solid $gray-200; } td { // Высокие строки + перенос по словам: панель узкая, а длинные названия и // e-mail не должны обрезаться — пусть занимают несколько строк. height: 66px; padding: $sp-3 8px; border-bottom: 1px solid $gray-100; vertical-align: middle; white-space: normal; overflow-wrap: break-word; word-break: break-word; line-height: 1.4; } } .row { transition: background .16s; &:hover { background: $gold-50; } } .cellType { width: 72px; color: $gold-600; font-weight: 600; } .cellTitle { // Ширину не задаём — делит оставшееся место с cellAuthor (table-layout: fixed). min-width: 0; } .titleLink { display: block; color: $gray-900; text-decoration: none; &:hover { color: $gold-600; text-decoration: underline; } } .cellAuthor { color: $gray-500; } .cellDate { width: 64px; color: $gray-400; } .cellStatus { width: 96px; } .status { // inline-block, а не flex-элемент: бейдж живёт внутри ячейки таблицы и // переносится по словам (напр. «Возвращена на доработку» в узкой колонке). display: inline-block; padding: 3px 8px; border-radius: $r-md; font-size: $fs-caption; font-weight: 500; line-height: 1.3; } .statusDraft { background: $gray-100; color: $gray-700; } .statusOnApproval { background: $gold-100; color: $gold-600; } .statusApproved { background: $green-50; color: $green-600; } .statusRejected { background: $red-50; color: $red-500; } .statusReturned { background: $blue-50; color: $blue-600; } .statusDefault { background: $gray-100; color: $gray-500; }