/* ==========================================================================
   Мобильный слой админки СДО.
   Подключается последним, поэтому перебивает тему. Всё живёт внутри
   медиазапросов — на десктопе файл не меняет ни одного правила.

   Устроен в три яруса:
     1) до 991px — планшет и телефон боком: убираем горизонтальный вынос;
     2) до 767px — телефон: списки-таблицы превращаются в карточки,
        фильтры встают в один столбец, кнопки дорастают до пальца;
     3) до 400px — узкий телефон: подписи уходят над значением.
   Подписи в карточках берутся из шапки таблицы (js/mobile.js, data-label).
   ========================================================================== */

/* ---------- 1. Планшет и телефон боком ---------------------------------- */
@media (max-width: 991px){

    /* строки bootstrap вынесены отрицательными полями за край экрана */
    .main-content{ padding-left: 10px; padding-right: 10px; overflow-x: hidden; }
    .main-content .row{ margin-left: -8px; margin-right: -8px; }
    .main-content [class*="col-"]{ padding-left: 8px; padding-right: 8px; }

    /* любая таблица прокручивается внутри себя, а не тянет страницу */
    .table-responsive{ overflow-x: auto; -webkit-overflow-scrolling: touch; }
}

/* ---------- 2. Телефон --------------------------------------------------- */
@media (max-width: 767px){

    body{ overflow-x: hidden; }

    /* --- фильтры и формы поиска: один столбец, поля под палец --- */
    .adminSearchForm [class*="col-"],
    .ccFiltersGrid > .fld{
        width: 100% !important; float: none !important;
        margin-bottom: 10px;
    }
    .adminSearchForm .form-control,
    .adminSearchForm select,
    .adminSearchForm input[type="text"]{
        height: 44px; font-size: 15px;
    }
    .adminSearchForm{ margin-bottom: 4px; }

    /* --- кнопки: минимум под палец --- */
    .btn{
        min-height: 44px; padding: 10px 16px; font-size: 14px;
        max-width: 100%; overflow: hidden; white-space: nowrap;
    }
    .btn-sm{ min-height: 40px; padding: 9px 14px; }
    .btn-block-mobile{ display: block; width: 100%; }

    /* --- шапка раздела: главное действие на всю ширину, прочие кнопки сеткой --- */
    .box-content{ padding: 14px 14px; }
    .admin-button-add{ display: block; width: 100%; margin-bottom: 4px; }
    .box-content > .pull-right{
        display: flex; flex-wrap: wrap; gap: 8px; margin-top: 10px;
    }
    .box-content > .pull-right > .btn-group{
        display: flex; flex: 1 1 100%; margin-right: 0 !important;
    }
    .box-content > .pull-right > .btn-group > .btn{ flex: 1 1 0; }
    .box-content > .pull-right > .btn{ flex: 1 1 calc(50% - 8px); margin-left: 0 !important; }
    .btn-xs{ min-height: 40px; padding: 9px 12px; font-size: 13px; }

    /* ======================================================================
       Списки-таблицы → карточки.
       Общий класс движка jsSortable (пользователи, документы, справочники)
       плюс именные таблицы разделов.
       ====================================================================== */
    table.jsSortable,
    .main-content table.table-striped,
    table.mobileCards{
        display: block; width: 100%; font-size: 14px !important;
        background: transparent; border: 0;
    }
    table.jsSortable > thead,
    .main-content table.table-striped > thead,
    table.mobileCards > thead{ display: none; }
    table.jsSortable > tbody,
    .main-content table.table-striped > tbody,
    table.mobileCards > tbody{ display: block; }

    table.jsSortable > tbody > tr,
    .main-content table.table-striped > tbody > tr,
    table.mobileCards > tbody > tr{
        display: block;
        background: #fff !important;
        border: 1px solid #e3e7ec;
        border-radius: 12px;
        box-shadow: 0 1px 3px rgba(16,24,40,.05);
        margin: 0 0 10px;
        padding: 12px 14px;
    }
    table.jsSortable > tbody > tr > td,
    .main-content table.table-striped > tbody > tr > td,
    table.mobileCards > tbody > tr > td{
        display: flex; align-items: flex-start; gap: 10px;
        width: auto !important; max-width: none !important;
        border: 0 !important;
        padding: 6px 0 !important;
        background: transparent !important;
        white-space: normal !important;
        overflow-wrap: anywhere;
    }
    /* подпись поля — из шапки таблицы */
    table.jsSortable > tbody > tr > td[data-label]:not([data-label=""])::before,
    .main-content table.table-striped > tbody > tr > td[data-label]:not([data-label=""])::before,
    table.mobileCards > tbody > tr > td[data-label]:not([data-label=""])::before{
        content: attr(data-label);
        flex: 0 0 38%; max-width: 38%;
        color: #8a9097; font-size: 11px; line-height: 1.5;
        text-transform: uppercase; letter-spacing: .3px;
        padding-top: 1px;
    }
    /* пустые ячейки и служебные колонки (чекбокс, аватар) не занимают строку */
    table.jsSortable > tbody > tr > td.mobEmpty,
    .main-content table.table-striped > tbody > tr > td.mobEmpty,
    table.mobileCards > tbody > tr > td.mobEmpty{ display: none !important; }

    /* бейдж (тип файла, статус) — отдельной строкой без подписи */
    table.jsSortable > tbody > tr > td.mobBadge,
    .main-content table.table-striped > tbody > tr > td.mobBadge,
    table.mobileCards > tbody > tr > td.mobBadge{
        display: block; padding: 0 0 6px !important;
    }
    table.jsSortable > tbody > tr > td.mobBadge::before,
    .main-content table.table-striped > tbody > tr > td.mobBadge::before,
    table.mobileCards > tbody > tr > td.mobBadge::before{ content: none; }

    /* строка действий: кнопки в ряд, крупные, без подписи */
    table.jsSortable > tbody > tr > td.mobActions,
    .main-content table.table-striped > tbody > tr > td.mobActions,
    table.mobileCards > tbody > tr > td.mobActions{
        display: flex; flex-wrap: wrap; gap: 8px;
        margin-top: 8px; padding-top: 10px !important;
        border-top: 1px solid #f0f2f5 !important;
    }
    table.jsSortable > tbody > tr > td.mobActions::before,
    .main-content table.table-striped > tbody > tr > td.mobActions::before,
    table.mobileCards > tbody > tr > td.mobActions::before{ content: none; }
    table.jsSortable > tbody > tr > td.mobActions .btn,
    .main-content table.table-striped > tbody > tr > td.mobActions .btn,
    table.mobileCards > tbody > tr > td.mobActions .btn{
        flex: 1 1 calc(50% - 4px); min-width: 0; min-height: 44px;
        display: inline-flex; align-items: center; justify-content: center;
        font-size: 14px; overflow: hidden; white-space: nowrap;
    }
    .mobBtnLabel{ overflow: hidden; text-overflow: ellipsis; }
    /* заголовок карточки (первая содержательная ячейка) — крупнее и без подписи */
    table.jsSortable > tbody > tr > td.mobTitle,
    .main-content table.table-striped > tbody > tr > td.mobTitle,
    table.mobileCards > tbody > tr > td.mobTitle{
        display: block; font-size: 15px; font-weight: 600; color: #2c3e50;
        padding-bottom: 8px !important;
    }
    table.jsSortable > tbody > tr > td.mobTitle::before,
    .main-content table.table-striped > tbody > tr > td.mobTitle::before,
    table.mobileCards > tbody > tr > td.mobTitle::before{ content: none; }
    table.jsSortable > tbody > tr > td.mobTitle a{ color: #2c3e50; }

    /* чекбокс выбора — в угол карточки, чтобы не занимать строку */
    table.jsSortable > tbody > tr,
    .main-content table.table-striped > tbody > tr,
    table.mobileCards > tbody > tr{ position: relative; }
    table.jsSortable > tbody > tr > td.mobCheck,
    .main-content table.table-striped > tbody > tr > td.mobCheck,
    table.mobileCards > tbody > tr > td.mobCheck{
        position: absolute; top: 10px; right: 12px;
        display: block; padding: 0 !important;
    }
    table.jsSortable > tbody > tr > td.mobCheck::before,
    .main-content table.table-striped > tbody > tr > td.mobCheck::before,
    table.mobileCards > tbody > tr > td.mobCheck::before{ content: none; }
    table.jsSortable > tbody > tr > td.mobCheck input,
    .main-content table.table-striped > tbody > tr > td.mobCheck input,
    table.mobileCards > tbody > tr > td.mobCheck input{ width: 20px; height: 20px; }

    /* аватар, перенесённый к имени */
    .mobAvatar{
        width: 40px; height: 40px; border-radius: 50%;
        background-size: cover; background-position: center;
        float: left; margin: 0 10px 4px 0; flex: none;
    }
    table.jsSortable > tbody > tr > td.mobTitle,
    .main-content table.table-striped > tbody > tr > td.mobTitle,
    table.mobileCards > tbody > tr > td.mobTitle{ overflow: hidden; padding-right: 32px !important; }

    /* внешняя рамка вокруг карточек — лишняя вторая обводка */
    .jsAdminContentBox > .box-content,
    .jsAdminContentList > .box-content{ background: transparent; border: 0; box-shadow: none; padding: 0; }
    .table-responsive{ border: 0 !important; }

    /* массовые действия под списком */
    .tmpHoverBoxActions{
        left: 0 !important; width: 100% !important; height: auto !important;
        margin: 0 !important; padding: 10px 12px; border-radius: 12px 12px 0 0;
    }
    .tmpHoverBoxActions.active{ margin-top: -104px !important; }
    .tmpHoverBoxActions > div{ margin: 0; padding: 0; }
    .tmpHoverBoxActions .pull-left{ float: none !important; display: block; }
    .tmpHoverBoxActions .jsMultipleActionContent{ width: 100%; height: 44px; margin-top: 6px; }
    .tmpHoverBoxActionsTitle{ font-weight: 600; }

    /* ---------- Заявки: карточка вместо строки таблицы ------------------- */
    .ordersListTable{ display: block; table-layout: auto !important; }
    .ordersListTable > thead{ display: none; }
    .ordersListTable > tbody{ display: block; }
    .ordersListTable > tbody > tr{
        display: block; background: #fff;
        border: 1px solid #e3e7ec; border-radius: 12px;
        box-shadow: 0 1px 3px rgba(16,24,40,.05);
        margin-bottom: 12px; padding: 12px 14px;
    }
    .ordersListTable > tbody > tr > td{
        display: block; width: auto !important;
        border: 0 !important; padding: 0 !important;
        background: transparent !important;
    }
    .ordersListTable > tbody > tr:hover > td{ background: transparent !important; }

    /* шапка карточки: номер и заказчик */
    .ordersListTable > tbody > tr > td:first-child{ padding-bottom: 10px !important; }
    .ordersListTable > tbody > tr > td:first-child > a{ font-size: 17px; }
    .ordersListTable .ordOrgName{ font-size: 13px; margin-top: 4px; }
    .ordersListTable .ordOrderDates{ font-size: 12px; margin-top: 6px; }
    .ordersListTable .ordSummary{ font-size: 12px; margin-top: 6px; }
    .ordersListTable .ordStatusLine{ margin-top: 8px; }
    .ordersListTable .ordStatusLine .label{ font-size: 12px; padding: 5px 10px; display: inline-block; }

    /* программы: каждая — своя плитка, колонки уходят в строки */
    .ordersListTable .ordCoursesCell{ padding: 0 !important; }
    .ordersListTable .ordSubTable,
    .ordersListTable .ordSubTable > tbody{ display: block; width: 100%; table-layout: auto !important; }
    .ordersListTable .ordSubTable > tbody > tr{
        display: block;
        background: #f7f9fb !important;
        border: 1px solid #eaeef2; border-radius: 10px;
        padding: 10px 12px; margin-bottom: 8px;
    }
    .ordersListTable .ordSubTable > tbody > tr:nth-child(even) > td{ background: transparent !important; }
    .ordersListTable .ordSubTable > tbody > tr > td{
        display: block; width: auto !important;
        border: 0 !important; padding: 0 !important;
        background: transparent !important; white-space: normal !important;
    }
    .ordersListTable .ordSubName{ font-size: 14px !important; line-height: 1.4; padding-right: 0 !important; }
    .ordersListTable .ordSubDates{ font-size: 12px; white-space: normal !important; margin-top: 5px; }
    .ordersListTable .ordSubLearn{
        font-size: 13px; margin-top: 8px; white-space: normal !important;
    }
    .ordersListTable .ordSubLearn::before{
        content: 'Обучено: '; color: #8a9097; font-size: 11px; text-transform: uppercase; letter-spacing: .3px;
    }
    .ordersListTable .ordSubDocs{ font-size: 12px !important; margin-top: 8px; padding-top: 8px; border-top: 1px dashed #e3e6ea; }
    .ordersListTable .ordDocLine{ white-space: normal !important; line-height: 1.5; padding: 4px 0; }
    .ordersListTable .ordRegLine{ flex-wrap: wrap; gap: 14px; font-size: 12px; }

    /* вложенные списки по умолчанию свёрнуты — кнопку ставит js/mobile.js */
    .mobFold .ordSubTable,
    .mobFold .statProgramsTable{ display: none; }
    .mobFold.open .ordSubTable,
    .mobFold.open .statProgramsTable{ display: block; }
    .ordToggle{
        display: flex; align-items: center; justify-content: space-between; gap: 8px;
        width: 100%; min-height: 44px; margin: 4px 0 2px;
        padding: 10px 12px; font-size: 14px; font-weight: 500;
        color: #2c5aa0; background: #f2f6fc;
        border: 1px solid #dfe7f3; border-radius: 10px;
        text-align: left; cursor: pointer;
    }
    .ordToggle:active{ background: #e7eefa; }
    .ordToggle .ordToggleArrow{ transition: transform .18s ease; color: #7d8b9c; }
    .mobFold.open .ordToggle .ordToggleArrow{ transform: rotate(180deg); }

    /* оплата и кнопки — подвал карточки */
    .ordersListTable .ordPayCell{
        display: flex !important; align-items: center; gap: 10px;
        margin-top: 10px; padding-top: 10px !important;
        border-top: 1px solid #f0f2f5 !important;
        white-space: normal !important;
    }
    .ordersListTable .ordPaySum{ font-size: 16px !important; margin: 0 !important; }
    .ordersListTable > tbody > tr > td:last-child{
        display: flex !important; gap: 8px; margin-top: 10px;
    }
    .ordersListTable > tbody > tr > td:last-child .btn{
        flex: 1 1 0; min-height: 46px; font-size: 15px;
        display: inline-flex; align-items: center; justify-content: center;
    }

    /* шапка блока: заголовок и кнопки — в столбик, кнопки во всю ширину */
    .cardHead{ flex-wrap: wrap; gap: 10px; }
    .cardHead > h4{ flex: 1 1 100%; }
    .cardHead .cardHeadActions{ display: flex; flex: 1 1 100%; gap: 8px; }
    .cardHead .cardHeadActions .btn{ flex: 1 1 0; min-width: 0; justify-content: center; }

    /* ---------- Карточка заявки ------------------------------------------ */
    /* плитки — по две в ряд, иначе шапка занимает весь экран */
    .ovTiles{ display: grid !important; grid-template-columns: 1fr 1fr; gap: 8px !important; }
    .ovTiles > .ovTile{ margin: 0 !important; min-width: 0; padding: 10px 12px !important; }
    .ovTiles > .ovTile .v{ font-size: 20px !important; }
    .ovTiles > .ovTile .l{ font-size: 11px !important; line-height: 1.35; }

    /* программы заявки: колонки в строки */
    .ovProgTable,
    .ovProgTable > tbody{ display: block; width: 100%; table-layout: auto !important; }
    .ovProgTable > thead{ display: none; }
    .ovProgTable > tbody > tr{
        display: block; background: #f8fafb !important;
        border: 1px solid #eef0f3; border-radius: 10px;
        padding: 10px 12px; margin-bottom: 8px;
    }
    .ovProgTable > tbody > tr > td{
        display: block; width: auto !important;
        padding: 3px 0 !important; border: 0 !important;
        background: transparent !important; white-space: normal !important;
    }
    .ovProgName{ font-size: 14px !important; }

    /* вкладки заявки — лентой с прокруткой, а не в четыре этажа */
    .nav-tabs, .orderTabs{
        display: flex; flex-wrap: nowrap; overflow-x: auto; -webkit-overflow-scrolling: touch;
        border-bottom: 1px solid #e3e7ec; padding-bottom: 2px;
    }
    .nav-tabs > li, .orderTabs > li, .orderTabs > a{ flex: 0 0 auto; float: none; }
    .nav-tabs::-webkit-scrollbar, .orderTabs::-webkit-scrollbar{ height: 3px; }

    /* ---------- Карточка пользователя ------------------------------------ */
    .userCardCols{ display: block; }
    .userCardCols > [class*="col-"]{ width: 100% !important; float: none !important; }
    .userCardActions{ display: flex; flex-wrap: wrap; gap: 8px; margin-top: 10px; }
    .userCardActions .btn{ flex: 1 1 140px; }

    /* таблица «Информация» в карточке: подпись сверху, значение под ней */
    table.userInfoTable{ display: block; }
    table.userInfoTable > tbody{ display: block; }
    table.userInfoTable > tbody > tr{
        display: flex; gap: 10px; align-items: baseline;
        padding: 8px 0; border-bottom: 1px solid #f0f2f5;
    }
    table.userInfoTable > tbody > tr > td{
        display: block; border: 0 !important; padding: 0 !important;
        white-space: normal !important; overflow-wrap: anywhere;
    }
    table.userInfoTable > tbody > tr > td:first-child{ flex: 0 0 40%; max-width: 40%; color: #8a9097; font-size: 12px; }
    table.userInfoTable > tbody > tr > td:last-child{ flex: 1 1 auto; font-size: 14px; }

    /* ---------- Журналы: остаются таблицей, но со своей прокруткой -------- */
    .jrnScroll{ overflow-x: auto; -webkit-overflow-scrolling: touch; }
    .jrnTable{ font-size: 12px; }

    /* ---------- Плитки показателей (дашборд и кабинет заказчика) --------- */
    .kpiGrid,
    .ccKpiGrid{ grid-template-columns: repeat(2, 1fr) !important; gap: 10px !important; }
    .kpiCard,
    .ccKpi{ padding: 12px 14px !important; }
    /* .label в теме — бейдж с nowrap, поэтому подпись плитки не переносилась */
    .kpiCard .label,
    .ccKpi .label{
        padding-right: 40px !important; font-size: 10.5px !important;
        line-height: 1.35; white-space: normal !important;
    }
    .kpiCard .value,
    .ccKpi .value{ font-size: 26px !important; }
    .kpiCard .ico,
    .ccKpi .ico{ transform: scale(.8); }
    .ccKpi .sub{ font-size: 11px !important; }

    /* ---------- Кабинет заказчика: таблица программ ---------------------- */
    .statProgramsTable{ font-size: 12px; }
    .ccDepTable, .statProgramsTable{ min-width: 0; }

    /* название в списках справочников жёстко просило 300px — на телефоне это вынос */
    .adminVideoTitle{ min-width: 0 !important; padding-right: 0 !important; font-size: 15px; }

    /* ---------- Кабинет заказчика: программы сотрудника ------------------ */
    .statProgramsTable,
    .statProgramsTable > tbody{ display: block; width: 100%; }
    .statProgramsTable > thead{ display: none; }
    .statProgramsTable > tbody > tr{
        display: block; padding: 8px 0; border-top: 1px solid #f1f3f5;
    }
    .statProgramsTable > tbody > tr:first-child{ border-top: 0; }
    .statProgramsTable > tbody > tr > td{
        display: block; width: auto !important;
        padding: 3px 0 !important; border: 0 !important;
        white-space: normal !important;
    }
    .statProgramsTable .col-name,
    .statProgramsTable .col-prog,
    .statProgramsTable .col-dates,
    .statProgramsTable .col-stat{ width: auto !important; }
    .statProgramsTable .col-dates{ font-size: 11px; color: #6b7177; }
    .statListTable > tbody > tr > td{ padding: 12px 10px !important; }

    /* кнопка-иконка без подписи на телефоне не читается — подпись из title */
    .mobBtnLabel{
        margin-left: 8px; font-size: 14px; font-weight: 500;
        min-width: 0; overflow: hidden; text-overflow: ellipsis;
    }

    /* ---------- Формы в окнах: подпись сверху, поле во всю ширину -------- */
    .tmpInfoTable,
    .tmpInfoTable > tbody{ display: block; width: 100%; }
    .tmpInfoTable > tbody > tr,
    .tmpInfoTable > tr{
        display: block; padding: 10px 0;
        border-bottom: 1px solid #f0f2f5;
    }
    .tmpInfoTable th,
    .tmpInfoTable td{
        display: block; width: auto !important;
        border: 0 !important; padding: 0 !important;
        white-space: normal !important;
    }
    .tmpInfoTable th{
        font-size: 12px; font-weight: 600; color: #6b7177;
        padding-bottom: 6px !important; text-align: left;
    }
    .modal .form-control,
    .tmpInfoTable .form-control{ width: 100%; height: 44px; font-size: 15px; }
    .modal textarea.form-control,
    .tmpInfoTable textarea.form-control{ height: auto; min-height: 90px; }
    .modal-header{
        position: sticky; top: 0; z-index: 3;
        background: #fff; border-radius: 6px 6px 0 0;
    }
    .modal-footer{ display: flex; flex-wrap: wrap; gap: 8px; }
    .modal-footer .btn{ flex: 1 1 calc(50% - 8px); margin: 0 !important; }

    /* мелкие управляющие элементы шапки — под палец */
    .roleSwitchBtn{ min-height: 44px; min-width: 46px; padding: 10px 14px !important; justify-content: center; }
    .roleSwitchHintClose{ width: 36px; height: 36px; font-size: 20px; }
    .button-close.js__menu_close{ width: 44px; height: 44px; font-size: 18px; }

    /* ---------- Мелочи --------------------------------------------------- */
    .main-content .pull-right,
    .main-content .pull-left{ float: none !important; }
    .roleSwitchHint{ top: auto !important; bottom: 10px; left: 8px; right: 8px; }
    .roleSwitchHintArrow{ display: none; }
    .modal-dialog{ margin: 8px; }
    .modal-body{ padding: 14px; }
}

/* ---------- 3. Совсем узкий телефон (360 и меньше) ---------------------- */
@media (max-width: 360px){
    .kpiGrid,
    .ccKpiGrid{ grid-template-columns: 1fr !important; }
    table.jsSortable > tbody > tr > td,
    table.mobileCards > tbody > tr > td{ display: block; }
    table.jsSortable > tbody > tr > td[data-label]:not([data-label=""])::before,
    table.mobileCards > tbody > tr > td[data-label]:not([data-label=""])::before{
        display: block; max-width: none; margin-bottom: 2px;
    }
    table.userInfoTable > tbody > tr{ display: block; }
    table.userInfoTable > tbody > tr > td:first-child{ max-width: none; margin-bottom: 2px; }
    .main-content{ padding-left: 8px; padding-right: 8px; }
}
