/*!
 * inna-ivanova-demo — service-visual.css
 * Слоёный визуал hero страниц услуг: врач + парящие 3D-объекты.
 *
 * Анимируются только transform и opacity — они идут на GPU и не вызывают
 * reflow. Плавание медленное и бесконечное (это фон, а не реакция на действие),
 * появление — 280ms ease-out, в пределах правила «UI ≤ 300ms».
 *
 * @package inna-ivanova-demo
 */

.svc-visual { position: relative; }

.svc-visual__stage {
  position: relative;
  display: flex;
  justify-content: center;
  isolation: isolate;
}

/* Мягкое пятно за фигурой — объём без тяжёлых теней. */
.svc-visual__glow {
  position: absolute;
  inset: 6% 2% 8% 2%;
  z-index: -1;
  background: radial-gradient(58% 58% at 52% 42%, var(--c-brand-soft) 0%, rgba(234, 241, 254, 0) 72%);
  border-radius: 50% 50% 46% 54% / 54% 46% 54% 46%;
}

/* ---------- Портрет ---------- */
.svc-visual__portrait {
  position: relative;
  z-index: 2;
  display: block;
  width: 100%;
  max-width: 460px;
  height: auto;
  margin-inline: auto;
  filter: drop-shadow(0 28px 56px rgba(20, 40, 90, 0.16));
  /* Мягкое затухание низа — фигура не обрывается ровной линией (см. баг 25). */
  -webkit-mask-image: linear-gradient(to bottom, #000 84%, transparent 100%);
          mask-image: linear-gradient(to bottom, #000 84%, transparent 100%);
}

/* ---------- Парящие объекты ---------- */
.svc-visual__objects {
  position: absolute;
  inset: 0;
  z-index: 3;
  pointer-events: none;
}

.svc-obj {
  position: absolute;
  display: block;
  width: clamp(72px, 9vw, 132px);
  /* --svc-shift пишет JS (параллакс). Складываем его с трансформом появления
     здесь, в CSS, чтобы инлайновый стиль не перебивал transition. */
  --svc-shift: 0px;
  /* Появление: объекты «влетают» после портрета, каждый со своей задержкой. */
  opacity: 0;
  transform: translateY(calc(var(--svc-shift) + 14px)) scale(0.94);
  transition: opacity 0.28s cubic-bezier(0.23, 1, 0.32, 1),
              transform 0.28s cubic-bezier(0.23, 1, 0.32, 1);
}
.svc-visual.is-in .svc-obj { opacity: 1; transform: translateY(var(--svc-shift)) scale(1); }
.svc-visual.is-in .svc-obj--1 { transition-delay: 0.10s; }
.svc-visual.is-in .svc-obj--2 { transition-delay: 0.18s; }
.svc-visual.is-in .svc-obj--3 { transition-delay: 0.26s; }
.svc-visual.is-in .svc-obj--4 { transition-delay: 0.34s; }

.svc-obj__img {
  display: block;
  width: 100%;
  height: auto;
  /* Плавание запускается только после появления — иначе анимация конфликтует
     с transition входа и объект дёргается. */
  animation: none;
}
.svc-visual.is-in .svc-obj--1 .svc-obj__img { animation: svc-float-a 7s ease-in-out 0.5s infinite; }
.svc-visual.is-in .svc-obj--2 .svc-obj__img { animation: svc-float-b 8.5s ease-in-out 0.7s infinite; }
.svc-visual.is-in .svc-obj--3 .svc-obj__img { animation: svc-float-a 9.5s ease-in-out 0.4s infinite reverse; }
.svc-visual.is-in .svc-obj--4 .svc-obj__img { animation: svc-float-b 7.8s ease-in-out 0.9s infinite reverse; }

@keyframes svc-float-a {
  0%, 100% { transform: translate3d(0, 0, 0) rotate(0deg); }
  33%      { transform: translate3d(6px, -12px, 0) rotate(3deg); }
  66%      { transform: translate3d(-5px, -6px, 0) rotate(-2deg); }
}
@keyframes svc-float-b {
  0%, 100% { transform: translate3d(0, 0, 0) rotate(0deg); }
  40%      { transform: translate3d(-8px, -10px, 0) rotate(-3deg); }
  75%      { transform: translate3d(5px, -14px, 0) rotate(2deg); }
}

/* Раскладка объектов вокруг фигуры. Позиции подобраны так, чтобы не
   перекрывать лицо: верхние — по сторонам головы, нижние — у корпуса. */
.svc-obj--1 { top: 6%;  left: -4%; }
.svc-obj--2 { top: 22%; right: -6%; }
.svc-obj--3 { top: 56%; left: -8%; }
.svc-obj--4 { top: 68%; right: -2%; }

/* ---------- Планшет ---------- */
@media (max-width: 1024px) {
  .svc-visual__portrait { max-width: 380px; }
  .svc-obj--1 { top: 4%;  left: 2%; }
  .svc-obj--2 { top: 20%; right: 0%; }
  .svc-obj--3 { top: 58%; left: 0%; }
  .svc-obj--4 { top: 70%; right: 4%; }
}

/* ---------- Мобильные: объекты мельче и ближе к краям ---------- */
@media (max-width: 640px) {
  .svc-visual__portrait { max-width: 300px; }
  .svc-obj { width: clamp(56px, 17vw, 84px); }
  .svc-obj--1 { top: 2%;  left: 0%; }
  .svc-obj--2 { top: 16%; right: 0%; }
  .svc-obj--3 { top: 60%; left: -2%; }
  /* Четвёртый объект на узком экране убираем — тесно и мешает читать. */
  .svc-obj--4 { display: none; }
}

/* ---------- Reduced motion ---------- */
@media (prefers-reduced-motion: reduce) {
  .svc-obj {
    opacity: 1;
    transform: none;
    transition: none;
  }
  .svc-visual.is-in .svc-obj__img { animation: none; }
}
