﻿/* ============================================================================
   Boostlock — дизайн-система нового макета (финал.psd и соседние файлы).

   Макеты нарисованы на холсте 2560 px, то есть @2x к 1280 CSS-пикселям:
   все размеры ниже — уже поделённые пополам значения из PSD, поэтому на
   десктопе вёрстка совпадает с макетом пиксель в пиксель.

   Файл подключается ПОСЛЕ deadboost.css и делает две вещи:
   1) задаёт токены и примитивы нового дизайна (префикс .bl-);
   2) переопределяет переменные старой палитры, чтобы страницы, которые
      ещё не переверстаны (профиль, чат, кошелёк), сразу перекрасились
      в новую гамму и получили новый шрифт.
   ========================================================================== */

/* ── Шрифт TT Firs Neue ──────────────────────────────────────────────────── */
@font-face {
    font-family: 'TT Firs Neue';
    src: url('../fonts/TTFirsNeue-Thin.woff2') format('woff2');
    font-weight: 100;
    font-style: normal;
    font-display: swap;
}
@font-face {
    font-family: 'TT Firs Neue';
    src: url('../fonts/TTFirsNeue-ExtraLight.woff2') format('woff2');
    font-weight: 200;
    font-style: normal;
    font-display: swap;
}
@font-face {
    font-family: 'TT Firs Neue';
    src: url('../fonts/TTFirsNeue-Light.woff2') format('woff2');
    font-weight: 300;
    font-style: normal;
    font-display: swap;
}
@font-face {
    font-family: 'TT Firs Neue';
    src: url('../fonts/TTFirsNeue-Regular.woff2') format('woff2');
    font-weight: 400;
    font-style: normal;
    font-display: swap;
}
@font-face {
    font-family: 'TT Firs Neue';
    src: url('../fonts/TTFirsNeue-Medium.woff2') format('woff2');
    font-weight: 500;
    font-style: normal;
    font-display: swap;
}
@font-face {
    font-family: 'TT Firs Neue';
    src: url('../fonts/TTFirsNeue-DemiBold.woff2') format('woff2');
    font-weight: 600;
    font-style: normal;
    font-display: swap;
}
@font-face {
    font-family: 'TT Firs Neue';
    src: url('../fonts/TTFirsNeue-Bold.woff2') format('woff2');
    font-weight: 700;
    font-style: normal;
    font-display: swap;
}
@font-face {
    font-family: 'TT Firs Neue';
    src: url('../fonts/TTFirsNeue-ExtraBold.woff2') format('woff2');
    font-weight: 800;
    font-style: normal;
    font-display: swap;
}
@font-face {
    font-family: 'TT Firs Neue';
    src: url('../fonts/TTFirsNeue-Black.woff2') format('woff2');
    font-weight: 900;
    font-style: normal;
    font-display: swap;
}

/* ── Токены ──────────────────────────────────────────────────────────────── */
:root {
    /* Цвета сняты пипеткой с макета, не подобраны на глаз. */
    --bl-bg-top: #0B0813;
    --bl-bg-mid: #140D22;
    --bl-bg-bottom: #1C1231;
    --bl-header-top: #231742;
    --bl-header-bottom: #19122D;
    --bl-header: rgba(31, 23, 57, 0.72);
    --bl-footer: #2A1C49;

    --bl-violet: #8A5CF5;
    --bl-violet-deep: #4C3386;
    --bl-violet-mid: #6745B7;
    --bl-violet-bright: #8357E9;
    --bl-green: #40CE1A;
    --bl-red: #E51A2E;

    --bl-ink: #0D0F16;          /* тёмная заливка полей и «пилюль» */
    --bl-field: #14161F;
    --bl-text: #ffffff;
    --bl-surface: #1B1430;
    --bl-text-dim: rgba(255, 255, 255, 0.62);
    --bl-text-faint: rgba(255, 255, 255, 0.38);
    --bl-hairline: rgba(255, 255, 255, 0.14);

    --bl-grad-primary: linear-gradient(90deg, #4C3386 0%, #6745B7 50%, #8357E9 100%);
    --bl-grad-ghost: linear-gradient(90deg, #a69eb9 0%, #B9B8B8 50%, #c2bdcf 100%);
    --bl-grad-card: linear-gradient(135deg, #8458E9 0%, #6B41C8 100%);

    /* Сетка: контент в макете идёт от x=112 до x=2448 при холсте 2560,
       то есть 1168 px с полями по 56 при окне 1280. */
    --bl-container: 1168px;
    --bl-gutter: 56px;
    --bl-header-h: 80px;

    /* Типографика — кегли посчитаны из матриц трансформации текстовых слоёв. */
    --bl-font: 'TT Firs Neue', 'Segoe UI', system-ui, -apple-system, sans-serif;
    --bl-fs-nav: 19px;
    --bl-fs-hero-kicker: 19px;
    --bl-fs-hero-1: 45px;
    --bl-fs-hero-2: 97px;
    --bl-fs-hero-lead: 12.7px;   /* матрица текстового слоя даёт ровно 12,69 */
    --bl-fs-section: 40px;
    --bl-fs-btn: 20px;
    --bl-fs-card-title: 40px;
    --bl-fs-card-text: 17px;
    --bl-fs-card-price: 35px;
    --bl-fs-step-title: 27px;
    --bl-fs-step-text: 20px;
    --bl-fs-step-num: 47px;
    --bl-fs-service: 49px;
    --bl-fs-review: 16px;
    --bl-fs-footer: 13px;

    --bl-radius-card: 34px;
    --bl-radius-pill: 999px;
    --bl-radius-field: 999px;
    --bl-radius-modal: 30px;
}

/* ── Перекраска старой палитры ────────────────────────────────────────────
   Страницы, до которых редизайн ещё не дошёл, используют переменные
   deadboost.css. Переопределяем их здесь — и они переезжают на новый
   шрифт и новую гамму без правки самой разметки. */
:root {
    --bg: var(--bl-bg-top);
    --bg2: var(--bl-bg-mid);
    --surface: #1B1430;
    --accent: var(--bl-violet);
    --accent2: var(--bl-green);
    --accent3: var(--bl-violet-deep);
    --text: var(--bl-text);

    --yellow: var(--bl-violet);
    --yellow-dark: var(--bl-violet-mid);
    --yellow-transparent: rgba(138, 92, 245, 0.12);
    --dark: var(--bl-bg-top);
    --card-bg: #1B1430;
    --card-bg2: #221838;
    --gray: var(--bl-bg-mid);
    --light-gray: var(--bl-text);
    --border: rgba(255, 255, 255, 0.08);
    --border-hover: rgba(138, 92, 245, 0.45);
    --muted: rgba(255, 255, 255, 0.45);
    --font: var(--bl-font);
    --navbar-height: var(--bl-header-h);
}

/* ── База ────────────────────────────────────────────────────────────────── */
/* Базовый тон: почти чёрный #0B0813 сразу под шапкой, к низу страницы очень
   медленно теплеющий до #1C1231 — цвета сняты пипеткой по левому краю финал.psd.
   Ровной темнотой фон при этом не является: в макете поверх этого градиента лежат
   засвеченные фотографии (группа «Фон», режим «осветление основы»), но они стоят
   по центру и к краям сходят на нет, поэтому по левому краю их и не видно.
   Сами картинки — .bl-hero::before и .bl-backdrop в bl-landing.css.
   Градиент растянут на всю высоту документа (не fixed) — иначе на длинной странице
   он повторялся бы в каждом экране. */
body {
    font-family: var(--bl-font);
    color: var(--bl-text);
    min-height: 100vh;
    background: linear-gradient(180deg, var(--bl-bg-top) 0%, var(--bl-bg-bottom) 100%) no-repeat;
    background-color: var(--bl-bg-top);
}

/* Масштаб страницы. Макет нарисован под окно 1280×702 (шапка 80 + первый
   экран 622). На 1920 и на 2К та же вёрстка занимала две трети и половину
   экрана — сайт выглядел на каждом мониторе по-своему. Поэтому страница
   масштабируется целиком: zoom, а не transform — он участвует в раскладке,
   поэтому не ломает прокрутку и прилипшую шапку.

   tan(atan2(a, b)) — способ поделить длину на длину и получить число:
   в calc такое деление запрещено.

   Масштаб считается ТОЛЬКО по ширине. Тогда ширина раскладки всегда ровно
   1280 (с точностью до полосы прокрутки), и подложки макета, нарисованные
   на 1280, ложатся от края до края — по бокам нечему появиться.

   Дважды пробовали добавить сюда второе слагаемое, по высоте окна
   (min(…, tan(atan2(100vh, 702px)))): первый экран макета 1280×702, и на
   широком низком окне масштаб по ширине уводит кнопки за нижний край.
   Оба раза откатывали по одной причине: как только высота начинает
   ограничивать, раскладка становится шире 1280 — на окне 1536×740 это
   1447, — и по краям остаются поля, где подложки уже нет. Даже сведённые
   тон в тон, они читаются как переход: рисунок дыма кончается, дальше ровная
   заливка. Владельцу это важнее целого первого экрана (2026-08-20, второй
   откат). Первый экран на низком окне просто не влезает целиком — как
   и любая длинная страница.

   clamp: не мельче 0,9375 (это 1200/1280 — на такой ширине включается
   планшетная раскладка, мельче незачем) и не крупнее 3 (выше 4К не раздуваем).
   Нижняя граница нужна для окон 1200–1280: раньше там масштаб упирался в 1,
   раскладка была уже макетной и подложка вылезала за края.

   100vw включает полосу прокрутки, поэтому ширина раскладки выходит
   не 1280, а ~1270 — ровно столько же, сколько было в окне 1280.

   Правило только для десктопа: ниже 1200 работает своя, резиновая раскладка,
   и масштабировать её нельзя — телефон получил бы уменьшенный десктоп. */
@media (min-width: 1200px) {
    body { zoom: clamp(.9375, tan(atan2(100vw, 1280px)), 3); }
}

/* Главная — на 8% мельче остальных страниц: владелец попросил поля по бокам.
   Раскладка при этом не 1280, а 1391, и по 55 px с каждой стороны остаётся
   вне макетных подложек. Кромкой это не читается: у обеих подложек края
   сведены в прозрачность прямо в файле, а тон до края экрана продолжают
   полоски hero-backdrop-edge и page-backdrop-edge (см. .bl-hero::before
   и .bl-backdrop в bl-landing.css) — ровно тот случай, ради которого они
   и были нарисованы. Секции привязаны к центру через .bl-container, поэтому
   от полей они не разъезжаются. Виндж — уже нет: владелец попросил прижать её
   к самому краю окна, см. .bl-hero__artbox в bl-landing.css.

   Множитель, а не другой знаменатель: 0,92 читается как «на 8% мельче»,
   границы clamp — прежние 0,9375 и 3, умноженные на него же.

   Только главная. На профиле подложка стоит background-position: 100% 0,
   а арт — right: 0, то есть оба прижаты к правому краю секции: лишние поля
   увели бы их от карточки и оголили левый край сцены. */
@media (min-width: 1200px) {
    body.bl-home { zoom: clamp(.8625, tan(atan2(100vw, 1280px)) * .92, 2.76); }
}

/* Кастомный скроллбар из макета: узкий тёмный трек, фиолетовый ползунок.
   В PSD трек 14 px, ползунок 8 px — здесь те же значения. */
* {
    scrollbar-width: thin;
    scrollbar-color: var(--bl-violet) #120e1b;
}
::-webkit-scrollbar { width: 14px; height: 14px; }
::-webkit-scrollbar-track { background: #120e1b; }
::-webkit-scrollbar-thumb {
    background: var(--bl-violet);
    border: 3px solid #120e1b;
    border-radius: var(--bl-radius-pill);
}
::-webkit-scrollbar-thumb:hover { background: #9d78f7; }

/* Внутренняя ширина обязана равняться 1168 — на этой сетке построены все
   секции макета, поэтому боковые поля прибавляются к max-width, а не съедают её. */
.bl-container {
    width: 100%;
    max-width: calc(var(--bl-container) + 32px);
    margin-inline: auto;
    padding-inline: 16px;
}

/* Заголовок секции — «Что мы предлагаем -», «Процесс -» и т.д.
   Дефис в макете нарисован частью строки, поэтому он в разметке, не в ::after. */
.bl-section-title {
    font-size: var(--bl-fs-section);
    font-weight: 900;
    line-height: 1.1;
    letter-spacing: -0.01em;
    margin: 0 0 80px;
}

/* ── Кнопки ──────────────────────────────────────────────────────────────── */
.bl-btn {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: 10px;
    border: 0;
    border-radius: var(--bl-radius-pill);
    font-family: var(--bl-font);
    font-size: var(--bl-fs-btn);
    font-weight: 400;
    line-height: 1;
    color: var(--bl-text);
    text-decoration: none;
    cursor: pointer;
    transition: filter .18s ease, transform .18s ease, box-shadow .18s ease;
}
.bl-btn:hover { filter: brightness(1.12); color: var(--bl-text); }
.bl-btn:active { transform: translateY(1px); }
.bl-btn:focus-visible {
    outline: 2px solid var(--bl-violet);
    outline-offset: 3px;
}
.bl-btn[disabled], .bl-btn.is-disabled {
    opacity: .45;
    pointer-events: none;
}

.bl-btn--primary { background: var(--bl-grad-primary); }
.bl-btn--primary:hover { box-shadow: 0 8px 26px rgba(131, 87, 233, .38); }
.bl-btn--ghost { background: var(--bl-grad-ghost); }
.bl-btn--dark { background: #16141F; }
.bl-btn--lg { height: 39px; padding: 0 34px; }
.bl-btn--xl { height: 59px; padding: 0 42px; font-size: 24px; font-weight: 600; }
.bl-btn--block { display: flex; width: 100%; }

/* ── Поля ────────────────────────────────────────────────────────────────── */
.bl-field {
    width: 100%;
    height: 47px;
    padding: 0 24px;
    border: 0;
    border-radius: var(--bl-radius-field);
    background: var(--bl-field);
    color: var(--bl-text);
    font-family: var(--bl-font);
    font-size: 16px;
    font-weight: 300;
    outline: none;
    transition: box-shadow .18s ease;
}
.bl-field::placeholder { color: var(--bl-text-faint); }
.bl-field:focus { box-shadow: 0 0 0 2px var(--bl-violet); }
.bl-field.is-invalid { box-shadow: 0 0 0 2px var(--bl-red); }

.bl-label {
    display: block;
    margin-bottom: 8px;
    font-size: 16px;
    font-weight: 500;
}
.bl-hint {
    margin-top: 6px;
    font-size: 12px;
    font-weight: 200;
    color: var(--bl-text-dim);
}
.bl-error {
    margin-top: 6px;
    font-size: 13px;
    color: #FF6B7A;
}

/* ── Карточка и модалка ──────────────────────────────────────────────────── */
.bl-card {
    border-radius: var(--bl-radius-card);
    background: var(--bl-grad-card);
    overflow: hidden;
}

/* Окна из макетов входа/регистрации/заказа: полупрозрачная фиолетовая
   подложка с тонкой светлой рамкой и размытием фона под ней. */
.bl-modal-backdrop {
    position: fixed;
    inset: 0;
    z-index: 1080;
    display: none;
    align-items: center;
    justify-content: center;
    padding: 24px;
    background: rgba(8, 5, 16, .72);
    backdrop-filter: blur(6px);
}
.bl-modal-backdrop.is-open { display: flex; }
.bl-modal {
    position: relative;
    width: 100%;
    max-height: calc(100vh - 48px);
    overflow-y: auto;
    padding: 34px 40px 40px;
    border-radius: var(--bl-radius-modal);
    border: 1px solid rgba(160, 130, 255, .45);
    background: linear-gradient(150deg, rgba(60, 42, 105, .96) 0%, rgba(44, 30, 80, .96) 100%);
    box-shadow: 0 30px 80px rgba(0, 0, 0, .55);
}
.bl-modal--narrow { max-width: 470px; }
.bl-modal--wide { max-width: 870px; }

.bl-modal-close {
    position: absolute;
    top: 18px;
    right: 18px;
    width: 35px;
    height: 35px;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    border: 0;
    border-radius: 50%;
    background: var(--bl-red);
    color: #fff;
    font-size: 17px;
    line-height: 1;
    cursor: pointer;
    transition: filter .15s ease;
}
.bl-modal-close:hover { filter: brightness(1.15); }

.bl-modal-brand {
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 9px;
    font-size: var(--bl-fs-nav);
    font-weight: 800;
}
.bl-modal-brand img { width: 28px; height: 28px; }
.bl-modal-title {
    margin: 6px 0 0;
    text-align: center;
    font-size: 30px;
    font-weight: 500;
    line-height: 1.2;
}

/* ── Мелочи ──────────────────────────────────────────────────────────────── */
.bl-price { color: var(--bl-green); font-weight: 900; }
.bl-muted { color: var(--bl-text-dim); }

/* Чекбокс из макетов регистрации и оплаты — фиолетовый квадрат со скруглением. */
.bl-check {
    appearance: none;
    width: 22px;
    height: 22px;
    flex: 0 0 22px;
    border: 0;
    border-radius: 7px;
    background: rgba(255, 255, 255, .18);
    cursor: pointer;
    transition: background .15s ease;
}
.bl-check:checked {
    background: var(--bl-violet) url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3E%3Cpath d='M6.2 11.6 3 8.4l1.1-1.1 2.1 2.1 5.7-5.7L13 4.8z'/%3E%3C/svg%3E") center/14px no-repeat;
}
.bl-check:focus-visible { outline: 2px solid var(--bl-violet); outline-offset: 2px; }

/* ── Шапка ───────────────────────────────────────────────────────────────
   Разметка осталась бутстраповской (.navbar / .navbar-collapse) — на ней
   висит бургер и скрипт, считающий --nav-h. Меняем только оформление.

   Порядок правого блока — как в макете: «Вход/Регистрация» упирается в правый
   край контейнера (её чернила кончаются на 1223 при краю 1224). Переключатель
   языка в макете спрятан — на его месте нарисована та же «Вход/Регистрация», —
   поэтому он вставлен перед ней. Из-за этого четыре пункта меню стоят левее
   макетных на ширину пилюли с отступами; сами размеры и зазоры макетные. */
/* Полоса шапки. В макете это не заливка, а картинка: фиолетовый градиент
   (сверху #231742, к низу #19122D) с еле различимым обломком арта в правой
   половине. Градиент оставлен подложкой — пока картинка не пришла, полоса
   всё равно выглядит как полоса.
   Под полосой — блик из макета (::after ниже). По ширине картинка тянется:
   текстура абстрактная, растяжение на широких экранах на ней не видно.

   Важно: последние 14 строк картинки (28 в @2x) намеренно сведены к цвету
   первой строки блика над фоном страницы (#0B0813) — иначе на стыке остаётся
   ступенька в 3–4 единицы, а она на такой темноте отлично видна. Если полосу
   пересобирать из PSD, этот стык надо посчитать заново. */
.navbar.site-nav {
    height: var(--bl-header-h);
    padding: 0;
    /* Картинка занимает ровно полосу: на телефоне бургер-меню раскрывается
       внутри <nav>, и растянутая на всю высоту текстура выглядела бы кляксой. */
    background: image-set(url('../img/design/header-strip.webp?v=2') 1x,
                          url('../img/design/header-strip@2x.webp?v=2') 2x)
                0 0 / 100% var(--bl-header-h) no-repeat,
                linear-gradient(180deg, var(--bl-header-top) 0%, var(--bl-header-bottom) 100%) !important;
    backdrop-filter: blur(18px);
    border-bottom: 0;
}
/* Блика под полосой нет — и в макете его нет тоже. Слои «Верхней полоски»
   действительно спускаются ниже 80 px и гаснут, но в сведённой копии,
   которую записал сам фотошоп, полоса обрывается ровно на строке 155 холста
   (77,5 CSS), а дальше сразу фон страницы #0B0813. Переход резкий, со
   ступенькой примерно в 13 единиц — так нарисовано. Стоявшая здесь картинка
   header-glow.webp растягивала затухание на 160 px и размывала границу. */
.navbar.site-nav > .container {
    max-width: calc(var(--bl-container) + 32px);
    padding-inline: 16px;
}
/* Знак крупнее макетного (там 28 px и кегль 21) — по просьбе владельца:
   в макетном размере лого в углу теряется. Пропорции пары сохранены. */
.navbar.site-nav .navbar-brand.brand-logo {
    display: inline-flex;
    align-items: center;
    gap: 12px;
    margin: 0;
    padding: 0;
    font-size: 26px !important;
    font-weight: 800 !important;
    letter-spacing: 0;
    color: var(--bl-text);
}
/* Отступ влево — не смещение, а поправка на сам файл: у знака внутри png
   прозрачные поля, краска начинается на 27-м пикселе из 256. При размере 40
   это 4,22 px, на которые круг компаса стоял правее общей левой линии колонки:
   шапка по левому краю не сходилась ни с заголовками секций, ни с карточками.
   Теперь на линии стоит краска, а не рамка <img>. Число привязано к размеру
   знака (27/256 от него) — меняется размер, пересчитывается и отступ. */
.navbar.site-nav .brand-img {
    width: 40px;
    height: 40px;
    border-radius: 0;
    margin-left: -4.22px;
}
/* В макете «Boostlock» набрано белым целиком. В deadboost.css лиловым красится
   любой span внутри .brand-logo — перебиваем оба уровня. */
.navbar.site-nav .navbar-brand.brand-logo > span,
.navbar.site-nav .navbar-brand.brand-logo span span { color: var(--bl-text); }

/* Зазор 22, а не 29 как в макете: там измерено между «чернилами» букв,
   а у ссылки есть ещё боковые полуапроши шрифта — суммарно выходит те же 30. */
.navbar.site-nav .navbar-nav { gap: 22px; }
/* !important — в deadboost.css у .nav-link стоят padding и цвет тоже с !important. */
.navbar.site-nav .nav-link {
    padding: 0 !important;
    margin: 0 !important;
    border-radius: 0;
    font-size: var(--bl-fs-nav);
    font-weight: 400;
    line-height: 1.15;
    color: var(--bl-text) !important;
    opacity: .92;
    transition: opacity .15s ease, color .15s ease;
}
.navbar.site-nav .nav-link:hover,
.navbar.site-nav .nav-link:focus {
    opacity: 1;
    background: none;
    color: var(--bl-violet) !important;
}
/* «Вход/Регистрация» — не кнопка, а тот же текст, но плотнее и с большим
   отступом слева: в макете до неё 59,5 px против 28 между пунктами меню.
   !important обязателен — правило .nav-link выше обнуляет margin тоже с ним. */
.navbar.site-nav .nav-auth {
    margin-left: 34px !important;
    font-weight: 500;
}
.navbar.site-nav .navbar-toggler {
    border: 0;
    color: var(--bl-text);
    padding: 4px 8px;
}
.navbar.site-nav .navbar-toggler:focus { box-shadow: none; }
/* Бургер. Бутстраповская иконка нарисована чёрным штрихом (вариант для светлой
   шапки) и на тёмной полосе не видна вовсе — на телефоне меню выглядело так,
   будто его нет. Тот же SVG, но штрих белый. */
.navbar.site-nav .navbar-toggler-icon {
    background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255,255,255,0.92%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e");
}

/* Переключатель языка. Группа «ru en» в макете спрятана, но нарисована:
   одна пилюля 68×29,5 со скруглением по высоте, левая половина фиолетовая
   #8A5CF5 с тёмным текстом, правая — цвета фона страницы #0D0F16 со светлым.
   Половинки по 34, кегль 16 — макетные. Белых плашек, стоявших здесь раньше,
   в макете нет: они перетягивали внимание с «Вход/Регистрация». */
.navbar.site-nav .lang-switch {
    /* Пилюля примыкает к меню, а не к «Вход/Регистрация»: зазор такой же,
       как между пунктами (у пилюли нет боковых полуапрошей, поэтому 4+22). */
    margin-left: 4px;
    border: 0;
    border-radius: var(--bl-radius-pill);
    overflow: hidden;
    background: var(--bl-ink);
}
.navbar.site-nav .lang-opt {
    width: 34px;
    height: 30px;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    padding: 0;
    font-size: 16px;
    font-weight: 600;
    letter-spacing: 0;
    color: var(--bl-text);
    opacity: .82;
    transition: background .15s ease, color .15s ease, opacity .15s ease;
}
.navbar.site-nav .lang-opt:hover { opacity: 1; }
.navbar.site-nav .lang-opt.active {
    background: var(--bl-violet);
    color: var(--bl-ink);
    opacity: 1;
}

/* ── Подвал ──────────────────────────────────────────────────────────────
   В макете это сплошная фиолетовая полоса 78 px: слева ссылки, справа
   реквизиты ИП, всё в одну строку. */
/* display:block обязателен: в deadboost.css подвал — flex-контейнер, и внутренняя
   полоса становилась flex-элементом, ужимаясь по содержимому вместо ширины сетки. */
.site-footer {
    display: block;
    min-height: 78px;
    margin: 0;
    padding: 0;
    border: 0;
    /* Полоса в макете не одноцветная: слева #1F1536, справа #35235E, ровный
       горизонтальный переход через всю ширину. --bl-footer — его середина,
       она остаётся запасным цветом для браузеров без градиента. */
    background: var(--bl-footer);
    background-image: linear-gradient(90deg, #1F1536 0%, #35235E 100%);
    color: var(--bl-text);
}
.site-footer .footer-logo { display: none; }
.site-footer-inner {
    max-width: calc(var(--bl-container) + 32px);
    min-height: 78px;
    margin-inline: auto;
    padding: 14px 16px;
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 20px 40px;
    flex-wrap: wrap;
}
.site-footer .footer-links {
    display: flex;
    flex-wrap: wrap;
    gap: 20px;
    margin: 0;
    padding: 0;
    list-style: none;
}
/* Прозрачность 0,78, а не 0,9: в макете ссылки подвала заметно приглушены —
   пик их пикселей 157 против 183 при 0,9. */
.site-footer .footer-links a {
    font-size: var(--bl-fs-footer);
    font-weight: 100;
    color: var(--bl-text);
    text-decoration: none;
    opacity: .78;
    transition: opacity .15s ease;
}
/* Telegram и E-mail в макете набраны обычным начертанием — это единственные
   «живые» контакты в подвале, остальное юридические ссылки. */
.site-footer .footer-links li:nth-last-child(-n+2) a { font-weight: 400; }
.site-footer .footer-links a:hover { opacity: 1; color: var(--bl-violet); }
.site-footer .footer-legal {
    display: flex;
    flex-wrap: wrap;
    gap: 4px 24px;
    margin: 0;
    font-size: 11px;
    font-weight: 100;
    line-height: 1.5;
    color: rgba(255, 255, 255, .55);
}

/* ── Адаптив ─────────────────────────────────────────────────────────────
   Полное соответствие макету требуется на десктопе; ниже 1280 просто
   ужимаем шкалу, как это сделано на текущем сайте. */
@media (max-width: 1199.98px) {
    :root {
        --bl-fs-hero-1: 36px;
        --bl-fs-hero-2: 72px;
        --bl-fs-section: 34px;
        --bl-fs-card-title: 34px;
        --bl-fs-service: 38px;
    }
}
@media (max-width: 767.98px) {
    :root {
        --bl-fs-hero-1: 26px;
        --bl-fs-hero-2: 46px;
        --bl-fs-hero-lead: 14px;
        --bl-fs-section: 26px;
        --bl-fs-card-title: 28px;
        --bl-fs-card-price: 26px;
        --bl-fs-step-title: 22px;
        --bl-fs-step-text: 16px;
        --bl-fs-step-num: 34px;
        --bl-fs-service: 26px;
        --bl-fs-btn: 17px;
        --bl-header-h: 62px;
    }
    .bl-modal { padding: 26px 20px 30px; border-radius: 24px; }
    .bl-modal-title { font-size: 24px; }

    /* Раскрытое бургер-меню лежит поверх страницы отдельной панелью —
       иначе пункты растянули бы саму шапку и сломали --nav-h. */
    .navbar.site-nav .navbar-collapse {
        position: absolute;
        left: 0;
        right: 0;
        top: var(--bl-header-h);
        padding: 18px 20px 24px;
        background: #1B1430;
        border-bottom: 1px solid rgba(255, 255, 255, .08);
    }
    .navbar.site-nav .navbar-nav {
        gap: 16px;
        align-items: flex-start !important;
    }
    .navbar.site-nav .nav-auth { margin-left: 0 !important; }
    .navbar.site-nav .lang-switch { margin-left: 0; }
    /* Полоса тут 62 px — знак в 40 занял бы её почти целиком. */
    .navbar.site-nav .navbar-brand.brand-logo { gap: 9px; font-size: 21px !important; }
    .navbar.site-nav .brand-img { width: 32px; height: 32px; margin-left: -3.38px; }
    .site-footer-inner {
        flex-direction: column;
        align-items: flex-start;
        gap: 14px;
    }
    .site-footer .footer-links { gap: 12px 18px; }
    /* Ссылки подвала — строчки в 16 px высотой: пальцем в такую не попасть.
       Кегль макетный, растёт только область нажатия. */
    .site-footer .footer-links a {
        display: inline-flex;
        align-items: center;
        min-height: 34px;
    }
}


/* ═══════════════════════════════════════════════════════════════════════════
   Страницы вне макета: профиль, кошелёк, чат, отзывы, уведомления, отчёты,
   правовые тексты. Отдельных PSD у них нет, поэтому приводим не раскладку,
   а язык: скругления, поля, кнопки и акценты из нового дизайна. Размеры и
   отступы не трогаем — иначе поехала бы вёрстка, которую никто не проверял.
   Всё ниже — только оформление; классы и разметка страниц остались прежними.
   ═══════════════════════════════════════════════════════════════════════════ */

/* Кнопки Bootstrap. Лендинг и окна заказа рисуют свои (.bl-btn, .auth-btn,
   .order-submit-btn) с большей специфичностью — их это не задевает. */
.btn {
    border-radius: var(--bl-radius-pill);
    font-family: var(--bl-font);
    font-weight: 600;
    /* Бутстрап по умолчанию красит текст кнопки в почти чёрный. На светлой теме
       это было незаметно, на тёмной кнопки без своего цвета (btn-telegram и т.п.)
       становились нечитаемыми. Светлым вариантам тёмный текст возвращаем ниже. */
    color: var(--bl-text);
}
.btn-light, .btn-warning, .btn-outline-warning { color: #0B0813; }
.btn-primary {
    border: 0;
    background: var(--bl-grad-primary);
    color: var(--bl-text);
}
.btn-primary:hover,
.btn-primary:focus {
    background: var(--bl-grad-primary);
    color: var(--bl-text);
    filter: brightness(1.12);
}
.btn-outline-primary,
.btn-outline-light {
    border-color: rgba(146, 116, 232, .55);
    color: var(--bl-text);
}
.btn-outline-primary:hover,
.btn-outline-light:hover {
    border-color: var(--bl-violet);
    background: rgba(138, 92, 245, .16);
    color: var(--bl-text);
}
.btn-success { border: 0; background: var(--bl-green); color: #0B0813; }
.btn-danger { border: 0; background: var(--bl-red); color: #fff; }
.btn-secondary { border: 0; background: rgba(255, 255, 255, .12); color: var(--bl-text); }
.btn-link { color: var(--bl-violet); }

/* Поля ввода. */
.form-control,
.form-select {
    /* не пилюля: на внутренних страницах поля бывают многострочными,
       а у пилюли текст в них прижимается к скруглению */
    border-radius: 14px;
    border: 1px solid rgba(255, 255, 255, .1);
    background: var(--bl-field);
    color: var(--bl-text);
    font-family: var(--bl-font);
}
.form-control:focus,
.form-select:focus {
    border-color: var(--bl-violet);
    background: var(--bl-field);
    color: var(--bl-text);
    box-shadow: 0 0 0 2px rgba(138, 92, 245, .3);
}
.form-control::placeholder { color: var(--bl-text-faint); }
.form-check-input:checked { border-color: var(--bl-violet); background-color: var(--bl-violet); }
.form-check-input:focus { border-color: var(--bl-violet); box-shadow: 0 0 0 2px rgba(138, 92, 245, .3); }

/* Карточки и панели: одно скругление на весь сайт. */
.card,
.modal-content,
.info-card,
.order-card,
.list-group-item {
    border-radius: 22px;
    border-color: rgba(255, 255, 255, .08);
    background: var(--bl-surface, #1B1430);
    color: var(--bl-text);
}
.card-header, .card-footer, .modal-header, .modal-footer {
    border-color: rgba(255, 255, 255, .08);
    background: transparent;
}
.modal-content { background: linear-gradient(150deg, #271A46 0%, #302056 55%, #3A2865 100%); }
.btn-close { filter: invert(1) grayscale(1) brightness(2); }

/* Плашки статусов и уведомлений. */
.alert { border-radius: 18px; border: 1px solid rgba(255, 255, 255, .1); }
.alert-success { background: rgba(64, 206, 26, .14); color: var(--bl-text); }
.alert-danger  { background: rgba(229, 26, 46, .16); color: var(--bl-text); }
.alert-info,
.alert-warning { background: rgba(138, 92, 245, .16); color: var(--bl-text); }
.badge { border-radius: var(--bl-radius-pill); font-family: var(--bl-font); font-weight: 600; }
.badge.bg-primary { background: var(--bl-violet) !important; }
.badge.bg-success { background: var(--bl-green) !important; color: #0B0813; }
.badge.bg-danger  { background: var(--bl-red) !important; }

/* Вкладки. */
.nav-tabs { border-bottom-color: rgba(255, 255, 255, .1); }
.nav-tabs .nav-link {
    border: 0;
    border-radius: var(--bl-radius-pill);
    color: var(--bl-text-dim);
    font-family: var(--bl-font);
    font-weight: 500;
}
.nav-tabs .nav-link:hover { color: var(--bl-text); }
.nav-tabs .nav-link.active {
    background: rgba(138, 92, 245, .18);
    color: var(--bl-text);
    box-shadow: inset 0 0 0 1px rgba(146, 116, 232, .55);
}
.nav-pills .nav-link.active { background: var(--bl-violet); }
/* Активная вкладка в профиле и отчётах — фиолетовая пилюля; текст на ней
   был почти чёрным (наследие светлой темы). */
.nav-link.active { color: var(--bl-text); }

/* Таблицы: без бутстраповской «полосатости», разделители под общую гамму. */
.table { color: var(--bl-text); --bs-table-bg: transparent; }
.table > :not(caption) > * > * { border-bottom-color: rgba(255, 255, 255, .08); background: transparent; }
.table thead th { color: var(--bl-text-dim); font-weight: 600; }

/* Ссылки в текстовых страницах (оферта, политика, cookie). */
.legal-page a, .doc-page a, .text-page a { color: var(--bl-violet); }
