/* Дизайн-система лендинга КУБ.
 *
 * Имена переменных и классов НЕ произвольные: контент страниц (content/*.html)
 * снят 1:1 со старого сайта и ссылается на них (--spacing-*, --primary-text,
 * card-premium, btn, blog-card…). Меняем ЗНАЧЕНИЯ и внешний вид — не имена,
 * иначе править пришлось бы 19 страниц контента. */

:root {
  --primary-cta: #9A4FF5;   /* бренд КУБ v2 (дизайн-пакет «ETRN (5)») */
  --primary-cta-hover: #8A3BF0;
  --accent-purple: #9A4FF5;
  --success: #10B981;
  --warning: #EF4444;

  /* Нейтрали — из дизайн-системы кабинета (etnr-web: n50/n200/n500/n700/n900),
     чтобы лендинг и ЛК читались как один продукт. */
  --background: #F9FAFB;
  --color-surface: #ffffff;
  --surface: #ffffff;
  --primary-text: #111827;
  --color-text: #111827;
  --secondary-text: #374151;
  --tertiary-text: #6B7280;
  --border: #E5E7EB;
  --color-border: #E5E7EB;

  --radius-sm: 8px;
  --radius-md: 14px;
  --radius-lg: 22px;

  --spacing-4: 4px;  --spacing-8: 8px;   --spacing-12: 12px;
  --spacing-16: 16px; --spacing-24: 24px; --spacing-32: 32px;
  --spacing-48: 48px; --spacing-64: 64px;

  --shadow-card: 0 1px 2px rgb(26 26 46 / 4%), 0 8px 24px rgb(154 79 245 / 7%);
  --shadow-card-hover: 0 2px 4px rgb(26 26 46 / 6%), 0 16px 40px rgb(154 79 245 / 14%);
  --banner-h: 42px;
}

@media (prefers-color-scheme: dark) {
  :root {
    --background: #12121f;
    --color-surface: #1a1a2e;
    --surface: #1a1a2e;
    --primary-text: #f3f4f6;
    --color-text: #f3f4f6;
    --secondary-text: #d1d5db;
    --tertiary-text: #8080a0;
    --border: #2c2c45;
    --color-border: #2c2c45;
    --accent-purple: #B47DF8;
    --shadow-card: 0 1px 2px rgb(0 0 0 / 30%), 0 8px 24px rgb(0 0 0 / 25%);
    --shadow-card-hover: 0 2px 4px rgb(0 0 0 / 35%), 0 16px 44px rgb(154 79 245 / 30%);
  }
}

* { box-sizing: border-box; }

html { scroll-behavior: smooth; }

body {
  margin: 0;
  font-family: 'Manrope', -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto,
    "Helvetica Neue", Arial, sans-serif;
  font-size: 16px;
  line-height: 1.65;
  color: var(--primary-text);
  background: var(--background);
  -webkit-font-smoothing: antialiased;
}

::selection { background: rgb(154 79 245 / 22%); }

h1, h2, h3, h4 { line-height: 1.25; letter-spacing: -0.015em; }
h1 { font-size: clamp(30px, 5vw, 46px); font-weight: 800; }
h2 { font-size: clamp(24px, 3.6vw, 32px); font-weight: 700; }
h3 { font-size: 20px; font-weight: 650; }

a { color: var(--accent-purple); }
p { margin-top: 0; }

img, svg, table { max-width: 100%; }
table { border-collapse: collapse; }
td, th { border: 1px solid var(--border); padding: var(--spacing-8) var(--spacing-12); text-align: left; }

  position: absolute;
  right: var(--spacing-12);
  top: 50%;
  transform: translateY(-50%);
  border: 0;
  background: rgb(255 255 255 / 16%);
  color: #fff;
  width: 26px;
  height: 26px;
  border-radius: 50%;
  cursor: pointer;
  font-size: 13px;
  line-height: 1;
  transition: background 0.15s;
}
.banner-closed 
/* ── Шапка ─────────────────────────────────────────────────────────────── */

.header {
  position: sticky;
  top: 0;
  z-index: 40;
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--spacing-16);
  padding: var(--spacing-12) var(--spacing-24);
  background: color-mix(in srgb, var(--color-surface) 82%, transparent);
  backdrop-filter: blur(14px);
  border-bottom: 1px solid var(--border);
}
.header-left { display: flex; align-items: center; gap: var(--spacing-32); min-width: 0; }
.logo {
  font-size: 22px;
  font-weight: 800;
  text-decoration: none;
  background: linear-gradient(90deg, #7c3aed, #9333ea);
  -webkit-background-clip: text;
  background-clip: text;
  color: transparent;
  letter-spacing: 0.01em;
}
.nav-desktop { display: flex; gap: var(--spacing-4); flex-wrap: wrap; }
.nav-link {
  color: var(--secondary-text);
  text-decoration: none;
  font-size: 14.5px;
  padding: var(--spacing-8) var(--spacing-12);
  border-radius: var(--radius-sm);
  transition: color 0.15s, background 0.15s;
}
.nav-link:hover { color: var(--primary-text); background: rgb(154 79 245 / 8%); }
.header-actions { display: flex; align-items: center; gap: var(--spacing-12); }
.btn-cabinet { white-space: nowrap; }

.nav-burger {
  display: none;
  flex-direction: column;
  gap: 4px;
  background: none;
  border: 0;
  padding: var(--spacing-8);
  cursor: pointer;
}
.nav-burger span { width: 20px; height: 2px; background: var(--primary-text); border-radius: 2px; }

.nav-mobile {
  display: none;
  flex-direction: column;
  gap: var(--spacing-4);
  padding: var(--spacing-12) var(--spacing-24) var(--spacing-16);
  border-bottom: 1px solid var(--border);
  background: var(--color-surface);
}
.nav-mobile.open { display: flex; }

@media (max-width: 900px) {
  .nav-desktop { display: none; }
  .nav-burger { display: flex; }
}

/* ── Каркас контента ───────────────────────────────────────────────────── */

.container { max-width: 1120px; margin: 0 auto; padding: 0 var(--spacing-24); }
.section { padding: var(--spacing-48) 0; }
.section-light { background: var(--color-surface); }
main.section { padding-top: var(--spacing-32); }

.accent-purple {
  background: linear-gradient(90deg, #7c3aed, #a855f7);
  -webkit-background-clip: text;
  background-clip: text;
  color: transparent;
}

/* ── Кнопки ────────────────────────────────────────────────────────────── */

.btn {
  display: inline-block;
  border: 1px solid transparent;
  border-radius: var(--radius-sm);
  padding: 10px 18px;
  font-size: 15px;
  font-weight: 600;
  cursor: pointer;
  text-decoration: none;
  transition: transform 0.12s, box-shadow 0.15s, background 0.15s, border-color 0.15s;
}
.btn:hover { transform: translateY(-1px); }
.btn:active { transform: translateY(0); }
.btn-primary {
  background: linear-gradient(120deg, #7c3aed, #8b5cf6);
  color: #fff;
  box-shadow: 0 4px 14px rgb(154 79 245 / 30%);
}
.btn-primary:hover { box-shadow: 0 6px 20px rgb(154 79 245 / 42%); }
.btn-secondary {
  background: transparent;
  color: var(--accent-purple);
  border-color: color-mix(in srgb, var(--accent-purple) 45%, transparent);
}
.btn-secondary:hover { background: rgb(154 79 245 / 8%); }

/* ── Карточки ──────────────────────────────────────────────────────────── */

.card-premium, .feature-card, .contact-card, .blog-card {
  background: var(--color-surface);
  border: 1px solid var(--border);
  border-radius: var(--radius-md);
  box-shadow: var(--shadow-card);
  transition: transform 0.18s, box-shadow 0.18s, border-color 0.18s;
}
.card-premium { padding: var(--spacing-24); }
.card-premium:hover, .feature-card:hover, .blog-card:hover {
  transform: translateY(-3px);
  box-shadow: var(--shadow-card-hover);
  border-color: color-mix(in srgb, var(--accent-purple) 35%, var(--border));
}
.blog-card { display: block; padding: var(--spacing-24); text-decoration: none; color: inherit; }

.contact-card { padding: var(--spacing-24); text-align: center; }
.contact-icon { font-size: 28px; margin-bottom: var(--spacing-8); }
.contact-label { font-weight: 650; }
.contact-value { color: var(--accent-purple); }
.contact-description { color: var(--tertiary-text); font-size: 14px; }

.cta-section {
  background: linear-gradient(120deg, #6d28d9, #7c3aed 55%, #9333ea);
  color: #fff;
  border-radius: var(--radius-lg);
  padding: var(--spacing-48) var(--spacing-24);
  text-align: center;
}
.cta-title { color: #fff; }
.cta-text { color: rgb(255 255 255 / 88%); }

/* ── Модалка заявки ────────────────────────────────────────────────────── */

.lead-modal { position: fixed; inset: 0; z-index: 90; display: grid; place-items: center; }
.lead-modal[hidden] { display: none; }
.lead-modal-backdrop { position: absolute; inset: 0; background: rgb(10 8 24 / 55%); backdrop-filter: blur(3px); }
.lead-modal-card {
  position: relative;
  width: min(430px, calc(100vw - 32px));
  background: var(--color-surface);
  border: 1px solid var(--border);
  border-radius: var(--radius-md);
  padding: var(--spacing-24);
  box-shadow: 0 24px 70px rgb(0 0 0 / 35%);
}
.lead-modal-card h3 { margin: 0 0 var(--spacing-4); }
.lead-modal-sub { color: var(--secondary-text); font-size: 14px; margin-bottom: var(--spacing-16); }
.lead-modal-card label {
  display: block;
  font-size: 13.5px;
  font-weight: 600;
  color: var(--secondary-text);
  margin-bottom: var(--spacing-12);
}
.lead-modal-card input {
  display: block;
  width: 100%;
  margin-top: var(--spacing-4);
  padding: 10px 12px;
  font-size: 15px;
  color: var(--primary-text);
  background: var(--background);
  border: 1px solid var(--border);
  border-radius: var(--radius-sm);
  transition: border-color 0.15s, box-shadow 0.15s;
}
.lead-modal-card input:focus {
  outline: none;
  border-color: var(--accent-purple);
  box-shadow: 0 0 0 3px rgb(154 79 245 / 18%);
}
.lead-modal-submit { width: 100%; margin-top: var(--spacing-8); }
.lead-modal-close {
  position: absolute;
  top: var(--spacing-12);
  right: var(--spacing-12);
  border: 0;
  background: transparent;
  color: var(--tertiary-text);
  font-size: 15px;
  cursor: pointer;
}
.lead-modal-ok { color: var(--success); font-weight: 600; margin: var(--spacing-12) 0 0; }
.lead-modal-err { color: var(--warning); font-size: 14px; margin: var(--spacing-12) 0 0; }
body.modal-open { overflow: hidden; }

/* ── Футер ─────────────────────────────────────────────────────────────── */

.footer {
  background: var(--color-surface);
  border-top: 1px solid var(--border);
  padding: var(--spacing-48) var(--spacing-24) var(--spacing-32);
  margin-top: var(--spacing-64);
}
.footer-grid {
  max-width: 1120px;
  margin: 0 auto var(--spacing-32);
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
  gap: var(--spacing-32);
}
.footer-title { font-size: 15px; margin: 0 0 var(--spacing-12); }
.footer-links { display: flex; flex-direction: column; gap: var(--spacing-8); }
.footer-links a { font-size: 14px; text-decoration: none; color: var(--secondary-text); transition: color 0.15s; }
.footer-links a:hover { color: var(--accent-purple); }
.footer-bottom {
  max-width: 1120px;
  margin: 0 auto;
  border-top: 1px solid var(--border);
  padding-top: var(--spacing-16);
  color: var(--tertiary-text);
  font-size: 14px;
}

@media (prefers-reduced-motion: reduce) {
  html { scroll-behavior: auto; }
  .btn, .card-premium, .feature-card, .blog-card { transition: none; }
}

/* ── Адаптив контента (снятого 1:1 со старого сайта) ───────────────────── */
/* Контент несёт инлайн-стили; на узких экранах их приходится перебивать. */

@media (max-width: 720px) {
  .container { padding: 0 var(--spacing-16); }
  .section { padding: var(--spacing-32) 0; }
  .header { padding: var(--spacing-8) var(--spacing-16); }

  /* жёсткие двухколоночные гриды из контента → в одну колонку */
  main [style*="grid-template-columns"] { grid-template-columns: 1fr !important; }
  /* герой и крупные абзацы с инлайн font-size:20px не должны душить экран */
  main [style*="font-size:20px"] { font-size: 17px !important; }
  main [style*="padding:var(--spacing-64)"] { padding: var(--spacing-32) !important; }

    .btn-cabinet { padding: 8px 12px; font-size: 14px; }
}

@media (min-width: 721px) and (max-width: 1024px) {
  .container { padding: 0 var(--spacing-24); }
  .nav-link { padding: var(--spacing-8) var(--spacing-8); font-size: 14px; }
}

/* таблицы (тарифы, сравнения в блоге) скроллятся сами, страница — нет */
main table { display: block; overflow-x: auto; white-space: nowrap; }
main table td, main table th { white-space: normal; min-width: 140px; }

/* касания: зоны не меньше 40px */
@media (pointer: coarse) {
  .nav-link, .btn { padding-top: 11px; padding-bottom: 11px; }
  }

/* ── Кнопка «Личный кабинет»: главное действие шапки ───────────────────── */
/* Пользователей пускают в ЛК (24.08.2026), заявка ушла из шапки в блоки
   страниц — вход остался единственной кнопкой и носит основной стиль
   (btn-p). Своя палитра тут не нужна, только снятие подчёркивания у ссылки
   и запрет переноса. */
.btn.btn-cabinet { text-decoration: none; }

/* ── Иконки-буллеты в карточках: плитка вместо голого контура ──────────── */
/* «Объёмнее»: контурный SVG ложится на градиентную плитку с мягкой тенью. */
.feature-card { padding: var(--spacing-24); }
.feature-card > svg:first-child {
  width: 64px;
  height: 64px;
  padding: 13px;
  border-radius: 16px;
  background:
    linear-gradient(145deg, rgb(154 79 245 / 14%), rgb(147 51 234 / 7%) 55%, transparent),
    var(--color-surface);
  border: 1px solid color-mix(in srgb, var(--accent-purple) 22%, var(--border));
  box-shadow:
    0 6px 16px rgb(154 79 245 / 18%),
    inset 0 1px 0 rgb(255 255 255 / 55%);
  margin-bottom: var(--spacing-12);
}
@media (prefers-color-scheme: dark) {
  .feature-card > svg:first-child {
    box-shadow:
      0 6px 18px rgb(0 0 0 / 45%),
      0 0 24px rgb(154 79 245 / 22%),
      inset 0 1px 0 rgb(255 255 255 / 8%);
  }
}

/* Вход виден в шапке на ЛЮБОЙ ширине, включая телефоны: место освободила
   ушедшая из шапки «Оставить заявку». Проверено на 375px — лого, кнопка и
   бургер помещаются с запасом. Пункт входа в мобильном дровере остаётся
   вторым путём для тех, кто открыл меню. */
@media (max-width: 560px) {
  .v2-head .btn-cabinet { padding: 0 12px; font-size: 13.5px; }
}

/* ── Дизайн-проход №2 ──────────────────────────────────────────────────── */

/* Герой: свечение и сетка точек вместо плоского фона. Только первый section
   главной и внутренних — глубина первого экрана без единого нового элемента. */
main.section { position: relative; }
main.section::before {
  content: "";
  position: absolute;
  inset: -120px 0 auto 0;
  height: 520px;
  pointer-events: none;
  background:
    radial-gradient(560px 300px at 50% 10%, rgb(154 79 245 / 10%), transparent 70%),
    radial-gradient(340px 220px at 78% 4%, rgb(147 51 234 / 7%), transparent 70%);
}
main.section::after {
  content: "";
  position: absolute;
  inset: 0 0 auto 0;
  height: 420px;
  pointer-events: none;
  background-image: radial-gradient(rgb(154 79 245 / 13%) 1px, transparent 1.4px);
  background-size: 26px 26px;
  -webkit-mask-image: linear-gradient(180deg, #000 8%, transparent 82%);
  mask-image: linear-gradient(180deg, #000 8%, transparent 82%);
}
main.section > * { position: relative; z-index: 1; }
@media (prefers-color-scheme: dark) {
  main.section::before {
    background:
      radial-gradient(560px 300px at 50% 10%, rgb(139 92 246 / 17%), transparent 70%),
      radial-gradient(340px 220px at 78% 4%, rgb(147 51 234 / 12%), transparent 70%);
  }
}

/* Активный раздел в шапке */
.nav-link-active {
  color: var(--accent-purple);
  background: rgb(154 79 245 / 9%);
  font-weight: 600;
}

/* Мера строки на текстовых страницах: во всю ширину юртексты нечитаемы */
body.long-form main :is(p, li, blockquote) { max-width: 72ch; }
body.long-form main li { margin-bottom: var(--spacing-4); }

/* Карточки блога: стрелка-приглашение при ховере */
.blog-card { position: relative; }
.blog-card::after {
  content: "→";
  position: absolute;
  right: var(--spacing-24);
  bottom: var(--spacing-16);
  font-size: 18px;
  color: var(--accent-purple);
  opacity: 0;
  transform: translateX(-6px);
  transition: opacity 0.18s, transform 0.18s;
}
.blog-card:hover::after { opacity: 1; transform: translateX(0); }

/* Появление карточек при скролле. Классы вешает client.js ТОЛЬКО когда
   IntersectionObserver доступен — без JS всё видно сразу. */
.pre-reveal { opacity: 0; transform: translateY(14px); }
.in-view { opacity: 1; transform: translateY(0); transition: opacity 0.5s ease, transform 0.5s ease; }
@media (prefers-reduced-motion: reduce) {
  .pre-reveal { opacity: 1; transform: none; }
}

/* Клавиатурный фокус: видимое кольцо в цвет бренда */
:focus-visible {
  outline: 2px solid var(--accent-purple);
  outline-offset: 2px;
  border-radius: 4px;
}

/* Таблицы: зебра и мягкая рамка (юртексты, сравнения в блоге) */
main table { border: 1px solid var(--border); border-radius: var(--radius-sm); }
main tbody tr:nth-child(even) { background: color-mix(in srgb, var(--accent-purple) 4%, transparent); }
main th { background: color-mix(in srgb, var(--accent-purple) 8%, transparent); font-weight: 650; }

/* Футер: колонка бренда */
.footer-brand .logo { font-size: 24px; }
.footer-brand p { margin-top: var(--spacing-8); font-size: 14px; color: var(--tertiary-text); max-width: 300px; }

/* 404 */
.err-code { font-size: clamp(72px, 16vw, 130px); font-weight: 800; line-height: 1; margin: 0 0 var(--spacing-8); }

/* honeypot: физически за экраном, скринридеру не объявляется */
.hp-field { position: absolute; left: -9999px; top: -9999px; }

/* ── Дизайн-проход №3: редизайн главной ────────────────────────────────── */
/* Всё ниже — АДДИТИВНО: новые классы для переверстанной content/home.html.
 * Остальные 18 страниц продолжают жить на старых классах выше. Без внешних
 * ресурсов: фоны — градиенты, «скрин продукта» — свёрстан CSS-ом. */

:root {
  --ink-cyan: #0891b2;          /* второй акцент: статусы «в пути» в мокапе */
  --hero-glass: rgb(255 255 255 / 72%);
  --glass-border: rgb(154 79 245 / 22%);
}
@media (prefers-color-scheme: dark) {
  :root {
    --ink-cyan: #22d3ee;
    --hero-glass: rgb(26 26 46 / 62%);
    --glass-border: rgb(139 92 246 / 30%);
  }
}

/* ── Hero ── */
.hero { display: grid; grid-template-columns: minmax(0, 1.05fr) minmax(0, 0.95fr);
  gap: var(--spacing-48); align-items: center; padding: var(--spacing-32) 0 var(--spacing-48); }
.hero-eyebrow {
  display: inline-flex; align-items: center; gap: 8px;
  font-size: 13px; font-weight: 650; letter-spacing: 0.02em;
  color: var(--accent-purple);
  padding: 6px 12px; border-radius: 999px;
  border: 1px solid var(--glass-border);
  background: color-mix(in srgb, var(--accent-purple) 7%, transparent);
  margin-bottom: var(--spacing-16);
}
.hero-eyebrow .dot { width: 7px; height: 7px; border-radius: 50%;
  background: var(--success); box-shadow: 0 0 0 4px rgb(16 185 129 / 18%); }
.hero h1 { font-size: clamp(34px, 5.4vw, 58px); letter-spacing: -0.03em; margin: 0 0 var(--spacing-16); }
.hero-sub { font-size: clamp(16px, 2vw, 19px); color: var(--secondary-text);
  max-width: 34em; margin-bottom: var(--spacing-24); }
.hero-cta { display: flex; gap: var(--spacing-12); flex-wrap: wrap; margin-bottom: var(--spacing-24); }
/* Второй ряд действий: регистрация и заявка — главные, приложение и тарифы —
   рядом, но тише. Четыре одинаковые кнопки в один ряд читались бы как стена,
   и главное действие в ней теряется. */
.hero-cta-2 { margin-top: calc(-1 * var(--spacing-12)); }
.btn-lg { padding: 13px 22px; font-size: 16px; border-radius: 12px; }
.hero-facts { display: flex; gap: var(--spacing-16); flex-wrap: wrap;
  color: var(--tertiary-text); font-size: 13.5px; }
.hero-facts b { color: var(--primary-text); font-weight: 650; }
.hero-facts span { display: inline-flex; align-items: center; gap: 6px; }
.hero-facts svg { color: var(--accent-purple); flex: none; }

/* «Скрин продукта»: окно ленты статусов, свёрстанное CSS-ом. Никаких картинок —
 * нечему протухать и нечего грузить. Лёгкий наклон — глубина первого экрана. */
/* 🪤 Свечение героя — псевдоэлемент, вылезающий за края (inset: … -12%).
 * На узком экране это ровно те 27px, из-за которых страница ехала вбок, а
 * getBoundingClientRect по элементам ничего не показывал: у псевдоэлементов
 * его нет. `overflow-x: clip` (не hidden!) обрезает вылет, НЕ создавая
 * скролл-контейнер — иначе сломались бы якорные переходы и sticky. */
main.section { overflow-x: clip; }

.hero-shot { position: relative; }
.hero-shot::before { /* свечение позади окна */
  content: ""; position: absolute; inset: -18% -12%;
  background:
    radial-gradient(60% 55% at 60% 40%, rgb(154 79 245 / 22%), transparent 70%),
    radial-gradient(40% 40% at 30% 80%, rgb(34 211 238 / 10%), transparent 70%);
  filter: blur(6px); pointer-events: none;
}
.mock-window {
  position: relative;
  border-radius: 18px;
  border: 1px solid var(--glass-border);
  background: var(--hero-glass);
  backdrop-filter: blur(10px);
  box-shadow: 0 30px 80px rgb(24 8 60 / 26%), inset 0 1px 0 rgb(255 255 255 / 30%);
  transform: perspective(1200px) rotateX(2deg) rotateY(-4deg);
  overflow: hidden;
}
@media (prefers-color-scheme: dark) {
  .mock-window { box-shadow: 0 30px 90px rgb(0 0 0 / 55%), 0 0 60px rgb(154 79 245 / 14%),
    inset 0 1px 0 rgb(255 255 255 / 7%); }
}
.mock-bar { display: flex; align-items: center; gap: 6px;
  padding: 10px 14px; border-bottom: 1px solid var(--border); }
.mock-bar i { width: 10px; height: 10px; border-radius: 50%; background: var(--border); }
.mock-bar i:nth-child(1) { background: #f87171; } .mock-bar i:nth-child(2) { background: #fbbf24; }
.mock-bar i:nth-child(3) { background: #34d399; }
.mock-bar span { margin-left: 8px; font-size: 12.5px; color: var(--tertiary-text); }
.mock-rows { padding: 8px 10px 12px; display: flex; flex-direction: column; gap: 6px; }
.mock-row { display: grid; grid-template-columns: auto 1fr auto; align-items: center;
  gap: 10px; padding: 9px 12px; border-radius: 10px;
  background: color-mix(in srgb, var(--color-surface) 70%, transparent);
  border: 1px solid color-mix(in srgb, var(--border) 70%, transparent);
  font-size: 13px; }
.mock-op { font-weight: 700; font-size: 11px; letter-spacing: 0.03em;
  padding: 3px 8px; border-radius: 6px;
  color: var(--accent-purple);
  background: color-mix(in srgb, var(--accent-purple) 10%, transparent); }
.mock-route { color: var(--secondary-text); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.mock-chip { font-size: 11.5px; font-weight: 650; padding: 3px 9px; border-radius: 999px; white-space: nowrap; }
.chip-ok   { color: #047857; background: rgb(16 185 129 / 14%); }
.chip-way  { color: var(--ink-cyan); background: rgb(34 211 238 / 13%); }
.chip-sign { color: #b45309; background: rgb(251 191 36 / 16%); }
@media (prefers-color-scheme: dark) { .chip-ok { color: #34d399; } .chip-sign { color: #fbbf24; } }
.mock-foot { display: flex; align-items: center; justify-content: space-between;
  padding: 10px 14px; border-top: 1px solid var(--border);
  font-size: 12px; color: var(--tertiary-text); }
.mock-foot b { color: var(--primary-text); }
/* плавное «дыхание» окна; выключается с reduced-motion */
@keyframes mock-float { 0%,100% { transform: perspective(1200px) rotateX(2deg) rotateY(-4deg) translateY(0); }
  50% { transform: perspective(1200px) rotateX(2deg) rotateY(-4deg) translateY(-8px); } }
.mock-window { animation: mock-float 7s ease-in-out infinite; }

/* ── Marquee операторов ── */
.trust-strip { overflow: hidden; padding: var(--spacing-12) 0 var(--spacing-8);
  -webkit-mask-image: linear-gradient(90deg, transparent, #000 12%, #000 88%, transparent);
  mask-image: linear-gradient(90deg, transparent, #000 12%, #000 88%, transparent); }
.trust-label { text-align: center; font-size: 12.5px; letter-spacing: 0.08em;
  text-transform: uppercase; color: var(--tertiary-text); margin-bottom: var(--spacing-12); }
.trust-track { display: flex; gap: var(--spacing-12); width: max-content;
  animation: trust-scroll 26s linear infinite; }
@keyframes trust-scroll { to { transform: translateX(-50%); } }
.trust-item { display: inline-flex; align-items: center; gap: 8px;
  padding: 8px 16px; border-radius: 999px; white-space: nowrap;
  font-size: 14px; font-weight: 650; color: var(--secondary-text);
  border: 1px solid var(--border);
  background: color-mix(in srgb, var(--color-surface) 80%, transparent); }
.trust-item svg { color: var(--accent-purple); }

/* ── Bento ── */
.bento { display: grid; gap: var(--spacing-16);
  grid-template-columns: repeat(4, minmax(0, 1fr)); grid-auto-rows: minmax(150px, auto); }
.bento-tile { position: relative; overflow: hidden;
  border-radius: var(--radius-lg); padding: var(--spacing-24);
  background: var(--color-surface); border: 1px solid var(--border);
  box-shadow: var(--shadow-card);
  transition: transform 0.18s, box-shadow 0.18s, border-color 0.18s; }
.bento-tile:hover { transform: translateY(-3px); box-shadow: var(--shadow-card-hover);
  border-color: color-mix(in srgb, var(--accent-purple) 35%, var(--border)); }
.bento-xl { grid-column: span 2; grid-row: span 2; }
.bento-w2 { grid-column: span 2; }
.bento-tile h3 { margin: 0 0 var(--spacing-8); font-size: 19px; }
.bento-tile p { margin: 0; font-size: 14.5px; color: var(--secondary-text); }
.bento-icon { width: 44px; height: 44px; border-radius: 12px; display: grid; place-items: center;
  color: var(--accent-purple); margin-bottom: var(--spacing-12);
  background: linear-gradient(145deg, rgb(154 79 245 / 14%), rgb(147 51 234 / 6%));
  border: 1px solid var(--glass-border); }
/* мини-лента в большой плитке */
.bento-feed { margin-top: var(--spacing-16); display: flex; flex-direction: column; gap: 6px; }
/* степпер цикла */
.mini-steps { margin-top: var(--spacing-16); display: flex; align-items: center; gap: 4px;
  flex-wrap: wrap; font-size: 12.5px; font-weight: 650; color: var(--secondary-text); }
.mini-steps b { padding: 5px 10px; border-radius: 8px; color: var(--accent-purple);
  background: color-mix(in srgb, var(--accent-purple) 9%, transparent); white-space: nowrap; }
.mini-steps svg { color: var(--tertiary-text); flex: none; }
/* Плитка-дедлайн — широкой полосой на весь ряд: в одну колонку она висела
 * сиротой рядом с пустотой. Заодно это финальный акцент секции. */
.bento-deadline { grid-column: 1 / -1;
  display: grid; grid-template-columns: auto 1fr auto; align-items: center;
  gap: var(--spacing-24);
  background:
    radial-gradient(90% 160% at 100% 0%, rgb(154 79 245 / 18%), transparent 60%),
    var(--color-surface); }
.bento-deadline .bento-icon { margin-bottom: 0; }
.bento-deadline .deadline-when { text-align: right; }
.bento-deadline p { margin: 0; }
.deadline-date { font-size: clamp(24px, 2.6vw, 32px); font-weight: 800; letter-spacing: -0.02em;
  background: linear-gradient(90deg, #7c3aed, #a855f7);
  -webkit-background-clip: text; background-clip: text; color: transparent; }
/* телефон в плитке подписи */
.tile-phone { position: relative; margin: var(--spacing-16) auto 0; width: 150px;
  border-radius: 22px; border: 1px solid var(--glass-border);
  background: var(--hero-glass); padding: 12px 10px 14px;
  box-shadow: 0 14px 34px rgb(24 8 60 / 18%); }
.tile-phone .cam { width: 44px; height: 5px; border-radius: 3px; background: var(--border); margin: 0 auto 10px; }
.tile-phone .qr { display: grid; grid-template-columns: repeat(7, 1fr); gap: 2px; width: 84px; margin: 0 auto 10px; }
.tile-phone .qr i { aspect-ratio: 1; border-radius: 1.5px; background: var(--primary-text); opacity: 0.85; }
.tile-phone .qr i.o { background: transparent; }
.tile-phone .sig { text-align: center; font-size: 11px; font-weight: 700; color: #047857;
  background: rgb(16 185 129 / 13%); border-radius: 999px; padding: 4px 8px; }
@media (prefers-color-scheme: dark) { .tile-phone .sig { color: #34d399; } }
/* узел роуминга */
.tile-net { display: flex; justify-content: center; margin-top: var(--spacing-12); }
.tile-net svg text { font: 650 10.5px -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
  fill: var(--secondary-text); }
.tile-net svg .hub { fill: var(--accent-purple); }
.tile-net svg .lnk { stroke: color-mix(in srgb, var(--accent-purple) 45%, var(--border)); }
.tile-net svg .nod { fill: color-mix(in srgb, var(--color-surface) 60%, transparent);
  stroke: var(--border); }

/* ── Гиды (ссылки на блог) ── */
.guides { display: grid; grid-template-columns: repeat(auto-fit, minmax(260px, 1fr)); gap: var(--spacing-16); }
.guide-card { display: block; padding: var(--spacing-16) var(--spacing-24);
  border-radius: var(--radius-md); text-decoration: none; color: inherit;
  background: var(--color-surface); border: 1px solid var(--border);
  box-shadow: var(--shadow-card); transition: transform 0.18s, box-shadow 0.18s, border-color 0.18s; }
.guide-card:hover { transform: translateY(-2px); box-shadow: var(--shadow-card-hover);
  border-color: color-mix(in srgb, var(--accent-purple) 35%, var(--border)); }
.guide-card b { display: block; margin-bottom: 4px; color: var(--primary-text); }
.guide-card span { font-size: 13.5px; color: var(--tertiary-text); }

/* ── Шаги подключения ── */
.steps { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: var(--spacing-24);
  counter-reset: step; position: relative; }
.step { position: relative; padding: var(--spacing-24); border-radius: var(--radius-md);
  background: var(--color-surface); border: 1px solid var(--border); box-shadow: var(--shadow-card); }
.step::before { counter-increment: step; content: counter(step, decimal-leading-zero);
  display: inline-grid; place-items: center; margin-bottom: var(--spacing-12);
  font-size: 13px; font-weight: 800; letter-spacing: 0.04em;
  width: 40px; height: 40px; border-radius: 12px; color: #fff;
  background: linear-gradient(135deg, #7c3aed, #9333ea);
  box-shadow: 0 6px 16px rgb(154 79 245 / 30%); }
.step h3 { margin: 0 0 var(--spacing-8); font-size: 18px; }
.step p { margin: 0; font-size: 14.5px; color: var(--secondary-text); }

/* ── Тарифы ── */
.price-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(270px, 1fr));
  gap: var(--spacing-24); align-items: stretch; }
.price-card { position: relative; display: flex; flex-direction: column; text-align: left;
  padding: var(--spacing-32) var(--spacing-24) var(--spacing-24);
  border-radius: var(--radius-lg); background: var(--color-surface);
  border: 1px solid var(--border); box-shadow: var(--shadow-card);
  transition: transform 0.18s, box-shadow 0.18s, border-color 0.18s; }
.price-card:hover { transform: translateY(-3px); box-shadow: var(--shadow-card-hover); }
.price-name { font-size: 16px; font-weight: 700; margin: 0 0 var(--spacing-8); }
.price-value { font-size: 40px; font-weight: 800; letter-spacing: -0.02em; line-height: 1.1; }
.price-value small { font-size: 14px; font-weight: 600; color: var(--tertiary-text); letter-spacing: 0; }
.price-for { color: var(--tertiary-text); font-size: 13.5px; margin: 4px 0 var(--spacing-16); }
.price-feats { list-style: none; margin: 0 0 var(--spacing-24); padding: 0;
  display: flex; flex-direction: column; gap: 9px; font-size: 14.5px; color: var(--secondary-text); }
.price-feats li { display: flex; align-items: baseline; gap: 9px; }
.price-feats svg { flex: none; color: var(--success); transform: translateY(2px); }
.price-card .btn { margin-top: auto; width: 100%; text-align: center; }
/* популярный: градиентная рамка + свечение */
.price-hot { border: 1px solid transparent;
  background:
    linear-gradient(var(--color-surface), var(--color-surface)) padding-box,
    linear-gradient(140deg, #7c3aed, #a855f7 45%, #22d3ee) border-box;
  box-shadow: 0 10px 44px rgb(154 79 245 / 22%); }
.price-hot:hover { box-shadow: 0 16px 56px rgb(154 79 245 / 32%); }
.price-badge { position: absolute; top: -13px; left: 50%; transform: translateX(-50%);
  font-size: 11px; font-weight: 800; letter-spacing: 0.06em; text-transform: uppercase;
  color: #fff; padding: 5px 14px; border-radius: 999px;
  background: linear-gradient(120deg, #7c3aed, #9333ea);
  box-shadow: 0 6px 18px rgb(154 79 245 / 35%); white-space: nowrap; }
.price-note { text-align: center; color: var(--tertiary-text); font-size: 13.5px;
  margin-top: var(--spacing-24); }

/* ── Отзывы ── */
.quotes { display: grid; grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); gap: var(--spacing-24); }
.quote-card { position: relative; padding: var(--spacing-24); border-radius: var(--radius-md);
  background: var(--color-surface); border: 1px solid var(--border); box-shadow: var(--shadow-card); }
.quote-card::before { content: "“"; position: absolute; top: 6px; right: 18px;
  font-size: 64px; line-height: 1; font-family: Georgia, serif;
  color: color-mix(in srgb, var(--accent-purple) 22%, transparent); }
.quote-text { font-size: 15px; color: var(--secondary-text); margin: 0 0 var(--spacing-16); }
.quote-who { display: flex; align-items: center; gap: 12px; }
.quote-ava { width: 40px; height: 40px; border-radius: 50%; display: grid; place-items: center;
  font-size: 14px; font-weight: 800; color: #fff;
  background: linear-gradient(135deg, #7c3aed, #a855f7); flex: none; }
.quote-ava.c2 { background: linear-gradient(135deg, #0891b2, #22d3ee); }
.quote-ava.c3 { background: linear-gradient(135deg, #9333ea, #db2777); }
.quote-who b { display: block; font-size: 14px; }
.quote-who span { font-size: 12.5px; color: var(--tertiary-text); }

/* ── Финальный CTA ── */
.cta-final { position: relative; overflow: hidden; text-align: center;
  border-radius: var(--radius-lg); padding: var(--spacing-64) var(--spacing-24);
  color: #fff; background: #17102e;
  border: 1px solid rgb(139 92 246 / 35%); }
.cta-final::before { content: ""; position: absolute; inset: 0; pointer-events: none;
  background:
    radial-gradient(50% 80% at 20% 10%, rgb(154 79 245 / 45%), transparent 70%),
    radial-gradient(45% 70% at 85% 90%, rgb(147 51 234 / 35%), transparent 70%),
    radial-gradient(30% 45% at 70% 15%, rgb(34 211 238 / 16%), transparent 70%); }
.cta-final::after { content: ""; position: absolute; inset: 0; pointer-events: none;
  background-image: radial-gradient(rgb(255 255 255 / 9%) 1px, transparent 1.4px);
  background-size: 24px 24px;
  -webkit-mask-image: linear-gradient(180deg, transparent, #000 40%);
  mask-image: linear-gradient(180deg, transparent, #000 40%); }
.cta-final > * { position: relative; z-index: 1; }
.cta-final h2 { color: #fff; font-size: clamp(26px, 4vw, 38px); margin: 0 0 var(--spacing-12); }
.cta-final p { color: rgb(255 255 255 / 82%); max-width: 34em; margin: 0 auto var(--spacing-32); }
.cta-final .btn-ghost { background: #fff; color: #6d28d9; font-weight: 700; }
.cta-final .btn-ghost:hover { box-shadow: 0 10px 30px rgb(0 0 0 / 30%); }
.cta-deadline { display: inline-block; margin-top: var(--spacing-24); font-size: 13px;
  color: rgb(255 255 255 / 66%); }

/* ── Заголовки секций главной ── */
.sec-head { text-align: center; max-width: 640px; margin: 0 auto var(--spacing-48); }
.sec-head h2 { margin: 0 0 var(--spacing-12); }
.sec-head p { color: var(--secondary-text); margin: 0; }

/* ── Адаптив новых секций ── */
@media (max-width: 1000px) {
  .hero { grid-template-columns: 1fr; gap: var(--spacing-32); }
  .hero-shot { max-width: 560px; margin: 0 auto; width: 100%; }
  .mock-window { transform: none; animation: none; }
  .bento { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .bento-xl { grid-column: span 2; grid-row: auto; }
}

/* Планшет (≈700–1000). Раньше здесь всё схлопывалось в одну колонку уже на
 * 1000px: три коротких шага растягивались во всю ширину, а тарифы ложились
 * 2+1 — для СРАВНЕНИЯ тарифов это худший вариант, читать их надо либо в ряд,
 * либо честно друг под другом. Держим тройки в ряд, поджав типографику. */
@media (min-width: 700px) and (max-width: 1000px) {
  .steps { grid-template-columns: repeat(3, minmax(0, 1fr)); gap: var(--spacing-16); }
  .step { padding: var(--spacing-16); }
  .step h3 { font-size: 16px; }
  .step p { font-size: 13.5px; }

  .price-grid { grid-template-columns: repeat(3, minmax(0, 1fr)); gap: var(--spacing-16); }
  .price-card { padding: var(--spacing-24) var(--spacing-16) var(--spacing-16); }
  .price-value { font-size: 30px; }
  .price-feats { font-size: 13.5px; gap: 7px; }
  .price-badge { font-size: 10px; padding: 4px 10px; }
}

@media (max-width: 699px) {
  .steps { grid-template-columns: 1fr; }
  .price-grid { grid-template-columns: 1fr; }
}
@media (max-width: 760px) {
  .bento-deadline { grid-template-columns: 1fr; text-align: left; }
  .bento-deadline .deadline-when { text-align: left; }
}
@media (max-width: 640px) {
  .bento { grid-template-columns: 1fr; }
  .bento-xl, .bento-w2 { grid-column: auto; }
  .hero { padding-top: var(--spacing-16); }
  .hero-cta .btn { width: 100%; text-align: center; }
  .mock-route { font-size: 12px; }
}
@media (prefers-reduced-motion: reduce) {
  .mock-window { animation: none; }
  .trust-track { animation: none; flex-wrap: wrap; width: auto; justify-content: center; }
  .trust-strip { -webkit-mask-image: none; mask-image: none; }
}

/* Якорные переходы (#features, #pricing) — заголовок уезжал под липкую шапку:
 * при smooth-scroll браузер ставит верх секции ровно под низ header'а. */
main [id] { scroll-margin-top: calc(var(--banner-h) + 42px); }

/* ── Блог: индекс и страница статьи ────────────────────────────────────── */
/* Индекс собирается из content/posts.json (см. build.tsx), поэтому классы
 * ниже — единственное описание вида карточки: править вёрстку 11 раз не надо. */

.blog-head { max-width: 40em; margin: 0 auto var(--spacing-32); text-align: center; }
.blog-eyebrow { font-size: 12.5px; letter-spacing: 0.1em; text-transform: uppercase;
  color: var(--accent-purple); font-weight: 700; margin-bottom: var(--spacing-8); }
.blog-head h1 { margin: 0 0 var(--spacing-12); }
.blog-sub { color: var(--secondary-text); margin: 0; }

/* Метка рубрики. Цвет несёт смысл: разбор закона глаз отделяет от практики,
 * не читая заголовок. Поэтому оттенки РАЗНЫЕ, а не один бренд-фиолетовый. */
.rubric { display: inline-block; font-size: 11.5px; font-weight: 700;
  letter-spacing: 0.05em; text-transform: uppercase; padding: 4px 10px;
  border-radius: 999px; white-space: nowrap; }
.rubric-law   { color: #b45309; background: rgb(251 191 36 / 16%); }
.rubric-howto { color: #047857; background: rgb(16 185 129 / 14%); }
.rubric-vs    { color: #6d28d9; background: rgb(154 79 245 / 13%); }
.rubric-tech  { color: #0e7490; background: rgb(34 211 238 / 14%); }
@media (prefers-color-scheme: dark) {
  .rubric-law { color: #fbbf24; } .rubric-howto { color: #34d399; }
  .rubric-vs { color: #a78bfa; } .rubric-tech { color: #22d3ee; }
}

/* Featured — самый важный материал крупно. Без него индекс это ровная стена
 * одинаковых карточек, по которой непонятно, с чего начинать. */
.post-featured { display: grid; grid-template-columns: minmax(0, 1.35fr) minmax(0, 1fr);
  gap: var(--spacing-32); align-items: center; text-decoration: none; color: inherit;
  padding: var(--spacing-32); margin-bottom: var(--spacing-32);
  border-radius: var(--radius-lg); border: 1px solid var(--border);
  background:
    radial-gradient(90% 130% at 100% 0%, rgb(154 79 245 / 12%), transparent 60%),
    var(--color-surface);
  box-shadow: var(--shadow-card);
  transition: transform 0.18s, box-shadow 0.18s, border-color 0.18s; }
.post-featured:hover { transform: translateY(-3px); box-shadow: var(--shadow-card-hover);
  border-color: color-mix(in srgb, var(--accent-purple) 35%, var(--border)); }
/* Колонкой: иначе дата и «Читать разбор» встают в одну строку и слипаются —
 * это два разных по смыслу элемента, метаданные и действие. */
.post-featured-body { display: flex; flex-direction: column; align-items: flex-start; }
.post-featured h2 { margin: var(--spacing-12) 0 var(--spacing-8); font-size: clamp(22px, 2.6vw, 30px); }
.post-featured p { color: var(--secondary-text); margin: 0 0 var(--spacing-12); }
.post-featured-cta { display: inline-block; margin-top: var(--spacing-12);
  font-weight: 650; color: var(--accent-purple); }
.post-featured-art { display: grid; place-content: center; gap: 6px; text-align: center;
  padding: var(--spacing-32) var(--spacing-16); border-radius: var(--radius-md);
  background: linear-gradient(140deg, rgb(154 79 245 / 14%), rgb(34 211 238 / 8%));
  border: 1px solid var(--glass-border); }
.pf-date { font-size: clamp(24px, 3vw, 34px); font-weight: 800; letter-spacing: -0.02em;
  background: linear-gradient(90deg, #7c3aed, #a855f7);
  -webkit-background-clip: text; background-clip: text; color: transparent; }
.pf-label { font-size: 12px; letter-spacing: 0.08em; text-transform: uppercase;
  color: var(--tertiary-text); }

/* Фильтр рубрик — чипы со счётчиками; фильтрация в client.js без перезагрузки. */
.rubric-filter { display: flex; flex-wrap: wrap; gap: var(--spacing-8);
  margin-bottom: var(--spacing-24); }
.rubric-chip { display: inline-flex; align-items: center; gap: 7px; cursor: pointer;
  font-size: 14px; font-weight: 600; padding: 8px 14px; border-radius: 999px;
  color: var(--secondary-text); background: var(--color-surface);
  border: 1px solid var(--border); transition: color 0.15s, border-color 0.15s, background 0.15s; }
.rubric-chip span { font-size: 12px; font-weight: 700; color: var(--tertiary-text); }
.rubric-chip:hover { border-color: color-mix(in srgb, var(--accent-purple) 40%, var(--border)); }
.rubric-chip.is-on { color: #fff; border-color: transparent;
  background: linear-gradient(120deg, #7c3aed, #8b5cf6);
  box-shadow: 0 4px 14px rgb(154 79 245 / 28%); }
.rubric-chip.is-on span { color: rgb(255 255 255 / 75%); }

.post-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(290px, 1fr));
  gap: var(--spacing-24); }
.post-grid-3 { grid-template-columns: repeat(auto-fit, minmax(260px, 1fr)); }
.post-card { display: flex; flex-direction: column; gap: var(--spacing-8);
  padding: var(--spacing-24); border-radius: var(--radius-md); text-decoration: none;
  color: inherit; background: var(--color-surface); border: 1px solid var(--border);
  box-shadow: var(--shadow-card);
  transition: transform 0.18s, box-shadow 0.18s, border-color 0.18s; }
.post-card:hover { transform: translateY(-3px); box-shadow: var(--shadow-card-hover);
  border-color: color-mix(in srgb, var(--accent-purple) 35%, var(--border)); }
.post-card .rubric { align-self: flex-start; }
.post-card h3 { margin: 0; font-size: 18px; line-height: 1.35; }
.post-card p { margin: 0; font-size: 14.5px; color: var(--secondary-text); flex: 1; }
.post-meta { font-size: 12.5px; color: var(--tertiary-text);
  font-variant-numeric: tabular-nums; }
.post-card[hidden] { display: none; }
.post-empty { text-align: center; color: var(--tertiary-text); padding: var(--spacing-48) 0; }

/* ── Страница статьи ── */

/* Полоса прогресса чтения: у длинного разбора закона нужно понимать, сколько
 * ещё осталось. Ширину двигает client.js. */
.read-progress { position: fixed; top: 0; left: 0; height: 3px; width: 0;
  z-index: 60; background: linear-gradient(90deg, #7c3aed, #a855f7, #22d3ee);
  transition: width 0.1s linear; }

/* Оглавление: липкое сбоку на широком экране, сворачиваемое сверху на узком.
 * Строится из h2 в client.js — статьи писались без оглавления, и размечать
 * 11 файлов руками ради него не нужно. */
.article-layout { display: grid; grid-template-columns: minmax(0, 1fr) 232px;
  gap: var(--spacing-48); align-items: start; }
.toc { position: sticky; top: calc(var(--banner-h) + 74px); font-size: 13.5px; }
.toc-title { font-size: 11.5px; letter-spacing: 0.09em; text-transform: uppercase;
  color: var(--tertiary-text); font-weight: 700; margin: 0 0 var(--spacing-12); }
.toc ol { list-style: none; margin: 0; padding: 0 0 0 var(--spacing-12);
  border-left: 2px solid var(--border); display: flex; flex-direction: column; gap: 9px; }
.toc a { display: block; color: var(--secondary-text); text-decoration: none; line-height: 1.35; }
.toc a:hover { color: var(--accent-purple); }
.toc li.is-current { margin-left: -14px; padding-left: 12px;
  border-left: 2px solid var(--accent-purple); }
.toc li.is-current a { color: var(--accent-purple); font-weight: 600; }

/* Типографика статьи: мера строки уже ограничена long-form (72ch), здесь —
 * ритм и акценты. */
body.long-form main h2 { margin-top: var(--spacing-48); scroll-margin-top: calc(var(--banner-h) + 74px); }
body.long-form main h3 { margin-top: var(--spacing-32); }
body.long-form main :is(p, li) { font-size: 16.5px; line-height: 1.75; }
body.long-form main blockquote { margin: var(--spacing-24) 0; padding: var(--spacing-16) var(--spacing-24);
  border-left: 3px solid var(--accent-purple); border-radius: 0 var(--radius-sm) var(--radius-sm) 0;
  background: color-mix(in srgb, var(--accent-purple) 6%, transparent); font-style: normal; }
body.long-form main blockquote p:last-child { margin-bottom: 0; }

/* «Читать дальше» + CTA в хвосте статьи */
.related { padding-top: var(--spacing-48); margin-top: var(--spacing-48);
  border-top: 1px solid var(--border); }
.related-title { margin: 0 0 var(--spacing-24); font-size: 20px; }
.article-cta { margin-top: var(--spacing-48); text-align: center; color: #fff;
  border-radius: var(--radius-lg); padding: var(--spacing-48) var(--spacing-24);
  position: relative; overflow: hidden; background: #17102e;
  border: 1px solid rgb(139 92 246 / 35%); }
.article-cta::before { content: ""; position: absolute; inset: 0; pointer-events: none;
  background:
    radial-gradient(50% 80% at 20% 10%, rgb(154 79 245 / 45%), transparent 70%),
    radial-gradient(45% 70% at 85% 90%, rgb(147 51 234 / 32%), transparent 70%); }
.article-cta > * { position: relative; z-index: 1; }
.article-cta h3 { color: #fff; font-size: 22px; margin: 0 0 var(--spacing-8); }
.article-cta p { color: rgb(255 255 255 / 82%); max-width: 34em; margin: 0 auto var(--spacing-24); }

@media (max-width: 1000px) {
  .post-featured { grid-template-columns: 1fr; }
  .post-featured-art { order: -1; padding: var(--spacing-24); }
  .article-layout { grid-template-columns: 1fr; gap: var(--spacing-24); }
  /* Оглавление уезжает наверх и сворачивается: липкий сайдбар на планшете
     съедал бы половину меры строки. */
  .toc { position: static; padding: var(--spacing-16); border-radius: var(--radius-md);
    background: var(--color-surface); border: 1px solid var(--border); }
  .toc ol { padding-left: var(--spacing-12); }
}
@media (max-width: 640px) {
  .post-featured { padding: var(--spacing-24); }
  .post-grid { grid-template-columns: 1fr; }
}

.article-meta { display: flex; align-items: center; gap: var(--spacing-12);
  flex-wrap: wrap; margin: 0 0 var(--spacing-24); }

/* Согласие на обработку ПДн: мелко, но читаемо; ссылка на политику — обычная */
.consent-row { display: flex; gap: 9px; align-items: flex-start;
  font-size: 12.5px; font-weight: 400; color: var(--tertiary-text);
  line-height: 1.45; margin: var(--spacing-4) 0 var(--spacing-12); cursor: pointer; }
.consent-row input { width: auto; margin: 2px 0 0; accent-color: var(--accent-purple); flex: none; }
.consent-row a { color: var(--accent-purple); }

/* ═══════════════════════════════════════════════════════════════════════
   Дизайн v2 (пакет «ETRN (5)», «КУБ - сайт.html»): фирменные шрифты, новая
   шапка/футер и главная страница. Классы старого контента выше НЕ трогаем —
   их обслуживают 20 остальных страниц. Брейкпоинты: 1120 → 900 → 560 → 420.
   ═══════════════════════════════════════════════════════════════════════ */

/* Manrope (OFL) — вариативный: один файл на всю типографику сайта, веса
   200–800. Пришёл на смену декоративному AuchentallerC: тот рисовал
   заголовки узнаваемо, но нечитаемо — «ФИКСИРОВАННАЯ АБОНЕНТСКАЯ ПЛАТА»
   разбиралась по буквам. Выбран из четырёх кандидатов (18.08). */
@font-face {
  font-family: 'Manrope';
  src: url('/assets/Manrope.d0639be45d.ttf') format('truetype');
  font-weight: 200 800; font-display: swap;
}

:root {
  --ink:#14101F; --ink2:#3A3348; --muted:#6E6880; --line:#E7E3EF; --soft:#F7F5FC;
  --brand:#502683; --brand2:#9A4FF5; --brand-soft:#F3ECFF;
  --display:'Manrope',Inter,-apple-system,system-ui,sans-serif;
  --subf:'Manrope',Inter,-apple-system,system-ui,sans-serif;
  --bodyf:'Manrope',Inter,-apple-system,system-ui,sans-serif;
  --r2:16px; --rl2:24px;
}

.wrap { max-width: 1180px; margin: 0 auto; padding: 0 24px; }
.display { font-family: var(--display); font-weight: 800; letter-spacing: -.2px; line-height: 1.04; text-transform: uppercase; }
.eyebrow { font-family: var(--bodyf); font-size: 12.5px; font-weight: 700; letter-spacing: 1.4px; text-transform: uppercase; color: var(--brand2); }

/* кнопки дизайна v2 (btn-p/btn-g/btn-o) — рядом со старым .btn, имена не пересекаются */
.btn-p, .btn-g, .btn-o { display: inline-flex; align-items: center; justify-content: center; gap: 9px; height: 54px; padding: 0 26px; border-radius: 12px; font-family: var(--bodyf); font-size: 16px; font-weight: 600; border: 1px solid transparent; cursor: pointer; transition: transform .15s, box-shadow .15s, background .15s; text-decoration: none; }
.btn-p:hover, .btn-g:hover, .btn-o:hover { transform: translateY(-1px); }
.btn-p { background: var(--brand2); color: #fff; box-shadow: 0 8px 24px rgba(154,79,245,.35); }
.btn-p:hover { background: #8A3BF0; color: #fff; }
.btn-g { background: rgba(255,255,255,.1); color: #fff; border-color: rgba(255,255,255,.28); }
.btn-g:hover { background: rgba(255,255,255,.18); color: #fff; }
.btn-o { background: #fff; color: var(--ink); border-color: var(--line); }
.btn-o:hover { border-color: var(--brand2); color: var(--brand); }
.btn-sm { height: 44px; padding: 0 18px; font-size: 14.5px; }

/* ── Шапка v2 ── */
.v2-head { position: sticky; top: 0; z-index: 100; background: rgba(255,255,255,.86); backdrop-filter: blur(14px); border-bottom: 1px solid var(--line); }
.v2-head .nav { display: flex; align-items: center; gap: 24px; height: 72px; }
.v2-head .nav-logo img { height: 30px; width: auto; display: block; }
.v2-head nav { display: flex; gap: 20px; margin-left: auto; }
/* Вход в мобильном дровере: на десктопе его роль играет кнопка в шапке. */
.nav-cabinet-mob { display: none; }
.v2-head nav a { color: var(--ink2); font-size: 15px; font-weight: 500; text-decoration: none; white-space: nowrap; }
.v2-head nav a:hover, .v2-head nav a.nav-link-active { color: var(--brand); }
/* Вход в ЛК — главное действие шапки (24.08.2026). На главной шапка лежит на
   фиолетовом герое, поэтому кнопка белая: так она контрастнее брендовой.
   cursor:not-allowed и opacity остались от заглушки «скоро» — сняты, иначе
   рабочая ссылка выглядит выключенной. */
.v2-head .btn-cabinet { background: #fff; color: var(--ink); border: 1px solid var(--line); border-radius: 12px; font-family: var(--bodyf); font-weight: 700; display: inline-flex; align-items: center; gap: 8px; cursor: pointer; }
.v2-head .btn-cabinet:hover { border-color: var(--brand); color: var(--brand); }
/* На внутренних страницах шапка светлая — там белая кнопка сливалась бы с
   фоном и с бургером, поэтому вход носит цвет бренда. */
body:not(.v2home) .v2-head .btn-cabinet {
  background: var(--brand2, #9a4ff5);
  color: #fff;
  border-color: transparent;
}
body:not(.v2home) .v2-head .btn-cabinet:hover { color: #fff; filter: brightness(1.06); }
.v2-head .soon-badge { font-size: 11px; font-weight: 700; letter-spacing: .4px; text-transform: uppercase; color: var(--brand2); background: var(--brand-soft); border-radius: 99px; padding: 3px 8px; }
.burger { display: none; width: 44px; height: 44px; border: 1px solid var(--line); border-radius: 11px; background: #fff; align-items: center; justify-content: center; cursor: pointer; color: var(--ink); }
#mnav { display: none; }

/* ── Футер v2 (тёмный) ── */
.v2-foot { background: var(--ink); color: rgba(255,255,255,.62); padding: 64px 0 32px; margin-top: 0; }
.v2-foot .f-grid { display: grid; grid-template-columns: 1.6fr 1fr 1fr 1fr; gap: 40px; padding-bottom: 44px; border-bottom: 1px solid rgba(255,255,255,.12); }
.v2-foot img { height: 30px; width: auto; margin-bottom: 16px; }
.v2-foot .f-about { font-size: 14.5px; line-height: 1.6; max-width: 280px; }
.v2-foot h5 { color: #fff; font-size: 14px; font-weight: 700; margin: 0 0 16px; }
.v2-foot a { display: block; color: rgba(255,255,255,.62); font-size: 14.5px; margin-bottom: 11px; text-decoration: none; }
.v2-foot a:hover { color: #fff; }
.v2-foot .f-bot { display: flex; gap: 20px; padding-top: 26px; font-size: 13.5px; flex-wrap: wrap; }
.v2-foot .f-bot div { margin-left: auto; display: flex; gap: 18px; align-items: center; }
.v2-foot .f-bot a { display: inline; margin: 0; }
.v2-foot .footer-soon { color: rgba(255,255,255,.4); }

/* ── Главная v2 ── */
.hero2 { position: relative; background: var(--brand); color: #fff; overflow: hidden; padding: 88px 0 96px; }
.hero-bg { position: absolute; inset: 0; opacity: .5; pointer-events: none; }
.hero-bg i { position: absolute; border: 1.5px solid rgba(255,255,255,.13); border-radius: 64px; display: block; }
.hero-grid { display: grid; grid-template-columns: 1.05fr .95fr; gap: 56px; align-items: center; position: relative; }
.hero2 h1 { font-family: var(--display); font-weight: 800; font-size: clamp(38px,5.6vw,68px); line-height: 1.02; letter-spacing: -.5px; text-transform: uppercase; overflow-wrap: anywhere; margin: 0; }
.hero2 h1 em { font-style: normal; color: #D9BBFF; }
.hero2 p.lead { font-size: clamp(16px,1.4vw,19px); color: rgba(255,255,255,.86); margin-top: 22px; max-width: 520px; line-height: 1.55; }
.hero-cta { display: flex; gap: 14px; margin-top: 34px; flex-wrap: wrap; }
.hero-note { display: flex; align-items: center; gap: 10px; margin-top: 22px; font-size: 14px; color: rgba(255,255,255,.72); }
.deadline { display: inline-flex; align-items: center; gap: 9px; padding: 8px 14px; border-radius: 99px; background: rgba(255,255,255,.12); border: 1px solid rgba(255,255,255,.22); font-size: 13.5px; font-weight: 600; margin-bottom: 24px; line-height: 1.35; }
.deadline b { color: #F5D77A; }

.tcard { background: #fff; border-radius: var(--rl2); box-shadow: 0 30px 70px rgba(20,16,31,.28); overflow: hidden; color: var(--ink); }
.tcard-h { display: flex; align-items: center; gap: 10px; padding: 16px 20px; border-bottom: 1px solid var(--line); }
.tcard-h .dot { width: 9px; height: 9px; border-radius: 99px; background: var(--success); }
.tcard-h b { font-size: 14.5px; font-weight: 700; }
.tcard-h span { margin-left: auto; font-size: 12.5px; color: var(--muted); }
.tl { padding: 8px 20px 18px; }
.tl-row { display: flex; gap: 14px; padding: 13px 0; }
.tl-ic { width: 34px; height: 34px; border-radius: 11px; display: flex; align-items: center; justify-content: center; flex-shrink: 0; }
.tl-b { flex: 1; min-width: 0; }
.tl-b b { display: block; font-size: 14px; font-weight: 600; }
.tl-b span { display: block; font-size: 12.5px; color: var(--muted); margin-top: 2px; }
.tl-t { font-size: 12px; color: var(--muted); white-space: nowrap; }
.tpill { display: inline-flex; align-items: center; gap: 6px; padding: 4px 10px; border-radius: 99px; font-size: 11.5px; font-weight: 700; }

.strip { background: #fff; border-top: 1px solid var(--line); border-bottom: 1px solid var(--line); padding: 26px 0; }
.strip-in { display: flex; align-items: center; gap: 34px; flex-wrap: wrap; justify-content: center; }
.strip-in p { font-size: 14px; color: var(--muted); font-weight: 500; margin: 0; }
.op { display: flex; align-items: center; gap: 9px; font-size: 15.5px; font-weight: 700; color: var(--ink2); }
.op i { width: 30px; height: 30px; border-radius: 9px; display: flex; align-items: center; justify-content: center; font-size: 14px; font-style: normal; color: #fff; }

.v2sec { padding: 96px 0; }
.sec-head { max-width: 720px; margin-bottom: 52px; }
.sec-head h2 { font-family: var(--display); font-weight: 800; font-size: clamp(30px,3.6vw,46px); line-height: 1.06; text-transform: uppercase; letter-spacing: -.3px; margin: 14px 0 0; }
.sec-head p { font-size: 17.5px; color: var(--muted); margin-top: 18px; line-height: 1.55; }
.grid3 { display: grid; grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); gap: 22px; }
.fcard { padding: 32px; border: 1px solid var(--line); border-radius: var(--rl2); background: #fff; transition: border-color .18s, transform .18s; }
.fcard:hover { border-color: #D6C7F2; transform: translateY(-3px); }
.f-ic { width: 52px; height: 52px; border-radius: 15px; background: var(--brand-soft); display: flex; align-items: center; justify-content: center; margin-bottom: 20px; }
.fcard h3 { font-family: var(--subf); font-size: 20px; font-weight: 700; margin: 0 0 10px; }
.fcard p { font-size: 15.5px; color: var(--muted); line-height: 1.55; margin: 0; }

.steps2 { background: var(--soft); }
.step-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(240px, 1fr)); gap: 20px; }
.step2 { background: #fff; border: 1px solid var(--line); border-radius: var(--rl2); padding: 28px; position: relative; }
.step-n { width: 34px; height: 34px; border-radius: 99px; background: var(--brand); color: #fff; display: flex; align-items: center; justify-content: center; font-size: 15px; font-weight: 700; margin-bottom: 18px; }
.step2 h4 { font-family: var(--subf); font-size: 17.5px; font-weight: 700; margin: 0 0 8px; }
.step2 p { font-size: 14.5px; color: var(--muted); line-height: 1.5; margin: 0; }
.step2 .who { display: inline-block; margin-top: 14px; font-size: 12px; font-weight: 700; letter-spacing: .6px; text-transform: uppercase; color: var(--brand2); }

.roam { display: grid; grid-template-columns: 1fr 1fr; gap: 56px; align-items: center; }
.roam-box { background: var(--brand); border-radius: var(--rl2); padding: 34px; color: #fff; }
.roam-box h4 { font-family: var(--subf); font-size: 19px; font-weight: 700; margin: 0 0 20px; }
.roam-line { display: flex; align-items: center; gap: 12px; padding: 13px 0; border-bottom: 1px solid rgba(255,255,255,.14); }
.roam-line:last-child { border-bottom: 0; }
.roam-line b { flex: 1; font-size: 15px; font-weight: 600; }
.roam-line span { font-size: 13px; color: rgba(255,255,255,.7); }
.check { width: 22px; height: 22px; border-radius: 99px; background: rgba(255,255,255,.16); display: flex; align-items: center; justify-content: center; flex-shrink: 0; }
.vs { display: flex; gap: 14px; margin-top: 26px; }
.vs > div { flex: 1; padding: 18px; border-radius: 14px; border: 1px solid var(--line); }
.vs h5 { font-size: 13px; font-weight: 700; letter-spacing: .5px; text-transform: uppercase; color: var(--muted); margin: 0 0 10px; }
.vs p { font-size: 14.5px; line-height: 1.5; margin: 0; }

.plans { display: grid; grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); gap: 22px; align-items: start; }
.plan { border: 1px solid var(--line); border-radius: var(--rl2); padding: 32px; background: #fff; position: relative; }
.plan.pop { border-color: var(--brand2); box-shadow: 0 20px 50px rgba(80,38,131,.14); }
.tag { position: absolute; top: -13px; left: 32px; background: var(--brand2); color: #fff; font-size: 11.5px; font-weight: 700; letter-spacing: .6px; text-transform: uppercase; padding: 5px 12px; border-radius: 99px; }
.plan h3 { font-family: var(--subf); font-size: 21px; font-weight: 700; margin: 0; }
.plan .who2 { font-size: 14px; color: var(--muted); margin-top: 4px; }
.price { font-family: var(--bodyf); font-weight: 800; font-size: 40px; letter-spacing: -1.2px; margin: 22px 0 4px; }
.price small { font-family: var(--bodyf); font-size: 15px; font-weight: 500; color: var(--muted); letter-spacing: 0; }
.sig { font-size: 14.5px; font-weight: 600; color: var(--brand); margin-bottom: 22px; }
.plan ul { list-style: none; display: flex; flex-direction: column; gap: 11px; margin: 0 0 26px; padding: 0; }
.plan li { display: flex; gap: 10px; font-size: 14.5px; color: var(--ink2); line-height: 1.45; }
.plan li svg { flex-shrink: 0; margin-top: 2px; }
.addons { margin-top: 28px; padding: 22px 24px; border-radius: var(--r2); background: var(--soft); display: flex; align-items: center; gap: 20px; flex-wrap: wrap; }
.addons b { font-size: 15px; }
.addons p { font-size: 14px; color: var(--muted); flex: 1; min-width: 220px; margin: 0; }

.faq2 { border-top: 1px solid var(--line); }
.faq2 details { border-bottom: 1px solid var(--line); padding: 22px 0; }
.faq2 summary { list-style: none; cursor: pointer; display: flex; align-items: center; gap: 16px; font-family: var(--subf); font-size: 18px; font-weight: 600; }
.faq2 summary::-webkit-details-marker { display: none; }
.faq2 summary::after { content: '+'; margin-left: auto; font-size: 24px; color: var(--brand2); font-weight: 400; line-height: 1; }
.faq2 details[open] summary::after { content: '−'; }
.faq2 p { font-size: 15.5px; color: var(--muted); line-height: 1.6; margin: 14px 0 0; max-width: 840px; }

.cta2 { background: var(--ink); color: #fff; border-radius: var(--rl2); padding: 64px 48px; text-align: center; position: relative; overflow: hidden; }
.cta2 h2 { font-family: var(--display); font-weight: 800; font-size: clamp(28px,3.4vw,44px); text-transform: uppercase; letter-spacing: -.3px; line-height: 1.06; position: relative; margin: 0; }
.cta2 p { font-size: 17px; color: rgba(255,255,255,.7); margin: 18px auto 30px; max-width: 520px; position: relative; line-height: 1.55; }
.cta2 .hero-cta { justify-content: center; position: relative; margin-top: 0; }

/* ── Адаптив v2 ── */
@media (max-width: 1120px) {
  .deadline { font-size: 12.5px; padding: 7px 12px; gap: 8px; }
  /* Раньше здесь пряталась кнопка ЛК («жертвуем недоступной») — теперь вход
     рабочий и главный, а место освободила ушедшая из шапки «Оставить заявку».
     Меню не переносится: сжимаем зазор пунктов. */
  .v2-head nav { gap: 16px; }
}
@media (max-width: 900px) {
  .hero-grid, .roam { grid-template-columns: 1fr; gap: 40px; }
  .v2-head .nav { flex-wrap: nowrap; position: relative; height: auto; min-height: 72px; gap: 10px; padding: 0 16px; }
  .v2-head .nav-logo { flex: 0 0 auto; }
  /* Прижатие к правому краю унаследовано от ушедшей «Оставить заявку»:
     без него кнопка входа вставала вплотную к лого. */
  .v2-head .btn-cabinet { margin-left: auto; padding: 0 14px; font-size: 14px; white-space: nowrap; }
  .v2-head nav { position: absolute; top: 100%; left: 0; right: 0; display: none; flex-direction: column; gap: 0; margin: 0; background: #fff; border: 1px solid var(--line); border-radius: var(--rl2); box-shadow: 0 18px 44px rgba(20,16,31,.13); padding: 8px; z-index: 60; }
  .v2-head nav a { padding: 13px 14px; border-radius: 10px; font-size: 16px; }
  .v2-head nav a:hover { background: var(--soft); }
  /* Вход — последним пунктом дровера, отделён чертой и цветом бренда. */
  .nav-cabinet-mob {
    display: block;
    margin-top: 4px;
    padding-top: 13px;
    border-top: 1px solid var(--line);
    color: var(--brand) !important;
    font-weight: 700;
  }
  .v2-head .nav:has(#mnav:checked) nav { display: flex; }
  .burger { display: flex; }
  .v2-head .nav:has(#mnav:checked) .burger { background: var(--soft); border-color: var(--brand); }
  .v2-foot .f-grid { grid-template-columns: 1fr 1fr; gap: 32px; }
  .v2sec { padding: 68px 0; }
  .cta2 { padding: 48px 24px; }
  .vs { flex-direction: column; }
}
@media (max-width: 560px) {
  .v2-foot .f-grid { grid-template-columns: 1fr; gap: 26px; padding-bottom: 32px; }
  .v2sec { padding: 52px 0; }
  .wrap { padding: 0 18px; }
  .plan, .fcard, .step2 { padding: 24px; }
  .roam-box { padding: 26px; }
  .sec-head p { font-size: 16px; }
  .cta2 { padding: 36px 20px; }
  .plans, .grid3, .step-grid { gap: 16px; }
}
@media (max-width: 420px) {
  .v2-head .nav { gap: 8px; padding: 0 12px; }
  .v2-head .nav-logo img { height: 26px; }
  .v2-head .btn-cabinet { padding: 0 12px; font-size: 13.5px; }
}

/* ── Темы ──
   Дизайн v2 одно-темный (светлый): главная пинится к light независимо от
   prefers-color-scheme — иначе тёмная схема браузера красит унаследованные
   заголовки в белый на белых карточках. Цвета заголовков задаём явно по той
   же причине: база старой темы переключается медиа-запросом, а поверхности
   v2 всегда светлые. */
body.v2home { background: #fff; color: var(--ink); color-scheme: light; }
.sec-head h2, .fcard h3, .step2 h4, .plan h3, .price, .faq2 summary, .addons b { color: var(--ink); }
.vs p { color: var(--ink2); }
.roam h2 { color: var(--ink); }

/* Внутренние страницы остались в старой адаптивной теме — светлой шапке v2
   нужен тёмный вариант, чтобы не висеть белой плашкой над тёмным контентом. */
@media (prefers-color-scheme: dark) {
  body:not(.v2home) .v2-head { background: rgba(18,18,31,.86); border-bottom-color: #2c2c45; }
  /* фиолетовый логотип тонет на тёмной шапке — перекрашиваем в белый */
  body:not(.v2home) .nav-logo img { filter: brightness(0) invert(1); }
  body:not(.v2home) .v2-head nav a { color: #d1d5db; }
  body:not(.v2home) .v2-head nav a:hover,
  body:not(.v2home) .v2-head nav a.nav-link-active { color: #B47DF8; }
  body:not(.v2home) .burger { background: #1a1a2e; color: #f3f4f6; border-color: #2c2c45; }
  body:not(.v2home) .v2-head nav { background: #1a1a2e; border-color: #2c2c45; }
  body:not(.v2home) .v2-head .nav:has(#mnav:checked) .burger { background: #232338; border-color: #B47DF8; }
}

/* Главная v2 живёт от края до края: гасим рамку main для страниц с hero2 */
main.section:has(.hero2) { padding: 0; }

/* ── Слайдер анонсов на главной (02.09.2026) ──
 * Листание — нативный scroll-snap: свайп на телефоне и без JS. JS (client.js)
 * добавляет точки, стрелки и автопрокрутку. Первый слайд — конференция
 * «ЭПД 2026»: её айдентика тёмная с оранжевым, поэтому у слайда свои цвета,
 * остальные слайды — в нашей светлой палитре. */
/* Слайдер стоит ПОД фиолетовым hero (02.09.2026, решение владельца), над
   полосой операторов: воздух сверху и снизу одинаковый, полоса со своим border-top. */
.promo { background: #fff; padding: 28px 0 24px; }
.promo-track { display: flex; overflow-x: auto; scroll-snap-type: x mandatory; scrollbar-width: none; border-radius: var(--rl2); }
.promo-track::-webkit-scrollbar { display: none; }
.promo-slide { flex: 0 0 100%; scroll-snap-align: start; box-sizing: border-box; position: relative; overflow: hidden;
  display: grid; grid-template-columns: 1.15fr .85fr; gap: 32px; align-items: center;
  min-height: 320px; padding: 42px 48px; border-radius: var(--rl2); }
.promo-slide:not(:has(.promo-art)) { grid-template-columns: 1fr; }
.promo-epd { background: #0B0A12; color: #fff; }
.promo-epd::before { content: ""; position: absolute; top: -40%; right: -8%; width: 62%; height: 180%;
  background: radial-gradient(closest-side, rgba(255,122,26,.30), transparent 72%); pointer-events: none; }
.promo-epd::after { content: ""; position: absolute; inset: 0; pointer-events: none; opacity: .35;
  background-image: radial-gradient(rgba(255,255,255,.18) 1px, transparent 1.2px); background-size: 22px 22px; }
.promo-body { position: relative; z-index: 1; }
.promo-tag { display: inline-flex; padding: 6px 12px; border-radius: 8px; border: 1px solid rgba(255,122,26,.75);
  color: #FF9A4D; font-size: 12.5px; font-weight: 700; letter-spacing: .06em; text-transform: uppercase; }
.promo-title { font-family: var(--display); font-weight: 800; text-transform: uppercase;
  font-size: clamp(28px, 4vw, 48px); line-height: 1.02; letter-spacing: -.4px; margin: 16px 0 0; overflow-wrap: anywhere; }
.promo-epd .promo-title em { font-style: normal; color: #FF7A1A; }
.promo-sub { margin: 14px 0 0; font-size: clamp(15px, 1.3vw, 17px); line-height: 1.55; max-width: 560px; color: rgba(255,255,255,.8); }
.promo-meta { display: flex; gap: 10px; flex-wrap: wrap; margin-top: 18px; }
.promo-pill { display: inline-flex; align-items: center; gap: 8px; padding: 8px 14px; border-radius: 99px;
  background: rgba(255,255,255,.08); border: 1px solid rgba(255,255,255,.16); font-size: 14px; font-weight: 600; }
.promo-cta { display: flex; gap: 18px; align-items: center; flex-wrap: wrap; margin-top: 24px; }
.btn-orange { display: inline-flex; align-items: center; padding: 12px 20px; border-radius: 12px;
  background: #FF7A1A; color: #14101F; font-family: var(--bodyf); font-weight: 800; font-size: 15px; text-decoration: none; }
.btn-orange:hover { filter: brightness(1.07); }
.promo-more { color: rgba(255,255,255,.85); font-weight: 600; font-size: 15px; text-decoration: none; }
.promo-more:hover { color: #fff; text-decoration: underline; }
.promo-art { position: relative; z-index: 1; justify-self: end; width: 100%; max-width: 380px; }
.promo-art svg { width: 100%; height: auto; display: block; filter: drop-shadow(0 0 14px rgba(255,122,26,.35)); }
.promo-light { background: var(--soft); color: var(--ink); border: 1px solid var(--line); }
.promo-light .promo-tag { border-color: rgba(154,79,245,.5); color: var(--brand2); }
.promo-light .promo-title em { font-style: normal; color: var(--brand2); }
.promo-light .promo-sub { color: var(--muted); }
.promo-light .promo-more { color: var(--brand); }
.promo-light .promo-more:hover { color: var(--brand2); }
.promo-nav { display: flex; align-items: center; justify-content: center; gap: 14px; padding: 14px 0 4px; }
.promo-btn { width: 36px; height: 36px; border-radius: 99px; border: 1px solid var(--line); background: #fff; color: var(--ink);
  font-size: 22px; line-height: 1; cursor: pointer; display: grid; place-items: center; padding: 0 0 3px; }
.promo-btn:hover { border-color: var(--brand); color: var(--brand); }
.promo-btn:focus-visible, .promo-dot:focus-visible, .btn-orange:focus-visible { outline: 2px solid var(--brand2); outline-offset: 2px; }
.promo-dots { display: flex; gap: 8px; }
.promo-dot { width: 8px; height: 8px; border-radius: 99px; border: 0; padding: 0; background: var(--line); cursor: pointer; transition: width .2s, background .2s; }
.promo-dot[aria-selected="true"] { width: 22px; background: var(--brand); }
.promo-nav:not(:has(.promo-dot)) { display: none; } /* без JS: точек нет — панель не нужна, свайп остаётся */
@media (max-width: 900px) {
  .promo-slide { grid-template-columns: 1fr; padding: 30px 26px; min-height: 0; }
  .promo-art { display: none; }
}
@media (max-width: 560px) {
  .promo { padding: 16px 0 12px; }
  .promo-slide { padding: 22px 18px; }
  .promo-title { font-size: 26px; }
  .promo-cta { gap: 12px; }
}
@media (prefers-reduced-motion: reduce) { .promo-track { scroll-behavior: auto; } .promo-dot { transition: none; } }


/* ── Лента обновлений: блок на главной и страница /updates/ ──
 *
 * Задача блока — за пять секунд снять вопрос «а платформа вообще живая?».
 * Поэтому карточка короткая (метка, дата, заголовок, три строки) и НЕ ссылка:
 * у записи нет своей страницы, кликать некуда — а карточка, которая выглядит
 * ссылкой и никуда не ведёт, раздражает сильнее, чем её отсутствие.
 * Ссылка появляется только там, где действительно есть куда вести (upd-link). */

.upd-head { display: flex; align-items: flex-end; justify-content: space-between;
  gap: var(--spacing-24); margin-bottom: var(--spacing-32); }
.upd-head h2 { margin: 0 0 var(--spacing-12); }
.upd-lead { margin: 0; color: var(--secondary-text); max-width: 54em; }
.upd-all { flex: none; }

.upd-grid { display: grid; gap: var(--spacing-16);
  grid-template-columns: repeat(auto-fit, minmax(268px, 1fr)); }
.upd-list { display: grid; gap: var(--spacing-16); max-width: 780px; margin: 0 auto;
  grid-template-columns: minmax(0, 1fr); }

.upd-card { display: flex; flex-direction: column; gap: var(--spacing-8);
  padding: var(--spacing-24); border-radius: var(--radius-md);
  background: var(--color-surface); border: 1px solid var(--border);
  box-shadow: var(--shadow-card); scroll-margin-top: 96px; }
.upd-top { display: flex; align-items: center; gap: var(--spacing-8);
  justify-content: space-between; }
.upd-date { font-size: 12.5px; color: var(--tertiary-text);
  font-variant-numeric: tabular-nums; white-space: nowrap; }
.upd-card h3 { margin: 0; font-size: 18px; line-height: 1.35; }
.upd-card p { margin: 0; font-size: 14.5px; color: var(--secondary-text); }
.upd-link { align-self: flex-start; font-size: 14px; font-weight: 600;
  color: var(--accent-purple); text-decoration: none; }
.upd-link:hover { text-decoration: underline; }

/* Ссылка «все обновления» дублируется под сеткой: на узком экране кнопка из
 * шапки блока уезжает под заголовок и теряется между текстом и карточками. */
.upd-all-mob { display: none; }

@media (max-width: 720px) {
  .upd-head { display: block; }
  .upd-all { display: none; }
  .upd-all-mob { display: inline-block; margin-top: var(--spacing-24);
    font-weight: 600; color: var(--accent-purple); text-decoration: none; }
}

/* Блок на ГЛАВНОЙ живёт в теме v2, а она принудительно светлая (body.v2home).
 * Токены выше — из старой адаптивной темы: при тёмной схеме браузера они дают
 * тёмную карточку и тёмный заголовок на белой странице (ровно то, о чём
 * предупреждает комментарий «Темы» ниже). Поэтому здесь цвета явные, как у
 * .fcard и .step2 — теми же значениями, а не «похожими». */
.upd-teaser .upd-card { background: #fff; border: 1px solid var(--line);
  border-radius: var(--rl2); box-shadow: none; padding: 28px; }
.upd-teaser .upd-card h3 { color: var(--ink); font-family: var(--subf);
  font-size: 19px; font-weight: 700; }
.upd-teaser .upd-card p { color: var(--muted); font-size: 15px; line-height: 1.55; }
.upd-teaser .upd-date { color: var(--muted); }
.upd-teaser h2 { color: var(--ink); }
.upd-teaser .upd-lead { color: var(--ink2); }
.upd-teaser .upd-link { color: var(--brand2); }
/* Метки в тёмной схеме перекрашиваются в светлые (см. блок .rubric-* выше) —
 * на всегда светлой главной это белый текст на белом. Возвращаем тёмные. */
.upd-teaser .rubric-law   { color: #b45309; }
.upd-teaser .rubric-howto { color: #047857; }
.upd-teaser .rubric-vs    { color: #6d28d9; }
.upd-teaser .rubric-tech  { color: #0e7490; }
