/* ============================================================
   TFT.aero — «Терминатор»
   Герой снят днём, дальше страница резко уходит в ночь: линия
   среза под героем работает как терминатор, граница дня и ночи.
   Выше неё тёплый свет и чернильный текст, ниже приборная
   кабина: тёмно-синие поверхности и один янтарный акцент.

   1  Токены       6  Герой и срез    11 Тарифы
   2  База         7  Тренажёры       12 Отзывы
   3  Утилиты      8  Ход рейса       13 Вопросы
   4  Фон ночи     9  О компании      14 Финал и подвал
   5  Навигация    10 Маршруты        15 Адаптив
   ============================================================ */

/* ============ 1. Токены ============ */

:root {
  /* Пустота на эшелоне через час после заката: синь, никогда не чёрный */
  --deck-0: #060a16;
  --deck-1: #0a1020;

  --panel-a: #141c2e;
  --panel-b: #0c1322;
  --panel-brd: #232d40;
  --panel-lip: rgba(160, 195, 240, 0.1);
  --hair: rgba(140, 175, 225, 0.11);

  /* Единственный акцент: янтарь приборной подсветки */
  --gold: #e9a83e;
  --gold-bright: #f4bf63;
  --gold-ink: #0a0f1c;

  /* Штурманский циан: дуги прокладки, шкалы, служебные линии */
  --steel: #6fa8c7;
  --chart-hair: rgba(111, 168, 199, 0.16);
  --chart-dim: rgba(154, 199, 223, 0.82);

  /* Тёплая белизна звёзд вместо холодного экранного белого */
  --text: #f4efe2;
  --muted: #a8b4c4;
  --dim: #7f8b9c;

  /* Кривые: сильный ease-out на вход, ease-in-out на движение */
  --ease-out: cubic-bezier(0.23, 1, 0.32, 1);
  --ease-expo: cubic-bezier(0.16, 1, 0.3, 1);

  /* Одна система радиусов: панели 14, чипы 10, кнопки pill */
  --r-panel: 14px;
  --r-chip: 10px;

  --z-decor: 0;
  --z-body: 10;
  --z-float: 30;
  --z-nav: 50;
  --z-tabbar: 60;
  --z-menu: 70;

  --shell: 1220px;
  --gutter: clamp(1.25rem, 4vw, 2.5rem);
}

/* ============ 2. База ============ */

*, *::before, *::after { margin: 0; padding: 0; box-sizing: border-box; }

html {
  --chrome: #070a1a;
  background: var(--chrome);
  scroll-behavior: smooth;
  scroll-padding-top: 92px;
  -webkit-text-size-adjust: 100%;
}

body {
  font-family: "Onest", system-ui, sans-serif;
  font-size: 1rem;
  line-height: 1.65;
  color: var(--text);
  background: var(--deck-0);
  overflow-x: hidden;
  -webkit-font-smoothing: antialiased;
}

img, svg { display: block; max-width: 100%; }
a { color: inherit; text-decoration: none; }
button { font: inherit; color: inherit; background: none; border: 0; cursor: pointer; }
ul { list-style: none; }

::selection { background: rgba(233, 168, 62, 0.32); color: #fff; }

:where(a, button, input, select, textarea, [tabindex]):focus-visible {
  outline: none;
  box-shadow: 0 0 0 1px var(--gold), 0 0 0 4px rgba(233, 168, 62, 0.22);
  border-radius: 8px;
}

::-webkit-scrollbar { width: 10px; height: 10px; }
::-webkit-scrollbar-track { background: var(--deck-0); }
::-webkit-scrollbar-thumb { background: #232c3e; border: 2px solid var(--deck-0); border-radius: 6px; }
::-webkit-scrollbar-thumb:hover { background: #8a5f18; }

.shell {
  width: 100%;
  max-width: var(--shell);
  margin-inline: auto;
  padding-inline: var(--gutter);
}

.skip {
  position: fixed;
  top: 0.75rem;
  left: 0.75rem;
  z-index: 200;
  transform: translateY(-160%);
  background: var(--gold);
  color: var(--gold-ink);
  font-weight: 700;
  padding: 0.7rem 1.2rem;
  border-radius: 999px;
  transition: transform 0.25s var(--ease-out);
}
.skip:focus-visible { transform: translateY(0); }

/* ============ 3. Утилиты и типографика ============ */

h1, h2, h3, h4 { font-weight: 800; letter-spacing: -0.025em; line-height: 1.1; text-wrap: balance; }
p { text-wrap: pretty; }

.mono {
  font-family: "JetBrains Mono", ui-monospace, monospace;
  font-weight: 500;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  font-variant-numeric: tabular-nums;
}

.section {
  position: relative;
  z-index: var(--z-body);
  padding-block: clamp(4.5rem, 9vw, 7.5rem);
}
.section + .section { border-top: 1px solid var(--hair); }

.section__head { margin-bottom: clamp(2.5rem, 5vw, 4rem); max-width: 64ch; }
.section__head--center { margin-inline: auto; text-align: center; }

.section__title {
  position: relative;
  font-size: clamp(2rem, 4.6vw, 3.3rem);
  padding-left: 1.15rem;
}
.section__title em {
  display: block;
  font-style: normal;
  font-weight: 300;
  color: var(--gold);
  margin-top: 0.08em;
}
/* Приборная риска слева вместо надзаголовка у каждой секции */
.section__title::before {
  content: "";
  position: absolute;
  left: 0;
  top: 0.14em;
  bottom: 0.14em;
  width: 3px;
  border-radius: 2px;
  background: linear-gradient(180deg, var(--gold-bright), rgba(233, 168, 62, 0.1));
  box-shadow: 0 0 16px rgba(233, 168, 62, 0.42);
}
.section__head--center .section__title { padding-left: 0; }
.section__head--center .section__title::before { display: none; }

.section__lead {
  margin-top: 1.3rem;
  padding-left: 1.15rem;
  font-size: clamp(1.02rem, 1.4vw, 1.16rem);
  font-weight: 300;
  color: var(--muted);
  max-width: 62ch;
}
/* По центру рваный край бросается в глаза: сужаем колонку и выравниваем
   длину строк, чтобы абзац читался ровным блоком */
.section__head--center .section__lead { padding-left: 0; margin-inline: auto; max-width: 46ch; text-wrap: balance; }

/* Приборная поверхность */
.panel {
  position: relative;
  background: linear-gradient(155deg, var(--panel-a) 0%, var(--panel-b) 100%);
  border: 1px solid var(--panel-brd);
  border-radius: var(--r-panel);
  box-shadow: inset 0 1px 0 var(--panel-lip);
  transition: transform 0.45s var(--ease-out), border-color 0.3s ease, box-shadow 0.45s var(--ease-out);
}
@media (hover: hover) and (pointer: fine) {
  .panel--lift:hover {
    transform: translateY(-4px);
    border-color: rgba(233, 168, 62, 0.45);
    box-shadow: inset 0 1px 0 var(--panel-lip), 0 0 40px rgba(233, 168, 62, 0.1);
  }
}

/* Двойная обечайка: стекло прибора сидит в металлической рамке */
.bezel {
  padding: 8px;
  border-radius: calc(var(--r-panel) + 8px);
  background: linear-gradient(160deg, rgba(150, 185, 230, 0.09), rgba(150, 185, 230, 0.02));
  border: 1px solid rgba(150, 185, 230, 0.13);
}

/* Кадр со снимком: уголки видоискателя раскрываются на наведении */
.shot {
  position: relative;
  overflow: hidden;
  border-radius: var(--r-panel);
  border: 1px solid var(--panel-brd);
  background: var(--deck-1);
}
.shot img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  transition: transform 1.2s var(--ease-out);
}
.shot::after {
  content: "";
  position: absolute;
  inset: 0;
  background: linear-gradient(180deg, transparent 40%, rgba(7, 11, 22, 0.72) 100%);
  pointer-events: none;
}
/* Луч развёртки: один янтарный прогон сверху вниз при наведении.
   Движение привязано к действию, а не крутится фоном. */
.shot::before {
  content: "";
  position: absolute;
  left: 0;
  right: 0;
  top: -34%;
  height: 34%;
  z-index: 1;
  pointer-events: none;
  opacity: 0;
  background: linear-gradient(180deg, transparent, rgba(233, 168, 62, 0.18), transparent);
}
@keyframes sweep {
  from { transform: translateY(0); opacity: 0; }
  18%  { opacity: 1; }
  to   { transform: translateY(400%); opacity: 0; }
}
.shot__tag {
  position: absolute;
  left: 0.9rem;
  bottom: 0.9rem;
  z-index: 2;
  padding: 0.32rem 0.7rem;
  border-radius: 999px;
  font-size: 0.6rem;
  color: var(--gold);
  background: rgba(8, 12, 24, 0.7);
  border: 1px solid var(--panel-brd);
  backdrop-filter: blur(8px);
  -webkit-backdrop-filter: blur(8px);
}
.shot__mark {
  position: absolute;
  width: 16px;
  height: 16px;
  z-index: 2;
  pointer-events: none;
  transition: inset 0.35s var(--ease-out), width 0.35s var(--ease-out), height 0.35s var(--ease-out), border-color 0.3s ease;
}
.shot__mark--tl { top: 12px; left: 12px; border-top: 1px solid rgba(233, 168, 62, 0.55); border-left: 1px solid rgba(233, 168, 62, 0.55); }
.shot__mark--br { bottom: 12px; right: 12px; border-bottom: 1px solid rgba(233, 168, 62, 0.55); border-right: 1px solid rgba(233, 168, 62, 0.55); }
@media (hover: hover) and (pointer: fine) {
  .shot:hover img { transform: scale(1.05); }
  .shot:hover::before { animation: sweep 1.15s var(--ease-out); }
  .shot:hover .shot__mark { width: 26px; height: 26px; border-color: var(--gold); }
  .shot:hover .shot__mark--tl { top: 8px; left: 8px; }
  .shot:hover .shot__mark--br { bottom: 8px; right: 8px; }
}

.chips { display: flex; flex-wrap: wrap; gap: 0.5rem; }
.chip::before {
  content: "";
  flex: none;
  width: 4px;
  height: 4px;
  border-radius: 50%;
  background: var(--gold);
  box-shadow: 0 0 6px rgba(233, 168, 62, 0.85);
}
.chip {
  font-family: "JetBrains Mono", ui-monospace, monospace;
  font-size: 0.62rem;
  font-weight: 500;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--muted);
  padding: 0.45rem 0.85rem 0.45rem 0.7rem;
  /* На приборной панели подпись подсвечена, а не нарисована серым:
     кромка уходит в янтарь, а перед текстом загорается глазок */
  border: 1px solid rgba(233, 168, 62, 0.26);
  border-radius: 999px;
  background: rgba(233, 168, 62, 0.04);
  display: inline-flex;
  align-items: center;
  gap: 0.5rem;
  transition: color 0.25s ease, border-color 0.25s ease, transform 0.25s var(--ease-out);
}
@media (hover: hover) and (pointer: fine) {
  .chip:hover { color: var(--text); border-color: rgba(233, 168, 62, 0.55); transform: translateY(-2px); }
}

/* Кнопки */
.btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 0.7rem;
  min-height: 48px;
  padding: 0.8rem 0.8rem 0.8rem 1.6rem;
  border-radius: 999px;
  font-family: "JetBrains Mono", ui-monospace, monospace;
  font-size: 0.72rem;
  font-weight: 600;
  letter-spacing: 0.16em;
  text-transform: uppercase;
  white-space: nowrap;
  transition: transform 0.16s var(--ease-out), box-shadow 0.3s var(--ease-out),
              background 0.25s ease, border-color 0.25s ease, color 0.2s ease;
}
.btn:active { transform: scale(0.97); }

/* Иконка живёт в своём круге, заподлицо с краем кнопки */
.btn__ic {
  width: 32px;
  height: 32px;
  flex: 0 0 auto;
  display: grid;
  place-items: center;
  border-radius: 50%;
  transition: transform 0.3s var(--ease-out);
}
.btn__ic i { font-size: 1.05rem; }
.btn--gold .btn__ic { background: rgba(10, 15, 28, 0.14); }
.btn--steel .btn__ic { background: rgba(160, 195, 240, 0.1); }
@media (hover: hover) and (pointer: fine) {
  .btn:hover .btn__ic { transform: translate(2px, -1px) scale(1.06); }
}

.btn--gold {
  background: linear-gradient(135deg, var(--gold-bright) 0%, #d9902b 100%);
  color: var(--gold-ink);
  box-shadow: 0 0 26px rgba(233, 168, 62, 0.22);
}
.btn--gold:hover {
  background: linear-gradient(135deg, #ffd580 0%, var(--gold) 100%);
  box-shadow: 0 0 42px rgba(233, 168, 62, 0.44);
}

.btn--steel {
  background: linear-gradient(180deg, #182136 0%, #0d1424 100%);
  color: var(--text);
  border: 1px solid rgba(233, 168, 62, 0.24);
  box-shadow: inset 0 1px 0 rgba(233, 168, 62, 0.12);
}
.btn--steel .btn__ic { background: rgba(233, 168, 62, 0.15); color: var(--gold); }
.btn--steel:hover { border-color: var(--gold); color: #fff; }

/* Кнопка дня: чернильный контур на светлом снимке */
.btn--plain { padding-inline: 1.6rem; }
.btn--sm { min-height: 40px; font-size: 0.65rem; padding: 0.55rem 1.15rem; }
.btn--lg { min-height: 60px; font-size: 0.82rem; padding: 1rem 1rem 1rem 2.2rem; }
.btn--lg .btn__ic { width: 40px; height: 40px; }

/* Проблесковый маяк: только на главном действии страницы */
.beacon { position: relative; }
.beacon::after {
  content: "";
  position: absolute;
  inset: -2px;
  border-radius: inherit;
  pointer-events: none;
  animation: beacon 3s ease-in-out infinite;
}
@keyframes beacon {
  0%, 100% { box-shadow: 0 0 0 0 rgba(233, 168, 62, 0.5); }
  50% { box-shadow: 0 0 0 13px rgba(233, 168, 62, 0); }
}

/* Появление на скролле: включается только когда JS жив */
/* Появление усиливает уже видимое, а не прячет его. Скрытым становится
   только то, что при загрузке лежит ниже экрана, и лишь после того, как
   скрипт это подтвердил классом armed. Иначе секция уезжает в пустоту у
   каждого, кто не прокрутил, и в любом рендерере без прокрутки. */
.js [data-reveal].armed { transform: translateY(22px); }
.js [data-reveal].armed.in {
  transform: none;
  transition: transform 0.8s var(--ease-out) var(--d, 0ms);
}

/* Единственный маркиз страницы: несёт факты, а не декор.
   Стоит под первым экраном, а не над заголовком: подпись над
   заголовком - самый дешёвый приём, заголовок держит себя сам. */
.marquee {
  position: relative;
  margin-top: clamp(3rem, 7vh, 5rem);
  padding-block: 0.9rem;
  /* Линии рисуем отдельными полосками, а не рамкой: рамка в один пиксель с
     прозрачностью 18% попадает на дробную координату при прокрутке и пропадает. */
  /* Тёмная подложка с растушёвкой: без неё янтарь пришлось быосветлять,
     а на светлых кучевых он всё равно не читался. Мягкие края не дают
     полосе выглядеть плашкой. */
  background: linear-gradient(180deg,
    transparent 0%, rgba(4, 7, 14, 0.82) 38%, rgba(4, 7, 14, 0.82) 62%, transparent 100%);
  overflow: hidden;
  mask-image: linear-gradient(90deg, transparent, #000 12%, #000 88%, transparent);
  -webkit-mask-image: linear-gradient(90deg, transparent, #000 12%, #000 88%, transparent);
}
.marquee::before,
.marquee::after {
  content: "";
  position: absolute;
  inset-inline: 0;
  height: 2px;
  pointer-events: none;
  background: linear-gradient(180deg, rgba(233, 168, 62, 0), rgba(233, 168, 62, 0.34), rgba(233, 168, 62, 0));
}
.marquee::before { top: 0; }
.marquee::after { bottom: 0; }
.marquee__track { display: flex; width: max-content; animation: mq 52s linear infinite; }
.marquee__track > span {
  font-family: "JetBrains Mono", ui-monospace, monospace;
  font-size: clamp(0.58rem, 1vw, 0.76rem);
  font-weight: 500;
  letter-spacing: 0.34em;
  text-transform: uppercase;
  white-space: nowrap;
  color: rgba(233, 168, 62, 0.78);
}
@keyframes mq { from { transform: translateX(0); } to { transform: translateX(-50%); } }

/* ============ 4. Фон ночи ============ */

.deck {
  position: fixed;
  inset: 0;
  z-index: var(--z-decor);
  pointer-events: none;
  overflow: hidden;
  background:
    radial-gradient(120% 54% at 50% 118%, rgba(111, 168, 199, 0.14) 0%, rgba(111, 168, 199, 0.04) 42%, transparent 72%),
    radial-gradient(72% 44% at 80% -10%, rgba(96, 126, 196, 0.12), transparent 66%),
    linear-gradient(180deg, #050813 0%, #070c1a 46%, #0a1224 100%);
}

/* Млечный Путь: широкая полоса пыли поперёк сферы. Не звёзды, а их фон,
   поэтому идёт мягким пятном под ними и почти не двигается. */
.deck__way {
  position: absolute;
  inset: -20%;
  background:
    radial-gradient(58% 12% at 50% 50%, rgba(178, 196, 240, 0.10) 0%, rgba(150, 172, 220, 0.05) 44%, transparent 76%),
    radial-gradient(38% 7% at 38% 46%, rgba(214, 206, 236, 0.07) 0%, transparent 70%),
    radial-gradient(30% 6% at 66% 55%, rgba(196, 214, 244, 0.06) 0%, transparent 72%);
  transform: rotate(-19deg);
  filter: blur(2px);
}
.deck__stars { position: absolute; inset: 0; }
.deck__stars i {
  position: absolute;
  border-radius: 50%;
  background: var(--star, #f4efe2);
  box-shadow: 0 0 var(--glow, 3px) rgba(244, 239, 226, 0.55);
  animation: twinkle var(--t, 5s) ease-in-out var(--dl, 0s) infinite;
}
/* У ярких звёзд рисуем крест лучей: так глаз читает величину, а не размер */
.deck__stars i.is-bright::before,
.deck__stars i.is-bright::after {
  content: "";
  position: absolute;
  left: 50%;
  top: 50%;
  background: linear-gradient(90deg, transparent, rgba(244, 239, 226, 0.5), transparent);
  transform: translate(-50%, -50%);
}
.deck__stars i.is-bright::before { width: 18px; height: 1px; }
.deck__stars i.is-bright::after { width: 1px; height: 18px; background: linear-gradient(180deg, transparent, rgba(244, 239, 226, 0.5), transparent); }

/* Сфера поворачивается за ночь один раз - единственное крупное движение фона */
.deck__stars { animation: sphere 900s linear infinite; transform-origin: 50% 46%; }
@keyframes sphere { from { transform: rotate(0deg); } to { transform: rotate(360deg); } }
@keyframes twinkle {
  0%, 100% { opacity: 0.2; transform: scale(0.8); }
  50% { opacity: 0.95; transform: scale(1.25); }
}
.deck__grain {
  position: absolute;
  inset: -50%;
  opacity: 0.05;
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='160' height='160'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='3'/%3E%3C/filter%3E%3Crect width='160' height='160' filter='url(%23n)'/%3E%3C/svg%3E");
}

/* ============ 5. Навигация ============ */

.nav {
  position: fixed;
  inset: 0 0 auto;

  z-index: var(--z-nav);
  padding-block: 1rem;
  background: linear-gradient(180deg, rgba(6, 9, 20, 0.92) 0%, rgba(6, 9, 20, 0.66) 62%, rgba(6, 9, 20, 0.08) 100%);
  border-bottom: 1px solid transparent;
  transition: padding 0.35s var(--ease-out), background 0.3s ease, border-color 0.3s ease, color 0.3s ease;
}

.nav.is-stuck {
  padding-block: 0.65rem;
  background: rgba(8, 12, 24, 0.9);
  backdrop-filter: blur(22px) saturate(140%);
  -webkit-backdrop-filter: blur(22px) saturate(140%);
  border-bottom-color: var(--hair);
}

.nav__inner { display: flex; align-items: center; justify-content: space-between; gap: 1.5rem; }

/* Логотип: светлый знак из фирменного экспорта (1C, пропорции 161:39) */
.nav__logo { display: inline-flex; align-items: center; line-height: 0; }
.nav__logo img { display: block; width: auto; height: 32px; }
.footer .nav__logo img { height: 40px; }
@media (max-width: 700px) { .nav__logo img { height: 28px; } }

.nav__links { display: flex; align-items: center; gap: 1.75rem; }
.nav__links a {
  position: relative;
  font-family: "JetBrains Mono", ui-monospace, monospace;
  font-size: 0.69rem;
  font-weight: 500;
  letter-spacing: 0.16em;
  text-transform: uppercase;
  color: rgba(234, 238, 245, 0.82);
  padding-bottom: 4px;
  transition: color 0.2s ease;
}
.nav__links a::after {
  content: "";
  position: absolute;
  left: 0;
  bottom: 0;
  height: 1px;
  width: 100%;
  transform: scaleX(0);
  transform-origin: left center;
  background: var(--gold);
  transition: transform 0.28s var(--ease-out);
}
.nav__links a:hover { color: #fff; }
.nav__links a:hover::after,
.nav__links a.is-current::after { transform: scaleX(1); }

.nav__actions { display: flex; align-items: center; gap: 1rem; }
.nav__phone {
  font-family: "JetBrains Mono", ui-monospace, monospace;
  font-size: 0.71rem;
  letter-spacing: 0.09em;
  color: var(--gold);
  transition: color 0.2s ease;
}
.nav__phone:hover { color: var(--gold-bright); }

/* Бургер: две линии складываются в крест */
.nav__burger { display: none; width: 44px; height: 44px; position: relative; }
.nav__burger span {
  position: absolute;
  left: 12px;
  width: 20px;
  height: 1.5px;
  border-radius: 2px;
  background: var(--text);
  transition: transform 0.32s var(--ease-out), background 0.3s ease;
}
.nav__burger span:nth-child(1) { top: 19px; }
.nav__burger span:nth-child(2) { top: 25px; }
.nav__burger[aria-expanded="true"] span:nth-child(1) { transform: translateY(3px) rotate(45deg); }
.nav__burger[aria-expanded="true"] span:nth-child(2) { transform: translateY(-3px) rotate(-45deg); }

.menu {
  position: fixed;
  inset: 0 0 auto;
  height: 100dvh;
  z-index: var(--z-menu);
  display: grid;
  place-items: center;
  background: rgba(7, 11, 22, 0.95);
  backdrop-filter: blur(26px);
  -webkit-backdrop-filter: blur(26px);
  opacity: 0;
  visibility: hidden;
  transition: opacity 0.3s var(--ease-out), visibility 0.3s;
}
.menu.open { opacity: 1; visibility: visible; }
/* Пока меню открыто, шапка лежит поверх шторки: бургер превращается
   в крест и остаётся единственным способом закрыть меню */
body.menu-open .nav { z-index: calc(var(--z-menu) + 1); background: none; border-bottom-color: transparent; }
/* Действие уже есть в самой шторке, дублировать его в шапке незачем */
body.menu-open .nav__actions .btn { display: none; }
body.menu-open .tabbar { display: none; }
.menu__list { display: flex; flex-direction: column; align-items: center; gap: 1.4rem; text-align: center; }
.menu__list a {
  font-family: "JetBrains Mono", ui-monospace, monospace;
  font-size: 1rem;
  letter-spacing: 0.22em;
  text-transform: uppercase;
  color: var(--text);
  opacity: 0;
  transform: translateY(16px);
}
.menu.open .menu__list a {
  opacity: 1;
  transform: none;
  transition: opacity 0.4s var(--ease-out) var(--d), transform 0.45s var(--ease-out) var(--d);
}
.menu__list .btn { margin-top: 0.6rem; }

/* ============ 6. Герой и срез ============ */

.hero {
  position: relative;
  z-index: var(--z-body);
  min-height: 100svh;
  display: flex;
  flex-direction: column;
  justify-content: center;
  padding: clamp(7rem, 14vh, 9rem) 0 clamp(3rem, 6vh, 4.5rem);
  overflow: hidden;
  color: var(--text);
}
.hero__bg { position: absolute; inset: 0; z-index: -2; overflow: hidden; }

/* Облака идут мимо: кадр разложен на четыре яруса, каждый со своей полосой
   по высоте и своей скоростью. Чем ближе ярус, тем быстрее ход - разница
   скоростей и создаёт ощущение высоты. Внутри яруса лента из четырёх кадров,
   зеркальные прячут стыки.

   Ярусы полупрозрачны: сквозь них читается звёздное поле, слои дают глубину
   вместо плоской картинки. Сюда же лягут будущие фотографии. */
.hero__bg {
  position: absolute;
  inset: 0;
  z-index: -1;
  overflow: hidden;
  opacity: 0.66;
}
.sky { position: absolute; inset: 0; overflow: hidden; }

.sky--l1 { mask-image: linear-gradient(180deg, #000 0%, #000 20%, transparent 38%); }
.sky--l2 { mask-image: linear-gradient(180deg, transparent 14%, #000 32%, #000 46%, transparent 62%); }
.sky--l3 { mask-image: linear-gradient(180deg, transparent 40%, #000 58%, #000 72%, transparent 86%); }
.sky--l4 { mask-image: linear-gradient(180deg, transparent 66%, #000 84%, #000 100%); }
.sky--l1 { -webkit-mask-image: linear-gradient(180deg, #000 0%, #000 20%, transparent 38%); }
.sky--l2 { -webkit-mask-image: linear-gradient(180deg, transparent 14%, #000 32%, #000 46%, transparent 62%); }
.sky--l3 { -webkit-mask-image: linear-gradient(180deg, transparent 40%, #000 58%, #000 72%, transparent 86%); }
.sky--l4 { -webkit-mask-image: linear-gradient(180deg, transparent 66%, #000 84%, #000 100%); }

.sky__track {
  position: absolute;
  top: 0;
  left: 0;
  height: 100%;
  width: 400%;
  display: flex;
  will-change: transform;
}
.sky__track img {
  flex: 0 0 25%;
  width: 25%;
  height: 100%;
  object-fit: cover;
  object-position: center 52%;
}
.sky__mirror { transform: scaleX(-1); }

.sky--l1 .sky__track { animation: pan 760s linear infinite; }
.sky--l2 .sky__track { animation: pan 510s linear infinite; }
.sky--l3 .sky__track { animation: pan 340s linear infinite; }
.sky--l4 .sky__track { animation: pan 240s linear infinite; }

@keyframes pan {
  from { transform: translateX(0); }
  to   { transform: translateX(-50%); }
}

.hero__inner {
  position: relative;
  width: 100%;
  display: grid;
  grid-template-columns: minmax(0, 15rem) minmax(0, 1fr);
  align-items: end;
  gap: clamp(2rem, 5vw, 5rem);
}

/* Колонка счисления: данные рейса, а не подпись над заголовком */
.fixlist { display: grid; gap: 1.15rem; }
.fixlist div { display: grid; gap: 0.25rem; }
.fixlist dt {
  font-family: "JetBrains Mono", ui-monospace, monospace;
  font-size: 0.62rem;
  letter-spacing: 0.2em;
  color: var(--chart-dim);
}
.fixlist dd {
  font-size: 0.92rem;
  font-weight: 500;
  color: var(--muted);
  font-variant-numeric: tabular-nums;
}

.hero__title {
  font-size: clamp(2.7rem, 6.6vw, 5.4rem);
  line-height: 0.96;
  letter-spacing: -0.03em;
  text-wrap: balance;
  color: var(--text);
  margin-block: 0 clamp(1.2rem, 2.6vw, 1.8rem);
}
.hero__title em {
  display: block;
  font-style: normal;
  font-weight: 300;
  color: var(--gold);
  margin-top: 0.08em;
  padding-bottom: 0.06em;
}

.hero__sub {
  max-width: 52ch;
  font-size: clamp(1.02rem, 1.5vw, 1.18rem);
  font-weight: 400;
  line-height: 1.55;
  text-wrap: pretty;
  color: var(--muted);
}

.hero__cta {
  margin-top: clamp(2rem, 3.6vw, 2.8rem);
  display: flex;
  flex-wrap: wrap;
  gap: 1rem;
}

/* ============ 7. Тренажёры ============ */

.sim {
  display: grid;
  grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
  gap: clamp(2rem, 6vw, 6rem);
  align-items: center;
}
.sim + .sim { margin-top: clamp(4rem, 10vw, 9rem); }
.sim--flip .sim__media { order: 2; }

.sim__media { display: grid; gap: clamp(0.75rem, 1.4vw, 1rem); }
.sim__media .shot--main { aspect-ratio: 16 / 10; }
.sim__media .shot--pair { display: grid; grid-template-columns: 1fr 1fr; gap: clamp(0.75rem, 1.4vw, 1rem); }
.sim__media .shot--pair .shot { aspect-ratio: 4 / 3; }

.sim__body h3 { font-size: clamp(1.6rem, 3vw, 2.4rem); margin-bottom: 1rem; }
.sim__body p { color: var(--muted); font-size: 1rem; margin-bottom: 1rem; max-width: 52ch; }
.sim__body .chips { margin-block: 1.6rem; }

/* ============ 8. Ход рейса ============ */

/* Секция уводит палубу к рассветной стали: свет меняется по ходу рейса */
/* Полупрозрачная полоса, а не плотная заливка: сквозь неё видно
   звёздное поле, которое лежит фоном под всей страницей */
.flow {
  background: linear-gradient(180deg, transparent 0%, rgba(21, 34, 58, 0.82) 13%, rgba(16, 26, 46, 0.82) 87%, transparent 100%);
  overflow: hidden;
}
.flow .section__lead { color: rgba(210, 222, 238, 0.78); }

/* Облака нарисованы контуром и стоят на месте: заливки почти нет,
   поэтому звёздное поле просвечивает сквозь них. Размытия нет нигде,
   линия остаётся резкой на любом экране за счёт non-scaling-stroke. */
/* Фон секции - сам полёт: за окном меняется то, что видно на этом этапе.
   Кадры приглушены и лежат слоем, поэтому дают глубину, а не спорят с
   текстом. Смена идёт вместе с этапом, так что фон несёт смысл. */
/* Секция прилипает к экрану, и всё время, пока её листают, идёт перемотка
   полёта. Высота дорожки задаёт, сколько прокрутки достаётся каждому этапу:
   четыре этапа примерно по половине экрана, и последний держится столько же,
   сколько остальные. Без дорожки этапы съедались раньше, чем блок вставал. */
.flow {
  position: relative;
  height: 320vh;
  padding-block: 0;
  /* Обрезку снимаем: у .section она есть, а любой предок с overflow
     ломает прилипание. Обрезает теперь сам прилипающий экран. */
  overflow: visible;
}
.flow__pin {
  position: sticky;
  top: 0;
  /* 100vh на айфоне - это высота без панелей браузера: низ секции вместе с
     подписью к кадру уходил под них. svh считает высоту с панелями. */
  height: 100vh;
  height: 100svh;
  display: grid;
  align-content: center;
  /* Шапка фиксированная и лежит поверх: без отступа она срезала заголовок */
  padding-top: clamp(3.5rem, 8vh, 5.5rem);
  overflow: hidden;
}

.flow__scenes { position: absolute; inset: 0; z-index: 0; pointer-events: none; overflow: hidden; }
.flow .shell { position: relative; z-index: 1; }
.flow__scene {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  object-fit: cover;
  opacity: 0;
  transform: scale(1.06);
  transition: opacity 1.1s var(--ease-out), transform 7s linear;
}
.flow__scene.is-on { opacity: 0.4; transform: scale(1); }
/* Кадр гаснет к краям, иначе секция читается как врезанная фотография */
.flow__scenes::after {
  content: "";
  position: absolute;
  inset: 0;
  background:
    radial-gradient(120% 78% at 50% 50%, transparent 22%, rgba(6, 10, 22, 0.72) 78%),
    linear-gradient(180deg, var(--deck-0) 0%, transparent 22%, transparent 74%, var(--deck-0) 100%);
}


/* На узком экране остаются два облака: четыре начинают спорить с текстом */
@media (max-width: 700px) {
}

/* Этапы выбираются, а не листаются: слева перечень с временами,
   справа один крупный кадр. Так блок занимает меньше высоты,
   а гость сам решает, что разглядывать, вместо четырёх мелких
   плиток, где каждый снимок был размером с подпись. */
.flow { padding-block: clamp(5.5rem, 11vw, 10rem); }

.stages {
  margin-top: clamp(2.5rem, 5vw, 4rem);
  display: grid;
  grid-template-columns: minmax(0, 0.44fr) minmax(0, 1fr);
  gap: clamp(1.5rem, 3.4vw, 3rem);
  /* Кадр ниже списка этапов, поэтому по верхнему краю он висел криво:
     выравниваем по центру, тогда блок читается как одно целое */
  align-items: center;
}

.stages__list { display: flex; flex-direction: column; }

.stage {
  position: relative;
  display: flex;
  flex-direction: column;
  gap: 0.45rem;
  text-align: left;
  padding: clamp(1rem, 1.8vw, 1.5rem) 0 clamp(1rem, 1.8vw, 1.5rem) 1.3rem;
  border-bottom: 1px solid var(--hair);
  transition: color 0.2s ease;
}
.stage:first-child { border-top: 1px solid var(--hair); }
/* Риска слева не просто отмечает выбранный этап: она заполняется
   за десять секунд и этим показывает, когда произойдёт переход.
   Она же служит часами для автопереключения, поэтому пауза по
   наведению останавливает и полосу, и смену кадра разом. */
.stage__bar {
  position: absolute;
  left: 0;
  top: 0;
  bottom: 0;
  width: 2px;
  background: rgba(233, 168, 62, 0.16);
  opacity: 0;
  transition: opacity 0.25s ease;
}
.stage[aria-selected="true"] .stage__bar { opacity: 1; }
.stage__bar i {
  display: block;
  width: 100%;
  height: 100%;
  transform: scaleY(0);
  transform-origin: top;
  background: var(--gold);
  box-shadow: 0 0 14px rgba(233, 168, 62, 0.7);
}
.stage[aria-selected="true"] .stage__bar i { animation: stage-fill 10s linear forwards; }
@keyframes stage-fill {
  from { transform: scaleY(0); }
  to { transform: scaleY(1); }
}
/* Пока читают или блок за кадром, отсчёт стоит */
.stages:hover .stage__bar i,
.stages:focus-within .stage__bar i,
.stages.is-scrolling .stage__bar i,
.stages.is-idle .stage__bar i { animation-play-state: paused; }

.stage__time { font-size: 0.63rem; color: var(--dim); transition: color 0.2s ease; }
.stage:hover .stage__time { color: var(--gold); }
.stage__name {
  font-size: clamp(1.1rem, 1.7vw, 1.45rem);
  font-weight: 800;
  letter-spacing: -0.02em;
  color: var(--muted);
  transition: color 0.2s ease;
}
.stage[aria-selected="true"] .stage__time { color: var(--gold); }
.stage[aria-selected="true"] .stage__name { color: var(--text); }
@media (hover: hover) and (pointer: fine) {
  .stage:hover .stage__name { color: var(--text); }
}

.stages__view {
  position: relative;
  aspect-ratio: 16 / 10;
  /* На ноутбуках экран низкий, и кадр в пропорции 16:10 выдавливал
     заголовок за верхний край. Потолок по высоте окна это снимает. */
  max-height: min(48vh, 470px);
  border-radius: var(--r-panel);
  overflow: hidden;
  border: 1px solid var(--panel-brd);
  background: var(--deck-1);
  box-shadow: inset 0 1px 0 var(--panel-lip);
}

.stages__panel {
  position: absolute;
  inset: 0;
  opacity: 0;
  /* Лёгкое размытие на уходящем кадре склеивает пересменку:
     без него видно два разных снимка одновременно */
  filter: blur(8px);
  transform: scale(1.02);
  transition: opacity 0.2s ease, filter 0.2s ease, transform 0.2s ease;
}
.stages__panel.is-on {
  opacity: 1;
  filter: none;
  transform: none;
  transition: opacity 0.45s var(--ease-out), filter 0.45s var(--ease-out), transform 0.5s var(--ease-out);
}
.stages__panel img { width: 100%; height: 100%; object-fit: cover; }
.stages__panel img.is-bright { filter: brightness(0.62) saturate(0.8) contrast(1.06); }
.stages__panel::after {
  content: "";
  position: absolute;
  inset: 0;
  background: linear-gradient(180deg, rgba(8, 13, 26, 0.2) 0%, rgba(8, 13, 26, 0.08) 38%, rgba(8, 13, 26, 0.94) 100%);
}
.stages__panel p {
  position: absolute;
  left: 0;
  right: 0;
  bottom: 0;
  z-index: 2;
  padding: clamp(1.4rem, 2.6vw, 2.4rem);
  max-width: 56ch;
  color: rgba(219, 228, 240, 0.92);
  font-size: clamp(0.96rem, 1.2vw, 1.1rem);
}

@media (max-width: 860px) {
  .stages { grid-template-columns: 1fr; }
  .stages__list { display: grid; grid-template-columns: 1fr 1fr; }
  .stage { padding-inline: 0.2rem; }
  .stage__name { font-size: 1.02rem; }
}

@media (max-width: 860px) and (min-height: 860px) {
  .stages__list { grid-template-columns: 1fr; }
  .stage { padding-block: 0.9rem; }
  .stage:nth-child(2) { border-top: 1px solid var(--hair); }
}

/* ============ 9. О компании ============ */

/* Ведомость, а не сетка плашек: цифра слева, строкой справа
   объяснение, что она значит. Одинаковые карточки метрик уже
   заняты тарифами и форматами, четвёртая такая сетка читалась бы
   как шаблон, да и цифра без пояснения ничего не доказывает. */
.tally { margin-top: clamp(2.5rem, 5vw, 4rem); }

.tally__row {
  display: grid;
  /* Колонка числа шире прежней: крупное «25 000» в 0.34fr рвалось на две строки */
  grid-template-columns: minmax(0, 0.52fr) minmax(0, 1fr);
  gap: clamp(1rem, 4vw, 4rem);
  padding-block: clamp(1.6rem, 3vw, 2.4rem);
}
/* Одна разделительная линия между строками, без рамок сверху и снизу */
.tally__row + .tally__row { border-top: 1px solid var(--hair); }

/* Единица всегда под числом: иначе широкое «25 000» переносило
   подпись, а узкое «17» оставляло её сбоку, и строки не выравнивались */
.tally__num { display: block; line-height: 0.92; }
.tally__num b {
  font-size: clamp(3.2rem, 7vw, 5.4rem);
  font-weight: 800;
  letter-spacing: -0.035em;
  white-space: nowrap;
  color: var(--gold-bright);
  text-shadow: 0 0 44px rgba(244, 191, 99, 0.24);
  font-variant-numeric: tabular-nums;
}
.tally__num i {
  display: block;
  margin-top: 0.55rem;
  font-style: normal;
  font-size: clamp(0.95rem, 1.3vw, 1.15rem);
  font-weight: 300;
  color: var(--muted);
}
/* Процент читается как часть числа, поэтому остаётся в строке */
.tally__num i.tally__unit {
  display: inline;
  margin: 0 0 0 -0.2rem;
  font-size: clamp(1.9rem, 4vw, 3rem);
  font-weight: 800;
  color: var(--gold-bright);
  text-shadow: 0 0 44px rgba(244, 191, 99, 0.24);
}

.tally__label { display: block; font-size: 0.66rem; color: var(--gold); margin-bottom: 0.7rem; }
.tally__row p { color: var(--muted); font-size: 1.02rem; max-width: 54ch; }

.about__note {
  margin-top: clamp(2.6rem, 5vw, 4rem);
  padding-top: clamp(1.5rem, 3vw, 2rem);
  border-top: 1px solid var(--hair);
  color: var(--dim);
  font-size: 0.95rem;
  max-width: 66ch;
}

/* Ноутбуки с низким экраном: закреплённый экран обязан вмещать секцию
   целиком, иначе заголовок срезает. Сжимаем ритм, а не прячем содержимое. */
@media (max-height: 860px) and (min-width: 861px) {
  .flow .section__head { margin-bottom: 1.4rem; }
  .flow .section__title { font-size: clamp(1.7rem, 3vw, 2.3rem); }
  .flow .section__lead { font-size: 0.95rem; }
  .stages { margin-top: 1.2rem; }
  .stage { padding-block: 0.6rem; }
  .stages__view { width: 100%; max-height: none; aspect-ratio: auto; }
}

@media (max-width: 700px) {
  /* Блок «Час за штурвалом» закрепляется ровно с заголовка: точка прилипания
     стоит под шапкой, поэтому «Час за штурвалом» встаёт вверху экрана, а
     этапы и кадр - под ним. Высота считается по видимой области за вычетом
     шапки и нижней панели, значит блок помещается целиком. */
  .flow {
    height: 230vh;
    padding-block: 0;
  }
  .flow__pin {
    position: sticky;
    top: var(--navh, 66px);
    height: calc(100svh - var(--navh, 66px) - 60px);
    height: calc(100dvh - var(--navh, 66px) - 60px);
    padding: 0.6rem 0 0.8rem;
    display: flex;
    flex-direction: column;
    overflow: hidden;
  }
  .flow .shell {
    display: flex;
    flex-direction: column;
    flex: 1 1 auto;
    min-height: 0;
  }
  .flow .section__head { flex: 0 0 auto; }
  .flow .stages {
    display: flex;
    flex-direction: column;
    align-items: stretch;
    flex: 1 1 auto;
    min-height: 0;
    gap: 0.9rem;
  }
  .flow .stages__list { flex: 0 0 auto; }
  .flow .stages__view { flex: 1 1 auto; min-height: 9rem; }
  .flow .section__head { margin-bottom: 0.8rem; }
  .flow .section__title { font-size: 1.62rem; line-height: 1.12; }
  .flow .section__lead { font-size: 0.88rem; line-height: 1.45; }
  .stages { margin-top: 0.6rem; }
  .flow .stages { gap: 0.7rem; }
  .stage { padding-block: 0.34rem; }
  .stage__name { font-size: 0.98rem; }
  .stage__time { font-size: 0.6rem; }
  .stages__view { width: 100%; max-height: none; aspect-ratio: auto; }

  /* Кадр стоит одного размера: медленный наезд заводился заново на каждом
     этапе, и при листании снимок то раздувался, то садился обратно.
     Смена этапа остаётся, но только проявлением. */
  .flow__scene,
  .flow__scene.is-on,
  .stages__panel,
  .stages__panel.is-on {
    transform: none;
    transition: opacity 0.45s var(--ease-out), filter 0.45s var(--ease-out);
  }

  /* Подпись прижата к нижней кромке кадра и читается на плотной подложке:
     снимок остаётся видимым, текст не наезжает на приборы. */
  .stages__panel p {
    padding: 0.6rem 0.8rem 0.7rem;
    max-width: none;
    font-size: 0.82rem;
    line-height: 1.38;
  }
  .stages__panel::after {
    background: linear-gradient(180deg, rgba(8, 13, 26, 0.14) 0%, rgba(8, 13, 26, 0.04) 30%, rgba(8, 13, 26, 0.58) 60%, rgba(8, 13, 26, 0.97) 100%);
  }
}

/* Чем короче экран, тем меньше остаётся кадру: ужимаем по шагам, чтобы низ
   блока не уезжал под нижнюю панель. */
@media (max-width: 700px) and (max-height: 900px) {
  .flow .section__title { font-size: 1.52rem; }
  .flow .section__lead { font-size: 0.85rem; }
  .flow .section__head { margin-bottom: 0.7rem; }
  .stage { padding-block: 0.3rem; }
}

@media (max-width: 700px) and (max-height: 780px) {
  .flow .section__title { font-size: 1.42rem; }
  .flow .section__lead { font-size: 0.82rem; line-height: 1.4; }
  .stages { margin-top: 0.4rem; }
  .flow .stages { gap: 0.5rem; }
  .stage { padding-block: 0.3rem; }
  .stage__name { font-size: 0.94rem; }
  .stages__panel p { font-size: 0.79rem; }
}

@media (max-width: 380px) {
  .flow .section__title { font-size: 1.45rem; }
  .flow .section__lead { font-size: 0.82rem; }
  .stages__panel p { font-size: 0.79rem; }
}

/* Совсем низкий экран: закреплять нечего, секция становится обычной */
@media (max-height: 600px) and (min-width: 861px) {
  .flow { height: auto; padding-block: clamp(3rem, 8vh, 5rem); }
  .flow__pin { position: static; height: auto; padding-top: 0; }
}

/* ============ 10. Маршруты ============ */

/* Табло вылетов. Девять маршрутов читаются разом, листать нечего: карусель
   со стрелками прятала половину предложения за краем экрана. И странице
   нужен ритм - после большой картиночной секции с этапами идёт плотный
   типографский разворот, а не ещё одна лента. */
.board {
  margin-top: clamp(2rem, 4vw, 3rem);
  display: grid;
  gap: 1px;
  background: var(--hair);
  border: 1px solid var(--panel-brd);
  border-radius: var(--r-panel);
  overflow: hidden;
}
.board__head,
.board__row {
  display: grid;
  grid-template-columns: 96px minmax(8.5rem, auto) minmax(0, 1fr) auto 1.8rem;
  align-items: center;
  gap: clamp(0.9rem, 2vw, 1.8rem);
  background: var(--deck-1);
  padding-inline: clamp(0.9rem, 2vw, 1.4rem);
  text-align: left;
}
.board__head {
  padding-block: 0.75rem;
  font-family: "JetBrains Mono", ui-monospace, monospace;
  font-size: 0.56rem;
  letter-spacing: 0.22em;
  text-transform: uppercase;
  color: var(--dim);
}
.board__row {
  position: relative;
  padding-block: 0.6rem;
  color: inherit;
  cursor: pointer;
  transition: background 0.22s ease;
}
/* Янтарный курсор строки: так на настоящем табло отмечен нужный рейс */
.board__row::before {
  content: "";
  position: absolute;
  left: 0;
  top: 0;
  bottom: 0;
  width: 2px;
  background: var(--gold);
  transform: scaleY(0);
  transition: transform 0.25s var(--ease-out);
}
.board__row:hover,
.board__row:focus-visible { background: #121a2c; }
.board__row:hover::before,
.board__row:focus-visible::before { transform: scaleY(1); }

.board__shot { display: block; aspect-ratio: 16 / 10; border-radius: 6px; overflow: hidden; }
.board__shot img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  filter: brightness(0.6) saturate(0.7);
  transition: filter 0.3s ease, transform 0.6s var(--ease-out);
}
.board__row:hover .board__shot img { filter: brightness(0.92) saturate(0.92); transform: scale(1.05); }

.board__code {
  font-size: 0.66rem;
  letter-spacing: 0.12em;
  color: var(--gold);
  display: inline-flex;
  align-items: center;
  gap: 0.4rem;
  white-space: nowrap;
}
.board__code i { font-size: 0.82rem; }
.board__dest {
  font-size: clamp(0.98rem, 1.4vw, 1.12rem);
  font-weight: 700;
  letter-spacing: -0.01em;
}
.board__tag {
  font-size: 0.56rem;
  letter-spacing: 0.16em;
  text-transform: uppercase;
  color: var(--dim);
  white-space: nowrap;
}
.board__go {
  justify-self: end;
  color: var(--dim);
  transition: color 0.2s ease, transform 0.25s var(--ease-out);
}
.board__row:hover .board__go { color: var(--gold); transform: translate(2px, -2px); }

.dialog {
  position: fixed;
  inset: 0;
  margin: auto;
  height: fit-content;
  max-height: calc(100dvh - 2rem);
  overflow-y: auto;
  overscroll-behavior: contain;
  width: min(560px, calc(100vw - 2rem));
  padding: clamp(1.75rem, 3vw, 2.4rem);
  border: 1px solid var(--panel-brd);
  border-radius: var(--r-panel);
  background: linear-gradient(155deg, #141c2e 0%, #0a1120 100%);
  color: var(--text);
  box-shadow: inset 0 1px 0 var(--panel-lip), 0 46px 90px -34px #000;
}
.dialog::backdrop { background: rgba(5, 8, 16, 0.78); backdrop-filter: blur(6px); }
.dialog__codes { display: block; font-size: 0.68rem; color: var(--gold); }
.dialog h3 { font-size: 1.5rem; margin-block: 0.8rem 0.7rem; }
.dialog p { color: var(--muted); margin-bottom: 0.7rem; }
.dialog__close {
  position: absolute;
  top: 0.9rem;
  right: 0.9rem;
  width: 40px;
  height: 40px;
  display: grid;
  place-items: center;
  border-radius: 50%;
  color: var(--dim);
  transition: color 0.2s ease;
}
.dialog__close i { font-size: 1.3rem; }
.dialog__close:hover { color: var(--gold); }
.dialog__actions { display: flex; flex-wrap: wrap; gap: 0.75rem; margin-top: 1.5rem; }

/* ============ 11. Тарифы ============ */

.plans { display: grid; grid-template-columns: repeat(auto-fit, minmax(250px, 1fr)); gap: clamp(1rem, 1.8vw, 1.35rem); }
.plan { padding: clamp(1.6rem, 2.4vw, 2rem); display: flex; flex-direction: column; }
.plan__name { font-size: 1.15rem; font-weight: 800; letter-spacing: -0.02em; }
.plan__time { display: block; margin-top: 0.35rem; font-size: 0.62rem; color: var(--dim); }
.plan__price {
  margin-block: 1.1rem 1.3rem;
  padding-bottom: 1.3rem;
  border-bottom: 1px solid var(--hair);
  font-size: clamp(1.6rem, 2.6vw, 2rem);
  font-weight: 800;
  letter-spacing: -0.03em;
  font-variant-numeric: tabular-nums;
}
.plan__list { display: flex; flex-direction: column; gap: 0.65rem; margin-bottom: 1.6rem; }
.plan__list li { display: flex; gap: 0.6rem; font-size: 0.9rem; color: var(--muted); }
.plan__list i { color: var(--gold); flex: 0 0 auto; margin-top: 0.22em; font-size: 0.95rem; }
.plan .btn { margin-top: auto; align-self: stretch; }
.plan--hot { border-color: rgba(233, 168, 62, 0.6); box-shadow: inset 0 1px 0 var(--panel-lip), 0 0 46px rgba(233, 168, 62, 0.12); }
.plan--hot .plan__price { color: var(--gold-bright); }
.plan__badge {
  position: absolute;
  top: -11px;
  left: 1.2rem;
  padding: 0.24rem 0.7rem;
  border-radius: 999px;
  background: linear-gradient(135deg, var(--gold-bright), #d9902b);
  color: var(--gold-ink);
  font-size: 0.56rem;
  font-weight: 600;
  letter-spacing: 0.13em;
}

.terms {
  margin-top: clamp(2rem, 4vw, 3rem);
  padding-top: 2rem;
  border-top: 1px solid var(--hair);
  display: grid;
  grid-template-columns: minmax(0, 1fr) auto;
  gap: 2rem;
  align-items: center;
}
.terms p { color: var(--muted); font-size: 0.93rem; margin-bottom: 0.7rem; display: flex; gap: 0.6rem; }
.terms p:last-child { margin-bottom: 0; }
.terms i { color: var(--gold); flex: 0 0 auto; margin-top: 0.28em; }

.promo {
  display: inline-flex;
  align-items: center;
  gap: 0.4rem;
  padding: 0.1rem 0.55rem;
  border-radius: 6px;
  background: rgba(233, 168, 62, 0.12);
  border: 1px solid rgba(233, 168, 62, 0.45);
  color: var(--gold-bright);
  font-family: "JetBrains Mono", ui-monospace, monospace;
  font-size: 0.8rem;
  letter-spacing: 0.05em;
  transition: background 0.2s ease;
}
.promo:hover { background: rgba(233, 168, 62, 0.24); }

/* Не только полёты: асимметричная пара строк, пустых ячеек нет */
.more { display: grid; grid-template-columns: repeat(12, 1fr); gap: clamp(1rem, 1.8vw, 1.35rem); }
.more__cell { grid-column: span 7; padding: clamp(1.5rem, 2.4vw, 2rem); display: flex; flex-direction: column; gap: 0.7rem; }
.more__cell:nth-child(2), .more__cell:nth-child(3) { grid-column: span 5; }
.more__cell:nth-child(3) { background: linear-gradient(150deg, #1a2338 0%, #0d1526 100%); }
.more__cell:nth-child(4) {
  background:
    radial-gradient(120% 100% at 0% 100%, rgba(233, 168, 62, 0.14), transparent 62%),
    linear-gradient(150deg, #171e30 0%, #0c1322 100%);
}
.more__cell i { font-size: 1.6rem; color: var(--gold); }
.more__cell h3 { font-size: 1.18rem; }
.more__cell p { color: var(--muted); font-size: 0.94rem; }
.more__cell b { margin-top: auto; padding-top: 0.9rem; font-size: 0.62rem; color: var(--dim); font-weight: 500; }

/* ============ 12. Отзывы ============ */

/* ---------- Гравюра на фоне отзывов ----------
   Пустая синева за карточками ничего не рассказывала. Кладём под всю секцию
   рисунок: кучевые облака тремя ярусами и звёзды, как в старом лётном атласе.
   Картинка белая, цвет ей даёт градиент под маской - так тон остаётся в
   палитре, а у верхней и нижней кромки чернила растворяются без стыка. */
#reviews { position: relative; isolation: isolate; }
#reviews::before {
  content: "";
  position: absolute;
  inset: 0;
  z-index: -1;
  pointer-events: none;
  /* Ни маски, ни прозрачности: и то и другое заставляет браузер рисовать этот
     слой (а он во всю секцию) отдельным проходом и переклеивать его при
     прокрутке - отсюда и мерцание. Растворение по краям и сила чернил теперь
     запечены в саму картинку, странице остаётся просто её нарисовать. */
  background: url("art/engraved-clouds.png") center / 160vw auto no-repeat;
}
@media (max-width: 700px) {
  /* Секция вытягивается в столбец, и в кадр попадает узкая полоса рисунка:
     сдвигаем её туда, где облака есть во всех трёх ярусах. */
  #reviews::before,
  #reviews::after {
    background-position: 34% center;
  }
}

/* ---------- Карточка на Яндекс Картах ---------- */
.ymap {
  display: grid;
  grid-template-columns: minmax(0, 1fr) minmax(0, 27rem);
  gap: clamp(1.5rem, 3vw, 3rem);
  align-items: center;
  min-height: 0;
  padding: clamp(1.4rem, 2.4vw, 2.1rem);
  margin-bottom: clamp(1rem, 1.8vw, 1.35rem);
}
.ymap__eyebrow {
  display: inline-flex;
  align-items: center;
  gap: 0.55rem;
  font-size: 0.62rem;
  color: var(--gold-bright);
}
.ymap__eyebrow i { font-size: 1.05rem; letter-spacing: 0; }
.ymap__title {
  margin: 1.1rem 0 0;
  font-size: clamp(1.4rem, 2.2vw, 1.95rem);
  font-weight: 600;
  letter-spacing: -0.02em;
  line-height: 1.2;
}
.ymap__lead {
  margin: 0.85rem 0 1.7rem;
  max-width: 40ch;
  color: rgba(234, 238, 245, 0.86);
  font-size: 1.02rem;
  line-height: 1.55;
}
.ymap__top {
  display: flex;
  align-items: center;
  justify-content: space-between;
  flex-wrap: wrap;
  gap: 0.8rem 1.2rem;
}
.ymap__badge {
  display: block;
  flex: 0 0 auto;
  width: 150px;
  height: 50px;
  margin: 0;
  border: 0;
  border-radius: 10px;
  overflow: hidden;
  color-scheme: dark;
}

.ymap__acts { display: flex; flex-wrap: wrap; align-items: center; gap: 0.9rem 1.4rem; }
.ymap__route {
  display: inline-flex;
  align-items: center;
  gap: 0.45rem;
  font-size: 0.86rem;
  color: rgba(200, 214, 233, 0.9);
  border-bottom: 1px solid rgba(200, 214, 233, 0.28);
  padding-bottom: 2px;
  transition: color 0.25s ease, border-color 0.25s ease;
}
.ymap__route:hover { color: var(--gold-bright); border-color: rgba(244, 191, 99, 0.5); }
.ymap__route i { font-size: 1.05rem; }
/* Карточку Яндекса оставляем в её собственном виде. Перекрасить чужой фрейм
   можно только целиком: инверсия, которая гасит белый фон, заодно переворачивает
   фотографии авторов. Лица важнее единообразия, поэтому карточка светлая - и
   выглядит как то, чем является: вставкой с карты. */
.ymap__frame {
  height: 30rem;
  border-radius: calc(var(--r-panel) - 3px);
  overflow: hidden;
  border: 1px solid rgba(255, 255, 255, 0.14);
  background: #f4f5f7;
  box-shadow: 0 18px 46px rgba(4, 7, 18, 0.45);
}
.ymap__frame iframe { display: block; width: 100%; height: 100%; border: 0; }

.reviews__cta {
  margin-top: clamp(1.8rem, 3.2vw, 2.6rem);
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 1rem 1.8rem;
}
.reviews__cta p {
  max-width: 46ch;
  font-size: 0.92rem;
  line-height: 1.55;
  color: rgba(200, 214, 233, 0.72);
}

/* Гравюра продолжается на самих карточках: каждая - как окно в то же небо.
   Масштаб рисунка задан в vw, тот же, что у фона секции, поэтому облака на
   карточке и за ней одной величины. Кадр у каждой свой, иначе все шесть
   показали бы один и тот же кусок.

   Цвет запечён в саму картинку, поэтому здесь обычный фон, а не маска с
   градиентом под ней: маска на восьми элементах заставляла браузер делать
   отдельный проход на каждый из них, и прокрутка спотыкалась. */
.quote::before,
.ymap::before {
  content: "";
  position: absolute;
  inset: 0;
  z-index: 0;
  border-radius: inherit;
  pointer-events: none;
  background: url("art/engraved-clouds.png") 14% 34% / 160vw auto no-repeat;
}
/* Смазанный кадр лежит поверх резкого и проступает по скорости прокрутки:
   --smear ставит скрипт. Меняется только прозрачность - это композитор умеет
   даром, в отличие от фильтра, который пришлось бы считать каждый кадр. */
.quote::after,
.ymap::after,
#reviews::after {
  content: "";
  position: absolute;
  inset: 0;
  border-radius: inherit;
  pointer-events: none;
}
/* На карточках чернила слабее, чем на фоне: множитель тот же, что был у
   постоянного слоя, иначе при смазе карточки вспыхивали бы ярче фона. */
.quote::after,
.ymap::after { opacity: calc(0.67 * var(--smear, 0)); }
#reviews::after { opacity: var(--smear, 0); }
.quote::before,
.ymap::before { opacity: calc(0.67 * (1 - var(--smear, 0))); }
#reviews::before { opacity: calc(1 - var(--smear, 0)); }

.quote::after,
.ymap::after {
  z-index: 0;
  background: url("art/engraved-clouds-smear.png") 14% 34% / 160vw auto no-repeat;
}
#reviews::after {
  z-index: -1;
  background: url("art/engraved-clouds-smear.png") center / 160vw auto no-repeat;
}
.quote--lead::after { background-position: 58% 22%; }
.wall .quote:nth-child(3)::after { background-position: 31% 62%; }
.wall .quote:nth-child(4)::after { background-position: 74% 47%; }
.wall .quote:nth-child(5)::after { background-position: 8% 70%; }
.wall .quote:nth-child(6)::after { background-position: 46% 40%; }
.ymap::after { background-position: 22% 26%; }

@media (prefers-reduced-motion: reduce) {
  #reviews { --smear: 0 !important; }
}

.quote > *,
.ymap > * { position: relative; z-index: 1; }

.quote--lead::before { background-position: 58% 22%; }
.wall .quote:nth-child(3)::before { background-position: 31% 62%; }
.wall .quote:nth-child(4)::before { background-position: 74% 47%; }
.wall .quote:nth-child(5)::before { background-position: 8% 70%; }
.wall .quote:nth-child(6)::before { background-position: 46% 40%; }
.ymap::before { background-position: 22% 26%; }

.wall { display: grid; grid-template-columns: repeat(12, 1fr); gap: clamp(1rem, 1.8vw, 1.35rem); }
.quote { grid-column: span 4; padding: clamp(1.4rem, 2.2vw, 1.8rem); border-radius: var(--r-panel); }
.quote--lead { grid-column: span 12; padding: clamp(1.9rem, 3.4vw, 2.8rem); }
.quote--lead blockquote { font-size: clamp(1.25rem, 2.4vw, 1.75rem); font-weight: 300; letter-spacing: -0.02em; line-height: 1.35; max-width: 34ch; }
.quote--wide { grid-column: span 6; }
.quote blockquote { color: rgba(234, 238, 245, 0.92); font-size: 0.95rem; }
.quote figcaption { margin-top: 1.1rem; display: flex; align-items: center; gap: 0.7rem; font-size: 0.6rem; color: #a8b4c4; }
.quote__ava {
  width: 34px;
  height: 34px;
  flex: 0 0 auto;
  display: grid;
  place-items: center;
  border-radius: 50%;
  background: linear-gradient(135deg, var(--gold-bright), #c1841f);
  color: var(--gold-ink);
  font-family: "Onest", system-ui, sans-serif;
  font-weight: 700;
  font-size: 0.95rem;
  letter-spacing: 0;
}

/* ============ 13. Вопросы ============ */

.faq__grid {
  display: grid;
  grid-template-columns: minmax(0, 0.78fr) minmax(0, 1.22fr);
  gap: clamp(2rem, 5vw, 4.5rem);
  align-items: start;
}
.faq__aside .btn { margin-top: 1.5rem; }

.qa { border-bottom: 1px solid var(--hair); }
.qa:first-child { border-top: 1px solid var(--hair); }
.qa__q {
  width: 100%;
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 1.5rem;
  padding: 1.2rem 0;
  text-align: left;
  font-size: 1.01rem;
  font-weight: 600;
  transition: color 0.2s ease;
}
.qa__q:hover { color: var(--gold); }
.qa__q i { color: var(--gold); font-size: 1.05rem; flex: 0 0 auto; transition: transform 0.3s var(--ease-out); }
.qa.open .qa__q { color: var(--gold); }
.qa.open .qa__q i { transform: rotate(180deg); }
.qa__a { display: grid; grid-template-rows: 0fr; transition: grid-template-rows 0.35s var(--ease-out); }
.qa.open .qa__a { grid-template-rows: 1fr; }
.qa__a > div { overflow: hidden; }
.qa__a p { color: var(--muted); padding-bottom: 1.3rem; max-width: 68ch; }

/* ============ 14. Финал и подвал ============ */

.final { text-align: center; padding-bottom: 0; }
.final .section__title { font-size: clamp(2.2rem, 5.2vw, 3.6rem); }
.final .btn { margin-top: 2.2rem; }

/* Полоса уходит в перспективу: осевая разметка и янтарные огни */
.runway {
  margin-top: clamp(3rem, 7vw, 5rem);
  height: clamp(150px, 22vw, 235px);
  position: relative;
  overflow: hidden;
  perspective: 240px;
  mask-image: linear-gradient(180deg, transparent, #000 40%);
  -webkit-mask-image: linear-gradient(180deg, transparent, #000 40%);
}
.runway__strip {
  position: absolute;
  inset: 0 24% -10%;
  transform: rotateX(64deg);
  transform-origin: 50% 100%;
  background: linear-gradient(180deg, #0c1322 0%, #121a2c 100%);
  border-left: 2px solid rgba(234, 238, 245, 0.26);
  border-right: 2px solid rgba(234, 238, 245, 0.26);
}
.runway__center {
  position: absolute;
  left: 50%;
  top: 0;
  bottom: 0;
  width: 5px;
  transform: translateX(-50%);
  background: repeating-linear-gradient(180deg, rgba(255, 255, 255, 0.8) 0 26px, transparent 26px 58px);
}
.runway__lights {
  position: absolute;
  top: 0;
  bottom: 0;
  width: 5px;
  background: repeating-linear-gradient(180deg, var(--gold) 0 8px, transparent 8px 44px);
  filter: drop-shadow(0 0 7px rgba(233, 168, 62, 0.9));
  animation: rw 2.6s linear infinite;
}
.runway__lights--l { left: -8px; }
.runway__lights--r { right: -8px; }
@keyframes rw { from { background-position-y: 0; } to { background-position-y: 44px; } }

.footer {
  position: relative;
  z-index: var(--z-body);
  background: linear-gradient(180deg, rgba(6, 10, 20, 0.5) 0%, #05080f 100%);
  border-top: 1px solid var(--hair);
  padding-block: clamp(3rem, 6vw, 4.5rem) 2rem;
}
.footer__grid {
  display: grid;
  grid-template-columns: minmax(0, 1.4fr) repeat(3, minmax(0, 1fr));
  gap: clamp(1.75rem, 4vw, 3rem);
}
.footer__brand p { color: var(--muted); font-size: 0.93rem; margin-top: 1rem; max-width: 40ch; }
.footer__col h4 { font-size: 0.64rem; font-weight: 500; color: var(--gold); margin-bottom: 1rem; }
.footer__col a, .footer__col p {
  display: flex;
  gap: 0.55rem;
  color: var(--muted);
  font-size: 0.91rem;
  margin-bottom: 0.55rem;
  transition: color 0.2s ease;
}
.footer__col a:hover { color: var(--text); }
.footer__col i { color: var(--dim); flex: 0 0 auto; margin-top: 0.22em; }
.footer__bar {
  margin-top: clamp(2rem, 4vw, 3rem);
  padding-top: 1.4rem;
  border-top: 1px solid rgba(140, 175, 225, 0.08);
  display: flex;
  flex-wrap: wrap;
  justify-content: space-between;
  gap: 0.75rem;
}
.footer__bar p,
.footer__bar a { font-size: 0.6rem; letter-spacing: 0.09em; color: var(--dim); }
.footer__bar a { transition: color 0.2s ease; }
.footer__bar a:hover { color: var(--gold); }

.wa {
  position: fixed;
  right: 1.5rem;
  bottom: 1.5rem;
  z-index: var(--z-float);
  width: 54px;
  height: 54px;
  display: grid;
  place-items: center;
  border-radius: 50%;
  background: linear-gradient(180deg, #182136 0%, #0d1424 100%);
  border: 1px solid #2c3750;
  color: var(--text);
  box-shadow: inset 0 1px 0 rgba(160, 195, 240, 0.14), 0 14px 34px -16px #000;
  transition: border-color 0.25s ease, color 0.25s ease, transform 0.25s var(--ease-out);
}
.wa i { font-size: 1.5rem; }
.wa:hover { border-color: var(--gold); color: var(--gold); transform: translateY(-3px); }

.tabbar { display: none; }

.toast {
  position: fixed;
  left: 50%;
  bottom: 2rem;
  z-index: 120;
  transform: translate(-50%, 140%);
  padding: 0.8rem 1.4rem;
  border-radius: 999px;
  background: linear-gradient(155deg, #182136 0%, #0d1424 100%);
  border: 1px solid var(--panel-brd);
  font-size: 0.9rem;
  opacity: 0;
  pointer-events: none;
  transition: transform 0.35s var(--ease-out), opacity 0.3s ease;
}
.toast.show { transform: translate(-50%, 0); opacity: 1; pointer-events: auto; }

/* ============ 15. Адаптив ============ */

@media (max-width: 1080px) {
  /* На узком экране сначала рассказ про лайнер, снимки следом:
     иначе гость листает три кадра, не понимая, о какой кабине речь */
  .sim { grid-template-columns: 1fr; gap: 0; }
  .sim__body { display: contents; }
  .sim__body h3 { order: 1; }
  .sim__body p { order: 2; }
  .sim__media,
  .sim--flip .sim__media { order: 3; margin: 0.5rem 0 1.5rem; }
  .sim__body .chips { order: 4; }
  /* Кнопка как элемент сетки растянулась бы во всю ширину: держим её по тексту */
  .sim__body .btn { order: 5; justify-self: start; }
  .faq__grid { grid-template-columns: 1fr; }
  .terms { grid-template-columns: 1fr; }
  .terms .btn { justify-self: start; }
  .more__cell, .more__cell:nth-child(2), .more__cell:nth-child(3) { grid-column: span 6; }
  .quote { grid-column: span 6; }
}

@media (max-width: 900px) {
  /* Шапка уходит выше края экрана: полосу статуса закрывает её собственный фон */
  .nav__links, .nav__phone { display: none; }
  .nav__burger { display: block; }
  /* То же сверху, что и снизу: над шапкой её цвет, а не просвет */

}

@media (max-width: 700px) {
  html { scroll-padding-top: 76px; }
  .toast { bottom: calc(60px + env(safe-area-inset-bottom, 0px) + 0.8rem); }
  body { padding-bottom: calc(60px + 24px + env(safe-area-inset-bottom, 0px)); }

  .hero { min-height: 90svh; }

  /* На телефоне колонка счисления встаёт над заголовком строкой */
  .hero__inner { grid-template-columns: 1fr; gap: 2rem; }
  .sky--l1 .sky__track { animation-duration: 380s; }
  .sky--l2 .sky__track { animation-duration: 255s; }
  .sky--l3 .sky__track { animation-duration: 170s; }
  .sky--l4 .sky__track { animation-duration: 120s; }
  .fixlist { grid-template-columns: repeat(2, 1fr); gap: 0.9rem 1.5rem; }

  .hero__cta { flex-direction: column; align-items: stretch; }
  .hero__cta .btn { width: 100%; }

  /* Цифра встаёт над пояснением */
  .tally__row { grid-template-columns: 1fr; gap: 0.9rem; }

  /* На телефоне бронирование живёт в нижней панели, поэтому та же
     кнопка в шапке не нужна: одно действие двумя кнопками */
  .nav__actions .btn { display: none; }

  /* На телефоне лента листается пальцем, стрелки только съедают место */
  /* На телефоне строка складывается в два уровня: снимок слева,
     направление и программа справа, коды уходят под них */
  .board__head { display: none; }
  .board__row {
    grid-template-columns: 68px minmax(0, 1fr) 1.4rem;
    grid-template-areas: "shot dest go" "shot tag go";
    gap: 0.2rem 0.9rem;
    padding-block: 0.7rem;
  }
  .board__shot { grid-area: shot; }
  .board__dest { grid-area: dest; }
  .board__tag  { grid-area: tag; }
  .board__go   { grid-area: go; align-self: center; }
  .board__code { display: none; }
  .deck__grid { background-size: 62px 62px; }
  .more__cell, .more__cell:nth-child(2), .more__cell:nth-child(3),
  .quote, .quote--lead, .quote--wide { grid-column: span 12; }
  .ymap { grid-template-columns: 1fr; }
  .ymap__frame { height: 27rem; }
  .reviews__cta { flex-direction: column; align-items: flex-start; }
  .footer__grid { grid-template-columns: 1fr 1fr; }
  .wa { display: none; }

  /* Микроподписи набраны узким моноширинным: на макете это 9-10px, и на
     экране телефона они перестают читаться. Поднимаем только на телефоне -
     на широком экране размер задуман и остаётся прежним. */
  /* Журнал рейса на телефоне переезжает наверх и ложится на светлую часть
     облаков: подписи давали контраст 1.9 при норме 4.5. Плашку под них не
     ставим - вместо этого на узком экране кадр идёт глубже, а подписи светлее.
     Читается, а коробки в шапке не появляется. */
  .hero__bg { opacity: 0.44; }
  .fixlist dt { color: #cfe2f0; }
  .fixlist dd { color: #f2f0e9; }

  /* Пальцу нужно 44px. Строчные ссылки подвала и мелкие кнопки давали
     20-26px: добавляем высоту отступом, размер шрифта не трогаем. */
  .footer__bar a,
  .nav__logo,
  .promo,
  .ymap__route {
    min-height: 44px;
    display: inline-flex;
    align-items: center;
  }
  /* Ссылки подвала остаются блочными: строчные inline-flex выстраивались
     в одну строку и сливались в сплошной текст */
  .footer__col a {
    display: flex;
    align-items: center;
    min-height: 44px;
    margin-bottom: 0.15rem;
  }

  .footer__bar a,
  .footer__bar p,
  .tally__label,
  .board__tag { font-size: 0.72rem; letter-spacing: 0.08em; }

  .chip,
  .fixlist dt,
  .shot__tag,
  .stage__time,
  .plan__time,
  .plan__badge,
  .board__head,
  .more__cell b,
  .footer__col h4,
  .ymap__eyebrow,
  .marquee__track > span,
  .quote figcaption { font-size: 0.72rem; letter-spacing: 0.1em; }
  .board__code { font-size: 0.7rem; }

  /* Меню одно на весь сайт: разметка и размеры совпадают с подстраницами,
     чтобы переход с главной не менял высоту и положение панели. */
  /* Шапка на телефоне сплошная: у градиента низ прозрачный, и под ним видно
     страницу - получался шов с полосой над меню. */
  .nav,
  .nav.is-stuck {
    padding-block: 0.65rem;
    background: var(--chrome);
    backdrop-filter: none;
    -webkit-backdrop-filter: none;
  }

  .tabbar {
    position: fixed;
    left: 0;
    right: 0;
    bottom: 0;
    z-index: var(--z-tabbar);
    display: flex;
    align-items: stretch;
    justify-content: space-around;
    height: calc(60px + env(safe-area-inset-bottom, 0px));
    padding: 0 0.4rem env(safe-area-inset-bottom, 0px);
    background: var(--chrome);
    border-top: 1px solid var(--hair);
  }
  .tabbar__item {
    flex: 1;
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    gap: 0.18rem;
    color: rgba(242, 240, 233, 0.78);
    font-size: 0.75rem;
    font-weight: 650;
    letter-spacing: 0.01em;
  }
  .tabbar__item i { font-size: 1.25rem; }
  .tabbar__item:active { transform: scale(0.94); }
  .tabbar__item--cta { position: relative; color: var(--gold-ink); }
  .tabbar__item--cta i {
    width: 38px;
    height: 38px;
    display: grid;
    place-items: center;
    border-radius: 50%;
    background: linear-gradient(135deg, var(--gold-bright), #d9902b);
    font-size: 1.15rem;
  }
  .tabbar__item--cta span { color: var(--gold); }
}

@media (max-width: 460px) {
  .footer__grid { grid-template-columns: 1fr; }
}

/* ============ Меньше движения ============ */

@media (prefers-reduced-motion: reduce) {
  html, body { scroll-behavior: auto; }
  *, *::before, *::after {
    animation-duration: 0.001ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: 0.001ms !important;
  }
  .js [data-reveal].armed { transform: none; }
  /* Без движения прилипание бессмысленно: секция становится обычной */
  .flow { height: auto; padding-block: clamp(5.5rem, 11vw, 10rem); }
  .flow__pin { position: static; height: auto; }
  .deck__stars i { opacity: 0.55; }
}

/* Вход по коду сертификата в финальной секции: не конкурирует с главной
   кнопкой, но стоит там же, где человек думает про сертификаты */
.final__vch {
  max-width: 46rem;
  margin: clamp(2rem, 5vw, 3.25rem) auto 0;
  text-align: left;
}

/* ============ Телефон: прокрутка внутри страницы ============
   В iOS 26 закреплённые элементы обрезаются по видимой области, а сам
   документ продолжается под плавающими кнопками Safari - в этой полосе и
   видно содержимое страницы. Перекрыть её нечем: браузер туда не пускает.
   Поэтому документ перестаёт прокручиваться, а прокрутка уезжает внутрь
   body: видимая область совпадает с раскладочной, и шапка с панелью встают
   вплотную к краям. */
@media (max-width: 700px) {
  html.shell-scroll {
    height: 100%;
    overflow: hidden;
  }
  html.shell-scroll body {
    height: 100%;
    overflow-y: auto;
    overflow-x: hidden;
    -webkit-overflow-scrolling: touch;
    overscroll-behavior-y: none;
    scroll-behavior: smooth;
    scroll-padding-top: 76px;
  }
}

/* Кнопка чата: элемент button, поэтому сбрасываем браузерные поля.
   is-busy показывает, что виджет загружается — нажатие не остаётся без ответа. */
.wa[type="button"], .wa-float[type="button"] {
  padding: 0;
  font: inherit;
  cursor: pointer;
  appearance: none;
  -webkit-appearance: none;
}
.wa.is-busy, .wa-float.is-busy { opacity: 0.75; cursor: progress; }
.wa.is-busy i, .wa-float.is-busy i { animation: chat-pulse 0.9s ease-in-out infinite; }
@keyframes chat-pulse { 0%, 100% { opacity: 0.45; } 50% { opacity: 1; } }
