316 lines
8.2 KiB
CSS
316 lines
8.2 KiB
CSS
/* ============================================================
|
|
Дашборд продаж — только компоновка.
|
|
Цвета, шрифты и размеры — токены KT AI (kt-ai-tokens.css).
|
|
============================================================ */
|
|
|
|
/* ---------- каркас: sidebar + рабочая область ---------- */
|
|
.dash-shell {
|
|
display: grid;
|
|
grid-template-columns: 112px minmax(0, 1fr);
|
|
min-height: 100vh;
|
|
}
|
|
|
|
.dash-sidebar {
|
|
display: flex;
|
|
flex-direction: column;
|
|
position: sticky;
|
|
top: 0;
|
|
height: 100vh;
|
|
padding: var(--kt-ai-space-5) var(--kt-ai-space-4);
|
|
border-right: 1px solid var(--kt-ai-border);
|
|
background: var(--kt-ai-bg-soft);
|
|
}
|
|
|
|
/* Липкая первая колонка таблицей — фон под строкой нужен,
|
|
иначе при горизонтальном скролле цифры «плывут» под ней */
|
|
.kt-ai-table td.kt-ai-sticky-first,
|
|
.kt-ai-table th.kt-ai-sticky-first {
|
|
background: var(--kt-ai-card-bg);
|
|
}
|
|
|
|
.dash-brand-name {
|
|
display: block;
|
|
margin-top: var(--kt-ai-space-2);
|
|
font-size: var(--kt-ai-text-xs);
|
|
line-height: 1.35;
|
|
color: var(--kt-ai-fg-muted);
|
|
letter-spacing: .02em;
|
|
}
|
|
|
|
.dash-sidebar-note {
|
|
margin-top: auto;
|
|
padding-top: var(--kt-ai-space-4);
|
|
border-top: 1px solid var(--kt-ai-divider);
|
|
font-size: var(--kt-ai-text-2xs);
|
|
color: var(--kt-ai-fg-faint);
|
|
}
|
|
|
|
.dash-main {
|
|
min-width: 0;
|
|
padding: var(--kt-ai-space-7) var(--kt-ai-space-8) var(--kt-ai-space-12);
|
|
}
|
|
|
|
/* ---------- шапка ---------- */
|
|
.dash-topbar {
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: space-between;
|
|
gap: var(--kt-ai-space-6);
|
|
flex-wrap: wrap;
|
|
margin-bottom: var(--kt-ai-space-6);
|
|
}
|
|
|
|
.dash-crumb {
|
|
display: block;
|
|
font-size: var(--kt-ai-text-2xs);
|
|
letter-spacing: .06em;
|
|
text-transform: uppercase;
|
|
color: var(--kt-ai-fg-faint);
|
|
}
|
|
|
|
.dash-title {
|
|
margin: 2px 0 0;
|
|
font-size: var(--kt-ai-text-2xl);
|
|
font-weight: var(--kt-ai-weight-bold);
|
|
letter-spacing: -.02em;
|
|
}
|
|
|
|
.dash-topbar-actions {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: var(--kt-ai-space-3);
|
|
flex-wrap: wrap;
|
|
}
|
|
|
|
/* ---------- KPI-полоса (сетка из 4 карточек) ---------- */
|
|
.kt-ai-kpi-strip.dash-kpis {
|
|
display: grid;
|
|
grid-template-columns: repeat(4, minmax(0, 1fr));
|
|
gap: var(--kt-ai-space-4);
|
|
padding: 0 0 var(--kt-ai-space-7);
|
|
}
|
|
|
|
.kt-ai-kpi-strip.dash-kpis .kt-ai-kpi {
|
|
padding: var(--kt-ai-space-5);
|
|
background: var(--kt-ai-card-bg);
|
|
border: 1px solid var(--kt-ai-card-border);
|
|
border-radius: var(--kt-ai-radius-xl);
|
|
}
|
|
|
|
/* ---------- сетка: карта + график ---------- */
|
|
.dash-grid {
|
|
display: grid;
|
|
grid-template-columns: minmax(0, 7fr) minmax(0, 5fr);
|
|
gap: var(--kt-ai-space-5);
|
|
align-items: stretch;
|
|
margin-bottom: var(--kt-ai-space-5);
|
|
}
|
|
|
|
.dash-panel {
|
|
min-width: 0;
|
|
padding: var(--kt-ai-space-6);
|
|
background: var(--kt-ai-card-bg);
|
|
border: 1px solid var(--kt-ai-card-border);
|
|
border-radius: var(--kt-ai-radius-xl);
|
|
}
|
|
|
|
.dash-panel-head {
|
|
display: flex;
|
|
align-items: baseline;
|
|
justify-content: space-between;
|
|
gap: var(--kt-ai-space-4);
|
|
flex-wrap: wrap;
|
|
margin-bottom: var(--kt-ai-space-5);
|
|
}
|
|
|
|
.dash-panel-head h2 {
|
|
margin: 0;
|
|
font-size: var(--kt-ai-text-md);
|
|
font-weight: var(--kt-ai-weight-semibold);
|
|
}
|
|
|
|
.dash-panel-hint {
|
|
font-size: var(--kt-ai-text-2xs);
|
|
color: var(--kt-ai-fg-muted);
|
|
}
|
|
|
|
/* ---------- карта ---------- */
|
|
.dash-map-wrap svg {
|
|
display: block;
|
|
width: 100%;
|
|
height: auto;
|
|
max-height: 430px;
|
|
}
|
|
|
|
.dash-map-region {
|
|
cursor: pointer;
|
|
stroke: var(--kt-ai-card-bg);
|
|
stroke-width: 2;
|
|
transition: opacity .15s ease;
|
|
}
|
|
|
|
.dash-map-region:hover,
|
|
.dash-map-region:focus-visible { opacity: .82; outline: none; }
|
|
|
|
.dash-map-region[data-selected="true"] {
|
|
stroke: var(--kt-ai-fg);
|
|
stroke-width: 2.5;
|
|
}
|
|
|
|
.dash-map-region[data-tone="ok"] { fill: color-mix(in srgb, var(--kt-ai-chart-green) 34%, var(--kt-ai-bg)); }
|
|
.dash-map-region[data-tone="warn"] { fill: color-mix(in srgb, var(--kt-ai-chart-orange) 38%, var(--kt-ai-bg)); }
|
|
.dash-map-region[data-tone="risk"] { fill: color-mix(in srgb, var(--kt-ai-chart-red) 38%, var(--kt-ai-bg)); }
|
|
|
|
.dash-map-label {
|
|
font-size: 11px;
|
|
font-weight: var(--kt-ai-weight-semibold);
|
|
fill: var(--kt-ai-fg);
|
|
pointer-events: none;
|
|
user-select: none;
|
|
text-anchor: middle;
|
|
}
|
|
|
|
.dash-legend {
|
|
display: flex;
|
|
gap: var(--kt-ai-space-4);
|
|
flex-wrap: wrap;
|
|
}
|
|
|
|
.dash-legend-item {
|
|
display: inline-flex;
|
|
align-items: center;
|
|
gap: var(--kt-ai-space-2);
|
|
font-size: var(--kt-ai-text-2xs);
|
|
color: var(--kt-ai-fg-muted);
|
|
}
|
|
|
|
.dash-legend-dot {
|
|
display: inline-block;
|
|
width: 10px;
|
|
height: 10px;
|
|
border-radius: var(--kt-ai-radius-full);
|
|
}
|
|
|
|
.dash-legend-dot[data-tone="ok"] { background: color-mix(in srgb, var(--kt-ai-chart-green) 55%, var(--kt-ai-bg)); }
|
|
.dash-legend-dot[data-tone="warn"] { background: color-mix(in srgb, var(--kt-ai-chart-orange) 55%, var(--kt-ai-bg)); }
|
|
.dash-legend-dot[data-tone="risk"] { background: color-mix(in srgb, var(--kt-ai-chart-red) 55%, var(--kt-ai-bg)); }
|
|
|
|
.dash-map-selected {
|
|
margin-top: var(--kt-ai-space-5);
|
|
padding: var(--kt-ai-space-4) var(--kt-ai-space-5);
|
|
border: 1px solid var(--kt-ai-divider);
|
|
border-radius: var(--kt-ai-radius-lg);
|
|
background: var(--kt-ai-bg-soft);
|
|
font-size: var(--kt-ai-text-sm);
|
|
color: var(--kt-ai-fg-muted);
|
|
}
|
|
|
|
.dash-map-selected strong {
|
|
color: var(--kt-ai-fg);
|
|
font-weight: var(--kt-ai-weight-semibold);
|
|
}
|
|
|
|
/* ---------- график: чистый SVG ---------- */
|
|
.dash-chart {
|
|
position: relative;
|
|
width: 100%;
|
|
height: 220px;
|
|
}
|
|
|
|
.dash-chart svg {
|
|
display: block;
|
|
width: 100%;
|
|
height: 100%;
|
|
}
|
|
|
|
.dcc-bar { cursor: pointer; transition: opacity .15s ease; }
|
|
.dcc-bar:hover, .dcc-bar:focus-visible { opacity: .8; outline: none; }
|
|
.dcc-grid { stroke: var(--kt-ai-divider); stroke-dasharray: 3 4; }
|
|
.dcc-axis { font-size: 10px; fill: var(--kt-ai-fg-faint); font-family: var(--kt-ai-font-mono); }
|
|
|
|
/* ---------- таблица ---------- */
|
|
.dash-search { max-width: 240px; }
|
|
|
|
.dash-sort {
|
|
display: flex;
|
|
gap: var(--kt-ai-space-2);
|
|
flex-wrap: wrap;
|
|
}
|
|
|
|
.dash-sort .is-on {
|
|
background: var(--kt-ai-primary-subtle);
|
|
border-color: var(--kt-ai-primary);
|
|
color: var(--kt-ai-primary);
|
|
font-weight: var(--kt-ai-weight-semibold);
|
|
}
|
|
|
|
.kt-ai-table .dash-num {
|
|
text-align: right;
|
|
font-variant-numeric: tabular-nums;
|
|
white-space: nowrap;
|
|
}
|
|
|
|
.kt-ai-table td.dash-pct {
|
|
font-weight: var(--kt-ai-weight-semibold);
|
|
font-variant-numeric: tabular-nums;
|
|
white-space: nowrap;
|
|
}
|
|
|
|
/* выбранная строка (клик по карте или по строке) */
|
|
.kt-ai-table tr[data-sel="1"] td,
|
|
.kt-ai-table tr[data-active="true"] td {
|
|
background: var(--kt-ai-primary-subtle);
|
|
}
|
|
|
|
.kt-ai-table tbody tr:hover td {
|
|
background: var(--kt-ai-bg-hover);
|
|
}
|
|
|
|
.kt-ai-table tbody tr[data-sel="1"]:hover td,
|
|
.kt-ai-table tbody tr[data-active="true"]:hover td {
|
|
background: var(--kt-ai-primary-subtle);
|
|
}
|
|
|
|
.dash-progress {
|
|
display: inline-block;
|
|
vertical-align: middle;
|
|
width: 56px;
|
|
height: 6px;
|
|
margin-left: var(--kt-ai-space-3);
|
|
border-radius: var(--kt-ai-radius-full);
|
|
background: var(--kt-ai-bg-sunken);
|
|
overflow: hidden;
|
|
}
|
|
|
|
.dash-progress i {
|
|
display: block;
|
|
height: 100%;
|
|
border-radius: var(--kt-ai-radius-full);
|
|
}
|
|
|
|
.dash-progress i[data-tone="ok"] { background: var(--kt-ai-chart-green); }
|
|
.dash-progress i[data-tone="warn"] { background: var(--kt-ai-chart-orange); }
|
|
.dash-progress i[data-tone="risk"] { background: var(--kt-ai-chart-red); }
|
|
|
|
/* ---------- адаптив ---------- */
|
|
@media (max-width: 1100px) {
|
|
.dash-grid { grid-template-columns: 1fr; }
|
|
.kt-ai-kpi-strip.dash-kpis { grid-template-columns: repeat(2, minmax(0, 1fr)); }
|
|
}
|
|
|
|
@media (max-width: 860px) {
|
|
.dash-shell { grid-template-columns: 1fr; }
|
|
.dash-sidebar { display: none; }
|
|
.dash-main { padding: var(--kt-ai-space-5) var(--kt-ai-space-4) var(--kt-ai-space-10); }
|
|
}
|
|
|
|
@media (max-width: 640px) {
|
|
.dash-topbar { flex-direction: column; align-items: stretch; }
|
|
.dash-topbar-actions { justify-content: space-between; }
|
|
.dash-topbar-actions .kt-ai-btn { flex: 1; }
|
|
.kt-ai-select { flex: 1; }
|
|
.dash-search { width: 100%; max-width: none; }
|
|
.kt-ai-kpi-strip.dash-kpis { grid-template-columns: 1fr; }
|
|
.dash-panel { padding: var(--kt-ai-space-4); }
|
|
}
|