/* Продуктовый слой: сетка, KPI, график, таблица городов. Цвета и размеры — токены ДС; здесь только компоновка. */ .dash-brand { display: flex; align-items: center; gap: var(--kt-ai-space-4); font-weight: var(--kt-ai-weight-semibold); } .dash-brand img { display: block; } .dash-main { background: var(--kt-ai-bg); min-height: calc(100dvh - 56px); } .dash-wrap { max-width: 1180px; padding: var(--kt-ai-space-9) var(--kt-ai-space-6) var(--kt-ai-space-11); } .dash-head h1 { margin: 0; font-size: var(--kt-ai-text-3xl); letter-spacing: -.035em; } .dash-head .kt-ai-meta { margin-top: var(--kt-ai-space-2); } /* Карточки — радиус стиля Стандартный (10px) */ .kt-ai-card { border-radius: var(--vibe-card-radius); } /* KPI-карточки: равномерная сетка */ #kpi-strip { grid-template-columns: repeat(4, minmax(0, 1fr)); } #kpi-strip .value { font-size: var(--kt-ai-text-2xl); letter-spacing: -.02em; } #kpi-strip .value[data-long="true"] { font-size: var(--kt-ai-text-xl); } #kpi-strip .label { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } .kpi-delta { margin-top: var(--kt-ai-space-1); font-size: var(--kt-ai-text-2xs); font-variant-numeric: tabular-nums; } .kpi-delta.up { color: var(--kt-ai-status-ok-fg); } .kpi-delta.down { color: var(--kt-ai-status-risk-fg); } .kpi-delta.flat { color: var(--kt-ai-fg-muted); } /* Карточка графика */ .dash-chart-card { padding: var(--kt-ai-space-7); } .dash-chart { width: 100%; height: 210px; position: relative; } .dash-chart-sm { height: 160px; } .cc-bars { display: flex; align-items: flex-end; gap: 4px; width: 100%; height: 170px; padding-top: var(--kt-ai-space-2); } .cc-bar-col { flex: 1; min-width: 0; display: flex; flex-direction: column; align-items: center; justify-content: flex-end; gap: var(--kt-ai-space-2); height: 100%; } .cc-bar { width: 100%; max-width: 28px; border-radius: var(--kt-ai-radius-xs) var(--kt-ai-radius-xs) var(--kt-ai-radius-xs) var(--kt-ai-radius-xs); background: var(--kt-ai-chart-blue); min-height: 2px; transition: opacity var(--kt-ai-dur-fast); } .cc-bar[data-kt-tip]:hover { opacity: .82; } .cc-labels { display: flex; gap: 4px; width: 100%; margin-top: var(--kt-ai-space-1); } .cc-label { flex: 1; min-width: 0; text-align: center; font-size: var(--kt-ai-text-2xs); color: var(--kt-ai-fg-muted); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } /* Карточка таблицы */ .dash-table-card { padding: var(--kt-ai-space-7); } .dash-table-card .kt-ai-select { min-width: 180px; } .dash-table-foot { display: flex; align-items: center; gap: var(--kt-ai-space-4); font-size: var(--kt-ai-text-2xs); color: var(--kt-ai-fg-muted); padding-top: var(--kt-ai-space-4); border-top: 1px solid var(--kt-ai-divider); flex-wrap: wrap; } .dash-table-foot .dot { width: 8px; height: 8px; border-radius: 50%; display: inline-block; margin-right: 6px; vertical-align: middle; } .dash-table-foot .up-dot { background: var(--kt-ai-chart-green); } .dash-table-foot .down-dot { background: var(--kt-ai-chart-red); } /* Числа в таблице */ #cities-table td { cursor: pointer; } #cities-table td.num { white-space: nowrap; } .city-name { font-weight: var(--kt-ai-weight-medium); font-size: var(--kt-ai-text-md); } .city-region { font-size: var(--kt-ai-text-2xs); color: var(--kt-ai-fg-muted); } .delta-cell { font-variant-numeric: tabular-nums; font-weight: var(--kt-ai-weight-medium); } .delta-cell.up { color: var(--kt-ai-status-ok-fg); } .delta-cell.down { color: var(--kt-ai-status-risk-fg); } .delta-cell.flat { color: var(--kt-ai-fg-muted); } .share-bar { display: inline-block; width: 56px; height: 6px; background: var(--kt-ai-bg-active); border-radius: var(--kt-ai-radius-full); overflow: hidden; vertical-align: middle; margin-right: var(--kt-ai-space-3); } .share-bar > div { height: 100%; background: var(--kt-ai-chart-blue); border-radius: var(--kt-ai-radius-full); } /* Модальное окно города */ .dash-modal-overlay { position: fixed; inset: 0; background: var(--kt-ai-overlay); z-index: var(--kt-ai-z-modal); display: flex; align-items: center; justify-content: center; animation: ktai-fade var(--kt-ai-dur-base) var(--kt-ai-ease-enter); } .dash-modal .modal-head { display: flex; align-items: flex-start; justify-content: space-between; gap: var(--kt-ai-space-4); margin-bottom: var(--kt-ai-space-6); } .dash-modal .modal-title { font-size: var(--kt-ai-text-xl); } .dash-modal .kt-ai-modal-sub { margin: var(--kt-ai-space-6) 0 var(--kt-ai-space-3); } .dash-modal #d-kpis { grid-template-columns: repeat(4, minmax(0,1fr)); padding: 0; } .dash-modal #d-kpis .value { font-size: var(--kt-ai-text-lg); } /* Адаптив */ @media (max-width: 831.98px) { .dash-wrap { padding: var(--kt-ai-space-6) var(--kt-ai-space-5) var(--kt-ai-space-10); } #kpi-strip { grid-template-columns: repeat(2, minmax(0,1fr)); } .dash-head h1 { font-size: var(--kt-ai-text-2xl); } .cc-labels { display: none; } .cc-bars { gap: 3px; } } @media (max-width: 639.98px) { .dash-brand strong { display: none; } .dash-chart { height: 170px; } .cc-bars { height: 130px; } .dash-chart-sm { height: 150px; } /* Таблица на телефоне: скрываем регион и средний чек */ #cities-table th:nth-child(2), #cities-table td:nth-child(2), #cities-table th:nth-child(6), #cities-table td:nth-child(6) { display: none; } #kpi-strip { grid-template-columns: repeat(2, minmax(0,1fr)); gap: var(--kt-ai-space-4); } #kpi-strip .value { font-size: var(--kt-ai-text-xl); } /* Таблица на телефоне: скрываем дубль региона и средний чек, подписываем первые ячейки как «label: value» */ #cities-table tr { display: block; border-bottom: 1px solid var(--kt-ai-divider); } #cities-table thead { display: none; } #cities-table td { display: flex; justify-content: space-between; align-items: center; gap: var(--kt-ai-space-4); height: auto; padding: var(--kt-ai-space-3) var(--kt-ai-space-5); text-align: right; } #cities-table td::before { content: attr(data-label); font-size: var(--kt-ai-text-2xs); color: var(--kt-ai-fg-muted); text-align: left; flex-shrink: 0; } #cities-table td:nth-child(2), #cities-table td:nth-child(6) { display: none; } #cities-table td:first-child::before { content: none; } #cities-table .city-name { text-align: left; } }