/* ═══════════════════════════════════════════════════════════════════════════
   CallAI — Основные стили
   Тёмная тема, сине-фиолетовый акцент.

   Этот файл отвечает за внешний вид всего приложения CallAI.
   Все цвета, отступы, размеры шрифтов и анимации собраны здесь.
   ═══════════════════════════════════════════════════════════════════════════ */

/* ─── Переменные ─────────────────────────────────────────────────── */
/*
   :root — псевдокласс, который ссылается на корневой элемент <html>.
   CSS-переменные (custom properties), объявленные здесь, доступны
   во всём документе. Это удобнее, чем повторять одни и те же значения.

   Преимущества подхода:
   — централизованное управление цветовой схемой;
   — достаточно поменять значение в одном месте, чтобы обновить
     все компоненты;
   — можно легко реализовать переключение тем (пока не используется).
*/
:root {
  /* ─── Фоны ──────────────────────────────────────────────────────── */
  --bg-deep: #0d0f1a;          /* Самый глубокий фон (body) — почти чёрный с синим отливом. */
  --bg-card: #14172b;          /* Фон карточек — чуть светлее, чтобы отделить от body. */
  --bg-card-hover: #1a1e3a;    /* Фон карточки при наведении — плавное осветление. */
  --bg-input: #0d0f1a;         /* Фон полей ввода — такой же, как body, для единства. */
  --bg-sidebar: #111324;       /* Фон боковой панели (сайдбара) — промежуточный тон. */
  --bg-panel: #131628;         /* Фон правой панели анализа — близок к bg-card. */

  /* ─── Границы ────────────────────────────────────────────────────── */
  --border: #252a4a;          /* Цвет рамок по умолчанию — тёмно-синий. */
  --border-light: #2a2f52;    /* Чуть светлее — для полей ввода и тонких разделителей. */
  --border-hover: #3a3f6a;    /* Рамка при наведении — увеличиваем яркость, давая обратную связь. */

  /* ─── Текст ──────────────────────────────────────────────────────── */
  --text-primary: #c8cce0;    /* Основной текст — светло-серый с голубизной, чтобы не резал глаза. */
  --text-secondary: #8e94b8;  /* Второстепенный текст — для подписей, меток. */
  --text-muted: #6a70a0;      /* Ещё более блёклый — для подсказок, placeholder'ов. */
  --text-bright: #e0e4ff;     /* Яркий текст — для заголовков, чтобы акцентировать внимание. */

  /* ─── Акцент (accent) ────────────────────────────────────────────── */
  --accent: #7c8cf0;             /* Основной акцентный цвет — сине-фиолетовый. */
  --accent-light: #9aa8ff;       /* Светлая версия — для подсветки активных элементов. */
  --accent-gradient: linear-gradient(135deg, #5a6ae0, #7c5ce0);
     /* Градиент для кнопок и важных элементов.
        Начинается с более синего тона, заканчивается фиолетовым.
        Угол 135° даёт диагональный переход, который выглядит современно. */

  /* ─── Состояния: успех/ошибка/предупреждение ─────────────────────── */
  --green: #7cd4a0;           /* Зелёный — сигнал успеха, готовности. Мягкий, не кричащий. */
  --green-bg: #0e2a1e;        /* Фон для зелёных блоков — тёмно-зелёный, чтобы не слепить. */
  --green-border: #1a4a30;    /* Рамка зелёных блоков — на тон светлее фона. */

  --red: #e07c7c;             /* Красный — для ошибок. Приглушённый оттенок. */
  --red-bg: #2a0e1e;          /* Фон для сообщений об ошибке — тёмно-бордовый. */
  --red-border: #4a1a30;      /* Рамка для блока ошибки. */

  --yellow: #d4b07c;          /* Жёлтый — предупреждение или ожидание. Тёплый оттенок. */
  --yellow-bg: #2a240e;       /* Фон для предупреждений. */
  --yellow-border: #4a3a1a;   /* Рамка для предупреждений. */

  --blue: #7c8cf0;            /* Синий (дублирует accent) — для индикации загрузки/обработки. */
  --blue-bg: #0e1a2a;         /* Фон для синих индикаторов. */

  /* ─── Скругления ──────────────────────────────────────────────────── */
  --radius: 8px;              /* Стандартное скругление углов — для карточек, модалок. */
  --radius-sm: 4px;           /* Малое скругление — для кнопок, полей ввода, мелких блоков. */

  /* ─── Тени ────────────────────────────────────────────────────────── */
  --shadow: 0 2px 8px rgba(0,0,0,0.3);
     /* Лёгкая тень — для карточек, чтобы создать эффект приподнятости. */
  --shadow-lg: 0 4px 24px rgba(0,0,0,0.4);
     /* Большая тень — для модальных окон, тостов. Чем выше z-index, тем глубже тень. */

  /* ─── Размеры макета ──────────────────────────────────────────────── */
  --sidebar-w: 240px;         /* Ширина левого сайдбара (навигация). */
  --panel-w: 320px;           /* Ширина правой панели (анализ). */
  --header-h: 56px;           /* Высота шапки (header). */
}

/* ─── Сброс и база ──────────────────────────────────────────────── */
/*
   *, *::before, *::after — универсальный селектор.
   box-sizing: border-box; — включает padding и border в ширину/высоту
   элемента. Это спасает от неприятных сюрпризов при вёрстке.
   Без этого свойства, если задать width: 100% и padding, элемент
   выйдет за пределы родителя.
*/
*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
html { font-size: 15px; }
/*
   body — основная «рамка» страницы.
   font-family: -apple-system, ... — системный стек шрифтов.
   Каждая ОС использует свой шрифт, но все они выглядят хорошо и
   загружаются мгновенно (не нужно скачивать шрифт с сервера).
   background: var(--bg-deep) — тёмный фон на всю высоту страницы.
   min-height: 100vh — гарантирует, что фон тянется на весь экран,
   даже если контента мало.
   display: flex; flex-direction: column; — чтобы footer (если есть)
   прижимался к низу, а main растягивался.
*/
body {
  font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;
  background: var(--bg-deep);
  color: var(--text-primary);
  min-height: 100vh;
  display: flex;
  flex-direction: column;
}
/*
   <a> — стандартные ссылки: акцентный цвет, без подчёркивания по умолчанию.
   transition: color 0.15s — плавное изменение цвета при наведении.
   Короткая длительность (0.15s) делает интерфейс отзывчивым, но не «задумчивым».
*/
a { color: var(--accent); text-decoration: none; transition: color 0.15s; }
a:hover { color: var(--accent-light); text-decoration: underline; }

/* ─── Скроллбар ─────────────────────────────────────────────────── */
/*
   ::-webkit-scrollbar — псевдоэлемент для стилизации скроллбара
   в браузерах на WebKit (Chrome, Safari, Opera, новый Edge).

   Важно: это нестандартное свойство. В Firefox оно не работает
   (там можно использовать scrollbar-width: thin).
   Для улучшения кросc-браузерности следовало бы добавить и
   Firefox-правила, но в рамках проекта пока обходятся WebKit.
   width: 6px — тонкий скроллбар, чтобы не красть место.
*/
::-webkit-scrollbar { width: 6px; height: 6px; }
::-webkit-scrollbar-track { background: transparent; }
::-webkit-scrollbar-thumb { background: var(--border); border-radius: 3px; }
::-webkit-scrollbar-thumb:hover { background: var(--border-hover); }

/* ─── Анимации ──────────────────────────────────────────────────── */
/*
   @keyframes — объявление анимации, которую потом можно применить
   через свойство animation.

   fadeIn — появление элемента сдвигом снизу.
   Полезно для карточек, модалок, новых элементов в списке.
*/
@keyframes fadeIn {
  from { opacity: 0; transform: translateY(8px); }
  to { opacity: 1; transform: translateY(0); }
}
/*
   slideIn — появление сдвигом слева.
   Используется для боковых панелей или элементов, которые должны
   «выезжать» сбоку.
*/
@keyframes slideIn {
  from { opacity: 0; transform: translateX(-8px); }
  to { opacity: 1; transform: translateX(0); }
}
/*
   pulse — пульсация: плавное изменение прозрачности.
   Применяется для индикаторов загрузки (например, статус TRANSCRIBING).
   infinite — анимация повторяется бесконечно.
*/
@keyframes pulse {
  0%, 100% { opacity: 1; }
  50% { opacity: 0.5; }
}
/*
   spin — вращение для спиннера (индикатора загрузки).
   360deg = полный оборот. Без ключевого слова from начало = 0deg.
*/
@keyframes spin {
  to { transform: rotate(360deg); }
}
/*
   toastIn — появление тоста (всплывающего уведомления).
   Сдвиг справа (translateX(100%) — элемент за пределами экрана).
   Благодаря этому тосты «выезжают» из-за правого края.
*/
@keyframes toastIn {
  from { opacity: 0; transform: translateX(100%); }
  to { opacity: 1; transform: translateX(0); }
}
/*
   toastOut — обратная анимация: тост уезжает вправо и исчезает.
   Применяется перед удалением элемента из DOM.
*/
@keyframes toastOut {
  from { opacity: 1; transform: translateX(0); }
  to { opacity: 0; transform: translateX(100%); }
}

/*
   Вспомогательные классы для быстрого применения анимации.
   .fade-in — добавить любому элементу, и он плавно появится.
   .slide-in — для появления со сдвигом.
*/
.fade-in { animation: fadeIn 0.3s ease-out; }
.slide-in { animation: slideIn 0.2s ease-out; }

/* ─── Header ────────────────────────────────────────────────────── */
/*
   header — шапка приложения, которая прилипает к верху (sticky).
   background: градиент с плавным переходом от bg-card к bg-card-hover
   создаёт лёгкий эффект глубины.

   border-bottom: 1px solid var(--border) — отделяет шапку от содержимого.

   flex-shrink: 0 — запрещаем шапке сжиматься, если места мало.

   position: sticky; top: 0; — шапка «прилипает» к верхнему краю окна
   при скролле. z-index: 100 — чтобы шапка перекрывала контент.
*/
header {
  background: linear-gradient(135deg, var(--bg-card) 0%, var(--bg-card-hover) 100%);
  border-bottom: 1px solid var(--border);
  padding: 0 1.5rem;
  display: flex;
  align-items: center;
  justify-content: space-between;
  height: var(--header-h);
  flex-shrink: 0;
  position: sticky;
  top: 0;
  z-index: 100;
}
/*
   .logo — логотип слева в шапке.
   font-weight: 700 — жирное начертание для названия.
   letter-spacing: 0.02em — небольшой разреженный текст выглядит
   более «воздушным» и современным.
   gap: 0.5rem — отступ между иконкой и текстом.
*/
header .logo {
  font-size: 1.15rem;
  font-weight: 700;
  color: var(--accent-light);
  letter-spacing: 0.02em;
  display: flex;
  align-items: center;
  gap: 0.5rem;
}
header .logo svg { width: 22px; height: 22px; }
/*
   nav — контейнер навигационных ссылок и кнопок справа.
   display: flex; align-items: center; — выравнивание по центру по вертикали.
   gap: 1rem — равномерный отступ между элементами.
*/
header nav { display: flex; align-items: center; gap: 1rem; }
header nav a, header nav span {
  font-size: 0.88rem;
  color: var(--text-secondary);
  white-space: nowrap;       /* Запрещаем перенос текста ссылок. */
  display: inline-flex;
  align-items: center;
  gap: 0.35rem;              /* Между иконкой и текстом. */
}
header nav a:hover { color: var(--text-primary); text-decoration: none; }
header nav a svg, header nav button svg { width: 16px; height: 16px; }
/*
   .btn-logout — кнопка выхода в шапке.
   Выглядит как второстепенная кнопка: прозрачный фон, рамка.
   Чтобы не перетягивала внимание на себя, цвет текста — text-secondary.
*/
.btn-logout {
  background: none;
  border: 1px solid var(--border-hover);
  color: var(--text-secondary);
  padding: 0.3rem 0.85rem;
  border-radius: var(--radius-sm);
  cursor: pointer;
  font-size: 0.82rem;
  display: flex;
  align-items: center;
  gap: 0.35rem;
  transition: border-color 0.15s, color 0.15s;
}
.btn-logout:hover { border-color: var(--accent); color: var(--text-primary); }
.btn-logout svg { width: 14px; height: 14px; }

/* ─── Layout ═─────────────────────────────────────────────────────── */
/*
   main — основной контент страницы.
   flex: 1 — растягивается на всё свободное место (если шапка
   и возможный футер не мешают).

   max-width: 1200px — ограничиваем ширину, чтобы на очень широких
   экранах текст не растягивался в бесконечную строку.
   margin: 0 auto — центрирование по горизонтали.
*/
main {
  flex: 1;
  padding: 1.5rem;
  max-width: 1200px;
  width: 100%;
  margin: 0 auto;
}

/* Layout для workspace (detail page) */
/*
   .workspace-layout — трёхколоночная сетка для страницы детального
   просмотра звонка/воркспейса.

   grid-template-columns:
     var(--sidebar-w) — левая колонка (навигация / список),
     1fr — средняя (основной контент),
     var(--panel-w) — правая (панель анализа).

   Такая схема типична для «email-like» интерфейсов.
   align-items: start — чтобы колонки не растягивались на всю высоту
   друг друга; каждая колонка начинается от своего верха.
*/
.workspace-layout {
  display: grid;
  grid-template-columns: var(--sidebar-w) 1fr var(--panel-w);
  gap: 1.25rem;
  align-items: start;
}
/*
   .workspace-sidebar — левая колонка.
   position: sticky — липнет при скролле, чтобы навигация всегда была
   перед глазами. top: calc(var(--header-h) + 1.5rem) — отступ от верха
   с учётом шапки и паддинга main.

   max-height: ... overflow-y: auto — если контента много, появляется
   внутренний скролл, но колонка не уходит за пределы экрана.
*/
.workspace-sidebar {
  position: sticky;
  top: calc(var(--header-h) + 1.5rem);
  max-height: calc(100vh - var(--header-h) - 3rem);
  overflow-y: auto;
}
/*
   .workspace-main — центральная колонка.
   min-width: 0 — важное свойство для grid-элемента.
   Без него текст или широкая таблица могут «продавить» сетку
   и выйти за пределы колонки.
*/
.workspace-main {
  min-width: 0;
}
/*
   .workspace-panel — правая колонка.
   Аналогично левой: sticky, с ограничением по высоте.
*/
.workspace-panel {
  position: sticky;
  top: calc(var(--header-h) + 1.5rem);
  max-height: calc(100vh - var(--header-h) - 3rem);
  overflow-y: auto;
}

/* ─── Карточки ──────────────────────────────────────────────────── */
/*
   .card — универсальный компонент-карточка.
   Используется повсеместно: для списка звонков, секций настроек и т.д.

   background: var(--bg-card) — чуть светлее фона body.
   border: 1px solid var(--border) — тонкая рамка для отделения.
   animation: fadeIn — при появлении карточка плавно выезжает снизу.
*/
.card {
  background: var(--bg-card);
  border: 1px solid var(--border);
  border-radius: var(--radius);
  padding: 1.25rem;
  margin-bottom: 1rem;
  animation: fadeIn 0.3s ease-out;
}
/*
   .card-title — заголовок внутри карточки.
   display: flex; align-items: center; gap: 0.5rem — чтобы иконка
   и текст были на одной строке с отступом.
*/
.card-title {
  font-size: 1rem;
  font-weight: 600;
  color: var(--text-bright);
  margin-bottom: 1rem;
  display: flex;
  align-items: center;
  gap: 0.5rem;
}
.card-title svg { width: 18px; height: 18px; flex-shrink: 0; color: var(--accent); }
/*
   .card-actions — контейнер для кнопок внизу карточки.
   margin-top: 1rem — отступ от содержимого карточки.
*/
.card-actions {
  display: flex;
  gap: 0.5rem;
  margin-top: 1rem;
}

/*
   .prompt-panel — панель для ввода промпта (запроса к AI).
   Стилизована как карточка, но с меньшим padding (1rem вместо 1.25).
*/
.prompt-panel {
  background: var(--bg-card);
  border: 1px solid var(--border);
  border-radius: var(--radius);
  padding: 1rem;
}
.prompt-panel label {
  display: block;              /* Чтобы label занимал всю строку. */
  margin-bottom: 0.5rem;
  font-size: 0.85rem;
  color: var(--text-secondary);
}
.prompt-panel textarea {
  background: var(--bg-input);
  color: var(--text-primary);
  border: 1px solid var(--border);
  border-radius: var(--radius-sm);
  padding: 0.6rem;
  width: 100%;
  font-family: inherit;        /* Наследуем шрифт от body. */
  font-size: 0.85rem;
  resize: vertical;            /* Пользователь может менять высоту, но не ширину. */
  line-height: 1.5;            /* Межстрочный интервал для лучшей читаемости. */
}
.prompt-panel textarea:focus {
  outline: none;               /* Убираем стандартный браузерный outline. */
  border-color: var(--accent); /* Вместо outline — подсветка рамки акцентным цветом. */
}

/* ─── Кнопки ────────────────────────────────────────────────────── */
/*
   .btn — базовый класс для всех кнопок.
   display: inline-flex — чтобы иконка и текст были на одной линии.
   transition на нескольких свойствах — чтобы при наведении всё
   менялось плавно (фон, прозрачность, тень).

   white-space: nowrap — текст кнопки не переносится.
*/
.btn {
  display: inline-flex;
  align-items: center;
  gap: 0.4rem;
  padding: 0.55rem 1.2rem;
  border: none;
  border-radius: var(--radius-sm);
  font-size: 0.87rem;
  font-weight: 500;
  cursor: pointer;
  transition: background 0.15s, opacity 0.15s, box-shadow 0.15s;
  white-space: nowrap;
}
.btn svg { width: 16px; height: 16px; }
/*
   :disabled — встроенное состояние HTML-кнопок.
   opacity: 0.5 — визуально «серый», неактивный вид.
   cursor: not-allowed — меняем курсор, показывая, что нажать нельзя.
*/
.btn:disabled { opacity: 0.5; cursor: not-allowed; }
/*
   Модификаторы кнопок:
   .btn-primary — главное действие (градиент, яркий).
   .btn-secondary — второстепенное (рамка, прозрачный фон).
   .btn-danger — опасное действие (удаление).
   .btn-ghost — почти прозрачная, только текст.
   .btn-sm — уменьшенная версия.
   .btn-block — на всю ширину родителя.

   :hover:not(:disabled) — стили наведения применяются только
   если кнопка не заблокирована. Это правильный UX-подход.
*/
.btn-primary { background: var(--accent-gradient); color: #fff; }
.btn-primary:hover:not(:disabled) { box-shadow: 0 2px 12px rgba(90, 106, 224, 0.4); }
.btn-secondary { background: var(--bg-card-hover); color: var(--text-secondary); border: 1px solid var(--border-light); }
.btn-secondary:hover:not(:disabled) { background: var(--border); color: var(--text-primary); }
.btn-danger { background: var(--red-bg); color: var(--red); border: 1px solid var(--red-border); }
.btn-danger:hover:not(:disabled) { background: #3a1a2a; }
.btn-ghost { background: transparent; color: var(--text-secondary); padding: 0.4rem 0.6rem; }
.btn-ghost:hover:not(:disabled) { color: var(--text-primary); background: rgba(255,255,255,0.05); }
.btn-sm { padding: 0.35rem 0.7rem; font-size: 0.8rem; }
.btn-sm svg { width: 14px; height: 14px; }
.btn-block { width: 100%; justify-content: center; }

/* ─── Спиннер ───────────────────────────────────────────────────── */
/*
   .spinner — круглый индикатор загрузки.
   Создаётся из бордера: у трёх сторон цвет приглушённый (border-light),
   у верхней — акцентный. Вращение через animation: spin.
   Это классический трюк для создания CSS-спиннера без картинок.
*/
.spinner {
  display: inline-block;
  width: 16px;
  height: 16px;
  border: 2px solid var(--border-light);
  border-top-color: var(--accent);
  border-radius: 50%;
  animation: spin 0.6s linear infinite;
}
.spinner-lg { width: 24px; height: 24px; border-width: 3px; }
.spinner-white { border-color: rgba(255,255,255,0.3); border-top-color: #fff; }

/* ─── Формы ─────────────────────────────────────────────────────── */
.form-group { margin-bottom: 1rem; }
.form-group label {
  display: block;
  font-size: 0.82rem;
  color: var(--text-secondary);
  margin-bottom: 0.3rem;       /* Небольшой отступ перед полем. */
}
/*
   Стили для <input>, <textarea>, <select> внутри .form-group.
   Все три типа объединены в один селектор, чтобы не повторять код.
   width: 100% — поле занимает всю ширину родителя.
   border: 1px solid var(--border-light) — тонкая рамка.
   transition: border-color 0.15s — плавная подсветка при фокусе.
*/
.form-group input, .form-group textarea, .form-group select {
  width: 100%;
  padding: 0.55rem 0.7rem;
  background: var(--bg-input);
  border: 1px solid var(--border-light);
  border-radius: var(--radius-sm);
  color: var(--text-primary);
  font-size: 0.92rem;
  font-family: inherit;
  transition: border-color 0.15s;
}
.form-group input:focus, .form-group textarea:focus, .form-group select:focus {
  outline: none;
  border-color: var(--accent);
}
.form-group textarea { min-height: 100px; resize: vertical; }
.form-group .field-error { border-color: var(--red); }
.form-error { color: var(--red); font-size: 0.78rem; margin-top: 0.25rem; }

/* Password toggle */
/*
   .password-wrap — обёртка вокруг поля пароля.
   position: relative — чтобы абсолютно позиционировать кнопку-глазик.
*/
.password-wrap { position: relative; }
.password-wrap input { padding-right: 2.5rem; } /* Место для кнопки переключения. */

.password-toggle {
  position: absolute;
  right: 0.5rem;
  top: 50%;
  transform: translateY(-50%);   /* Центрирование по вертикали. */
  background: none;
  border: none;
  color: var(--text-muted);
  cursor: pointer;
  padding: 0.25rem;
  display: flex;
}
.password-toggle:hover { color: var(--text-primary); }
.password-toggle svg { width: 18px; height: 18px; }

/* ─── Таблицы ───────────────────────────────────────────────────── */
/*
   .table-wrap — обёртка для горизонтального скролла таблицы.
   overflow-x: auto — если таблица шире экрана, появляется
   горизонтальный скролл. Это важно для таблиц с множеством колонок.
*/
.table-wrap { overflow-x: auto; }
table { width: 100%; border-collapse: collapse; }
/*
   thead — «липкая» шапка таблицы.
   При вертикальном скролле таблицы заголовки остаются видны.
   z-index: 1 — чтобы шапка перекрывала ячейки body.
*/
thead { position: sticky; top: 0; z-index: 1; }
/*
   th — ячейка-заголовок.
   text-transform: uppercase — заголовки заглавными.
   letter-spacing: 0.05em — разреженный текст.
   cursor: pointer — подсказывает, что по заголовку можно кликнуть
   (для сортировки).
   user-select: none — запрещаем выделение текста при многократном клике.
   background: var(--bg-card) — чтобы при sticky-скролле контент
   не просвечивал сквозь заголовок.
*/
th {
  text-align: left;
  padding: 0.65rem 0.5rem;
  border-bottom: 2px solid var(--border);
  color: var(--text-muted);
  font-weight: 500;
  font-size: 0.78rem;
  text-transform: uppercase;
  letter-spacing: 0.05em;
  cursor: pointer;
  user-select: none;
  white-space: nowrap;
  background: var(--bg-card);
}
th:hover { color: var(--text-secondary); }
th svg { width: 12px; height: 12px; vertical-align: middle; margin-left: 0.2rem; }
td {
  padding: 0.65rem 0.5rem;
  border-bottom: 1px solid var(--border);
  font-size: 0.88rem;
  color: var(--text-primary);
  transition: background 0.12s;
}
tr:last-child td { border-bottom: none; }      /* Последняя строка — без разделителя. */
tr:nth-child(even) td { background: rgba(124, 140, 240, 0.03); } /* Зебра — чередование фона. */
tr.clickable { cursor: pointer; }
tr.clickable:hover td { background: rgba(124, 140, 240, 0.08); } /* Подсветка строки при наведении. */
tr.selected td { background: rgba(124, 140, 240, 0.08); }        /* Выбранная строка. */

/* ─── Чекбокс в таблице ─────────────────────────────────────────── */
/*
   .cb-cell — ячейка с чекбоксом, фиксированной ширины.
   accent-color: var(--accent) — окрашивает чекбокс в акцентный цвет.
   Это современное CSS-свойство. В старых браузерах чекбокс будет
   стандартного цвета, но функциональность не пострадает.
*/
.cb-cell { width: 36px; text-align: center; }
.cb-cell input[type="checkbox"] {
  width: 16px; height: 16px;
  accent-color: var(--accent);
  cursor: pointer;
}

/* ─── Бейджи и статусы ──────────────────────────────────────────── */
/*
   .badge — компактный индикатор (статус, тег).
   border-radius: 12px — скруглённые края (пилюля).
   ::before — псевдоэлемент для цветной точки слева от текста.
   flex-shrink: 0 — точка не сжимается.
*/
.badge {
  display: inline-flex;
  align-items: center;
  gap: 0.35rem;
  padding: 0.15rem 0.55rem;
  border-radius: 12px;
  font-size: 0.73rem;
  font-weight: 500;
  background: var(--bg-card-hover);
  color: var(--text-secondary);
  border: 1px solid var(--border-light);
}
.badge::before {
  content: "";
  width: 7px;
  height: 7px;
  border-radius: 50%;
  flex-shrink: 0;
}

/* Статусы звонков */
/*
   Каждый статус представлен классом .st-{ИМЯ}.
   Цвет текста и точки меняется в зависимости от статуса:
   - UPLOADED / TRANSCRIBING — синий (идёт процесс).
   - TRANSCRIBED / DONE — зелёный (успешно).
   - READY_FOR_ANALYSIS / ANALYZING — жёлтый (ожидание/в работе).
   - ERROR — красный.

   Для статусов с анимацией (TRANSCRIBING, ANALYZING) добавлен
   pulse — чтобы привлечь внимание пользователя к активному процессу.
*/
.st-UPLOADED { color: var(--blue); }
.st-UPLOADED::before { background: var(--blue); }
.st-TRANSCRIBING { color: var(--blue); }
.st-TRANSCRIBING::before { background: var(--blue); animation: pulse 1.5s ease-in-out infinite; }
.st-TRANSCRIBED { color: var(--green); }
.st-TRANSCRIBED::before { background: var(--green); }
.st-READY_FOR_ANALYSIS { color: var(--yellow); }
.st-READY_FOR_ANALYSIS::before { background: var(--yellow); }
.st-ANALYZING { color: var(--yellow); }
.st-ANALYZING::before { background: var(--yellow); animation: pulse 1.5s ease-in-out infinite; }
.st-DONE { color: var(--green); }
.st-DONE::before { background: var(--green); }
.st-ERROR { color: var(--red); }
.st-ERROR::before { background: var(--red); }

/* ─── Timeline статусов ─────────────────────────────────────────── */
/*
   .status-timeline — горизонтальная «дорожка» статусов звонка.
   Отображает последовательность этапов обработки: UPLOADED → TRANSCRIBING → ...

   flex-wrap: nowrap — элементы не переносятся на новую строку.
   overflow-x: auto — если не влезают, появляется горизонтальный скролл.
*/
.status-timeline {
  display: flex;
  align-items: center;
  gap: 0.25rem;
  padding: 0.75rem 0;
  margin-bottom: 0.5rem;
  flex-wrap: nowrap;
  overflow-x: auto;
}
.status-step {
  display: flex;
  align-items: center;
  gap: 0.35rem;
  font-size: 0.75rem;
  color: var(--text-muted);
  white-space: nowrap;
}
/*
   .dot — точка-индикатор этапа.
   По умолчанию серая (недостигнутый этап).
*/
.status-step .dot {
  width: 10px; height: 10px;
  border-radius: 50%;
  background: var(--border-light);
  flex-shrink: 0;
}
.status-step.active .dot { background: var(--accent); box-shadow: 0 0 6px rgba(124, 140, 240, 0.5); }
.status-step.done .dot { background: var(--green); }
.status-step.done { color: var(--green); }
.status-step.error .dot { background: var(--red); }
.status-step.error { color: var(--red); }
/*
   .connector — линия-соединитель между точками.
   width: 24px — короткая перемычка между этапами.
   При active или done — меняет цвет (см. соседний селектор).
*/
.status-step .connector {
  width: 24px; height: 2px;
  background: var(--border-light);
  flex-shrink: 0;
}
.status-step.done + .status-step .connector { background: var(--green); }

/* ─── Аудиоплеер ────────────────────────────────────────────────── */
/*
   .audio-player-wrap — блок встроенного аудиоплеера.
   flex-расположение: кнопка play, прогресс-бар, время.
*/
.audio-player-wrap {
  display: flex;
  align-items: center;
  gap: 0.75rem;
  padding: 0.75rem;
  background: var(--bg-input);
  border: 1px solid var(--border);
  border-radius: var(--radius);
}
/*
   .play-btn — круглая кнопка воспроизведения.
   border-radius: 50% — делает квадрат кругом.
   background: var(--accent-gradient) — привлекает внимание.
   flex-shrink: 0 — кнопка не сжимается.
*/
.audio-player-wrap .play-btn {
  width: 40px; height: 40px;
  border-radius: 50%;
  border: none;
  background: var(--accent-gradient);
  color: #fff;
  cursor: pointer;
  display: flex;
  align-items: center;
  justify-content: center;
  flex-shrink: 0;
  transition: box-shadow 0.15s;
}
.audio-player-wrap .play-btn:hover { box-shadow: 0 2px 12px rgba(90, 106, 224, 0.5); }
.audio-player-wrap .play-btn svg { width: 20px; height: 20px; }
.audio-player-wrap .progress-area { flex: 1; min-width: 0; }
/*
   <progress> — нативный HTML-элемент прогресс-бара.
   appearance: none — сбрасываем стандартное оформление браузера,
   чтобы стилизовать через ::-webkit-progress-bar / ::-moz-progress-bar.

   Внимание: у <progress> сложная стилизация. Приходится отдельно
   указывать стили для WebKit (Chrome, Safari) и Firefox.
*/
.audio-player-wrap progress {
  width: 100%;
  height: 6px;
  appearance: none;
  border: none;
  border-radius: 3px;
  background: var(--border);
  cursor: pointer;
}
.audio-player-wrap progress::-webkit-progress-bar { background: var(--border); border-radius: 3px; }
.audio-player-wrap progress::-webkit-progress-value { background: var(--accent); border-radius: 3px; }
.audio-player-wrap progress::-moz-progress-bar { background: var(--accent); border-radius: 3px; }
.audio-player-wrap .time {
  font-size: 0.78rem;
  color: var(--text-muted);
  font-variant-numeric: tabular-nums; /* Все цифры одной ширины (моноширинный эффект), чтобы время не «прыгало». */
  margin-top: 0.2rem;
}
/*
   .audio-meta — метаданные аудио (длительность, размер, формат).
   flex-wrap: wrap — если места мало, элементы переносятся.
   gap: 0.5rem 1.25rem — отступы между строками и колонками.
*/
.audio-meta {
  display: flex;
  flex-wrap: wrap;
  gap: 0.5rem 1.25rem;
  font-size: 0.82rem;
  color: var(--text-secondary);
  margin-top: 0.5rem;
}
.audio-meta span { display: flex; align-items: center; gap: 0.3rem; }
.audio-meta svg { width: 14px; height: 14px; color: var(--text-muted); }

/* ─── Транскрипт ────────────────────────────────────────────────── */
/*
   .transcript-box — блок с текстом расшифровки звонка.
   white-space: pre-wrap — сохраняет переносы строк, но при необходимости
   переносит длинные строки (в отличие от pre).
   word-wrap: break-word — ломает длинные слова, если они не влезают.
   max-height: 500px; overflow-y: auto — если расшифровка большая,
   появляется скролл внутри блока.
*/
.transcript-box {
  background: var(--bg-input);
  border: 1px solid var(--border);
  border-radius: var(--radius-sm);
  padding: 1rem;
  white-space: pre-wrap;
  word-wrap: break-word;
  font-size: 0.88rem;
  line-height: 1.7;
  color: var(--text-primary);
  max-height: 500px;
  overflow-y: auto;
}
/*
   diff-added / diff-removed — подсветка изменений в транскрипте
   (режим сравнения). Используется полупрозрачный фон, чтобы
   не перекрывать основной текст, а лишь акцентировать изменения.
*/
.transcript-box .diff-added { background: rgba(124, 212, 160, 0.15); color: var(--green); }
.transcript-box .diff-removed { background: rgba(224, 124, 124, 0.15); color: var(--red); text-decoration: line-through; }
.transcript-toolbar {
  display: flex;
  gap: 0.4rem;
  margin-bottom: 0.5rem;
  flex-wrap: wrap;
}

/* ─── Зона загрузки ─────────────────────────────────────────────── */
/*
   .upload-area — область для drag-and-drop загрузки файлов.
   border: 2px dashed var(--border) — пунктирная рамка намекает,
   что сюда можно перетащить файл.

   cursor: pointer — даже клик по области сработает как выбор файла
   (через скрытый input[type="file"]).

   transition: border-color 0.2s, background 0.2s — плавная реакция
   при наведении или при перетаскивании файла.
*/
.upload-area {
  border: 2px dashed var(--border);
  border-radius: var(--radius);
  padding: 2.5rem 1.5rem;
  text-align: center;
  cursor: pointer;
  transition: border-color 0.2s, background 0.2s;
  margin-bottom: 1rem;
}
.upload-area:hover { border-color: var(--accent); background: var(--bg-card-hover); }
.upload-area.drag-over { border-color: var(--accent); background: rgba(124, 140, 240, 0.08); }
.upload-area svg { width: 40px; height: 40px; color: var(--text-muted); margin-bottom: 0.5rem; }
.upload-area p { color: var(--text-muted); font-size: 0.88rem; }
/*
   .file-preview — панель с информацией о выбранном файле.
   display: none — скрыт, пока файл не выбран.
   При добавлении класса .has-file к .upload-area — показывается.
*/
.upload-area .file-preview {
  display: none;
  margin-top: 0.75rem;
  padding: 0.5rem 0.75rem;
  background: var(--bg-card-hover);
  border: 1px solid var(--border);
  border-radius: var(--radius-sm);
  font-size: 0.82rem;
}
.upload-area.has-file { border-color: var(--green); }
.upload-area.has-file .file-preview { display: flex; align-items: center; gap: 0.5rem; }
.upload-area input[type="file"] { display: none; } /* Скрываем нативный input, используем кастомную область. */

/* Progress bar */
/*
   progress-bar-wrap — контейнер для индикатора загрузки файла.
   display: none — скрыт, пока нет загрузки.
   .visible — показываем через JS.
*/
.progress-bar-wrap {
  display: none;
  margin-top: 0.5rem;
}
.progress-bar-wrap.visible { display: block; }
.progress-bar {
  width: 100%;
  height: 6px;
  appearance: none;
  border: none;
  border-radius: 3px;
  background: var(--border);
}
.progress-bar::-webkit-progress-bar { background: var(--border); border-radius: 3px; }
.progress-bar::-webkit-progress-value { background: var(--accent); border-radius: 3px; transition: width 0.2s; }
.progress-text { font-size: 0.78rem; color: var(--text-muted); margin-top: 0.25rem; }

/* ─── Пустое состояние ──────────────────────────────────────────── */
/*
   .empty-state — отображается, когда нет данных (например, пустой список звонков).
   Центрируется текст и иконка. Большой padding (3rem) создаёт «воздух».
   Цвет — text-muted, чтобы не привлекать излишнего внимания.
*/
.empty-state {
  text-align: center;
  padding: 3rem 1rem;
  color: var(--text-muted);
}
.empty-state svg { width: 56px; height: 56px; color: var(--border-hover); margin-bottom: 0.75rem; }
.empty-state h3 { font-size: 1rem; font-weight: 500; color: var(--text-secondary); margin-bottom: 0.4rem; }
.empty-state p { font-size: 0.85rem; }

/* ─── Provider cards ─────────────────────────────────────────────── */
/*
   .providers-grid — сетка карточек AI-провайдеров.
   grid-template-columns: repeat(auto-fill, minmax(200px, 1fr))
   — auto-fill создаёт столько колонок, сколько влезает;
   — minmax(200px, 1fr) каждая колонка не уже 200px, но может
     растянуться на всё свободное место.

   Это адаптивный паттерн без медиа-запросов.
*/
.providers-grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
  gap: 0.75rem;
  margin-bottom: 1rem;
}
.provider-card {
  padding: 1rem;
  border: 1px solid var(--border);
  border-radius: var(--radius);
  background: var(--bg-card);
  display: flex;
  flex-direction: column;
  gap: 0.4rem;
  transition: border-color 0.15s;
}
.provider-card:hover { border-color: var(--border-hover); }
.provider-card.active { border-color: var(--accent); }
.provider-card.clickable { cursor: pointer; }
.provider-card.clickable:hover { border-color: var(--accent); transform: translateY(-1px); box-shadow: 0 4px 16px rgba(0,0,0,0.3); }
.provider-card .provider-name {
  font-weight: 600;
  font-size: 0.9rem;
  color: var(--text-primary);
  display: flex;
  align-items: center;
  gap: 0.4rem;
}
.provider-card .provider-desc {
  font-size: 0.78rem;
  color: var(--text-muted);
}
.provider-card .provider-status {
  display: inline-flex;
  align-items: center;
  gap: 0.3rem;
  font-size: 0.75rem;
  padding: 0.15rem 0.5rem;
  border-radius: 10px;
}
.provider-status.online { background: var(--green-bg); color: var(--green); }
.provider-status.offline { background: var(--bg-card-hover); color: var(--text-muted); }

/* ─── Sidebar (navigation) ───────────────────────────────────────── */
/*
   .sidebar-nav — блок навигации слева (workspace).
   background: var(--bg-sidebar) — свой фон, отличный от карточек.
*/
.sidebar-nav {
  background: var(--bg-sidebar);
  border: 1px solid var(--border);
  border-radius: var(--radius);
  padding: 0.5rem;
}
.sidebar-nav .nav-title {
  font-size: 0.75rem;
  text-transform: uppercase;
  letter-spacing: 0.05em;
  color: var(--text-muted);
  padding: 0.5rem 0.65rem;
}
.sidebar-nav .nav-search {
  padding: 0.4rem 0.65rem;
  margin-bottom: 0.25rem;
}
.sidebar-nav .nav-search input {
  width: 100%;
  padding: 0.4rem 0.5rem;
  background: var(--bg-input);
  border: 1px solid var(--border-light);
  border-radius: var(--radius-sm);
  color: var(--text-primary);
  font-size: 0.8rem;
}
.sidebar-nav .nav-search input:focus { outline: none; border-color: var(--accent); }
/*
   .nav-item — пункт навигации (элемент списка).
   transition: background 0.12s — быстрая смена фона при наведении,
   чтобы интерфейс чувствовался «живым».
   text-decoration: none — сбрасываем подчёркивание у ссылок.
*/
.sidebar-nav .nav-item {
  display: flex;
  align-items: center;
  gap: 0.5rem;
  padding: 0.5rem 0.65rem;
  border-radius: var(--radius-sm);
  cursor: pointer;
  transition: background 0.12s;
  font-size: 0.82rem;
  color: var(--text-secondary);
  text-decoration: none;
}
.sidebar-nav .nav-item:hover { background: var(--bg-card-hover); color: var(--text-primary); text-decoration: none; }
.sidebar-nav .nav-item.active { background: rgba(124, 140, 240, 0.1); color: var(--accent-light); }
.sidebar-nav .nav-item .nav-status {
  width: 7px; height: 7px;
  border-radius: 50%;
  flex-shrink: 0;
}
/*
   .nav-name — название элемента.
   text-overflow: ellipsis — если имя длинное, оно обрезается
   с многоточием. Работает только вместе с overflow: hidden
   и white-space: nowrap.
*/
.sidebar-nav .nav-item .nav-name {
  flex: 1;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

/* ─── Панель анализа ────────────────────────────────────────────── */
/*
   .analysis-panel — правая панель с детальным анализом звонка.
   Фон — var(--bg-panel), чтобы визуально отличаться от карточек.
*/
.analysis-panel {
  background: var(--bg-panel);
  border: 1px solid var(--border);
  border-radius: var(--radius);
  padding: 1rem;
}
.analysis-panel .panel-title {
  font-size: 0.88rem;
  font-weight: 600;
  color: var(--text-bright);
  margin-bottom: 0.75rem;
  display: flex;
  align-items: center;
  gap: 0.4rem;
}
.analysis-panel .panel-title svg { width: 16px; height: 16px; color: var(--accent); }
/*
   .analysis-score — блок с общей оценкой (score).
   Текст по центру, крупный шрифт для числа.
*/
.analysis-score {
  text-align: center;
  padding: 1rem;
  margin-bottom: 0.75rem;
  background: var(--bg-card);
  border: 1px solid var(--border);
  border-radius: var(--radius);
}
.analysis-score .score-number {
  font-size: 2.5rem;
  font-weight: 700;
  color: var(--accent-light);
  line-height: 1;
}
.analysis-score .score-label {
  font-size: 0.78rem;
  color: var(--text-muted);
  margin-top: 0.25rem;
}
/*
   .criterion — строка отдельного критерия в анализе.
   display: flex; justify-content: space-between — название слева, оценка справа.
   border-bottom разделяет критерии.
*/
.criterion {
  display: flex;
  justify-content: space-between;
  align-items: center;
  padding: 0.5rem 0;
  border-bottom: 1px solid var(--border);
  font-size: 0.82rem;
}
.criterion:last-child { border-bottom: none; }
.criterion .c-name { color: var(--text-secondary); }
.criterion .c-score {
  font-weight: 600;
  color: var(--text-primary);
}
.criterion .c-score.high { color: var(--green); }
.criterion .c-score.mid { color: var(--yellow); }
.criterion .c-score.low { color: var(--red); }

/* ─── Toast ──────────────────────────────────────────────────────── */
/*
   .toast-container — фиксированный контейнер для тостов (всплывающих
   уведомлений). Расположен справа вверху, поверх всего контента.
   z-index: 1000 — выше всех остальных элементов.
   flex-direction: column — тосты складываются сверху вниз.
*/
.toast-container {
  position: fixed;
  top: calc(var(--header-h) + 0.75rem);
  right: 1rem;
  z-index: 1000;
  display: flex;
  flex-direction: column;
  gap: 0.5rem;
}
.toast {
  display: flex;
  align-items: center;
  gap: 0.6rem;
  padding: 0.7rem 1rem;
  border-radius: var(--radius-sm);
  background: var(--bg-card);
  border: 1px solid var(--border);
  box-shadow: var(--shadow-lg);     /* Большая тень, чтобы тост «парил» над интерфейсом. */
  font-size: 0.85rem;
  min-width: 280px;                 /* Минимальная ширина, чтобы тост не был слишком узким. */
  max-width: 420px;                 /* Максимальная — чтобы не растягивался на весь экран. */
  animation: toastIn 0.3s ease-out; /* Выезжает справа. */
}
.toast.removing { animation: toastOut 0.25s ease-in forwards; } /* forwards — сохраняет конечное состояние анимации. */
.toast svg { width: 18px; height: 18px; flex-shrink: 0; }
.toast-success { border-color: var(--green-border); }
.toast-success svg { color: var(--green); }
.toast-error { border-color: var(--red-border); }
.toast-error svg { color: var(--red); }
.toast-info { border-color: var(--border); }
.toast-info svg { color: var(--accent); }

/* ─── Блоки ошибок/успеха ───────────────────────────────────────── */
/*
   .error-box / .success-box — статичные блоки для отображения
   результатов операций (не путать с тостами — они не исчезают
   автоматически).

   Используют соответствующие цвета фона, рамки и текста.
   display: flex — для иконки и текста в одну строку.
*/
.error-box {
  background: var(--red-bg);
  border: 1px solid var(--red-border);
  border-radius: var(--radius-sm);
  padding: 0.7rem 1rem;
  color: var(--red);
  font-size: 0.82rem;
  margin-bottom: 1rem;
  display: flex;
  align-items: center;
  gap: 0.5rem;
}
.error-box svg { width: 16px; height: 16px; flex-shrink: 0; }
.success-box {
  background: var(--green-bg);
  border: 1px solid var(--green-border);
  border-radius: var(--radius-sm);
  padding: 0.7rem 1rem;
  color: var(--green);
  font-size: 0.82rem;
  margin-bottom: 1rem;
  display: flex;
  align-items: center;
  gap: 0.5rem;
}
.success-box svg { width: 16px; height: 16px; flex-shrink: 0; }

/* ─── Toolbar ────────────────────────────────────────────────────── */
/*
   .toolbar — панель инструментов над таблицей (поиск, массовые действия).
   flex-wrap: wrap — на узких экранах кнопки переносятся на новую строку.
*/
.toolbar {
  display: flex;
  align-items: center;
  gap: 0.5rem;
  margin-bottom: 1rem;
  flex-wrap: wrap;
}
.toolbar .search-input {
  flex: 1;                      /* Занимает всё доступное место. */
  min-width: 180px;             /* Но не уже 180px, иначе переносится. */
  padding: 0.45rem 0.65rem;
  background: var(--bg-input);
  border: 1px solid var(--border-light);
  border-radius: var(--radius-sm);
  color: var(--text-primary);
  font-size: 0.85rem;
}
.toolbar .search-input:focus { outline: none; border-color: var(--accent); }
.toolbar .batch-count {
  font-size: 0.82rem;
  color: var(--text-muted);
}

/* ─── Breadcrumbs ────────────────────────────────────────────────── */
/*
   .breadcrumbs — навигационная цепочка («хлебные крошки»).
   Маленький шрифт, muted-цвет, чтобы не отвлекать.
   .sep — разделитель между уровнями.
*/
.breadcrumbs {
  display: flex;
  align-items: center;
  gap: 0.35rem;
  font-size: 0.82rem;
  color: var(--text-muted);
  margin-bottom: 1rem;
}
.breadcrumbs a { color: var(--text-muted); }
.breadcrumbs a:hover { color: var(--accent); }
.breadcrumbs .sep { color: var(--border-hover); }

/* ─── Modal ──────────────────────────────────────────────────────── */
/*
   .modal-overlay — затемнение фона при открытии модального окна.
   position: fixed — перекрывает всю страницу независимо от скролла.
   inset: 0 — shorthand для top: 0; right: 0; bottom: 0; left: 0.
   background: rgba(0,0,0,0.6) — полупрозрачный чёрный overlay.
   z-index: 200 — выше контента, но ниже тостов (1000).
*/
.modal-overlay {
  position: fixed;
  inset: 0;
  background: rgba(0,0,0,0.6);
  display: none;
  align-items: center;
  justify-content: center;
  z-index: 200;
}
/*
   .modal — само модальное окно.
   width: 90%; max-width: 500px — занимает 90% экрана, но не шире 500px.
   max-height: 80vh — не выше 80% высоты окна, чтобы всегда был виден фон.
   overflow-y: auto — если контент не влезает, появляется внутренний скролл.
*/
.modal {
  background: var(--bg-card);
  border: 1px solid var(--border);
  border-radius: var(--radius);
  padding: 1.5rem;
  width: 90%;
  max-width: 500px;
  max-height: 80vh;
  overflow-y: auto;
  box-shadow: var(--shadow-lg);
}
.modal-title {
  font-size: 1rem;
  font-weight: 600;
  color: var(--text-bright);
  margin-bottom: 1rem;
}

/* ─── Хлебные крошки в workspace ───────────────────────────────── */
/*
   .workspace-breadcrumbs — отдельный вариант breadcrumbs для
   страницы workspace (свои отступы, своё поведение при hover).
*/
.workspace-breadcrumbs {
  display: flex;
  align-items: center;
  gap: 0.3rem;
  font-size: 0.82rem;
  color: var(--text-muted);
  margin-bottom: 0.75rem;
}
.workspace-breadcrumbs a { color: var(--text-muted); }
.workspace-breadcrumbs a:hover { color: var(--accent); text-decoration: none; }
.workspace-breadcrumbs .sep { color: var(--border-hover); }

/* ─── Анализ-плейсхолдеры ───────────────────────────────────────── */
/*
   .analysis-placeholder — заглушка для панели анализа, когда
   звонок ещё не выбран или анализ не проведён.
*/
.analysis-placeholder {
  text-align: center;
  padding: 2rem 1rem;
  color: var(--text-muted);
}
.analysis-placeholder svg { width: 36px; height: 36px; margin-bottom: 0.5rem; }
.analysis-placeholder p { font-size: 0.82rem; }

/* ─── Аналитика ──────────────────────────────────────────────────── */
/*
   .summary-bar — горизонтальная «полоса» сводки (high/mid/low).
   display: flex — три цветных сегмента внутри.
   border-radius: 8px — скругление контейнера скрывает острые углы
   у внутренних элементов (благодаря overflow: hidden).

   margin: 0.75rem 0 — отступы сверху и снизу.
*/
.summary-bar {
  height: 16px;
  border-radius: 8px;
  display: flex;
  overflow: hidden;
  margin: 0.75rem 0;
}
.summary-bar .bar-high { background: var(--green); }
.summary-bar .bar-mid { background: var(--yellow); }
.summary-bar .bar-low { background: var(--red); }
.summary-stats {
  display: flex;
  gap: 1.5rem;
  flex-wrap: wrap;
  font-size: 0.9rem;
}
.summary-stats .stat-item {
  display: flex;
  align-items: center;
  gap: 0.4rem;
}
.summary-stats .dot {
  width: 10px;
  height: 10px;
  border-radius: 50%;
  flex-shrink: 0;
}
.dot-high { background: var(--green); }
.dot-mid { background: var(--yellow); }
.dot-low { background: var(--red); }
/*
   .analytics-table — отдельная стилизация для таблицы аналитики.
   Отличается от обычной таблицы отступами и hover-эффектом на строках.
*/
.analytics-table {
  width: 100%;
  border-collapse: collapse;
  font-size: 0.85rem;
}
.analytics-table th {
  text-align: left;
  padding: 0.6rem 0.75rem;
  color: var(--text-muted);
  font-weight: 500;
  border-bottom: 1px solid var(--border);
  cursor: pointer;
  user-select: none;
  white-space: nowrap;
}
.analytics-table th:hover { color: var(--text-primary); }
.analytics-table td {
  padding: 0.6rem 0.75rem;
  border-bottom: 1px solid var(--border);
}
.analytics-table tr:last-child td { border-bottom: none; }
.analytics-table tr:hover td { background: var(--bg-card-hover); }
/*
   .score-badge — бейдж оценки (high/mid/low).
   border-radius: 999px — максимально скруглённая пилюля.
*/
.score-badge {
  display: inline-block;
  padding: 0.15rem 0.6rem;
  border-radius: 999px;
  font-weight: 600;
  font-size: 0.82rem;
}
.score-badge.high { background: var(--green-bg); color: var(--green); }
.score-badge.mid { background: var(--yellow-bg); color: var(--yellow); }
.score-badge.low { background: var(--red-bg); color: var(--red); }
.sort-icon {
  width: 12px;
  height: 12px;
  vertical-align: middle;
  margin-left: 0.25rem;
  color: var(--text-muted);
}

/* ─── Фильтр по датам ────────────────────────────────────────────── */
.date-filter {
  display: flex;
  align-items: center;
  gap: 0.5rem;
  flex-wrap: wrap;
  margin-bottom: 1rem;
}
.date-filter label {
  font-size: 0.82rem;
  color: var(--text-secondary);
}
/*
   input[type="date"] — нативный календарь HTML5.
   color-scheme: dark — подсказывает браузеру использовать тёмную
   тему для нативного выпадающего календаря. Без этого в Chrome
   календарь может быть светлым, что выбивается из общего стиля.
   Важно: это свойство поддерживается не всеми браузерами.
*/
input[type="date"] {
  color-scheme: dark;
}
.date-filter input[type="date"] {
  background: var(--bg-input);
  color: var(--text-primary);
  border: 1px solid var(--border);
  border-radius: var(--radius-sm);
  padding: 0.35rem 0.5rem;
  font-size: 0.85rem;
  font-family: inherit;
}
.date-filter input[type="date"]:focus {
  outline: none;
  border-color: var(--accent);
}

/* ─── Адаптивность ──────────────────────────────────────────────── */
/*
   Медиа-запросы — основа адаптивного дизайна.
   Все значения подобраны экспериментально под макет.

   1100px — переломный момент, когда трёхколоночный макет становится
   слишком узким. Переключаемся на одну колонку.
   sticky-элементы становятся static (обычное потоковое расположение),
   чтобы не мешать скроллу на мобильных устройствах.
*/
@media (max-width: 1100px) {
  .workspace-layout {
    grid-template-columns: 1fr;
  }
  .workspace-sidebar, .workspace-panel {
    position: static;
    max-height: none;
  }
}
/*
   820px — планшеты и небольшие ноутбуки.
   Сайдбар превращается в горизонтальную полосу (flex-wrap).
   Заголовок и поиск в сайдбаре скрываются — экономим место.
   Провайдеры показываются в две колонки.
*/
@media (max-width: 820px) {
  .sidebar-nav {
    display: flex;
    flex-wrap: wrap;
    gap: 0.25rem;
    padding: 0.5rem;
  }
  .sidebar-nav .nav-title { display: none; }
  .sidebar-nav .nav-search { display: none; }
  .sidebar-nav .nav-item { flex: 1 1 auto; min-width: 120px; }
  .providers-grid { grid-template-columns: 1fr 1fr; }
}
/*
   480px — мобильные устройства.
   Максимально упрощаем интерфейс:
   — уменьшаем отступы main и header;
   — скрываем текстовые подписи в навигации (только иконки);
   — провайдеры — в одну колонку;
   — аудиоплеер переносит элементы на новую строку;
   — карточки сжимаются;
   — модалка почти на всю ширину;
   — на скролле таблиц используем аппаратное ускорение
     (-webkit-overflow-scrolling: touch) для плавности на iOS.
*/
@media (max-width: 480px) {
  main { padding: 0.75rem; }
  header { padding: 0 0.75rem; }
  header nav span { display: none; }
  .providers-grid { grid-template-columns: 1fr; }
  .btn { font-size: 0.82rem; padding: 0.45rem 0.85rem; }
  .audio-player-wrap { flex-wrap: wrap; }
  .card { padding: 0.75rem; }
  .card-actions { flex-wrap: wrap; }
  .table-wrap { overflow-x: auto; -webkit-overflow-scrolling: touch; }
  .modal { width: 96%; max-width: none; max-height: 90vh; }
  .modal.modal-lg { width: 96%; }
  .modal-overlay { backdrop-filter: none; }
  .date-filter { flex-wrap: wrap; }
  .upload-area { padding: 1.5rem 1rem; }
  .upload-area p:first-of-type { font-size: 0.9rem; }
  header nav a { font-size: 0.78rem; }
  header nav { gap: 0.4rem; }
  .btn-logout { font-size: 0.78rem; padding: 0.3rem 0.5rem; }
  .card-title { font-size: 0.9rem; }
  .search-input { min-width: 100px; }
  .workspace-layout { grid-template-columns: 1fr; }
  .workspace-sidebar, .workspace-panel { position: static; max-height: none; }
}

/* ─── Скрытые строки таблицы (пагинация) ─────────────────────────── */
/*
   .paginated-row — строки таблицы, которые скрыты до момента пагинации.
   JS будет переключать display для нужных страниц.
*/
.paginated-row { display: none; }

/* ═══════════════════════════════════════════════════════════════════════════
   Modal (вторая версия — более современная, с дополнительной анимацией)
   ═══════════════════════════════════════════════════════════════════════════ */

/*
   Обратите внимание: .modal-overlay и .modal объявлены повторно.
   В CSS правила с одинаковым именем класса не переопределяются
   полностью — они сливаются. Но здесь фактически идёт перезапись
   некоторых свойств. Более правильным было бы объединить эти блоки,
   но в рамках текущего проекта они разделены для удобства поддержки
   (возможно, из разных компонентов или разработчиков).

   В этой версии:
   — overlay получает backdrop-filter: blur(4px) — размытие фона,
     что усиливает фокус на модалке (но может снижать производительность);
   — z-index: 1000 (здесь тосты и модалки пересекаются по приоритету);
   — display: none / .visible — управление через класс.
*/
.modal-overlay {
  position: fixed;
  top: 0; left: 0; right: 0; bottom: 0;
  background: rgba(0, 0, 0, 0.6);
  backdrop-filter: blur(4px);
  z-index: 1000;
  display: none;
  align-items: center;
  justify-content: center;
  animation: fadeIn 0.15s ease;
}
.modal-overlay.visible { display: flex; }

/*
   Здесь .modal вместо padding использует flex-структуру:
   .modal-header / .modal-body / .modal-footer.
   Это удобнее для сложного содержимого.
   border-radius: 14px — чуть больше скругление, чем у первой версии.
   box-shadow: 0 16px 48px ... — очень глубокая тень для эффекта «парения».
   animation: slideUp — модалка «выезжает» снизу вверх.
*/
.modal {
  background: var(--bg-card);
  border: 1px solid var(--border);
  border-radius: 14px;
  width: 90%;
  max-width: 480px;
  max-height: 80vh;
  display: flex;
  flex-direction: column;
  box-shadow: 0 16px 48px rgba(0,0,0,0.5);
  animation: slideUp 0.2s ease;
}

.modal-header {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 1rem 1.25rem;
  border-bottom: 1px solid var(--border);
}
.modal-header h3 {
  margin: 0;
  font-size: 1rem;
  color: var(--text-bright);
}

.modal-body {
  padding: 1.25rem;
  overflow-y: auto;
  flex: 1;
}

.modal-footer {
  display: flex;
  align-items: center;
  gap: 0.5rem;
  padding: 0.85rem 1.25rem;
  border-top: 1px solid var(--border);
  justify-content: flex-end;     /* Кнопки прижаты к правому краю. */
}

/*
   Повторное объявление @keyframes fadeIn — это проблема:
   если ключевые кадры совпадают по имени, то в CSS побеждает
   последнее объявление. Здесь fadeIn переопределён: убран translateY,
   осталась только прозрачность. Фактически, все анимации, ссылающиеся
   на fadeIn, будут использовать эту версию.
   Это потенциальный баг — нужно следить за уникальностью имён.
*/
@keyframes fadeIn {
  from { opacity: 0; }
  to { opacity: 1; }
}

@keyframes slideUp {
  from { transform: translateY(20px); opacity: 0; }
  to { transform: translateY(0); opacity: 1; }
}

/* ═══════════════════════════════════════════════════════════════════════════
   Profile / Settings
   ═══════════════════════════════════════════════════════════════════════════ */

/*
   .profile-page — страница профиля пользователя.
   max-width: 720px — чуть уже, чем основная ширина main,
   чтобы текст не растягивался.
*/
.profile-page {
  max-width: 720px;
  margin: 0 auto;
}

.profile-header {
  display: flex;
  align-items: center;
  gap: 1rem;
  margin-bottom: 1.5rem;
}

/*
   .profile-avatar — круглый аватар с градиентным фоном.
   border-radius: 50% — превращает квадрат в круг.
   Иконка пользователя (svg) белого цвета на градиенте.
*/
.profile-avatar {
  width: 56px;
  height: 56px;
  border-radius: 50%;
  background: var(--accent-gradient);
  display: flex;
  align-items: center;
  justify-content: center;
  flex-shrink: 0;
}
.profile-avatar svg {
  width: 28px;
  height: 28px;
  color: white;
}

.profile-header h1 {
  margin: 0;
  font-size: 1.3rem;
  color: var(--text-bright);
}
.profile-email {
  margin: 0;
  color: var(--text-muted);
  font-size: 0.88rem;
}

/*
   .settings-group — группа настроек на странице профиля.
   border: 1px solid var(--border) — рамка, как у карточки.
   background: var(--bg-deep) — самый тёмный фон, чтобы группа
   визуально отличалась от карточек.
   border-radius: 10px — чуть скруглённые углы.
*/
.settings-group {
  border: 1px solid var(--border);
  border-radius: 10px;
  padding: 1rem 1.25rem;
  margin-bottom: 1rem;
  background: var(--bg-deep);
}

.settings-group-title {
  display: flex;
  align-items: center;
  gap: 0.5rem;
  font-size: 0.95rem;
  font-weight: 600;
  color: var(--text-bright);
  margin-bottom: 0.75rem;
  padding-bottom: 0.5rem;
  border-bottom: 1px solid var(--border);
}
.settings-group-title svg {
  width: 18px;
  height: 18px;
  color: var(--accent);
}

.card-desc {
  color: var(--text-secondary);
  font-size: 0.88rem;
  margin: -0.5rem 0 1.25rem;    /* Отрицательный верхний отступ — «подтягивает» описание ближе к заголовку. */
}

/* ─── Увеличенная модалка (корзина) ────────────────────────────────── */
/*
   .modal.modal-lg — модификатор для широкой модалки (корзина с удалёнными звонками).
   max-width: 720px — шире стандартной модалки.
*/
.modal.modal-lg {
  max-width: 720px;
}
/*
   #trash-table — отдельная стилизация для таблицы корзины.
   Используется ID, так как таблица уникальна на странице.
   (Обычно лучше использовать классы, но в данном контексте ID допустим.)
*/
#trash-table {
  width: 100%;
  font-size: 0.85rem;
}
#trash-table th {
  text-align: left;
  padding: 0.5rem 0.4rem;
  color: var(--text-secondary);
  font-weight: 500;
  border-bottom: 1px solid var(--border);
  white-space: nowrap;
}
#trash-table td {
  padding: 0.45rem 0.4rem;
  border-bottom: 1px solid var(--border);
}
#trash-table .cb-cell {
  width: 32px;
}

/* ─── Кнопка инлайн-плеера в таблице ───────────────────────────────── */
/*
   .btn-play-inline — маленькая круглая кнопка воспроизведения
   прямо в строке таблицы.

   При наведении меняет цвет на зелёный, сигнализируя,
   что по клику начнётся воспроизведение.
   transition: 0.15s — без указания свойств применяется ко всем
   анимируемым (color, border-color).
*/
.btn-play-inline {
  width: 32px;
  height: 32px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  background: transparent;
  border: 1px solid var(--border);
  border-radius: 6px;
  color: var(--text-secondary);
  cursor: pointer;
  transition: 0.15s;
}
.btn-play-inline:hover {
  color: var(--green);
  border-color: var(--green);
}

/* ─── Модальное окно ──────────────────────────────────────────── */
.modal-overlay {
  position: fixed;
  top: 0; left: 0; right: 0; bottom: 0;
  background: rgba(0,0,0,0.6);
  align-items: center;
  justify-content: center;
  z-index: 1000;
}
.modal-content {
  background: var(--bg-card);
  border: 1px solid var(--border);
  border-radius: var(--radius);
  box-shadow: 0 8px 32px rgba(0,0,0,0.5);
  width: 90%;
  max-width: 500px;
  animation: modalFadeIn 0.15s ease-out;
}
@keyframes modalFadeIn {
  from { opacity: 0; transform: translateY(-10px); }
  to { opacity: 1; transform: translateY(0); }
}
.modal-header {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 0.75rem 1rem;
  border-bottom: 1px solid var(--border);
}
.modal-header h3 {
  margin: 0;
  font-size: 0.95rem;
  color: var(--text-bright);
}
.modal-close {
  background: none;
  border: none;
  color: var(--text-muted);
  font-size: 1.5rem;
  cursor: pointer;
  padding: 0;
  line-height: 1;
}
.modal-close:hover {
  color: var(--text-primary);
}
.modal-body {
  padding: 1rem;
}

/* ─── Формы авторизации (login / register) ─────────────────────── */
.auth-container {
  max-width: 380px;
  margin: 2rem auto;
}
.auth-container .card-title {
  margin-bottom: 0.75rem;
}
.auth-container .form-group {
  margin-bottom: 0.6rem;
}
.auth-container .form-group label {
  font-size: 0.82rem;
  margin-bottom: 0.25rem;
}
.auth-container input[type="email"],
.auth-container input[type="text"],
.auth-container input[type="password"] {
  padding: 0.5rem 0.65rem;
  font-size: 0.85rem;
}
.auth-container .btn-block {
  margin-top: 0.25rem;
}
.auth-link {
  text-align: center;
  font-size: 0.82rem;
  margin-top: 1rem;
  color: var(--text-secondary);
}
.auth-link a {
  color: var(--accent);
}

/* ─── Фильтр промптов ─────────────────────────────────────────── */
.prompt-filter-bar {
  margin-bottom: 1rem;
  padding: 0.6rem;
  background: rgba(124,140,240,0.04);
  border-radius: 6px;
  border: 1px solid var(--border);
}
.prompt-select {
  padding: 4px 8px;
  border: 1px solid var(--border);
  border-radius: 4px;
  background: var(--bg-card);
  color: var(--text-primary);
  font-size: 0.82rem;
  min-width: 280px;
  max-width: 100%;
}
