/* ============================================================
   site.css — секции РАБОТЫ, КЕЙСЫ, КОНТАКТЫ, COOKIE, ЮР.СТРАНИЦЫ
   Добавляется поверх style.css. HERO / курсор / звук / бегущие
   строки не трогаем — вся их разметка и правила остаются в style.css.
   ============================================================ */

/* ---------- небольшие технические правки без визуальных изменений ---------- */
html{scroll-behavior:smooth}
body{overflow-x:hidden;max-width:100%}
.nav{flex-wrap:wrap;row-gap:6px}

/* ============================================================
   ЕДИНЫЙ CUSTOM CURSOR (HERO) — технический фикс наслоения.
   Оверлеи кейсов (.case, z-index:200) и cookie-плашка (z-index:500)
   рендерятся ПОВЕРХ курсора (в style.css у него z-index:100), поэтому
   внутри открытого кейса курсор визуально пропадал (оставался под
   непрозрачным фоном .case), хотя технически продолжал двигаться.
   Поднимаем z-index курсора выше всех оверлеев сайта — сам курсор,
   его разметка, ring/dot и вся логика движения из HERO не меняются.
   ============================================================ */
.cursor-dot,.cursor-ring{z-index:600}

/* ============================================================
   HERO — мобильный showreel, теперь настоящий вертикальный монтаж
   9:16 (showreel-mobile-9x16.mp4, подготовлен отдельно, не тот же
   кадр, что desktop-showreel). .hero по-прежнему не держится на
   искусственных 100vh — высота равна фактической высоте видео, но
   теперь при реальном 9:16 это уже полноценный первый экран, а не
   узкая лента. object-fit:contain — просто защитный слой на случай
   долей пикселя расхождения, полезной обрезки/растяжения при точном
   совпадении пропорций box/контента он не даёт. Desktop HERO и
   desktop-showreel не затронуты — правило только внутри max-width:640px.
   ============================================================ */
@media (max-width:640px){
  .hero{height:auto;min-height:0}
  .hero__video{position:static;width:100%;height:auto;aspect-ratio:9/16;
    object-fit:cover;background:var(--bg)}
}
/* ============================================================
   Правка: object-fit был contain — на реальных мобильных браузерах
   это давало узкую чёрную щель у края видео (расхождение в доли
   пикселя между CSS aspect-ratio и тем, как браузер/декодер трактует
   реальные пиксельные размеры файла, contain в такой ситуации
   ужимает видео и оставляет пустой край рамки). cover гарантированно
   растягивает видео на всю ширину и высоту контейнера без полей —
   при точном совпадении пропорций (файл ровно 9:16) обрезка
   практически нулевая, визуально неотличима. Сам файл, кадрирование,
   пропорции 9:16 и desktop-версия не меняются.
   ============================================================ */

/* ============================================================
   MOBILE HEADER — компактная шапка на фоне сайта ПЕРЕД вертикальным
   showreel (раньше имя/навигация лежали прямо поверх видео). В HTML
   <header class="top"> теперь идёт первым внутри .hero, ДО <video> —
   на desktop это ничего не меняет (там .top как был, так и остаётся
   position:absolute с оверлеем на видео, z-index:3 держит его поверх
   независимо от DOM-порядка). На mobile просто возвращаем .top в
   обычный поток и красим тем же фоном сайта (var(--bg)) — ни цвета,
   ни шрифт, ни сама навигация не меняются, только контейнер и позиция.
   ============================================================ */
@media (max-width:640px){
  .top{position:static;background:var(--bg)}
}

/* ============================================================
   MOBILE NAV — три пункта строго в одну строку на 402px (никакой
   "лесенки" 2+1). Причина переноса: унаследованное правило
   .nav{flex-wrap:wrap} (см. ниже, "без визуальных изменений") в
   паре с обычным font-size/gap не оставляло места для третьего
   пункта в одной строке рядом с блоком имени. Отменяем wrap именно
   для шапки HERO (.top .nav) — CONTACT со своим .nav не трогаем —
   и немного уменьшаем шрифт/интервалы навigации, чтобы три пункта
   гарантированно помещались без наложений на 402px.
   ============================================================ */
@media (max-width:640px){
  .top .nav{flex-wrap:nowrap;gap:10px}
  .top .nav a{font-size:11px;letter-spacing:.06em;white-space:nowrap}
}

/* ============================================================
   РАЗДЕЛ «РАБОТЫ» — 3D-карусель (утверждённая механика)
   ============================================================ */
.works-section{position:relative;background:var(--bg)}
.stage{position:relative;width:100%;height:100vh;height:100svh;
  perspective:1300px;perspective-origin:50% 45%;overflow:hidden;cursor:default}

/* ============================================================
   MOBILE — устранение «пустого пространства» после MARQUEE.
   Реальная причина (не margin/padding между секциями — там 0):
   .stage выше жёстко задан 100vh/100svh без mobile-переопределения.
   3D-карусель (works.js) двигает карточки в ФИКСИРОВАННЫХ пикселях
   (Rx=350, Rz=330, Yc=60, L=300 и т.д.) — их видимый кластер занимает
   почти одну и ту же пиксельную высоту (~450px) независимо от высоты
   контейнера. На desktop 100vh — это оправданно (простор для параллакса
   и hover-эффектов). На узком мобильном экране та же высота контейнера
   оставляла ~270px пустого чёрного поля НАД кластером карточек и ~160px
   ПОД ним внутри самой секции WORKS — это и читалось как «огромная
   пустота после бегущей строки». .stage/#works участвуют в позиционировании
   через проценты (Ox=W*0.5, Oy=H*0.45 в works.js) — сама механика и
   алгоритм 3D-карусели не меняются, просто уменьшаем высоту контейнера
   только для mobile, и origin автоматически пересчитывается по формуле,
   которая для этого и задумана процентной. */
@media (max-width:640px){
  .stage{height:620px;height:min(620px,100svh)}
}

/* ============================================================
   ОТКАТ: предыдущая попытка поднять сцену на desktop через
   уменьшение высоты .stage (100vh → 700px) была ОШИБОЧНОЙ — высота
   .stage участвует не только в Oy (перенос), но и в CSS
   perspective-origin:50% 45%, который в процентах ОТ ЭТОЙ ЖЕ высоты
   задаёт точку схода перспективы. Уменьшение контейнера сдвигало
   точку схода относительно неизменных фиксированно-пиксельных
   translate3d-координат карточек — из-за этого менялось кажущееся
   взаимное перекрытие и промежутки карточек при вращении, ломая
   утверждённую круговую геометрию. Возвращено к исходному
   безусловному 100vh/100svh для ВСЕХ ширин — .stage больше не имеет
   desktop-специфичного переопределения высоты. Подъём сцены теперь
   делается другим способом (единый translateY всего слоя .world,
   см. works.js) — координаты карточек и перспектива не затрагиваются.
   ============================================================ */
.world{position:absolute;inset:0;transform-style:preserve-3d;will-change:transform}

.card{position:absolute;top:50%;left:50%;transform-style:preserve-3d;
  will-change:transform,opacity,filter;cursor:pointer}
.card__img{width:100%;height:100%;display:block;object-fit:cover;border-radius:10px;
  box-shadow:0 30px 70px rgba(0,0,0,.55),0 4px 14px rgba(0,0,0,.4);
  -webkit-user-drag:none;user-select:none}
.card__cap{position:absolute;left:0;right:0;top:calc(100% + 14px);text-align:center;
  font-weight:300;font-size:15px;letter-spacing:.18em;color:var(--ink);
  opacity:0;transition:opacity .3s ease;pointer-events:none;white-space:nowrap}

@media (prefers-reduced-motion:reduce){ .card{transition:none} }

@media (max-width:640px){
  .card__cap{font-size:12px;letter-spacing:.14em}
}

/* ============================================================
   КЕЙСЫ ПРОЕКТОВ — общая база (как в утверждённом BELUGA/WEDDING)
   ============================================================ */
.case{position:fixed;inset:0;z-index:200;background:var(--bg);color:var(--ink);
  overflow-y:auto;-webkit-overflow-scrolling:touch;opacity:0;pointer-events:none;transition:opacity .5s ease;
  font-family:'Inter Tight',system-ui,-apple-system,sans-serif}
.case.open{opacity:1;pointer-events:auto}
.case__inner{max-width:1180px;margin:0 auto;padding:0 clamp(20px,4vw,56px) 46px}

.case__bar{position:sticky;top:0;z-index:5;display:flex;justify-content:space-between;align-items:center;
  padding:18px clamp(20px,4vw,56px);
  background:linear-gradient(var(--bg),rgba(20,21,23,.85) 65%,transparent);
  -webkit-backdrop-filter:blur(3px);backdrop-filter:blur(3px)}
.case__nav{background:none;border:none;color:var(--ink);cursor:pointer;
  font:300 12px/1 'Inter Tight',sans-serif;letter-spacing:.16em;text-transform:uppercase;
  opacity:.85;transition:opacity .3s;padding:10px 6px}
.case__nav:hover{opacity:.5}

.case__hero{display:grid;grid-template-columns:minmax(300px,0.92fr) 1.5fr;
  gap:clamp(24px,4vw,60px);align-items:start;padding-top:6px}
.case__title{font-weight:700;font-size:clamp(2.8rem,6vw,4.6rem);letter-spacing:.03em;line-height:.92;margin:0}
.case__sub{margin-top:12px;font-weight:300;font-size:clamp(1rem,1.6vw,1.25rem);color:var(--ink-2);letter-spacing:.02em}
.case__desc{margin:20px 0 0;font-weight:300;font-size:clamp(.95rem,1.3vw,1.05rem);line-height:1.6;color:#CFCEC8;max-width:34ch}
.case__meta{margin:26px 0 0;border-top:1px solid var(--line);padding-top:20px;display:grid;gap:12px}
.case__meta div{display:grid;grid-template-columns:96px 1fr;gap:12px;align-items:center}
.case__meta dt{color:var(--ink-2);letter-spacing:.14em;text-transform:uppercase;font-size:.7rem;font-weight:300}
.case__meta dd{color:var(--ink);margin:0;font-weight:300;font-size:.9rem;line-height:1.35}
.case__hero-fig{position:relative;margin:0}
.case__hero-fig img{width:100%;height:auto;display:block;border-radius:12px}
.case__hero-cap{position:absolute;left:18px;bottom:14px;color:#fff;text-shadow:0 1px 12px rgba(0,0,0,.8)}
.case__hero-cap b{display:block;font-weight:400;font-size:.72rem;letter-spacing:.2em;text-transform:uppercase}
.case__hero-cap span{display:block;margin-top:5px;font-weight:300;font-size:.72rem;letter-spacing:.02em;opacity:.92}

.case__grid{margin-top:clamp(40px,6vh,70px)}
.case__row{display:flex;gap:clamp(14px,1.6vw,22px);align-items:flex-start;flex-wrap:wrap}
.case__row + .case__row{margin-top:clamp(26px,3.5vh,40px)}
.case__cell{margin:0;display:flex;flex-direction:column}
.case__head{display:flex;align-items:baseline;gap:10px;margin-bottom:12px}
.case__num{font-weight:300;font-size:1.1rem;color:var(--ink-2);letter-spacing:.04em;line-height:1}
.case__ttl{font-weight:400;font-size:.96rem;color:var(--ink);line-height:1.15}
.case__ttl span{display:block;font-weight:300;font-size:.76rem;color:var(--ink-2);margin-top:3px}
.case__cell img{display:block;border-radius:10px;width:auto;max-width:100%}
.case__row--a .case__cell img{height:clamp(150px,20vw,222px)}
.case__row--b{justify-content:center}
.case__row--b .case__cell img{height:clamp(230px,30vw,360px)}

.case__cols{margin-top:clamp(46px,7vh,84px);padding-top:clamp(30px,4vh,44px);border-top:1px solid var(--line);
  display:grid;grid-template-columns:repeat(3,1fr);gap:clamp(24px,4vw,56px)}
.case__cols h2{font-weight:400;font-size:.7rem;letter-spacing:.22em;text-transform:uppercase;color:var(--ink-2);margin:0 0 14px}
.case__cols p{font-weight:300;font-size:clamp(.92rem,1.15vw,1rem);line-height:1.6;color:#CFCEC8;margin:0;max-width:36ch}

.case__foot{margin-top:clamp(44px,6vh,68px);padding-top:22px;border-top:1px solid var(--line);
  font-weight:300;font-size:.7rem;letter-spacing:.16em;text-transform:uppercase;color:var(--ink-2)}

@media (max-width:860px){
  .case__hero{grid-template-columns:1fr}
  .case__cols{grid-template-columns:1fr;gap:28px}
}
@media (max-width:560px){
  .case__row--a .case__cell img,.case__row--b .case__cell img{height:clamp(140px,42vw,200px)}
}

/* ==== WEDDING: hero-портрет + блок отзыва (утверждено) ====
   Причина деформации фото: .case__hero-fig — flex-контейнер
   (display:flex) без явного align-items, поэтому по умолчанию
   действует align-items:stretch — единственный ребёнок (img)
   растягивался по высоте flex-линии, а не сохранял собственную
   пропорцию. В Chromium это визуально не проявляется (там расчёт
   растяжения для replaced-элементов с intrinsic aspect ratio не
   ломает картинку), но в Safari именно эта комбинация — известный
   источник деформации фото/видео внутри flex. Фикс: align-items:
   flex-start убирает растяжение, image остаётся в своих реальных
   пропорциях. Дополнительно явно фиксируем width/height:auto и
   object-fit:contain как защитный слой (сам файл не менялся). */
#case-wedding .case__hero-fig{display:flex;justify-content:flex-start;align-items:flex-start}
#case-wedding .case__hero-fig img{width:auto;height:auto;max-width:100%;max-height:min(60vh,520px);
  aspect-ratio:auto;object-fit:contain;border-radius:12px}
.case__testi{margin-top:clamp(46px,7vh,84px);padding-top:clamp(30px,4vh,44px);border-top:1px solid var(--line);
  display:grid;grid-template-columns:1.25fr .75fr;gap:clamp(28px,5vw,64px);align-items:center}
.case__testi-eyebrow{font-weight:400;font-size:.7rem;letter-spacing:.22em;text-transform:uppercase;color:var(--ink-2);margin:0 0 18px}
.case__quote{font-weight:300;font-size:clamp(1.5rem,3vw,2.35rem);line-height:1.28;letter-spacing:.004em;color:var(--ink);margin:0}
.case__quote i{font-style:normal;color:var(--ink-2)}
.case__quote cite{display:block;margin-top:18px;font-style:normal;font-weight:300;font-size:.78rem;letter-spacing:.14em;text-transform:uppercase;color:var(--ink-2)}
.case__testi-shot{margin:0;justify-self:end}
.case__testi-shot img{display:block;height:clamp(300px,44vh,460px);width:auto;max-width:100%;border-radius:14px;border:1px solid var(--line)}
@media (max-width:760px){
  .case__testi{grid-template-columns:1fr;gap:26px}
  .case__testi-shot{justify-self:start}
  #case-wedding .case__hero-fig img{max-height:52vh;width:auto;height:auto;max-width:100%;
    aspect-ratio:auto;object-fit:contain}
}

/* ==== REDLY / CITY / SOUFLE — видео-кейсы (утверждённые пропорции) ==== */
#case-redly .case__hero,#case-city .case__hero,#case-soufle .case__hero{
  grid-template-columns:minmax(300px,0.95fr) 1.1fr}
#case-redly .case__title,#case-city .case__title,#case-soufle .case__title{font-size:clamp(2.6rem,6vw,4.6rem)}
#case-redly .case__sub,#case-city .case__sub,#case-soufle .case__sub{font-size:clamp(1.05rem,1.9vw,1.4rem);max-width:32ch}
#case-redly .case__hero-fig,#case-city .case__hero-fig,#case-soufle .case__hero-fig{
  display:flex;justify-content:flex-end}
/* CITY/SOUFLE (не REDLY — его не трогаем): та же flex-stretch причина,
   что и у WEDDING. align-items:flex-start убирает растяжение по
   умолчанию для этих двух кейсов, не меняя REDLY. */
#case-city .case__hero-fig,#case-soufle .case__hero-fig{align-items:flex-start}
.case__hero-video{width:auto;max-width:100%;max-height:min(74vh,640px);border-radius:12px;display:block;background:#000}
/* CITY/SOUFLE — настоящая причина чёрных полей (desktop и mobile):
   видео грузится лениво (preload="none", src подставляется только
   при открытии кейса). Пока у видео ещё нет метаданных (реального
   декодированного размера), браузеру не от чего посчитать пропорцию
   для width:auto/height:auto — и он считает ширину и высоту НЕЗАВИСИМО
   друг от друга (ширина по max-width контейнера, высота — по
   HTML-атрибуту height), без связи через реальное соотношение сторон.
   Проверено предметно: контейнер .case__hero-fig на десктопе уже, чем
   требует видео такой ширины (max-width связывает по ширине раньше,
   чем max-height по высоте), и в этой комбинации высота застревала на
   464px вместо верных ~297px — отсюда чёрные поля. Раньше вместо этого
   стоял aspect-ratio:auto (полагались на автоматический расчёт) — не
   помогло по той же причине отсутствия метаданных на момент лэйаута.
   Фикс: жёстко фиксируем РЕАЛЬНОЕ соотношение сторон файла через
   aspect-ratio, не завязываясь на то, успели загрузиться метаданные
   видео или нет — так бокс правильный с первого кадра и на любом
   брейкпоинте. REDLY (эталон) не трогаем. */
#case-city .case__hero-video{aspect-ratio:848/464;height:auto}
#case-soufle .case__hero-video{aspect-ratio:1280/720;height:auto}
.case__sound{position:absolute;z-index:3;right:16px;bottom:16px;
  width:34px;height:34px;background:none;border:none;cursor:pointer;
  display:flex;align-items:center;justify-content:center;opacity:.9;
  transition:opacity .3s var(--ease),transform .3s var(--ease)}
.case__sound:hover{opacity:.55;transform:scale(1.06)}
.case__sound svg{width:22px;height:22px;stroke:var(--ink);fill:none;stroke-width:1.5;
  stroke-linecap:round;stroke-linejoin:round;filter:drop-shadow(0 1px 5px rgba(10,10,12,.5))}
.case__sound .wave{opacity:0;transition:opacity .25s var(--ease)}
.case__sound.is-on .wave{opacity:1}
.case__sound.is-on .slash{opacity:0}
.case__sound .slash{transition:opacity .25s var(--ease)}

/* ==== LORA — фотосессия (утверждённая editorial-сетка) ==== */
#case-lora .case__hero{grid-template-columns:minmax(300px,0.95fr) 1.15fr}
#case-lora .case__title{font-size:clamp(2.6rem,6vw,4.6rem)}
#case-lora .case__sub{font-size:clamp(1.05rem,1.9vw,1.45rem);max-width:30ch}
#case-lora .case__hero-fig{display:flex;justify-content:flex-end}
#case-lora .case__hero-fig img{width:auto;max-height:min(72vh,620px);border-radius:12px;display:block}

.case__eyebrow{font-weight:400;font-size:.72rem;letter-spacing:.24em;text-transform:uppercase;color:var(--ink-2);margin:0 0 6px}
.case__eyebrow-sub{font-weight:300;font-size:.82rem;color:var(--ink-2);margin:0 0 22px;letter-spacing:.02em}
.case__sources{margin-top:clamp(56px,9vh,110px);padding-top:clamp(30px,4vh,44px);border-top:1px solid var(--line)}
.case__sources-row{display:flex;gap:clamp(10px,1.2vw,16px);flex-wrap:wrap;align-items:flex-start}
.case__sources-row img{height:clamp(150px,20vw,238px);width:auto;display:block;border-radius:8px;
  filter:grayscale(.15) brightness(.95)}
.case__results{margin-top:clamp(60px,10vh,120px)}
.case__row-w{display:flex;gap:clamp(12px,1.6vw,22px);align-items:flex-start;justify-content:center;flex-wrap:wrap}
.case__row-w + .case__row-w{margin-top:clamp(12px,1.6vw,22px)}
.case__row-w img{width:auto;display:block;border-radius:10px;max-width:100%}
.case__row-w--feature img{height:clamp(300px,46vh,486px)}
.case__row-w--trio img{height:clamp(215px,26vw,322px)}
.case__row-w--mid img{height:clamp(240px,30vw,382px)}
.case__row-w img:nth-child(2){margin-top:clamp(18px,3vh,42px)}

/* колонки/футер видео- и фотосессионных кейсов (утверждённые отступы) */
#case-redly .case__cols,#case-lora .case__cols,#case-city .case__cols,#case-soufle .case__cols{
  margin-top:clamp(60px,10vh,120px)}
#case-redly .case__foot,#case-lora .case__foot,#case-city .case__foot,#case-soufle .case__foot{
  margin-top:clamp(48px,7vh,80px)}

@media (max-width:860px){
  #case-redly .case__hero-fig,#case-city .case__hero-fig,#case-soufle .case__hero-fig,
  #case-lora .case__hero-fig{justify-content:flex-start}
}
@media (max-width:560px){
  .case__row-w img:nth-child(2){margin-top:0}
  .case__sources-row img{height:clamp(130px,40vw,200px)}
}

/* ============================================================
   МОБИЛЬНАЯ АДАПТАЦИЯ КЕЙСОВ — критично для видео (п.11 ТЗ)
   На телефоне медиа (видео/фото) должно идти ПЕРВЫМ, крупно,
   почти во всю ширину экрана, текст и ЗАДАЧА/РЕШЕНИЕ/РЕЗУЛЬТАТ — ниже.
   ============================================================ */
@media (max-width:640px){
  .case__inner{padding:0 18px 40px}
  .case__bar{padding:14px 18px}
  .case__hero{display:flex;flex-direction:column}
  .case__hero-fig{order:-1;width:100%}
  .case__hero-txt{order:2}
  /* На desktop case__hero-fig — flex-контейнер (display:flex, ID-scoped
     правила для видео/фото-кейсов), из-за чего его единственный ребёнок
     (видео/картинка) растягивался по кросс-оси flex (align-items:stretch
     по умолчанию) и терял пропорции в Safari. На мобильном экране
     принудительно возвращаем блочную раскладку — media-правило с тем же
     ID+класс, чтобы специфичность гарантированно перекрыла desktop-версию. */
  #case-redly .case__hero-fig,#case-city .case__hero-fig,#case-soufle .case__hero-fig,
  #case-lora .case__hero-fig,#case-wedding .case__hero-fig,#case .case__hero-fig{
    display:block;text-align:center}
  .case__hero-fig img{width:100%;max-width:100%;height:auto;max-height:none;border-radius:10px;
    object-fit:contain;display:inline-block}
  .case__hero-video{width:100%;max-width:100%;height:auto;max-height:none;border-radius:10px;
    object-fit:contain;display:inline-block}
  #case-lora .case__hero-fig img{width:100%;max-height:none}
  /* CITY/SOUFLE: реальное aspect-ratio (848/464, 1280/720) теперь
     задаётся ОДНИМ общим правилом вне media-запроса (см. выше, рядом
     с #case-city/#case-soufle .case__hero-fig) — оно уже покрывает и
     mobile. Отдельно здесь ничего не переопределяю, чтобы не было двух
     конкурирующих источников истины для одного и того же свойства. */
  .case__title{font-size:clamp(2rem,9vw,2.6rem)}
  .case__sub{max-width:none}
  .case__desc{max-width:none}
  .case__cols{gap:22px}
  .case__testi{display:flex;flex-direction:column}
  .case__testi-shot img{width:100%;height:auto;max-height:60vh}
  .case__row--a,.case__row--b,.case__row-w{justify-content:center}
}

/* ============================================================
   ВОЗВРАТ К СПИСКУ РАБОТ — плавающая кнопка внутри кейса на мобильном,
   чтобы всегда было понятно, как выйти и продолжить чтение (п.11 ТЗ)
   ============================================================ */
@media (max-width:640px){
  .case__bar{position:sticky;top:0}
}

/* ============================================================
   КОНТАКТЫ (files-12, утверждённая композиция)
   ============================================================ */
.contact-section{min-height:100vh;min-height:100svh;display:flex;flex-direction:column;
  padding:clamp(22px,3vw,40px) clamp(32px,5vw,72px);background:var(--bg)}

.contact-top{display:flex;justify-content:flex-end;align-items:center}
.contact-top .nav a{color:var(--ink);text-decoration:none;font-weight:400;font-size:clamp(12px,.9vw,13px);
  letter-spacing:.14em;text-transform:uppercase;opacity:.9;transition:opacity .3s var(--ease)}
.contact-top .nav a:hover{opacity:.5}

.contact-main{flex:1;display:grid;grid-template-columns:1fr auto;gap:clamp(40px,6vw,96px);align-items:center;
  max-width:1240px;width:100%;margin:0 auto;padding:clamp(16px,3vh,48px) 0}

.contact-statement{font-weight:700;text-transform:uppercase;
  font-size:clamp(2.6rem,6.4vw,5.4rem);line-height:.98;letter-spacing:.01em;color:var(--ink);margin:0}
.contact-links{margin-top:clamp(34px,5vh,62px);display:flex;flex-direction:column;gap:16px}
.contact-link{color:var(--ink);text-decoration:none;font-weight:400;text-transform:uppercase;
  font-size:clamp(13px,1vw,15px);letter-spacing:.14em;opacity:.9;transition:opacity .3s var(--ease);
  display:inline-flex;align-items:center;gap:10px;width:fit-content}
.contact-link .arr{color:var(--ink-2);font-size:.92em}
.contact-link:hover{opacity:.5}

.contact-right{margin:0;display:flex;justify-content:flex-end;align-items:flex-start}
.contact-video{height:min(74vh,760px);width:auto;max-width:100%;display:block;border-radius:14px;background:#000;object-fit:contain}

.site-foot{display:grid;grid-template-columns:1fr auto auto;gap:clamp(24px,4vw,64px);align-items:end;
  padding-top:clamp(18px,2.5vh,28px);border-top:1px solid var(--line)}
.site-foot-brand div{font-weight:400;font-size:clamp(12px,.95vw,13px);letter-spacing:.14em;text-transform:uppercase;line-height:1.55}
.site-foot-brand .role{color:var(--ink-2)}
.site-foot a{color:var(--ink-2);text-decoration:none;font-weight:300;font-size:clamp(11px,.85vw,12px);
  letter-spacing:.12em;text-transform:uppercase;transition:color .3s var(--ease);align-self:end}
.site-foot a:hover{color:var(--ink)}

@media (max-width:860px){
  .contact-main{grid-template-columns:1fr;gap:48px}
  .contact-right{justify-content:flex-start}
  .contact-video{height:auto;width:100%;max-width:340px}
}
@media (max-width:640px){
  .contact-section{padding:20px 18px}
  .site-foot{grid-template-columns:1fr;gap:10px;text-align:left}
  .site-foot a{align-self:start}
}

/* ============================================================
   COOKIE-ПЛАШКА (п.13 ТЗ) — компактная, в визуальной системе сайта
   ============================================================ */
.cookie-bar{position:fixed;left:18px;bottom:18px;z-index:500;
  width:min(380px, calc(100vw - 36px));
  background:#1B1C1F;border:1px solid var(--line);border-radius:14px;
  padding:18px 20px;box-shadow:0 20px 50px rgba(0,0,0,.45);
  font-family:'Inter Tight',system-ui,-apple-system,sans-serif;
  opacity:0;transform:translateY(12px);pointer-events:none;
  transition:opacity .4s var(--ease),transform .4s var(--ease)}
.cookie-bar.is-visible{opacity:1;transform:translateY(0);pointer-events:auto}
.cookie-bar p{margin:0 0 16px;font-weight:300;font-size:.86rem;line-height:1.55;color:var(--ink)}
.cookie-bar p a{color:var(--ink);text-decoration:underline;text-underline-offset:2px;opacity:.85}
.cookie-bar p a:hover{opacity:1}
.cookie-actions{display:flex;flex-wrap:wrap;gap:10px}
.cookie-btn{flex:1;min-width:140px;padding:11px 14px;border-radius:8px;
  font:400 .72rem/1 'Inter Tight',sans-serif;letter-spacing:.1em;text-transform:uppercase;
  cursor:pointer;transition:opacity .3s var(--ease),background .3s var(--ease);text-align:center}
.cookie-btn--accept{background:var(--ink);color:var(--bg);border:1px solid var(--ink)}
.cookie-btn--accept:hover{opacity:.85}
.cookie-btn--necessary{background:none;color:var(--ink);border:1px solid var(--line)}
.cookie-btn--necessary:hover{border-color:var(--ink-2)}

@media (max-width:480px){
  /* компактнее: плашка не должна занимать заметную часть экрана HERO —
     тот же стиль, тот же текст, те же две кнопки, просто меньше отступов */
  .cookie-bar{left:10px;bottom:10px;width:calc(100vw - 20px);padding:14px 16px;border-radius:12px}
  .cookie-bar p{margin:0 0 12px;font-size:.8rem;line-height:1.45}
  .cookie-actions{flex-direction:column;gap:8px}
  .cookie-btn{width:100%;padding:10px 12px;font-size:.68rem}
}

/* ============================================================
   ЮРИДИЧЕСКИЕ СТРАНИЦЫ (privacy.html / cookies.html)
   ============================================================ */
.legal{min-height:100vh;min-height:100svh;background:var(--bg);color:var(--ink);
  font-family:'Inter Tight',system-ui,-apple-system,sans-serif;-webkit-font-smoothing:antialiased}
.legal-head{display:flex;justify-content:space-between;align-items:center;
  padding:clamp(22px,3vw,38px) clamp(22px,4vw,56px)}
.legal-back{color:var(--ink);text-decoration:none;font-weight:400;font-size:12px;letter-spacing:.14em;
  text-transform:uppercase;opacity:.85;transition:opacity .3s var(--ease)}
.legal-back:hover{opacity:.5}
.legal-brand{font-weight:400;font-size:13px;letter-spacing:.09em;color:var(--ink);opacity:.9}
.legal-inner{max-width:760px;margin:0 auto;padding:clamp(10px,2vh,20px) clamp(22px,5vw,32px) 100px}
.legal-inner h1{font-weight:700;font-size:clamp(2rem,5vw,2.8rem);letter-spacing:.01em;margin:0 0 8px;line-height:1.08}
.legal-updated{font-weight:300;font-size:.8rem;color:var(--ink-2);letter-spacing:.04em;margin:0 0 48px}
.legal-inner h2{font-weight:400;font-size:.78rem;letter-spacing:.18em;text-transform:uppercase;color:var(--ink-2);
  margin:44px 0 14px}
.legal-inner p{font-weight:300;font-size:1rem;line-height:1.7;color:#CFCEC8;margin:0 0 14px}
.legal-placeholder{border:1px dashed var(--line);border-radius:10px;padding:16px 18px;
  font-weight:300;font-size:.9rem;line-height:1.6;color:var(--ink-2);font-style:italic;margin:14px 0}
