/* ==========================================================================
   MyBGBilling «lighthru» — сетка, раскладка и адаптивность
   --------------------------------------------------------------------------
   Этот файл подключается ПОСЛЕДНИМ (вместо вендорского
   theme/1_0/layout-override.css), поэтому всё здесь имеет приоритет над
   общими layout.css / layout-override.css и темами Bootswatch.
   Общие файлы вендора при этом не изменяются — дефолтная тема «yeti»
   продолжает работать ровно как раньше.

   Замена в index.xhtml / login.xhtml / confirm.xhtml:
       <h:outputStylesheet library="theme" name="lighthru/layout-override.css" />

   --------------------------------------------------------------------------
   ПОЧЕМУ ШАПКА ПЕРЕБРАНА ПОЛНОСТЬЮ
   В layout.css вендор позиционирует элементы шапки абсолютно:
       div.navbar-brand      position:absolute; left:13px;  top:10px
       a.navbar-brand        position:absolute; left:84px;  top:15px
       .navbar-top-links     position:absolute; bottom:0;   right:0
       div.navbar-header     min-height:100px (при >=768px)
   Из-за этого:
     * .navbar-top-links перекрывал кнопку бургера — меню было физически
       недоступно (элемент перехватывал клики), и шапка вылезала за экран;
     * реальная высота шапки 100px не совпадала с --lk-nav-h, и заголовок
       страницы уезжал под неё.
   Поэтому все абсолютные позиции сняты, шапка переведена на flex —
   работает одинаково на всех ширинах.
   ========================================================================== */


/* ==========================================================================
   1. КАРКАС
   ========================================================================== */
#wrapper {
  width: 100%;
  min-height: 100vh;
  display: flex;
  flex-direction: column;
  /* страховка от горизонтального скролла из-за абсолютных элементов вендора */
  overflow-x: hidden;
}


/* ==========================================================================
   2. ШАПКА — общая схема для всех ширин
   ========================================================================== */
.navbar-static-top {
  position: fixed;
  top: 0;
  left: 0;
  right: 0;
  z-index: 1030;
  min-height: var(--lk-nav-h);
  box-shadow: var(--lk-shadow-md);
}

.navbar-static-top > .container-fluid {
  display: flex;
  align-items: center;
  flex-wrap: nowrap;
  min-height: var(--lk-nav-h);
  padding: 0 16px;
}

/* Вендор задаёт .navbar-header{min-height:100px} при >=768px — из-за этого
   шапка становилась выше --lk-nav-h, и логотип с пунктами «баланс/договор»
   наезжали на сайдбар и на заголовок страницы. Высота должна задаваться
   переменной, иначе все смещения дальше считаются неверно. */
.navbar-static-top .navbar-header {
  min-height: var(--lk-nav-h);
  padding: 0 !important;
  margin: 0 !important;
}

/* --- снимаем вендорское абсолютное позиционирование ---
   Селекторы ниже — по КЛАССАМ, а не по тегу: вендор пишет
   `a.navbar-brand { position:absolute; left:84px; top:15px }`,
   но разметка даёт <a class="navbar-brand navbar-brand-lk">.
   Правило по тегу с более высокой специфичностью, чем моё,
   и сбивало «Личный кабинет» влево поверх логотипа. */
.navbar-static-top .navbar-header,
.navbar-static-top .navbar-brand,
.navbar-static-top .navbar-top-links,
.navbar-static-top #navbar-top-links-form {
  position: static;
  float: none;
}

/* --- бургер --- */
.navbar-static-top .navbar-header {
  display: flex;
  align-items: center;
  min-width: 0;
  flex: 0 1 auto;
}

/* Вендор оборачивает логотип и «Личный кабинет» в БЕЗЫМЯННЫЙ div:
     <div class="navbar-header"> … <div> <div.navbar-brand> <a.navbar-brand-lk>
   Он не является flex-элементом, поэтому логотип и название вставали
   друг под другом, а не в строку. Делаем и его горизонтальным. */
.navbar-static-top .navbar-header > div {
  display: flex;
  align-items: center;
  min-width: 0;
  flex: 0 1 auto;
}
.navbar-static-top .navbar-toggle {
  flex: 0 0 auto;
  float: none;
  /* вендорский @media(min-width:768px) вешает .navbar-toggle
     position:absolute — на узких экранах он уезжал за левый край */
  margin: 0 12px 0 0 !important;
  padding: 8px 10px;
  border-color: var(--lk-line);
  background: transparent;
  border-radius: var(--lk-r-sm);
  position: relative;   /* перекрываем абсолютное позиционирование вендора */
}
.navbar-static-top .navbar-toggle:hover,
.navbar-static-top .navbar-toggle:focus { background: var(--lk-b50); }
.navbar-static-top .navbar-toggle .icon-bar { background-color: var(--lk-ink-2); }

/* --- логотип ---
   ВАЖНО: путь к картинке ОБЯЗАТЕЛЬНО абсолютный от корня контекста.
   Вендор пишет url(../static/images/logo.png) — в theme.css это работает,
   т.к. он лежит в resources/theme/1_0/. Но наш layout-override.css лежит
   на том же уровне, и относительный путь резолвится браузером относительно
   URL ресурса JSF (/javax.faces.resource/lighthru/layout-override.css) и даёт
   404. Отсюда «пустой» логотип. */
.navbar-static-top div.navbar-brand {
  flex: 0 0 auto;
  width: 44px;
  height: 30px;
  margin: 0 10px 0 0 !important;
  padding: 0 !important;
  background: url("/static/images/logo.png") no-repeat left center;
  background-size: contain;
}

/* --- «Личный кабинет» + имя абонента --- */
.navbar-static-top a.navbar-brand-lk,
.navbar-static-top a.navbar-brand-customer {
  /* position:static уже задан выше по классу .navbar-brand —
     здесь только размеры, иначе перебиваем то правило */
  display: inline-block;
  min-width: 0;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  line-height: 1.2;
}
.navbar-static-top a.navbar-brand-lk {
  flex: 0 1 auto;
  font-size: 16px;
  font-weight: 700;
  color: var(--lk-b600);
  height: auto;
}
.navbar-static-top a.navbar-brand-lk:hover { color: var(--lk-b700); }

/* на широких экранах имя абонента показываем рядом, на мобильных — нет */
.navbar-static-top a.navbar-brand-customer {
  flex: 0 1 auto;
  margin-left: 10px;
  padding-left: 10px;
  border-left: 1px solid var(--lk-line);
  font-size: 13px;
  font-weight: 400;
  color: var(--lk-ink-2);
}

/* --- баланс и договор справа --- */
.navbar-static-top #navbar-top-links-form {
  /* margin-left: auto больше не нужен: место забирает .ui-mode-toggle-slot */
  min-width: 0;
}
.navbar-static-top .navbar-top-links {
  display: flex;
  align-items: center;
  flex-wrap: nowrap;
  gap: 2px;
}
.navbar-static-top .navbar-top-links > li { display: flex; }
.navbar-static-top .navbar-top-links > li > a {
  padding: 9px 12px;
  min-height: 0;
  color: var(--lk-ink-2);
  font-size: 14px;
  font-weight: 500;
  line-height: 1.4;
  white-space: nowrap;
  display: flex;
  align-items: center;
}
.navbar-static-top .navbar-top-links > li > a:hover,
.navbar-static-top .navbar-top-links > li > a:focus {
  background: var(--lk-b50);
  color: var(--lk-b700);
}
.navbar-static-top .navbar-top-links .fa-rub { color: var(--lk-b500); }

/* выпадающие списки не должны вылезать за экран */
.navbar-static-top .dropdown-menu { right: 0; left: auto; }


/* ==========================================================================
   3. ШАПКА — мобильный телефон (<768px)
   Две строки: [☰ логотип название … кнопка вариации] / [баланс · договор].
   Одна строка не помещается: номер договора бывает длинным
   («НК00001-05»), и блок баланса+договора уезжал за правый край.
   ========================================================================== */
@media (max-width: 767px) {
  .navbar-static-top {
    position: sticky;          /* в потоке — не нужно сдвигать контент */
    min-height: 0;
  }
  .navbar-static-top > .container-fluid {
    flex-wrap: wrap;
    padding: 7px 12px 0;
  }
  /* строка 1: заголовок занимает доступное место, кнопка вариации — правый край */
  .navbar-static-top .navbar-header { flex: 1 1 auto; }
  .navbar-static-top a.navbar-brand-customer { display: none; }

  .navbar-static-top .ui-mode-toggle-slot {
    flex: 0 0 auto;
    margin-left: auto;
    margin-right: 0;
    padding-left: 8px;
  }

  /* строка 2: баланс и договор */
  .navbar-static-top #navbar-top-links-form {
    flex: 1 1 100%;
    margin-left: 0;
    border-top: 1px solid var(--lk-line-2);
    margin-top: 7px;
  }
  .navbar-static-top .navbar-top-links { width: 100%; }
  .navbar-static-top .navbar-top-links > li { flex: 1 1 0; }
  .navbar-static-top .navbar-top-links > li > a {
    padding: 8px 10px;
    font-size: 13.5px;
  }

  /* выпадающий список занимает почти всю ширину экрана */
  .navbar-static-top .dropdown-menu {
    position: static;
    float: none;
    width: 100%;
    border: 0;
    border-top: 1px solid var(--lk-line-2);
    border-radius: 0;
    box-shadow: none;
    padding: 4px 0 8px;
  }
}


/* ==========================================================================
   4. ШАПКА — планшет (768–991px)
   Один ряд, но места меньше: прячем текст «Личный кабинет»,
   оставляя логотип, и сжимаем отступы.
   ========================================================================== */
@media (min-width: 768px) and (max-width: 991px) {
  .navbar-static-top > .container-fluid { padding: 0 12px; }
  .navbar-static-top a.navbar-brand-lk { font-size: 15px; }
  .navbar-static-top a.navbar-brand-customer { display: none; }
  .navbar-static-top .navbar-top-links > li > a { padding: 9px 8px; font-size: 13.5px; }

  /* Bootstrap прячет бургер от 768px (.navbar-toggle{display:none}),
     но меню на планшете остаётся шторкой — без бургера оно недоступно.
     Возвращаем кнопку на всю ширину до 992px. */
  .navbar-static-top .navbar-toggle { display: block; }
}


/* ==========================================================================
   5. САЙДБАР — десктоп (>=992px)
   ========================================================================== */
@media (min-width: 992px) {
  .sidebar {
    position: fixed;
    top: var(--lk-nav-h);
    bottom: 0;
    left: 0;
    width: var(--lk-side-w);
    z-index: 1020;
    overflow-y: auto;
    overscroll-behavior: contain;
    -webkit-overflow-scrolling: touch;
    border-right: 1px solid var(--lk-line);
    background: var(--lk-card);
  }
  .sidebar .sidebar-nav { display: block !important; }
  .sidebar-header { height: 14px; }

  #page-wrapper {
    position: static;
    margin: 0 0 0 var(--lk-side-w);
    min-height: auto;
    /* отступ равен высоте ШАПКИ: сдвигаем только контент, не сайдбар */
    padding-top: var(--lk-nav-h);
  }

  .sidebar::-webkit-scrollbar         { width: 8px; }
  .sidebar::-webkit-scrollbar-track   { background: transparent; }
  .sidebar::-webkit-scrollbar-thumb   { background: var(--lk-line); border-radius: 4px; }
  .sidebar::-webkit-scrollbar-thumb:hover { background: var(--lk-b200); }
}


/* ==========================================================================
   6. САЙДБАР — планшет и телефон (<992px)
   Меню-шторка: по кнопке бургера раскрывается под шапкой.
   Bootstrap 3 на 768–991px держит .navbar-collapse раскрытым — перекрываем.
   ========================================================================== */
@media (max-width: 991px) {
  .sidebar {
    position: static;
    width: auto;
    background: var(--lk-card);
    border-bottom: 1px solid var(--lk-line);
  }
  .sidebar .sidebar-nav { border-top: 0; }
  .sidebar-nav { padding: 4px 0 10px; }

  /* длинное меню не должно растягивать страницу — прокрутка внутри */
  .sidebar .sidebar-nav.in {
    max-height: calc(100vh - 140px);
    overflow-y: auto;
    -webkit-overflow-scrolling: touch;
  }
}

@media (min-width: 768px) and (max-width: 991px) {
  .sidebar .sidebar-nav { display: none !important; }
  .sidebar .sidebar-nav.in { display: block !important; }
}

@media (max-width: 767px) {
  #side-menu > li > a { padding: 12px 16px; }
  #side-menu .nav-second-level > li > a { padding-left: 30px; }
}


/* ==========================================================================
   7. КОНТЕНТ
   ========================================================================== */
#page-wrapper { min-height: 60vh; }

/* Вендор с 768px отступляет #page-wrapper на 220px под постоянный сайдбар
   (@media(min-width:768px){margin:0 0 0 220px}). До 992px у нас сайдбар —
   раскрывающаяся шторка, поэтому отступ нужно снять, иначе на планшете
   контент уезжает вправо и справа остаётся пустое поле.
   С 992px отступ нужен (см. раздел 5) — поэтому правило ограничено. */
@media (max-width: 991px) {
  #page-wrapper {
    margin-left: 0 !important;
    padding-top: 0 !important;
  }
}

#page-wrapper-content {
  margin: 0 auto;
  padding: 20px 24px 0;
  max-width: 1220px;
}

#messages { min-height: 0; }

@media (min-width: 1400px) {
  #page-wrapper-content { padding: 24px 32px 0; }
}
@media (max-width: 1199px) {
  #page-wrapper-content { padding: 18px 20px 0; }
}
@media (max-width: 991px) {
  #page-wrapper-content { padding: 16px 16px 0; }
}
@media (max-width: 767px) {
  #page-wrapper-content { padding: 14px 12px 0; }
  /* компенсируем отрицательные поля .row, иначе контент уезжает за край */
  .row { margin-left: -6px; margin-right: -6px; }
  .row > [class*="col-"] { padding-left: 6px; padding-right: 6px; }
}


/* ==========================================================================
   8. ЗАГОЛОВОК СТРАНИЦЫ
   ========================================================================== */
.content-header {
  display: flex;
  flex-wrap: wrap;
  align-items: baseline;
  gap: 12px;
  position: static;          /* вендор делал relative + float хлебных крошек */
}
.content-header h1 { flex: 1 1 auto; min-width: 0; }
.content-header > .breadcrumb { float: none; }

@media (max-width: 767px) {
  .content-header { margin-bottom: 12px; }
  .content-header h1 { font-size: 21px; width: 100%; }
}


/* ==========================================================================
   9. ТАБЛИЦЫ НА УЗКИХ ЭКРАНАХ
   Непрерывный nowrap по всем ячейкам делал таблицы нечитаемо широкими,
   поэтому первая колонка фиксируется, остальные переносятся.
   ========================================================================== */
@media (max-width: 991px) {
  .table-responsive { border: 0; -webkit-overflow-scrolling: touch; }

  /* Первая колонка (описание) переносится по словам — иначе она занимает
     всю ширину и уводит денежные суммы за правый край экрана. */
  .table-responsive > .table > thead > tr > th,
  .table-responsive > .table > tbody > tr > td { white-space: normal; }

  /* Суммы не переносятся: разорванное посреди числа «-77,42» не читается */
  .table-responsive > .table td:last-child,
  .table-responsive > .table th:last-child {
    white-space: nowrap;
    text-align: right;
    min-width: 76px;
    font-variant-numeric: tabular-nums;
  }
}

@media (max-width: 767px) {
  .table > thead > tr > th,
  .table > tbody > tr > td { padding: 8px 10px; }
  .table > thead > tr > th:first-child,
  .table > tbody > tr > td:first-child { padding-left: 12px; }
  .table > thead > tr > th:last-child,
  .table > tbody > tr > td:last-child  { padding-right: 12px; }
  .table > thead > tr > th { font-size: 11px; }
}


/* ==========================================================================
   10. ФИЛЬТРЫ
   ========================================================================== */
@media (max-width: 767px) {
  .filter { padding: 12px 13px; }
  .filter .form-inline .form-group,
  .filter .form-inline .form-control,
  .filter .form-inline .btn { width: 100%; margin-right: 0; }
  .filter .form-inline .btn { margin-top: 10px; }
  .filter .input-group { width: 100%; }
}


/* ==========================================================================
   11. КНОПКИ
   ========================================================================== */
@media (max-width: 575px) {
  .page-content-data > .btn,
  .page-content-data > p > .btn { width: 100%; margin-bottom: 8px; }
  .panel-body > .btn { margin-bottom: 8px; }
}
@media (max-width: 767px) {
  .paymentBlocks { flex-direction: column; }
  .paymentBlockLogo { width: 100%; height: 90px; }
  .pagination-top, .pagination-bottom { text-align: center; }
  .pagination > li > a, .pagination > li > span { padding: 6px 10px; }
}


/* ==========================================================================
   12. ФОКУС
   Браузерная рамка фокуса на пунктах меню — чёрная и выглядит как ошибка
   вёрстки. Заменяем на фирменный голубой.
   ========================================================================== */
#side-menu a:focus,
#side-menu a:focus-visible,
.navbar-static-top a:focus,
.navbar-static-top a:focus-visible,
.dropdown-menu a:focus {
  outline: 2px solid var(--lk-b400);
  outline-offset: -2px;
}
/* мышиный фокус рамкой не сопровождаем */
#side-menu a:focus:not(:focus-visible) { outline: none; }


/* ==========================================================================
   13. ЗОНЫ НАЖАТИЯ
   ========================================================================== */
@media (max-width: 767px), (hover: none) {
  #side-menu > li > a { min-height: 44px; }
  #side-menu .nav-second-level > li > a,
  #side-menu .nav-third-level > li > a { min-height: 40px; }
  .navbar-static-top .navbar-toggle { padding: 12px 14px; }
  .navbar-static-top .navbar-top-links > li > a { min-height: 40px; }
  .btn { min-height: 40px; }
}


/* ==========================================================================
   14. СТРАНИЦА ВХОДА
   ========================================================================== */
body.loginPageBody {
  width: auto;
  height: auto;
  min-height: 100vh;
  background: var(--lk-bg);
  background-image:
    radial-gradient(1200px 600px at 15% -10%, var(--lk-login-1) 0%, var(--lk-login-1-a) 60%),
    radial-gradient(1000px 500px at 100% 100%, var(--lk-login-2) 0%, var(--lk-login-2-a) 55%);
  background-attachment: fixed;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 28px 18px;
}

body.loginPageBody .middlePage {
  position: static;
  width: 100%;
  max-width: 400px;
  height: auto;
  margin: 0 auto;
}

body.loginPageBody .page-header {
  text-align: center;
  padding-bottom: 22px;
  border-bottom: 0;
  float: none;
}
body.loginPageBody .page-header h1.logo {
  font-size: 22px;
  font-weight: 700;
  color: var(--lk-b700);
  margin: 0;
  padding: 0;
}
body.loginPageBody .page-header h1.logo small { font-size: 22px; color: var(--lk-b700); }

body.loginPageBody .login-brand {
  float: none;
  display: block;
  margin: 0 auto 16px;
  width: 120px;
  height: 60px;
  background-size: contain;
  background-position: center top;
  background-repeat: no-repeat;
}

body.loginPageBody .loginPanel {
  background: var(--lk-card);
  border: 1px solid var(--lk-line);
  border-radius: var(--lk-r);
  box-shadow: var(--lk-shadow-lg);
  overflow: hidden;
  margin: 0;
}
body.loginPageBody .loginPanel .panel-heading {
  background: var(--lk-card);
  border-bottom: 1px solid var(--lk-line-2);
  padding: 16px 20px;
}
body.loginPageBody .loginPanel .panel-title {
  font-size: 16px;
  font-weight: 600;
  color: var(--lk-ink);
  margin: 0;
}
body.loginPageBody .loginPanel .panel-body { padding: 22px 20px 24px; }

body.loginPageBody .dropdown-toggle[style*="color: white"] { color: var(--lk-b500) !important; }
body.loginPageBody .spacing { padding: 6px 0; }
body.loginPageBody .form-control { height: 44px; font-size: 16px; }

@media (max-width: 380px) {
  body.loginPageBody .middlePage { max-width: 100%; }
  body.loginPageBody .form-control { height: 42px; }
}


/* ==========================================================================
   15. ДОСТУПНОСТЬ
   ========================================================================== */
@media (prefers-reduced-motion: reduce) {
  *, *:before, *::after {
    animation-duration: .001ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: .001ms !important;
    scroll-behavior: auto !important;
  }
}

.sr-only {
  position: absolute;
  width: 1px; height: 1px;
  padding: 0; margin: -1px;
  overflow: hidden;
  clip: rect(0, 0, 0, 0);
  white-space: nowrap;
  border: 0;
}


/* ==========================================================================
   16. ПЕЧАТЬ
   ========================================================================== */
@media print {
  .navbar, .sidebar, .about, .filter, .pagination,
  .pagination-top, .pagination-bottom, .btn { display: none !important; }
  body { background: #fff; font-size: 12pt; }
  .panel { box-shadow: none; border: 1px solid #999; }
  #page-wrapper { margin-left: 0 !important; padding-top: 0 !important; }
  a[href]:after { content: ""; }
}
