/**
 * Адаптив кабинета: телефон и планшет.
 *
 * ЗАЧЕМ ОТДЕЛЬНЫЙ ФАЙЛ. Правки размазанные по admin.css (13 тыс. строк), appdashboard-main.css и
 * четырём модульным таблицам стилей невозможно ни отревьюить, ни откатить. Здесь собрано всё, что
 * относится к узким экранам, одним куском и в одном порядке: сначала общие правила, потом
 * раскладки по экранам. Файл подключается ПОСЛЕДНИМ, поэтому переопределяет базовые стили без
 * повышения специфичности; `!important` стоит только там, где базовое правило само объявлено
 * внутри media-запроса и иначе выигрывает.
 *
 * КАК СОБИРАЛСЯ СПИСОК. Не на глаз: по всем таблицам стилей найдены правила
 * `grid-template-columns` с фиксированными колонками, которые физически не помещаются в 390px
 * (56 раскладок — двухпанельные списки-карточки, тулбары, доски). Каждая из них ниже свёрнута.
 *
 * ПРАВИЛО, КОТОРОЕ ЗДЕСЬ ГЛАВНОЕ: содержимое не имеет права расширять страницу. Широкая таблица
 * прокручивается ВНУТРИ своей обёртки, длинная строка переносится или обрезается, но горизонтальной
 * полосы у всего кабинета быть не должно — на проде именно она и появилась от одной строки ошибки.
 */

/* ══════════════════════════════════════════════════════════════════
   1. Общая защита раскладки — на всех ширинах
   ══════════════════════════════════════════════════════════════════ */

/* Медиа никогда не шире контейнера: одна большая картинка в письме или в карточке товара
   растягивала экран так же, как длинная строка. */
img, video, canvas, svg, iframe { max-width: 100%; }
img, video { height: auto; }

/* Блоки кода и предпросмотра прокручиваются сами: перенос ломает смысл, растягивание — страницу. */
pre { max-width: 100%; overflow-x: auto; }

/**
 * Длинные строки без пробелов (идентификаторы, ссылки, ответы чужих API) переносятся внутри
 * КАРТОЧЕК — им есть куда переноситься.
 *
 * В ячейках таблиц этого делать НЕЛЬЗЯ, и это проверено дорого: вместе с ужиманием таблицы до
 * ширины экрана перенос по любому символу поставил каждую букву на свою строку — колонка «Alexander
 * Wright» превратилась в вертикальный столбик из тринадцати строк. Таблицы на узком экране
 * прокручиваются, а не сжимаются.
 */
.card, .integration-card, .e2e-card, .stat-card, .kpi-card {
  overflow-wrap: anywhere;
}

/* Обёртки таблиц прокручиваются по горизонтали. */
.table-responsive,
.billing-table-wrap, .invoice-table-wrap, .finance-table-wrap,
.access-table-wrap, .permission-matrix-wrap, .e2e-table-wrap, .attr-table-wrap {
  max-width: 100%;
  overflow-x: auto;
  -webkit-overflow-scrolling: touch;
}

/* Поля ввода в узких колонках: без min-width:0 они не дают колонке сжаться. */
input, select, textarea { max-width: 100%; min-width: 0; }

/* ══════════════════════════════════════════════════════════════════
   2. Планшет: ≤1024px — трёхколоночные раскладки становятся двумя
   ══════════════════════════════════════════════════════════════════ */
@media (max-width: 1024px) {
  .docs-shell,
  .finance-studio,
  .experts-summary {
    grid-template-columns: minmax(0, 1fr) !important;
  }

  .attr-journey-list article,
  .activity-log-toolbar {
    grid-template-columns: repeat(2, minmax(0, 1fr)) !important;
  }
}

/* ══════════════════════════════════════════════════════════════════
   3. Телефон и узкий планшет: ≤900px — все двухпанельные раскладки в одну колонку
   ══════════════════════════════════════════════════════════════════ */
@media (max-width: 900px) {
  /**
   * Двухпанельные экраны «список + карточка». На узком экране вторая панель обязана уходить ПОД
   * первую, а не ужиматься до нечитаемой ширины: 320px карточки рядом с 320px списком — это 640px,
   * которых на телефоне нет.
   */
  .leads-layout,
  .leads-toolbar,
  .contact-toolbar,
  .contacts-admin .contacts-layout,
  .widgets-shell,
  .widget-editor-grid,
  .cookie-layout,
  .store-layout,
  .floating-editor-grid,
  .client-portal-layout,
  .attr-hero,
  .attr-main-grid,
  .crm-finance-empty,
  .integrations-shell,
  .telegram-settings-workspace,
  .invoice-studio,
  .invoice-builder,
  .invoice-detail-layout,
  .messenger-inbox-shell,
  .access-loading,
  .access-error,
  .brand-studio-layout,
  .calendar-app,
  .two-column-layout,
  .page-activity .activity-layout,
  .page-notifications .notifications-layout,
  .page-users .user-view-layout,
  .page-users-view .user-view-layout,
  .page-users .user-edit-layout,
  .page-users-view .user-edit-layout,
  .page-roles .roles-layout,
  .page-invoice .invoice-detail-layout,
  .page-invoice-list .invoice-detail-layout,
  .page-invoice .invoice-document-bottom,
  .page-invoice-list .invoice-document-bottom,
  .page-faq .faq-layout,
  .page-timeline .timeline-layout,
  .page-search-results .search-hero,
  .page-search-results .search-layout,
  .page-contact .contact-grid,
  .page-dashboard .dashboard-workbench,
  .page-dashboard .dashboard-lower-grid,
  .page-settings .settings-layout,
  .finance-overview-grid,
  .finance-ledger-shell.has-inspector,
  .finance-management,
  .finance-recurring-management,
  .finance-report,
  .finance-delivery-body,
  .billing-settings-layout,
  .billing-template-studio,
  .billing-dashboard-grid,
  .activity-log-toolbar,
  .attr-journey-list article {
    grid-template-columns: minmax(0, 1fr) !important;
  }

  /**
   * Доски (канбан заявок, воронка экспертов) НЕ сворачиваются в колонку: доска без колонок теряет
   * смысл. Вместо этого колонки становятся почти во всю ширину экрана и доска прокручивается вбок —
   * привычное поведение канбана на телефоне.
   */
  .contacts-admin .contacts-board,
  .experts-pipeline,
  .kanban-board {
    grid-auto-flow: column;
    grid-auto-columns: 82vw;
    grid-template-columns: none !important;
    overflow-x: auto;
    -webkit-overflow-scrolling: touch;
    scroll-snap-type: x proximity;
  }

  .contacts-admin .contacts-board > *,
  .experts-pipeline > *,
  .kanban-board > * {
    scroll-snap-align: start;
    min-width: 0;
  }

  /* Панели, у которых ширина задана жёстко, а не сеткой. */
  .inspector-panel, .detail-panel, .side-panel, .filters-panel {
    width: auto !important;
    max-width: 100% !important;
  }

  /**
   * ТАБЛИЦЫ НА ТЕЛЕФОНЕ ПРОКРУЧИВАЮТСЯ, А НЕ СЖИМАЮТСЯ.
   *
   * У таблиц кабинета проставлены `width: 100%` (часто прямо в разметке) и проценты на колонки. На
   * экране 390px это даёт колонку в 50 пикселей, куда «Alexander Wright» не помещается ни при каком
   * переносе: строка встаёт по букве в столбик. Поэтому здесь задаётся минимальная ширина самой
   * таблицы — дальше работает прокрутка обёртки, к которой палец на телефоне привык.
   *
   * `!important` обязателен: `width: 100%` стоит инлайном в разметке и иначе выигрывает.
   */
  .table-responsive > table,
  .billing-table-wrap > table,
  .invoice-table-wrap > table,
  .finance-table-wrap > table,
  .access-table-wrap > table,
  .e2e-table-wrap > table {
    min-width: 720px !important;
    width: auto !important;
  }

  /* Матрица прав шире прочих: у неё колонка на каждое право. */
  .permission-matrix-wrap > table { min-width: 760px !important; }
}

/* ══════════════════════════════════════════════════════════════════
   4. Телефон: ≤640px — плотность, тулбары, вкладки, модальные окна
   ══════════════════════════════════════════════════════════════════ */
@media (max-width: 640px) {
  /**
   * Поля по краям. Их складывали ДВА контейнера: `.main-content` (20px) и `.content-area` с
   * бутстраповским `p-4` (24px) — итого 44px с каждой стороны при ширине экрана 390px, то есть
   * почти четверть экрана под пустоту. `!important` здесь обязателен: `p-4` объявлен с ним.
   */
  .main-content { padding: 0 !important; }
  .content-area,
  .content-area.p-4 { padding: 14px !important; }

  /* Заголовки экранов: 24–32px на телефоне съедают пол-экрана. */
  .content-area h1, .page-title { font-size: 20px; }
  .content-area h2 { font-size: 17px; }

  /**
   * Тулбары и панели действий: кнопки переносятся, а не выстраиваются в строку шире экрана.
   * Растягивать их на всю ширину не нужно — палец попадает и по обычной кнопке, а колонка из
   * восьми широких кнопок выталкивает содержимое экрана за первый экран прокрутки.
   */
  .toolbar, .page-toolbar, .card-toolbar, .filters-row,
  .section-actions, .table-actions, .finance-section-head, .e2e-head-controls {
    flex-wrap: wrap;
    gap: 8px;
  }

  /* Вкладки прокручиваются вбок вместо переноса в три ряда. */
  .nav-tabs, .tab-strip, .e2e-tabs, .developer-tabs, .finance-tabs {
    flex-wrap: nowrap;
    overflow-x: auto;
    -webkit-overflow-scrolling: touch;
    scrollbar-width: none;
  }
  .nav-tabs::-webkit-scrollbar, .tab-strip::-webkit-scrollbar,
  .e2e-tabs::-webkit-scrollbar, .developer-tabs::-webkit-scrollbar,
  .finance-tabs::-webkit-scrollbar { display: none; }
  .nav-tabs > *, .tab-strip > *, .e2e-tabs > *, .developer-tabs > *, .finance-tabs > * {
    flex: 0 0 auto;
  }

  /* Модальные окна: на телефоне это лист во весь экран, а не карточка с полями по краям. */
  .modal-dialog {
    max-width: 100%;
    margin: 8px;
  }
  .modal-body { max-height: 72vh; overflow-y: auto; }
  .modal-footer { flex-wrap: wrap; gap: 8px; }
  .modal-footer .btn { flex: 1 1 auto !important; min-width: 0 !important; }

  /* Сводные плитки: две в ряд читаются, четыре — нет. */
  .stats-grid, .kpi-row, .e2e-grid-kpi, .e2e-grid-kpi-4 {
    grid-template-columns: repeat(2, minmax(0, 1fr)) !important;
  }

    /* Формы в две колонки становятся одной. */
  .form-grid, .form-row-2, .settings-form-grid {
    grid-template-columns: minmax(0, 1fr) !important;
  }

  /* Карточный режим для списков на мобильных устройствах */
  .contact-card-list {
    display: flex;
    flex-direction: column;
    gap: 10px;
    width: 100%;
  }

  .contact-card-list .contact-card {
    border: 1px solid var(--crm-shell-border, var(--border));
    background: var(--crm-shell-surface, var(--bg-card));
    border-radius: 8px;
    padding: 14px;
    box-shadow: 0 1px 3px rgba(0, 0, 0, 0.05);
  }

  /* Адаптивные чипы фильтров ERPCollections и тулбары */
  .erp-collection-toolbar {
    min-width: 0;
    max-width: 100%;
    overflow-x: hidden;
  }

  .erp-collection-head {
    gap: 8px;
    flex-wrap: wrap;
    width: 100%;
    max-width: 100%;
  }

  .erp-filter-chips {
    width: 100%;
    max-width: 100%;
    box-sizing: border-box;
    flex-wrap: wrap;
    gap: 6px;
  }

  .erp-filter-chip {
    max-width: 100%;
    box-sizing: border-box;
    overflow-wrap: anywhere;
    word-break: break-word;
    white-space: normal;
  }

  .dash-panel-head.erp-collection-toolbar {
    flex-direction: column;
    align-items: stretch;
    gap: 10px;
  }

  .dash-panel-head.erp-collection-toolbar input {
    max-width: 100% !important;
    width: 100% !important;
  }
}

/* ══════════════════════════════════════════════════════════════════
   5. Узкий телефон: ≤400px
   ══════════════════════════════════════════════════════════════════ */
@media (max-width: 400px) {
  .content-area,
  .content-area.p-4 { padding: 10px !important; }

  /* Одна плитка в ряд: на 320px две плитки — это два числа по три символа. */
  .stats-grid, .kpi-row, .e2e-grid-kpi, .e2e-grid-kpi-4 {
    grid-template-columns: minmax(0, 1fr) !important;
  }

  /* Шапка карточки: заголовок и кнопка друг под другом вместо сжатия обоих. */
  .card-head, .e2e-card-head, .finance-section-head, .developer-section-head {
    flex-direction: column;
    align-items: stretch;
    gap: 10px;
  }

  /* Защита от переполнения чипов фильтров и инпутов на 390px */
  .erp-filter-chips {
    gap: 5px;
    padding-top: 8px;
  }

  .erp-filter-chip {
    font-size: 11px;
    padding: 4px 8px;
  }

  #clientSearch {
    max-width: 100% !important;
    width: 100%;
  }

  #leadSearch,
  #contactSearch {
    max-width: 100% !important;
    width: 100%;
    box-sizing: border-box;
  }

  .client-row {
    flex-direction: column !important;
    align-items: flex-start !important;
    gap: 8px !important;
    padding: 12px 14px !important;
  }

  .client-row > div:first-child {
    min-width: 0;
    width: 100%;
    overflow-wrap: anywhere;
    word-break: break-word;
  }

  .client-row .admin-row-meta {
    width: 100%;
    display: flex;
    justify-content: space-between;
    align-items: center;
    flex-wrap: wrap;
    gap: 6px;
  }
}

/* Quiet surface depth inspired by LearnHub; retain CRM palette, type and geometry. */
.app-layout .pipeline-stage {
  box-shadow: 0 2px 0 var(--border), 0 4px 10px rgb(15 23 42 / 4%) !important;
}
.app-layout .stat-card,
.app-layout .widget-stat,
.app-layout .analytics-kpi-card {
  font-variant-numeric: tabular-nums;
}
.app-layout :is(button, a, input, select, textarea):focus-visible {
  outline: 2px solid var(--accent, #6e45e2);
  outline-offset: 3px;
}
.sidebar .sidebar-close:focus-visible { outline-color: #cfc4ff; }
.sidebar-header .sidebar-close { flex: 0 0 44px; margin-left: auto; }

@media (max-width: 1199px) {
  body.sidebar-open { overflow: hidden; }
  .sidebar { max-width: calc(100vw - 48px); height: 100dvh; z-index: 1001; }
  .sidebar-nav { overscroll-behavior: contain; }
  .sidebar-footer { padding-bottom: max(16px, env(safe-area-inset-bottom)); }
  .sidebar-header .sidebar-close {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 44px;
    height: 44px;
    color: #f1f5f9;
  }
  .sidebar-overlay { z-index: 1000 !important; }
  .sidebar .nav-item { min-height: 44px; }
}

@media (max-width: 640px) {
  .app-layout :is(.btn, .sidebar-toggle, .header-action, .btn-close) {
    min-height: 44px;
    min-width: 44px;
    touch-action: manipulation;
  }
  .app-layout :is(input:not([type='checkbox']):not([type='radio']):not([type='range']):not([type='color']), select, textarea),
  .modal :is(.form-control, .form-select, .form-input) {
    font-size: 16px;
    min-height: 44px;
  }
  .crm-tabs { display: flex; flex-wrap: nowrap !important; overflow-x: auto; gap: 8px; }
  .app-layout .crm-tabs > button { flex: 0 0 auto; white-space: nowrap; min-height: 44px; }
  .contacts-command-center.p-4 { padding: 0 !important; }
  .contacts-command-center .page-title.fs-2 { font-size: 22px !important; }
  .calendar-grid { min-width: 0; grid-template-columns: repeat(7, minmax(0, 1fr)); }
  .calendar-day { min-width: 0; min-height: 64px; }
  .calendar-day-header { min-width: 0; padding-inline: 0; }
  .crm-dashboard-content .widget-stat { height: 100%; }
  .crm-dashboard-content .widget-stat-header { flex-wrap: wrap; gap: 8px; }
  .crm-dashboard-content .widget-stat-value { overflow-wrap: anywhere; }
  .header { padding-right: max(12px, env(safe-area-inset-right)); }
  .header-left { min-width: 0; }
  .content-area { padding-bottom: max(20px, env(safe-area-inset-bottom)) !important; }
  .modal-dialog { margin: max(8px, env(safe-area-inset-top)) 8px max(8px, env(safe-area-inset-bottom)); }
  .modal-content { max-height: calc(100dvh - 32px); }
  .modal-body { min-height: 0; max-height: none; overflow-y: auto; }
  .modal-header, .modal-footer { flex-shrink: 0; }
  .header-notifications-panel { max-width: calc(100vw - 24px); }
}

@media (min-width: 360px) and (max-width: 575px) {
  .crm-dashboard-content > .row:first-child > .col-12 { width: 50%; }
  .crm-dashboard-content .widget-stat-icon { display: none; }
  .crm-dashboard-content .widget-stat-change { white-space: normal; }
}

@media (prefers-reduced-motion: reduce) {
  .app-layout *, .modal, .modal * {
    animation-duration: 0.01ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: 0.01ms !important;
    scroll-behavior: auto !important;
  }
}

/* ERP shell drawer: a single breakpoint shared with appdashboard-main.js.
   !important overrides legacy 768px display/transform rules in admin.css. */
@media (max-width: 1199px) {
  .app-layout .sidebar { top: 0; width: 288px; transform: translateX(-100%) !important; transition: transform 160ms cubic-bezier(.2,.8,.2,1); }
  body.sidebar-open .app-layout .sidebar { transform: translateX(0) !important; transition-duration: 220ms; }
  .app-layout .sidebar-overlay { display: block !important; opacity: 0; visibility: hidden; pointer-events: none; background: rgb(14 22 37 / 48%); transition: opacity 160ms ease, visibility 160ms; }
  body.sidebar-open .app-layout .sidebar-overlay { opacity: 1; visibility: visible; pointer-events: auto; transition-duration: 220ms; }
  .app-layout .sidebar-header .sidebar-close { color: var(--crm-shell-ink); }
  .app-layout .header { left: 0 !important; width: 100% !important; }
  .app-layout .main-content { margin-left: 0 !important; }
}
@media (max-width: 639px) {
  .app-layout .content-area { padding: 16px; }
  .app-layout .header { padding-inline: 12px; gap: 8px; }
  .app-layout .header-left { gap: 8px; }
  .app-layout .header-logo { gap: 6px; font-size: 14px; }
  .app-layout .header-logo-mark { display: none; }
  .app-layout .sidebar-toggle { order: -1; flex: 0 0 44px; }
  .app-layout .header-right { flex-shrink: 0; }
}
@media (min-width: 1200px) {
  body.sidebar-collapsed .crm-footer-branding { display: none; }
}

@media (max-width: 1199px) { .app-layout .header-search { display: none; } }
@media (max-width: 767px) { .app-layout .header-context { display: none; } }
