/* ============================================================
   HASchange — слой редизайна.
   Грузится последним в style.css, поэтому перекрывает main.min.css движка.

   Состоит из двух частей:
   1) МОСТ — переопределение 111 переменных движка на фирменные токены.
      Это перекрашивает всю разметку, которую генерирует плагин
      (формы обмена, таблицы, личный кабинет) без правки самого плагина.
   2) КАРКАС — шапка и футер по макетам, собранные из инлайновых стилей
      прототипа в классы.
   ============================================================ */

/* ────────────────────────────────────────────────────────────
   1. МОСТ К ПЕРЕМЕННЫМ ДВИЖКА

   Движок вешает класс .light/.dark И на <html> (header.php:72-90),
   И на <body> (body_class + includes/sites_func.php). Его правило .light
   объявляет переменные на ОБОИХ уровнях, поэтому перекрывать только
   html.light бесполезно: body переобъявит их ниже по дереву, и элементы
   унаследуют значение от body. Поэтому целимся в оба узла.

   Фирменный цвет движка — синий #4d7bf1 (9 переменных),
   ховер #1043c7 (3), вторичный ховер #456fd9 (2).
   ──────────────────────────────────────────────────────────── */

html.light,
html.dark,
body.light,
body.dark {
  /* Шрифт: у движка Rubik + Unbounded, у нас один Onest */
  --font: 'Onest', Inter, Arial, sans-serif;
  --font-secondary: 'Onest', Inter, Arial, sans-serif;

  /* tokens/typography.css из бандла перечисляет только «TT Norms» и
     «TT Norms Pro». Шрифт платный, физически его нет — без Onest в цепочке
     сайт молча падает на Arial. Дизайнер решил это, назвав Onest «TT Norms»;
     мы не подменяем название, а дописываем реальное семейство следом:
     если TT Norms когда-нибудь купят и подключат — он выиграет сам.
     Селектор с классом (0,1,1) перебивает :root (0,1,0) из токенов. */
  --font-sans: 'TT Norms', 'TT Norms Pro', 'Onest', Inter, Arial, sans-serif;
}

html.light,
body.light {
  /* — заливки и кнопки: синий → фирменный жёлтый — */
  --Colors-Fills-Primary: var(--has-yellow);
  --Primary-Button: var(--has-yellow);
  --Form-Button: var(--has-yellow);
  --Colors-Fills-Dropmenu-Burgermenu: var(--has-yellow);

  /* ховеры кнопок: #456fd9 → светлый жёлтый */
  --Form-Button-Hover: var(--has-yellow-light);
  --Colors-States-Accordeon-Hover: var(--has-yellow-light);

  /* Текст на жёлтом обязан быть тёмным, иначе нечитаемо */
  --Colors-Texts-Primary-Button-Text: var(--has-black);
  --Colors-Texts-Form-Button-Text: var(--has-black);

  /* — текстовые ссылки —
     Жёлтый на белом для текста нечитаем (контраст ~1.5:1),
     поэтому ссылки уводим в тёмное золото, а ховер — в графит. */
  --Colors-Texts-Link: var(--has-gold-deep);
  --Colors-Texts-Form-Link: var(--has-gold-deep);
  --Colors-Header-Footer-Header-Link: var(--has-gold-deep);
  --Colors-Header-Footer-Footer-Link: var(--has-gold-deep);
  --Colors-Texts-Secondary-Button-Text: var(--has-gold-deep);
  --Colors-Texts-Link-Hover: var(--has-black);
  --Colors-Header-Footer-Header-Link-Click: var(--has-black);
  --Colors-Header-Footer-Footer-Link-Click: var(--has-black);

  /* — подсветки выбора и наведения: синие вымывки → жёлтые — */
  --Colors-Fills-Comments-Timers: var(--yellow-ring);
  --Colors-States-Currency-Item-Hover: var(--yellow-ring);
  --Colors-States-Droplist-Item-Hover: var(--yellow-ring);
  --Colors-Fills-Table-Header: var(--yellow-wash);
  --Colors-States-Currency-Item-Selected: var(--yellow-wash);
  --Colors-States-Droplist-Item-Selected: var(--yellow-wash);

  /* — текст и поверхности под тёплую палитру — */
  --Colors-Texts-Text: var(--has-graphite);
  --Colors-Texts-On-Page: var(--has-graphite);
  --Colors-Texts-Form-Text: var(--has-graphite);
  --Colors-Fills-Dividers: var(--border-light);
  --Colors-Fills-Form-Dividers: var(--border-light);

  /* статусные цвета — на фирменные */
  --Colors-Fills-Positive: var(--success);
  --Colors-Fills-Error: var(--error);
}

html.dark,
body.dark {
  --Colors-Fills-Primary: var(--has-yellow);
  --Primary-Button: var(--has-yellow);
  --Form-Button: var(--has-yellow);
  --Colors-Fills-Dropmenu-Burgermenu: var(--has-yellow);
  --Form-Button-Hover: var(--has-yellow-light);
  --Colors-States-Accordeon-Hover: var(--has-yellow-light);
  --Colors-Texts-Primary-Button-Text: var(--has-black);
  --Colors-Texts-Form-Button-Text: var(--has-black);

  /* на тёмном фоне жёлтый читается — ссылки можно оставить жёлтыми */
  --Colors-Texts-Link: var(--has-yellow);
  --Colors-Texts-Form-Link: var(--has-yellow);
  --Colors-Header-Footer-Header-Link: var(--has-yellow);
  --Colors-Header-Footer-Footer-Link: var(--has-yellow);
  --Colors-Texts-Secondary-Button-Text: var(--has-yellow);
  --Colors-Texts-Link-Hover: var(--has-yellow-light);

  --Colors-Fills-Comments-Timers: var(--yellow-ring);
  --Colors-States-Currency-Item-Hover: var(--yellow-ring);
  --Colors-States-Droplist-Item-Hover: var(--yellow-ring);
  --Colors-Fills-Table-Header: var(--yellow-wash);
  --Colors-States-Currency-Item-Selected: var(--yellow-wash);
  --Colors-States-Droplist-Item-Selected: var(--yellow-wash);

  --Colors-Fills-Positive: var(--success);
  --Colors-Fills-Error: var(--error);
}

/* Тёмная тема токенов дизайн-системы.
   Дизайн задаёт её через [data-theme="dark"], движок — через html.dark.
   Поддерживаем оба, чтобы макеты и движок жили в одной теме. */
html.dark,
body.dark,
[data-theme='dark'] {
  --has-white: #1a1712;
  --has-cream: #100e09;
  --surface-sunken: #221e16;
  --surface-card: #1a1712;
  --surface-page: #100e09;
  --text-primary: #ffffff;
  --text-secondary: rgba(255, 255, 255, 0.74);
  --text-muted: rgba(255, 255, 255, 0.46);
  --border-light: rgba(255, 255, 255, 0.12);
}

/* ────────────────────────────────────────────────────────────
   2. КАРКАС: ШАПКА
   Собрано из инлайновых стилей макета «Главная Desktop».
   Схлопывание в капсулу — класс .is-stuck, его вешает js/has-head.js.
   В прототипе это делалось правкой inline-стилей в rAF-цикле;
   здесь состояние описано CSS, скрипт только переключает класс.
   ──────────────────────────────────────────────────────────── */

.hc-head {
  position: sticky;
  top: 0;
  z-index: 50;
  background: var(--has-white);
  border-bottom: 1px solid var(--border-light);
  padding-top: 0;
  transition: background var(--dur-slow) var(--ease-out),
              border-color var(--dur-slow) var(--ease-out),
              padding var(--dur-slow) var(--ease-out);
}

.hc-head-inner {
  max-width: var(--container-max);
  margin: 0 auto;
  padding: 16px 40px;
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 20px;
  background: transparent;
  border: 1px solid transparent;
  border-radius: 0;
  box-shadow: none;
  transition: max-width var(--dur-slow) var(--ease-out),
              background var(--dur-slow) var(--ease-out),
              border-radius var(--dur-slow) var(--ease-out),
              box-shadow var(--dur-slow) var(--ease-out),
              border-color var(--dur-slow) var(--ease-out),
              padding var(--dur-slow) var(--ease-out);
}

/* состояние после прокрутки > 24px — плавающая капсула */
.hc-head.is-stuck {
  background: transparent;
  border-bottom-color: transparent;
  padding-top: 12px;
}

.hc-head.is-stuck .hc-head-inner {
  max-width: 1120px;
  background: var(--has-white);
  border-color: var(--border-light);
  border-radius: 18px;
  box-shadow: 0 10px 30px rgba(18, 16, 10, 0.1);
  padding: 10px 18px 10px 22px;
}

.hc-logo {
  height: 28px;
  display: block;
  flex: none;
}

.hc-nav {
  display: flex;
  align-items: center;
  gap: 30px;
  min-width: 0;
  overflow-x: auto;
  scrollbar-width: none;
  -ms-overflow-style: none;
}

.hc-nav::-webkit-scrollbar {
  display: none;
}

.hc-nav a {
  font-family: var(--font-sans);
  font-weight: 600;
  font-size: 15px;
  color: var(--text-secondary);
  text-decoration: none;
  white-space: nowrap;
  transition: color var(--dur-fast) var(--ease-out);
}

.hc-nav a:hover,
.hc-nav a.is-active {
  color: var(--text-primary);
}

.hc-actions {
  display: flex;
  align-items: center;
  gap: 10px;
  flex: none;
}

/* квадратная иконочная кнопка 40×40 */
.hc-icon-btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 40px;
  height: 40px;
  /* в макете у кнопок шапки скругление 12px */
  border-radius: 12px;
  border: 1px solid var(--border-light);
  background: var(--has-white);
  color: var(--text-primary);
  cursor: pointer;
  text-decoration: none;
  font-family: var(--font-sans);
  font-weight: 800;
  font-size: 13px;
  letter-spacing: -0.02em;
  transition: border-color var(--dur-fast) var(--ease-out),
              background var(--dur-fast) var(--ease-out);
}

.hc-icon-btn:hover {
  border-color: var(--has-gold);
}

.hc-divider {
  width: 1px;
  height: 24px;
  background: var(--border-light);
}

/* ---- переключатель светлой/тёмной темы ----
   Движок прячет .header__dark-mode (display:none) и показывает только
   внутри родителя с классом .switcher. В нашей шапке кнопка выводится в PHP
   лишь при h_change['switcher'] === 2, поэтому показываем безусловно.
   Иконки свои, инлайновые: background-image движка нам не подходит. */

.hc-theme-toggle.header__dark-mode {
  display: inline-flex;
  background-image: none;
}

.hc-theme-toggle svg { flex: none; }

/* Видна ровно одна иконка: в светлой теме — луна (предложение переключиться
   на тёмную), в тёмной — солнце. Без этих правил обе рисуются разом. */
.hc-theme-toggle .hc-ico-sun { display: none; }
.hc-theme-toggle .hc-ico-moon { display: block; }

html.dark .hc-theme-toggle .hc-ico-sun,
body.dark .hc-theme-toggle .hc-ico-sun { display: block; }

html.dark .hc-theme-toggle .hc-ico-moon,
body.dark .hc-theme-toggle .hc-ico-moon { display: none; }



/* ---- переключатель языка ----
   Разметку отдаёт движок (the_lang_list), приводим её к макету:
     кнопка 92×40, radius 12, рамка 1px, 13.5px/700, глобус + код + шеврон
     меню 170 шириной, radius 14, padding 6, тень 0 16px 48px rgba(18,16,10,.12)
     пункт 34px: код заглавными + название языка
   Мост перекрасил --Colors-Fills-Dropmenu-Burgermenu в жёлтый, из-за чего
   выпадающий список движка стал жёлтым — возвращаем ему белый фон. */

.hc-lang .tolbar_lang,
.hc-lang .langlist_div { position: relative; }

.hc-lang .langlist_title {
  display: inline-flex;
  align-items: center;
  gap: 7px;
  height: 40px;
  /* движок задаёт этому блоку фиксированную ширину — сбрасываем,
     чтобы кнопка сжалась по содержимому, как в макете (92px) */
  width: auto;
  min-width: 0;
  padding: 0 12px;
  border: 1px solid var(--border-light);
  /* в макете 12px, а не токен --radius-md (14px) */
  border-radius: 12px;
  background: var(--has-white);
  cursor: pointer;
  font-family: var(--font-sans);
  font-weight: 700;
  font-size: 13.5px;
  color: var(--text-primary);
  text-transform: uppercase;
  white-space: nowrap;
}

/* У движка своя стрелка через ::after (20×20). Мы рисуем собственный шеврон,
   иначе их две и кнопка шире макета на 27px. */
.hc-lang .langlist_title::after,
.hc-lang .langlist_title::before { content: none; display: none; }

.hc-lang .langlist_title > svg:first-child { color: var(--text-muted); flex: none; }
.hc-lang .langlist_title > svg:last-child  { color: var(--text-muted); flex: none; }
.hc-lang .langlist_title span { line-height: 1; }

.hc-lang .langlist_ul {
  position: absolute;
  top: calc(100% + 8px);
  right: 0;
  left: auto;
  z-index: 60;
  width: 170px;
  padding: 6px;
  border: 1px solid var(--border-light);
  border-radius: 14px;
  background: var(--has-white);
  box-shadow: var(--shadow-lg);
}

/* Движок красит ссылки списка белым (список у него был жёлтым).
   На белом фоне название языка становилось невидимым, оставался только код —
   поэтому цвет задаём с повышенной специфичностью. */
.hc-lang .langlist_ul a.langlist_li {
  display: flex;
  align-items: center;
  gap: 8px;
  height: 34px;
  padding: 0 10px;
  border-radius: 10px;
  text-decoration: none;
  font-family: var(--font-sans);
  font-size: 14px;
  color: var(--text-muted);
  white-space: nowrap;
}

.hc-lang .langlist_ul a.langlist_li:hover { background: var(--yellow-wash); color: var(--text-secondary); }

/* активный язык: подсветка и галочка */
.hc-lang .langlist_ul a.langlist_li.is-active { background: var(--surface-sunken); }

.hc-lang__code {
  flex: none;
  font-weight: 700;
  font-size: 13px;
  color: var(--text-primary);
  min-width: 24px;
}

.hc-lang__check {
  margin-left: auto;
  display: inline-flex;
  color: var(--has-gold);
  flex: none;
}

/* кнопка MAX: 40×40, как иконочные соседи */
/* MAX и Telegram в макете одного веса — обе чёрные, без приглушения.
   Пока ссылка на MAX не задана, кнопка просто некликабельна. */
.hc-max { font-weight: 800; font-size: 13px; letter-spacing: -0.02em; color: var(--text-primary); }
.hc-max.is-inactive { cursor: default; }
.hc-max.is-inactive:hover { border-color: var(--border-light); }


/* переключатель языка */
.hc-lang {
  position: relative;
}

.hc-lang__btn {
  display: inline-flex;
  align-items: center;
  gap: 7px;
  height: 40px;
  padding: 0 12px;
  border-radius: var(--radius-md);
  border: 1px solid var(--border-light);
  background: var(--has-white);
  cursor: pointer;
  font-family: var(--font-sans);
  font-weight: 700;
  font-size: 13.5px;
  color: var(--text-primary);
}

.hc-lang__menu {
  position: absolute;
  top: calc(100% + 8px);
  right: 0;
  z-index: 60;
  width: 170px;
  background: var(--has-white);
  border: 1px solid var(--border-light);
  border-radius: 14px;
  box-shadow: var(--shadow-lg);
  padding: 6px;
  max-height: 280px;
  overflow-y: auto;
}

.hc-lang__menu[hidden] {
  display: none;
}

.hc-lang__item {
  display: flex;
  align-items: center;
  gap: 8px;
  width: 100%;
  padding: 9px 10px;
  border: none;
  background: transparent;
  border-radius: 10px;
  cursor: pointer;
  font-family: var(--font-sans);
  text-align: left;
  color: var(--text-primary);
}

.hc-lang__item:hover {
  background: var(--yellow-wash);
}

/* кнопки входа и регистрации */
.hc-btn {
  display: inline-flex;
  align-items: center;
  gap: 7px;
  height: 40px;
  padding: 0 16px;
  border-radius: 12px;
  border: 1px solid var(--border-light);
  background: var(--has-white);
  font-family: var(--font-sans);
  font-weight: 600;
  font-size: 14px;
  color: var(--text-secondary);
  text-decoration: none;
  cursor: pointer;
  white-space: nowrap;
}

.hc-btn--primary {
  padding: 0 18px;
  border: none;
  background: var(--has-yellow);
  font-weight: 700;
  color: var(--has-black);
  box-shadow: var(--shadow-yellow-sm);
  transition: background var(--dur-fast) var(--ease-out),
              transform var(--dur-fast) var(--ease-out);
}

.hc-btn--primary:hover {
  background: var(--has-yellow-light);
}

.hc-btn--primary:active {
  background: var(--has-gold-deep);
  transform: translateY(1px);
}

/* ────────────────────────────────────────────────────────────
   3. КАРКАС: ФУТЕР
   ──────────────────────────────────────────────────────────── */

.hc-foot {
  background: var(--has-black);
  color: #fff;
}

.hc-foot__inner {
  max-width: var(--container-max);
  margin: 0 auto;
  padding: 56px 40px 32px;
}

.hc-foot__cols {
  display: grid;
  grid-template-columns: 1.4fr 1fr 1fr 1fr;
  gap: 40px;
  margin-bottom: 40px;
}

.hc-foot__logo {
  height: 28px;
  display: block;
  margin-bottom: 16px;
}

.hc-foot__tagline {
  font-family: var(--font-sans);
  font-size: 14px;
  line-height: var(--lh-snug);
  color: rgba(255, 255, 255, 0.6);
  margin: 0 0 20px;
  max-width: 300px;
}

.hc-foot__tg {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  background: rgba(255, 255, 255, 0.08);
  color: #fff;
  text-decoration: none;
  font-family: var(--font-sans);
  font-weight: 600;
  font-size: 14px;
  padding: 10px 16px;
  border-radius: var(--radius-md);
  border: 1px solid rgba(255, 255, 255, 0.16);
  transition: background var(--dur-fast) var(--ease-out);
}

.hc-foot__tg:hover {
  background: rgba(255, 255, 255, 0.14);
}

.hc-foot__title {
  font-family: var(--font-sans);
  font-size: 12px;
  text-transform: uppercase;
  letter-spacing: var(--ls-caps);
  color: rgba(255, 255, 255, 0.45);
  margin-bottom: 16px;
}

.hc-foot__col a {
  display: block;
  font-family: var(--font-sans);
  color: rgba(255, 255, 255, 0.82);
  text-decoration: none;
  font-size: 14.5px;
  margin-bottom: 11px;
  transition: color var(--dur-fast) var(--ease-out);
}

.hc-foot__col a:last-child {
  margin-bottom: 0;
}

.hc-foot__col a:hover {
  color: var(--has-yellow);
}

.hc-foot__bottom {
  border-top: 1px solid rgba(255, 255, 255, 0.12);
  padding-top: 24px;
}

.hc-foot__disclaimer {
  font-family: var(--font-sans);
  font-size: 12px;
  line-height: 1.5;
  color: rgba(255, 255, 255, 0.4);
  margin: 0 0 12px;
  max-width: 760px;
}

.hc-foot__copy {
  display: flex;
  justify-content: space-between;
  align-items: center;
  gap: 16px;
  font-family: var(--font-sans);
  font-size: 13px;
  color: rgba(255, 255, 255, 0.5);
}

.hc-foot__slogan {
  color: var(--has-yellow);
  font-weight: 600;
}

/* ────────────────────────────────────────────────────────────
   4. АДАПТИВ
   Макеты сворачивают две колонки в одну на ≤900px.
   ──────────────────────────────────────────────────────────── */

@media (max-width: 1100px) {
  .hc-head-inner {
    padding: 14px 20px;
  }

  .hc-nav {
    gap: 20px;
  }
}

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

  .hc-foot__cols {
    grid-template-columns: 1fr 1fr;
    gap: 28px;
  }

  .hc-foot__inner {
    padding: 40px 20px 24px;
  }
}

@media (max-width: 640px) {
  .hc-actions .hc-btn:not(.hc-btn--primary),
  .hc-actions .hc-divider,
  .hc-actions .hc-icon-btn[data-optional] {
    display: none;
  }

  .hc-foot__cols {
    grid-template-columns: 1fr;
  }

  .hc-foot__copy {
    flex-direction: column;
    align-items: flex-start;
    gap: 8px;
  }
}

/* wp_nav_menu отдаёт ul > li > a — приводим к горизонтальному ряду макета */
.hc-nav__list,
.hc-foot__menu {
  list-style: none;
  margin: 0;
  padding: 0;
}

.hc-nav__list {
  display: flex;
  align-items: center;
  gap: 30px;
}

.hc-nav__list li {
  flex: none;
}

.hc-foot__menu li a {
  display: block;
  font-family: var(--font-sans);
  color: rgba(255, 255, 255, 0.82);
  text-decoration: none;
  font-size: 14.5px;
  margin-bottom: 11px;
  transition: color var(--dur-fast) var(--ease-out);
}

.hc-foot__menu li a:hover {
  color: var(--has-yellow);
}

.hc-logo-link {
  flex: none;
  display: block;
}

/* штатный список языков движка приводим к виду макета */

/* ────────────────────────────────────────────────────────────
   1б. ХОЛОДНЫЕ ПОВЕРХНОСТИ ДВИЖКА → ТЁПЛАЯ ПАЛИТРА
   В .light движка 31 переменная в синей гамме (H≈223).
   Ниже — остаток, не покрытый основным мостом выше:
   фоны, поля, обводки и состояния кнопок.
   ──────────────────────────────────────────────────────────── */

html.light,
body.light {
  /* фоны страницы и блоков: голубые → кремовые */
  --Bg: var(--surface-sunken);
  --Page-Fill: var(--has-cream);
  --Field-Fill: var(--surface-sunken);
  --Table-2-Icon-Block: var(--surface-sunken);
  --Footer: var(--has-cream);
  --Colors-Fills-Cookies-Fill: var(--has-yellow-pale);

  /* обводки */
  --Colors-Strokes-Form-Fields-Stroke: var(--border-light);
  --Colors-Header-Footer-Header-Button-Stroke: var(--border-light);
  --Colors-Strokes-Dropdown-Menu-Strokes: var(--border-light);
  --Colors-Strokes-Secondary-Button-Stroke: var(--has-gold);

  /* состояния основной кнопки */
  --Primary-Button-Hover: var(--has-yellow-light);
  --Primary-Button-Click: var(--has-gold-deep);
  --Form-Button-Click: var(--has-gold-deep);
  --Header-0: var(--has-yellow);

  /* ссылки: наведение и нажатие */
  --Colors-Header-Footer-Header-Link-Hover: var(--has-gold);
  --Colors-Header-Footer-Footer-Link-Hover: var(--has-gold);
  --Colors-Texts-Link-Click: var(--has-black);
}

html.dark,
body.dark {
  --Colors-Fills-Cookies-Fill: rgba(249, 205, 46, 0.14);
  --Colors-Strokes-Secondary-Button-Stroke: var(--has-gold);
  --Primary-Button-Hover: var(--has-yellow-light);
  --Primary-Button-Click: var(--has-gold-deep);
  --Form-Button-Click: var(--has-gold-deep);
  --Header-0: var(--has-yellow);
  --Colors-Header-Footer-Header-Link-Hover: var(--has-yellow-light);
  --Colors-Header-Footer-Footer-Link-Hover: var(--has-yellow-light);
}

/* ────────────────────────────────────────────────────────────
   1в. ОСТАТОК: градиенты полей, вымывки и оверлей
   Эти значения — не плоские цвета, поэтому в выборку по hex
   не попали. Проверено в браузере: после них холодных
   переменных у движка не остаётся.
   ──────────────────────────────────────────────────────────── */

html.light,
body.light {
  /* поля ввода: сине-сиреневый градиент → тёплый кремовый */
  --Form-Field-Fill: linear-gradient(180deg, #F2EEDC 0%, #FBF9F1 100%);
  --Form-Total-Field-Fill: linear-gradient(180deg, #F2EEDC 0%, #FBF9F1 100%);
  --Total-Field-Fill: linear-gradient(156.57deg, #F2EEDC 14.29%, #FBF9F1 100%);

  /* вымывки строк таблиц и пунктов кабинета */
  --Colors-Fills-Table-Item: rgba(249, 205, 46, 0.06);
  --Colors-States-Personal-Account-Item-Hover: var(--yellow-ring);
  --Colors-States-Personal-Account-Item-Selected: var(--yellow-wash);

  /* затемнение под модалками: холодное синее → тёплое графитовое */
  --Colors-Fills-Popup-Overlay: rgba(18, 16, 10, 0.8);
}

html.dark,
body.dark {
  --Form-Field-Fill: linear-gradient(180deg, rgba(255,255,255,.06) 0%, rgba(255,255,255,.03) 100%);
  --Form-Total-Field-Fill: linear-gradient(180deg, rgba(255,255,255,.06) 0%, rgba(255,255,255,.03) 100%);
  --Total-Field-Fill: linear-gradient(156.57deg, rgba(255,255,255,.06) 14.29%, rgba(255,255,255,.03) 100%);
  --Colors-Fills-Table-Item: rgba(249, 205, 46, 0.06);
  --Colors-States-Personal-Account-Item-Hover: var(--yellow-ring);
  --Colors-States-Personal-Account-Item-Selected: var(--yellow-wash);
  --Colors-Fills-Popup-Overlay: rgba(0, 0, 0, 0.82);
}

/* Фоновая картинка вендора images/Bg.jpg — голубая, к бренду отношения
   не имеет и не является переменной. Заменяем на фирменный фон. */
body.light,
body.dark {
  background-image: none !important;
}

body.light {
  background-color: var(--surface-sunken);
}

body.dark {
  background-color: var(--has-cream);
}

/* ────────────────────────────────────────────────────────────
   ГЛАВНАЯ: снимаем отступы обёртки движка

   header.php открывает <main class="main no-margin">, а CSS движка задаёт
   ему padding 40px сверху и 80px снизу. На внутренних страницах это нужно,
   но наши секции главной идут во всю ширину и держат отступы сами —
   сверху из-за этого между шапкой и hero светилась полоса фона body,
   снизу висел лишний зазор перед футером.
   Сужаем правило до главной, чтобы не задеть остальные страницы.
   ──────────────────────────────────────────────────────────── */

body.home main.main {
  padding-top: 0;
  padding-bottom: 0;
}

/* То же для внутренних страниц редизайна: у них сверху своя полноширинная
   полоса-заголовок (hero / title strip), которая должна примыкать к шапке.
   Отступ движка сверху показывал полосу фона body между шапкой и полосой —
   убираем его ТОЛЬКО когда такая полоса реально есть (через :has), чтобы не
   задеть обычные страницы без своей полосы. */
main.main:has(.has-hero),
main.main:has(.has-faqp-hero),
main.main:has(.has-phero),
main.main:has(.has-blog-hero),
main.main:has(.has-art-hero),
main.main:has(.dir-hero),
main.main:has(.st-strip) {
  padding-top: 0;
}

/* ────────────────────────────────────────────────────────────
   7. ГЛАВНАЯ
   Секции чередуют фон крем/белый на всю ширину, контент внутри — 1200px.
   Соответствие макету «Главная Desktop»:
     hero крем · мониторинги белый · баннеры крем · шаги крем ·
     преимущества белый · направления крем · города белый ·
     отзывы крем · FAQ белый · реферал белый · SEO крем
   ──────────────────────────────────────────────────────────── */

.has-sec {
  padding: var(--space-16) 0;
}

.has-sec--cream { background: var(--has-cream); }
.has-sec--white { background: var(--has-white); }
.has-sec--tight { padding: var(--space-10) 0; }

.has-sec__inner {
  max-width: var(--container-max);
  margin: 0 auto;
  padding: 0 40px;
}

.has-sec__head { margin-bottom: var(--space-8); }

.has-sec__head--center { text-align: center; }
.has-sec__head--center > div { max-width: 720px; margin: 0 auto; }

.has-sec__head--row {
  display: flex;
  align-items: flex-end;
  justify-content: space-between;
  gap: 20px;
  flex-wrap: wrap;
}

.has-sec__title {
  font-family: var(--font-sans);
  font-weight: 800;
  font-size: 34px;
  line-height: 1.15;
  letter-spacing: var(--ls-heading);
  color: var(--text-primary);
  margin: 0;
}

.has-sec__sub {
  font-size: 15px;
  color: var(--text-muted);
  margin-top: 8px;
}

.has-sec__link {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  font-family: var(--font-sans);
  font-weight: 700;
  font-size: 14.5px;
  color: var(--has-gold-deep);
  text-decoration: none;
  white-space: nowrap;
}

.has-sec__link:hover { color: var(--has-black); }
.has-center { display: flex; justify-content: center; margin-top: var(--space-8); }

/* ---- единая кнопка ---- */
.has-btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 8px;
  height: var(--control-h-lg);
  padding: 0 22px;
  border-radius: var(--radius-button);
  border: 1px solid var(--border-light);
  background-color: var(--has-white);
  font-family: var(--font-sans);
  font-weight: 700;
  font-size: 15px;
  color: var(--text-primary);
  text-decoration: none;
  cursor: pointer;
  white-space: nowrap;
  transition: border-color var(--dur-fast) var(--ease-out), background var(--dur-fast) var(--ease-out);
}

.has-btn--sm { height: var(--control-h-sm); padding: 0 16px; font-size: 14px; }
.has-btn--ghost:hover { border-color: var(--has-gold); }

.has-btn--primary {
  border-color: transparent;
  background-color: var(--has-yellow);
  color: var(--has-black);
  box-shadow: var(--shadow-yellow-sm);
}

.has-btn--primary:hover { background-color: var(--has-yellow-light); color: var(--has-black); }

/* ---- HERO ---- */
.has-hero { background: var(--has-cream); }

.has-hero__inner {
  max-width: var(--container-max);
  margin: 0 auto;
  padding: 56px 40px 68px;
  display: grid;
  grid-template-columns: 1.05fr 0.95fr;
  gap: 56px;
  align-items: center;
}

.has-hero__title {
  font-family: var(--font-sans);
  font-weight: 800;
  font-size: 44px;
  line-height: 1.1;
  letter-spacing: var(--ls-hero);
  color: var(--text-primary);
  margin: 0 0 18px;
}

.has-hero__title .has-accent { color: var(--has-gold); }

.has-hero__lead {
  font-family: var(--font-sans);
  font-size: 17px;
  line-height: 1.55;
  color: var(--text-secondary);
  margin: 0 0 30px;
  max-width: 520px;
}

.has-hero__cta { display: flex; gap: 12px; margin-bottom: 38px; }

.has-hero__stats {
  max-width: 480px;
  display: grid;
  grid-template-columns: 1fr 1fr;
  column-gap: 28px;
  row-gap: 20px;
}

.has-hero__stat:nth-child(2),
.has-hero__stat:nth-child(4) { padding-left: 28px; border-left: 1px solid var(--border-light); }
.has-hero__stat:nth-child(3),
.has-hero__stat:nth-child(4) { padding-top: 20px; border-top: 1px solid var(--border-light); }

.has-hero__stat-v { font-weight: 800; font-size: 28px; line-height: 1; color: var(--text-primary); }
.has-hero__stat-l { font-size: 13px; color: var(--text-muted); margin-top: 4px; }

.has-hero__right { display: flex; justify-content: flex-end; }
.has-hero__calc { width: 100%; max-width: 440px; }

/* ---- мониторинги ---- */
.has-mons { background: var(--has-white); border-top: 1px solid var(--border-light); border-bottom: 1px solid var(--border-light); }

.has-mons__inner {
  max-width: var(--container-max);
  margin: 0 auto;
  padding: 20px 40px;
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  justify-content: space-between;
  gap: 12px 24px;
}

.has-mons__item { font-weight: 700; font-size: 14px; color: var(--text-muted); white-space: nowrap; }

/* ---- промо-баннеры: жёлтые, радиус 28 ---- */
.has-banners__track { position: relative; min-height: 190px; }

.has-banner {
  position: absolute;
  inset: 0;
  display: none;
  align-items: center;
  justify-content: space-between;
  gap: 32px;
  padding: 30px 36px;
  border-radius: var(--radius-xl);
  background: var(--has-yellow);
  color: var(--has-black);
}

.has-banner.is-active { display: flex; }

.has-banner__tag {
  font-size: 11.5px;
  text-transform: uppercase;
  letter-spacing: var(--ls-caps);
  font-weight: 800;
  color: rgba(18, 16, 10, 0.55);
  margin-bottom: 8px;
}

.has-banner__title {
  font-family: var(--font-sans);
  font-weight: 800;
  font-size: 27px;
  line-height: 1.15;
  letter-spacing: var(--ls-heading);
  color: var(--has-black);
  margin: 0 0 16px;
}

.has-banner__list {
  list-style: none;
  margin: 0;
  padding: 0;
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
}

.has-banner__list li {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  padding: 6px 12px;
  border-radius: var(--radius-pill);
  background: rgba(18, 16, 10, 0.08);
  font-size: 13.5px;
  font-weight: 600;
  color: var(--has-black);
}

.has-banner__cta {
  flex: none;
  display: inline-flex;
  align-items: center;
  gap: 8px;
  height: var(--control-h-md);
  padding: 0 22px;
  border-radius: var(--radius-pill);
  background: var(--has-black);
  color: #fff;
  font-weight: 700;
  font-size: 14.5px;
  text-decoration: none;
  transition: opacity var(--dur-fast) var(--ease-out);
}

.has-banner__cta:hover { opacity: 0.86; color: #fff; }

.has-banners__dots { display: flex; gap: 8px; justify-content: center; margin-top: 16px; }

.has-banners__dot {
  width: 8px; height: 8px; padding: 0; border: none; border-radius: 50%;
  background: rgba(18, 16, 10, 0.18);
  cursor: pointer;
  transition: background var(--dur-fast) var(--ease-out), width var(--dur-base) var(--ease-out);
}

.has-banners__dot.is-active { background: var(--has-gold); width: 24px; border-radius: var(--radius-pill); }

/* ---- как это работает: последняя карточка чёрная ---- */
.has-steps {
  list-style: none;
  margin: 0;
  padding: 0;
  display: grid;
  grid-template-columns: repeat(5, 1fr);
  gap: 14px;
}

.has-steps[hidden] { display: none; }

.has-step {
  display: flex;
  flex-direction: column;
  padding: 22px 20px;
  background: var(--has-white);
  border: 1px solid var(--border-light);
  border-radius: var(--radius-lg);
  box-shadow: var(--shadow-sm);
}

.has-step--final { background: var(--has-black); border-color: var(--has-black); }
.has-step--final .has-step__t { color: #fff; }
.has-step--final .has-step__d { color: rgba(255, 255, 255, 0.68); }

.has-step__n {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 30px;
  height: 30px;
  border-radius: 50%;
  background: var(--has-yellow);
  color: var(--has-black);
  font-weight: 800;
  font-size: 14px;
  margin-bottom: 14px;
}

.has-step__t { font-weight: 700; font-size: 15px; color: var(--text-primary); margin-bottom: 6px; }
.has-step__d { font-size: 13px; line-height: 1.45; color: var(--text-muted); }

/* ---- преимущества: иконка в жёлтом скруглённом квадрате ---- */
.has-advs {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 20px;
}

.has-adv {
  padding: 26px;
  background: var(--has-white);
  border: 1px solid var(--border-light);
  border-radius: var(--radius-lg);
  box-shadow: var(--shadow-sm);
}

.has-adv__ico {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 52px;
  height: 52px;
  border-radius: var(--radius-md);
  background: var(--yellow-wash);
  color: var(--has-gold-deep);
  margin-bottom: 18px;
}

.has-adv__t { font-weight: 700; font-size: 17px; color: var(--text-primary); margin-bottom: 8px; }
.has-adv__d { font-size: 14px; line-height: 1.5; color: var(--text-muted); }

/* ---- направления ---- */
.has-dirs { display: grid; grid-template-columns: repeat(3, 1fr); gap: 14px; }

.has-dir {
  display: flex;
  align-items: center;
  gap: 12px;
  padding: 16px 18px;
  background: var(--has-white);
  border: 1px solid var(--border-light);
  border-radius: var(--radius-lg);
  text-decoration: none;
  transition: border-color var(--dur-fast) var(--ease-out), box-shadow var(--dur-fast) var(--ease-out);
}

.has-dir:hover { border-color: var(--has-gold); box-shadow: var(--shadow-sm); }
/* пара валют: две иконки внахлёст, вторая с белой обводкой (как в макете) */
.has-dir__ico { flex: none; display: inline-flex; align-items: center; }
.has-dir__ico img { display: block; border-radius: 50%; }
.has-dir__ico > :nth-child(2) { margin-left: -12px; border: 2px solid var(--has-white); border-radius: 50%; box-sizing: border-box; }
.has-dir__body { display: flex; flex-direction: column; min-width: 0; flex: 1; }
.has-dir__pair { font-weight: 700; font-size: 15px; color: var(--text-primary); }
.has-dir__meta { font-size: 12.5px; color: var(--text-muted); margin-top: 2px; }
.has-dir__side { flex: none; display: flex; flex-direction: column; align-items: flex-end; gap: 5px; }
.has-dir__rate { font-weight: 800; font-size: 16px; color: var(--text-primary); }

.has-dir__badge {
  font-size: 10.5px;
  font-weight: 800;
  text-transform: uppercase;
  letter-spacing: var(--ls-caps);
  color: var(--has-gold-deep);
  background: var(--yellow-wash);
  padding: 3px 8px;
  border-radius: var(--radius-sm);
}

/* ---- города: 4 колонки, булавка и статус ---- */
.has-offices { display: grid; grid-template-columns: repeat(4, 1fr); gap: 14px; }

.has-office {
  padding: 18px 20px;
  background: var(--has-white);
  border: 1px solid var(--border-light);
  border-radius: var(--radius-lg);
  box-shadow: var(--shadow-sm);
}

.has-office__top { display: flex; align-items: center; gap: 8px; margin-bottom: 10px; }
.has-office__pin { color: var(--has-gold); display: inline-flex; }
.has-office__city { font-weight: 700; font-size: 15.5px; color: var(--text-primary); }

.has-office__dot {
  width: 8px; height: 8px; border-radius: 50%;
  background: var(--success);
  margin-left: auto;
  flex: none;
}

.has-office__addr { font-size: 13.5px; color: var(--text-secondary); }
.has-office__addr--soon { color: var(--text-muted); font-style: italic; }
.has-office__hours { font-size: 12.5px; color: var(--text-muted); margin-top: 4px; }

/* ---- отзывы (без звёзд) ---- */
.has-reviews { display: grid; grid-template-columns: repeat(3, 1fr); gap: 16px; }

.has-review {
  margin: 0;
  padding: 24px;
  background: var(--has-white);
  border: 1px solid var(--border-light);
  border-radius: var(--radius-lg);
  box-shadow: var(--shadow-sm);
}

.has-review__head { display: flex; align-items: center; gap: 12px; margin-bottom: 14px; }

.has-review__ava {
  display: inline-flex; align-items: center; justify-content: center;
  width: 42px; height: 42px; border-radius: 50%;
  background: var(--yellow-wash); color: var(--has-gold-deep);
  font-weight: 800; font-size: 14px; flex: none;
}

.has-review__who { display: flex; flex-direction: column; }
.has-review__name { font-weight: 700; font-size: 15px; color: var(--text-primary); }
.has-review__when { font-size: 12.5px; color: var(--text-muted); }
.has-review__text { margin: 0; font-size: 14.5px; line-height: 1.55; color: var(--text-secondary); }

/* ---- FAQ: две колонки ---- */
.has-faq-wrap { display: grid; grid-template-columns: 0.85fr 1.15fr; gap: 48px; align-items: start; }
.has-faq-contacts { display: flex; flex-wrap: wrap; gap: 10px; margin-top: 24px; }
.has-faq { display: flex; flex-direction: column; gap: 10px; }

.has-faq__item {
  background: var(--surface-sunken);
  border: 1px solid var(--border-light);
  border-radius: 14px;
  overflow: hidden;
}

.has-faq__q {
  display: flex; align-items: center; gap: 12px;
  width: 100%; padding: 18px 20px;
  background: transparent; border: none; cursor: pointer; text-align: left;
  font-family: var(--font-sans); font-weight: 700; font-size: 16px; color: var(--text-primary);
}
.has-faq__q > span:first-child { flex: 1; }

/* В макете закрытый пункт — серый плюс, открытый — золотой минус
   (НЕ повёрнутый плюс: поворот на 45° даёт крестик, а нужен именно минус). */
.has-faq__chev { flex: none; display: inline-flex; }
.has-faq__ico { display: inline-flex; }
.has-faq__ico--plus { color: var(--text-muted); }
.has-faq__ico--minus { display: none; color: var(--has-gold); }
.has-faq__q[aria-expanded='true'] .has-faq__ico--plus { display: none; }
.has-faq__q[aria-expanded='true'] .has-faq__ico--minus { display: inline-flex; }

.has-faq__a { padding: 0 20px 18px; font-size: 14.5px; line-height: 1.55; color: var(--text-secondary); }
.has-faq__a[hidden] { display: none; }

/* ---- реферальная программа: жёлтый блок (как в макете) ---- */
.has-ref {
  display: flex; align-items: center; gap: 36px; flex-wrap: wrap;
  padding: 40px 44px;
  border-radius: 28px;
  background: var(--has-yellow);
}

.has-ref__badge {
  flex: none;
  display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 2px;
  width: 148px; height: 148px; border-radius: 24px;
  background: var(--has-black); text-align: center;
}

.has-ref__pct { font-weight: 800; font-size: 46px; line-height: 1; letter-spacing: -0.02em; color: var(--has-yellow); }
.has-ref__cap { font-size: 12.5px; line-height: 1.25; color: rgba(255, 255, 255, 0.72); }
.has-ref__body { flex: 1; min-width: 280px; }
.has-ref__tag { display: inline-block; font-size: 12px; text-transform: uppercase; letter-spacing: 0.08em; font-weight: 700; color: var(--has-gold-deep); margin-bottom: 10px; }
.has-ref__title { font-weight: 800; font-size: 32px; line-height: 1.1; letter-spacing: -0.01em; color: var(--has-black); margin: 0 0 10px; }
.has-ref__text { font-size: 16px; line-height: 1.5; color: var(--has-graphite); margin: 0; max-width: 580px; }
.has-ref__text b { font-weight: 800; }
.has-ref__act { flex: none; }

.has-ref__cta {
  display: inline-flex; align-items: center; justify-content: center; gap: 9px;
  padding: 16px 26px;
  border-radius: 16px;
  background: var(--has-black); color: #fff;
  font-weight: 700; font-size: 16px; text-decoration: none;
  transition: transform var(--dur-fast) var(--ease-out), background var(--dur-fast) var(--ease-out);
}

.has-ref__cta:hover { transform: translateY(-1px); background: #1f1b12; color: #fff; }

/* ---- отзывы: шапка с плашкой BestChange ---- */
.has-reviews-head { display: flex; align-items: center; justify-content: space-between; gap: 20px; flex-wrap: wrap; margin-bottom: 32px; }
.has-bestchange { display: inline-flex; align-items: center; gap: 13px; padding: 14px 20px; border-radius: 16px; background: var(--has-black); text-decoration: none; }
.has-bestchange__ico { flex: none; }
.has-bestchange__txt { display: flex; flex-direction: column; }
.has-bestchange__n { font-weight: 800; font-size: 18px; color: #fff; }
.has-bestchange__s { font-size: 12.5px; color: rgba(255, 255, 255, 0.7); }
.has-bestchange:hover .has-bestchange__n { color: var(--has-yellow); }

/* ---- SEO-текст ----
   Как в макете: интро видно всегда, остальное скрыто и раскрывается кнопкой.
   Раскрытый текст остаётся в разметке (нужен поисковику) — просто hidden. */
.has-seo__intro, .has-seo__more { max-width: 920px; }
.has-seo__more { margin-top: 24px; }
.has-seo__more[hidden] { display: none; }

.has-seo__intro p { font-size: 16px; line-height: 1.65; color: var(--text-secondary); margin: 0; }
.has-seo__more h3 { font-weight: 800; font-size: 22px; line-height: 1.2; color: var(--text-primary); margin: 0 0 12px; }
.has-seo__more h3:not(:first-child) { margin-top: 24px; }
.has-seo__more p { font-size: 16px; line-height: 1.65; color: var(--text-secondary); margin: 0 0 12px; }
.has-seo__more p strong { color: var(--text-primary); }

/* Кнопка-пилюля с жёлтым кружком и шевроном (вниз — свёрнуто, вверх — раскрыто). */
.has-seo__toggle {
  display: inline-flex; align-items: center; gap: 9px;
  margin-top: 22px; padding: 11px 12px 11px 20px;
  background: var(--has-white); border: 1px solid var(--border-light); border-radius: 999px;
  cursor: pointer; font-family: var(--font-sans); font-weight: 700; font-size: 15px; color: var(--text-primary);
  box-shadow: 0 2px 8px rgba(18, 16, 10, 0.05);
  transition: background var(--dur-fast) var(--ease-out);
}
.has-seo__toggle:hover { background: var(--surface-sunken); }
.has-seo__toggle-ic {
  display: inline-flex; align-items: center; justify-content: center;
  width: 24px; height: 24px; border-radius: 50%; background: var(--has-yellow); color: var(--has-black);
}
.has-seo__toggle-ic svg { transition: transform var(--dur-base) var(--ease-out); }
.has-seo__toggle.is-open .has-seo__toggle-ic svg { transform: rotate(180deg); }

/* ═══════════════════ СТРАНИЦА FAQ (/faq/) ═══════════════════ */

/* Титульная полоса — на всю ширину, белый фон с нижней границей. */
.has-faqp-hero { background: var(--has-white); border-bottom: 1px solid var(--border-light); }
.has-faqp-hero__inner { max-width: 1120px; margin: 0 auto; padding: 32px 40px 30px; }

.has-faqp-crumbs { display: flex; align-items: center; gap: 8px; font-size: 13px; color: var(--text-muted); margin-bottom: 12px; }
.has-faqp-crumbs a { color: var(--text-muted); text-decoration: none; }
.has-faqp-crumbs a:hover { color: var(--text-secondary); }
.has-faqp-crumbs__cur { color: var(--text-secondary); font-weight: 600; }

.has-faqp-title { font-family: var(--font-sans); font-weight: 800; font-size: 38px; line-height: 1.08; letter-spacing: -0.02em; color: var(--text-primary); margin: 0 0 10px; }
.has-faqp-sub { font-family: var(--font-sans); font-size: 17px; line-height: 1.5; color: var(--text-secondary); margin: 0 0 22px; max-width: 560px; }

.has-faqp-search { position: relative; max-width: 520px; }
/* Движок задаёт input{position:relative}; инпут идёт после svg в DOM, поэтому
   его непрозрачный фон рисуется поверх иконки. Поднимаем иконку по слою и
   делаем её сквозной для кликов, чтобы фокус уходил в поле. */
.has-faqp-search svg { position: absolute; left: 16px; top: 50%; transform: translateY(-50%); color: #9C9A97; z-index: 2; pointer-events: none; }
.has-faqp-search input {
  width: 100%; height: auto; padding: 14px 16px 14px 46px;
  border: 1px solid var(--border-light); border-radius: 14px; background: var(--surface-sunken);
  font-family: var(--font-sans); font-size: 15px; color: var(--text-primary); outline: none;
}
.has-faqp-search input:focus { border-color: var(--has-gold); }

/* Сетка: слева липкий фильтр категорий, справа аккордеон. */
.has-faqp-grid {
  display: grid; grid-template-columns: 240px minmax(0, 1fr); gap: 32px;
  max-width: 1120px; margin: 0 auto; padding: 24px 40px 56px; align-items: start;
}

.has-faqp-side { position: sticky; top: 88px; display: flex; flex-direction: column; gap: 4px; }
.has-faqp-catbtn {
  display: flex; align-items: center; justify-content: space-between; gap: 10px;
  width: 100%; padding: 11px 14px; border-radius: 12px; border: none; background: transparent;
  cursor: pointer; font-family: var(--font-sans); font-weight: 600; font-size: 14.5px;
  color: var(--text-secondary); text-align: left;
  transition: background 0.14s ease, color 0.14s ease;
}
.has-faqp-catbtn:hover { background: var(--surface-sunken); }
.has-faqp-catbtn.is-active { background: var(--has-yellow); color: var(--has-black); font-weight: 700; }

.has-faqp-count {
  flex: none; min-width: 22px; text-align: center; padding: 2px 7px; border-radius: 999px;
  font-variant-numeric: tabular-nums; font-weight: 700; font-size: 12px;
  background: var(--surface-sunken); color: var(--text-muted);
}
.has-faqp-catbtn.is-active .has-faqp-count { background: rgba(18, 16, 10, 0.14); color: var(--has-black); }

.has-faqp-main { min-width: 0; }
.has-faqp-list { display: flex; flex-direction: column; gap: 10px; }

.has-faqp-item {
  background: var(--has-white); border: 1px solid var(--border-light); border-radius: 16px;
  box-shadow: 0 2px 8px rgba(18, 16, 10, 0.04); overflow: hidden;
}
.has-faqp-item[hidden] { display: none; }

.has-faqp-q {
  display: flex; align-items: center; gap: 14px; width: 100%; padding: 18px 20px;
  background: transparent; border: none; cursor: pointer; text-align: left; font-family: var(--font-sans);
}
.has-faqp-q__txt { flex: 1; font-weight: 700; font-size: 16px; line-height: 1.35; color: var(--text-primary); }

.has-faqp-q__ic {
  flex: none; display: inline-flex; align-items: center; justify-content: center;
  width: 32px; height: 32px; border-radius: 10px; background: var(--surface-sunken);
  transition: background var(--dur-base) var(--ease-out);
}
.has-faqp-q[aria-expanded='true'] .has-faqp-q__ic { background: var(--has-yellow); }
.has-faqp-ico { display: inline-flex; }
.has-faqp-ico--down { color: var(--text-muted); }
.has-faqp-ico--up { display: none; color: var(--has-black); }
.has-faqp-q[aria-expanded='true'] .has-faqp-ico--down { display: none; }
.has-faqp-q[aria-expanded='true'] .has-faqp-ico--up { display: inline-flex; }

.has-faqp-a { padding: 0 20px 20px; font-family: var(--font-sans); font-size: 14.5px; line-height: 1.65; color: var(--text-secondary); }
.has-faqp-a[hidden] { display: none; }
.has-faqp-a b, .has-faqp-a strong { color: var(--text-primary); }

.has-faqp-empty {
  text-align: center; padding: 48px 20px; background: var(--has-white);
  border: 1px solid var(--border-light); border-radius: 16px; margin-top: 10px;
}
.has-faqp-empty[hidden] { display: none; }
.has-faqp-empty__t { font-family: var(--font-sans); font-weight: 700; font-size: 17px; color: var(--text-primary); margin-bottom: 6px; }
.has-faqp-empty__s { font-family: var(--font-sans); font-size: 14px; color: var(--text-muted); }

/* Чёрная карточка «Не нашли ответ?» */
.has-faqp-cta {
  display: flex; align-items: center; gap: 20px; flex-wrap: wrap;
  background: var(--has-black); border-radius: 20px; padding: 24px 28px; margin-top: 24px;
}
.has-faqp-cta__body { flex: 1; min-width: 220px; }
.has-faqp-cta__t { font-family: var(--font-sans); font-weight: 800; font-size: 20px; color: #fff; margin-bottom: 4px; }
.has-faqp-cta__s { font-family: var(--font-sans); font-size: 14.5px; line-height: 1.5; color: rgba(255, 255, 255, 0.65); }
.has-faqp-cta__btns { display: flex; gap: 10px; flex-wrap: wrap; }
.has-faqp-cta__tg {
  display: inline-flex; align-items: center; gap: 8px; text-decoration: none;
  background: var(--has-yellow); color: var(--has-black); font-family: var(--font-sans); font-weight: 700; font-size: 14px;
  padding: 13px 20px; border-radius: 12px;
}
.has-faqp-cta__all {
  display: inline-flex; align-items: center; gap: 8px; text-decoration: none;
  background: rgba(255, 255, 255, 0.1); color: #fff; border: 1px solid rgba(255, 255, 255, 0.16);
  font-family: var(--font-sans); font-weight: 700; font-size: 14px; padding: 13px 20px; border-radius: 12px;
}
.has-faqp-cta__all:hover { color: #fff; background: rgba(255, 255, 255, 0.16); }

@media (max-width: 860px) {
  .has-faqp-hero__inner { padding: 24px 16px 22px; }
  .has-faqp-title { font-size: 30px; }
  .has-faqp-grid { grid-template-columns: 1fr; padding: 16px 16px 44px; gap: 16px; }
  .has-faqp-side { position: static; flex-direction: row; flex-wrap: wrap; gap: 8px; }
  .has-faqp-catbtn { width: auto; background: var(--has-white); border: 1px solid var(--border-light); }
  .has-faqp-catbtn.is-active { border-color: var(--has-yellow); }
}

/* ═══════════════════ БЛОГ (/blog/) ═══════════════════ */

.has-blog-hero { background: var(--has-white); border-bottom: 1px solid var(--border-light); }
.has-blog-hero__inner { max-width: 1120px; margin: 0 auto; padding: 32px 40px 26px; }
.has-blog-sub { max-width: 640px; }
.has-blog-cats { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 20px; }
.has-blog-chip {
  padding: 9px 16px; border-radius: 999px; border: 1px solid var(--border-light); background: var(--has-white);
  cursor: pointer; font-family: var(--font-sans); font-weight: 700; font-size: 14px; white-space: nowrap;
  color: var(--text-secondary); transition: background 0.14s ease, color 0.14s ease, border-color 0.14s ease;
}
.has-blog-chip:hover { border-color: var(--has-black); }
.has-blog-chip.is-active { background: var(--has-black); color: #fff; border-color: var(--has-black); }

.blog-wrap { max-width: 1120px; margin: 0 auto; padding: 28px 40px 56px; }
.blog-grid { display: grid; grid-template-columns: repeat(2, 1fr); gap: 18px; }

.blog-card {
  display: flex; flex-direction: column; background: var(--has-white); border: 1px solid var(--border-light);
  border-radius: 20px; overflow: hidden; box-shadow: 0 2px 8px rgba(18, 16, 10, 0.04); text-decoration: none;
  transition: transform 0.16s cubic-bezier(0.22, 1, 0.36, 1), box-shadow 0.16s, border-color 0.16s;
}
.blog-card:hover { transform: translateY(-3px); box-shadow: 0 14px 34px rgba(18, 16, 10, 0.10); border-color: rgba(224, 167, 20, 0.4); }
.blog-card[hidden] { display: none; }

.blog-cover { height: 168px; display: flex; align-items: center; justify-content: center; background: var(--has-cream); border-bottom: 1px solid var(--border-light); }
.blog-cover img { display: block; }
.has-blog-ico {
  display: inline-flex; align-items: center; justify-content: center; width: 80px; height: 80px;
  border-radius: 50%; background: var(--has-yellow); color: var(--has-black);
}
.has-blog-ico--pin { background: var(--has-yellow); }

.blog-body { display: flex; flex-direction: column; flex: 1; padding: 22px 24px; }

.blog-badge {
  display: inline-flex; align-self: flex-start; padding: 5px 11px; border-radius: 999px;
  background: var(--yellow-wash); color: var(--has-gold-deep);
  font-family: var(--font-sans); font-weight: 700; font-size: 12px; margin-bottom: 12px;
}
.blog-badge--dark { background: rgba(249, 205, 46, 0.16); color: var(--has-yellow); margin-bottom: 14px; padding: 6px 12px; }

.blog-card__title { font-family: var(--font-sans); font-weight: 800; font-size: 19px; line-height: 1.22; letter-spacing: -0.01em; color: var(--text-primary); margin: 0 0 8px; }
.blog-card__excerpt { font-family: var(--font-sans); font-size: 14px; line-height: 1.5; color: var(--text-secondary); margin: 0 0 16px; }

.blog-more { display: flex; align-items: center; gap: 14px; margin-top: auto; }
.blog-more__link { display: inline-flex; align-items: center; gap: 7px; font-family: var(--font-sans); font-weight: 700; font-size: 14px; color: var(--has-gold-deep); }
.blog-more__meta { font-family: var(--font-sans); font-size: 12px; color: var(--text-muted); }

/* Крупная чёрная карточка-фичер */
.blog-feat { grid-column: 1 / -1; padding: 30px 32px; background: var(--has-black); border-color: var(--has-black); }
.blog-feat__title { font-family: var(--font-sans); font-weight: 800; font-size: 26px; line-height: 1.16; letter-spacing: -0.01em; color: #fff; margin: 0 0 10px; max-width: 680px; }
.blog-feat__excerpt { font-family: var(--font-sans); font-size: 15px; line-height: 1.55; color: rgba(255, 255, 255, 0.7); margin: 0 0 18px; max-width: 680px; }
.blog-more--dark .blog-more__link { color: var(--has-yellow); font-size: 14.5px; }
.blog-more--dark .blog-more__meta { color: rgba(255, 255, 255, 0.5); font-size: 12.5px; }
.blog-feat:hover { transform: translateY(-3px); border-color: var(--has-black); }

.has-blog-empty { text-align: center; padding: 40px 20px; }
.has-blog-empty[hidden] { display: none; }

/* SEO-описание под списком статей (секция из макета) */
.has-blog-seo { background: var(--surface-sunken); }
.has-blog-seo__inner { max-width: 860px; margin: 0 auto; padding: 8px 40px 52px; }
.has-blog-seo__title { font-family: var(--font-sans); font-weight: 800; font-size: 24px; letter-spacing: -0.01em; color: var(--text-primary); margin: 0 0 12px; }
.has-blog-seo__text { font-family: var(--font-sans); font-size: 15px; line-height: 1.65; color: var(--text-secondary); margin: 0 0 10px; }
.has-blog-seo__text:last-child { margin-bottom: 0; }
.has-blog-seo__text a { color: var(--has-gold-deep); text-decoration: none; font-weight: 600; }
.has-blog-seo__text a:hover { text-decoration: underline; }

@media (max-width: 820px) {
  .has-blog-hero__inner { padding: 24px 16px 22px; }
  .blog-grid { grid-template-columns: 1fr; }
  .blog-wrap { padding: 18px 16px 44px; }
  .has-blog-seo__inner { padding: 8px 16px 40px; }
  .has-blog-seo__title { font-size: 20px; }
}

/* ═══════════════════ СТАТЬЯ ═══════════════════ */

.has-art-hero { background: var(--has-white); border-bottom: 1px solid var(--border-light); }
.has-art-hero__inner { max-width: 1120px; margin: 0 auto; padding: 30px 40px 26px; }
.has-art-hero .has-faqp-crumbs { margin-bottom: 16px; flex-wrap: wrap; }
.has-art-hero .has-faqp-crumbs a { color: var(--text-muted); text-decoration: none; }
.has-art-hero .blog-badge { margin-bottom: 14px; padding: 6px 13px; font-size: 12.5px; }

.has-art-title { font-family: var(--font-sans); font-weight: 800; font-size: 38px; line-height: 1.1; letter-spacing: -0.02em; color: var(--text-primary); margin: 0 0 16px; max-width: 820px; }

.has-art-meta { display: flex; align-items: center; gap: 16px; flex-wrap: wrap; }
.has-art-author { display: inline-flex; align-items: center; gap: 8px; }
.has-art-ava { display: inline-flex; align-items: center; justify-content: center; width: 34px; height: 34px; border-radius: 50%; background: var(--has-yellow); color: var(--has-black); font-family: var(--font-sans); font-weight: 800; font-size: 13px; }
.has-art-author__name { font-family: var(--font-sans); font-size: 14px; font-weight: 600; color: var(--text-secondary); }
.has-art-dot { width: 4px; height: 4px; border-radius: 50%; background: var(--border-light); }
.has-art-date, .has-art-read { font-family: var(--font-sans); font-size: 14px; color: var(--text-muted); }

.art-grid { display: grid; grid-template-columns: minmax(0, 1fr) 300px; gap: 40px; max-width: 1120px; margin: 0 auto; padding: 28px 40px 56px; align-items: start; }

/* Типографика тела статьи */
.art-body { min-width: 0; }
.art-body h2 { font-family: var(--font-sans); font-weight: 800; font-size: 26px; line-height: 1.2; letter-spacing: -0.01em; color: var(--text-primary); margin: 34px 0 12px; scroll-margin-top: 90px; }
.art-body h2:first-child { margin-top: 0; }
.art-body h3 { font-family: var(--font-sans); font-weight: 700; font-size: 19px; line-height: 1.3; color: var(--text-primary); margin: 24px 0 8px; }
.art-body p { font-family: var(--font-sans); font-size: 16.5px; line-height: 1.7; color: var(--text-secondary); margin: 0 0 14px; }
.art-body ul { margin: 0 0 16px; padding-left: 4px; list-style: none; display: flex; flex-direction: column; gap: 10px; }
.art-body ul li { position: relative; padding-left: 26px; font-family: var(--font-sans); font-size: 16.5px; line-height: 1.6; color: var(--text-secondary); }
.art-body ul li::before { content: ""; position: absolute; left: 4px; top: 10px; width: 7px; height: 7px; border-radius: 50%; background: var(--has-gold); }
.art-body ol { margin: 0 0 16px; padding-left: 22px; }
.art-body ol li { font-family: var(--font-sans); font-size: 16.5px; line-height: 1.6; color: var(--text-secondary); margin-bottom: 8px; }
.art-body a { color: var(--has-gold-deep); text-decoration: none; font-weight: 600; }
.art-body a:hover { text-decoration: underline; }
.art-body strong { color: var(--text-primary); font-weight: 700; }
.art-body img { max-width: 100%; height: auto; border-radius: 14px; margin: 8px 0 16px; }

.art-body table { width: 100%; border-collapse: collapse; margin: 4px 0 18px; display: block; overflow-x: auto; }
.art-body table th { text-align: left; font-family: var(--font-sans); font-size: 12.5px; font-weight: 700; text-transform: uppercase; letter-spacing: 0.04em; color: var(--text-muted); padding: 0 14px 10px; border-bottom: 1px solid var(--border-light); }
.art-body table td { font-family: var(--font-sans); font-size: 15px; line-height: 1.45; color: var(--text-secondary); padding: 13px 14px; border-bottom: 1px solid var(--border-light); vertical-align: top; }
.art-body table td:first-child { font-weight: 700; color: var(--text-primary); }

.art-disclaimer { font-style: italic; color: var(--text-muted); font-size: 14.5px; margin-top: 22px; padding-top: 18px; border-top: 1px solid var(--border-light); }

/* Сайдбар */
.art-aside { position: sticky; top: 88px; display: flex; flex-direction: column; gap: 16px; }
.art-toc { background: var(--surface-sunken); border: 1px solid var(--border-light); border-radius: 18px; padding: 18px 20px; }
.art-toc__title { font-family: var(--font-sans); font-size: 12px; text-transform: uppercase; letter-spacing: 0.06em; color: var(--text-muted); margin-bottom: 12px; }
.art-toc__nav { display: flex; flex-direction: column; gap: 9px; }
.art-toc__nav a { font-family: var(--font-sans); font-size: 14px; line-height: 1.4; color: var(--text-secondary); text-decoration: none; }
.art-toc__nav a:hover { color: var(--has-gold-deep); }

.art-toc--m { display: none; } /* мобильное оглавление сверху — на десктопе скрыто */
.art-cta { background: var(--has-black); border-radius: 18px; padding: 20px; }
.art-cta__title { font-family: var(--font-sans); font-weight: 800; font-size: 17px; color: #fff; margin-bottom: 6px; }
.art-cta__text { font-family: var(--font-sans); font-size: 13px; line-height: 1.5; color: rgba(255, 255, 255, 0.65); margin: 0 0 14px; }
.art-cta__btn { display: flex; align-items: center; justify-content: center; gap: 8px; background: var(--has-yellow); color: var(--has-black); text-decoration: none; font-family: var(--font-sans); font-weight: 700; font-size: 14px; padding: 12px; border-radius: 12px; }

/* Читайте также */
.has-art-related { background: var(--surface-sunken); border-top: 1px solid var(--border-light); }
.has-art-related__inner { max-width: 1120px; margin: 0 auto; padding: 52px 40px 48px; }
.has-art-related__title { font-family: var(--font-sans); font-weight: 800; font-size: 24px; letter-spacing: -0.01em; color: var(--text-primary); margin: 0 0 20px; }
.has-art-related__grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 16px; }
.has-art-relcard { display: flex; flex-direction: column; background: var(--has-white); border: 1px solid var(--border-light); border-radius: 16px; padding: 20px; text-decoration: none; transition: border-color 0.16s, transform 0.16s; }
.has-art-relcard:hover { border-color: rgba(224, 167, 20, 0.4); transform: translateY(-2px); }
.has-art-relcard__cat { font-family: var(--font-sans); font-size: 11.5px; font-weight: 700; color: var(--has-gold-deep); margin-bottom: 8px; }
.has-art-relcard__title { font-family: var(--font-sans); font-weight: 700; font-size: 16px; line-height: 1.3; color: var(--text-primary); }

@media (max-width: 900px) {
  .has-art-hero__inner { padding: 24px 16px 20px; }
  .has-art-title { font-size: 29px; }
  .art-grid { grid-template-columns: 1fr; padding: 16px 16px 44px; gap: 20px; }
  .art-aside { position: static; order: 3; }
  /* оглавление: на мобилке показываем верхнее (.art-toc--m), нижнее в сайдбаре прячем */
  .art-toc--m { display: block; order: -1; margin-bottom: 4px; }
  .art-aside .art-toc { display: none; }
  .has-art-related__grid { grid-template-columns: 1fr; }
  .has-art-related__inner { padding: 36px 16px 32px; }
}

/* ═══════════════════ СТРАНИЦА ОТЗЫВОВ (/reviews/) ═══════════════════
   Список, форму и пагинацию отдаёт движок ([reviews_page]); мы только
   переодеваем его разметку в карточки макета. */
.rv-page { max-width: 1120px; margin: 0 auto; padding: 28px 40px 56px; }

/* шапка отзывов: заголовок слева + плашка мониторингов справа */
.rv-head { display: flex; align-items: flex-end; justify-content: space-between; gap: 24px; flex-wrap: wrap; }
.rv-head__main { min-width: 0; }
.rv-mon { flex: none; display: flex; flex-direction: column; gap: 8px; background: var(--has-black); border-radius: 18px; padding: 16px 20px; }
.rv-mon__cap { font-family: var(--font-sans); font-size: 12px; text-transform: uppercase; letter-spacing: 0.06em; color: rgba(255, 255, 255, 0.5); }
.rv-mon__links { display: flex; gap: 8px; flex-wrap: wrap; }
.rv-mon__link { display: inline-flex; align-items: center; gap: 7px; padding: 8px 13px; border-radius: 10px; background: rgba(255, 255, 255, 0.08); border: 1px solid rgba(255, 255, 255, 0.14); text-decoration: none; font-family: var(--font-sans); font-weight: 700; font-size: 13px; color: #fff; }
.rv-mon__link:hover { background: rgba(255, 255, 255, 0.14); color: #fff; }
.rv-mon__star { flex: none; }
.rv-mon__ext { flex: none; color: rgba(255, 255, 255, 0.5); }

/* отзывы на Яндекс Картах: официальные виджеты по офисам, 2 колонки */
.rv-ya { margin-top: 44px; }
.rv-ya__title { font-family: var(--font-sans); font-weight: 800; font-size: 28px; line-height: 1.1; letter-spacing: -0.01em; color: var(--text-primary); margin: 0 0 8px; }
.rv-ya__sub { font-family: var(--font-sans); font-size: 15px; color: var(--text-muted); margin: 0 0 20px; }
.rv-ya-grid { display: grid; grid-template-columns: repeat(2, 1fr); gap: 20px; }
.rv-ya-card { display: flex; flex-direction: column; background: var(--has-white); border: 1px solid var(--border-light); border-radius: 20px; overflow: hidden; }
.rv-ya-card__head { display: flex; align-items: center; gap: 12px; padding: 16px 18px; border-bottom: 1px solid var(--border-light); }
.rv-ya-card__ya { flex: none; display: inline-flex; align-items: center; justify-content: center; width: 34px; height: 34px; border-radius: 9px; background: #fc3f1d; color: #fff; font-family: var(--font-sans); font-weight: 800; font-size: 18px; }
.rv-ya-card__loc { display: flex; flex-direction: column; min-width: 0; }
.rv-ya-card__city { font-family: var(--font-sans); font-weight: 700; font-size: 15px; color: var(--text-primary); }
.rv-ya-card__addr { font-family: var(--font-sans); font-size: 12.5px; color: var(--text-muted); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.rv-ya-frame { width: 100%; height: 560px; border: none; display: block; background: #fff; }


/* адаптив сетки отзывов: 3 → 2 (≤980) → 1 (≤820) */
@media (max-width: 980px) { .rv-page .many_reviews_ins { grid-template-columns: repeat(2, 1fr); } }
@media (max-width: 820px) {
  .rv-page .many_reviews_ins { grid-template-columns: 1fr; }
  .rv-mon { align-self: stretch; }
  .rv-ya-grid { grid-template-columns: 1fr; }
  .rv-ya-frame { height: 480px; }
}

/* список отзывов → ровная сетка карточек: 3 колонки, одинаковая высота в ряду */
.rv-page .many_reviews,
.rv-page .many_reviews_ins { display: block; }
.rv-page .many_reviews_ins {
  display: grid; grid-template-columns: repeat(3, 1fr); gap: 16px; align-items: stretch;
  transform: none !important; /* на случай swiper-обёртки */
  /* у движка это самостоятельная карточка (белый фон, рамка, radius 28, padding
     24) — обнуляем, карточки теперь сами .one_reviews */
  background: transparent; border: none; border-radius: 0; padding: 0; box-shadow: none;
}
.rv-page .one_reviews {
  float: none; width: auto; margin: 0;
  background: var(--has-white); border: 1px solid var(--border-light); border-radius: 18px;
  padding: 20px 22px; box-shadow: 0 2px 8px rgba(18, 16, 10, 0.04);
}
.rv-page .one_reviews_ins { padding: 0; }
.rv-page .one_reviews_abs { display: none; }
.rv-page .one_reviews_name { font-family: var(--font-sans); font-weight: 700; font-size: 17px; color: var(--text-primary); margin-bottom: 4px; }
.rv-page .one_reviews_name span { font-weight: 700; color: var(--text-primary); }
.rv-page .one_reviews_date { font-family: var(--font-sans); font-size: 13px; color: var(--text-muted); padding-bottom: 12px; margin-bottom: 12px; border-bottom: 1px solid var(--border-light); }
.rv-page .one_reviews_text { font-family: var(--font-sans); font-size: 14.5px; line-height: 1.55; color: var(--text-secondary); }
.rv-page .one_reviews_text p { margin: 0 0 8px; }
.rv-page .one_reviews_text p:last-child { margin: 0; }
.rv-page .reviews-button-navigation { display: none; } /* стрелки карусели не нужны в сетке */

/* ---- форма «Оставить отзыв» (rf_line) ---- */
.rv-page .reviewsform,
.rv-page .review_form_wrap { max-width: 760px; margin: 40px 0 0; }
/* Поля занимают примерно половину карточки, правая половина пустовала —
   кладём туда панель «Расскажите о нас на мониторингах» (её дописывает
   has_reviews_page.php через штатный фильтр движка reviews_form_temp). */
.rv-page .rf_div_wrap form { display: grid; grid-template-columns: minmax(0, 1fr) 340px; gap: 20px 40px; align-items: start; }
.rv-page .rf_div_title { grid-column: 1 / -1; }
/* движок зажимает поля в фиксированные 364px — растягиваем на колонку */
.rv-page .rf_div_ins { width: 100% !important; max-width: none !important; box-sizing: border-box; }

.rv-ask { background: var(--surface-sunken); border: 1px solid var(--border-light); border-radius: 20px; padding: 22px 24px; }
.rv-ask__title { font-family: var(--font-sans); font-weight: 800; font-size: 17px; color: var(--text-primary); margin-bottom: 8px; }
.rv-ask__text { font-family: var(--font-sans); font-size: 14px; line-height: 1.6; color: var(--text-secondary); margin: 0 0 16px; }
.rv-ask__list { display: flex; flex-direction: column; gap: 10px; }
.rv-ask__item {
  display: flex; align-items: center; gap: 12px; padding: 12px 14px; text-decoration: none;
  background: var(--has-white); border: 1px solid var(--border-light); border-radius: 14px;
  transition: transform .16s cubic-bezier(.22, 1, .36, 1), border-color .16s, box-shadow .16s;
}
.rv-ask__item:hover { transform: translateY(-2px); border-color: rgba(224, 167, 20, .45); box-shadow: 0 10px 26px rgba(18, 16, 10, .08); }
.rv-ask__ico { flex: none; display: inline-flex; align-items: center; justify-content: center; width: 34px; height: 34px; border-radius: 11px; background: var(--has-yellow); }
.rv-ask__t { min-width: 0; flex: 1; }
.rv-ask__n { display: block; font-family: var(--font-sans); font-weight: 700; font-size: 14.5px; color: var(--text-primary); }
.rv-ask__s { display: block; font-family: var(--font-sans); font-size: 12.5px; color: var(--text-muted); }
.rv-ask__ext { flex: none; color: var(--text-muted); }
.rv-ask__hint { font-family: var(--font-sans); font-size: 12.5px; line-height: 1.5; color: var(--text-muted); margin: 14px 0 0; }

@media (max-width: 860px) {
  .rv-page .rf_div_wrap form { grid-template-columns: 1fr; gap: 0; }
  .rv-ask { margin-top: 24px; }
}
.rv-page .rf_line .form_field_label label {
  display: block; font-family: var(--font-sans); font-size: 13px; font-weight: 600;
  color: var(--text-secondary); margin-bottom: 6px;
}
.rv-page .rf_line .req { color: var(--error); }
.rv-page .rf_line input[type="text"],
.rv-page .rf_line input[type="email"],
.rv-page .rf_line textarea {
  width: 100%; height: auto; padding: 14px 16px;
  border: 1px solid var(--border-light); border-radius: 14px; background: var(--has-white);
  font-family: var(--font-sans); font-size: 15px; color: var(--text-primary); outline: none; box-shadow: none;
}
.rv-page .rf_line textarea { min-height: 130px; resize: vertical; }
.rv-page .rf_line input:hover, .rv-page .rf_line input:focus,
.rv-page .rf_line textarea:hover, .rv-page .rf_line textarea:focus { border-color: var(--has-gold) !important; box-shadow: none !important; }
.rv-page .form_field_line { margin-bottom: 14px; }
.rv-page .form_field_errors_ins { margin-top: 6px; font-size: 12.5px; color: var(--error); }

/* капча в форме отзыва — тот же вид, что в авторизации */
.rv-page .captcha_div { margin: 4px 0 14px; }
.rv-page .captcha_title { display: none; }
.rv-page .captcha_body { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; }
.rv-page .captcha_divimg { width: 46px; height: 46px; border-radius: 10px; overflow: hidden; flex: none; background: repeating-linear-gradient(45deg, #EFEAD9, #EFEAD9 6px, #E4DDC7 6px, #E4DDC7 12px); }
.rv-page .captcha_divimg img { display: block; width: 100%; height: 100%; object-fit: cover; }
.rv-page .captcha_divznak { font-weight: 700; font-size: 18px; color: var(--text-muted); }
.rv-page input.captcha_divpole { width: 64px; padding: 11px; border-radius: 12px; text-align: center; font-weight: 700; font-size: 19px; background: var(--has-white); border: 1px solid var(--border-light); }

.rv-page input[type="submit"] {
  margin-top: 8px; padding: 15px 28px; border: none; border-radius: 14px; background: var(--has-black);
  font-family: var(--font-sans); font-weight: 700; font-size: 15px; color: #fff; cursor: pointer;
  transition: opacity var(--dur-fast) var(--ease-out); width: auto;
}
.rv-page input[type="submit"]:hover { opacity: 0.88; }

/* На широком экране капча и отправка — одна компактная строка.
   Поля формы остаются на всю ширину; на мобильном сохраняется обычный стек. */
@media (min-width: 641px) {
  .rv-page .rf_div_ins {
    display: grid;
    grid-template-columns: minmax(0, 1fr) auto;
    column-gap: 20px;
    align-items: end;
  }
  .rv-page .rf_div_ins > .form_field_line,
  .rv-page .rf_div_ins > .resultgo { grid-column: 1 / -1; }
  .rv-page .rf_div_ins > .captcha_div {
    grid-column: 1;
    min-width: 0;
    margin: 4px 0 0;
  }
  .rv-page .rf_div_ins > .captcha_div .captcha_body { margin-bottom: 0; }
  .rv-page .rf_div_ins > .rf_line.has_submit {
    grid-column: 2;
    align-self: end;
    margin: 0;
  }
  .rv-page .rf_div_ins > .rf_line.has_submit .rf_submit {
    height: 60px;
    margin: 0;
    padding: 0 28px;
  }
}

/* пагинация движка (.pagenavi_ins) → пилюли макета */
.rv-page .pagenavi_ins { display: flex; align-items: center; justify-content: center; gap: 8px; margin-top: 34px; flex-wrap: wrap; }
.rv-page .pagenavi_ins a, .rv-page .pagenavi_ins span {
  display: inline-flex; align-items: center; justify-content: center; min-width: 46px; height: 46px; padding: 0 10px;
  border-radius: 13px; border: 1px solid var(--border-light); background: var(--has-white);
  font-family: var(--font-sans); font-weight: 700; font-size: 15px; color: var(--text-secondary); text-decoration: none;
}
.rv-page .pagenavi_ins span.current,
.rv-page .pagenavi_ins .current { background: var(--has-black); color: #fff; border-color: var(--has-black); }
.rv-page .pagenavi_ins a:hover { border-color: var(--has-black); color: var(--text-primary); }
.rv-page .pagenavi_ins .pages,
.rv-page .pagenavi_ins .extend { border: none; background: transparent; min-width: 24px; height: auto; color: var(--text-muted); }

@media (max-width: 820px) {
  .rv-page { padding: 18px 16px 44px; }
  .rv-page .many_reviews_ins { grid-template-columns: 1fr; }
}

/* ═══════════════════ КОНТЕНТНЫЕ СТРАНИЦЫ: общая шапка ═══════════════════ */
.has-phero { background: var(--has-white); border-bottom: 1px solid var(--border-light); }
.has-phero__inner { max-width: 1120px; margin: 0 auto; padding: 32px 40px 28px; }
.has-phero__badge {
  display: inline-flex; align-items: center; gap: 7px; margin-bottom: 16px; padding: 7px 14px;
  border-radius: 999px; background: var(--yellow-wash); color: var(--has-gold-deep);
  font-family: var(--font-sans); font-weight: 700; font-size: 13px;
}
.has-phero__title { font-family: var(--font-sans); font-weight: 800; font-size: 34px; line-height: 1.14; letter-spacing: -0.02em; color: var(--text-primary); margin: 0 0 10px; max-width: 820px; }
.has-phero__sub { font-family: var(--font-sans); font-size: 15px; color: var(--text-muted); margin: 0; max-width: 640px; line-height: 1.5; }
.has-accent { color: var(--has-yellow); }
/* тёмный герой (кэшбек) */
.has-phero--dark { background: var(--has-black); border-bottom: none; }
.has-phero--dark .has-faqp-crumbs, .has-phero--dark .has-faqp-crumbs a { color: rgba(255, 255, 255, 0.5); }
.has-phero--dark .has-faqp-crumbs__cur { color: rgba(255, 255, 255, 0.8); }
.has-phero--dark .has-phero__inner { padding: 30px 40px 40px; }
.has-phero--dark .has-phero__badge { background: rgba(249, 205, 46, 0.16); color: var(--has-yellow); }
.has-phero--dark .has-phero__title { color: #fff; font-size: 40px; }
.has-phero--dark .has-phero__sub { color: rgba(255, 255, 255, 0.66); font-size: 17px; }

/* ═══════════════════ AML ═══════════════════ */
.aml-grid { display: grid; grid-template-columns: 260px minmax(0, 1fr); gap: 40px; max-width: 1120px; margin: 0 auto; padding: 24px 40px 56px; align-items: start; }
.aml-toc { position: sticky; top: 88px; display: flex; flex-direction: column; gap: 2px; }
.aml-toc__title { font-family: var(--font-sans); font-size: 12px; text-transform: uppercase; letter-spacing: 0.06em; color: var(--text-muted); margin: 0 12px 10px; }
.aml-toc a { display: flex; gap: 10px; padding: 8px 12px; border-radius: 10px; text-decoration: none; font-family: var(--font-sans); font-size: 13.5px; line-height: 1.4; color: var(--text-secondary); transition: background 0.14s ease, color 0.14s ease; }
.aml-toc a:hover { background: var(--surface-sunken); color: var(--text-primary); }
.aml-toc a .n { font-weight: 700; color: var(--text-muted); flex: none; min-width: 18px; }
.aml-sec { background: var(--has-white); border: 1px solid var(--border-light); border-radius: 20px; box-shadow: 0 2px 8px rgba(18, 16, 10, 0.04); padding: 26px 30px; margin-bottom: 16px; }
.aml-body h2 { font-family: var(--font-sans); font-weight: 800; font-size: 24px; line-height: 1.24; letter-spacing: -0.01em; color: var(--text-primary); margin: 0 0 14px; scroll-margin-top: 88px; }
.aml-body h2 .num { color: var(--has-gold-deep); }
.aml-body p { font-family: var(--font-sans); font-size: 15.5px; line-height: 1.7; color: var(--text-secondary); margin: 0 0 14px; }
.aml-body p:last-child { margin-bottom: 0; }
.aml-body ul, .aml-body ol { margin: 0 0 16px; padding-left: 4px; list-style: none; display: flex; flex-direction: column; gap: 9px; }
.aml-body li { position: relative; padding-left: 24px; font-family: var(--font-sans); font-size: 15.5px; line-height: 1.6; color: var(--text-secondary); }
.aml-body li::before { content: ""; position: absolute; left: 3px; top: 10px; width: 6px; height: 6px; border-radius: 50%; background: var(--has-gold); }
.aml-body strong { color: var(--text-primary); font-weight: 700; }
.aml-body a { color: var(--has-gold-deep); text-decoration: none; font-weight: 600; }

/* ═══════════════════ КЭШБЕК ═══════════════════ */
.cb-wrap { max-width: 1120px; margin: 0 auto; padding: 32px 40px 56px; }
.cb-h { font-family: var(--font-sans); font-weight: 800; font-size: 24px; letter-spacing: -0.01em; color: var(--text-primary); margin: 0 0 18px; }
.cb-sub { font-family: var(--font-sans); font-size: 15px; color: var(--text-muted); margin: 0 0 16px; }

.cb-tiers { display: grid; grid-template-columns: repeat(5, 1fr); gap: 14px; margin-bottom: 28px; }
.cb-tier { background: var(--has-white); border: 1px solid var(--border-light); border-radius: 18px; padding: 20px 22px; box-shadow: 0 2px 8px rgba(18, 16, 10, 0.04); }
.cb-tier__range { font-family: var(--font-sans); font-size: 12.5px; color: var(--text-muted); margin-bottom: 12px; min-height: 30px; }
.cb-tier__val { font-family: var(--font-sans); font-weight: 800; font-size: 26px; color: var(--text-primary); margin-bottom: 4px; }
.cb-tier__note { font-family: var(--font-sans); font-size: 12.5px; color: var(--text-muted); }
.cb-tier--dark { background: var(--has-black); border-color: var(--has-black); }
.cb-tier--dark .cb-tier__range { color: rgba(255, 255, 255, 0.55); }
.cb-tier--dark .cb-tier__val { color: var(--has-yellow); }
.cb-tier--dark .cb-tier__note { color: rgba(255, 255, 255, 0.55); }

.cb-card { background: var(--has-white); border: 1px solid var(--border-light); border-radius: 20px; box-shadow: 0 2px 8px rgba(18, 16, 10, 0.04); padding: 26px 28px; margin-bottom: 24px; }
.cb-steps { display: flex; flex-direction: column; gap: 16px; }
.cb-step { display: flex; align-items: flex-start; gap: 14px; }
.cb-step__n { flex: none; display: inline-flex; align-items: center; justify-content: center; width: 34px; height: 34px; border-radius: 50%; background: var(--has-yellow); color: var(--has-black); font-family: var(--font-sans); font-weight: 800; font-size: 15px; }
.cb-step__n--done { background: var(--has-black); color: var(--has-yellow); }
.cb-step__t { font-family: var(--font-sans); font-weight: 700; font-size: 16px; color: var(--text-primary); margin-bottom: 2px; }
.cb-step__d { font-family: var(--font-sans); font-size: 14px; line-height: 1.5; color: var(--text-secondary); }

.cb-cities { display: flex; flex-wrap: wrap; gap: 10px; }
.cb-city { display: inline-flex; align-items: center; gap: 7px; padding: 10px 16px; border-radius: 999px; background: var(--surface-sunken); border: 1px solid var(--border-light); font-family: var(--font-sans); font-size: 14.5px; color: var(--text-primary); }
.cb-city svg { color: var(--has-gold); }

.cb-conds { display: grid; grid-template-columns: 1fr 1fr; gap: 14px; margin-bottom: 32px; }
.cb-cond { display: flex; align-items: flex-start; gap: 12px; background: var(--has-white); border: 1px solid var(--border-light); border-radius: 16px; padding: 16px 18px; }
.cb-cond__ic { flex: none; display: inline-flex; margin-top: 1px; }
.cb-cond__ic--yes { color: #2EAD5B; }
.cb-cond__ic--no { color: var(--text-muted); }
.cb-cond__t { font-family: var(--font-sans); font-size: 14.5px; line-height: 1.5; color: var(--text-secondary); }
.cb-cond__t strong { color: var(--text-primary); font-weight: 700; }

.cb-cta { display: flex; align-items: center; gap: 20px; flex-wrap: wrap; background: var(--has-yellow); border-radius: 20px; padding: 28px 32px; }
.cb-cta__body { flex: 1; min-width: 220px; }
.cb-cta__t { font-family: var(--font-sans); font-weight: 800; font-size: 24px; color: var(--has-black); margin-bottom: 4px; }
.cb-cta__d { font-family: var(--font-sans); font-size: 14.5px; color: rgba(18, 16, 10, 0.72); }
.cb-cta__btn { display: inline-flex; align-items: center; gap: 8px; background: var(--has-black); color: #fff; text-decoration: none; font-family: var(--font-sans); font-weight: 700; font-size: 15px; padding: 14px 24px; border-radius: 14px; }
.cb-disclaimer { font-family: var(--font-sans); font-style: italic; font-size: 13.5px; line-height: 1.6; color: var(--text-muted); margin: 24px 0 0; max-width: 760px; }

/* ═══════════════════ КОНТАКТЫ ═══════════════════ */
.ct-grid { display: grid; grid-template-columns: minmax(0, 1fr) 340px; gap: 24px; max-width: 1120px; margin: 0 auto; padding: 24px 40px 56px; align-items: start; }
.ct-main { display: flex; flex-direction: column; gap: 20px; min-width: 0; }
.ct-card { background: var(--has-white); border: 1px solid var(--border-light); border-radius: 20px; box-shadow: 0 2px 8px rgba(18, 16, 10, 0.04); padding: 26px 30px; }
.ct-card__head { display: flex; align-items: center; gap: 14px; margin-bottom: 14px; }
.ct-card__ic { flex: none; display: inline-flex; align-items: center; justify-content: center; width: 44px; height: 44px; border-radius: 12px; background: var(--has-yellow); color: var(--has-black); }
.ct-card__t { font-family: var(--font-sans); font-weight: 800; font-size: 20px; color: var(--text-primary); }
.ct-card__hours { font-family: var(--font-sans); font-size: 13px; color: var(--text-muted); margin-top: 2px; }
.ct-card p { font-family: var(--font-sans); font-size: 15px; line-height: 1.6; color: var(--text-secondary); margin: 0 0 12px; }
.ct-card__btns { display: flex; flex-wrap: wrap; gap: 10px; margin-top: 16px; }
.ct-btn { display: inline-flex; align-items: center; gap: 8px; padding: 12px 18px; border-radius: 12px; text-decoration: none; font-family: var(--font-sans); font-weight: 700; font-size: 14px; }
.ct-btn--ghost { background: var(--surface-sunken); border: 1px solid var(--border-light); color: var(--text-primary); }
.ct-btn--dark { background: var(--has-black); color: #fff; }
.ct-btn--primary { background: var(--has-yellow); color: var(--has-black); }

.ct-form__t { font-family: var(--font-sans); font-weight: 800; font-size: 24px; color: var(--text-primary); margin: 0 0 6px; }
.ct-form__sub { font-family: var(--font-sans); font-size: 14px; color: var(--text-muted); margin: 0 0 18px; }
/* движковая форма [contact_form] под макет */
.ct-form .form_field_label label { display: block; font-family: var(--font-sans); font-size: 13px; font-weight: 600; color: var(--text-secondary); margin-bottom: 6px; }
.ct-form .req { color: var(--error); }
.ct-form input[type="text"], .ct-form input[type="email"], .ct-form textarea {
  width: 100%; padding: 14px 16px; border: 1px solid var(--border-light); border-radius: 14px; background: var(--surface-sunken);
  font-family: var(--font-sans); font-size: 15px; color: var(--text-primary); outline: none;
}
.ct-form textarea { min-height: 130px; resize: vertical; }
.ct-form input:focus, .ct-form textarea:focus { border-color: var(--has-gold) !important; }
.ct-form .form_field_line { margin-bottom: 14px; }
.ct-form .form_field_errors_ins { margin-top: 6px; font-size: 12.5px; color: var(--error); }
.ct-form .captcha_title { display: none; }
.ct-form .captcha_body { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; }
.ct-form .captcha_divimg { width: 46px; height: 46px; border-radius: 10px; overflow: hidden; flex: none; background: repeating-linear-gradient(45deg, #EFEAD9, #EFEAD9 6px, #E4DDC7 6px, #E4DDC7 12px); }
.ct-form .captcha_divimg img { display: block; width: 100%; height: 100%; object-fit: cover; }
.ct-form input.captcha_divpole { width: 64px; padding: 11px; border-radius: 12px; text-align: center; font-weight: 700; }
.ct-form input[type="submit"] { margin-top: 8px; padding: 15px 28px; border: none; border-radius: 14px; background: var(--has-black); font-family: var(--font-sans); font-weight: 700; font-size: 15px; color: #fff; cursor: pointer; width: auto; }
.ct-form input[type="submit"]:hover { opacity: 0.88; }

.ct-aside { display: flex; flex-direction: column; gap: 16px; position: sticky; top: 88px; }
.ct-quick { background: var(--has-black); border-radius: 20px; padding: 20px; display: flex; flex-direction: column; gap: 8px; }
.ct-quick__title { font-family: var(--font-sans); font-size: 12px; text-transform: uppercase; letter-spacing: 0.06em; color: rgba(255, 255, 255, 0.5); margin-bottom: 6px; }
.ct-quick__row { display: flex; align-items: center; gap: 10px; padding: 12px 14px; border-radius: 12px; background: rgba(255, 255, 255, 0.08); border: 1px solid rgba(255, 255, 255, 0.1); color: #fff; text-decoration: none; font-family: var(--font-sans); font-weight: 600; font-size: 14px; }
.ct-quick__row:hover { background: rgba(255, 255, 255, 0.14); color: #fff; }
.ct-quick__row svg { color: var(--has-yellow); flex: none; }
.ct-quick__max { display: inline-flex; align-items: center; justify-content: center; width: 16px; font-weight: 800; font-size: 11px; color: var(--has-yellow); flex: none; }
.ct-hours { background: var(--has-white); border: 1px solid var(--border-light); border-radius: 20px; padding: 20px 22px; box-shadow: 0 2px 8px rgba(18, 16, 10, 0.04); }
.ct-hours__title { font-family: var(--font-sans); font-weight: 800; font-size: 17px; color: var(--text-primary); margin-bottom: 12px; }
.ct-hours__row { display: flex; justify-content: space-between; align-items: center; font-family: var(--font-sans); font-size: 14px; color: var(--text-secondary); padding: 6px 0; }
.ct-hours__row b { color: var(--text-primary); font-weight: 700; }
.ct-hours__note { font-family: var(--font-sans); font-size: 13px; color: #2EAD5B; margin-top: 8px; }

@media (max-width: 900px) {
  .aml-grid { grid-template-columns: 1fr; padding: 16px 16px 44px; gap: 16px; }
  .aml-toc { position: static; }
  .ct-grid { grid-template-columns: 1fr; padding: 16px 16px 44px; }
  .ct-aside { position: static; }
  .has-phero__inner { padding: 24px 16px 22px; }
  .has-phero--dark .has-phero__title, .has-phero__title { font-size: 28px; }
  .cb-wrap { padding: 24px 16px 44px; }
  .cb-tiers { grid-template-columns: 1fr 1fr; }
  .cb-conds { grid-template-columns: 1fr; }
}

/* ═══════════════════ ПРЕДУПРЕЖДЕНИЕ (/notice/) ═══════════════════ */
.nt-wrap { max-width: 880px; margin: 0 auto; padding: 24px 40px 56px; display: flex; flex-direction: column; gap: 18px; }
.nt-intro { font-family: var(--font-sans); font-size: 16px; line-height: 1.6; color: var(--text-secondary); }
.nt-intro p { margin: 0 0 12px; }
.nt-sec { background: var(--has-white); border: 1px solid var(--border-light); border-radius: 20px; box-shadow: 0 2px 8px rgba(18, 16, 10, 0.04); padding: 26px 30px; }
.nt-sec h2 { font-family: var(--font-sans); font-weight: 800; font-size: 24px; line-height: 1.24; letter-spacing: -0.01em; color: var(--text-primary); margin: 0 0 18px; display: flex; align-items: center; gap: 12px; }
.nt-ic { display: inline-flex; align-items: center; justify-content: center; width: 40px; height: 40px; border-radius: 12px; background: var(--yellow-wash); color: var(--has-gold-deep); flex: none; }
.nt-body p { font-family: var(--font-sans); font-size: 15.5px; line-height: 1.6; color: var(--text-secondary); margin: 0 0 14px; }
.nt-body p:last-child { margin-bottom: 0; }
.nt-body strong { color: var(--text-primary); font-weight: 700; }
.nt-body ul { margin: 0; padding-left: 4px; list-style: none; display: flex; flex-direction: column; gap: 12px; }
.nt-body li { position: relative; padding-left: 26px; font-family: var(--font-sans); font-size: 15.5px; line-height: 1.55; color: var(--text-secondary); }
.nt-body li::before { content: ""; position: absolute; left: 4px; top: 9px; width: 7px; height: 7px; border-radius: 50%; background: var(--has-gold); }
.nt-cta { display: flex; align-items: center; gap: 20px; flex-wrap: wrap; background: var(--has-black); border-radius: 20px; padding: 24px 28px; }
.nt-cta__body { flex: 1; min-width: 220px; }
.nt-cta__t { font-family: var(--font-sans); font-weight: 800; font-size: 20px; color: #fff; margin-bottom: 4px; }
.nt-cta__s { font-family: var(--font-sans); font-size: 14px; line-height: 1.5; color: rgba(255, 255, 255, 0.65); }
.nt-cta__btn { display: inline-flex; align-items: center; gap: 8px; background: var(--has-yellow); color: var(--has-black); text-decoration: none; font-family: var(--font-sans); font-weight: 700; font-size: 14px; padding: 13px 20px; border-radius: 12px; }
@media (max-width: 720px) { .nt-wrap { padding: 16px 16px 44px; } .nt-sec { padding: 22px 20px; } }

/* Клиентский блок «Отзывы на Яндекс Картах» в контенте /reviews/ использует
   хардкод-цвета (#3f3f3f/#6b6b6b/#fff) — в тёмной теме форсируем читаемость.
   Сам блок — плейсхолдер под официальный виджет Яндекса. */
html.dark .rv-page [style*="#3f3f3f"], body.dark .rv-page [style*="#3f3f3f"] { color: var(--text-primary) !important; }
html.dark .rv-page [style*="#6b6b6b"], body.dark .rv-page [style*="#6b6b6b"] { color: var(--text-secondary) !important; }
html.dark .rv-page [style*="background:#fff"], html.dark .rv-page [style*="background: #fff"],
body.dark .rv-page [style*="background:#fff"], body.dark .rv-page [style*="background: #fff"] { background: var(--surface-card) !important; border-color: var(--border-light) !important; }

/* ═══════════════════ ОФИСЫ (/office/) ═══════════════════ */
.of-wrap { max-width: 1120px; margin: 0 auto; padding: 24px 40px 56px; }
.of-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 18px; }
.of-card { background: var(--has-white); border: 1px solid var(--border-light); border-radius: 20px; overflow: hidden; box-shadow: 0 2px 8px rgba(18, 16, 10, 0.04); transition: transform 0.16s cubic-bezier(0.22, 1, 0.36, 1), box-shadow 0.16s; }
.of-card:hover { transform: translateY(-3px); box-shadow: 0 14px 34px rgba(18, 16, 10, 0.10); }
.of-cover { position: relative; height: 132px; background: var(--has-cream); border-bottom: 1px solid var(--border-light); display: flex; align-items: center; justify-content: center; }
.of-badge { position: absolute; top: 12px; left: 12px; display: inline-flex; align-items: center; gap: 6px; background: var(--has-white); border: 1px solid var(--border-light); border-radius: 999px; padding: 5px 11px; font-family: var(--font-sans); font-weight: 600; font-size: 11.5px; color: var(--text-secondary); }
.of-badge svg { color: var(--has-gold); }
.of-mark { color: var(--has-gold); opacity: 0.55; }
.of-body { padding: 20px 22px; }
.of-city { font-family: var(--font-sans); font-weight: 800; font-size: 19px; letter-spacing: -0.01em; color: var(--text-primary); margin-bottom: 12px; }
.of-addr, .of-hours { display: flex; align-items: flex-start; gap: 9px; font-family: var(--font-sans); font-size: 14px; line-height: 1.4; color: var(--text-secondary); margin-bottom: 10px; }
.of-addr svg, .of-hours svg { color: var(--text-muted); flex: none; margin-top: 1px; }
.of-row { display: flex; align-items: center; justify-content: space-between; margin-top: 16px; }
.of-status { display: inline-flex; align-items: center; gap: 6px; padding: 5px 11px; border-radius: 999px; background: var(--success-wash); color: #1d7a3f; font-family: var(--font-sans); font-weight: 700; font-size: 12px; }
.of-status::before { content: ""; width: 7px; height: 7px; border-radius: 50%; background: #2EAD5B; }
.of-book { display: inline-flex; align-items: center; gap: 6px; font-family: var(--font-sans); font-weight: 700; font-size: 13.5px; color: var(--has-gold-deep); text-decoration: none; }

/* ═══════════════════ О СЕРВИСЕ (/about/) ═══════════════════ */
.ab-wrap { max-width: 1120px; margin: 0 auto; padding: 24px 40px 56px; display: flex; flex-direction: column; gap: 18px; }
.ab-sec { background: var(--has-white); border: 1px solid var(--border-light); border-radius: 20px; box-shadow: 0 2px 8px rgba(18, 16, 10, 0.04); padding: 28px 30px; }
.ab-sec h2 { font-family: var(--font-sans); font-weight: 800; font-size: 24px; line-height: 1.24; letter-spacing: -0.01em; color: var(--text-primary); margin: 0 0 16px; }
.ab-sec p { font-family: var(--font-sans); font-size: 15.5px; line-height: 1.7; color: var(--text-secondary); margin: 0 0 12px; }
.ab-sec p:last-child { margin-bottom: 0; }
.ab-sec strong { color: var(--text-primary); font-weight: 700; }
.ab-sec ul { margin: 0 0 12px; padding-left: 4px; list-style: none; display: flex; flex-direction: column; gap: 9px; }
.ab-sec li { position: relative; padding-left: 24px; font-family: var(--font-sans); font-size: 15.5px; line-height: 1.6; color: var(--text-secondary); }
.ab-sec li::before { content: ""; position: absolute; left: 3px; top: 10px; width: 6px; height: 6px; border-radius: 50%; background: var(--has-gold); }
.ab-links { display: grid; grid-template-columns: 1fr 1fr; gap: 8px; }
.ab-link { display: flex; align-items: center; gap: 10px; padding: 11px 14px; border-radius: 12px; background: var(--surface-sunken); text-decoration: none; font-family: var(--font-sans); font-weight: 600; font-size: 14px; color: var(--text-secondary); transition: background 0.14s ease, color 0.14s ease; }
.ab-link:hover { background: var(--yellow-wash); color: var(--has-gold-deep); }
.ab-link svg { color: var(--has-gold); flex: none; }
/* min-width:0 обязателен: flex-элемент по умолчанию не сжимается меньше
   своего содержимого, поэтому nowrap-заголовок не обрезался многоточием,
   а распирал страницу — на 375px «О сервисе» уезжала вбок до 601px. */
.ab-link { min-width: 0; }
.ab-link span { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }

/* Списки-ссылки внутри авторского контента («Направления обменов» и т.п.):
   движок отдаёт их обычным <ul>, и они рисовались списком с золотыми точками.
   По макету это сетка-плитки с шевроном — тот же вид, что у .ab-links.
   :has(a) — чтобы обычные текстовые списки остались списками. */
/* gap с !important: списки лежат в движковом блоке .sitemap_once_ins, который
   задаёт свои колоночные отступы (40px) и перебивает обычную специфичность */
.ab-sec.ab-intro ul:has(a) { display: grid; grid-template-columns: 1fr 1fr; gap: 8px !important; padding-left: 0; margin-bottom: 14px; }
.ab-intro ul:has(a) li { padding-left: 0; }
.ab-intro ul:has(a) li::before { display: none; }
.ab-intro ul:has(a) li a {
  display: flex; align-items: center; gap: 10px; padding: 11px 14px; border-radius: 12px;
  background: var(--surface-sunken); border: 1px solid var(--border-light); text-decoration: none;
  font-family: var(--font-sans); font-size: 14px; color: var(--text-secondary);
  transition: background 0.14s ease, border-color 0.14s ease, color 0.14s ease;
}
.ab-intro ul:has(a) li a::before {
  content: ""; flex: none; width: 16px; height: 16px; background-repeat: no-repeat; background-position: center;
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23E0A714' stroke-width='2.6' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m9 18 6-6-6-6'/%3E%3C/svg%3E");
}
.ab-intro ul:has(a) li a:hover { background: var(--has-white); border-color: rgba(224, 167, 20, 0.4); color: var(--text-primary); }

@media (max-width: 900px) {
  .of-wrap, .ab-wrap { padding: 16px 16px 44px; }
  .of-grid { grid-template-columns: 1fr 1fr; }
  .ab-links { grid-template-columns: 1fr; }
  .ab-intro ul:has(a) { grid-template-columns: 1fr; }
}
@media (max-width: 620px) { .of-grid { grid-template-columns: 1fr; } }

/* ═══════════════════ ОФОРМЛЕНИЕ ЗАЯВКИ (страницы обмена) ═══════════════════
   Форму отдаёт движок (.xchange_*); переодеваем её и оборачиваем в
   двухколоночный вид форма + сайдбар. Всё под .has-xch. */
.xch-grid { display: grid; grid-template-columns: minmax(0, 1fr) 320px; gap: 24px; max-width: 1120px; margin: 0 auto; padding: 24px 40px 56px; align-items: start; }
.xch-main { min-width: 0; }
/* На мобильном браузеры «раздувают» шрифт (font boosting) — поле суммы (18px)
   становилось 33px и вылезало из общей высоты. Фиксируем размеры как заданы. */
.has-xch { -webkit-text-size-adjust: 100%; text-size-adjust: 100%; }

/* карточка формы */
.has-xch .xchange_div { background: var(--has-white); border: 1px solid var(--border-light); border-radius: 20px; box-shadow: 0 2px 8px rgba(18, 16, 10, 0.04); padding: 22px 26px; }
/* Отдаёте/Получаете — стопкой, как в макете */
.has-xch .xchange_div_cols { display: flex; flex-direction: column; gap: 4px; }
.has-xch .xchange_div_col_give { padding-bottom: 16px; margin-bottom: 16px; border-bottom: 1px solid var(--border-light); }
.has-xch .xchange_data_title_ins,
.has-xch .xchange_pers_title_ins { font-family: var(--font-sans); font-weight: 800; font-size: 20px; letter-spacing: -0.01em; color: var(--text-primary); margin-bottom: 10px; }
.has-xch .xchange_info_line { font-family: var(--font-sans); font-size: 13.5px; color: var(--text-muted); margin-bottom: 8px; }
.has-xch .xchange_info_line b, .has-xch .js_course_html { color: var(--text-primary); font-weight: 700; }
.has-xch .span_give_max, .has-xch .span_get_max { display: flex; flex-direction: row; flex-wrap: wrap; justify-content: flex-end; gap: 4px 18px; font-family: var(--font-sans); font-size: 13px; color: var(--text-muted); margin: 3px 0 6px; }
.has-xch .span_give_max .js_amount, .has-xch .span_get_max .js_amount { flex: 0 0 auto; width: auto; white-space: nowrap; }
.has-xch .span_give_max b, .has-xch .span_get_max b { color: var(--text-primary); }

/* селект валюты */
.has-xch .xchange_select { margin-bottom: 6px; }
.has-xch .xchange_select select,
.has-xch .xchange_pers select {
  width: 100%; padding: 15px 16px; border: 1px solid var(--border-light); border-radius: 14px;
  background: var(--has-white); font-family: var(--font-sans); font-weight: 700; font-size: 15px; color: var(--text-primary); outline: none;
}

/* ── кастомный выпадающий список валюты/города (виджет движка iselect) ─────
   Движок прячет нативный <select> и рисует свой виджет .select_js: «пилюля»
   .select_js_title (иконка + название) и панель .select_js_ul со списком.
   Движок задаёт им дефолтный вид — переодеваем в макет (иконка, скругления,
   ховер, подсветка выбранного). Логику выбора НЕ трогаем. */
.has-xch .select_js { height: auto !important; position: relative; }
/* единая высота 48px со всеми полями ввода (min-height + центрирование) */
.has-xch .select_js_title {
  display: flex; align-items: center; min-height: 48px; height: auto !important; background: var(--surface-sunken);
  border: 1px solid var(--border-light); border-radius: 12px; padding: 5px 40px 5px 12px; cursor: pointer; box-sizing: border-box;
}
.has-xch .select_js_title_ins { display: flex; align-items: center; gap: 10px; width: 100%; }
.has-xch .select_ico.currency_logo,
.has-xch .select_js_title .select_ico {
  width: 24px; height: 24px; flex: none; border-radius: 50%;
  background-size: contain; background-repeat: no-repeat; background-position: center;
}
.has-xch .select_txt { font-family: var(--font-sans); font-weight: 700; font-size: 16px; color: var(--text-primary); }
/* крипта — две строки (название+тикер / сеть), их проставляет js/has-exchange.js */
.has-xch .select_txt .has-coin-name { display: block; font-weight: 700; font-size: 16px; color: var(--text-primary); line-height: 1.2; }
.has-xch .select_txt .has-coin-net { display: block; font-weight: 500; font-size: 12px; color: var(--text-muted); line-height: 1.2; margin-top: 1px; }
.has-xch .select_js_ulli .select_txt .has-coin-name { font-size: 14px; }
/* штатную стрелку движка не дублируем — она уже есть справа (.select_js_abs),
   но перекрашиваем её из синей в золотую (как в макете). Движок поворачивает
   .select_js_abs на 180° при открытии — наш chevron перевернётся сам. */
.has-xch .select_js_abs {
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 24 24' fill='none' stroke='%23E0A714' stroke-width='2.6' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m6 9 6 6 6-6'/%3E%3C/svg%3E") !important;
  background-size: 15px 15px !important;
  background-position: center !important;
  background-repeat: no-repeat !important;
}
/* панель со списком */
/* фон панели — с !important: у выпадашки города движок красит её в бежевый
   (в списке валют этого не происходит), из-за чего списки выглядели по-разному */
.has-xch .select_js_ul, .has-xch .select_js_ul_ins { background: var(--has-white) !important; background-image: none !important; }
.has-xch .select_js_ul {
  border: 1px solid var(--border-light); border-radius: 14px;
  box-shadow: 0 16px 48px rgba(18, 16, 10, 0.12); padding: 6px !important; margin-top: 6px; max-height: 300px; overflow-y: auto;
  /* качественная прокрутка на мобильном: не «перетекает» на страницу у краёв,
     плавная тач-инерция, пункты выравниваются по верху (без обрезков) */
  overscroll-behavior: contain; -webkit-overflow-scrolling: touch;
  scroll-snap-type: y proximity; scroll-padding: 6px 0;
}
/* border-radius с !important: у выпадашки города движок обнуляет скругление,
   и подсветка выбранного шла сплошной полосой во всю ширину вместо «таблетки» */
.has-xch .select_js_ulli { border-radius: 10px !important; cursor: pointer; margin: 0 !important; padding: 0 !important; scroll-snap-align: start; }
.has-xch .select_js_ulli_ins { display: flex; align-items: center; gap: 11px; padding: 6px 10px !important; min-height: 0 !important; }
/* иконка валюты в списке — компактнее (движок ставит её крупной, 40px) */
.has-xch .select_js_ulli .select_ico.currency_logo { width: 32px !important; height: 32px !important; }
/* размер текста пункта — одинаковый для валют и городов (у городов нет
   вложенного .has-coin-name, поэтому задаём и на сам .select_txt) */
.has-xch .select_js_ulli .select_txt { font-size: 14.5px; font-weight: 600; }
.has-xch .select_js_ulli .select_txt .has-coin-name { font-size: 14px; }
.has-xch .select_js_ulli .select_txt .has-coin-net { font-size: 11.5px; }
.has-xch .select_js_ulli:hover { background: var(--surface-sunken); }
/* выбранный пункт — жёлтая подсветка */
.has-xch .select_js_ulli.sel,
.has-xch .select_js_ulli.active,
.has-xch .select_js_ulli.js_active,
.has-xch .select_js_ulli[selected] { background: var(--yellow-wash); }
/* строка поиска движку не нужна — список короткий, в макете её нет.
   display:block движок вешает инлайном, поэтому !important. */
.has-xch .select_js_search { display: none !important; }
/* поля суммы и реквизитов */
.has-xch .xchange_sum_label,
.has-xch .xchange_curs_label_ins,
.has-xch .xchange_pers_label_ins { display: block; font-family: var(--font-sans); font-size: 13px; font-weight: 600; color: var(--text-secondary); margin-bottom: 6px; }
.has-xch .req { color: var(--error); }
.has-xch .xchange_sum_input input,
.has-xch .xchange_curs_input input,
.has-xch .xchange_pers_input input,
.has-xch .xchange_pers_input textarea {
  width: 100%; min-height: 48px; height: auto !important; padding: 10px 14px; border: 1px solid var(--border-light); border-radius: 12px;
  background: var(--surface-sunken); font-family: var(--font-sans); font-size: 15px; color: var(--text-primary); outline: none; box-shadow: none; box-sizing: border-box;
}
/* поле суммы: движок раздувает шрифт на мобильном (класс .js_sum1/.js_sum2 →
   font-size ~33px в его медиазапросе) — держим 18px, чтобы высота была ровной */
.has-xch .xchange_sum_input input,
.has-xch .xchange_sum_input input.js_sum1,
.has-xch .xchange_sum_input input.js_sum2 { font-weight: 700; font-size: 18px !important; }
/* убрать «воздух» движка: у .xchange_data_div большой нижний padding+margin (~84px) */
.has-xch .xchange_data_div { padding-bottom: 0 !important; margin-bottom: 0 !important; }
.has-xch .xchange_sum_input input:focus,
.has-xch .xchange_curs_input input:focus,
.has-xch .xchange_pers_input input:focus,
.has-xch .xchange_pers_input textarea:focus { border-color: var(--has-gold) !important; box-shadow: none !important; }
.has-xch .xchange_sum_line, .has-xch .xchange_curs_line, .has-xch .xchange_pers_line { margin-bottom: 10px; }
.has-xch .xchange_sumandcom { font-family: var(--font-sans); font-size: 12.5px; color: var(--text-muted); margin-bottom: 8px; }
.has-xch .js_error, .has-xch .form_field_errors_ins { font-family: var(--font-sans); font-size: 12.5px; color: var(--error); margin-top: 5px; }

/* блок «Получаете»: сумма к получению — жёлтая подложка + пунктир (как в макете:
   поле рассчитывается движком, поэтому визуально «не редактируемое») */
.has-xch .xchange_div_col_get .xchange_sum_input input { background: var(--yellow-wash); border: 1px dashed rgba(224, 167, 20, 0.55); }

/* ── тёмная тема: движок красит форму обмена в сине-серый (#3b4359 и градиент
   на полях) поверх наших токенов — возвращаем тёплый графит. Специфичность+
   !important, потому что источник — правило движка, а не наши переменные. */
.dark .has-xch .xchange_div,
[data-theme="dark"] .has-xch .xchange_div { background: var(--has-white) !important; }
.dark .has-xch .xchange_sum_input input,
.dark .has-xch .xchange_curs_input input,
.dark .has-xch .xchange_pers_input input,
.dark .has-xch .xchange_pers_input textarea,
.dark .has-xch .select_js_title,
.dark .has-xch input.captcha_divpole,
[data-theme="dark"] .has-xch .xchange_sum_input input,
[data-theme="dark"] .has-xch .xchange_curs_input input,
[data-theme="dark"] .has-xch .xchange_pers_input input,
[data-theme="dark"] .has-xch .xchange_pers_input textarea,
[data-theme="dark"] .has-xch .select_js_title,
[data-theme="dark"] .has-xch input.captcha_divpole { background: var(--surface-sunken) !important; background-image: none !important; }
.dark .has-xch .select_js_ul,
[data-theme="dark"] .has-xch .select_js_ul { background: var(--has-white) !important; background-image: none !important; }
/* поле «Получаете» остаётся жёлтым и в тёмной теме (перебивает правило выше) */
.dark .has-xch .xchange_div_col_get .xchange_sum_input input,
[data-theme="dark"] .has-xch .xchange_div_col_get .xchange_sum_input input { background: var(--yellow-wash) !important; background-image: none !important; }

/* персональные данные — отдельная карточка-секция */
.has-xch .xchange_pers { margin-top: 16px; padding-top: 16px; border-top: 1px solid var(--border-light); }

/* капча */
.has-xch .captcha_div { margin: 12px 0 2px; }
/* чекбоксы согласия: движок ставит margin-bottom ~29px + padding ~11px —
   огромные разрывы. Сжимаем. */
.has-xch .xchange_checkdata_div { margin-bottom: 8px !important; padding-bottom: 0 !important; }
.has-xch .xchange_checkdata_div:first-of-type { margin-top: 6px; }
/* чекбоксы согласия — как в макете: квадрат 22px (::before), галочку при .checked
   рисует движок (::after). Тот же паттерн, что на входе. Движок гасит текст
   (font-size:0) и рисует крошечный ::before — перебиваем !important. */
/* ВАЖНО: label здесь НЕ flex. Внутри него текст разбит на несколько текстовых
   узлов и ссылки («условиями обмена», «AML проверки») — при display:flex каждый
   узел становится отдельной колонкой и текст рассыпается лесенкой. Поэтому
   обычный блок с отступом слева, а коробка — абсолютом. */
.has-xch .xchange_checkdata_div .checkbox > label {
  position: relative; display: block; margin: 0; padding-left: 33px;
  font-family: var(--font-sans) !important; font-size: 14px !important; line-height: 1.5 !important;
  color: var(--text-secondary); cursor: pointer;
}
.has-xch .xchange_checkdata_div .checkbox > label a { color: var(--has-gold-deep); text-decoration: underline; }
.has-xch .xchange_checkdata_div .checkbox > label::before {
  content: '' !important; position: absolute !important; left: 0 !important; top: 1px !important;
  box-sizing: border-box; width: 22px !important; height: 22px !important; min-width: 22px;
  border: 2px solid #D8D2C2 !important; border-radius: 6px !important; background: transparent !important;
}
.has-xch .xchange_checkdata_div .checkbox.checked > label::before {
  background: var(--has-yellow) !important; border-color: var(--has-yellow) !important;
}
/* выбранное состояние: движок рисует галочку в ::after — делаем его жёлтой
   коробкой 22px (перекрывает прозрачный ::before), тёмная галочка сверху. */
.has-xch .xchange_checkdata_div .checkbox.checked > label::after {
  top: 1px !important; left: 0 !important; min-width: 22px !important; width: 22px !important; height: 22px !important;
  background-color: var(--has-yellow) !important; border-radius: 6px !important;
  background-size: 14px !important; background-position: center !important;
}
.has-xch .captcha_title { display: none; }
.has-xch .captcha_body { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; margin-bottom: 6px; }
.has-xch .captcha_divimg { width: 46px; height: 46px; border-radius: 10px; overflow: hidden; flex: none; background: repeating-linear-gradient(45deg, #EFEAD9, #EFEAD9 6px, #E4DDC7 6px, #E4DDC7 12px); }
.has-xch .captcha_divimg img { display: block; width: 100%; height: 100%; object-fit: cover; }
.has-xch .captcha_divznak { font-weight: 700; font-size: 18px; color: var(--text-muted); }
.has-xch input.captcha_divpole { width: 64px; padding: 11px; border-radius: 12px; text-align: center; font-weight: 700; font-size: 19px; border: 1px solid var(--border-light); background: var(--has-white); }

/* согласие */
.has-xch .xchange_submit_div label { display: flex; align-items: flex-start; gap: 10px; margin: 14px 0; font-family: var(--font-sans); font-size: 13.5px; line-height: 1.5; color: var(--text-secondary); }
.has-xch .xchange_submit_div a { color: var(--has-gold-deep); text-decoration: none; }

/* кнопка отправки */
.has-xch .xchange_submit_div input[type="submit"],
.has-xch .exch_submit,
.has-xch .xchange_submit {
  width: 100%; margin-top: 6px; padding: 16px; border: none; border-radius: 14px; background: var(--has-yellow);
  font-family: var(--font-sans); font-weight: 700; font-size: 16px; color: var(--has-black); cursor: pointer;
  box-shadow: 0 6px 18px rgba(249, 205, 46, 0.28); transition: opacity var(--dur-fast) var(--ease-out);
}
.has-xch .xchange_submit_div input[type="submit"]:hover { opacity: 0.9; }

/* сайдбар: отзывы + помощь */
.xch-side { display: flex; flex-direction: column; gap: 16px; position: sticky; top: 88px; }
.xch-reviews { background: var(--has-white); border: 1px solid var(--border-light); border-radius: 20px; box-shadow: 0 2px 8px rgba(18, 16, 10, 0.04); padding: 22px 24px; }
.xch-reviews__title { font-family: var(--font-sans); font-weight: 800; font-size: 18px; color: var(--text-primary); margin-bottom: 14px; }
.xch-review { padding-bottom: 14px; margin-bottom: 14px; border-bottom: 1px solid var(--border-light); }
.xch-review__head { display: flex; justify-content: space-between; align-items: center; margin-bottom: 6px; }
.xch-review__name { font-family: var(--font-sans); font-weight: 700; font-size: 14px; color: var(--text-primary); }
.xch-review__date { font-family: var(--font-sans); font-size: 12px; color: var(--text-muted); }
.xch-review__text { font-family: var(--font-sans); font-size: 13.5px; line-height: 1.5; color: var(--text-secondary); }
.xch-reviews__all { display: block; text-align: center; padding: 11px; border: 1px solid var(--border-light); border-radius: 12px; text-decoration: none; font-family: var(--font-sans); font-weight: 700; font-size: 14px; color: var(--text-primary); }
.xch-help { background: var(--has-black); border-radius: 20px; padding: 22px 24px; }
.xch-help__title { font-family: var(--font-sans); font-weight: 800; font-size: 17px; color: #fff; margin-bottom: 6px; }
.xch-help__text { font-family: var(--font-sans); font-size: 13.5px; line-height: 1.5; color: rgba(255, 255, 255, 0.65); margin: 0 0 14px; }
.xch-help__btn { display: flex; align-items: center; justify-content: center; gap: 8px; background: var(--has-yellow); color: var(--has-black); text-decoration: none; font-family: var(--font-sans); font-weight: 700; font-size: 14px; padding: 12px; border-radius: 12px; }

/* ── карточки «Правила обмена» (сверху) и SEO-описание (снизу) ────────────
   Движок печатает их как .notice_message и .warning_message: фон уже белый,
   но рамка почти прозрачная и нет тени — визуально «без карточки». Приводим
   к тому же виду, что карточка формы (.xchange_div). Геометрию (радиус,
   паддинг) движок задаёт единообразно для всех трёх — добавляем рамку/тень. */
.has-xch .notice_message,
.has-xch .warning_message {
  background: var(--has-white);
  border: 1px solid var(--border-light) !important;
  box-shadow: 0 2px 8px rgba(18, 16, 10, 0.04);
  border-radius: 20px;
}
.has-xch .notice_message { margin-bottom: 20px; }
.has-xch .warning_message { margin-top: 20px; }
.has-xch .notice_message_ins,
.has-xch .warning_message_ins { position: relative; }
/* служебные элементы движка (крестик закрытия, абсолютная подложка) не нужны */
.has-xch .notice_message_abs,
.has-xch .notice_message_close,
.has-xch .warning_message_abs,
.has-xch .warning_message_close { display: none !important; }

/* Правила обмена: умбрелла-заголовок (строка из PHP), подзаголовки-strong, абзацы */
.has-xch .notice_message_text_ins .text::before {
  content: var(--has-rules-title, none);
  display: block; font-family: var(--font-sans); font-weight: 800; font-size: 20px;
  letter-spacing: -0.01em; color: var(--text-primary); margin-bottom: 14px;
}
.has-xch .notice_message_text_ins .text { font-family: var(--font-sans); font-size: 14.5px; line-height: 1.6; color: var(--text-secondary); }
.has-xch .notice_message_text_ins .text p { margin: 0 0 10px; }
.has-xch .notice_message_text_ins .text strong { display: inline-block; font-weight: 700; font-size: 15.5px; color: var(--text-primary); margin: 8px 0 2px; }

/* SEO-описание: заголовок статьи + секции h2/списки/акценты */
.has-xch .warning_message_title { margin-bottom: 14px; }
.has-xch .warning_message_title_ins span { font-family: var(--font-sans); font-weight: 800; font-size: 22px; letter-spacing: -0.01em; color: var(--text-primary); }
.has-xch .warning_message_text_ins .text { font-family: var(--font-sans); font-size: 14.5px; line-height: 1.65; color: var(--text-secondary); }
.has-xch .warning_message_text_ins .text h2 { font-family: var(--font-sans); font-weight: 800; font-size: 18px; letter-spacing: -0.01em; color: var(--text-primary); }
.has-xch .warning_message_text_ins .text h3 { font-family: var(--font-sans); font-weight: 700; font-size: 15.5px; color: var(--text-primary); }
.has-xch .warning_message_text_ins .text strong { color: var(--text-primary); }
.has-xch .warning_message_text_ins .text a { color: var(--has-gold-deep); }
.has-xch .warning_message_text_ins .text ul,
.has-xch .warning_message_text_ins .text ol { margin: 0 0 12px; padding-left: 20px; }
.has-xch .warning_message_text_ins .text li { margin-bottom: 6px; }

/* кнопка «Читать полностью / Свернуть» для правил — только на мобильном
   (её добавляет js/has-exchange.js; на десктопе скрыта) */
.has-xch .has-rules-toggle { display: none; }

@media (max-width: 900px) {
  .xch-grid { grid-template-columns: 1fr; padding: 16px 16px 44px; }
  .xch-side { position: static; }
  .has-xch .xchange_div { padding: 22px 20px; }
  .has-xch .notice_message_text_ins .text::before { font-size: 18px; }
  .has-xch .warning_message_title_ins span { font-size: 20px; }
  /* на мобильном выпадашки — в одну строку (подпись-сеть прячем), чтобы высота
     совпадала с полями ввода; тикер сети и так есть в названии */
  .has-xch .select_txt .has-coin-net { display: none; }
  .has-xch .select_txt .has-coin-name { font-size: 15px; }
  /* список валют на мобильном не выше половины экрана — чтобы помещался
     целиком и прокручивался только он сам, без «двойного» скролла страницы */
  .has-xch .select_js_ul { max-height: 48vh; }

  /* «Правила обмена» (сверху) и SEO-описание (под формой) свёрнуты по умолчанию:
     клэмп высоты + затухание снизу. Заголовок SEO-блока остаётся видимым. */
  .has-xch .notice_message.has-collapsed .notice_message_text_ins,
  .has-xch .warning_message.has-collapsed .warning_message_text_ins { max-height: 118px; overflow: hidden; position: relative; }
  .has-xch .notice_message.has-collapsed .notice_message_text_ins::after,
  .has-xch .warning_message.has-collapsed .warning_message_text_ins::after {
    content: ""; position: absolute; left: 0; right: 0; bottom: 0; height: 56px;
    background: linear-gradient(to bottom, rgba(255, 255, 255, 0), var(--has-white)); pointer-events: none;
  }
  .has-xch .has-rules-toggle {
    display: inline-flex; align-items: center; gap: 8px; margin-top: 14px;
    padding: 9px 15px; border: 1px solid var(--border-light); border-radius: 10px;
    background: var(--surface-sunken); font-family: var(--font-sans); font-weight: 600;
    font-size: 14px; color: var(--text-primary); cursor: pointer;
  }
  .has-xch .has-rules-toggle::after {
    content: ""; width: 8px; height: 8px; flex: none; border-right: 2px solid var(--has-gold-deep);
    border-bottom: 2px solid var(--has-gold-deep); transform: rotate(45deg); margin-top: -3px;
  }
  .has-xch .has-rules-toggle.is-open::after { transform: rotate(-135deg); margin-top: 2px; }
}

/* ═══════════════════ ЛИЧНЫЙ КАБИНЕТ (/account/ и разделы) ═══════════════════
   Разметку отдаёт плагин; переодеваем её в дизайн. Всё под body.has-lk. */

/* заголовок страницы кабинета */
.has-lk .main-title { font-family: var(--font-sans); font-weight: 800; font-size: 32px; letter-spacing: -0.02em; color: var(--text-primary); }
.has-lk .breadcrumb { list-style: none; display: flex; gap: 8px; padding: 0; margin: 0 0 8px; font-size: 13px; color: var(--text-muted); }
.has-lk .breadcrumb a { color: var(--text-muted); text-decoration: none; }

/* двухколоночная сетка: контент + правый сайдбар-меню 300px */
.has-lk .inner.grid { display: grid; grid-template-columns: minmax(0, 1fr) 300px; gap: 24px; align-items: start; }
/* Движок вешает на контент класс span--lg-3 («занять все колонки»), из-за чего
   меню кабинета выдавливалось ПОД контент во всю ширину. Ставим явные колонки. */
.has-lk .inner-content { min-width: 0; grid-column: 1 !important; }
.has-lk .aside { min-width: 0; grid-column: 2 !important; }

/* Подвал прижат к низу экрана: body уже flex-column, но main не растягивался,
   и при коротком контенте подвал висел посередине страницы. */
body { min-height: 100vh; }
main.main { flex: 1 0 auto; }
footer { flex: none; }

/* Крошки: убираем маркер списка (движок рисует ◦) и ставим «/» между пунктами. */
.breadcrumb, .breadcrumb ul, .breadcrumb li { list-style: none; }
.breadcrumb ul { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; margin: 0; padding: 0; }
.breadcrumb li { display: flex; align-items: center; gap: 8px; }
/* Разделитель «/». Разметка кривая: первый пункт лежит во вложенном <ul>,
   а текущая страница — прямым <li> самого <ol class="breadcrumb">. Поэтому
   целимся в прямых потомков. Движок рисует тут блок 20px с иконкой — гасим. */
.breadcrumb > li::before,
.breadcrumb ul li + li::before {
  content: "/" !important; display: inline !important; width: auto !important; height: auto !important;
  background: none !important; background-image: none !important;
  color: var(--text-muted) !important; font-size: 13px; margin: 0 2px 0 0;
}

/* Шапка кабинета: аватар + имя + «e-mail · с нами с …» (макет «Личный кабинет»).
   Крошки и шапка лежат на белой полосе во всю ширину экрана. Полосу тянем
   тенями (отдельной обёртки движок не даёт), .lk-id перед сеткой поднимает
   js/has-account.js — иначе он оказывается внутри колонки контента. */
/* Выравнивание по шапке: у .hc-head-inner боковой отступ 40px (логотип
   начинается с 81px), а у движкового .page-block.container он нулевой —
   карточки кабинета торчали шире шапки. Даём тот же отступ.
   И убираем верхний отступ main: из-за него между шапкой и белой полосой
   оставалась лишняя кремовая полоска. */
.has-lk main.main { padding-top: 0; }
.has-lk .page-block.container { padding-left: 40px; padding-right: 40px; }

/* Белая полоса во всю ширину: обёртку .lk-band создаёт js/has-account.js,
   подложку тянем абсолютным ::before (у body overflow-x: clip, поэтому
   «растяжка» box-shadow до краёв экрана не доходит). */
.has-lk .lk-band { position: relative; padding: 20px 0; margin-bottom: 24px; }
.has-lk .lk-band::before {
  content: ""; position: absolute; top: 0; bottom: 0; left: -100vw; right: -100vw;
  background: var(--has-white); border-bottom: 1px solid var(--border-light); z-index: 0;
}
.has-lk .lk-band > * { position: relative; z-index: 1; }
.has-lk .lk-band .breadcrumb { margin-bottom: 0 !important; }
.has-lk .lk-id { display: flex; align-items: center; gap: 16px; margin: 10px 0 0; }
/* Заголовок внутренней страницы кабинета живёт в той же полосе (макет: 28/800) */
.has-lk .lk-band .main-title { margin: 10px 0 0 !important; font-size: 28px; line-height: 1.14; }
.has-lk .lk-id__avatar {
  flex: none; width: 52px; height: 52px; border-radius: 50%; background: var(--has-yellow);
  display: inline-flex; align-items: center; justify-content: center;
  font-family: var(--font-sans); font-weight: 800; font-size: 22px; color: var(--has-black);
}
.has-lk .lk-id__text { display: flex; flex-direction: column; min-width: 0; }
.has-lk .lk-id__name { font-family: var(--font-sans); font-weight: 800; font-size: 22px; letter-spacing: -0.01em; color: var(--text-primary); line-height: 1.2; }
.has-lk .lk-id__meta { font-family: var(--font-sans); font-size: 13.5px; color: var(--text-muted); margin-top: 3px; overflow: hidden; text-overflow: ellipsis; }

/* сайдбар-меню (виджет pn_lk_Widget) → карточка .lk-side
   ВАЖНО: без overflow:hidden. Связка sticky + overflow:hidden + radius + тень
   даёт артефакт композитинга — сквозь меню просвечивал блок отзывов под ним
   (ровно та же беда была на мобилке). Скругление держим на самих краях. */
/* Значения выверены по макету (замер .lk-side): карточка без собственных
   паддингов, заголовок 18/20/14 с одной линией снизу, пункты 12px 18px. */
.has-lk .user_widget {
  position: sticky; top: 88px; background: var(--has-white); border: 1px solid var(--border-light);
  border-radius: 20px; box-shadow: 0 2px 8px rgba(18, 16, 10, 0.04); padding: 0 !important;
}
.has-lk .user_widget_ins { border-radius: 20px; overflow: clip; padding: 0 !important; }
.has-lk .user_widget_title { padding: 18px 20px 14px !important; border-bottom: 1px solid var(--border-light); }
/* по макету — 17px жирным, не мелкий серый «надзаголовок» */
.has-lk .user_widget_title_ins { font-family: var(--font-sans); font-weight: 800; font-size: 17px; color: var(--text-primary); }
/* без border-top: он давал ВТОРУЮ линию под заголовком (в макете одна) */
.has-lk .user_widget_body,
.has-lk .user_widget_body_ins { display: flex; flex-direction: column; padding: 0 !important; border-top: none !important; margin: 0; }
.has-lk .user_widget_body_ins ul { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; }
.has-lk .user_widget_body_ins li { margin: 0; }
/* паддинг и кегль с !important: движок ставит свои (10px 0 и 16px) */
.has-lk .user_widget_body_ins a {
  display: block; width: 100%; padding: 12px 18px !important; margin: 0 !important;
  font-family: var(--font-sans); font-weight: 600; font-size: 14.5px !important; line-height: 1.3;
  color: var(--text-secondary); text-decoration: none; border-left: 3px solid transparent;
  transition: background 0.14s ease, color 0.14s ease;
}
.has-lk .user_widget_body_ins a:hover { background: var(--surface-sunken); color: var(--text-primary); }
/* активный пункт: жёлтая подложка + ЗОЛОТОЙ текст + жёлтая полоса слева.
   !important — движок красит текст активного пункта своим правилом. */
.has-lk .user_widget_body_ins li.current > a,
.has-lk .user_widget_body_ins a.current,
.has-lk .user_widget_body_ins li.current > a:hover {
  background: var(--yellow-wash); color: var(--has-gold-deep) !important;
  border-left-color: var(--has-yellow); font-weight: 700;
}
/* «Выйти» — отбивка сверху и приглушённый цвет (как в макете) */
.has-lk .user_widget_exit,
.has-lk .user_widget_body_ins li:last-child > a { border-top: 1px solid var(--border-light); }
.has-lk .user_widget_body_ins li:last-child > a { color: var(--text-muted); }

.has-lk .exit_link { display: block; padding: 13px 18px !important; font-family: var(--font-sans); font-weight: 600; font-size: 14.5px !important; color: var(--text-muted); text-decoration: none; }
.has-lk .exit_link:hover { color: var(--error); }

/* карточки контента: формы, таблицы, дашборд.
   .statstablediv — сводка на /userxch/ и профиль на /paccount/; без него
   карточка на /userxch/ оставалась в движковом виде. */
.has-lk .acf_div_wrap,
.has-lk .stattablediv,
.has-lk .statstablediv,
.has-lk .statuserdiv,
.has-lk .promouserdiv,
.has-lk .pntable_wrap,
.has-lk .promopage,
.has-lk .userwallets_form,
.has-lk .paytext,
.has-lk .paydiv {
  background: var(--has-white); border: 1px solid var(--border-light); border-radius: 20px;
  box-shadow: 0 2px 8px rgba(18, 16, 10, 0.04); padding: 26px 30px; margin-bottom: 20px;
}
/* Карточки, у которых содержимое — таблица «ключ-значение»: строки в макете
   идут от края до края, поэтому паддинг снимаем (его даёт сама таблица). */
.has-lk .stattablediv,
.has-lk .statstablediv,
.has-lk .statuserdiv { padding: 0; overflow: hidden; }

.has-lk .acf_div_title_ins,
.has-lk .pntable_wrap_title_ins { font-family: var(--font-sans); font-weight: 800; font-size: 22px; letter-spacing: -0.01em; color: var(--text-primary); margin-bottom: 4px; }
/* Заголовок карточки «Личные данные» движок печатает, но САМ ЖЕ прячет
   (.acf_div_title { display:none }) — возвращаем его, как в макете.
   Только на главной кабинета: на /security/ он дублировал бы H1 в полосе. */
.has-lk-account .acf_div_title { display: block; margin-bottom: 18px; }
/* Заголовок карточки-таблицы движок прячет так же. На «Ваших счетах» и
   «Ваших операциях» он и не нужен (повторял бы H1 страницы), а вот на выводе
   средств по макету стоит «Заявки» — там возвращаем. */
.has-lk-payouts .pntable_wrap_title { display: block; margin-bottom: 16px; }
.has-lk-payouts .pntable_wrap_title_ins { font-size: 18px; }
/* Подпись под заголовком: своей разметки для неё нет, строка приходит
   локализованной из has_account.php и только на главной странице кабинета. */
.has-lk .acf_div_title_ins::after {
  content: var(--lk-personal-sub, none); display: block; margin-top: 6px;
  font-family: var(--font-sans); font-weight: 400; font-size: 14px; line-height: 1.5; color: var(--text-muted);
}

/* форма-грид 2 колонки (личные данные, безопасность).
   Движок зажимает форму в узкую фиксированную ширину (~400px) — растягиваем
   на всю карточку, иначе поля выглядят «сжатыми» в левой части. */
.has-lk .acf_div,
.has-lk .acf_div_ins,
.has-lk .acf_div_wrap .ajax_post_form { width: 100%; max-width: none; box-sizing: border-box; }
.has-lk .acf_div_ins { display: grid; grid-template-columns: 1fr 1fr; gap: 14px 18px; }
/* Две колонки — только у профиля. На «Настройках безопасности» поля разного
   смысла (пароли, тумблеры, список IP) вставали бы попарно вперемешку. */
.has-lk-security .acf_div_ins { grid-template-columns: 1fr; gap: 0; }
.has-lk .acf_div_ins > .acf_line.has_submit,
.has-lk .acf_div_ins > .type_text,
.has-lk .acf_div_ins > .resultgo { grid-column: 1 / -1; }
/* В гриде элемент без order получает 0 и уезжает ВЫШЕ первого поля, хотя в
   DOM идёт последним. Ставим их после кнопки — как в макете. */
.has-lk .acf_div_ins > .type_text { order: 19; }
.has-lk .acf_div_ins > .resultgo { order: 21; }
/* Логин — во всю ширину и с подсказкой, как в макете (менять его нельзя) */
.has-lk .acf_div_ins > .field_name_login { grid-column: 1 / -1; }
.has-lk .acf_div_ins > .field_name_login .acf_line_ins::after {
  content: var(--lk-login-hint, none); display: block; margin-top: 6px;
  font-family: var(--font-sans); font-size: 12.5px; color: var(--text-muted);
}
/* Порядок полей строго по макету: Логин, Фамилия, Имя, Отчество, E-mail,
   Телефон, Telegram. Skype и «Номер паспорта» в макете отсутствуют — прячем
   (именно скрываем, а не удаляем из формы: значения и логика движка целы). */
.has-lk .acf_div_ins > .field_name_login { order: 1; }
.has-lk .acf_div_ins > .field_name_last_name { order: 2; }
.has-lk .acf_div_ins > .field_name_first_name { order: 3; }
.has-lk .acf_div_ins > .field_name_second_name { order: 4; }
.has-lk .acf_div_ins > .field_name_user_email { order: 5; }
.has-lk .acf_div_ins > .field_name_user_phone { order: 6; }
.has-lk .acf_div_ins > .field_name_user_telegram { order: 7; }
.has-lk .acf_div_ins > .field_name_user_skype,
.has-lk .acf_div_ins > .field_name_user_passport { display: none; }
.has-lk .acf_div_ins > .acf_line.has_submit { order: 20; }
/* readonly-поля (Логин, E-mail) — приглушены, как в макете */
.has-lk .acf_line input:disabled { opacity: 0.7; }
/* подсказка под E-mail — как под логином */
.has-lk .acf_div_ins > .field_name_user_email .acf_line_ins::after {
  content: var(--lk-email-hint, none); display: block; margin-top: 6px;
  font-family: var(--font-sans); font-size: 12.5px; color: var(--text-muted);
}
.has-lk .acf_line { margin: 0; }
/* подписи полей — тёмные и жирнее, как в макете */
.has-lk .acf_label .form_field_label_ins { display: block; font-family: var(--font-sans); font-size: 13.5px; font-weight: 700; color: var(--text-primary); margin-bottom: 6px; }
.has-lk .acf_label label { display: block; font-family: var(--font-sans); font-size: 13px; font-weight: 600; color: var(--text-secondary); margin-bottom: 6px; }
.has-lk .acf_label .req { color: var(--error); }
.has-lk .acf_line input[type="text"],
.has-lk .acf_line input[type="password"],
.has-lk .acf_line input[type="email"],
.has-lk .acf_line select,
.has-lk .acf_line textarea {
  width: 100%; padding: 14px 16px; border: 1px solid var(--border-light); border-radius: 14px;
  background: var(--surface-sunken); font-family: var(--font-sans); font-size: 15px; color: var(--text-primary); outline: none;
  /* движок задаёт полям фиксированную высоту (60px) — тот же приём, что и на
     форме обмена: паддингов мало, нужен именно height */
  box-sizing: border-box; height: auto !important;
}
.has-lk .acf_line input:focus, .has-lk .acf_line select:focus, .has-lk .acf_line textarea:focus { border-color: var(--has-gold) !important; }
.has-lk .acf_line input:disabled { color: var(--text-muted); cursor: not-allowed; }
.has-lk .acf_line textarea { min-height: 90px; resize: vertical; }
.has-lk .form_field_errors_ins { margin-top: 5px; font-size: 12.5px; color: var(--error); }
.has-lk .acf_submit,
.has-lk .paydiv input[type="submit"] {
  width: auto; margin-top: 6px; padding: 15px 30px; border: none; border-radius: 14px; background: var(--has-black);
  font-family: var(--font-sans); font-weight: 700; font-size: 15px; color: #fff; cursor: pointer;
}
/* кнопка «Сохранить» — компактная и слева, как в макете (а не во всю ширину) */
.has-lk .acf_div_ins > .acf_line.has_submit { justify-self: start; }
.has-lk .acf_submit:hover { opacity: 0.88; }

/* таблицы (операции, рефералы, переходы, обмены, выводы) */
.has-lk .pntable { width: 100%; display: block; overflow-x: auto; }
.has-lk .pntable_ins { display: table; width: 100%; border-collapse: collapse; }
.has-lk .pntable .pntable_row,
.has-lk .pntable tr { display: table-row; }
.has-lk .pntable th { text-align: left; font-family: var(--font-sans); font-size: 12px; font-weight: 700; text-transform: uppercase; letter-spacing: 0.04em; color: var(--text-muted); padding: 0 14px 12px; border-bottom: 1px solid var(--border-light); }
.has-lk .pntable td { font-family: var(--font-sans); font-size: 14px; color: var(--text-secondary); padding: 14px; border-bottom: 1px solid var(--border-light); vertical-align: middle; }
.has-lk .no_items_ins { padding: 32px 8px; text-align: center; font-family: var(--font-sans); font-size: 15px; color: var(--text-muted); }

/* партнёрский дашборд: реф-ссылка + промо */
.has-lk .ppapitext,
.has-lk .ptextareaus { width: 100%; box-sizing: border-box; border: 1px solid var(--border-light); border-radius: 14px; background: var(--surface-sunken); padding: 12px 14px; font-family: var(--font-sans); font-size: 14px; color: var(--text-primary); }
.has-lk .js_copy { cursor: pointer; }

/* ── экран «нужно авторизоваться» (гость на /account/ и разделах) ──────────
   Движок печатает .resultfalse в контенте и виджет входа .login_widget в
   сайдбаре — это было единственное место на сайте в дефолтном виде плагина.
   Приводим к языку дизайна: карточка + поля + чёрная кнопка (как в модалке). */
/* Движок кладёт содержимое кабинета на свою бежевую панель (.main-wrapper,
   #f5f1df + радиус + паддинг). По макету карточки лежат прямо на кремовом фоне
   страницы — панель убираем, горизонтальные отступы даёт .page-block. */
.has-lk .main-wrapper { background: transparent; border-radius: 0; padding: 0; }
.has-lk .resultfalse {
  background: var(--yellow-wash); border: 1px solid rgba(224, 167, 20, 0.35); border-radius: 16px;
  padding: 18px 20px; font-family: var(--font-sans); font-size: 15px; line-height: 1.5; color: var(--text-primary);
}
/* Гостевой экран: движок роняет форму входа в широкую колонку — собираем её
   в аккуратную карточку по центру (на странице кабинета сайдбара ещё нет). */
.has-lk .inner.grid:has(.login_widget) { display: block; }
.has-lk .aside:has(.login_widget) { max-width: 520px; margin: 0 auto; }
.has-lk .login_widget {
  background: var(--has-white); border: 1px solid var(--border-light); border-radius: 20px;
  box-shadow: 0 2px 8px rgba(18, 16, 10, 0.04); padding: 22px 24px;
}
.has-lk .login_widget_title_ins { font-family: var(--font-sans); font-weight: 800; font-size: 19px; color: var(--text-primary); margin-bottom: 14px; }
.has-lk .login_widget .form_field_line { margin-bottom: 12px; }
.has-lk .login_widget .form_field_label_ins { display: block; font-family: var(--font-sans); font-size: 12.5px; font-weight: 600; color: var(--text-secondary); margin-bottom: 6px; }
.has-lk .login_widget input[type="text"],
.has-lk .login_widget input[type="password"],
.has-lk .login_widget input.widget_log_input,
.has-lk .login_widget input.widget_log_password {
  width: 100%; box-sizing: border-box; border: 1px solid var(--border-light); border-radius: 12px;
  padding: 12px 14px; background: var(--surface-sunken); font-family: var(--font-sans); font-size: 14px;
  color: var(--text-primary); outline: none;
}
.has-lk .login_widget input:focus { border-color: var(--has-gold-deep); }
.has-lk .login_widget .form_field_errors_ins { font-family: var(--font-sans); font-size: 12.5px; color: var(--error); margin-top: 5px; }
/* капча — как на остальных формах сайта */
.has-lk .login_widget .captcha_div { margin: 12px 0 4px; }
.has-lk .login_widget .captcha_title { display: none; }
.has-lk .login_widget .captcha_body { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; }
.has-lk .login_widget .captcha_divimg { width: 46px; height: 46px; border-radius: 10px; overflow: hidden; flex: none; background: repeating-linear-gradient(45deg, #EFEAD9, #EFEAD9 6px, #E4DDC7 6px, #E4DDC7 12px); }
.has-lk .login_widget .captcha_divimg img { display: block; width: 100%; height: 100%; object-fit: cover; }
.has-lk .login_widget .captcha_divznak { font-weight: 700; font-size: 18px; color: var(--text-muted); }
.has-lk .login_widget input.captcha_divpole { width: 64px; padding: 11px; border-radius: 12px; text-align: center; font-weight: 700; font-size: 18px; }
/* ссылки «Регистрация» / «Забыли пароль?» */
.has-lk .login_widget .widget_log_line_text { display: flex; justify-content: space-between; gap: 12px; margin: 12px 0 4px; }
.has-lk .login_widget .widget_log_line_text a { font-family: var(--font-sans); font-size: 13.5px; font-weight: 600; color: var(--has-gold-deep); text-decoration: none; }
.has-lk .login_widget .widget_log_line_text a:hover { text-decoration: underline; }
.has-lk .login_widget .login_widget_subm_left,
.has-lk .login_widget .login_widget_subm_right { display: inline; }
/* кнопка входа */
.has-lk .login_widget input.widget_log_submit {
  width: 100%; margin-top: 10px; padding: 14px; border: none; border-radius: 12px; background: var(--has-black);
  color: #fff; font-family: var(--font-sans); font-weight: 700; font-size: 15px; cursor: pointer;
}
.has-lk .login_widget input.widget_log_submit:hover { opacity: .92; }
/* Блока отзывов в кабинете по макету НЕТ — в сайдбаре только меню.
   Движок подмешивает виджет отзывов в тот же .aside — убираем. */
.has-lk .widget_reviews_div { display: none; }
/* На ГЛАВНОЙ странице кабинета заголовок — это имя пользователя (.lk-id),
   поэтому общий H1 «Личный кабинет» не дублируем. На внутренних страницах H1
   остаётся и переезжает в ту же белую полосу (см. js/has-account.js). */
.has-lk .lk-band:has(.lk-id) ~ * .main-title,
.has-lk .page-block:has(.lk-id) .main-wrapper > .main-title { display: none; }
/* счётчики в пунктах меню кабинета — «пилюли» по макету */
.has-lk .user_widget_body_ins a span,
.has-lk .user_widget_body_ins .count,
.has-lk .user_widget_body_ins .num {
  display: inline-flex; align-items: center; justify-content: center; min-width: 22px; height: 22px;
  padding: 0 7px; margin-left: auto; border-radius: 999px; background: var(--yellow-wash);
  font-family: var(--font-sans); font-weight: 700; font-size: 12px; color: var(--has-gold-deep);
}

/* пагинация в кабинете */
.has-lk .pagenavi_ins { display: flex; align-items: center; justify-content: center; gap: 8px; margin-top: 24px; flex-wrap: wrap; }
.has-lk .pagenavi_ins a, .has-lk .pagenavi_ins span { display: inline-flex; align-items: center; justify-content: center; min-width: 42px; height: 42px; padding: 0 10px; border-radius: 12px; border: 1px solid var(--border-light); background: var(--has-white); font-family: var(--font-sans); font-weight: 700; font-size: 15px; color: var(--text-secondary); text-decoration: none; }
.has-lk .pagenavi_ins .current { background: var(--has-black); color: #fff; border-color: var(--has-black); }
/* Движок печатает контейнер пагинации всегда, даже когда страница одна:
   пустой блок давал 24px пустоты внизу каждой карточки с таблицей. */
.has-lk .pagenavi_ins:not(:has(a)) { display: none; }
/* «Страница 1 из 3» и многоточие — это не кнопки, пилюлей быть не должны */
.has-lk .pagenavi_ins .pages,
.has-lk .pagenavi_ins .extend { min-width: 0; height: auto; padding: 0 4px; border: none; background: none; font-weight: 600; color: var(--text-muted); }
.has-lk .pagenavi_ins .prev_navi,
.has-lk .pagenavi_ins .next_navi { color: var(--has-gold-deep); font-size: 17px; }

/* ─────────────────────────────────────────────────────────────────────────────
   Сквозные блоки кабинета. Одни и те же конструкции движка повторяются на
   6–8 страницах, поэтому оформляем их один раз, а не по странице.
   ──────────────────────────────────────────────────────────────────────────── */

/* ---- таблицы-списки: операции, счета, переходы, обмены, рефералы, выплаты ---- */
/* У .pntable_ins есть display:table, а у настоящего <table> внутри ширины нет —
   при width:auto таблица жалась по контенту и линии не доходили до края. */
.has-lk .pntable_ins > table { width: 100%; border-collapse: collapse; min-width: 520px; }
/* min-width нужен строкам с данными (иначе колонки сплющиваются вместо
   прокрутки), а пустому состоянию он только мешает — на телефоне текст
   уезжал за край и его приходилось листать вбок. */
.has-lk .pntable_ins > table:has(.no_items) { min-width: 0; }
.has-lk .pntable td { font-variant-numeric: tabular-nums; padding: 15px 16px; }
.has-lk .pntable th { padding: 0 16px 12px; }
/* Движок красит шапку и строки в жёлтую заливку (rgba(249,205,46,.14/.06)) —
   правило приходит из его собственной таблицы стилей и в макете его нет.
   Обычной специфичности не хватает (как на форме обмена), отсюда !important. */
.has-lk .pntable th,
.has-lk .pntable td { background: transparent !important; }
/* Разделители: движок вешал border-bottom и на th, и на td — под последней
   строкой оставалась висячая линия. Переносим их на верх строки. */
.has-lk .pntable td { border-bottom: none; border-top: 1px solid var(--border-light); }
.has-lk .pntable tbody tr:first-child td { border-top: none; }
/* Пустая таблица — это одна ячейка на всю ширину, рамка там ни к чему */
.has-lk .pntable tbody td:has(.no_items) { border-top: none; padding: 0; }
/* Колонки со значениями по макету прижаты вправо */
.has-lk-userxch .pntable th:nth-child(6), .has-lk-userxch .pntable td:nth-child(6),
.has-lk-pexch .pntable th:nth-child(4), .has-lk-pexch .pntable td:nth-child(4),
.has-lk-payouts .pntable th:nth-child(5), .has-lk-payouts .pntable td:nth-child(5) { text-align: right; }
/* ID — акцентная колонка */
.has-lk-userxch .pntable td:nth-child(1),
.has-lk-pexch .pntable td:nth-child(1) { font-weight: 700; color: var(--text-primary); white-space: nowrap; }
/* двухстрочная дата (собирает js/has-account.js) */
.has-lk .lk-date { display: block; font-weight: 600; color: var(--text-primary); }
.has-lk .lk-time { display: block; margin-top: 2px; font-size: 12.5px; color: var(--text-muted); }

/* ---- пустое состояние таблицы ---- */
/* Ячейкам таблицы движок ставит white-space:nowrap — пустое состояние
   наследовало его, и пояснение обрезалось по краю карточки. */
.has-lk .no_items,
.has-lk .no_items_ins { white-space: normal; }
.has-lk .no_items { padding: 44px 20px; text-align: center; }
.has-lk .no_items::before {
  content: ''; display: block; width: 56px; height: 56px; margin: 0 auto 14px; border-radius: 16px;
  background: var(--surface-sunken) url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23A8A296' stroke-width='1.8' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M22 12h-6l-2 3h-4l-2-3H2'/%3E%3Cpath d='M5.45 5.11 2 12v6a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-6l-3.45-6.89A2 2 0 0 0 16.76 4H7.24a2 2 0 0 0-1.79 1.11z'/%3E%3C/svg%3E") center / 24px no-repeat;
}
/* Движковое «Данных нет» заменяем парой «заголовок + пояснение» из макета.
   font-size:0 гасит текстовый узел, псевдоэлементы задают свой размер.
   Список страниц явный: строки приходят из has_account.php, и там, где их
   нет, движковый текст должен остаться видимым. */
.has-lk-userxch .no_items_ins,
.has-lk-userwallets .no_items_ins,
.has-lk-plinks .no_items_ins,
.has-lk-pexch .no_items_ins,
.has-lk-preferals .no_items_ins,
.has-lk-payouts .no_items_ins { font-size: 0; padding: 0; }
.has-lk .no_items_ins::before {
  content: var(--lk-empty-title, ''); display: block;
  font-family: var(--font-sans); font-weight: 700; font-size: 17px; color: var(--text-primary);
}
.has-lk .no_items_ins::after {
  content: var(--lk-empty-text, ''); display: block; max-width: 460px; margin: 6px auto 0;
  font-family: var(--font-sans); font-weight: 400; font-size: 14px; line-height: 1.6; color: var(--text-muted);
}

/* ---- таблицы «ключ-значение»: профиль и статистика партнёра, сводка операций ---- */
/* Движок ставит этим таблицам display:block — ячейки перестают быть колонками
   и строка «ключ → значение» сжимается по контенту. Возвращаем табличную
   раскладку; заливку ячеек гасим там же, где и в списках. */
.has-lk .stattablediv table,
.has-lk .statstablediv table,
.has-lk .statuserdiv table { display: table !important; width: 100%; border-collapse: collapse; }
.has-lk .stattablediv th, .has-lk .stattablediv td,
.has-lk .statstablediv th, .has-lk .statstablediv td,
.has-lk .statuserdiv th, .has-lk .statuserdiv td { background: transparent !important; }
.has-lk .stattablediv th,
.has-lk .statstablediv th,
.has-lk .statuserdiv th {
  width: 45%; padding: 14px 20px; text-align: left; vertical-align: middle;
  font-family: var(--font-sans); font-weight: 500; font-size: 14px; color: var(--text-secondary);
}
.has-lk .stattablediv td,
.has-lk .statstablediv td,
.has-lk .statuserdiv td {
  padding: 14px 20px; text-align: right; vertical-align: middle;
  font-family: var(--font-sans); font-weight: 600; font-size: 14.5px; color: var(--text-primary);
  font-variant-numeric: tabular-nums;
}
.has-lk .stattablediv tr + tr th, .has-lk .stattablediv tr + tr td,
.has-lk .statstablediv tr + tr th, .has-lk .statstablediv tr + tr td,
.has-lk .statuserdiv tr + tr th, .has-lk .statuserdiv tr + tr td { border-top: 1px solid var(--border-light); }
.has-lk .stattablediv td a,
.has-lk .statstablediv td a,
.has-lk .statuserdiv td a { color: var(--has-gold-deep); text-decoration: none; font-weight: 700; }
.has-lk .stattablediv td a:hover,
.has-lk .statstablediv td a:hover,
.has-lk .statuserdiv td a:hover { text-decoration: underline; }
/* шапка карточки «Статистика»: движок её печатает и сам же прячет —
   ровно та же история, что с заголовком формы «Личные данные» */
.has-lk .statuserdiv_title { display: block; padding: 18px 20px 14px; border-bottom: 1px solid var(--border-light); }
.has-lk .statuserdiv_title_ins { font-family: var(--font-sans); font-weight: 800; font-size: 17px; color: var(--text-primary); }
/* «Персональная скидка» в макете сводки операций нет */
.has-lk-userxch .statstablediv tr:first-child { display: none; }
.has-lk-userxch .statstablediv tr:nth-child(2) th,
.has-lk-userxch .statstablediv tr:nth-child(2) td { border-top: none; }

/* ---- кнопки ---- */
/* Общая кнопка кабинета. Раньше правила были только у .acf_submit, из-за чего
   «Добавить счёт» на /userwallets/ оставалась в дефолтном виде браузера. */
.has-lk input[type="submit"],
.has-lk .acf_submit {
  width: auto; padding: 14px 24px; border: none; border-radius: 14px; background: var(--has-black);
  font-family: var(--font-sans); font-weight: 700; font-size: 15px; color: #fff; cursor: pointer;
  transition: opacity var(--dur-base) var(--ease-out);
}
.has-lk input[type="submit"]:hover { opacity: 0.88; }
.has-lk input[type="submit"]:disabled { background: var(--surface-sunken); color: var(--text-muted); cursor: not-allowed; opacity: 1; }
.has-lk .acf_submit { margin-top: 6px; padding: 15px 30px; }

/* ---- поля ввода вне формы профиля (форма вывода средств) ---- */
.has-lk .pay_select select,
.has-lk .pay_input input[type="text"] {
  width: 100%; box-sizing: border-box; height: auto; padding: 14px 16px;
  border: 1px solid var(--border-light); border-radius: 14px; background: var(--surface-sunken);
  font-family: var(--font-sans); font-size: 15px; color: var(--text-primary); outline: none;
}
.has-lk .pay_select select:focus,
.has-lk .pay_input input[type="text"]:focus { border-color: var(--has-gold) !important; box-shadow: none !important; }

/* ---- инфо-плашка внизу раздела ---- */
.has-lk .lk-note {
  background: var(--has-white); border: 1px solid var(--border-light); border-radius: 16px;
  padding: 16px 20px; margin-bottom: 20px;
}
.has-lk .lk-note__ins {
  position: relative; padding-left: 34px;
  font-family: var(--font-sans); font-size: 14px; line-height: 1.6; color: var(--text-secondary);
}
.has-lk .lk-note__ins::before {
  content: 'i'; position: absolute; left: 0; top: 0;
  display: inline-flex; align-items: center; justify-content: center; width: 22px; height: 22px;
  border-radius: 50%; background: var(--yellow-wash);
  font-family: var(--font-sans); font-weight: 800; font-size: 13px; font-style: italic; color: var(--has-gold-deep);
}
.has-lk .lk-note__ins a { color: var(--has-gold-deep); font-weight: 600; text-decoration: none; }
.has-lk .lk-note__ins a:hover { text-decoration: underline; }
.has-lk .lk-note__code { font-weight: 700; color: var(--text-primary); word-break: break-all; }

/* ---- кнопка «Копировать» и блоки с кодом ---- */
.has-lk .lk-copy {
  flex: none; padding: 8px 14px; border: 1px solid var(--border-light); border-radius: 9px;
  background: var(--yellow-wash); font-family: var(--font-sans); font-weight: 700; font-size: 13px;
  color: var(--has-gold-deep); cursor: pointer; white-space: nowrap;
  transition: background var(--dur-base) var(--ease-out), color var(--dur-base) var(--ease-out);
}
.has-lk .lk-copy:hover { background: var(--has-yellow); color: var(--has-black); }
.has-lk .lk-copy.is-done { background: var(--success-wash); border-color: transparent; color: var(--success); }
.has-lk .lk-copy--on-dark { background: var(--has-yellow); border-color: transparent; color: var(--has-black); }
.has-lk .lk-code__head { display: flex; align-items: center; justify-content: space-between; gap: 12px; margin: 0 0 8px; }
.has-lk .lk-code__title { font-family: var(--font-sans); font-weight: 600; font-size: 13px; color: var(--text-muted); font-variant-numeric: tabular-nums; }
/* Движок отдаёт эти блоки как <textarea>: у него своя высота по rows, скролл и
   «уголок» для растягивания, а в макете это обычный блок кода по контенту. */
.has-lk .ptextareaus,
.has-lk .partner_textarea {
  display: block; width: 100%; box-sizing: border-box; min-height: 0; height: auto;
  border: 1px solid var(--border-light); border-radius: 14px; background: var(--surface-sunken);
  padding: 12px 14px; font-family: var(--font-mono, monospace); font-size: 13px; line-height: 1.55;
  color: var(--text-primary); resize: none; overflow: hidden;
}
/* ячейка с REST API-ключом: значение и кнопка в одну строку, прижаты вправо
   вместе с остальными значениями таблицы */
.has-lk .ppapitext { display: flex; align-items: center; justify-content: flex-end; gap: 10px; flex-wrap: wrap; padding: 0; border: none; background: none; }
.has-lk .ppapitext .js_copy { font-variant-numeric: tabular-nums; font-weight: 600; word-break: break-all; }

/* ---- «Ваша реферальная ссылка» (/preferals/) ---- */
.has-lk .lk-ref { background: var(--has-black); border-radius: 20px; padding: 22px 26px; margin-bottom: 20px; }
.has-lk .lk-ref__label { font-family: var(--font-sans); font-size: 13px; font-weight: 600; color: rgba(255, 255, 255, 0.6); margin-bottom: 10px; }
.has-lk .lk-ref__row { display: flex; align-items: center; justify-content: space-between; gap: 16px; }
.has-lk .lk-ref__url { font-family: var(--font-sans); font-weight: 600; font-size: 16px; color: #fff; word-break: break-all; }

/* ---- «Доступно для вывода» (/payouts/) ---- */
.has-lk .lk-balance {
  background: var(--has-white); border: 1px solid var(--border-light); border-radius: 20px;
  box-shadow: 0 2px 8px rgba(18, 16, 10, 0.04); padding: 24px 30px; margin-bottom: 20px;
}
.has-lk .lk-balance__label { font-family: var(--font-sans); font-size: 13.5px; font-weight: 600; color: var(--text-muted); }
.has-lk .lk-balance__value { font-family: var(--font-sans); font-weight: 800; font-size: 26px; letter-spacing: -0.01em; color: var(--text-primary); margin-top: 4px; font-variant-numeric: tabular-nums; }
.has-lk .lk-balance__min {
  display: inline-block; margin-top: 10px; padding: 6px 12px; border-radius: 999px; background: var(--yellow-wash);
  font-family: var(--font-sans); font-weight: 700; font-size: 12.5px; color: var(--has-gold-deep);
}

/* ---- форма вывода средств: движок раскладывает её в три колонки ---- */
/* и вдобавок зажимает всю форму в фиксированные 274px — растягиваем на карточку */
.has-lk .paydiv_ins { display: flex; flex-direction: column; gap: 14px; width: 100% !important; max-width: none !important; box-sizing: border-box; }
.has-lk .pay_left_col, .has-lk .pay_center_col, .has-lk .pay_right_col { width: 100% !important; max-width: none !important; float: none; }
.has-lk .pay_select select, .has-lk .pay_input input[type="text"] { display: block; }
.has-lk .pay_left_col { font-family: var(--font-sans); font-weight: 800; font-size: 17px; color: var(--text-primary); }
.has-lk .pay_center_col { display: flex; flex-direction: column; gap: 14px; }
.has-lk .pay_select::before,
.has-lk .pay_input::before {
  display: block; margin-bottom: 6px;
  font-family: var(--font-sans); font-size: 13px; font-weight: 600; color: var(--text-secondary);
}
.has-lk .pay_select::before { content: var(--lk-pay-method, ''); }
.has-lk .pay_input::before { content: var(--lk-pay-account, ''); }
.has-lk .pay_right_col input[type="submit"] { width: 100%; background: var(--has-yellow); color: var(--has-black); box-shadow: 0 4px 14px rgba(249, 205, 46, 0.28); }
.has-lk .pay_right_col input[type="submit"]:disabled { background: var(--surface-sunken); color: var(--text-muted); box-shadow: none; }
.has-lk .paydiv + .resultgo:not(:empty) { margin: -8px 0 20px; }
/* примечание под формой: у движка тут <span class="red"> */
.has-lk .paytext p { font-family: var(--font-sans); font-size: 14px; line-height: 1.6; color: var(--text-secondary); margin: 0; }
.has-lk .paytext .red { color: var(--text-primary); font-weight: 700; }

/* ---- «Ваши счета»: подводка и кнопка в одной карточке ---- */
.has-lk .userwallets_form_ins { display: flex; align-items: center; justify-content: space-between; gap: 20px; flex-wrap: wrap; }
.has-lk .userwallets_text { flex: 1 1 320px; min-width: 0; }
.has-lk .userwallets_addbutton { flex: none; }
.has-lk .userwallets_text p { margin: 0; font-family: var(--font-sans); font-size: 14.5px; line-height: 1.6; color: var(--text-secondary); }
.has-lk input.js_add_userwallet {
  padding-left: 44px;
  background: var(--has-black) url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 24 24' fill='none' stroke='%23F9CD2E' stroke-width='2.5' stroke-linecap='round'%3E%3Cpath d='M12 5v14M5 12h14'/%3E%3C/svg%3E") 20px center / 16px no-repeat;
}

/* ---- «Настройки безопасности»: секции, тумблеры ---- */
.has-lk .lk-sec { grid-column: 1 / -1; padding: 22px 0 14px; }
.has-lk .lk-sec:first-child { padding-top: 0; }
.has-lk .lk-sec__title { font-family: var(--font-sans); font-weight: 800; font-size: 17px; color: var(--text-primary); }
.has-lk .lk-sec__sub { margin-top: 4px; font-family: var(--font-sans); font-size: 13.5px; line-height: 1.5; color: var(--text-muted); }
.has-lk-security .acf_line:not(.lk-toggle):not(.has_submit) { padding-bottom: 14px; }
.has-lk-security .acf_line input[type="password"] { max-width: 440px; }
.has-lk-security .acf_line textarea { min-height: 110px; font-variant-numeric: tabular-nums; }
/* подпись поля дублирует заголовок секции «Разрешённые IP-адреса» */
.has-lk-security .field_name_enable_ips .acf_label { display: none; }
/* строка-тумблер: подпись с пояснением слева, переключатель справа */
.has-lk .lk-toggle { display: flex; align-items: center; gap: 16px; padding: 14px 0; border-top: 1px solid var(--border-light); }
.has-lk .lk-toggle .acf_label { flex: 1; min-width: 0; }
.has-lk .lk-toggle .acf_label label { margin-bottom: 0; font-size: 14.5px; font-weight: 600; color: var(--text-primary); }
.has-lk .lk-toggle .acf_label .form_field_label_ins { margin-bottom: 0; font-size: 14.5px; font-weight: 600; color: var(--text-primary); }
.has-lk .lk-toggle__hint { margin-top: 3px; font-family: var(--font-sans); font-size: 13px; line-height: 1.45; color: var(--text-muted); }
.has-lk .lk-toggle .acf_line_ins { flex: none; display: flex; align-items: center; }
.has-lk .lk-toggle .form_field_errors { display: none; }
.has-lk .lk-toggle .acf_line_clear { display: none; }
/* сам <select> остаётся в форме и отправляет значение — только не показывается */
.has-lk .lk-toggle__select { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; border: 0; }
.has-lk .lk-switch {
  position: relative; flex: none; width: 46px; height: 26px; padding: 0; border: none; border-radius: 999px;
  background: var(--border-light); cursor: pointer; transition: background var(--dur-base) var(--ease-out);
}
.has-lk .lk-switch::after {
  content: ''; position: absolute; top: 3px; left: 3px; width: 20px; height: 20px; border-radius: 50%;
  background: #fff; box-shadow: 0 1px 3px rgba(18, 16, 10, 0.28);
  transition: transform var(--dur-base) var(--ease-out);
}
.has-lk .lk-switch.is-on { background: var(--has-yellow); }
.has-lk .lk-switch.is-on::after { transform: translateX(20px); }

/* ---- результат отправки формы ---- */
/* .resultfalse ниже свёрстан под гостевой экран (жёлтая плашка), поэтому
   ошибку и успех внутри формы разводим отдельно. */
.has-lk .acf_div_ins > .resultgo:empty,
.has-lk .paydiv ~ .resultgo:empty { display: none; }
.has-lk .resultgo .resulttrue {
  padding: 12px 16px; border-radius: 12px; background: var(--success-wash);
  font-family: var(--font-sans); font-weight: 600; font-size: 14px; color: var(--success);
}
.has-lk .resultgo .resultfalse {
  padding: 12px 16px; border-radius: 12px; border: none; background: var(--error-wash);
  font-family: var(--font-sans); font-weight: 600; font-size: 14px; color: var(--error);
}

/* ---- «Рекламные материалы» ---- */
/* Карточку этой страницы рисует сам движок (.promopage): свою вторую внутри
   не заводим, иначе получается рамка в рамке. */
.has-lk .promopage_ins { background: none; border: none; border-radius: 0; box-shadow: none; padding: 0; margin: 0; }
.has-lk .promopage_ins > .clear { display: none; }
/* Полосы категорий в макете нет — единственный пункт работает как заголовок */
.has-lk .promo_topmenu ul { list-style: none; margin: 0 0 4px; padding: 0; }
.has-lk .promo_topmenu li { margin: 0; }
.has-lk .promo_topmenu .clear { display: none; }
.has-lk .promo_topmenu li.current > a { font-family: var(--font-sans); font-weight: 800; font-size: 22px; letter-spacing: -0.01em; color: var(--text-primary); text-decoration: none; pointer-events: none; }
/* подпись под заголовком — своей разметки нет, строка приходит из PHP */
.has-lk .promo_topmenu::after {
  content: var(--lk-promo-sub, ''); display: block; margin: 6px 0 18px;
  font-family: var(--font-sans); font-size: 14px; line-height: 1.55; color: var(--text-muted);
}
/* переключатель размеров: пилюли, активная — тёмная (движок метит её .act) */
.has-lk .promo_menu ul { list-style: none; display: flex; flex-wrap: wrap; gap: 8px; margin: 0 0 18px; padding: 0; }
.has-lk .promo_menu li { margin: 0; }
.has-lk .promo_menu li > a {
  display: inline-block; padding: 9px 15px; border-radius: 10px; border: 1px solid var(--border-light);
  background: var(--has-white); font-family: var(--font-sans); font-weight: 700; font-size: 13.5px;
  color: var(--text-secondary); text-decoration: none; font-variant-numeric: tabular-nums;
}
.has-lk .promo_menu li > a:hover { border-color: var(--has-gold); color: var(--text-primary); }
.has-lk .promo_menu li.act > a { background: var(--has-black); border-color: var(--has-black); color: #fff; text-decoration: none !important; }
/* превью баннера — «колодец» на приглушённом фоне */
.has-lk .prevbanner {
  display: flex; align-items: center; justify-content: center; padding: 26px; margin-bottom: 14px;
  border: 1px solid var(--border-light); border-radius: 16px; background: var(--surface-sunken);
}
.has-lk .prevbanner img { max-width: 100%; height: auto; }
.has-lk .bannerboxlink { margin-bottom: 10px; }
.has-lk .bannerboxlink a {
  display: inline-block; padding: 11px 18px; border: 1px solid var(--border-light); border-radius: 12px;
  background: var(--has-white); font-family: var(--font-sans); font-weight: 700; font-size: 13.5px;
  color: var(--text-primary); text-decoration: none;
}
.has-lk .bannerboxlink a:hover { border-color: var(--has-gold); }

/* ---- «Партнёрский аккаунт»: блок рекламных материалов ---- */
.has-lk .promouserdiv_ins h3 { font-family: var(--font-sans); font-weight: 800; font-size: 22px; letter-spacing: -0.01em; color: var(--text-primary); margin: 0 0 10px; }
.has-lk .promouserdiv_ins p { font-family: var(--font-sans); font-size: 14.5px; line-height: 1.65; color: var(--text-secondary); margin: 0 0 12px; }
.has-lk .promouserdiv_ins h4 { font-family: var(--font-sans); font-weight: 700; font-size: 13px; color: var(--text-muted); margin: 20px 0 8px; }
.has-lk .changeppapi { font-family: var(--font-sans); font-weight: 600; font-size: 13px; color: var(--has-gold-deep); text-decoration: none; }
.has-lk .changeppapi:hover { text-decoration: underline; }

/* ---- текстовые страницы кабинета: «Условия участия», «Партнёрский FAQ» ---- */
/* Движок заворачивает содержимое раздела в собственную белую карточку:
   на обычных WP-страницах это .page_wrap, а на страницах-шорткодах его скрипт
   уже в браузере оборачивает всё в <slug>__container (в HTML этого узла нет).
   Обе — с одной подписью: radius 28, padding 24. У нас карточки свои, поэтому
   внешнюю снимаем, иначе получается рамка в рамке. */
.has-lk .page_wrap,
.has-lk .inner-content > [class*="__container"] {
  background: none !important; border: none !important; border-radius: 0 !important;
  box-shadow: none !important; padding: 0 !important;
}
.has-lk .lk-intro { background: var(--has-black); border-radius: 20px; padding: 26px 30px; margin-bottom: 20px; }
.has-lk .lk-intro__text { margin: 0 0 18px; font-family: var(--font-sans); font-size: 15.5px; line-height: 1.6; color: rgba(255, 255, 255, 0.82); }
.has-lk .lk-intro__cta {
  display: inline-block; padding: 14px 26px; border-radius: 14px; background: var(--has-yellow);
  font-family: var(--font-sans); font-weight: 700; font-size: 15px; color: var(--has-black); text-decoration: none;
}
.has-lk .lk-intro__cta:hover { opacity: 0.9; }
.has-lk .pt-body {
  background: var(--has-white); border: 1px solid var(--border-light); border-radius: 20px;
  box-shadow: 0 2px 8px rgba(18, 16, 10, 0.04); padding: 28px 30px; margin-bottom: 20px;
}
.has-lk .pt-body > *:first-child { margin-top: 0; }
.has-lk .pt-body > *:last-child { margin-bottom: 0; }
/* заголовкам движок задаёт свой размер и начертание — перебиваем явно */
.has-lk .pt-body h2 { font-family: var(--font-sans); font-weight: 800 !important; font-size: 22px !important; letter-spacing: -0.01em; color: var(--text-primary); margin: 26px 0 12px; }
.has-lk .pt-body h3 { font-family: var(--font-sans); font-weight: 700 !important; font-size: 18px !important; color: var(--text-primary); margin: 22px 0 10px; }
.has-lk .pt-body p { font-family: var(--font-sans); font-size: 15.5px; line-height: 1.7; color: var(--text-secondary); margin: 0 0 14px; }
.has-lk .pt-body strong { color: var(--text-primary); }
.has-lk .pt-body a { color: var(--has-gold-deep); text-decoration: none; }
.has-lk .pt-body a:hover { text-decoration: underline; }
.has-lk .pt-body ul, .has-lk .pt-body ol { list-style: none; margin: 0 0 16px; padding: 0; counter-reset: pt; }
.has-lk .pt-body li { position: relative; padding-left: 30px; margin-bottom: 10px; font-family: var(--font-sans); font-size: 15.5px; line-height: 1.7; color: var(--text-secondary); }
.has-lk .pt-body ul li::before { content: ''; position: absolute; left: 8px; top: 11px; width: 6px; height: 6px; border-radius: 50%; background: var(--has-yellow); }
.has-lk .pt-body ol li { counter-increment: pt; }
.has-lk .pt-body ol li::before {
  content: counter(pt); position: absolute; left: 0; top: 2px;
  display: inline-flex; align-items: center; justify-content: center; width: 24px; height: 24px;
  border-radius: 8px; background: var(--yellow-wash);
  font-family: var(--font-sans); font-weight: 700; font-size: 12.5px; color: var(--has-gold-deep);
}
/* аккордеон «Партнёрского FAQ» собирает has_account.php, поведение — has-home.js */
.has-lk .lk-faq { margin-bottom: 20px; }
.has-lk .lk-faq .has-faqp-a > p:last-child { margin-bottom: 0; }

@media (max-width: 900px) {
  .has-lk .page-block.container { padding-left: 16px; padding-right: 16px; }
  .has-lk .inner.grid { grid-template-columns: 1fr; }
  /* На десктопе колонки закреплены жёстко (grid-column 1 и 2 с !important —
     иначе движок раскладывает их по-своему). В одноколоночной раскладке это
     оставляло сайдбар во ВТОРОЙ, неявной колонке, а колонка контента
     схлопывалась в 0px — на телефоне было видно только меню. */
  .has-lk .inner-content, .has-lk .aside { grid-column: 1 !important; }
  .has-lk .aside { order: -1; }
  /* Меню кабинета на мобилке — обычный блок, НЕ sticky. Колонка тут одна и меню
     и так стоит первым, а «липкость» приводила к тому, что контент проезжал под
     ним, и на iOS Safari подложка просвечивала сквозь меню (артефакт композитинга
     у sticky-блока с overflow:hidden + radius + тенью). */
  .has-lk .user_widget { position: static; top: auto; }
  .has-lk .acf_div_ins { grid-template-columns: 1fr; }
  /* список карточек держим в согласии с набором выше: иначе на одной странице
     соседние блоки получают разные поля */
  .has-lk .acf_div_wrap, .has-lk .promouserdiv, .has-lk .pntable_wrap,
  .has-lk .promopage, .has-lk .userwallets_form,
  .has-lk .paytext, .has-lk .paydiv, .has-lk .pt-body { padding: 22px 20px; }
  .has-lk .lk-balance, .has-lk .lk-ref, .has-lk .lk-intro { padding: 20px; }
  .has-lk .lk-note { padding: 14px 16px; }
  /* kv-карточки остаются без внутренних полей — их задаёт таблица */
  .has-lk .stattablediv, .has-lk .statstablediv, .has-lk .statuserdiv { padding: 0; }
  .has-lk .stattablediv th, .has-lk .statstablediv th, .has-lk .statuserdiv th,
  .has-lk .stattablediv td, .has-lk .statstablediv td, .has-lk .statuserdiv td { padding: 13px 16px; }
  /* блоки «текст + кнопка» и «ссылка + копировать» — в колонку */
  .has-lk .userwallets_form_ins, .has-lk .lk-ref__row { flex-direction: column; align-items: stretch; }
  /* flex-basis в колонке задаёт ВЫСОТУ — на десктопе это ширина текста,
     здесь дало бы пустую полосу в треть экрана над кнопкой */
  .has-lk .userwallets_text { flex: 0 0 auto; }
  /* на узком экране поля ячеек съедают заметную долю ширины */
  .has-lk .pntable th { padding: 0 10px 10px; }
  .has-lk .pntable td { padding: 13px 10px; }
  .has-lk .lk-ref__row .lk-copy, .has-lk .userwallets_addbutton input { width: 100%; }
  .has-lk .lk-toggle { align-items: flex-start; }
}

/* ---- адаптив ---- */
@media (max-width: 1100px) {
  .has-steps { grid-template-columns: repeat(3, 1fr); }
  .has-offices { grid-template-columns: repeat(3, 1fr); }
  .has-faq-wrap { grid-template-columns: 1fr; gap: 24px; }
}

@media (max-width: 900px) {
  .has-sec { padding: var(--space-12) 0; }
  .has-sec__inner { padding: 0 20px; }
  .has-sec__title { font-size: 26px; }
  .has-hero__inner { grid-template-columns: 1fr; gap: 32px; padding: 32px 20px 40px; }
  .has-hero__title { font-size: 32px; }
  .has-hero__right { justify-content: stretch; }
  .has-hero__calc { max-width: none; }
  .has-mons__inner { padding: 14px 20px; justify-content: flex-start; }
  .has-banner { flex-direction: column; align-items: flex-start; gap: 20px; padding: 24px 22px; }
  .has-banner__title { font-size: 21px; }
  .has-banners__track { min-height: 300px; }
  .has-steps, .has-advs, .has-dirs, .has-reviews { grid-template-columns: 1fr; }
  .has-offices { grid-template-columns: repeat(2, 1fr); }
  .has-ref { gap: 24px; padding: 32px 28px; }
}

@media (max-width: 640px) {
  .has-hero__stats { grid-template-columns: 1fr; }
  .has-hero__stat:nth-child(2), .has-hero__stat:nth-child(4) { padding-left: 0; border-left: none; }
  .has-hero__stat:nth-child(2), .has-hero__stat:nth-child(3), .has-hero__stat:nth-child(4) { padding-top: 16px; border-top: 1px solid var(--border-light); }
  .has-offices { grid-template-columns: 1fr; }
}



/* ────────────────────────────────────────────────────────────
   КАЛЬКУЛЯТОР ОБМЕНА
   Значения сняты с отрендеренного макета ExchangeCalc:
     карточка 440×535, padding 18, radius 24, рамка 1px
     полоса вкладок 402×46, padding 4, radius 14, рамка 1px
     вкладка 194×36, radius 11, 13.5px/700
     поле 402×95, padding 13/14, radius 16, рамка 1px
     чип валюты 116×44, radius 999, padding 5/12/5/5, 15px/700
     сумма 22px/700 · swap 44×44, круг, обводка 3px белым
     строка курса 13px · примечание 12px
   ──────────────────────────────────────────────────────────── */

.has-calc {
  position: relative;
  width: 100%;
  box-sizing: border-box;
  background: var(--has-white);
  border: 1px solid var(--border-light);
  border-radius: 24px;
  box-shadow: var(--shadow-card);
  padding: 18px;
  font-family: var(--font-sans);
}

/* ---- вкладки ---- */
.has-calc__tabs {
  display: flex;
  gap: 4px;
  padding: 4px;
  background: var(--surface-sunken);
  border: 1px solid var(--border-light);
  border-radius: 14px;
  margin-bottom: 12px;
}

.has-calc__tab {
  flex: 1;
  height: 36px;
  padding: 0 6px;
  border: none;
  border-radius: 11px;
  background: transparent;
  font-family: var(--font-sans);
  font-weight: 700;
  font-size: 13.5px;
  color: var(--text-muted);
  cursor: pointer;
  transition: background var(--dur-base) var(--ease-out), color var(--dur-base) var(--ease-out);
}

.has-calc__tab.is-active { background: var(--has-yellow); color: var(--has-black); }

/* ---- поля сумм ---- */
.has-calc__row { position: relative; display: flex; flex-direction: column; gap: 8px; }

.has-calc__field {
  background: var(--surface-sunken);
  border: 1px solid var(--border-light);
  border-radius: 16px;
  padding: 13px 14px;
}

.has-calc__label {
  font-size: 12.5px;
  line-height: 1.2;
  color: var(--text-muted);
  margin-bottom: 8px;
}

.has-calc__control { display: flex; align-items: center; gap: 10px; }

/* Селектор движка input:not([type="submit"]) имеет специфичность (0,1,1)
   и перебивает одиночный класс. Поднимаем до (0,2,1), иначе поле получает
   фон, рамку и высоту 60px вместо 27 — и вся карточка становится выше. */
.has-calc input.has-calc__input {
  flex: 1;
  min-width: 0;
  height: auto;
  border: none;
  border-radius: 0;
  background: transparent;
  box-shadow: none;
  font-family: var(--font-sans);
  font-weight: 700;
  font-size: 22px;
  line-height: 1.2;
  color: var(--text-primary);
  text-align: right;
  outline: none;
  padding: 1px 2px;
  margin: 0;
}

/* Движок вешает на инпуты вложенное правило
     &:not(:disabled):hover / :focus {
        border: 1px solid var(--Colors-Fills-Primary) !important;
        box-shadow: 0 0 0 1px var(--Colors-Fills-Primary) inset !important;
     }
   Раньше эта рамка была синей и терялась, но мост перекрасил переменную
   в фирменный жёлтый — и она стала бросаться в глаза при наведении и вводе.
   В макете у поля суммы никакой рамки нет, поэтому гасим. Перебить можно
   только своим !important: у движка он тоже стоит. */
.has-calc input.has-calc__input:hover,
.has-calc input.has-calc__input:focus,
.has-calc input.has-calc__input:focus-visible {
  border: none !important;
  box-shadow: none !important;
  outline: none !important;
  background: transparent !important;
}

/* ---- swap: круг с белой обводкой, «вырезающей» его из промежутка ---- */
.has-calc__swap {
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  z-index: 5;
  width: 44px;
  height: 44px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  border-radius: 50%;
  border: 3px solid var(--has-white);
  background-color: var(--has-yellow);
  color: var(--has-black);
  /* В макете у кнопки есть жёлтое свечение — rgba(249,205,46,.3) 0 4px 14px */
  box-shadow: var(--shadow-yellow-sm);
  cursor: pointer;
  transition: background-color var(--dur-fast) var(--ease-out);
}

.has-calc__swap:hover { background-color: var(--has-yellow-light); }

/* ---- чип валюты ---- */
.has-pick { position: relative; flex: none; }
.has-pick[hidden] { display: none; }

.has-pick__btn {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  height: 44px;
  padding: 5px 12px 5px 5px;
  background-color: var(--has-white);
  border: 1px solid var(--border-light);
  border-radius: var(--radius-pill);
  cursor: pointer;
  font-family: var(--font-sans);
  font-weight: 700;
  font-size: 15px;
  color: var(--text-primary);
  white-space: nowrap;
}

/* В макете иконка в чипе 26px, а в строке списка — 32px (не наоборот). */
.has-pick__btn img { display: block; width: 26px; height: 26px; border-radius: 50%; }

.has-pick__badge {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 32px;
  height: 32px;
  border-radius: 50%;
  background: var(--has-graphite);
  color: var(--has-white);
  font-size: 10px;
  font-weight: 800;
  letter-spacing: -0.02em;
  flex: none;
}

.has-pick__menu {
  position: absolute;
  top: calc(100% + 8px);
  left: 0;
  z-index: 30;
  width: 248px;
  max-height: 264px;
  overflow-y: auto;
  background: var(--has-white);
  border: 1px solid var(--border-light);
  border-radius: 14px;
  box-shadow: var(--shadow-lg);
  padding: 6px;
}

.has-pick__menu[hidden] { display: none; }

.has-pick__item {
  display: flex;
  align-items: center;
  gap: 10px;
  width: 100%;
  padding: 8px 10px;
  background: transparent;
  border: none;
  border-radius: 10px;
  cursor: pointer;
  text-align: left;
  font-family: var(--font-sans);
}

.has-pick__item:hover { background: var(--yellow-wash); }
.has-pick__ico { flex: none; }
.has-pick__ico img { display: block; width: 32px; height: 32px; border-radius: 50%; }
.has-pick__text { display: flex; flex-direction: column; min-width: 0; }
.has-pick__t1 { font-weight: 700; font-size: 14px; color: var(--text-primary); }
.has-pick__t2 { font-size: 12px; color: var(--text-muted); }

/* ---- бейдж сети ----
   Четыре USDT (TRC20/ERC20/BEP20/TON) в списке иначе неразличимы: строка
   «USDT · Tether» у них одинаковая. Цвет бейджа — фирменный цвет сети,
   приходит с сервера (has_net_color). */
.has-net {
  display: inline-flex;
  align-self: flex-start;      /* иначе pill растянется на всю строку */
  color: #fff;
  font-weight: 700;
  font-size: 10px;
  line-height: 1.35;
  padding: 2px 7px;
  border-radius: 999px;
  white-space: nowrap;
  letter-spacing: .02em;
}

/* Бейдж рядом с выбранной монетой — снаружи кнопки-чипа, как в макете. */
/* Бейдж — соседний flex-элемент строки, а не потомок .has-pick:
   вертикальное центрирование даёт align-items:center самой строки,
   горизонтальный отступ — её gap. Собственных отступов не задаём. */
.has-pick__net { display: inline-flex; align-items: center; flex: none; }

/* Активный пункт: подложка + золотая галочка справа. */
.has-pick__item.is-active { background: var(--yellow-wash); }
.has-pick__check { flex: none; margin-left: auto; }

/* ---- поле города ---- */
.has-calc__city { margin-top: 8px; }
.has-calc__city .has-pick { width: 100%; }

.has-calc__city .has-pick__btn {
  width: 100%;
  height: auto;
  justify-content: flex-start;
  gap: 10px;
  padding: 0;
  border: none;
  background: transparent;
}

.has-pick__pin { color: var(--has-gold); display: inline-flex; flex: none; }
.has-pick__citytext { display: flex; flex-direction: column; min-width: 0; text-align: left; }
.has-pick__addr { font-weight: 400; font-size: 12px; line-height: 15px; color: var(--text-muted); margin-top: 0; }
.has-pick__citytext .has-pick__label { line-height: 19px; }
.has-calc__city .has-pick__btn > svg:last-child { margin-left: auto; color: var(--text-muted); flex: none; }
/* Меню вложено в .has-pick, а тот — внутрь отступов поля (13px 14px).
   Чтобы список занял всю ширину поля, как в макете, выносим его за
   горизонтальные отступы отрицательными сдвигами. */
.has-calc__city .has-pick__menu {
  left: -14px;
  right: -14px;
  width: auto;
  max-height: 260px;
}

/* Пункт в макете 46px: две строки без лишнего интерлиньяжа. */
.has-calc__city .has-pick__item { padding: 8px 10px; align-items: flex-start; }
.has-calc__city .has-pick__t1 { font-size: 15px; font-weight: 700; line-height: 17px; }
.has-calc__city .has-pick__t2 { font-size: 13px; line-height: 13px; margin-top: 0; }

.has-calc__bank {
  margin-top: 4px;
  padding: 10px 12px;
  border-radius: var(--radius-md);
  background: var(--yellow-wash);
  font-size: 13px;
  color: var(--text-secondary);
}

.has-calc__bank[hidden] { display: none; }

/* ---- курс и резерв ---- */
/* В макете блок курса/резерва высотой 59 и без верхнего margin —
   воздух над ним создаётся внутренним padding. */
.has-calc__meta { margin-top: 0; padding-top: 19px; display: flex; flex-direction: column; gap: 6px; }

/* В макете строка курса ровно 17px при кегле 13 — иконка не должна
   растягивать строку, поэтому line-height фиксирован. */
.has-calc__mrow {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 12px;
  font-size: 13px;
  line-height: 17px;
  color: var(--text-secondary);
}

.has-calc__mrow svg { display: block; }

.has-calc__mlbl { display: inline-flex; align-items: center; gap: 7px; color: var(--text-muted); }
.has-calc__mlbl svg { color: var(--has-gold); flex: none; }
.has-calc__mval { font-weight: 700; color: var(--text-primary); text-align: right; }

.has-calc__error { font-size: 13px; color: var(--error); font-weight: 600; }
.has-calc__error[hidden] { display: none; }

/* ---- кнопка и примечание ---- */
.has-calc__submit {
  display: flex;
  align-items: center;
  justify-content: center;
  margin-top: 10px;
  height: var(--control-h-lg);
  border-radius: var(--radius-button-lg);
  background: var(--has-yellow);
  color: var(--has-black);
  font-family: var(--font-sans);
  font-weight: 700;
  font-size: 16px;
  text-decoration: none;
  box-shadow: var(--shadow-yellow-sm);
  transition: background var(--dur-fast) var(--ease-out);
}

.has-calc__submit:hover { background: var(--has-yellow-light); color: var(--has-black); }
.has-calc__submit.is-disabled { background: var(--disabled-bg); color: var(--disabled-text); box-shadow: none; pointer-events: none; }

.has-calc__note {
  margin: 12px 0 0;
  text-align: center;
  font-size: 12px;
  line-height: 14px;
  color: var(--text-muted);
}

@media (max-width: 640px) {
  .has-calc { padding: 14px; border-radius: 20px; }
  .has-calc__tab { font-size: 12.5px; }
  .has-calc__input { font-size: 20px; }
  .has-pick__menu { width: 220px; }
}

/* ────────────────────────────────────────────────────────────
   МОДАЛКА ВХОДА И РЕГИСТРАЦИИ
   Разметка форм — движковая (шорткоды login_form / register_form /
   lostpass_page), поэтому стилизуем его классы: .form_field_line,
   .log_input, .reg_input, .captcha_div и т.д.
   Значения из макета: карточка 440, r24, padding 30/30/28,
   оверлей rgba(18,16,10,.55), кнопка отправки ЧЁРНАЯ.
   ──────────────────────────────────────────────────────────── */

.has-auth {
  position: fixed;
  inset: 0;
  /* Выше мобильной шторки меню (.hc-drawer = 1200), иначе форма входа/регистрации,
     открытая из шторки, оказывается ПОД ней. */
  z-index: 1300;
  display: flex;
  align-items: flex-start;
  justify-content: center;
  padding: 48px 20px;
  overflow-y: auto;
}

.has-auth[hidden] { display: none; }

.has-auth__overlay {
  position: fixed;
  inset: 0;
  background: rgba(18, 16, 10, 0.55);
}

.has-auth__card {
  position: relative;
  width: 100%;
  max-width: 440px;
  margin: auto;
  /* 64px сверху — в обновлённом макете вкладки опущены ниже крестика,
     чтобы он не наезжал на «Регистрация». */
  padding: 64px 30px 28px;
  background: var(--has-white);
  border: 1px solid var(--border-light);
  border-radius: 24px;
  box-shadow: 0 24px 68px rgba(18, 16, 10, 0.28);
}

.has-auth__x {
  position: absolute;
  top: 18px;
  right: 18px;
  width: 34px;
  height: 34px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  border: none;
  border-radius: 10px;
  background: var(--surface-sunken);
  color: var(--text-muted);
  cursor: pointer;
  transition: background var(--dur-fast) var(--ease-out), color var(--dur-fast) var(--ease-out);
}

/* Ховера в макете нет, но кнопке нужна обратная связь — берём соседний
   по светлоте токен, чтобы не спорить с макетом яркостью. */
.has-auth__x:hover { background: var(--border-light); color: var(--text-primary); }

/* заголовок только для скринридеров — визуально роль играют вкладки */
.has-auth__sr {
  position: absolute;
  width: 1px; height: 1px;
  overflow: hidden;
  clip: rect(0 0 0 0);
  white-space: nowrap;
}

.has-auth__tabs {
  display: flex;
  gap: 4px;
  padding: 4px;
  margin: 0 0 22px;
  background: var(--surface-sunken);
  border: 1px solid var(--border-light);
  border-radius: 14px;
}

.has-auth__tabs[hidden] { display: none; }

.has-auth__tab {
  flex: 1;
  padding: 10px 8px;
  text-align: center;
  border: none;
  border-radius: 11px;
  background: transparent;
  font-family: var(--font-sans);
  font-weight: 700;
  font-size: 14px;
  color: var(--text-muted);
  cursor: pointer;
  transition: background var(--dur-base) var(--ease-out), color var(--dur-base) var(--ease-out);
}

.has-auth__tab.is-active {
  background: var(--has-yellow);
  color: var(--has-black);
  box-shadow: 0 2px 8px rgba(249, 205, 46, 0.30);
}
.has-auth__pane[hidden] { display: none; }

/* ---- приводим движковую разметку формы к макету ---- */

/* Заголовки форм лишние: на входе и регистрации их роль выполняют вкладки,
   на восстановлении — наш собственный заголовок из макета. */
.has-auth .log_div_title,
.has-auth .reg_div_title,
.has-auth .lp_div_title { display: none; }

/* Движок оформляет свои контейнеры как самостоятельную карточку
   (белый фон, padding 24, рамка, radius 28). Внутри модалки это даёт
   «коробку в коробке» — обнуляем, карточкой служит .has-auth__card. */
.has-auth .not_frame,
.has-auth .log_div_wrap,
.has-auth .log_div,
.has-auth .log_div_ins,
.has-auth .reg_div_wrap,
.has-auth .reg_div,
.has-auth .reg_div_ins,
.has-auth .lp_div_wrap,
.has-auth .lp_div,
.has-auth .lp_div_ins {
  background: transparent;
  border: none;
  border-radius: 0;
  padding: 0;
  margin: 0;
  box-shadow: none;
}

.has-auth .form_field_line { margin-bottom: 14px; }

.has-auth .form_field_label label {
  display: block;
  margin-bottom: 6px;
  font-family: var(--font-sans);
  font-weight: 600;
  font-size: 13px;
  color: var(--text-secondary);
}

.has-auth .form_field_label .req { color: var(--error); }

/* поля ввода: .au-in из макета — 100%, r14, padding 14/16, 15px */
.has-auth input[type="text"],
.has-auth input[type="email"],
.has-auth input[type="password"] {
  width: 100%;
  height: auto;
  padding: 14px 16px;
  border: 1px solid var(--border-light);
  border-radius: 14px;
  background: var(--surface-sunken);
  font-family: var(--font-sans);
  font-size: 15px;
  color: var(--text-primary);
  outline: none;
  box-shadow: none;
}

/* движок вешает на инпуты жёлтую рамку через !important — гасим */
.has-auth input[type="text"]:hover,
.has-auth input[type="text"]:focus,
.has-auth input[type="email"]:hover,
.has-auth input[type="email"]:focus,
.has-auth input[type="password"]:hover,
.has-auth input[type="password"]:focus {
  border: 1px solid var(--has-gold) !important;
  box-shadow: none !important;
}

.has-auth input::placeholder { color: var(--text-muted); opacity: 0.7; }

.has-auth .form_field_errors_ins {
  margin-top: 8px;
  font-size: 12.5px;
  color: var(--error);
}

/* скрытые движком поля (персональный пин) остаются скрытыми */
.has-auth .hidden_line { display: none; }

/* ---- капча ----
   В макете капча — открытый ряд плиток без подложки и без заголовка:
   две плитки 46x46, знак действия, поле ответа 64px, кнопка обновления. */
.has-auth .captcha_div {
  margin: 18px 0 4px;
  padding: 0;
  background: transparent;
  border: none;
  border-radius: 0;
}

/* Подписи «Введите ответ» в макете нет — сам ряд читается однозначно. */
.has-auth .captcha_title { display: none; }

.has-auth .captcha_body { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; }

/* Плитка 46x46 из макета. Картинку с цифрой генерирует движок — она уже
   идёт со штриховкой, поэтому просто кадрируем её в плитку нужного размера. */
.has-auth .captcha_divimg {
  width: 46px;
  height: 46px;
  border-radius: 10px;
  overflow: hidden;
  flex: none;
  background: repeating-linear-gradient(45deg, #EFEAD9, #EFEAD9 6px, #E4DDC7 6px, #E4DDC7 12px);
}

.has-auth .captcha_divimg img { display: block; width: 100%; height: 100%; object-fit: cover; border-radius: 0; }
.has-auth .captcha_divznak { font-weight: 700; font-size: 18px; color: var(--text-muted); }

.has-auth input.captcha_divpole {
  width: 64px;
  padding: 11px;
  border-radius: 12px;
  text-align: center;
  font-weight: 700;
  font-size: 19px;
  font-variant-numeric: tabular-nums;
  background: var(--has-white);
}

.has-auth .captcha_reload {
  width: 38px; height: 38px;
  display: inline-flex; align-items: center; justify-content: center;
  border-radius: 8px;
  color: var(--text-muted);
  text-decoration: none;
}

/* у движка своя фоновая иконка — собственный символ не добавляем */
.has-auth .captcha_reload {
  background-size: 18px 18px;
  background-position: center;
  background-repeat: no-repeat;
  opacity: 0.65;
}

.has-auth .captcha_reload:hover { opacity: 1; background-color: var(--has-white); }

/* ---- согласие с правилами ----
   Механика движка: его JS вешает на инпут class="jcheckbox" и ИНЛАЙНОВЫЙ
   style="display:none", ОБОРАЧИВАЕТ label в <div class="checkbox">, саму
   коробку рисует через label::before, а включённое состояние помечает
   классом .checked на этой обёртке.
   Поэтому целимся в .checkbox, а не в .reg_line: до инициализации JS обёртки
   ещё нет, после — она встаёт между .reg_line и label и рвёт селектор с «>».
   Поэтому стилизуем псевдоэлемент, а не инпут: инлайновый display:none
   ничем, кроме !important, не перебить, а вмешиваться в обработчик клика
   опасно — рассинхрон галочки и реального check_rule заблокирует регистрацию. */
.has-auth .reg_line > label,
.has-auth .checkbox > label {
  position: relative;
  display: flex;
  align-items: flex-start;
  gap: 10px;
  margin: 16px 0 0;
  font-family: var(--font-sans);
  font-size: 13.5px;
  line-height: 1.5;
  color: var(--text-secondary);
  cursor: pointer;
}

.has-auth .reg_line label a { color: var(--has-gold-deep); text-decoration: none; }
.has-auth .reg_line label a:hover { text-decoration: underline; }

/* коробка 22x22 из макета */
.has-auth .reg_line > label::before,
.has-auth .checkbox > label::before {
  content: '';
  flex: none;
  box-sizing: border-box;
  width: 22px;
  height: 22px;
  margin-top: 1px;
  border: 2px solid #D8D2C2;
  border-radius: 6px;
  background: transparent;
  transition: background var(--dur-fast) var(--ease-out), border-color var(--dur-fast) var(--ease-out);
}

/* !important здесь необходим и проверен опытом: по специфичности моё правило
   (0,3,2) выше движкового .checkbox.checked label::before (0,2,2), но без
   !important оно всё равно проигрывает — значит у движка есть перебивающее
   объявление. Снимал и замерял: коробка возвращалась к прозрачной. */
.has-auth .checkbox.checked > label::before {
  background: var(--has-yellow) !important;
  border-color: var(--has-yellow) !important;
}

/* Галочку рисует сам движок: .checkbox.checked label::after — это его SVG
   (check=Variant1.svg) в квадрате 2rem с min-width 2rem. Свою не подставляем:
   его min-width всё равно клампит ширину, и получается мешанина. Вместо этого
   подгоняем его квадрат под нашу коробку 22px. */
.has-auth .checkbox.checked > label::after {
  top: 1px;
  left: 0;
  min-width: 22px;
  width: 22px;
  height: 22px;
  background-size: 14px;
}

/* ---- регистрация: поля сеткой 2x2 ----
   Логин | E-mail
   Пароль | Пароль снова
   Капча, согласие и кнопка идут во всю ширину. */
.has-auth [data-auth-pane="register"] .reg_div_ins {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 14px;
}

.has-auth [data-auth-pane="register"] .reg_div_ins > .form_field_line { margin-bottom: 0; }

.has-auth [data-auth-pane="register"] .reg_div_ins > .captcha_div,
.has-auth [data-auth-pane="register"] .reg_div_ins > .reg_line:not(.form_field_line),
.has-auth [data-auth-pane="register"] .reg_div_ins > .resultgo { grid-column: 1 / -1; }

/* Движковый .form_field_clear — распорка под float, в гриде она лишний ряд. */
.has-auth .form_field_clear,
.has-auth .reg_line:not(.form_field_line) > .clear,
.has-auth .log_line:not(.form_field_line) > .clear { display: none; }

/* Дубль: ссылка «Авторизация» под кнопкой — её роль выполняет вкладка
   и наша строка «Уже есть аккаунт?» ниже. */
.has-auth .reg_line_subm_right { display: none; }
.has-auth .reg_line_subm_left { float: none; width: auto; }

/* ---- кнопка отправки: в макете чёрная ---- */
.has-auth input[type="submit"],
.has-auth .log_submit,
.has-auth .reg_submit {
  width: 100%;
  margin-top: 2px;
  padding: 15px;
  border: none;
  border-radius: 14px;
  background: var(--has-black);
  font-family: var(--font-sans);
  font-weight: 700;
  font-size: 15px;
  color: #fff;
  cursor: pointer;
  transition: opacity var(--dur-fast) var(--ease-out);
}

.has-auth input[type="submit"]:hover { opacity: 0.88; }

/* В макете отступ над кнопкой разный: вход 16px, регистрация 18px. */
.has-auth [data-auth-pane="login"] input[type="submit"]  { margin-top: 16px; }
.has-auth [data-auth-pane="register"] input[type="submit"] { margin-top: 18px; }
.has-auth [data-auth-pane="forgot"] input[type="submit"]  { margin-top: 16px; }

/* В макете «Забыли пароль?» стоит СПРАВА и НАД кнопкой «Войти».
   Движок кладёт кнопку и ссылки в один .log_line: кнопку слева, ссылки
   справа. Разметку не трогаем — меняем порядок флексом. */
.has-auth .log_line:not(.form_field_line) { display: flex; flex-direction: column; }
.has-auth .log_line_subm_left,
.has-auth .log_line_subm_right { float: none; width: auto; }
.has-auth .log_line_subm_left { order: 2; }

/* Движок делает этот блок flex-контейнером, поэтому text-align на него
   не действует — прижимаем ссылку через justify-content. */
.has-auth .log_line_subm_right {
  order: 1;
  display: flex;
  justify-content: flex-end;
  margin: 8px 0 0;
  padding: 0;
  font-size: 13px;
}

/* Обёртка кнопки: у движка на ней собственные отступы под float-раскладку. */
.has-auth .log_line_subm_left { margin: 0; padding: 0; }

.has-auth .log_line_subm_right p { margin: 0; }
/* Ссылку «Регистрация» прячем — у нас своя строка «Нет аккаунта?» ниже.
   Вместе с ней снимаем движковый разделитель «|»: он рисуется через ::after
   и без второй ссылки висел одинокой палочкой перед «Забыли пароль?». */
.has-auth .log_line_subm_right p:first-child { display: none; }
.has-auth .log_line_subm_right::after { content: none; }
.has-auth .log_line_subm_right a { color: var(--has-gold-deep); text-decoration: none; font-weight: 400; }
.has-auth .log_line_subm_right a:hover { color: var(--has-black); }

/* ---- подвал модалки и экран восстановления ---- */
.has-auth__title {
  margin: 0 0 6px;
  font-family: var(--font-sans);
  font-weight: 800;
  font-size: 19px;
  letter-spacing: -0.01em;
  color: var(--text-primary);
}

.has-auth__foot {
  margin-top: 16px;
  text-align: center;
  font-family: var(--font-sans);
  font-size: 13.5px;
  color: var(--text-muted);
}

.has-auth__link {
  border: none;
  background: transparent;
  padding: 0 0 0 4px;
  font-family: var(--font-sans);
  font-weight: 700;
  font-size: 13.5px;
  color: var(--has-gold-deep);
  cursor: pointer;
}

.has-auth__link:hover { color: var(--has-black); }

.has-auth__back {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  margin-bottom: 14px;
  padding: 0;
  border: none;
  background: transparent;
  font-family: var(--font-sans);
  font-weight: 600;
  font-size: 13.5px;
  color: var(--text-muted);
  cursor: pointer;
}

.has-auth__back:hover { color: var(--text-primary); }

.has-auth__hint {
  margin-bottom: 16px;
  font-size: 14px;
  line-height: 1.5;
  color: var(--text-secondary);
}

.has-auth .resultgo { margin-top: 12px; font-size: 13.5px; }

@media (max-width: 640px) {
  .has-auth { padding: 20px 14px; }
  .has-auth__card { padding: 24px 20px 22px; border-radius: 20px; }
}





/* HAS-DIRECTIONS-BLOCK-START */
/* ═══════════════════════════════════════════════════════════════════════
   HAS-DIRECTIONS — каталог «Все направления» (/directions/)
   Макет «HASchange - Все направления». Тема-независимо через переменные.
   ═══════════════════════════════════════════════════════════════════════ */
.dir-wrap { background: var(--has-white); }
.dir-hide-narrow {}
@media (max-width: 720px) { .dir-hide-narrow { display: none !important; } }

/* hero */
.dir-hero { background: var(--has-cream); border-bottom: 1px solid var(--border-light); }
.dir-hero__inner { max-width: 1000px; margin: 0 auto; padding: 44px 40px 32px; }
.dir-hero__title { font-family: var(--font-sans); font-weight: 800; font-size: 40px; line-height: 1.06; letter-spacing: -.02em; color: var(--text-primary); margin: 12px 0 12px; }
.dir-hero__sub { font-family: var(--font-sans); font-size: 17px; line-height: 1.5; color: var(--text-secondary); margin: 0 0 26px; max-width: 640px; }

/* controls */
.dir-controls { display: flex; flex-wrap: wrap; gap: 12px; align-items: center; }
.dir-city { position: relative; }
.dir-city__btn, .dir-bank { display: inline-flex; align-items: center; gap: 9px; border-radius: 14px; padding: 12px 16px; font-family: var(--font-sans); }
.dir-city__btn { background: var(--has-white); border: 1px solid var(--border-light); cursor: pointer; }
.dir-bank { background: var(--surface-sunken); border: 1px solid var(--border-light); }
.dir-city__txt { display: flex; flex-direction: column; align-items: flex-start; line-height: 1.1; }
.dir-city__cap { font-size: 11px; color: var(--text-muted); }
.dir-city__name { font-size: 14.5px; font-weight: 700; color: var(--text-primary); }
.dir-city__menu { position: absolute; top: calc(100% + 6px); left: 0; z-index: 30; width: 280px; max-width: calc(100vw - 40px); background: var(--has-white); border: 1px solid var(--border-light); border-radius: 14px; box-shadow: 0 16px 48px rgba(18,16,10,.14); padding: 6px; max-height: 300px; overflow-y: auto; }
.dir-city__opt { display: flex; flex-direction: column; width: 100%; padding: 9px 11px; background: transparent; border: none; border-radius: 10px; cursor: pointer; text-align: left; font-family: var(--font-sans); }
.dir-city__opt:hover { background: var(--surface-sunken); }
.dir-city__opt-name { font-weight: 700; font-size: 14px; color: var(--text-primary); }
.dir-city__opt-addr { font-size: 12px; color: var(--text-muted); margin-top: 1px; }

.dir-search { position: relative; flex: 1; min-width: 220px; }
/* Движок задаёт полям ввода position:relative, поэтому input (он идёт в
   разметке ПОСЛЕ иконки) и лупа оказываются на одном слое и рисуются в
   порядке DOM — непрозрачный фон поля закрывал иконку целиком.
   Поднимаем лупу над полем явным z-index. */
.dir-search svg { position: absolute; z-index: 2; left: 15px; top: 50%; transform: translateY(-50%); pointer-events: none; }
/* Селектор с типом элемента: движковое input[type="search"] (0,1,1) перебивает
   одиночный класс (0,1,0) — из-за этого поле получало кремовый фон и чужой
   padding, и текст уезжал вправо от лупы. */
.dir-search input.dir-search__input { width: 100%; box-sizing: border-box; border: 1px solid var(--border-light); border-radius: 14px; padding: 13px 16px 13px 44px; font-family: var(--font-sans); font-size: 15px; color: var(--text-primary); background: var(--has-white); outline: none; }
.dir-search input.dir-search__input:focus { border-color: var(--has-gold-deep); }

/* filters — липкая панель под шапкой (шапка sticky top:0 z-index:50) */
.dir-filters { background: var(--has-white); border-bottom: 1px solid var(--border-light); position: sticky; top: 66px; z-index: 20; }
.dir-filters__inner { max-width: 1000px; margin: 0 auto; padding: 16px 40px; display: flex; flex-wrap: wrap; gap: 16px; align-items: center; justify-content: space-between; }
.dir-cats { display: flex; gap: 4px; padding: 4px; background: var(--surface-sunken); border: 1px solid var(--border-light); border-radius: 14px; }
.dir-cat { padding: 9px 16px; border-radius: 10px; border: none; cursor: pointer; font-family: var(--font-sans); font-weight: 700; font-size: 14px; white-space: nowrap; background: transparent; color: var(--text-muted); transition: all 120ms cubic-bezier(.22,1,.36,1); }
.dir-cat.is-active { background: var(--has-yellow); color: var(--has-black); box-shadow: 0 2px 8px rgba(249,205,46,.30); }
.dir-instr-wrap { display: flex; align-items: center; gap: 12px; min-width: 0; }
.dir-instr-lbl { font-family: var(--font-sans); font-size: 13px; color: var(--text-muted); flex: none; }
.dir-instr { display: flex; gap: 4px; padding: 4px; background: var(--surface-sunken); border: 1px solid var(--border-light); border-radius: 12px; overflow-x: auto; max-width: 100%; scrollbar-width: none; }
.dir-instr::-webkit-scrollbar { display: none; }
.dir-instr button { padding: 8px 13px; border-radius: 9px; border: none; cursor: pointer; font-family: var(--font-sans); font-weight: 700; font-size: 13.5px; white-space: nowrap; background: transparent; color: var(--text-muted); transition: all 120ms cubic-bezier(.22,1,.36,1); }
.dir-instr button.is-active { background: var(--has-black); color: #fff; }

/* table */
.dir-table { background: var(--has-white); }
.dir-table__inner { max-width: 1000px; margin: 0 auto; padding: 24px 40px 56px; }
.dir-table__top { display: flex; align-items: center; justify-content: space-between; margin-bottom: 12px; gap: 12px; flex-wrap: wrap; }
.dir-count { font-family: var(--font-sans); font-size: 14px; color: var(--text-muted); }
.dir-count b { color: var(--text-primary); }
.dir-live { font-family: var(--font-sans); font-size: 12.5px; color: var(--text-muted); display: inline-flex; align-items: center; gap: 6px; }
.dir-live__dot { width: 7px; height: 7px; border-radius: 50%; background: var(--success); }

.dir-thead { display: flex; align-items: center; gap: 16px; padding: 0 18px 10px; font-family: var(--font-sans); font-size: 12px; font-weight: 600; letter-spacing: .04em; text-transform: uppercase; color: var(--text-muted); }
.dir-thead__ic { width: 78px; flex: none; }
.dir-thead__main { flex: 1; }
.dir-thead__rate { width: 150px; flex: none; text-align: right; }
.dir-thead__reserve { width: 180px; flex: none; text-align: right; }
.dir-thead__go { width: 22px; flex: none; }

.dir-list { display: flex; flex-direction: column; gap: 8px; }
.dir-row { display: flex; align-items: center; gap: 16px; text-decoration: none; background: var(--has-white); border: 1px solid var(--border-light); border-radius: 16px; padding: 14px 18px; transition: border-color var(--dur-fast) var(--ease-out), box-shadow var(--dur-fast) var(--ease-out); }
.dir-row:hover { border-color: var(--has-yellow); box-shadow: 0 6px 20px rgba(18,16,10,.07); }
.dir-row__ic { width: 78px; flex: none; display: inline-flex; align-items: center; }
.dir-ic { display: block; border-radius: 50%; width: 40px; height: 40px; box-sizing: border-box; position: relative; z-index: 1; }
.dir-ic--txt { display: inline-flex; align-items: center; justify-content: center; background: var(--surface-sunken); color: var(--text-secondary); font-family: var(--font-sans); font-weight: 800; font-size: 12px; letter-spacing: -.02em; }
.dir-row__main { flex: 1; min-width: 0; }
.dir-row__title { display: flex; align-items: center; gap: 8px; font-family: var(--font-sans); font-weight: 700; font-size: 16px; color: var(--text-primary); }
.dir-row__hot { font-family: var(--font-sans); font-size: 10.5px; font-weight: 700; letter-spacing: .03em; text-transform: uppercase; color: var(--has-gold-deep); background: var(--yellow-wash); padding: 2px 7px; border-radius: 999px; }
.dir-row__sub { display: block; font-family: var(--font-sans); font-size: 12.5px; color: var(--text-muted); margin-top: 2px; }
.dir-row__rate { width: 150px; flex: none; text-align: right; font-family: var(--font-sans); font-weight: 700; font-size: 15.5px; color: var(--text-primary); font-variant-numeric: tabular-nums; }
.dir-row__reserve { width: 180px; flex: none; text-align: right; font-family: var(--font-sans); font-size: 13px; color: var(--text-muted); font-variant-numeric: tabular-nums; }
.dir-row__go { flex: none; width: 22px; color: #C7C2B6; }

.dir-empty { text-align: center; padding: 56px 20px; font-family: var(--font-sans); }
.dir-empty__t { font-size: 17px; font-weight: 700; color: var(--text-primary); margin-bottom: 6px; }
.dir-empty__s { font-size: 14px; color: var(--text-muted); }

/* SEO */
.dir-seo { background: var(--has-cream); border-top: 1px solid var(--border-light); }
.dir-seo__inner { max-width: 1000px; margin: 0 auto; padding: 48px 40px; }
.dir-seo__inner h2 { font-family: var(--font-sans); font-weight: 800; font-size: 26px; line-height: 1.2; letter-spacing: -.01em; color: var(--text-primary); margin: 0 0 14px; }
.dir-seo__inner h3 { font-family: var(--font-sans); font-weight: 700; font-size: 18px; color: var(--text-primary); margin: 18px 0 8px; }
.dir-seo__inner p { font-family: var(--font-sans); font-size: 15px; line-height: 1.65; color: var(--text-secondary); margin: 0 0 10px; }
.dir-seo__tags { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 18px; }
.dir-chip { font-family: var(--font-sans); font-size: 13px; color: var(--text-secondary); background: var(--has-white); border: 1px solid var(--border-light); border-radius: 999px; padding: 8px 14px; }

/* responsive */
@media (max-width: 720px) {
  .dir-hero__inner { padding: 32px 16px 24px; }
  .dir-hero__title { font-size: 30px; }
  .dir-hero__sub { font-size: 15px; }
  /* Ряд вкладок (Все / Продать / Купить) в одну строку не влезает по ширине
     телефона и распирал страницу горизонтально — вправо «уезжала» вся вёрстка.
     Делаем ряд самостоятельно прокручиваемым (страницу больше не тянет) и чуть
     ужимаем вкладки, чтобы на большинстве экранов они помещались целиком. */
  .dir-cats { overflow-x: auto; -webkit-overflow-scrolling: touch; scrollbar-width: none; padding: 3px; gap: 3px; }
  .dir-cats::-webkit-scrollbar { display: none; }
  .dir-cat { padding: 9px 10px; font-size: 13px; }
  /* Ряд «Получаете» не дотягивал ~20px — последняя валюта подрезалась. Ужимаем
     так же, как вкладки, чтобы все три помещались целиком (на узких экранах
     остаётся прокрутка). */
  .dir-instr { padding: 3px; gap: 3px; }
  .dir-instr button { padding: 8px 10px; font-size: 13px; }
  .dir-filters__inner { padding: 14px 16px; }
  .dir-table__inner { padding: 20px 16px 40px; }
  .dir-seo__inner { padding: 36px 16px; }
  /* Шапка таблицы должна повторять мобильные ширины строк, иначе её десктопные
     колонки (78 + 150 + 22 + отступы) не влезают и распирают страницу вправо. */
  .dir-thead { gap: 10px; padding: 0 14px 10px; }
  .dir-thead__ic { width: 60px; }
  .dir-thead__rate,
  .dir-thead__reserve { width: auto; }
  .dir-row { gap: 10px; padding: 12px 14px; }
  .dir-row__ic { width: 60px; }
  .dir-ic { width: 34px; height: 34px; }
  .dir-row__rate { width: auto; }
}
/* HAS-DIRECTIONS-BLOCK-END */

/* HAS-STATUS-BLOCK-START */
/* ═══════════════════════════════════════════════════════════════════════
   HAS-STATUS — статус заявки (/hst_*), оплата и проверка статуса
   (/checkstatus/). Макеты «Статус заявки» / «Оплата заявки».
   Рестайл движковой разметки .block_* / .zone_* / .checkstatus_* в карточки
   дизайна. Всё под .has-status / .has-checkstatus, чтобы не задеть кабинет.
   ═══════════════════════════════════════════════════════════════════════ */

/* ── титульная полоса (общая) ──────────────────────────────────────────── */
.has-status .st-strip,
.has-checkstatus .st-strip { background: var(--has-white); border-bottom: 1px solid var(--border-light); }
.st-strip__inner { max-width: 1200px; margin: 0 auto; padding: 24px 40px 22px; }
.st-strip__row { display: flex; align-items: center; gap: 12px; flex-wrap: wrap; }
.st-strip__title { font-family: var(--font-sans); font-weight: 800; font-size: 28px; line-height: 1.12; letter-spacing: -.01em; color: var(--text-primary); margin: 10px 0 0; }
.st-strip__sub { font-family: var(--font-sans); font-size: 15px; line-height: 1.5; color: var(--text-secondary); margin: 10px 0 0; max-width: 560px; }
.st-badge { display: inline-flex; align-items: center; gap: 7px; margin-top: 10px; padding: 7px 13px; border-radius: 999px; font-family: var(--font-sans); font-weight: 700; font-size: 13px; }
.st-badge__dot { width: 8px; height: 8px; border-radius: 50%; background: currentColor; }
.st-badge--wait { background: var(--yellow-wash); color: #B8860B; }
.st-badge--ok { background: var(--success-wash); color: #1d7a3f; }
.st-badge--err { background: rgba(229,72,77,.12); color: #c0392b; }

/* ── grid статуса ──────────────────────────────────────────────────────── */
.has-status .st-grid { display: grid; grid-template-columns: minmax(0,1fr) 340px; gap: 24px; max-width: 1200px; margin: 0 auto; padding: 24px 40px 56px; align-items: start; }
.has-status .st-main { display: flex; flex-direction: column; gap: 20px; min-width: 0; }
.has-status .st-aside { display: flex; flex-direction: column; gap: 16px; position: sticky; top: 88px; }
@media (max-width: 900px) {
  .st-strip__inner { padding: 18px 16px; }
  .has-status .st-grid { grid-template-columns: 1fr; padding: 16px 14px 40px; gap: 16px; }
  .has-status .st-aside { position: static; }
}

/* Цвета состояний. Раньше были захардкожены (#B8860B/#1d7a3f/#c0392b) и в
   тёмной теме выглядели грязно — выносим в токены с тёмным переопределением. */
.has-status, .has-checkstatus {
  --st-wait-fg: #B8860B; --st-wait-bg: var(--yellow-wash); --st-wait-bd: rgba(224,167,20,.35);
  --st-ok-fg: #1d7a3f;   --st-ok-bg: rgba(46,173,91,.12);  --st-ok-bd: rgba(46,173,91,.30);
  --st-err-fg: #c0392b;  --st-err-bg: rgba(229,72,77,.10); --st-err-bd: rgba(229,72,77,.28);
  --st-card-shadow: 0 2px 8px rgba(18,16,10,.04);
}
html.dark .has-status, body.dark .has-status, [data-theme='dark'] .has-status,
html.dark .has-checkstatus, body.dark .has-checkstatus, [data-theme='dark'] .has-checkstatus {
  --st-wait-fg: #F2C230; --st-wait-bg: rgba(249,205,46,.16); --st-wait-bd: rgba(224,167,20,.45);
  --st-ok-fg: #6FD79A;   --st-ok-bg: rgba(46,173,91,.18);   --st-ok-bd: rgba(46,173,91,.40);
  --st-err-fg: #FF8A8E;  --st-err-bg: rgba(229,72,77,.16);  --st-err-bd: rgba(229,72,77,.38);
  --st-card-shadow: 0 2px 8px rgba(0,0,0,.40);
}

/* ВАЖНО: движок кладёт все блоки внутрь .exchange_status_html > #exchange_status_html,
   поэтому gap у .st-main не работал и карточки слипались. Раздаём отступы здесь. */
.has-status .st-main > .exchange_status_html { position: relative; min-width: 0; }
.has-status .st-main #exchange_status_html { display: flex; flex-direction: column; gap: 20px; min-width: 0; }
/* служебный div с данными для JS — не должен занимать место во флексе */
.has-status .st-main .check_payment_hash { display: none; }

/* Общий вид карточки для движковых блоков в основной колонке. */
.has-status .st-main .notice_message,
.has-status .st-main .block_statusbids,
.has-status .st-main .block_xchangedata,
.has-status .st-main .block_persdata {
  background: var(--has-white); border: 1px solid var(--border-light); border-radius: 20px;
  box-shadow: var(--st-card-shadow); padding: 22px 26px; margin: 0;
}
.has-status .st-main .block_statusbids { padding: 24px 26px; }

/* ── notice_message → карточка «Расчёт курса» ─────────────────────────── */
.has-status .st-main .notice_message_ins { position: relative; }
.has-status .st-main .notice_message_abs { display: none; }
.has-status .st-main .notice_message_close { display: none; }
.has-status .st-main .notice_message_text_ins .text,
.has-status .st-main .notice_message_text .text { font-family: var(--font-sans); font-size: 14px; line-height: 1.6; color: var(--text-secondary); }
.has-status .st-main .notice_message_text_ins .text b,
.has-status .st-main .notice_message_text .text strong { color: var(--text-primary); }

/* ── block_statusbids → карточка статуса ──────────────────────────────── */
.has-status .st-main .block_statusbids_ins { display: flex; flex-direction: column; gap: 18px; }
.has-status .st-main .block_statusbid_title span { font-family: var(--font-sans); font-weight: 800; font-size: 20px; letter-spacing: -.01em; color: var(--text-primary); }

/* Отдаёте / Получаете — сетка 2 колонки; строка «Со счета» на всю ширину
   (display:contents у колонок, чтобы строки легли прямо в грид, как в макете) */
.has-status .st-main .block_payinfo {
  display: grid; grid-template-columns: 1fr 1fr; column-gap: 24px; row-gap: 18px;
  padding: 18px 20px; background: var(--surface-sunken);
  border: 1px solid var(--border-light); border-radius: 16px;
}
.has-status .st-main .block_payinfo_give,
.has-status .st-main .block_payinfo_get { display: contents; }
/* Явные координаты: «Отдаёте» слева, «Получаете» справа в первой строке,
   «Со счета» — во всю ширину во второй. Без этого строка счёта занимала
   вторую строку целиком и «Получаете» уезжало в третью. */
.has-status .st-main .block_payinfo_give > .block_xchdata_line { grid-area: 1 / 1; }
.has-status .st-main .block_payinfo_get > .block_xchdata_line { grid-area: 1 / 2; }
.has-status .st-main .block_payinfo .block_xchdata_line.break_words {
  grid-area: 2 / 1 / auto / -1; padding-top: 16px; border-top: 1px solid var(--border-light);
  font-size: 14px; font-weight: 400; word-break: break-all; line-height: 1.4;
}
/* Если движок выносит payinfo отдельным блоком (статус new) — это самостоятельная
   карточка сводки по макету, а не вложенная подложка. */
.has-status .st-main #exchange_status_html > .block_payinfo {
  background: var(--has-white); border-radius: 20px; box-shadow: var(--st-card-shadow); padding: 24px 26px;
}
.has-status .st-main .block_payinfo .clear { display: none; }
.has-status .st-main .block_xchdata_line {
  display: block; font-family: var(--font-sans); font-size: 18px; font-weight: 700;
  color: var(--text-primary); font-variant-numeric: tabular-nums; word-break: break-word; min-width: 0;
}
.has-status .st-main .block_xchdata_line span {
  display: block; font-size: 12.5px; font-weight: 400; color: var(--text-muted);
  margin-bottom: 4px; font-variant-numeric: normal;
}

/* Статус + время. По макету статус — крупный заголовок, время под ним:
   column-reverse даёт этот порядок без правки разметки движка. */
.has-status .st-main .block_status { order: -2; }
.has-status .st-main .block_payinfo { order: -1; }
.has-status .st-main .block_status_ins { display: flex; flex-direction: column-reverse; gap: 6px; }
.has-status .st-main .block_status_time { font-family: var(--font-sans); font-size: 13px; color: var(--text-muted); }
.has-status .st-main .block_status_time span { color: var(--text-muted); }
.has-status .st-main .block_status_text {
  display: block; font-family: var(--font-sans); font-size: 20px; font-weight: 800;
  letter-spacing: -.01em; line-height: 1.25; color: var(--text-primary);
}
.has-status .st-main .block_status_text_info { font-size: inherit; font-weight: inherit; color: inherit; }
.has-status .st-main .block_status_bids { font-weight: inherit; color: inherit; }

/* Цветной блок состояния. Движок своей «плашки» не рисует — собираем её из
   .block_status, включая по классу статуса на родителе (он обновляется и по AJAX). */
.has-status .st-main .block_status_payed .block_status,
.has-status .st-main .block_status_coldpay .block_status,
.has-status .st-main .block_status_partpay .block_status,
.has-status .st-main .block_status_realpay .block_status,
.has-status .st-main .block_status_verify .block_status,
.has-status .st-main .block_status_success .block_status,
.has-status .st-main .block_status_coldsuccess .block_status {
  position: relative; background: var(--st-ok-bg); border: 1px solid var(--st-ok-bd);
  border-radius: 14px; padding: 16px 18px 16px 46px;
}
.has-status .st-main .block_status_error .block_status,
.has-status .st-main .block_status_delete .block_status,
.has-status .st-main .block_status_cancel .block_status,
.has-status .st-main .block_status_amlerror .block_status,
.has-status .st-main .block_status_mercherror .block_status,
.has-status .st-main .block_status_payouterror .block_status,
.has-status .st-main .block_status_scrpayerror .block_status {
  position: relative; background: var(--st-err-bg); border: 1px solid var(--st-err-bd);
  border-radius: 14px; padding: 16px 18px 16px 46px;
}
.has-status .st-main [class*="block_status_"] .block_status::before {
  content: ""; position: absolute; left: 18px; top: 17px; width: 20px; height: 20px;
  background-repeat: no-repeat; background-position: center; background-size: 20px 20px;
}
.has-status .st-main .block_status_payed .block_status::before,
.has-status .st-main .block_status_coldpay .block_status::before,
.has-status .st-main .block_status_partpay .block_status::before,
.has-status .st-main .block_status_realpay .block_status::before,
.has-status .st-main .block_status_verify .block_status::before,
.has-status .st-main .block_status_success .block_status::before,
.has-status .st-main .block_status_coldsuccess .block_status::before {
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%232EAD5B' stroke-width='2.4' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M20 6 9 17l-5-5'/%3E%3C/svg%3E");
}
.has-status .st-main .block_status_error .block_status::before,
.has-status .st-main .block_status_delete .block_status::before,
.has-status .st-main .block_status_cancel .block_status::before,
.has-status .st-main .block_status_amlerror .block_status::before,
.has-status .st-main .block_status_mercherror .block_status::before,
.has-status .st-main .block_status_payouterror .block_status::before,
.has-status .st-main .block_status_scrpayerror .block_status::before {
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23E5484D' stroke-width='2.2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='9'/%3E%3Cpath d='m15 9-6 6M9 9l6 6'/%3E%3C/svg%3E");
}
/* цвет текста внутри плашек */
.has-status .st-main .block_status_payed .block_status .block_status_text,
.has-status .st-main .block_status_coldpay .block_status .block_status_text,
.has-status .st-main .block_status_partpay .block_status .block_status_text,
.has-status .st-main .block_status_realpay .block_status .block_status_text,
.has-status .st-main .block_status_verify .block_status .block_status_text,
.has-status .st-main .block_status_success .block_status .block_status_text,
.has-status .st-main .block_status_coldsuccess .block_status .block_status_text { font-size: 18px; color: var(--st-ok-fg); }
.has-status .st-main .block_status_error .block_status .block_status_text,
.has-status .st-main .block_status_delete .block_status .block_status_text,
.has-status .st-main .block_status_cancel .block_status .block_status_text,
.has-status .st-main .block_status_amlerror .block_status .block_status_text,
.has-status .st-main .block_status_mercherror .block_status .block_status_text,
.has-status .st-main .block_status_payouterror .block_status .block_status_text,
.has-status .st-main .block_status_scrpayerror .block_status .block_status_text { font-size: 18px; color: var(--st-err-fg); }
.has-status .st-main [class*="block_status_"] .block_status .block_status_time { opacity: .8; }

/* «другой браузер» / предупреждение мерчанта → аккуратная заметка */
.has-status .st-main .block_change_browse,
.has-status .st-main .block_warning_merch { font-family: var(--font-sans); }
.has-status .st-main .block_change_browser_ins p,
.has-status .st-main .block_warning_merch_ins p { margin: 0; font-size: 12.5px; line-height: 1.5; color: var(--text-muted); }
.has-status .st-main .block_change_browser_ins p { color: #c0392b; }

/* таймер / автопроверка */
.has-status .st-main .block_check_payment { background: var(--surface-sunken); border: 1px solid var(--border-light); border-radius: 16px; padding: 4px; }
.has-status .st-main .block_check_payment_ins:empty { display: none; }

/* кнопки действий */
.has-status .st-main .block_paybutton,
.has-status .st-main .block_paybutton_merch { display: flex; gap: 12px; flex-wrap: wrap; }
.has-status .st-main .block_paybutton_ins,
.has-status .st-main .block_paybutton_merch_ins { display: flex; gap: 12px; flex-wrap: wrap; width: 100%; }
.has-status .st-main a.cancel_paybutton,
.has-status .st-main a.success_paybutton,
.has-status .st-main a.merch_paybutton {
  flex: 1; min-width: 180px; text-align: center; text-decoration: none;
  padding: 14px 18px; border-radius: 14px; font-family: var(--font-sans); font-weight: 700; font-size: 15px; cursor: pointer;
  border: 1px solid var(--border-light); background: var(--has-white); color: var(--text-primary);
  transition: transform var(--dur-fast) var(--ease-out), box-shadow var(--dur-fast) var(--ease-out);
}
.has-status .st-main a.success_paybutton { border: none; background: var(--has-black); color: #fff; }
.has-status .st-main a.cancel_paybutton:hover,
.has-status .st-main a.merch_paybutton:hover { box-shadow: 0 6px 20px rgba(18,16,10,.08); }
.has-status .st-main a.success_paybutton:hover { box-shadow: 0 8px 24px rgba(18,16,10,.18); }

/* ── депозит-зона (оплата: адрес + QR) ────────────────────────────────── */
.has-status .st-main .zone_center { margin: 0; }
.has-status .st-main .zone_center_ins { padding: 0; }
.has-status .st-main .zone_description,
.has-status .st-main .zone_descr { font-family: var(--font-sans); font-size: 13px; line-height: 1.55; color: var(--text-muted); margin: 0 0 10px; }
.has-status .st-main .zone_table { background: var(--surface-sunken); border: 1px solid var(--border-light); border-radius: 16px; padding: 16px 18px; }
.has-status .st-main .zone_div { display: flex; flex-direction: column; gap: 8px; }
.has-status .st-main .zone_title { font-family: var(--font-sans); font-size: 12.5px; color: var(--text-muted); }
.has-status .st-main .zone_copy { position: relative; display: inline-flex; align-items: center; gap: 6px; cursor: pointer; font-weight: 600; color: var(--has-gold-deep); }
.has-status .st-main .zone_copy_abs { position: absolute; top: -28px; left: 0; background: var(--has-black); color: #fff; font-size: 11px; padding: 3px 8px; border-radius: 6px; opacity: 0; pointer-events: none; transition: opacity .18s; }
.has-status .st-main .zone_copy.copied .zone_copy_abs, .has-status .st-main .zone_copy:hover .zone_copy_abs { opacity: 1; }
.has-status .st-main .zone_text { font-family: var(--font-sans); font-size: 16px; color: var(--text-primary); word-break: break-all; line-height: 1.5; padding: 12px 14px; background: var(--has-white); border: 1px solid var(--border-light); border-radius: 12px; cursor: pointer; }
.has-status .st-main .js_qr_code_wrap { display: inline-block; margin-top: 12px; padding: 8px; background: #fff; border: 1px solid var(--border-light); border-radius: 14px; }
.has-status .st-main .js_qr_code_wrap img { display: block; width: 140px; height: 140px; border-radius: 6px; }
.has-status .st-main .zone_form { display: flex; flex-direction: column; gap: 10px; margin-top: 12px; }
.has-status .st-main .zone_form_label { font-family: var(--font-sans); font-size: 12.5px; color: var(--text-muted); }
.has-status .st-main .zone_form input:not(.submit_form) { width: 100%; border: 1px solid var(--border-light); border-radius: 12px; padding: 12px 14px; font-family: var(--font-sans); font-size: 14px; color: var(--text-primary); background: var(--has-white); outline: none; }
.has-status .st-main .zone_form input.submit_form { padding: 13px 18px; border-radius: 12px; border: none; background: var(--has-black); color: #fff; font-family: var(--font-sans); font-weight: 700; font-size: 15px; cursor: pointer; }

/* ── шаг оформления (auto): block_xchangedata / persdata / rule ────────── */
.has-status .st-main .block_xchdata_wrap { display: grid; grid-template-columns: 1fr 1fr; gap: 16px; }
.has-status .st-main .block_xchdata_ins { min-width: 0; }
.has-status .st-main .block_xchdata_title span { font-family: var(--font-sans); font-weight: 700; font-size: 13px; color: var(--text-muted); text-transform: uppercase; letter-spacing: .04em; }
.has-status .st-main .block_xchdata_comm { font-family: var(--font-sans); font-size: 12.5px; color: var(--text-muted); margin-top: 8px; }
.has-status .st-main .block_persdata_title span { font-family: var(--font-sans); font-weight: 800; font-size: 18px; color: var(--text-primary); }
.has-status .st-main .block_persdata_line { font-family: var(--font-sans); font-size: 14px; color: var(--text-primary); padding: 8px 0; border-bottom: 1px solid var(--border-light); }
.has-status .st-main .block_persdata_line span { color: var(--text-muted); margin-right: 6px; }
.has-status .st-main .block_checked_rule { display: flex; align-items: flex-start; gap: 10px; font-family: var(--font-sans); font-size: 13.5px; color: var(--text-secondary); margin-top: 8px; }
.has-status .st-main .block_submitbutton input,
.has-status .st-main #check_rule_step_input { width: 100%; padding: 15px; border-radius: 14px; border: none; background: var(--has-black); color: #fff; font-family: var(--font-sans); font-weight: 700; font-size: 15px; cursor: pointer; margin-top: 12px; }
.has-status .st-main .ajax_post_bids_res .resultgo { margin-top: 10px; }

/* ── ошибки и крайние состояния (истёкшая ссылка, чужой браузер, отказ) ── */
.has-status .st-main .paybutton_error,
.has-status .st-main .resultfalse,
.has-status .st-main .exch_error_ins {
  background: var(--st-err-bg); border: 1px solid var(--st-err-bd); border-radius: 14px;
  padding: 16px 18px; font-family: var(--font-sans); font-size: 14px; line-height: 1.5; color: var(--st-err-fg);
}
.has-status .st-main .resulttrue {
  background: var(--st-ok-bg); border: 1px solid var(--st-ok-bd); border-radius: 14px;
  padding: 16px 18px; font-family: var(--font-sans); font-size: 14px; color: var(--st-ok-fg);
}
.has-status .st-main .exch_error { max-width: 100%; }

/* инструкция по оплате (видна владельцу заявки) */
.has-status .st-main .block_instruction {
  background: var(--st-wait-bg); border: 1px solid var(--st-wait-bd); border-radius: 16px; padding: 16px 18px;
}
.has-status .st-main .block_instruction .text { font-family: var(--font-sans); font-size: 14px; line-height: 1.6; color: var(--text-primary); }
.has-status .st-main .block_instruction .text p { margin: 0 0 9px; }
.has-status .st-main .block_instruction .text p:last-child { margin-bottom: 0; }
.has-status .st-main .block_instruction .text a { color: var(--has-gold-deep); text-decoration: underline; }
.has-status .st-main .block_status_payed .block_instruction,
.has-status .st-main .block_status_success .block_instruction,
.has-status .st-main .block_status_error .block_instruction,
.has-status .st-main .block_status_delete .block_instruction,
.has-status .st-main .block_status_cancel .block_instruction { background: var(--surface-sunken); border-color: var(--border-light); }
/* таймер, если админ вставил [js_timer] */
.has-status .st-main .js_timer, .has-status .st-main .time_span {
  display: inline-block; font-family: var(--font-sans); font-weight: 800; font-size: 26px;
  letter-spacing: .02em; font-variant-numeric: tabular-nums; color: var(--has-gold);
}
.has-status .st-main .js_timer.ending { color: var(--error); }

@media (max-width: 900px) {
  .has-status .st-strip__title { font-size: 24px; }
  .has-status .st-main .notice_message,
  .has-status .st-main .block_statusbids { padding: 18px 16px; }
  .has-status .st-main .block_payinfo { padding: 14px; }
  .has-status .st-main .block_status_text { font-size: 18px; }
  .has-status .st-main .block_paybutton_ins,
  .has-status .st-main .block_paybutton_merch_ins { flex-direction: column; }
  .has-status .st-main .block_instruction { padding: 14px 15px; }
}

@media (max-width: 640px) {
  .has-status .st-main .block_payinfo,
  .has-status .st-main .block_xchdata_wrap { grid-template-columns: 1fr; }
  /* В одну колонку: сбрасываем явные координаты десктопа (иначе «Отдаёте» и
     «Получаете» оба остаются в первой строке и накладываются друг на друга). */
  .has-status .st-main .block_payinfo_give > .block_xchdata_line { grid-area: 1 / 1 / auto / -1; }
  .has-status .st-main .block_payinfo_get > .block_xchdata_line { grid-area: 2 / 1 / auto / -1; }
  .has-status .st-main .block_payinfo .block_xchdata_line.break_words { grid-area: 3 / 1 / auto / -1; }
}

/* ── /checkstatus/ форма ──────────────────────────────────────────────── */
.has-checkstatus .cs-wrap { max-width: 560px; margin: 0 auto; padding: 28px 20px 64px; }
.has-checkstatus .cs-card { background: var(--has-white); border: 1px solid var(--border-light); border-radius: 20px; box-shadow: 0 2px 8px rgba(18,16,10,.04); padding: 26px 28px; }
/* уплощаем вложенную движковую карточку — рамку держит только .cs-card */
.has-checkstatus .cs-card .checkstatus_div,
.has-checkstatus .cs-card .checkstatus_div_ins,
.has-checkstatus .cs-card .checkstatus_div_wrap { background: transparent; border: none; box-shadow: none; padding: 0; margin: 0; }
.has-checkstatus .checkstatus_div_title,
.has-checkstatus .checkstatus_div_title_ins { font-family: var(--font-sans); font-weight: 800; font-size: 19px; color: var(--text-primary); margin: 0 0 16px; }
.has-checkstatus .checkstatus_line,
.has-checkstatus [class*="checkstatus_form_line"] { margin-bottom: 14px; }
.has-checkstatus .checkstatus_div label,
.has-checkstatus .checkstatus_div .label { display: block; font-family: var(--font-sans); font-size: 12.5px; font-weight: 600; color: var(--text-secondary); margin-bottom: 6px; }
.has-checkstatus .checkstatus_div input:not([type="submit"]) { width: 100%; border: 1px solid var(--border-light); border-radius: 12px; padding: 12px 14px; font-family: var(--font-sans); font-size: 14px; color: var(--text-primary); background: var(--surface-sunken); outline: none; }
.has-checkstatus .checkstatus_div input:not([type="submit"]):focus { border-color: var(--has-gold-deep); }
.has-checkstatus .checkstatus_submit,
.has-checkstatus input.checkstatus_submit { width: 100%; padding: 14px; border-radius: 12px; border: none; background: var(--has-black); color: #fff; font-family: var(--font-sans); font-weight: 700; font-size: 15px; cursor: pointer; margin-top: 4px; }
.has-checkstatus .resultgo { margin-top: 14px; font-family: var(--font-sans); font-size: 14px; color: var(--text-secondary); }

/* ── отзывы в сайдбаре: карточки с рамкой (по макету «Статус заявки») ────
   ВАЖНО: правила скоупим под .has-status. Без скоупа они текли на страницы
   направлений (/exchange-*) и ломали там дивайдер-стиль .xch-review. */
.has-status .st-aside .xch-reviews { display: flex; flex-direction: column; gap: 10px; padding: 20px 20px 22px; }
.has-status .st-aside .xch-reviews__title { font-size: 19px; margin-bottom: 4px; }
.has-status .st-aside .xch-review { border: 1px solid var(--border-light); border-radius: 14px; padding: 13px 14px; margin: 0; }
.has-status .st-aside .xch-review__text { font-size: 13px; }
.has-status .st-aside .xch-review__date { font-size: 11.5px; }
.has-status .st-aside .xch-reviews__all { margin-top: 4px; }
/* HAS-STATUS-BLOCK-END */

/* HAS-OFFICES-BLOCK-START */
/* ═══════════════════════════════════════════════════════════════════════
   HAS-OFFICES — страница офисов с картой-превью по макету «Офисы».
   Карточки 2 в ряд: превью карты + «Открыть в Яндекс.Картах», ниже адрес,
   ориентир, график, как добраться, кнопки. Чипы городов в титуле скроллят
   к нужной карточке.
   ═══════════════════════════════════════════════════════════════════════ */

/* чипы городов в титульной полосе */
.off-chips { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 18px; }
.off-chip { display: inline-flex; align-items: center; padding: 8px 14px; border-radius: 999px; border: 1px solid var(--border-light); background: var(--has-white); text-decoration: none; font-family: var(--font-sans); font-weight: 600; font-size: 13.5px; color: var(--text-secondary); white-space: nowrap; transition: border-color .14s ease, color .14s ease, background .14s ease; }
.off-chip:hover { border-color: var(--has-yellow); color: var(--has-gold-deep); background: var(--yellow-wash); }

/* сетка */
.off-wrap { max-width: 1120px; margin: 0 auto; padding: 24px 40px 56px; }
.off-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 18px; }
.off-card { display: flex; flex-direction: column; background: var(--has-white); border: 1px solid var(--border-light); border-radius: 20px; overflow: hidden; box-shadow: 0 2px 8px rgba(18,16,10,.04); scroll-margin-top: 96px; transition: transform .16s cubic-bezier(.22,1,.36,1), box-shadow .16s; }
.off-card:hover { transform: translateY(-2px); box-shadow: 0 12px 30px rgba(18,16,10,.09); }
.off-card:target { border-color: var(--has-yellow); box-shadow: 0 0 0 3px rgba(249,205,46,.28); }

/* карта-превью */
.off-map { position: relative; height: 190px; border-bottom: 1px solid var(--border-light);
  background:
    linear-gradient(var(--border-light) 1px, transparent 1px) 0 0/100% 34px,
    linear-gradient(90deg, var(--border-light) 1px, transparent 1px) 0 0/44px 100%,
    var(--surface-sunken); }
/* реальная карта офиса картинкой (Яндекс static, самохостинг) — перекрывает сетку */
.off-map--img { background-size: cover !important; background-position: center !important; background-repeat: no-repeat !important; }
html.dark .off-map--img, body.dark .off-map--img, [data-theme="dark"] .off-map--img { filter: brightness(.9) contrast(1.02) saturate(.95); }
.off-map__badge { position: absolute; top: 12px; left: 12px; display: inline-flex; align-items: center; gap: 6px; background: var(--has-white); border: 1px solid var(--border-light); border-radius: 999px; padding: 5px 11px; font-family: var(--font-sans); font-weight: 600; font-size: 11.5px; color: var(--text-secondary); }
.off-map__badge svg { color: var(--has-gold); }
.off-map__pin { position: absolute; top: 50%; left: 50%; transform: translate(-50%,-100%); display: inline-flex; align-items: center; justify-content: center; width: 38px; height: 38px; border-radius: 50% 50% 50% 0; background: var(--has-yellow); rotate: -45deg; box-shadow: 0 4px 14px rgba(18,16,10,.18); }
.off-map__pin svg { rotate: 45deg; }
.off-map__link { position: absolute; bottom: 12px; left: 12px; display: inline-flex; align-items: center; gap: 7px; background: var(--has-white); border: 1px solid var(--border-light); border-radius: 12px; padding: 9px 13px; text-decoration: none; font-family: var(--font-sans); font-weight: 700; font-size: 12.5px; color: var(--text-primary); transition: border-color .14s ease; }
.off-map__link:hover { border-color: var(--has-yellow); }
.off-map__link svg { color: var(--has-gold); }

/* тело */
.off-body { padding: 20px 22px 22px; display: flex; flex-direction: column; }
.off-head { display: flex; align-items: flex-start; justify-content: space-between; gap: 12px; margin-bottom: 14px; }
.off-head__l { min-width: 0; }
.off-city { font-family: var(--font-sans); font-weight: 800; font-size: 19px; letter-spacing: -.01em; color: var(--text-primary); }
.off-addr { font-family: var(--font-sans); font-size: 14px; line-height: 1.45; color: var(--text-secondary); margin-top: 3px; }
.off-place { font-family: var(--font-sans); font-size: 13px; color: var(--text-muted); margin-top: 2px; }

.off-status { flex: none; display: inline-flex; align-items: center; gap: 6px; padding: 6px 11px; border-radius: 999px; font-family: var(--font-sans); font-weight: 700; font-size: 12px; white-space: nowrap; }
.off-status::before { content: ""; width: 6px; height: 6px; border-radius: 50%; background: currentColor; }
.off-status--open { background: var(--success-wash); color: #1d7a3f; }
.off-status--appointment { background: var(--yellow-wash); color: #B8860B; }
.off-status--closed { background: var(--surface-sunken); color: var(--text-muted); }

.off-info { display: flex; flex-direction: column; gap: 9px; padding-top: 14px; border-top: 1px solid var(--border-light); }
.off-info__row { display: flex; align-items: flex-start; gap: 10px; font-family: var(--font-sans); font-size: 14px; line-height: 1.45; color: var(--text-secondary); }
.off-info__row svg { color: var(--text-muted); flex: none; margin-top: 1px; }

.off-actions { display: flex; gap: 10px; margin-top: 16px; }
.off-book { flex: 1; display: inline-flex; align-items: center; justify-content: center; gap: 7px; background: var(--has-black); color: #fff; text-decoration: none; font-family: var(--font-sans); font-weight: 700; font-size: 14px; padding: 12px; border-radius: 12px; border: none; cursor: pointer; transition: box-shadow .16s ease; }
.off-book:hover { box-shadow: 0 8px 22px rgba(18,16,10,.18); }
.off-book--closed { background: var(--surface-sunken); color: var(--text-muted); cursor: default; }
.off-book--closed:hover { box-shadow: none; }
.off-chat { flex: none; display: inline-flex; align-items: center; justify-content: center; width: 44px; height: 44px; border-radius: 12px; border: 1px solid var(--border-light); background: var(--has-white); text-decoration: none; color: var(--text-secondary); transition: border-color .14s ease, color .14s ease; }
.off-chat:hover { border-color: var(--has-yellow); color: var(--has-gold-deep); }

/* временно закрыт — приглушаем */
.off-card--closed .off-map { filter: grayscale(.5); opacity: .85; }
.off-card--closed .off-map__pin { background: var(--text-muted); }

/* нижняя заметка */
.off-note { display: flex; align-items: flex-start; gap: 12px; background: var(--has-white); border: 1px solid var(--border-light); border-radius: 16px; padding: 18px 20px; margin-top: 20px; }
.off-note svg { color: var(--has-gold); flex: none; margin-top: 1px; }
.off-note p { font-family: var(--font-sans); font-size: 14px; line-height: 1.6; color: var(--text-secondary); margin: 0; }

@media (max-width: 820px) {
  .off-grid { grid-template-columns: 1fr; }
  .off-wrap { padding: 16px 16px 44px; }
}

/* блок «Города и офисы» на главной: карточки — ссылки на страницу офисов */
a.has-office { text-decoration: none; color: inherit; cursor: pointer; transition: transform .16s cubic-bezier(.22,1,.36,1), box-shadow .16s ease, border-color .16s ease; }
a.has-office:hover { transform: translateY(-2px); box-shadow: 0 10px 26px rgba(18,16,10,.08); border-color: var(--has-yellow); }
.has-offices__more { display: flex; justify-content: center; margin-top: 26px; }
/* HAS-OFFICES-BLOCK-END */

/* HAS-MOBILE-MAIN-START */
/* ═══════════════════════════════════════════════════════════════════════
   HAS-MOBILE-MAIN — мобильная главная по MOBILE-SPEC.md (перелом 860px).
   Телефон: Калькулятор → Отзывы → FAQ → Реферальная → Футер.
   Только мобильные медиа-запросы + шторка. Десктоп не затрагиваем.
   ═══════════════════════════════════════════════════════════════════════ */

/* гамбургер — по умолчанию скрыт (десктоп) */
.hc-burger { display: none; align-items: center; justify-content: center; width: 40px; height: 40px; border-radius: 12px; border: 1px solid var(--border-light); background: var(--has-white); color: var(--text-secondary); cursor: pointer; flex: none; }
.hc-burger:hover { border-color: var(--has-yellow); color: var(--has-gold-deep); }

/* шторка-меню — открывается по клику, до этого скрыта на любом экране */
.hc-drawer { position: fixed; top: 0; right: 0; z-index: 1200; width: 100%; max-width: 400px; height: 100%; background: var(--has-white); box-shadow: -10px 0 44px rgba(18,16,10,.20); display: flex; flex-direction: column; padding: 16px 18px 22px; overflow-y: auto; }
.hc-drawer[hidden] { display: none; }
.hc-drawer__overlay { position: fixed; inset: 0; z-index: 1199; background: rgba(18,16,10,.5); }
.hc-drawer__overlay[hidden] { display: none; }
.hc-drawer__head { display: flex; align-items: center; justify-content: space-between; margin-bottom: 14px; }
.hc-drawer__logo { height: 24px; display: block; }
.hc-drawer__close { display: inline-flex; align-items: center; justify-content: center; width: 40px; height: 40px; border-radius: 12px; border: 1px solid var(--border-light); background: var(--has-white); color: var(--text-secondary); cursor: pointer; }
.hc-drawer__nav { margin-bottom: 8px; }
.hc-drawer__list { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; }
.hc-drawer__list li { border-bottom: 1px solid var(--border-light); }
.hc-drawer__list a { display: block; padding: 15px 6px; font-family: var(--font-sans); font-weight: 700; font-size: 17px; color: var(--text-primary); text-decoration: none; }
.hc-drawer__list a:hover { color: var(--has-gold-deep); }
.hc-drawer__actions { display: flex; flex-direction: column; gap: 10px; margin-top: auto; padding-top: 18px; }
.hc-drawer__actions .hc-btn { display: flex; align-items: center; justify-content: center; height: 48px; padding: 0; border-radius: 12px; font-family: var(--font-sans); font-weight: 600; font-size: 15px; text-decoration: none; border: 1px solid var(--border-light); background: var(--has-white); color: var(--text-primary); }
.hc-drawer__actions .hc-btn--primary { background: var(--has-yellow); color: var(--has-black); border-color: transparent; font-weight: 700; }
/* тег сети в строке метки — на десктопе скрыт (там тег в строке суммы) */
.has-calc__label-net { display: none; margin-left: 8px; vertical-align: middle; }

/* строки «Язык» / «Тема» в шторке — подпись с иконкой + сегмент RU/EN | Светлая/Тёмная */
.hc-drawer__row { display: flex; align-items: center; gap: 12px; margin-top: 12px; }
.hc-drawer__row-lbl { flex: none; display: inline-flex; align-items: center; gap: 8px; font-family: var(--font-sans); font-weight: 600; font-size: 14.5px; color: var(--text-secondary); }
.hc-drawer__row-lbl svg { color: var(--text-muted); flex: none; }
.hc-drawer__seg { flex: 1; display: inline-flex; gap: 4px; padding: 4px; background: var(--surface-sunken); border: 1px solid var(--border-light); border-radius: 12px; }
.hc-drawer__seg-i { flex: 1; display: inline-flex; align-items: center; justify-content: center; padding: 9px 12px; border: none; background: transparent; border-radius: 9px; font-family: var(--font-sans); font-weight: 700; font-size: 13.5px; color: var(--text-muted); text-decoration: none; cursor: pointer; white-space: nowrap; }
.hc-drawer__seg-i.is-active { background: var(--has-yellow); color: var(--has-black); }
/* Telegram / MAX — две кнопки в ряд */
.hc-drawer__social { display: flex; gap: 10px; margin-top: 14px; }
.hc-drawer__soc { flex: 1; display: inline-flex; align-items: center; justify-content: center; gap: 8px; padding: 13px; border-radius: 12px; border: 1px solid var(--border-light); background: var(--has-white); font-family: var(--font-sans); font-weight: 700; font-size: 14px; color: var(--text-primary); text-decoration: none; }
.hc-drawer__soc svg { color: var(--has-gold); flex: none; }

/* мобильный разделитель (между темой и бургером) — на десктопе скрыт */
.hc-mdiv { display: none; width: 1px; height: 22px; background: var(--border-light); flex: none; }

/* ═══════════════ МОБИЛЬНАЯ РАСКЛАДКА (≤ 860px) ═══════════════ */
@media (max-width: 860px) {
  /* ── ШАПКА: логотип + переключатель темы + бургер (тема остаётся, как в дизайне) ── */
  .hc-burger { display: inline-flex; }
  .hc-nav { display: none; }
  .hc-head .hc-icon-btn:not(.hc-theme-toggle),
  .hc-head .hc-divider,
  .hc-head .hc-lang,
  .hc-head .hc-btn { display: none; }
  .hc-head-inner { padding-right: 18px; }
  .hc-mdiv { display: inline-block; }
  /* при скролле — плавающая капсула с отступами по краям (как в дизайне) */
  .hc-head.is-stuck { background: transparent; border-bottom-color: transparent; padding-top: 0; }
  .hc-head.is-stuck .hc-head-inner { max-width: none; margin: 10px 12px 0; background: var(--has-white); border: 1px solid var(--border-light); border-radius: 16px; box-shadow: 0 8px 24px rgba(18,16,10,.12); padding: 10px 16px; }

  /* ── HERO: только карточка калькулятора на всю ширину ── */
  .has-hero__left { display: none; }
  .has-hero__inner { display: block; padding: 16px; }
  .has-hero__right { display: block; justify-content: stretch; }
  .has-hero__calc { max-width: none; width: 100%; }

  /* ── КАЛЬКУЛЯТОР: тег сети — в строку метки, из строки суммы убран,
        чтобы освободить место под ввод суммы; сумма чуть мельче ── */
  .has-pick__net { display: none; }
  .has-calc__label-net { display: inline-flex; }
  .has-calc input.has-calc__input { font-size: 20px; }

  /* ── СКРЫТЫЕ СЕКЦИИ: мониторинги, баннеры, как работает, преимущества,
        направления, города, SEO ── */
  .has-mons,
  #has-cities,
  .has-sec--mobhide,
  .has-sec:has(.has-steps),
  .has-sec:has(.has-advs),
  .has-sec:has(.has-dirs),
  .has-sec:has(.has-seo) { display: none !important; }

  /* ── ФУТЕР: бренд на всю ширину, ссылки в 2 колонки, низ в столбик ── */
  .hc-foot__cols { grid-template-columns: 1fr 1fr; gap: 24px 30px; }
  .hc-foot__brand { grid-column: 1 / -1; }
  .hc-foot__copy { flex-direction: column; align-items: flex-start; gap: 8px; }
}
/* HAS-MOBILE-MAIN-END */

/* ═══════════════════════ Страница 404 ═══════════════════════
   Макет «HASchange - 404». Шапка и подвал общие: has_is_fullwidth() отдаёт
   для 404 полноширинную ветку, поэтому крошек, H1 и сайдбара движка здесь нет.
   Разметка — includes/has_404.php. */
/* main.main даёт 40/80px отступов поверх кремового фона страницы — над и под
   блоком проступали лишние полосы. В макете белое полотно идёт от шапки до
   подвала, свои отступы задаёт .has-404__inner. */
body.error404 main.main { padding-top: 0; padding-bottom: 0; background: var(--has-white); }
.has-404 { background: var(--has-white); }
.has-404__inner {
  max-width: 1120px; margin: 0 auto; padding: 56px 40px 72px;
  display: grid; grid-template-columns: 1.05fr .95fr; gap: 40px; align-items: center;
}
.has-404__num {
  display: block; font-family: var(--font-sans); font-weight: 900; font-size: 132px;
  line-height: .86; letter-spacing: -.04em; color: var(--has-yellow); margin-bottom: 18px;
}
.has-404__title {
  font-family: var(--font-sans); font-weight: 800; font-size: 34px; line-height: 1.14;
  letter-spacing: -.02em; color: var(--text-primary); margin: 0 0 12px;
}
.has-404__text {
  font-family: var(--font-sans); font-size: 16.5px; line-height: 1.6;
  color: var(--text-secondary); margin: 0 0 24px; max-width: 440px;
}
.has-404__btns { display: flex; flex-wrap: wrap; gap: 10px; }
.has-404__btn {
  display: inline-flex; align-items: center; gap: 8px; height: 52px; padding: 0 24px;
  border-radius: 16px; text-decoration: none; font-family: var(--font-sans);
  font-weight: 700; font-size: 16px;
}
.has-404__btn--primary { background: var(--has-yellow); color: var(--has-black); box-shadow: 0 8px 24px rgba(249, 205, 46, .28); }
.has-404__btn--primary:hover { opacity: .92; }
.has-404__btn--ghost { padding: 0 22px; background: var(--has-white); border: 1px solid var(--border-light); color: var(--text-primary); }
.has-404__btn--ghost:hover { border-color: var(--has-gold); }

.has-404__panel { background: var(--has-cream); border: 1px solid var(--border-light); border-radius: 28px; padding: 26px; }
.has-404__over {
  font-family: var(--font-sans); font-size: 12px; font-weight: 700; letter-spacing: .07em;
  text-transform: uppercase; color: var(--text-muted); margin-bottom: 14px;
}
/* Строго одна колонка: в две у подписей ломаются строки и карточки выходят
   разной высоты — это отдельно оговорено в README макета. */
.has-404__links { display: grid; grid-template-columns: minmax(0, 1fr); gap: 10px; }
.has-404__link {
  display: flex; align-items: center; gap: 12px; padding: 14px 16px;
  background: var(--has-white); border: 1px solid var(--border-light); border-radius: 16px;
  text-decoration: none;
  transition: transform .16s cubic-bezier(.22, 1, .36, 1), border-color .16s, box-shadow .16s;
}
.has-404__link:hover { transform: translateY(-2px); border-color: rgba(224, 167, 20, .45); box-shadow: 0 10px 26px rgba(18, 16, 10, .08); }
.has-404__ico {
  flex: none; display: inline-flex; align-items: center; justify-content: center;
  width: 38px; height: 38px; border-radius: 12px; background: var(--has-yellow); color: var(--has-black);
}
.has-404__lt { min-width: 0; }
.has-404__ln { display: block; font-family: var(--font-sans); font-weight: 700; font-size: 15px; color: var(--text-primary); }
.has-404__ls { display: block; font-family: var(--font-sans); font-size: 12.5px; color: var(--text-muted); }

@media (max-width: 860px) {
  .has-404__inner { grid-template-columns: 1fr; gap: 24px; padding: 28px 16px 44px; }
  .has-404__num { font-size: 92px; }
  .has-404__title { font-size: 26px; }
  .has-404__btn { flex: 1 1 100%; justify-content: center; }
}

/* переключатель языка баннера на «Рекламных материалах» (строит has-account.js) */
.has-lk .promo-lang { display: flex; align-items: center; gap: 12px; margin: -6px 0 18px; }
.has-lk .promo-lang__cap { font-family: var(--font-sans); font-size: 13.5px; color: var(--text-secondary); }
.has-lk .promo-lang__seg { display: inline-flex; gap: 2px; padding: 3px; border-radius: 11px; background: var(--surface-sunken); border: 1px solid var(--border-light); }
.has-lk .promo-lang__btn {
  min-width: 46px; padding: 7px 12px; border: none; border-radius: 9px; background: transparent; cursor: pointer;
  font-family: var(--font-sans); font-weight: 700; font-size: 13px; color: var(--text-muted);
}
.has-lk .promo-lang__btn.is-on { background: var(--has-yellow); color: var(--has-black); }

/* Плавающие элементы: кнопка «наверх» стоит над кнопкой JivoChat.
   У обеих кнопок был один и тот же правый нижний угол, поэтому они перекрывались. */
#topped.toright {
  right: 3rem;
  bottom: 11rem;
}
