/* ============================================================
   Плавающий блок контактов — аналог блока T898 эталона
   (buh-360.ru, запись #rec2431462321).

   Механика — 1:1 с эталоном: круг 60×60 в правом нижнем углу,
   внутри скрытый чекбокс; клик по кругу раскрывает иконки вверх
   со ступенчатой задержкой. JS не нужен вовсе: эталонный
   t898_init() ничего, кроме показа блока, не делает.
   Чекбокс фокусируем, поэтому блок работает и с клавиатуры
   (Tab → Space), а доступное имя меняется с «показать» на «скрыть».

   Геометрия снята с живого сайта (обмер 13.09):
     десктоп  — bottom:50px, right:65px
     ≤960px   — bottom:10px, right:10px
     круг 60px, иконки 50px, шаг раскрытия 60px,
     белый кружок под иконкой 40px.

   Иконки — оригинальные файлы вендора, забранные с эталона
   (assets/img/fc-*.svg): пути, цвета и viewBox не тронуты.
   ============================================================ */

.float-contacts {
  position: relative;
}

/* Контейнер кнопки: fixed-бокс 60×60. Сам он прозрачен и кликов
   не ловит — кликабельны круг и раскрытые ссылки. Ссылки лежат
   внутри него, поэтому их система координат — кнопка, а не подвал. */
.float-contacts__btn {
  position: fixed;
  bottom: 50px;
  right: 65px;
  z-index: 1000;
  width: 60px;
  height: 60px;
  pointer-events: none;
}

/* Раскрытый блок должен перекрывать шапку и прочие fixed-элементы. */
.float-contacts__btn:has(.float-contacts__toggle:checked) { z-index: 10000; }

/* Чекбокс — источник состояния и единственный орган управления блоком.
   Визуально скрыт, но НЕ `display: none`: с `display: none` элемент
   выпадает из tab-порядка, и блок становится невозможно открыть с
   клавиатуры. Здесь он невидим, но фокусируем (Tab → Space).
   `pointer-events: none` — клик должен идти в круг-подпись (единый путь
   для мыши и тача, плюс на нём висит hover-тень). */
.float-contacts__toggle {
  position: absolute;
  inset: 0;
  margin: auto;
  width: 1px;
  height: 1px;
  opacity: 0;
  pointer-events: none;
}

/* Свой outline не нужен: 1×1 невидимый бокс обвёл бы фокусом точку в
   центре круга. Фокус переносим на сам круг — он и есть кнопка. */
.float-contacts__toggle:focus-visible { outline: none; }

.float-contacts__toggle:focus-visible + .float-contacts__circle {
  outline: 2px solid var(--red);
  outline-offset: 3px;
}

/* Доступное имя круга: «Показать контакты» в покое, «Скрыть контакты»
   в раскрытом состоянии — скринридер не должен слышать «показать»,
   когда блок уже открыт. Визуально текст скрыт (.sr-only). */
.float-contacts__name--close { display: none; }

.float-contacts__toggle:checked + .float-contacts__circle .float-contacts__name--open { display: none; }

.float-contacts__toggle:checked + .float-contacts__circle .float-contacts__name--close { display: inline; }

/* Видимый круг — он же переключатель. */
.float-contacts__circle {
  position: relative;
  z-index: 2;
  display: block;
  width: 60px;
  height: 60px;
  border-radius: 50%;
  background: var(--graphite);
  box-shadow: 0 0 20px 0 rgba(0, 0, 0, .3);
  overflow: hidden;
  cursor: pointer;
  pointer-events: all;
  transition: all .2s ease-in-out;
}

.float-contacts__circle:hover { box-shadow: 0 0 20px 0 rgba(0, 0, 0, .4); }

/* Глифы внутри круга: «написать» и крестик — оба по центру.
   Размеры заданы явно: у абспос-бокса с inset:0 ширина иначе
   растянулась бы на все 60px и `margin:auto` ничего не отцентрировал. */
.float-contacts__glyph {
  position: absolute;
  inset: 0;
  margin: auto;
  transition: all .3s ease-in-out;
}

.float-contacts__glyph svg { width: 100%; height: 100%; }

.float-contacts__glyph--chat { width: 35px; height: 32px; }

.float-contacts__glyph--close {
  width: 16px;
  height: 16px;
  opacity: 0;
  visibility: hidden;
  transform: scale(.1);
}

/* Раскрыто: круг белеет, «написать» уходит, крестик проявляется. */
.float-contacts__toggle:checked + .float-contacts__circle { background: var(--white); }

.float-contacts__toggle:checked + .float-contacts__circle .float-contacts__glyph--chat {
  opacity: 0;
  visibility: hidden;
  transform: scale(.1);
}

.float-contacts__toggle:checked + .float-contacts__circle .float-contacts__glyph--close {
  opacity: 1;
  visibility: visible;
  transform: scale(1);
}

/* Раскрытые иконки: лежат стопкой в габаритах круга и разъезжаются
   вверх на 135 / 255 / 375 % собственной высоты. */
.float-contacts__link {
  position: absolute;
  inset: 0;
  margin: auto;
  width: 50px;
  height: 50px;
  border-radius: 50%;
  box-shadow: 0 0 20px 0 rgba(0, 0, 0, .3);
  opacity: 0;
  visibility: hidden;
  pointer-events: all;
  transition: all .3s ease-in-out;
}

.float-contacts__link:hover { box-shadow: 0 0 20px 0 rgba(0, 0, 0, .4); }

.float-contacts__toggle:checked ~ .float-contacts__link {
  opacity: 1;
  visibility: visible;
}

.float-contacts__toggle:checked ~ .float-contacts__link:nth-of-type(1) { transition: all .2s ease-in-out; transform: translate(0, -135%); }
.float-contacts__toggle:checked ~ .float-contacts__link:nth-of-type(2) { transition: all .225s ease-in-out; transform: translate(0, -255%); }
.float-contacts__toggle:checked ~ .float-contacts__link:nth-of-type(3) { transition: all .25s ease-in-out; transform: translate(0, -375%); }

.float-contacts__badge {
  position: relative;
  display: block;
  width: 50px;
  height: 50px;
  transition: transform .2s ease-in-out;
}

/* Микрозум при наведении. Масштабируем бейдж, а не саму ссылку: у ссылки
   transform занят раскрытием (translate(0,-135%) и т.д.), а подпись-подсказка
   лежит внутри ссылки и при её масштабе отъезжала бы от иконки вместе со
   стрелкой. Здесь растёт только кружок с глифом — вокруг своего центра,
   соседние иконки не сдвигаются (шаг стопки 60px, запас есть). */
@media (hover: hover) {
  .float-contacts__link:hover .float-contacts__badge { transform: scale(1.08); }
}

/* Белый кружок под иконкой: сквозь него читаются вырезы в глифах
   (буквы VK, трубка в телефоне нарисованы «дырками»). */
.float-contacts__badge::before {
  content: '';
  position: absolute;
  top: 50%;
  left: 50%;
  z-index: -1;
  width: 40px;
  height: 40px;
  border-radius: 50%;
  background: var(--white);
  transform: translate(-50%, -50%);
}

/* Подпись — всплывает слева от иконки при наведении. */
.float-contacts__hint {
  position: absolute;
  top: 50%;
  right: 80px;
  padding: 9px 13px;
  border-radius: 3px;
  background: #292929;
  color: var(--white);
  font-family: var(--font);
  font-size: 15px;
  line-height: 1;
  white-space: nowrap;
  opacity: 0;
  transform: translateY(-50%);
  transition: all .1s linear;
  user-select: none;
  pointer-events: all;
}

.float-contacts__hint::after {
  content: '';
  position: absolute;
  top: 50%;
  right: -20px;
  width: 0;
  height: 0;
  border: solid transparent;
  border-width: 10px;
  border-left-color: #292929;
  transform: translateY(-50%);
}

.float-contacts__link:hover .float-contacts__hint { opacity: .85; }

@media screen and (max-width: 960px) {
  .float-contacts__btn {
    bottom: 10px;
    right: 10px;
  }

  /* На узком экране эталон уменьшает подпись и стрелку — иначе
     «Телефон» на 15px не влезает по ширине. */
  .float-contacts__hint { font-size: 12px; }

  .float-contacts__hint::after {
    right: -16px;
    border-width: 8px;
  }
}
