
.app-sidebar-navs .menu .menu-item.here>.menu-link .menu-title {
    color:#fff;
}
.app-sidebar-navs .menu .menu-item .menu-link .menu-title {
    color: #A1A2A7;
}
.app-sidebar-navs .menu .menu-item .menu-link .menu-icon, .app-sidebar-navs .menu .menu-item .menu-link .menu-icon .svg-icon, .app-sidebar-navs .menu .menu-item .menu-link .menu-icon i {
    color: #A1A2A7;
}
.app-sidebar-navs .menu .menu-item .menu-link .menu-badge .badge.badge-custom {
    background-color: #262626;
    color: #A1A2A7;
}
.select2-container--bootstrap5 .select2-selection--single .select2-selection__placeholder {
    color: var(--bs-gray-700);
}
.form-select-lg {
    font-size: 1.1rem;
}
.select2-results__options[id*="select2-f_status"] .select2-results__option:nth-child(1) {
color: #17C653;
}
.select2-results__options[id*="select2-f_status"] .select2-results__option:nth-child(2) {
color: #F6C000;
}
.select2-results__options[id*="select2-f_status"] .select2-results__option:nth-child(3) {
color: #F8285A;
}
.select2-container--bootstrap5 .select2-selection--single .select2-selection__placeholder {
color: var(--bs-gray-600) !important;
}
.form-switch.form-check-solid .form-check-input:not(:checked) {
    background-color: var(--bs-gray-400);
}

.minicolors-theme-default .minicolors-input {
    height: 44px !important;
    padding-left: 44px !important;
    width: 140px !important;
}
.minicolors-theme-default .minicolors-swatch {
    width:25px !important;
    height:25px !important;
    top:9px !important;
    left:9px !important;

}
.file-title{
    overflow-wrap: break-word;
    min-width: 200px;
}
#mobile-title {
    border-bottom: 1px solid #DBDFE9;
}
.mobile-title-buttons {
    margin-left: auto;
    margin-right: 20px;
}

.app-content {
    padding-top:5px;
}
.app-header {
    border-bottom: 1px solid #DBDFE9;
}
.page-title {
    margin-left: 20px;
}
.app-toolbar {
    padding-left:30px;
    background-color:#fbfbfb;
    border:0;
}
#app_header_wrapper {
    max-width:1560px;
    padding-right:10px;
}
/* Стандартная макс-ширина контента (как у шапки #app_header_wrapper).
   Metronic генерит mw-*px только до 1000px — добавляем 1560 (используется в /widgets, hoteltv, hotelchannels). */
.mw-1560px {
    max-width:1560px !important;
}
/* Папка з активним доступом за посиланням — сіра іконка (без підсвітки рядка). */
.nx-folder-share .vision-folder i { color:#9aa6b2 !important; }
.vision-msg {
    max-width:1280px;
    background-color:#fbfbfb;

}
.vision-btn-back, .vision-btn-back-mobile {
    z-index: 99;
    border-right: 1px solid #DBDFE9;
    height:100%;
    width:40px;
    border-radius:0;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    padding: 0;
    line-height: 1;
}
.vision-app {
    background-color:#fbfbfb;
}
#kt_app_content {
    padding: 20px 10px 30px 20px;
}
@media (max-width: 991.98px) {
    #kt_app_content {
        padding: 10px 15px;
    }
}
.vision-card {
    --bs-card-box-shadow: none;
    --bs-card-border-color: none;
    border: 0;
    background-color:#fbfbfb;
    max-width:1280px;
    padding-top:0;
}
.modal-body .vision-card {
    background-color:#ffffff;
}
/* Чекбокс на карточке стока: полупрозрачный фон у самого чекбокса (для видимости поверх превью).
   Без !important — поэтому в отмеченном состоянии .form-check-input:checked (выше по специфичности) даёт синий. */
.nx-card-check {
    background-color: rgba(255,255,255,.45);
}
/* списки */
.vision-list {
    padding:0;
    background-color: #fff;
}
.vision-list .item {
    max-width:1280px;
    display: flex;
    position: relative;
    border: 1px solid #DBDFE9;
    padding: 15px 20px 15px 20px;
    margin-bottom:-1px;
    justify-content: center;
    align-items: center;
}
.vision-list .item-group {
    max-width:1280px;
    display: flex;
    position: relative;
    border: 1px solid #DBDFE9;
    background-color: #fbfbfb;
    padding: 0px 20px 0px 20px;
    margin-bottom:-1px;
    justify-content: center;
    align-items: center;
}
ul.vision-list > li:first-of-type {
    border-top-left-radius: 6px;
    border-top-right-radius: 6px;
}
ul.vision-list > li:last-child {
    border-bottom-left-radius: 6px;
    border-bottom-right-radius: 6px;
}
.vision-list .image {
    margin-right: 20px;
    width: 70px;
    height: 60px;
    align-self: flex-start;
    display: flex;
    justify-content: center;    
    align-items: center;
}
.vision-list .text {
    flex-grow: 1; 
    flex-direction: column; 
    word-wrap:break-word;
    width:200px;
    padding-right:10px;
}
.vision-list .text-group {
    flex-grow: 1; 
    flex-direction: column; 
    word-wrap:break-word;
    width:200px;
    padding-right:10px;
    /*color:#fff;*/
}
.vision-list a {
    color:#252F4A;
}
.vision-list .title {
    font-size:18px;
    font-weight: 600;
}
.vision-list .details {
    font-size: 12px;
    font-weight: 400;
    color: var(--bs-gray-700);
    display: flex;
    flex-wrap: wrap;
    flex-direction: row;
    align-content: center;
    justify-content: flex-start;
    align-items: center;
}
.vision-list .details i {
    color: var(--bs-gray-700);
}
.vision-list .details>span {
    margin-right:12px;
    margin-top:3px;
    margin-bottom:1px;
    display: flex;
    flex-wrap: nowrap;
    flex-direction: row;
    align-content: center;
    justify-content: flex-start;
    align-items: center;

}
.vision-list .buttons {
    margin-right:10px;
    align-self: flex-start;
    margin-top:10px;
    margin-bottom:10px;
}
.item-group .buttons {
    margin-top:10px;
    margin-bottom:10px;
}
.item-group .buttons .btn {

}
.vision-list .drag-handle {
    cursor: move;
    font-size: 20px;
    color:#aeaeae;
    margin-left:5px;
    align-self: flex-start;
    margin-top:17px;
}
.vision-list > .item > .text > a {
    width: max-content;
}


.size-hide {
    display: none;
}
.size-show {
    display: flex;
    flex-direction: row;
    flex-wrap: nowrap;
    justify-content: flex-start;
    align-items: center;
}

.period-hide {
    display: none;
}
.period-show {
    display: flex;
    flex-direction: row;
    flex-wrap: nowrap;
    justify-content: flex-start;
    align-items: center;
}

.hide {
    display: none;
}
.show {
    display: block;
}

.select2-results__option--disabled {
    color: var(--bs-gray-700) !important;
    font-weight: 700;
}

.edit-week-days {
    display: flex;
    
}

.link_frame_wrap {
    width: 540px;
    height: 600px;
    padding: 0;
    overflow: hidden;
}

.link_frame {
    width: 1080px;
    height: 600px;
    border: 0px;
    zoom: 0.5;
    -moz-transform: scale(0.5);
    -moz-transform-origin: 0 0;
    -o-transform: scale(0.5);
    -o-transform-origin: 0 0;
    -webkit-transform: scale(0.5);
    -webkit-transform-origin: 0 0;
    border:5px solid #4B5675;
    
}

.main-rectangle {
    position: relative;
    background-color: #1b1b1b;
    overflow: hidden;
    box-sizing: content-box;
}

.rectangle {
    position: absolute; /* Прямоугольники расположены абсолютно */
    cursor: move;
    box-sizing: border-box;
    z-index: 1; /* Слой выше, чтобы избежать перекрытия */
    color: white;
    display: flex;
    align-items: center;
    justify-content: center;

}

.modal-body .rectangle {
    cursor: default;
}

.rectangle-small .rectangle {
    cursor: pointer;
}

.rectangle-small .rectangle .vision-icon-i {
    position: absolute;
    border-radius: 0px;
    font-size: 15px !important;
    top: calc(50% - 9px);
    left: calc(50% - 7.5px);
}

.rectangle .vision-img {
    position: absolute;
    top: 0;
    left: 0;
    width: 100% !important;
    height: 100% !important;
    
}

.rectangle .vision-img img {
    position: absolute;
    top: 0;
    left: 0;
    width: 100% !important;
    height: 100% !important;
    border-radius: 0;
    background-color: #f0f0f0;
    object-fit: cover; 
    z-index: 1;
    
}

.rectangle .vision-img-set {
    position: absolute;
    top: 0;
    left: 0;
    width: 100% !important;
    height: 100% !important;
    border-radius: 0;
    background-color: #515151;
    object-fit: cover !important; /* Чтобы изображение заполняло прямоугольник */
    z-index: 1;
    overflow: hidden;
}

.rectangle .vision-img-set .vision-img {
    position: absolute;
    top: 0;
    left: 0;
    width: 100% !important;
    height: 100% !important;
    border-radius: 0;
    background-color: #515151;
    object-fit: cover !important; /* Чтобы изображение заполняло прямоугольник */
    z-index: 1;
    overflow: hidden;
    margin:0;
}


.number {
    position: relative;
    text-shadow: 1px 1px 1px rgba(0, 0, 0, 0.9), -1px -1px 1px rgba(0, 0, 0, 0.9), -1px 1px 1px rgba(0, 0, 0, 0.9), 1px -1px 1px rgba(0, 0, 0, 0.9); /* Тень для читаемости */
    z-index: 50; /* Поверх изображения */
    color: white;
    font-weight: bold;
}
.rectangle .number {
    font-size: 25px;  
}
.vision-list .image .number {
    position: absolute;
    top: 30px;
    left: 50px;
    font-size: 20px;
}


.rectangle-info > .item > .image > a > .vision-icon {
    width: 60px;
    height: 60px;
    border-radius: 10px;
    padding: 8px 8px;
    margin:0px 4px;
}

.rectangle > .vision-icon {
    width: 100%;
    height: 100%;
    position: absolute;
    border-radius: 0px;
    padding: 12px 10px;
    overflow: hidden;
    font-size:45px;
}

.screen-border-1 {
    border:1px solid #000;
}


.sm_week_day {
    border: 1px solid var(--bs-primary);
    border-radius:5px;
    padding:2px 4px;
    margin-right:2px;
    font-size:10px;
    color: var(--bs-dark);
}

.sm_week_day_chk {
    color: var(--bs-primary-inverse);
    background-color: var(--bs-primary) !important;    
}
.vision-list .details > span.channel_intervals {
    display: flex;
    flex-direction: column;
    justify-content: center;
    align-items: flex-start;
    
}
.channel_dates {
    display: flex;
    flex-direction: row;
    border:1px solid var(--bs-gray-400);
    width:max-content;
    padding:5px 8px;
    border-radius: 5px;
    margin-top:5px;
}
.channel_time {
    border:1px solid var(--bs-gray-400);
    width:140px;
}
.screen_time {
    border:1px solid var(--bs-gray-400);
    width:100px;
}
.screen_rectangle .main-rectangle, .screen_rectangle .rectangle {
    cursor:default !important;
}

#view-video {
    max-height: 400px;
}

/* ИКОНКИ */
.vision-folder i {
    color: var(--bs-primary);
    font-size:55px;
}
.vision-icon {
    width:62px;
    height:50px;
    border-radius:5px;    
    display: flex;
    justify-content: center;
    align-items: center;
    background-color:#000000;
    border:1.5px solid #404040;
}

.vision-logo {
    height:100%;
    display: flex; 
    align-items: center; 
    justify-content: center;
}

.vision-logo img {
    max-width: 85px; max-height: 50px; object-fit: contain !important;
}

.rectangle-small .vision-logo img {
    max-width: 24px; max-height: 14px; object-fit: contain !important;
}
.link-icon {
    width: 32px;  /* нужный размер */
    height: 32px;
    overflow: hidden;
}

.link-icon img {
    width: 100%;
    height: 100%;
    object-fit: cover; /* или contain */
}
.rectangle-small .link-icon, .rectangle-small .weather-icon, .rectangle-small .alarm-icon {
    height:100%; display:flex; align-items:center; justify-content:center; padding:5px 3px; max-width:32px !important; max-height:32px !important; 
}


.rectangle-middle .link-icon, .rectangle-middle .weather-icon, .rectangle-middle .alarm-icon {
    height:100%; display:flex; align-items:center; justify-content:center;  max-width:35px !important; max-height:32px !important; 
}

.rectangle-small img {
    max-width:100%; max-height:100%; width:auto; height:auto; object-fit:contain;
}

.weather-icon, .alarm-icon, {
    max-width:100%; max-height:100%; width:auto; height:auto; object-fit:contain; padding:10px; 
    display:flex; align-items:center; justify-content:center; position:relative;
}



.rectangle-middle .vision-img {
    border:2.5px solid #404040 !important;
}

.vision-icon i {
    color: var(--bs-white);
    font-size:35px;
}


.vision-img, .vision-img-banner {
    top: 0;
    left: 0;
}

.main-rectangle .vision-img {
    width: 100%;
    height: 100%;    
    border: 1.5px solid #404040;
    object-fit: cover;
    border-radius: 2px;
}

.main-rectangle .vision-img-banner {
    width: 100%;
    height: 100%;    
    border: 0.1px solid #c9c9c9;
    object-fit: cover;
}

.main-rectangle .vision-img img, .main-rectangle .vision-img-banner img {
    width: 100%;
    height: 100%;
    object-fit: cover;
}

li .vision-img img {
    width: auto;
    height: auto;
    max-width:64px;
    max-height:64px;
}

li .vision-img-big img {
    width: auto;
    height: auto;
    max-width:84px;
    max-height:84px;
}


.vision-img-link {
    width: 100%;
    height: 100%;
    display: block;
}
.vision-img-link img {
    width: 100%;
    height: 100%;
    object-fit: cover;
    object-position: top;
}

.vision-img-widget {
    width:64px; 
    height:64px;
}

.vision-img-widget img {
    width:100%;
    height:100%;
    object-fit: cover !important; /* масштабируем превью виджета под размер контейнера (раньше none → не уменьшалось на малых превью) */
}

.vision-screen {
    border:1.5px solid #404040;
    background-color:#333; 
    overflow: hidden;
}

.vision-screen-no-move .rectangle {
    cursor:default;
}

.vision-screen .vision-img {
    width:100%;
    height:100%;
}

.vision-screen .vision-img img {
    width:100%;
    height:100%;
    border-radius:0px;
    object-fit: cover; 
    border:none;
}

.vision-screen .vision-icon {
    width:100%;
    height:100%;
    border-radius:0px;
    font-size: inherit;
}

.main-rectangle, .main-rectangle .rectangle, .main-rectangle .rectangle .vision-icon {
    font-size: inherit;
}

.vision-screen .vision-icon i, .rectangle .vision-icon i {
    font-size: inherit;
}

.vision-list .main-rectangle .vision-icon {
    width:100%;
    height:100%;
    border-radius:0px;
    font-size: inherit;
    background-color:none !important; 
}

.vision-list .main-rectangle .vision-icon i {
    font-size: 22px;
}


.link_img {
    width: 100%;
    height:400px;
    overflow:scroll;
    border: 1px solid var(--bs-gray-500);
}
.link_img img {
    width: 100%;
}

@media screen and (-webkit-min-device-pixel-ratio:0) {
    .link_frame {
      zoom: 1;
    }
} 

#loading_text div {margin:100px 0px;}
#log_loading_text div {margin:100px 0px;}

/* Loading modal */
.lds-dual-ring {
    color: var(--bs-primary);
  }
  .lds-dual-ring,
  .lds-dual-ring:after {
    box-sizing: border-box;
  }
  .lds-dual-ring {
    display: inline-block;
    width: 80px;
    height: 80px;
  }
  .lds-dual-ring:after {
    content: " ";
    display: block;
    width: 64px;
    height: 64px;
    margin: 8px;
    border-radius: 50%;
    border: 6.4px solid currentColor;
    border-color: currentColor transparent currentColor transparent;
    animation: lds-dual-ring 1.2s linear infinite;
  }
  @keyframes lds-dual-ring {
    0% {
      transform: rotate(0deg);
    }
    100% {
      transform: rotate(360deg);
    }
  }


@media (max-width: 991px) {
    .sm_week_day {
        border: 1px solid var(--bs-gray-700);
        border-radius:2px;
        padding:1px 2px;
        margin-right:2px;
        font-size:9px;
        color: var(--bs-dark);
    }
    .sm_week_day_chk {
        color: var(--bs-primary-inverse);
        background-color: var(--bs-gray-600) !important;    
    }
    .vision-list .image .number {
        left: 38px;
    }
    .app-header {
        background-color: #131313;
        
    }
    #mobile-title {
        display:flex;
    }
    .hide-mobile {
        display:none !important;
    }
    .file-title{
        width: 200px;
    }
    .app-container {
        padding-left: 0px !important;
        padding-right: 0px !important;
    }
    .vision-btn-back {
        display:none;
    }
    .vision-btn-back-mobile {
        display:flex;
    }
    .vision-mobile-menu {
        margin-left:10px;
    }
    .vision-mobile-menu-back {
        margin-left:-10px;
    }
    /* крупный шрифт для мобильных чтобы избежать zoom*/
    input[type="color"],
    input[type="date"],
    input[type="datetime"],
    input[type="datetime-local"],
    input[type="email"],
    input[type="month"],
    input[type="number"],
    input[type="password"],
    input[type="search"],
    input[type="tel"],
    input[type="text"],
    input[type="time"],
    input[type="url"],
    input[type="week"],
    select:focus,
    textarea {
        font-size: 16px;
    }
    #edit_channel_dates {
        display:none;
    }
}
@media (min-width: 992px) {
    #mobile-title {
        display:none;
    }
    .hide-full {
        display:none !important;
    }
    .app-container {
        padding-left: 10px !important;
        padding-right: 10px !important;
    }
    .vision-btn-back-mobile {
        display:none;
    }
    .vision-btn-back {
        display:flex;
    }

}

.progress-bar-animated {
    box-shadow: 0 0 10px rgba(0, 123, 255, 0.5);
    transition: width 0.5s ease;
}

.text-dashed {
    border-bottom: 1px dashed currentColor;
}

.menu-link .bi { -webkit-text-stroke: 0.4px currentColor; }
.btn .bi { font-size: 1.1em; -webkit-text-stroke: 0.1px currentColor; }

/* === Унифицированные стили списочных страниц: тулбар, чекбоксы, table-view === */

/* === Псевдо-модалка для страниц /playlists/<id>/setcontent/* ===
   Класс body.nx-setcontent-mode выставляется в _header.php. Цель — визуально
   подчеркнуть, что пользователь в «режиме выбора контента»: всё пространство
   страницы затемняется фиксированным оверлеем, а блоки tabs+content
   приподнимаются над оверлеем (рамка, тень, белый фон). pointer-events:none
   на оверлее — клики не блокируются, это чисто визуальный эффект. */
body.nx-setcontent-mode::before {
    content: '';
    position: fixed;
    inset: 0;
    background: rgba(15, 23, 42, 0.45);
    z-index: 90;
    pointer-events: none;
}
body.nx-setcontent-mode #kt_app_toolbar,
body.nx-setcontent-mode #kt_app_content {
    position: relative;
    z-index: 91;
    background: #fff;
    /* «Псевдо-модалка» прижата к левому краю (после sidebar), её ширина
       ограничена стандартом 1560px — на широких экранах справа остаётся
       свободное затемнённое пространство. max-width на flex-child тут
       сжимает блок до min-content (~700px), поэтому используется
       margin-clamp — работает независимо от flex-контекста Metronic. */
    margin-left: 24px;
    margin-right: max(24px, calc(100% - 1560px - 24px));
}
body.nx-setcontent-mode #kt_app_toolbar {
    margin-top: -15px;
    border: 1px solid #e6e6f0;
    border-bottom: 0;
    border-radius: 12px 12px 0 0;
    box-shadow: 0 -8px 32px rgba(0, 0, 0, 0.25);
    padding-top: 0;
    padding-bottom: 0;
}
/* Кнопка «Скасувати» в топ-баре псевдо-модалки. */
body.nx-setcontent-mode #kt_app_toolbar #kt_app_toolbar_container > a.btn {
    margin-right: 16px;
}
/* Переключение между «полным» (Завантажити + Скасувати) и «узким» (только крестик)
   видом действий в топ-баре псевдо-модалки. Граница — 1500px. */
.nx-setcontent-actions-full { display: none !important; }
.nx-setcontent-actions-icon { display: inline-flex !important; }
@media (min-width: 1500px) {
    .nx-setcontent-actions-full { display: flex !important; }
    .nx-setcontent-actions-icon { display: none !important; }
}
/* Контент псевдо-модалки. Внутренний скролл с фиксированным <thead> делаем не
   на самом #kt_app_content, а на .table-responsive ниже — иначе .table-responsive
   создаёт свой scroll-context и sticky thead ломается. */
body.nx-setcontent-mode #kt_app_content {
    margin-bottom: 24px;
    border: 1px solid #e6e6f0;
    border-top: 0;
    border-radius: 0 0 12px 12px;
    box-shadow: 0 12px 40px rgba(0, 0, 0, 0.28);
    padding: 16px 24px;
}
/* В режиме модалки sticky-полосу со строки поиска снимаем — фиксируем только
   <thead> таблицы. Скролл-контейнер для sticky — сама .table-responsive. */
body.nx-setcontent-mode .nx-list-sticky-head {
    position: static;
    background: transparent;
    border-bottom: 0;
    padding: 0;
}
body.nx-setcontent-mode .table-responsive {
    max-height: calc(100vh - 340px);
    overflow-y: auto;
}
/* Sticky <th> работают только при border-collapse: separate (у .vision-table уже так).
   Фон совпадает с базовым стилем thead (#fff) — при скролле визуально не меняется. */
body.nx-setcontent-mode .vision-table thead th {
    position: sticky;
    top: 0;
    z-index: 4;
    background: #fff;
}
/* Длинные имена не должны растягивать колонку — табличный layout фиксирован,
   а ссылка имени обрезается многоточием. На мобильном это критично, на десктопе
   не повредит. Meta-стек под именем (flex-wrap) переносится отдельно. */
body.nx-setcontent-mode .vision-table {
    table-layout: fixed;
    width: 100%;
}
body.nx-setcontent-mode .vision-table td {
    overflow: hidden;
}
body.nx-setcontent-mode .vision-table td > a.fw-semibold {
    display: block;
    max-width: 100%;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}
/* Сам master-чекбокс в заголовке таблицы — с белым фоном (ячейка остаётся серой).
   Действует на все .vision-table (files, screens, playlists, setcontent…). */
.vision-table thead th .form-check-input:not(:checked) {
    background-color: #fff;
}
/* В псевдо-модалках setcontent: отступы строк как в обычных таблицах (10px по вертикали). */
body.nx-setcontent-mode .vision-table tbody td {
    padding: 10px 12px;
}
/* Кнопка «Додати» в последней колонке прижата к правому краю. */
body.nx-setcontent-mode .vision-table tbody td:last-child,
body.nx-setcontent-mode .vision-table thead th:last-child {
    text-align: right;
}
@media (max-width: 991.98px) {
    /* На мобильном вкладки типа контента (Files/Links/Streams/...) часто переносятся
       во вторую строку — учитываем это в высоте скролл-области таблицы. */
    body.nx-setcontent-mode .table-responsive {
        max-height: calc(100vh - 340px);
    }
}
@media (max-width: 991.98px) {
    body.nx-setcontent-mode #kt_app_toolbar,
    body.nx-setcontent-mode #kt_app_content {
        margin-left: 8px;
        margin-right: 8px;
    }
    body.nx-setcontent-mode #kt_app_toolbar {
        margin-top: -50px;
    }
    body.nx-setcontent-mode #kt_app_content {
        padding: 12px;
    }
}

/* Тулбар фильтров + bulk-кнопки приклеиваются к верху при прокрутке. Top меняется в зависимости от того,
   стал ли уже sticky верхний навигационный header Metronic — атрибут data-kt-app-header-sticky=on на body. */
.nx-list-sticky-head {
    position: sticky;
    top: 0;
    z-index: 5;
    background: #fbfbfb;
    padding-top: 6px;
    padding-bottom: 10px;
}
[data-kt-app-header-sticky="on"] .nx-list-sticky-head {
    top: 80px;
}
/* На мобиле/планшете верхний header Metronic всегда фиксирован (data-kt-app-header-fixed-mobile=true) — учитываем его высоту. */
@media (max-width: 991.98px) {
    .nx-list-sticky-head {
        top: 60px;
    }
}
/* На мобиле прячем мелочные элементы тулбара — направление сортировки и per_page. */
@media (max-width: 767.98px) {
    .nx-list-toolbar select[name="dir"],
    .nx-list-toolbar select[name="dir"] + .select2-container,
    .nx-list-toolbar select[name="per_page"],
    .nx-list-toolbar select[name="per_page"] + .select2-container {
        display: none;
    }
    /* Колонка «Екран» занимает всё доступное пространство, прочие ячейки сжаты до содержимого. */
    .vision-table .d-md-none {
        width: 100%;
    }
    .vision-table thead th:not(.d-md-none),
    .vision-table tbody td:not(.d-md-none) {
        width: 1%;
        white-space: nowrap;
        padding-left: 6px;
        padding-right: 6px;
    }
}

.nx-list-toolbar {
    display: flex;
    flex-wrap: wrap;
    gap: 8px;
    align-items: center;
    margin-bottom: 12px;
    padding-top: 5px;
}
.nx-list-toolbar .form-control,
.nx-list-toolbar .form-select {
    height: 40px;
    font-size: 14px;
}
.nx-list-toolbar input[type="search"] {
    min-width: 220px;
    flex: 1 1 220px;
    max-width: 360px;
}
/* До инициализации Select2 нативный <select> имеет form-select width:100%. Фиксируем ширину
   заранее, чтобы при загрузке страницы не было вспышки полной ширины. */
.nx-list-toolbar select[name="sort"]     { width: 200px; }
.nx-list-toolbar select[name="dir"]      { width: 120px; }
.nx-list-toolbar select[name="per_page"] { width: 110px; }
.nx-list-toolbar select[name="group"]    { width: 200px; }
.nx-list-toolbar select[name="status"]   { width: 160px; }
.nx-list-toolbar .nx-view-toggle .btn {
    padding: 6px 10px;
}

/* Чекбоксы строк/мастера используют form-check-input (Bootstrap+Metronic). */

.nx-bulk-toolbar {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    background: #fff;
    border: 1px solid var(--bs-gray-500);
    border-radius: 6px;
    padding: 6px 10px;
}
/* Ссылка на контент (канал/плейлист) внутри таблицы — тёмный текст вместо примарного цвета. */
.vision-table .text-dashed {
    color: var(--bs-gray-dark);
}
/* Пункты dropdown-меню действий внутри таблицы — тёмный текст. text-danger/info/success
   останутся цветными благодаря !important от Bootstrap utilities. */
.vision-table tbody td .menu .menu-link {
    color: var(--bs-gray-dark);
}
/* Вложенные подменю действий (громкість/тривалість і т.п.) — відкриваємо в лінію зі строкою
   пункта, з якого викликаються, ліворуч від нього. Перебиваємо inline-стилі Popper/KTMenu. */
.menu-item.nx-sub-row { position: relative; }
.menu-item.nx-sub-row > .menu-sub-dropdown {
    position: absolute !important;
    top: 0 !important;
    bottom: auto !important;
    right: 100% !important;
    left: auto !important;
    margin: 0 .5rem 0 0 !important;
    transform: none !important;
}
/* Ссылка на группу в колонке «Група» — тёмный текст с пунктирным подчёркиванием. */
.nx-group-link {
    color: var(--bs-gray-dark);
    text-decoration: underline dotted;
    text-underline-offset: 2px;
}
.nx-group-link:hover {
    color: var(--bs-primary);
}
.nx-bulk-toolbar .nx-bulk-count {
    font-weight: 600;
    color: #000;
}
/* Бейдж с переносом строк внутри (статус + период через <br> на мобильном виде).
 * Bootstrap-badge по умолчанию white-space: nowrap — этот override его снимает. */
.nx-badge-multiline {
    white-space: normal;
    text-align: start;
    line-height: 1.3;
}
/* На мобиле раніше прятали текст у bulk-кнопках (icon-only) — тепер показуємо повні підписи.
 * Toolbar отримує flex-wrap, щоб ряд кнопок коректно переносився на вузьких екранах. */
@media (max-width: 767.98px) {
    .nx-bulk-toolbar {
        flex-wrap: wrap;
    }
}

/* Ограничение ширины контейнера списка. */
[data-nx-bulk] {
    max-width: 1540px;
}

/* Иконка-префикс внутри Select2 для фильтров и сортировки. */
.nx-list-toolbar select[name="sort"]     + .select2-container .select2-selection__rendered::before,
.nx-list-toolbar select[name="group"]    + .select2-container .select2-selection__rendered::before,
.nx-list-toolbar select[name="status"]   + .select2-container .select2-selection__rendered::before,
.nx-list-toolbar select[name="per_page"] + .select2-container .select2-selection__rendered::before {
    font-family: "bootstrap-icons" !important;
    font-style: normal;
    font-weight: 400;
    color: #99a1b7;
    margin-right: 6px;
    display: inline-block;
    vertical-align: middle;
    line-height: 1;
    position: relative;
    top: -1px;
}
.nx-list-toolbar select[name="sort"] + .select2-container .select2-selection__rendered::before {
    content: "\f575"; /* bi-sort-down */
}
.nx-list-toolbar select[name="group"] + .select2-container .select2-selection__rendered::before {
    content: "\f3d7"; /* bi-folder */
    margin-right: 7px;
}
.nx-list-toolbar select[name="status"] + .select2-container .select2-selection__rendered::before {
    content: "\f66b"; /* bi-activity */
}
.nx-list-toolbar select[name="per_page"] + .select2-container .select2-selection__rendered::before {
    content: "\f475"; /* bi-list-ol */
}

/* Иконка поиска внутри input — SVG как background, плюс отступ слева под иконку. */
.nx-list-toolbar input[type="search"] {
    background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='%2399a1b7' viewBox='0 0 16 16'%3E%3Cpath d='M11.742 10.344a6.5 6.5 0 1 0-1.397 1.398h-.001c.03.04.062.078.098.115l3.85 3.85a1 1 0 0 0 1.415-1.414l-3.85-3.85a1.007 1.007 0 0 0-.115-.1zM12 6.5a5.5 5.5 0 1 1-11 0 5.5 5.5 0 0 1 11 0z'/%3E%3C/svg%3E");
    background-repeat: no-repeat;
    background-position: 12px center;
    padding-left: 36px;
}

/* Базовая table-view для списочных страниц (screens, files, users). */
.vision-table {
    width: 100%;
    border-collapse: separate;
    border-spacing: 0;
    background: #fff;
    border: 1px solid #e4e6ef;
    border-radius: 8px;
}
/* Скругление видимых углов таблицы — на крайних ячейках первой/последней строки.
   border-radius на самой <table> при border-collapse:separate не клиппит ячейки. */
.vision-table thead tr:first-child th:first-child { border-top-left-radius: 8px; }
.vision-table thead tr:first-child th:last-child  { border-top-right-radius: 8px; }
.vision-table tbody tr:last-child td:first-child  { border-bottom-left-radius: 8px; }
.vision-table tbody tr:last-child td:last-child   { border-bottom-right-radius: 8px; }
.vision-table thead th {
    background: #fff;
    font-weight: 600;
    font-size: 12px;
    color: #5e6278;
    text-transform: uppercase;
    letter-spacing: 0.4px;
    padding: 16px 12px;
    border-bottom: 1px solid #e4e6ef;
    white-space: nowrap;
}
.vision-table thead th a {
    color: inherit;
    text-decoration: none;
    cursor: pointer;
}
.vision-table thead th a:hover {
    color: #3e97ff;
    text-decoration: underline;
}
.vision-table thead th .sort-arrow {
    margin-left: 4px;
    opacity: 0.5;
    font-size: 10px;
    vertical-align: middle;
}
.vision-table tbody td {
    padding: 10px 12px;
    border-bottom: 1px solid #f1f1f4;
    font-size: 14px;
    vertical-align: middle;
    color: var(--bs-gray-dark);
}
/* Иконка «изменить громкость» рядом со значением — мелкая серая, как стрелка сортировки. */
.vision-table tbody td .nx-vol-edit {
    margin-left: 6px;
    opacity: 0.5;
    font-size: 11px;
    color: var(--bs-gray-700);
    vertical-align: middle;
}
.vision-table tbody td .nx-vol-edit:hover {
    opacity: 1;
    color: #3e97ff;
}
/* Иконки в ячейках центрируем по средней линии текста. */
.vision-table tbody td i.bi {
    vertical-align: middle;
}
.vision-table tbody tr:hover td {
    background: #f9f9fb;
}
.vision-table tbody tr:last-child td {
    border-bottom: 0;
}

.nx-pagination {
    display: flex;
    justify-content: center;
    margin-top: 16px;
}
.nx-pagination .pagination .page-item.active .page-link {
    background: #3e97ff;
    border-color: #3e97ff;
    color: #fff;
}

/* ============================================================
 * Sidebar layout fix (2026-05-11):
 * Footer-блок с именем пользователя был position-неявный flex-item.
 * При длинном меню (#kt_app_sidebar_navs) пункты уезжали под footer.
 * Решение: явно flex-column, navs скроллится в своих границах,
 * footer не сжимается и не наезжает.
 * ============================================================ */
#kt_app_sidebar {
    display: flex;
    flex-direction: column;
}
#kt_app_sidebar_navs {
    flex: 1 1 auto;
    overflow-y: auto;
    min-height: 0; /* критично для flex+overflow в Firefox/WebKit */
}
#kt_app_sidebar_footer {
    flex-shrink: 0;
    padding-top: 16px; /* відступ між меню та блоком акаунта */
}

/* Утилітарний клас .nowrap — забороняє перенос рядка всередині елемента.
 * Використовується в meta-блоках (іконка + назва каналу/плейлиста, тип файла + розширення тощо).
 * Раніше клас не мав CSS-правила і браузер міг переносити іконку від тексту. */
.nowrap {
    white-space: nowrap;
}

/* На мобильному: довге ім'я каналу/плейлиста (всередині .nowrap) не повинно розтягувати колонку
 * і виштовхувати таблицю за межі екрану. Обрізаємо з ellipsis у межах ячейки. */
@media (max-width: 767.98px) {
    .vision-table td.d-md-none {
        max-width: 0; /* table-cell hack: колонка займе fluid-ширину, не розширюючись по content */
    }
    .vision-table td.d-md-none .nowrap {
        display: inline-block;
        max-width: 100%;
        overflow: hidden;
        text-overflow: ellipsis;
        vertical-align: middle;
    }
}

/* Form-switch / form-check labels: за замовчуванням Metronic ставить color: var(--bs-gray-500) — приглушений.
 * Підпис перемикача — це звичайний текст біля контролу, не заголовок. Ставимо основний темний колір. */
.form-check .form-check-label {
    color: var(--bs-gray-900);
}

/* Files: довгі імена файлів не повинні розривати таблицю — обрізаємо з ellipsis.
 * max-width:0 — стандартний хак для table-cell + ellipsis (cell займе доступне місце замість content-розміру). */
.vision-table td.nx-truncate {
    max-width: 0;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}
.vision-table td.nx-truncate > a,
.vision-table td.nx-truncate > .text-truncate {
    display: inline-block;
    max-width: 100%;
    overflow: hidden;
    text-overflow: ellipsis;
    vertical-align: middle;
}
/* Колонка «Контент» в /screens: get_usage_text оборачивает ссылку в <span class="nowrap"> с иконкой.
   Обрезаем span целиком (иконка остаётся, имя — с многоточием).
   min-width не даёт колонке схлопнуться, когда имя экрана длинное. */
.vision-table td.nx-truncate-usage {
    min-width: 220px;
}
.vision-table td.nx-truncate-usage > span {
    display: inline-block;
    max-width: 100%;
    overflow: hidden;
    text-overflow: ellipsis;
    vertical-align: middle;
}

/* Подсветка строки при переходе по ?highlight=<id> (возврат после переименования и т.п.).
   Светлый фон, как при наведении; класс снимается JS через 5с — фон плавно гаснет. */
.vision-table tr.nx-row-highlight > td {
    background-color: #f4f6f8 !important;
    transition: background-color 1.2s ease;
}
