274 lines
4.7 KiB
SCSS
274 lines
4.7 KiB
SCSS
@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;
|
||
}
|