/* ═════ Sentos · Мелочи поверх всего: всплывающее сообщение ═════
   Перенесено из прототипа newfront/chats.css.
   Палитра и общие примитивы — в base.css и app.css. */

/* ─────────────────────── Всплывающее сообщение ─────────────────────── */

/* Сообщение приходит сверху и поверх всего - включая экран звонка
   (z-index 90), потому что чаще всего оно как раз про звонок. Внизу
   его закрывали поле ввода и панель записи, и «Звонок завершён»
   человек не видел. */
.toast {
  position: fixed;
  left: 50%;
  top: calc(12px + env(safe-area-inset-top));
  z-index: 100;
  padding: 10px 16px;
  border-radius: 999px;
  background: var(--text);
  color: var(--panel);
  font-size: 13px;
  opacity: 0;
  transform: translate(-50%, -12px);
  pointer-events: none;
  transition: opacity 200ms ease, transform 260ms cubic-bezier(0.22, 1, 0.36, 1);
}

.toast.show {
  opacity: 1;
  transform: translate(-50%, 0);
}

/* ═════ Служебные состояния ═════
   Классы ставит рабочий код на корневом элементе и на панелях.
   Без них человек не поймёт, что происходит. */

/* Клавиатура открыта: запас под полоску «домой» в этот момент не нужен —
   её всё равно закрывает клавиатура. Высоту приложения не трогаем:
   iOS двигает видимую область сам. */
.keyboard-open .composer {
  padding-bottom: 6px;
}

/* Свайп от края назад: пока палец ведёт, переходы отключены — иначе
   экран отстаёт от пальца. Класс стоит на самом экране, а не над ним:
   прежний селектор «.edge-swiping .chat» не находил ничего, и это не
   мешало, пока у экранов не было перехода сдвига. */
.chat.edge-swiping,
.profile.edge-swiping,
.edge-swiping .chat,
.edge-swiping .profile {
  transition: none !important;
}

/* Подтягивание списка вниз. Стрелка поворачивается по мере движения,
   а на отпускании крутится, пока идёт запрос. */
/* Высоту полосы ведёт палец: chat.js кладёт в --pull-distance то, на
   сколько вытянули список, уже с сопротивлением. Пока тянут, перехода
   нет — иначе полоса плелась бы за пальцем с отставанием. Отпустили —
   возвращается пружинкой, с лёгким перелётом: так движение читается
   упругим, а не схлопыванием. Раньше обе переменные из chat.js здесь
   никто не читал, и полоса просто прыгала на 38 px. */
.pull-refresh {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 8px;
  height: var(--pull-distance, 0px);
  overflow: hidden;
  color: var(--muted);
  font-size: 12px;
  transition:
    height 420ms cubic-bezier(0.34, 1.4, 0.64, 1),
    color 160ms ease;
}

.pull-refresh.is-pulling {
  transition: color 160ms ease;
}

/* Стрелка доворачивается по мере вытягивания: к порогу она встаёт
   вверх ногами — это и есть знак, что можно отпускать. */
.pull-refresh .icon {
  width: 16px;
  height: 16px;
  transform: rotate(var(--pull-rotation, 0deg));
}

.pull-refresh.done .icon { transform: none; }

.pull-refresh.ready,
.pull-refresh.done { color: var(--accent); }

.pull-refresh.refreshing .icon {
  animation: pull-spin 900ms linear infinite;
}

@keyframes pull-spin { to { transform: rotate(360deg); } }

/* Звонок свёрнут: экран разговора уходит, но приложение помнит, что он
   идёт, — плашка внизу остаётся видимой. Прячет экран сам call-ui.js,
   в два шага, чтобы уход был виден: правило display: none здесь
   обрывало бы движение на первом кадре. */
