/* ============================================================
   VERVE — базовый слой: токены, сетка, компоненты.
   Внешний вид задают темы: theme-noir / theme-gallery / theme-playbill.
   Все значения ниже — переменные, их на лету меняет Design Lab (клавиша D).
   ============================================================ */

:root {
  /* цвет */
  --bg:        #0b0908;
  --bg-2:      #141010;
  --bg-3:      #1d1717;
  --ink:       #f4ece8;
  --ink-2:     #cdbfb9;
  --muted:     #8b7d78;
  --accent:    #e7bcc3;
  --accent-2:  #c1868f;
  --gold:      #b9945f;
  --line:      rgba(244, 236, 232, .14);

  /* шрифты */
  --font-display: 'Cormorant Garamond', Georgia, serif;
  --font-body:    'Inter', system-ui, sans-serif;
  --font-script:  'Pinyon Script', cursive;

  /* типографика */
  --fs-hero:      clamp(3.2rem, 12vw, 11rem);
  --fs-h2:        clamp(2rem, 4.5vw, 4rem);
  --fs-h3:        clamp(1.25rem, 2vw, 1.75rem);
  --fs-body:      clamp(1rem, 1.05vw, 1.125rem);
  --lh-body:      1.7;
  --tracking-display: -0.01em;
  --tracking-kicker:  0.42em;
  --display-weight:   300;

  /* сетка и форма */
  --maxw:        1440px;
  --gutter:      clamp(1.25rem, 4vw, 4.5rem);
  /* Отступ плакатной рамки первого экрана от края окна. Вынесен в токен,
     потому что от него должны отступать все плавающие кнопки: раньше рамка
     шла ровно по ним и линия резала «Пригласить» и «Оставить отзыв». */
  --frame:       clamp(10px, 1.6vw, 22px);
  --frame-gap:   .8rem;
  --section-y:   clamp(5rem, 11vh, 10rem);
  --grid-gap:    clamp(.5rem, 1.2vw, 1.25rem);
  --radius:      0px;
  --img-radius:  0px;
  --grid-cols:   3;

  /* движение */
  --ease:  cubic-bezier(.22, 1, .36, 1);
  --dur:   .7s;
}

/* ---------- сброс ---------- */
*, *::before, *::after { box-sizing: border-box; }
html { -webkit-text-size-adjust: 100%; scroll-behavior: smooth; }
@media (prefers-reduced-motion: reduce) {
  html { scroll-behavior: auto; }
  *, *::before, *::after { animation-duration: .01ms !important; transition-duration: .01ms !important; }
}
body {
  margin: 0;
  background: var(--bg);
  color: var(--ink);
  font-family: var(--font-body);
  font-size: var(--fs-body);
  line-height: var(--lh-body);
  -webkit-font-smoothing: antialiased;
  overflow-x: hidden;
}
img, svg, video { display: block; max-width: 100%; }
a { color: inherit; text-decoration: none; }
button { font: inherit; color: inherit; background: none; border: 0; cursor: pointer; }
h1, h2, h3, h4 { margin: 0; font-weight: var(--display-weight); font-family: var(--font-display); line-height: 1.02; letter-spacing: var(--tracking-display); }
p { margin: 0; }
:focus-visible { outline: 2px solid var(--accent); outline-offset: 3px; }

/* ---------- утилиты ---------- */
.wrap { width: 100%; max-width: var(--maxw); margin-inline: auto; padding-inline: var(--gutter); }
.section { padding-block: var(--section-y); position: relative; }
.kicker {
  font-family: var(--font-body);
  font-size: .68rem;
  font-weight: 500;
  letter-spacing: var(--tracking-kicker);
  text-transform: uppercase;
  color: var(--accent);
  margin: 0 0 1.5rem;
}
.lead { font-size: clamp(1.05rem, 1.5vw, 1.35rem); color: var(--ink-2); max-width: 62ch; }
.muted { color: var(--muted); }
.rule { height: 1px; background: var(--line); border: 0; margin: 0; }
.visually-hidden {
  position: absolute; width: 1px; height: 1px; overflow: hidden;
  clip: rect(0 0 0 0); clip-path: inset(50%); white-space: nowrap;
}

/* Появление при скролле.
   Прячем только если JS точно работает (класс .js ставится инлайном в <head>).
   Без этого при ошибке скрипта или отключённом JS половина сайта осталась бы
   невидимой — контент никогда не должен зависеть от анимации. */
.js .reveal { opacity: 0; transform: translateY(28px); transition: opacity var(--dur) var(--ease), transform var(--dur) var(--ease); }
.js .reveal.is-in { opacity: 1; transform: none; }

/* ---------- шапка ---------- */
.nav {
  position: fixed; inset: 0 0 auto; z-index: 60;
  display: flex; align-items: center; gap: 1.5rem;
  padding: 1.1rem var(--gutter);
  transition: background .4s var(--ease), backdrop-filter .4s var(--ease), padding .4s var(--ease);
}
.nav.is-stuck {
  background: var(--bg);                                     /* фолбэк для старых Safari/Firefox */
  background: color-mix(in srgb, var(--bg) 82%, transparent);
  -webkit-backdrop-filter: blur(14px);
  backdrop-filter: blur(14px);
  padding-block: .7rem;
}
.nav__logo { display: flex; align-items: center; gap: .7rem; color: var(--ink); }
.nav__logo svg { width: 30px; height: auto; }
.nav__logo b { font-family: var(--font-display); font-weight: 400; font-size: 1.15rem; letter-spacing: .3em; text-transform: uppercase; }
.nav__links { display: flex; gap: 1.75rem; margin-left: auto; }
.nav__links a {
  font-size: .74rem; letter-spacing: .18em; text-transform: uppercase; color: var(--ink-2);
  position: relative; padding-block: .3rem; transition: color .3s;
}
.nav__links a::after {
  content: ''; position: absolute; left: 0; bottom: 0; width: 0; height: 1px;
  background: var(--accent); transition: width .4s var(--ease);
}
.nav__links a:hover { color: var(--ink); }
.nav__links a:hover::after { width: 100%; }
.nav__cta {
  border: 1px solid var(--line); padding: .55rem 1.15rem; border-radius: var(--radius);
  font-size: .7rem; letter-spacing: .18em; text-transform: uppercase;
  transition: border-color .3s, background .3s, color .3s;
}
.nav__cta:hover { border-color: var(--accent); background: var(--accent); color: var(--bg); }
/* переключатель языка: два слова через косую черту, активное — акцентом */
.lang { display: flex; align-items: center; }
.lang button {
  padding: .3rem .1rem; font-size: .72rem; letter-spacing: .14em; font-weight: 500;
  color: var(--muted); border-radius: 0; transition: color .3s;
}
.lang button:hover { color: var(--ink); }
.lang button[aria-pressed="true"] { color: var(--accent); }
.lang button + button::before {
  content: '/'; color: var(--line); margin-inline: .45rem; font-weight: 400;
}

.nav__burger { display: none; margin-left: auto; width: 34px; height: 34px; position: relative; }
.nav__burger span { position: absolute; left: 6px; right: 6px; height: 1px; background: var(--ink); transition: transform .35s var(--ease), opacity .2s; }
.nav__burger span:nth-child(1) { top: 13px; }
.nav__burger span:nth-child(2) { top: 20px; }
body.menu-open .nav__burger span:nth-child(1) { transform: translateY(3.5px) rotate(45deg); }
body.menu-open .nav__burger span:nth-child(2) { transform: translateY(-3.5px) rotate(-45deg); }

@media (max-width: 900px) {
  .nav__burger { display: block; }
  .nav__cta { display: none; }
  .nav__links {
    position: fixed; inset: 0; margin: 0; flex-direction: column;
    align-items: center; justify-content: center; gap: 1.6rem;
    background: var(--bg); opacity: 0; pointer-events: none; transition: opacity .4s var(--ease);
  }
  .nav__links a { font-size: 1.4rem; font-family: var(--font-display); letter-spacing: .1em; }
  body.menu-open .nav__links { opacity: 1; pointer-events: auto; }
  body.menu-open { overflow: hidden; }

  /* backdrop-filter создаёт containing block для потомков с position: fixed —
     ровно как transform. Пока он висел на прокрученной шапке, подложка меню
     считалась не от вьюпорта, а от полоски заголовка: фон закрывал её одну,
     а пункты вываливались наружу и ложились на текст страницы.
     Тестер поймал это на Android, воспроизводится везде после прокрутки.
     Пока меню открыто, фильтр снимаем — размывать всё равно нечего,
     сверху лежит непрозрачная подложка. */
  body.menu-open .nav.is-stuck {
    background: transparent;
    -webkit-backdrop-filter: none;
    backdrop-filter: none;
  }

  /* Плавающие плашки лежат выше подложки меню (z-index 300 против 60) —
     пока меню открыто, прячем их, иначе они висят поверх пунктов. */
  body.menu-open .invite,
  body.menu-open .corner { opacity: 0; pointer-events: none; }
}

/* ---------- герой ---------- */
.hero {
  position: relative;
  /* z-index + isolation запирают слой видео внутри героя: без этого аппаратно
     ускоренное видео в WebKit и headless-движках всплывает поверх шапки */
  z-index: 0;
  isolation: isolate;
  min-height: 100vh;   /* фолбэк: браузеры без svh (Safari < 15.4) */
  min-height: 100svh;
  display: grid; overflow: hidden;
}
.hero__media { position: absolute; inset: 0; z-index: 0; }
.hero__media img, .hero__media video { width: 100%; height: 100%; object-fit: cover; }
/* Видео подставляется поверх кадра и проявляется, когда готово играть */
.hero__media video { position: absolute; inset: 0; }
.hero__scrim { position: absolute; inset: 0; z-index: 1; }
.hero__inner { position: relative; z-index: 2; display: grid; align-content: center; gap: 1.5rem; padding: 8rem var(--gutter) 5rem; }
.hero__logo { width: clamp(56px, 9vw, 96px); color: var(--ink); }   /* бант — фирменный знак */
.hero__title { font-size: var(--fs-hero); }
.hero__script { font-family: var(--font-script); font-size: clamp(2.5rem, 7vw, 6rem); color: var(--accent); line-height: .9; }
/* script-слово стоит под именем: подтягиваем его к заголовку */
.hero__script--after { margin-top: -1rem; }
.hero__script:empty { display: none; }
.hero__sub { letter-spacing: .3em; text-transform: uppercase; font-size: .78rem; color: var(--ink-2); }
.hero__scroll {
  position: absolute; z-index: 2; left: 50%; bottom: 2rem; transform: translateX(-50%);
  font-size: .62rem; letter-spacing: .3em; text-transform: uppercase; color: var(--muted);
  display: grid; justify-items: center; gap: .6rem;
}
.hero__scroll i { display: block; width: 1px; height: 46px; background: linear-gradient(var(--accent), transparent); }
/* width:100% обязателен: без него grid-элемент сжимается по min-content и кнопки схлопываются */
.hero__actions { width: 100%; margin-top: 1.5rem; display: flex; gap: .75rem; flex-wrap: wrap; }

/* ---------- кнопки ---------- */
.btn {
  display: inline-flex; align-items: center; gap: .7rem;
  padding: .95rem 2rem; border: 1px solid var(--accent); border-radius: var(--radius);
  font-size: .74rem; letter-spacing: .22em; text-transform: uppercase; color: var(--ink);
  transition: background .4s var(--ease), color .4s var(--ease), border-color .4s;
}
.btn:hover { background: var(--accent); color: var(--bg); }
.btn--solid { background: var(--accent); color: var(--bg); }
.btn--solid:hover { background: transparent; color: var(--ink); }
.btn--ghost { border-color: var(--line); }
.btn--ghost:hover { border-color: var(--accent); }

/* ---------- о нас ---------- */
.about__grid { display: grid; gap: clamp(2rem, 5vw, 5rem); grid-template-columns: 1fr; }
@media (min-width: 900px) { .about__grid { grid-template-columns: 1fr 1.15fr; } }
.about__body { display: grid; gap: 1.4rem; }
/* Число колонок задаёт renderAbout() по количеству карточек: было жёстко
   4, и когда цифра осталась одна, три пустые колонки просвечивали
   подложкой (в «Афише» она акцентно-розовая). */
.stats { display: grid; grid-template-columns: repeat(var(--stats-sm, 2), 1fr); gap: 1px; background: var(--line); margin-top: 3rem; }
@media (min-width: 720px) { .stats { grid-template-columns: repeat(var(--stats-lg, 4), 1fr); } }
.stat { background: var(--bg); padding: 1.6rem 1.2rem; display: grid; gap: .4rem; }
.stat b { font-family: var(--font-display); font-size: clamp(2rem, 3.5vw, 3rem); font-weight: var(--display-weight); line-height: 1; color: var(--accent); }
.stat span { font-size: .68rem; letter-spacing: .16em; text-transform: uppercase; color: var(--muted); }

/* ---------- премьера ---------- */
.premiere { border-bottom: 1px solid var(--line); }
.premiere__title {
  font-family: var(--font-display); font-weight: var(--display-weight);
  font-size: clamp(2.4rem, 8vw, 6rem); line-height: .95; letter-spacing: .02em;
  text-transform: uppercase; margin: .3rem 0 0;
}
/* Дата и город — то, ради чего раздел и стоит сразу за героем.
   Держим их крупнее всего остального текста и не даём переносить город. */
.premiere__when {
  font-family: var(--font-display); font-weight: var(--display-weight);
  font-size: clamp(1.5rem, 4.5vw, 3rem); line-height: 1.15;
  color: var(--accent); margin: .9rem 0 0;
}
.premiere__lead { font-size: var(--fs-body); color: var(--ink-2); margin: 1rem 0 0; max-width: 52ch; }
.premiere__cta { margin-top: 2rem; }
.premiere__quote {
  margin: 3.5rem 0 0; padding-left: 1.25rem; border-left: 2px solid var(--accent-2);
  display: grid; gap: .3rem; font-family: var(--font-display);
  font-size: clamp(1.15rem, 2.4vw, 1.9rem); line-height: 1.35; color: var(--ink);
}
.premiere__sub {
  font-family: var(--font-display); font-weight: var(--display-weight);
  font-size: var(--fs-h3); text-transform: uppercase; letter-spacing: .1em;
  margin: 3.5rem 0 1.5rem;
}
.premiere__fine { margin: 2.5rem 0 0; font-size: .74rem; line-height: 1.6; color: var(--muted); }

.timeline { display: grid; gap: 0; border-top: 1px solid var(--line); }
.tl { padding: 1.4rem 0; border-bottom: 1px solid var(--line); display: grid; gap: .35rem; }
@media (min-width: 860px) { .tl { grid-template-columns: 7rem 1fr; gap: .35rem 1.5rem; align-items: baseline; } }
.tl__time { font-family: var(--font-display); font-size: 1.05rem; color: var(--accent-2); letter-spacing: .08em; }
.tl__t { font-family: var(--font-display); font-size: var(--fs-h3); font-weight: var(--display-weight); }
.tl__d { color: var(--ink-2); font-size: .95rem; max-width: 62ch; }
@media (min-width: 860px) { .tl__t, .tl__d { grid-column: 2; } }

/* Дресс-код и «мест ограниченное количество» — одна строка через черту.
   Пакета мест, цены и своей формы заявки больше нет: покупка идёт на Timepad. */
.seats__meta { margin: 0; font-size: .72rem; letter-spacing: .16em; text-transform: uppercase; color: var(--muted); }
.seats__meta i { display: inline-block; width: 1px; height: .7em; background: var(--line); margin: 0 .7rem; }

/* Вступление «Как устроен вечер» */
.premiere__quote--opener { max-width: 46ch; }
.premiere__note { margin: 1rem 0 0; font-size: .8rem; letter-spacing: .08em; color: var(--muted); }
.premiere__about { display: grid; gap: 1.2rem; }

/* ---------- галерея ---------- */
.filters { display: flex; flex-wrap: wrap; gap: .5rem; margin-bottom: 2.5rem; }
.filters button {
  padding: .5rem 1.1rem; border: 1px solid var(--line); border-radius: var(--radius);
  font-size: .68rem; letter-spacing: .16em; text-transform: uppercase; color: var(--muted);
  transition: color .3s, border-color .3s, background .3s;
}
.filters button:hover { color: var(--ink); border-color: var(--ink-2); }
.filters button[aria-pressed="true"] { color: var(--bg); background: var(--accent); border-color: var(--accent); }

.grid { display: grid; gap: var(--grid-gap); grid-template-columns: repeat(2, 1fr); }
@media (min-width: 720px)  { .grid { grid-template-columns: repeat(var(--grid-cols), 1fr); } }

.tile {
  position: relative; overflow: hidden; border-radius: var(--img-radius);
  background: var(--bg-2); cursor: zoom-in; display: block; width: 100%;
  transition: opacity .5s var(--ease), transform .5s var(--ease);
}
.tile picture { display: block; width: 100%; height: 100%; }
.tile img { width: 100%; height: 100%; object-fit: cover; transition: transform 1.1s var(--ease), filter .6s; }
.tile:hover img { transform: scale(1.05); }
.tile__cap {
  position: absolute; inset: auto 0 0; padding: 2.5rem 1rem .9rem;
  background: linear-gradient(transparent, rgba(0,0,0,.72));
  font-size: .68rem; letter-spacing: .14em; text-transform: uppercase; color: #fff;
  opacity: 0; transform: translateY(8px); transition: opacity .4s var(--ease), transform .4s var(--ease);
}
.tile:hover .tile__cap { opacity: 1; transform: none; }
.tile[hidden] { display: none; }

/* ---------- карточки тизеров (живут в сетке «Медиа») ---------- */
.vcard { position: relative; border-radius: var(--img-radius); overflow: hidden; background: var(--bg-2); cursor: pointer; width: 100%; }
.vcard[hidden] { display: none; }
.vcard img { width: 100%; aspect-ratio: 16 / 10; object-fit: cover; transition: transform 1.1s var(--ease), opacity .5s; }
.vcard:hover img { transform: scale(1.04); opacity: .8; }
.vcard__play {
  position: absolute; inset: 0; display: grid; place-items: center; pointer-events: none;
}
.vcard__play i {
  width: 74px; height: 74px; border: 1px solid rgba(255,255,255,.7); border-radius: 50%;
  display: grid; place-items: center; -webkit-backdrop-filter: blur(3px); backdrop-filter: blur(3px);
  transition: background .4s var(--ease), border-color .4s, transform .4s var(--ease);
}
.vcard__play i::after { content: ''; border-left: 12px solid #fff; border-block: 8px solid transparent; margin-left: 4px; }
.vcard:hover .vcard__play i { background: var(--accent); border-color: var(--accent); transform: scale(1.08); }
.vcard:hover .vcard__play i::after { border-left-color: var(--bg); }
.vcard__meta { position: absolute; inset: auto 0 0; padding: 3rem 1.25rem 1.1rem; background: linear-gradient(transparent, rgba(0,0,0,.8)); }
.vcard__meta b { display: block; font-family: var(--font-display); font-size: 1.35rem; font-weight: var(--display-weight); color: #fff; }
.vcard__meta span { font-size: .66rem; letter-spacing: .18em; text-transform: uppercase; color: rgba(255,255,255,.65); }

/* ---------- форматы ---------- */
/* Число колонок ставит renderFormats() по количеству карточек: жёсткие
   4 колонки при пяти форматах оставляли сиротскую строку 4+1. */
.formats { display: grid; gap: 1px; background: var(--line); }
@media (min-width: 700px)  { .formats { grid-template-columns: repeat(2, 1fr); } }
@media (min-width: 1100px) { .formats { grid-template-columns: repeat(var(--formats-lg, 4), 1fr); } }
.format { background: var(--bg); padding: clamp(1.6rem, 2.5vw, 2.4rem); display: grid; align-content: start; gap: .9rem; min-height: 15rem; transition: background .4s var(--ease); }
.format:hover { background: var(--bg-2); }
.format h3 { font-size: var(--fs-h3); }
.format p { color: var(--ink-2); font-size: .95rem; }
.format span { margin-top: auto; font-size: .66rem; letter-spacing: .18em; text-transform: uppercase; color: var(--accent-2); }

/* ---------- контакты ---------- */
.contact__grid { display: grid; gap: clamp(2rem, 5vw, 4rem); }
@media (min-width: 900px) { .contact__grid { grid-template-columns: 1fr 1fr; } }
.field { display: grid; gap: .5rem; margin-bottom: 1.25rem; }
.field label { font-size: .66rem; letter-spacing: .18em; text-transform: uppercase; color: var(--muted); }
.field input, .field textarea {
  background: transparent; border: 0; border-bottom: 1px solid var(--line);
  color: var(--ink); font: inherit; padding: .7rem 0; border-radius: 0;
  transition: border-color .3s;
}
.field input:focus, .field textarea:focus { outline: 0; border-bottom-color: var(--accent); }
.field textarea { resize: vertical; min-height: 5rem; }
.contact__links { display: grid; gap: 1rem; }
.contact__links a { font-family: var(--font-display); font-size: clamp(1.4rem, 2.6vw, 2.2rem); font-weight: var(--display-weight); transition: color .3s; }
.contact__links a:hover { color: var(--accent); }
/* Знак мессенджера набирается заодно с текстом: размер в em, цвет — текущий,
   поэтому он одинаково ведёт себя при наведении и в любой из тем. */
.contact__tg { display: inline-flex; align-items: center; gap: .38em; }
.contact__tg svg { width: .78em; height: .78em; fill: currentColor; flex: none; }
/* Состояния формы заявки */
#bookNote.is-err { color: var(--accent); }
.seat__ok { display: grid; gap: .6rem; padding: 2rem 0; }
.seat__ok b { font-family: var(--font-display); font-size: var(--fs-h3); font-weight: var(--display-weight); }
.seat__ok p { color: var(--ink-2); font-size: .95rem; margin: 0; }
.contact__beta {
  margin-top: .75rem; font-size: .78rem; line-height: 1.5; color: var(--muted);
  border-left: 2px solid var(--accent-2); padding-left: .9rem; max-width: 42ch;
}

/* ---------- док быстрых действий ---------- */
/* Общий контейнер для «Позовите нас», «Пригласить на площадку» и «Медиа»:
   по центру нижнего края, чтобы кнопки не разъезжались по углам.
   Сам док кликов не ловит — только его содержимое. */
.dock {
  position: fixed; z-index: 300;
  left: 0; right: 0;
  bottom: calc(var(--frame) + var(--frame-gap));
  display: flex; justify-content: center; align-items: center;
  gap: .6rem; padding: 0 1rem;
  pointer-events: none;
}

/* Плашка выезжает, когда герой ушёл вверх, и прячется на самом блоке
   контактов — там она бессмысленна и только перекрывает форму. */
.invite {
  pointer-events: auto;
  display: flex; align-items: center; gap: .5rem;
  padding: .45rem .45rem .45rem .95rem;
  border: 1px solid var(--line); border-radius: 999px;
  background: var(--bg-2);
  box-shadow: 0 14px 34px -16px rgba(0, 0, 0, .9);
  opacity: 0; transform: translateY(160%);
  transition: opacity .4s var(--ease), transform .5s var(--ease);
}
.invite[hidden] { display: none; }
.invite.is-in { opacity: 1; transform: none; }
.invite__cta {
  font-size: .68rem; letter-spacing: .16em; text-transform: uppercase;
  color: var(--ink); white-space: nowrap; transition: color .3s;
}
.invite__cta:hover { color: var(--accent); }
.invite__links { display: flex; gap: .3rem; }
.invite__links a {
  width: 34px; height: 34px; display: grid; place-items: center;
  border: 1px solid var(--line); border-radius: 50%; color: var(--ink-2);
  transition: background .25s, border-color .25s, color .25s;
}
.invite__links a:hover { background: var(--accent); border-color: var(--accent); color: var(--bg); }
.invite__links svg { width: 15px; height: 15px; fill: currentColor; }
@media (max-width: 420px) {
  .invite { padding-left: .8rem; }
  .invite__cta { font-size: .62rem; letter-spacing: .12em; }
}

/* ---------- кнопки «Пригласить на площадку» и «Медиа» ---------- */
/* Живут в доке рядом с быстрой связью. Появляются, как только герой ушёл
   вверх — на первом экране хватает собственной плашки премьеры. */
.corner {
  pointer-events: auto;
  display: flex; align-items: center; gap: .5rem;
  opacity: 0; transform: translateY(160%);
  transition: opacity .4s var(--ease), transform .5s var(--ease);
}
.corner[hidden] { display: none; }
.corner.is-in { opacity: 1; transform: none; }
.corner__btn {
  display: inline-block; padding: .6rem 1.15rem;
  border: 1px solid var(--line); border-radius: 999px;
  background: var(--bg-2); color: var(--ink);
  font-size: .68rem; letter-spacing: .16em; text-transform: uppercase; white-space: nowrap;
  box-shadow: 0 14px 34px -16px rgba(0, 0, 0, .9);
  transition: background .3s, border-color .3s, color .3s;
}
.corner__btn:hover { border-color: var(--accent); color: var(--accent); }
.corner__btn--solid { background: var(--accent); border-color: var(--accent); color: var(--bg); }
.corner__btn--solid:hover { background: var(--bg-2); color: var(--ink); }

/* На телефоне три кнопки в одну строку не помещаются — док складывается
   в стопку по центру: быстрая связь сверху, пара кнопок под ней. */
@media (max-width: 700px) {
  .dock { flex-direction: column; gap: .5rem; }
  .corner__btn { font-size: .62rem; padding: .5rem .95rem; }
}

/* ---------- подвал ---------- */
.footer { padding: 3rem var(--gutter); border-top: 1px solid var(--line); display: flex; flex-wrap: wrap; gap: 1.5rem; align-items: center; }
.footer small { font-size: .68rem; letter-spacing: .14em; text-transform: uppercase; color: var(--muted); }
.footer .footer__bow { width: 40px; color: var(--accent); }

/* ---------- лайтбокс ---------- */
/* z-index выше дока (300): раньше плашки ложились поверх лайтбокса
   и на телефоне перекрывали стрелки листания. Вдобавок при открытом
   лайтбоксе док гасится совсем — иначе просвечивал бы сквозь подложку. */
body.lb-open .dock { opacity: 0; pointer-events: none; }
.lb { position: fixed; inset: 0; z-index: 400; display: none; background: rgba(6,4,4,.96); -webkit-backdrop-filter: blur(8px); backdrop-filter: blur(8px); }
.lb.is-open { display: grid; place-items: center; }
.lb__stage { max-width: min(94vw, 1500px); max-height: 88vh; display: grid; place-items: center; }
.lb__stage img, .lb__stage video { max-width: min(94vw, 1500px); max-height: 88vh; width: auto; height: auto; object-fit: contain; }
.lb__close, .lb__prev, .lb__next {
  position: absolute; z-index: 2; width: 52px; height: 52px; display: grid; place-items: center;
  color: var(--ink); border: 1px solid rgba(255,255,255,.18); border-radius: 50%;
  transition: background .3s, border-color .3s, color .3s;
}
.lb__close:hover, .lb__prev:hover, .lb__next:hover { background: var(--accent); border-color: var(--accent); color: #000; }
.lb__close { top: 1.5rem; right: 1.5rem; font-size: 1.3rem; line-height: 1; }
.lb__prev { left: 1.5rem; top: 50%; transform: translateY(-50%); }
.lb__next { right: 1.5rem; top: 50%; transform: translateY(-50%); }
.lb__cap { position: absolute; left: 0; right: 0; bottom: 1.4rem; text-align: center; font-size: .7rem; letter-spacing: .16em; text-transform: uppercase; color: var(--muted); }
@media (max-width: 700px) { .lb__prev, .lb__next { top: auto; bottom: 1.2rem; transform: none; } .lb__cap { bottom: 5rem; } }

/* ---------- бант-разделитель ---------- */
.bowline { display: flex; align-items: center; gap: 1.25rem; color: var(--accent-2); }
.bowline::before, .bowline::after { content: ''; flex: 1; height: 1px; background: var(--line); }
.bowline svg { width: 52px; }
