/* layouts.css — основной shell layout для authenticated страниц (T02.14).
 *
 * Используется base.html и base_admin.html. Без topbar (DECISIONS.md SYNC #11):
 * email + «Выход» в .ms-sidebar__footer. См. STYLE_GUIDE.md.
 */

/* === Global body — Golos font + brand colors (single source of truth) ===
 * Без этого правила .ms-btn / .ms-input / .ms-h1 наследовали бы системный
 * sans-serif, потому что все они используют `font-family: inherit`.
 * Шрифт — Golos (var(--font-sans)). TASK_314: база 17px + вес 500 (крупнее/жирнее тело;
 * заголовки 600/700 из components.css держат иерархию над телом). */
body {
  margin: 0;
  font-family: var(--font-sans);
  font-size: var(--text-base);
  font-weight: 500;
  color: var(--graphite);
  background: var(--gray-bg);
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  text-rendering: optimizeLegibility;
  font-variant-numeric: tabular-nums;   /* TASK_214 Волна 0: цифры табличные, не «прыгают» */
}

/* === Skip link (accessibility) === */
.ms-skip-link {
  position: absolute;
  left: -9999px;
  top: 0;
}
.ms-skip-link:focus {
  left: 16px;
  top: 16px;
  background: var(--brand-ink);
  color: var(--white);
  padding: 8px 14px;
  border-radius: var(--radius-sm);
  z-index: var(--z-toast);
}

/* === Shell (sidebar + main) === */
.ms-shell {
  display: grid;
  grid-template-columns: var(--sidebar-w) 1fr;
  min-height: 100vh;
  background: var(--gray-bg);
  color: var(--graphite);
}

/* === Sidebar (left navigation) === */
.ms-sidebar {
  background: #fff;
  border-right: 1px solid var(--gray-border);
  padding: 24px 0;
  display: flex;
  flex-direction: column;
  position: sticky;
  top: 0;
  height: 100vh;
  overflow: hidden;   /* TASK_402: сам сайдбар не скроллится — скролл уходит в список */
}
.ms-sidebar__logo {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 8px;
  padding: 0 16px 20px 24px;
  border-bottom: 1px solid var(--gray-border);
  margin-bottom: 16px;
  flex-shrink: 0;   /* TASK_402: логотип закреплён сверху */
}
.ms-sidebar__logo a {
  display: inline-flex;
  align-items: center;
  text-decoration: none;
}
.ms-sidebar__logo img {
  height: 40px;
  width: auto;
  display: block;
}
/* TASK_307: кнопка сворачивания сайдбара (десктоп). */
.ms-sidebar__collapse {
  flex-shrink: 0;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 32px;
  height: 32px;
  border: 0;
  background: transparent;
  color: var(--graphite-60);
  cursor: pointer;
  border-radius: var(--radius-sm);
  transition: background-color 0.12s ease, color 0.12s ease;
}
.ms-sidebar__collapse:hover { background: var(--brand-primary-light); color: var(--brand-ink); }
.ms-sidebar__collapse svg { transition: transform 0.15s ease; }
/* Логаут в футере: иконка + текст (в свёрнутом остаётся иконка). */
.ms-sidebar__logout {
  display: inline-flex;
  align-items: center;
  gap: 8px;
}
.ms-sidebar__nav {
  display: flex;
  flex-direction: column;
  gap: 1px;                    /* TASK_402: плотнее ритм (было 2px) */
  padding: 0 12px;
  flex: 1 1 auto;
  min-height: 0;               /* TASK_402: даёт flex-элементу сжаться → скролл списка включается */
  overflow-y: auto;            /* скроллится ТОЛЬКО список пунктов; лого/футер закреплены */
  scrollbar-width: thin;
  scrollbar-color: var(--gray-border) transparent;
  scroll-behavior: smooth;
}
.ms-sidebar__nav::-webkit-scrollbar { width: 6px; }
.ms-sidebar__nav::-webkit-scrollbar-track { background: transparent; }
.ms-sidebar__nav::-webkit-scrollbar-thumb { background: var(--gray-border); border-radius: 3px; }
.ms-sidebar__nav::-webkit-scrollbar-thumb:hover { background: var(--graphite-30); }
/* TASK_402: тихая микро-подпись группы пунктов (eyebrow) */
.ms-sidebar__group {
  margin: 12px 10px 4px;
  padding: 0 2px;
  font-size: 10px;
  font-weight: 700;
  letter-spacing: .08em;
  text-transform: uppercase;
  color: var(--graphite-30);
  user-select: none;
}
.ms-sidebar__group:first-child { margin-top: 2px; }
.ms-sidebar__link {
  display: flex;
  align-items: center;
  gap: 8px;
  padding: 6px 10px;           /* TASK_402: уплотнение — ~16 пунктов влезают */
  border-radius: 3px;
  color: var(--graphite);
  text-decoration: none;
  font-size: 13px;             /* TASK_402: 13px (не ниже) */
  font-weight: 500;
  line-height: 1.25;
  transition: background-color 0.12s ease;
}
.ms-sidebar__link:hover {
  background: var(--brand-primary-light);
  color: var(--brand-ink);
}
.ms-sidebar__link--active {
  background: var(--brand-primary-light);
  color: var(--brand-ink);
  font-weight: 600;
}
/* SVG-иконки навигации (заменили эмодзи) — не сжимаются, приглушённый цвет */
.ms-nav-ico {
  flex-shrink: 0;
  width: 17px;                 /* TASK_402: чуть меньше под уплотнённый ритм */
  height: 17px;
  opacity: 0.85;
}
.ms-sidebar__link--active .ms-nav-ico,
.ms-sidebar__link:hover .ms-nav-ico {
  opacity: 1;
}
/* Счётчик (негатив) — к правому краю ссылки */
.ms-sidebar__link .ms-badge-count {
  margin-left: auto;
}
.ms-divider {
  border: 0;
  border-top: 1px solid var(--gray-border);
  margin: 12px 12px;
}

/* === Sidebar footer (email + logout) — DECISIONS SYNC #11 === */
.ms-sidebar__footer {
  margin-top: auto;
  padding: 16px 16px 0;
  border-top: 1px solid var(--gray-border);
  display: flex;
  flex-direction: column;
  gap: 8px;
  font-size: 13px;
  flex-shrink: 0;   /* TASK_402: футер (email + «Выход») закреплён снизу */
}
.ms-sidebar__user {
  color: var(--graphite-60);
  word-break: break-all;
  line-height: 1.4;
}

/* === Main content area === */
.ms-main {
  display: flex;
  flex-direction: column;
  min-width: 0; /* предотвращает overflow при широких таблицах */
}
.ms-content {
  padding: 32px 32px;
  flex: 1;
  max-width: 1280px;
  /* TASK_319 F-010: гард от гориз. overflow на узкой мобиле для всех кабинетных
     страниц (clip, НЕ hidden — не создаёт scroll-контейнер, не ломает sticky/popover). */
  overflow-x: clip;
}
/* TASK_626.3: легаси-блок `.ms-content h1` + `.ms-content__h1--with-meta` + `.ms-content__meta`
   удалён. По специфичности (0,1,1) он бил канон `.ms-page-header__title { margin: 0 }` (0,1,0)
   и отклеивал подзаголовок на 24px вместо 4px на всех 51 странице кабинета. Аварийный класс
   --with-meta и .ms-content__meta не имели ни одного потребителя. Проверено: голых <h1>
   внутри .ms-content нет — все заголовки несут .ms-page-header__title / .ms-hero__title,
   которые задают кегль, вес и цвет сами (components.css:177). */

/* === Unauthenticated layout (login, change-password) === */
.ms-auth-shell {
  display: flex;
  align-items: center;
  justify-content: center;
  min-height: 100vh;
  padding: 24px;
  background: var(--gray-bg);
}

/* === Collapsed sidebar (TASK_307) — только десктоп ===
 * Класс .ms-sidebar-collapsed ставит sidebar.js на <html> → селекторы
 * ancestor-agnostic (.ms-sidebar-collapsed .X). На ≤768px кнопка тоггла скрыта
 * (мобильный off-canvas drawer управляется отдельно — nav.js/.ms-nav-open). */
@media (min-width: 769px) {
  .ms-sidebar-collapsed .ms-shell {
    grid-template-columns: var(--sidebar-w-collapsed) 1fr;
  }
  /* Лого-картинку, подписи пунктов, email и текст логаута — прячем. */
  .ms-sidebar-collapsed .ms-sidebar__logo a,
  .ms-sidebar-collapsed .ms-sidebar__link > span,
  .ms-sidebar-collapsed .ms-sidebar__user,
  .ms-sidebar-collapsed .ms-sidebar__logout > span {
    display: none;
  }
  /* Лого-ряд: остаётся только кнопка тоггла, по центру. */
  .ms-sidebar-collapsed .ms-sidebar__logo {
    justify-content: center;
    padding-left: 0;
    padding-right: 0;
  }
  /* Иконки навигации — по центру узкой колонки. */
  .ms-sidebar-collapsed .ms-sidebar__nav { padding: 0 8px; }
  .ms-sidebar-collapsed .ms-sidebar__link { justify-content: center; gap: 0; }
  .ms-sidebar-collapsed .ms-sidebar__footer { padding: 16px 8px 0; align-items: center; }
  .ms-sidebar-collapsed .ms-sidebar__logout { justify-content: center; gap: 0; }
  /* Счётчик негатива → красная точка-индикатор на иконке (решение владельца). */
  .ms-sidebar-collapsed .ms-sidebar__link { position: relative; }
  .ms-sidebar-collapsed .ms-sidebar__link .ms-badge-count {
    position: absolute;
    top: 4px;
    right: 8px;
    margin-left: 0;
    width: 8px;
    height: 8px;
    min-width: 0;
    padding: 0;
    font-size: 0;
    line-height: 0;
    border-radius: 50%;
  }
  /* Шеврон тоггла разворачивается (указывает «развернуть»). */
  .ms-sidebar-collapsed .ms-sidebar__collapse svg { transform: rotate(180deg); }
}

/* === Mobile top bar + backdrop (скрыты на десктопе) === */
.ms-mobilebar { display: none; }
.ms-nav-backdrop { display: none; }

/* === Responsive: off-canvas sidebar (audit F-03 — раньше меню вываливалось
 * стопкой над контентом; теперь бургер + выезжающий drawer) === */
@media (max-width: 768px) {
  .ms-shell { display: block; }

  /* TASK_307: на мобиле сворачивать нечего (off-canvas drawer на всю ширину) — тоггл прячем. */
  .ms-sidebar__collapse { display: none; }

  /* TASK_590.2: нав-ссылки drawer'а — тач-таргет 44px (десктоп-плотность не трогаем). */
  .ms-sidebar__link { min-height: 44px; }

  /* Верхняя панель с бургером и логотипом */
  .ms-mobilebar {
    display: flex;
    align-items: center;
    gap: var(--space-3);
    position: sticky;
    top: 0;
    height: 56px;
    padding: 0 var(--space-4);
    background: var(--white);
    border-bottom: 1px solid var(--gray-border);
    z-index: var(--z-sticky);
  }
  .ms-mobilebar__toggle {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 44px; height: 44px;
    margin-left: -10px;
    border: 0; background: transparent;
    color: var(--graphite);
    cursor: pointer;
    border-radius: var(--radius-sm);
  }
  .ms-mobilebar__toggle:hover { background: var(--gray-mid); }
  .ms-mobilebar__logo img { height: 28px; width: auto; display: block; }

  /* Сайдбар → выезжающий drawer */
  .ms-sidebar {
    position: fixed;
    top: 0; left: 0;
    height: 100vh;
    width: 280px;
    max-width: 84vw;
    transform: translateX(-100%);
    transition: transform var(--transition);
    z-index: var(--z-modal);
    border-right: 1px solid var(--gray-border);
    box-shadow: var(--shadow-lg);
  }
  body.ms-nav-open .ms-sidebar { transform: translateX(0); }

  /* Затемнение позади drawer */
  .ms-nav-backdrop {
    display: block;
    position: fixed;
    inset: 0;
    background: rgba(2, 25, 41, 0.45);
    z-index: var(--z-overlay);
    opacity: 0;
    visibility: hidden;
    transition: opacity var(--transition), visibility var(--transition);
  }
  body.ms-nav-open .ms-nav-backdrop { opacity: 1; visibility: visible; }
  body.ms-nav-open { overflow: hidden; }   /* блокируем скролл фона */

  .ms-content { padding: 20px 16px; }
  /* TASK_626.3: мобильный кегль переехал с удалённого `.ms-content h1` на канон-класс.
     layouts.css грузится после components.css → при равной специфичности (0,1,0) выигрывает. */
  .ms-page-header__title { font-size: var(--text-xl); }
}

/* ============================================================
   TASK_640 — кабинет внутри мессенджера MAX (класс на <body>)
   ============================================================
   Второго визуального языка нет: те же компоненты, просто снято лишнее и добавлены
   безопасные отступы. Правила ниже — только раскладка, ни одного нового цвета.

   Что снимаем и почему:
   - логотип в мобильной шапке — окно MAX уже подписано именем приложения, вторая
     подпись съедает высоту на экране 360×640; бургер ОСТАЁТСЯ, иначе из мини-приложения
     некуда перейти (навигация в кабинете живёт только там);
   - кнопка сворачивания сайдбара — она про десктоп;
   - баннеры impersonate/подтверждения почты — их действия ведут в разделы, закрытые
     для сессии мини-приложения;
   - юр-подвал убран в шаблоне (у окна мессенджера своя нижняя кромка).

   Safe-area: у телефонов с вырезом контент иначе уезжает под системные зоны. */
body.ms-miniapp .ms-mobilebar__logo,
body.ms-miniapp .ms-sidebar__collapse,
body.ms-miniapp .ms-notice {
  display: none;
}

body.ms-miniapp .ms-mobilebar {
  padding-top: env(safe-area-inset-top, 0px);
}

body.ms-miniapp .ms-content {
  padding-bottom: calc(20px + env(safe-area-inset-bottom, 0px));
  padding-left: max(16px, env(safe-area-inset-left, 0px));
  padding-right: max(16px, env(safe-area-inset-right, 0px));
}

/* Тап-цели: на телефоне палец не попадает в 32px. Минимум 44px — рекомендация обеих
   мобильных платформ; ширину не трогаем, чтобы не ломать ряды кнопок. */
body.ms-miniapp .ms-btn,
body.ms-miniapp .ms-sidebar__link,
body.ms-miniapp .ms-tab,
body.ms-miniapp button[type="submit"] {
  min-height: 44px;
}

/* ⚠️ `overflow-x: hidden` на body здесь НЕ ставим, хотя рука тянется. Он не чинит вылет,
   а прячет его — и заодно делает замер горизонтальной прокрутки всегда нулевым, то есть
   ломает единственную метрику, которой этот дефект и ловится (грабли TASK_627: мерил не тот
   инвариант). Широкие блоки обязаны скроллиться В СВОЁМ контейнере; ряд вкладок
   (`.ms-ftabs__bar`) так и делает — проверено замером на 360px. */
