dashbord/style.css

170 lines
6.1 KiB
CSS

/* Стили дашборда: только сетка и мелочи. Цвета — токенами ДС, без hex. */
.dash-wrap {
max-width: 1180px;
margin: 0 auto;
padding: var(--kt-ai-space-8) var(--kt-ai-space-5) var(--kt-ai-space-11);
}
.dash-title-row {
display: flex;
align-items: flex-start;
justify-content: space-between;
gap: var(--kt-ai-space-4);
flex-wrap: wrap;
margin-bottom: var(--kt-ai-space-6);
}
.dash-title { display: flex; flex-direction: column; gap: var(--kt-ai-space-2); }
.dash-title h1 {
margin: 0;
font-size: var(--kt-ai-text-2xl);
font-weight: var(--kt-ai-weight-semibold);
letter-spacing: -.02em;
}
.dash-actions { display: flex; align-items: center; gap: var(--kt-ai-space-4); flex-wrap: wrap; }
/* ---------- KPI ---------- */
.kpi-strip {
display: grid;
gap: var(--kt-ai-space-4);
grid-template-columns: repeat(auto-fit, minmax(168px, 1fr));
margin-bottom: var(--kt-ai-space-6);
}
.kpi-strip .kt-ai-kpi {
background: var(--kt-ai-card-bg);
border: 1px solid var(--kt-ai-card-border);
border-radius: var(--kt-ai-radius-2xl);
box-shadow: var(--kt-ai-card-shadow);
padding: var(--kt-ai-space-6) var(--kt-ai-space-6);
gap: var(--kt-ai-space-1);
}
.kpi-strip .kt-ai-kpi .value { font-size: var(--kt-ai-text-xl); }
.kpi-strip .kt-ai-kpi .hint { color: var(--kt-ai-fg-faint); }
.delta { display: inline-flex; align-items: center; gap: 4px; font-variant-numeric: tabular-nums; }
.delta[data-tone="ok"] { color: var(--kt-ai-status-ok-fg); }
.delta[data-tone="risk"] { color: var(--kt-ai-status-risk-fg); }
.delta .kt-icon { width: 12px; height: 12px; }
/* ---------- Линейный график ---------- */
.line-chart-wrap { position: relative; }
.kt-line { display: block; width: 100%; height: 208px; }
.kt-line .grid line { stroke: var(--kt-ai-border); stroke-width: 1; }
.kt-line .line {
stroke: var(--kt-ai-chart-blue);
stroke-width: 2.5;
fill: none;
stroke-linejoin: round;
stroke-linecap: round;
vector-effect: non-scaling-stroke;
}
.kt-line .area { fill: var(--kt-ai-primary-subtle); opacity: .35; }
.kt-line circle.pt {
fill: var(--kt-ai-card-bg);
stroke: var(--kt-ai-chart-blue);
stroke-width: 2;
vector-effect: non-scaling-stroke;
cursor: pointer;
}
.kt-line circle.pt:hover { fill: var(--kt-ai-chart-blue); }
.cc-axis[data-line="true"] { justify-content: space-between; }
.cc-axis[data-line="true"] span { flex: 0 1 auto; max-width: 90px; }
/* ---------- Сетка блоков ---------- */
.charts-grid { display: grid; grid-template-columns: 1fr; gap: var(--kt-ai-space-5); margin-bottom: var(--kt-ai-space-6); }
.charts-grid .cc-bars { min-height: 120px; }
.charts-grid .cc-bar { --bar-w: var(--bar-w, 24px); }
.charts-grid .cc-bar > i { width: var(--bar-w); margin: 0 auto; }
.charts-grid .cc-axis { display: none; }
.block-title {
display: flex;
align-items: center;
justify-content: space-between;
gap: var(--kt-ai-space-4);
flex-wrap: wrap;
margin-bottom: var(--kt-ai-space-3);
}
.block-title .kt-ai-label { margin: 0; }
/* ---------- Топ сотрудников ---------- */
.top-list { display: flex; flex-direction: column; }
.top-row {
display: grid;
grid-template-columns: 28px minmax(140px, 26%) 1fr auto;
gap: var(--kt-ai-space-4);
align-items: center;
padding: var(--kt-ai-space-4) 0;
border-bottom: 1px solid var(--kt-ai-divider);
}
.top-row:last-child { border-bottom: none; }
.top-name { font-size: var(--kt-ai-text-sm); min-width: 0; }
.top-name .sub { display: block; font-size: var(--kt-ai-text-2xs); color: var(--kt-ai-fg-faint); }
.top-bar { height: 8px; border-radius: 4px; background: var(--kt-ai-bg-sunken); overflow: hidden; }
.top-bar i { display: block; height: 100%; border-radius: 4px; background: var(--kt-ai-chart-blue); }
.top-val { font-size: var(--kt-ai-text-sm); font-weight: var(--kt-ai-weight-semibold); font-variant-numeric: tabular-nums; }
/* ---------- Тулбар над таблицей ---------- */
.dash-toolbar {
display: flex;
align-items: center;
gap: var(--kt-ai-space-4);
flex-wrap: wrap;
margin-bottom: var(--kt-ai-space-5);
}
.dash-toolbar .kt-ai-input { width: min(280px, 100%); }
/* ---------- Таблица ---------- */
.kt-ai-table th.num,
.kt-ai-table thead th:has(.th-sort) { text-align: right; }
.rank {
display: inline-flex;
align-items: center;
justify-content: center;
min-width: 26px;
height: 22px;
border-radius: var(--kt-ai-radius-tag);
background: var(--kt-ai-bg-active);
color: var(--kt-ai-fg-muted);
font-size: var(--kt-ai-text-2xs);
font-weight: var(--kt-ai-weight-semibold);
font-variant-numeric: tabular-nums;
}
tr[data-top="true"] .rank { background: var(--kt-ai-primary); color: var(--kt-ai-fg-on-fill); }
.progress-cell { display: flex; flex-direction: column; gap: 6px; min-width: 132px; }
.progress-line { display: flex; align-items: center; gap: var(--kt-ai-space-3); }
.progress-track { flex: 1; height: 6px; border-radius: 3px; background: var(--kt-ai-bg-sunken); overflow: hidden; }
.progress-track i { display: block; height: 100%; border-radius: 3px; background: var(--kt-ai-chart-blue); }
.progress-num { font-size: var(--kt-ai-text-2xs); font-variant-numeric: tabular-nums; color: var(--kt-ai-fg-muted); }
tr[data-top="true"] .progress-track i { background: var(--kt-ai-primary); }
/* ---------- Подвал ---------- */
.dash-footer {
margin-top: var(--kt-ai-space-10);
display: flex;
align-items: center;
gap: var(--kt-ai-space-4);
flex-wrap: wrap;
color: var(--kt-ai-fg-faint);
font-size: var(--kt-ai-text-2xs);
border-top: 1px solid var(--kt-ai-border);
padding-top: var(--kt-ai-space-5);
}
/* ---------- Адаптив ---------- */
@media (min-width: 860px) {
.charts-grid { grid-template-columns: 1fr 1fr; }
}
@media (max-width: 639px) {
.dash-title-row { flex-direction: column; align-items: stretch; }
.dash-actions { justify-content: space-between; }
.dash-toolbar .kt-ai-input { width: 100%; }
.dash-toolbar .kt-ai-select-wrap { min-width: 0; width: 100%; }
.top-row { grid-template-columns: 24px minmax(110px, 1fr); }
.top-bar, .top-val { display: none; }
.kpi-strip { grid-template-columns: repeat(2, 1fr); }
}