/* =======================================================
   MpRefine Universal DataTables & UI Components Styles
   ======================================================= */

.dataTables_wrapper {
    width: 100%;
    position: relative;
}

.dataTables_scrollBody {
    width: 100%;
    overflow-x: auto;
}

table.dataTable {
    width: 100% !important;
    margin-top: 0 !important;
}

/* === ИСПРАВЛЕНИЕ: СЛОИ И Z-INDEX ШАПОК И СКРОЛЛА === */
/* Все элементы липкой шапки находятся на уровне 5, гарантированно уступая меню навигации (1000+) */
.dataTables_scrollHead {
    background-color: #f8f9fa;
    box-shadow: 0 4px 6px -1px rgba(0,0,0,0.05);
    z-index: 5 !important;
}

table.dataTable thead th,
.table-responsive table thead th {
    z-index: 5 !important;
}

/* === ВЕРХНИЙ ГОРИЗОНТАЛЬНЫЙ СКРОЛЛ === */
.dt-top-scroll-wrapper {
    width: 100%;
    overflow-x: auto;
    overflow-y: hidden;
    height: 16px;
    margin-bottom: 2px;
    background-color: #f8f9fa;
    border-bottom: 1px solid #d9dee3;
    box-shadow: 0 2px 4px rgba(0,0,0,0.02);
    z-index: 5 !important; /* ИСПРАВЛЕНИЕ: Слой перенесен из JS сюда */
}

.dt-top-scroll-inner {
    height: 1px;
}

/* === ГОРИЗОНТАЛЬНЫЙ СКРОЛЛ KPI-ЛЕНТЫ (было продублировано в AdvCampaigns/Experiments/Sorter/TaskReport) === */
.kpi-scroll-container {
    scrollbar-width: thin;
    padding-bottom: 0.5rem;
}

    .kpi-scroll-container::-webkit-scrollbar {
        height: 6px;
    }

    .kpi-scroll-container::-webkit-scrollbar-thumb {
        background-color: #d9dee3;
        border-radius: 4px;
    }

/* === КОМПАКТНЫЙ ЛЕЙБЛ ФОРМЫ (было продублировано в PriceRadar/Fact/Catalog/SupplyPrice/StatusAdvisor) === */
.form-label-compact {
    font-size: 0.7rem;
    font-weight: 700;
    margin-bottom: 2px;
    text-transform: uppercase;
    color: #566a7f;
}

/* === ПОДСВЕТКА ЯЧЕЕК РАДАРА ЦЕН (переиспользуемо на других страницах сравнения цен, было только в PriceRadar) === */
.cell-cheaper {
    background-color: rgba(113, 221, 55, 0.1) !important;
    color: #28a745;
    font-weight: 600;
}

.cell-expensive {
    background-color: rgba(255, 62, 29, 0.1) !important;
    color: #dc3545;
    font-weight: 600;
}

/* === ИНТЕРАКТИВНАЯ KPI-ПЛАШКА-ФИЛЬТР (было продублировано в Plan/Fact) === */
.kpi-filter {
    transition: all 0.2s ease-in-out;
    border: 1px solid transparent;
    cursor: pointer;
}

    .kpi-filter:hover {
        transform: translateY(-3px);
        box-shadow: 0 .25rem 1rem rgba(161, 172, 184, .45) !important;
    }

/* === ЦВЕТОВОЙ БЛОК ГРУППЫ КОЛОНОК "Воронка цен/себестоимость" (было продублировано в Plan/Fact) === */
.bg-block-1 {
    background-color: #e3f2fd !important;
}

/* Прогресс-бар поверх таблицы */
div.dataTables_wrapper div.dataTables_processing {
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    background: rgba(255, 255, 255, 0.7);
    z-index: 100;
    display: flex;
    justify-content: center;
    align-items: center;
    margin: 0 !important;
    padding: 0 !important;
}

#table-progress-bar {
    height: 3px;
    z-index: 105;
    display: none;
    border-radius: 0;
}

.dt-filter {
    font-weight: normal !important;
    font-size: 0.78rem;
    padding: 4px 6px;
    width: 100%;
    box-sizing: border-box;
    cursor: text;
    text-transform: none;
}

/* === ЧЕКБОКС-МУЛЬТИСЕЛЕКТ ФИЛЬТРОВ (замена одиночному <select> в шапке таблиц) ===
   Меню — самостоятельный элемент вне <th>: по клику переносится в <body> и позиционируется
   вручную (JS, initMpMultiSelectFilter), поэтому не зависит от overflow/пересборки шапки
   DataTables при scrollX. Кнопка "Сбросить" — отдельная кнопка той же высоты рядом с
   переключателем, а не пункт внутри списка. */
.mp-multiselect-filter {
    margin-top: 0.25rem;
    width: 100%;
}

.mp-multiselect-toggle {
    font-weight: normal !important;
    font-size: 0.78rem;
    padding: 4px 6px;
    box-sizing: border-box;
    flex: 1 1 auto;
    min-width: 0;
}

.mp-multiselect-clear {
    flex: 0 0 auto;
    line-height: 1;
}

.mp-multiselect-menu {
    display: none;
    position: fixed;
    z-index: 1060;
    background-color: var(--bs-body-bg, #fff);
    border: 1px solid rgba(0, 0, 0, 0.15);
    border-radius: 0.375rem;
    padding: 0.5rem;
    max-height: 260px;
    overflow-y: auto;
}

.mp-multiselect-menu .form-check {
    display: flex !important;
    align-items: center !important;
    padding-left: 0.5rem !important;
    margin-bottom: 0.35rem;
}

.mp-multiselect-menu .form-check-input {
    cursor: pointer;
    width: 1.05em;
    height: 1.05em;
    margin: 0 0.5rem 0 0 !important;
    float: none !important;
    flex-shrink: 0;
    appearance: auto !important;
}

.mp-multiselect-menu .form-check-label {
    cursor: pointer;
    font-size: 0.8rem;
    margin-bottom: 0 !important;
}

/* === ЗАКРЕПЛЕНИЕ КОЛОНОК DATATABLES === */
.dt-pinnable-column {
    position: relative;
}


/* Закреплённые ячейки (шапка и тело) — position:sticky по индивидуальному left,
   который считает JS (mprefine-datatables.js, applyPinnedColumns). Непрозрачный фон
   обязателен, иначе прокручивающийся контент будет просвечивать под закреплённой колонкой.
   !important нужен, т.к. у Bootstrap-таблиц (table-striped/table-hover) фон строк задаётся
   более специфичными селекторами (например tbody tr:nth-of-type(odd) > *), которые иначе
   перебивают наш фон. */
.dt-pinned-cell {
    position: sticky !important;
    background-color: var(--bs-body-bg, #fff) !important;
}

/* Закреплённая шапка должна перекрывать прокручиваемые заголовки,
   у которых общий стиль таблиц задаёт z-index: 5. */
.dataTables_scrollHead table.dataTable thead th.dt-pinned-cell {
    z-index: 6 !important;
}

.dataTables_scrollBody table.dataTable tbody tr > td.dt-pinned-cell {
    z-index: 2;
}

.dataTables_scrollBody table.dataTable tbody tr:hover > td.dt-pinned-cell {
    background-color: #f5f5f9 !important;
}

/* Тень по правому краю последней закреплённой колонки — визуально отделяет
   закреплённый блок от прокручиваемой части таблицы. */
.dt-pinned-cell-edge {
    box-shadow: 2px 0 4px -2px rgba(0, 0, 0, 0.15);
}

/* Плашка-«козырёк» пиннинга: всплывает над шапкой при наведении на заголовок
   колонки, шириной с колонку — выглядит её продолжением вверх. Живёт в <body>
   (JS позиционирует по координатам колонки), поэтому её не режет overflow
   контейнера скролла и она ничего не заслоняет внутри самой ячейки. */
.dt-pin-flyout {
    position: fixed;
    z-index: 1080;
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 0.3rem;
    height: 1.9rem;
    padding: 0 0.65rem;
    background: #fff;
    border: 1px solid #d9dee3;
    border-bottom: 0;
    border-radius: 0.4rem 0.4rem 0 0;
    box-shadow: 0 -3px 10px rgba(67, 89, 113, 0.12);
    font-size: 0.72rem;
    font-weight: 600;
    color: #566a7f;
    cursor: pointer;
    user-select: none;
    white-space: nowrap;
    opacity: 0;
    visibility: hidden;
    transform: translateY(4px);
    transition: opacity 0.13s ease, transform 0.13s ease, visibility 0.13s;
}

    .dt-pin-flyout.visible {
        opacity: 1;
        visibility: visible;
        transform: translateY(0);
    }

    .dt-pin-flyout:hover {
        color: #696cff;
        background: #f8f8ff;
        border-color: rgba(105, 108, 255, 0.4);
    }

    .dt-pin-flyout.active {
        color: #696cff;
    }

    .dt-pin-flyout i {
        font-size: 0.95rem;
    }

/* Булавка-индикатор в заголовке закреплённой колонки: видна постоянно,
   пока колонка закреплена; клик по ней — быстрое открепление.
   Собственная ширина (плюс flex-gap строки заголовка) компенсируется
   отрицательным отступом — строка заголовка не становится шире, и булавка
   не раздвигает ни шапку, ни колонку. */
.dt-pinned-glyph {
    flex: 0 0 auto;
    order: 98;
    color: #696cff;
    font-size: 0.85rem;
    cursor: pointer;
    line-height: 1;
    margin-right: -1.15rem;
    vertical-align: middle; /* запасной вариант вне .dt-th-title */
}

    .dt-pinned-glyph:hover {
        color: #ff3e1d;
    }

/* В "технической" копии шапки внутри scrollBody интерактив не показываем */
.dataTables_scrollBody thead .dt-pinned-glyph {
    display: none !important;
}

/* === ИСПРАВЛЕНИЕ: ЖЕСТКИЙ ИНЛАЙН ЧЕКБОКСОВ В МЕНЮ "ВИД" === */
#customColVisBtn .dropdown-menu .form-check {
    display: flex !important;
    align-items: center !important;
    padding-left: 0.5rem !important; /* Убираем лишние паддинги Bootstrap */
    margin-bottom: 0.4rem;
}

#customColVisBtn .dropdown-menu .form-check-input {
    cursor: pointer;
    width: 1.1em;
    height: 1.1em;
    margin: 0 0.6rem 0 0 !important; /* Задаем четкий отступ справа до текста */
    float: none !important; /* Отменяем дефолтный флоат, ломающий флекс-контейнер */
    flex-shrink: 0;
    appearance: auto !important; /* Нативный аккуратный вид */
}

#customColVisBtn .dropdown-menu .form-check-label {
    cursor: pointer;
    font-size: 0.8rem;
    margin-bottom: 0 !important; /* Убираем нижний отступ, ломающий центрирование */
    display: inline-block;
}

/* === KPI ПЛАШКИ === */
.kpi-card {
    cursor: pointer;
    transition: box-shadow 0.15s ease, background-color 0.15s ease, border-color 0.15s ease;
}

    .kpi-card:hover {
        background-color: #fdfdff;
        box-shadow: 0 0 0 1px #e2e5ea, 0 3px 8px rgba(67, 89, 113, 0.14);
    }

.kpi-active-border {
    border-left-width: 6px !important;
    background-color: rgba(0,0,0,0.03) !important;
}

.kpi-mini {
    padding: 0.8rem;
    border-radius: 0.5rem;
    background: #fff;
    border-left: 4px solid transparent;
    /* hairline-контур через ring-тень: border-утилиты Bootstrap (border-primary и т.п.)
       красят все стороны рамки, поэтому обычный border здесь использовать нельзя */
    box-shadow: 0 0 0 1px #eceef1, 0 1px 3px rgba(161, 172, 184, 0.12);
    height: 100%;
}

.kpi-title {
    font-size: 0.65rem;
    text-transform: uppercase;
    color: #a1acb8;
    margin-bottom: 0.2rem;
    font-weight: 600;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}

.kpi-value {
    font-size: 1.2rem;
    font-weight: 700;
    margin-bottom: 0;
}

.kpi-ribbon {
    display: flex;
    flex-direction: column;
    justify-content: center;
    padding: 0.55rem 0.9rem;
    border-radius: 0.5rem;
    background: #fff;
    border-left: 3px solid transparent;
    box-shadow: 0 2px 4px rgba(161, 172, 184, 0.1);
    white-space: nowrap;
    flex-shrink: 0;
}

.product-img {
    object-fit: cover;
    width: 100%;
    height: 100%;
}

.table-text-sm {
    font-size: 0.82rem;
}

.cursor-pointer {
    cursor: pointer;
}

/* =======================================================
   ЕДИНЫЙ ТУЛБАР / ШАПКА ТАБЛИЦЫ (Фаза 2 унификации, MPR-295)
   Раньше почти на каждой странице была своя, слегка отличающаяся версия одной и той же
   строки-тулбара (с/без border-bottom, с/без лишнего gap) и своя разметка внутри <th>
   (где-то <br>, где-то нет, тултип то у текста, то у самого <th>). Ниже — единый паттерн,
   которым размечаются все табличные страницы.
   ======================================================= */

/* Строка-тулбар над таблицей (поисковые/переключательные контролы страницы, кнопки
   действий) — единая обёртка вместо трёх похожих вариантов на разных страницах. */
.dt-toolbar-row {
    display: flex;
    flex-wrap: wrap;
    justify-content: space-between;
    align-items: center;
    gap: 0.5rem;
    padding: 0 0.75rem 0.75rem;
    margin-bottom: 0.5rem;
    border-bottom: 1px solid #eceef1;
}

/* Заголовок колонки + тултип-иконка внутри <th> — одна строка, единый вид иконки/отступа
   вместо разнобоя (то <i> после текста, то data-bs-toggle на самом <th>). */
.dt-th-title {
    display: flex;
    align-items: center;
    gap: 0.3rem;
}

.dt-th-help {
    color: #a1acb8;
    font-size: 0.85em;
    cursor: help;
}

/* Обёртка фильтра(ов) под заголовком колонки. Один фильтр — просто отступ сверху;
   два контрола в одной ячейке (например текстовый поиск + мультивыбор) — в ряд с зазором,
   а не как раньше — вертикальный стек с рассинхронизированными mt-1/mb-1 на разных страницах. */
.dt-th-filter {
    margin-top: 0.35rem;
}

.dt-th-filter.dt-th-filter-row {
    display: flex;
    align-items: center;
    gap: 0.35rem;
}

/* === КАНОН ШАПКИ: ЕДИНАЯ ТИПОГРАФИКА И ВЫРАВНИВАНИЕ ===
   До этого каждая страница задавала вид заголовков сама (разный размер/жирность/цвет)
   и выравнивание заголовка могло не совпадать с выравниванием ячейки. */
.dataTables_wrapper table.dataTable thead th {
    font-size: 0.75rem;
    font-weight: 600;
    color: #566a7f;
    vertical-align: top;
    line-height: 1.3;
}

/* Выравнивание заголовка всегда следует за выравниванием самой ячейки th —
   вручную проставлять justify-content-* больше не обязательно.
   Порядок: правило уровня строки (tr) слабее правил уровня ячейки (th). */
thead tr.text-center > th .dt-th-title {
    justify-content: center;
}

th.text-center .dt-th-title {
    justify-content: center !important;
}

th.text-start .dt-th-title {
    justify-content: flex-start !important;
}

th.text-end .dt-th-title,
th[style*="text-align: right"] .dt-th-title,
th[style*="text-align:right"] .dt-th-title {
    justify-content: flex-end !important;
}

/* Контролы внутри ячеек шапки не наследуют жирность заголовка и выглядят одинаково
   независимо от того, каким классом их пометила страница. */
.dt-th-filter .form-control,
.dt-th-filter .form-select,
.dt-th-filter .mp-multiselect-toggle,
.dt-th-filter .mp-multiselect-clear {
    font-weight: 400;
    font-size: 0.78rem;
}

/* Плотные таблицы SaaS-панели не нуждаются в сплошной сетке вертикальных линий —
   это читается как "тяжёлый"/неаккуратный вид. Оставляем только горизонтальные
   разделители строк (уже даёт table-bordered достаточно визуальной структуры без
   вертикальных линий) + чуть более заметную границу под шапкой. Действует только
   внутри .dataTables_wrapper, чтобы не задеть обычные (не-DataTables) таблицы в приложении. */
.dataTables_wrapper table.table-bordered > :not(caption) > * > * {
    border-left: 0;
    border-right: 0;
}

.dataTables_wrapper table.table-bordered > thead {
    border-bottom: 2px solid #d9dee3;
}

/* Единая плотность строк: table-sm — канонический вариант для табличных страниц (часть
   страниц уже так и было, часть использовала полноразмерные строки без причины). Несколько
   шире дефолтного table-sm паддинга, чтобы не выглядеть перегруженно на широких таблицах.
   table-xs (см. css/pages/unit-plan.css) — намеренное исключение для самой широкой таблицы
   (39 колонок), не унифицируется этим правилом. */
.dataTables_wrapper table.table-sm > :not(caption) > * > * {
    padding-top: 0.5rem;
    padding-bottom: 0.5rem;
}

/* Числовые/узкие колонки — единая ширина по умолчанию вместо того, чтобы разные страницы
   переопределяли один и тот же класс .col-number разными значениями (75px/60px и т.д.).
   Если колонке реально нужна другая ширина — модификатор .col-number-sm, а не переопределение. */
.col-number {
    width: 90px !important;
}

.col-number-sm {
    width: 64px !important;
}

/* Плоская нижняя граница панели массовых действий (BulkActionBar), появляющейся под
   тулбаром при выделении строк — было продублировано инлайн-стилями с одинаковыми
   правилами под разными ID на нескольких страницах. */
.card-bulk-bar-flat {
    border-radius: 0 !important;
    border-left: 0 !important;
    border-right: 0 !important;
    box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.05) !important;
}
