/* ─── АРТЕЛЬТЕХ · SHARED DESIGN SYSTEM ─── */
/* Mobile-first · Tile-based · Light/Dark */
/* Шрифты подключаются <link>-ами в header.php — параллельно с этим CSS, без
   блокирующего @import. Оба самохостед (assets/fonts/), сторонний CDN не
   используется.

   Manrope        — весь интерфейс, оси 200..800 одним файлом на subset.
   JetBrains Mono — ТОЛЬКО цифры и техданные: номер заявки, телефон, даты,
                    счётчики «3 / 5», временные метки. В моноширинном все
                    цифры одной ширины, поэтому колонки чисел не пляшут при
                    обновлении, а таймстемпы выравниваются сами. */

*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }

/* ══════════════════════════════════════════
   THEME TOKENS
   ══════════════════════════════════════════ */

/* ── LIGHT (default) ── */
:root {
  /* Семейства — токенами: подмена шрифта не должна означать правку сорока файлов. */
  --font: 'Manrope', system-ui, -apple-system, 'Segoe UI', sans-serif;
  --font-mono: 'JetBrains Mono', ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;

  color-scheme: light;
  --bg:       #ffffff;
  --bg2:      #f6f8fa;
  --bg3:      #eef1f6;
  --bg4:      #dfe3ea;
  --accent:   #9a6700;
  --accent-hover: #7d5200;
  --accent-surface: #f0a500;
  --accent-surface-hover: #e09600;
  --accent-dim: rgba(245,166,35,0.08);
  --accent-border: rgba(154,103,0,0.22);
  --text:     #1f2328;
  --text2:    #596168;   /* AA ≥ 7:1 on white */
  --text3:    #6f7680;   /* AA ≥ 4.8:1 — now passes */
  --border:   rgba(0,0,0,0.12);
  --border2:  rgba(0,0,0,0.2);
  --danger:   #d1242f;
  --success:  #1a7f37;
  --info:     #0969da;
  --radius:   14px;
  --radius-sm: 8px;
  --radius-xs: 4px;
  --transition: 0.18s ease;
  --topbar-bg: rgba(255,255,255,0.92);
  --topbar-border: rgba(0,0,0,0.08);
  --card-shadow: 0 1px 3px rgba(0,0,0,0.06), 0 1px 2px rgba(0,0,0,0.04);
  --card-shadow-hover: 0 4px 12px rgba(0,0,0,0.08);
  --shadow-sm: 0 1px 2px rgba(0,0,0,0.06);

  /* Ширина контентной области — ОДНА на весь сайт (28.08.2026). Раньше
     контейнеры расходились: страницы 1160, лендинг 1060, услуги 840,
     консультация 1140 — блоки не совпадали краями при переходе со страницы на
     страницу. Контейнеры считают max-width как `--content` + два поля, поэтому
     менять ширину нужно ЗДЕСЬ и только здесь. */
  --content: 1176px;
  --gutter: 1rem;
}
@media (min-width: 769px) { :root { --gutter: 1.25rem; } }

/* ── DARK ── GitHub-inspired layered surfaces, avoid pure #000 for OLED smear */
[data-theme="dark"] {
  color-scheme: dark;
  --bg:       #0d1117;
  --bg2:      #161b22;
  --bg3:      #1e242d;
  --bg4:      #2a313c;
  --accent:   #f0a500;
  --accent-hover: #ffbc2e;
  --accent-surface: #f0a500;
  --accent-surface-hover: #ffbc2e;
  --accent-dim: rgba(240,165,0,0.14);
  --accent-border: rgba(240,165,0,0.32);
  --text:     #e6edf3;
  --text2:    #9ea7b3;   /* WCAG AA ≥ 5.5:1 on --bg */
  --text3:    #8b949e;   /* WCAG AA ≥ 4.7:1 — now passes for small text */
  --border:   rgba(255,255,255,0.09);
  --border2:  rgba(255,255,255,0.16);
  --danger:   #ff6b63;
  --success:  #56d364;
  --info:     #79b8ff;
  --topbar-bg: rgba(13,17,23,0.9);
  --topbar-border: rgba(255,255,255,0.09);
  --card-shadow: 0 1px 3px rgba(0,0,0,0.35);
  --card-shadow-hover: 0 6px 18px rgba(0,0,0,0.45);
  --shadow-sm: 0 1px 2px rgba(0,0,0,0.35);
}

/* ══════════════════════════════════════════
   GLOBAL RESETS
   ══════════════════════════════════════════ */
html { scroll-behavior: smooth; }

body {
  font-family: var(--font);
  background: var(--bg);
  color: var(--text);
  font-size: 16px;          /* mobile-first 16px → no iOS auto-zoom */
  line-height: 1.55;
  min-height: 100dvh;
  touch-action: manipulation;
  transition: background 0.3s ease, color 0.3s ease;
  -webkit-tap-highlight-color: transparent;
  padding-bottom: 72px;
}

@media (min-width: 769px) {
  body { padding-bottom: 0; font-size: 14px; line-height: 1.6; }
}

a { color: var(--accent); text-decoration: none; transition: color var(--transition); }
a:hover { color: var(--accent-hover); }

/* ── Базовая типографика (замена main.css) ── */
/* `overflow-x: clip`, а не `hidden`: hidden делает элемент контейнером
   прокрутки, и от этого молча ломается `position: sticky` — шапка уезжала
   вверх вместе со страницей на любой длинной странице (нашлось 28.08.2026).
   clip так же отрезает горизонтальное переполнение, но контейнер прокрутки не
   создаёт, и прилипание работает. */
html {
  background: var(--bg);
  overflow-x: clip;
}
body {
  overflow-x: clip;
}

/* ── Legacy утилиты, ранее в main.css ── */
._hide, ._hidden, [hidden] { display: none !important; }
.cross::before, .cross::after { content: ''; }

/* ── Глобальный поиск (dropdown) ── */
.global_search_wrapper { position: relative; }
.searchbar-wrap {
  position: relative;
  transition: max-height .25s ease, opacity .2s ease, padding .2s ease;
  max-height: 80px; opacity: 1;
}
.searchbar-wrap.is-collapsed {
  max-height: 0; opacity: 0;
  padding-top: 0 !important; padding-bottom: 0 !important;
  border: 0 !important; pointer-events: none;
  overflow: hidden;
}
.searchbar { position: relative; }
.searchbar-close {
  background: transparent !important; border: 0 !important;
  padding: 0 14px !important;
  cursor: pointer; color: var(--text3);
  display: inline-flex; align-items: center; justify-content: center;
  min-height: 44px;
}
.searchbar-close:hover { color: var(--danger); }
.global_search_dropdown {
  display: none;
  position: absolute;
  left: 50%; transform: translateX(-50%);
  top: calc(100% + 6px);
  width: calc(100% - 2rem); max-width: 600px;
  background: var(--bg2);
  border: 1px solid var(--border2);
  border-radius: var(--radius-sm);
  box-shadow: 0 10px 28px rgba(0,0,0,0.18);
  max-height: 420px;
  overflow-y: auto;
  z-index: 1000;
}
.global_search_dropdown.show { display: block; }
.global_search_dropdown_section { padding: 6px 0; }
.global_search_dropdown_section:not(:first-child) { border-top: 1px solid var(--border); }
.global_search_dropdown_title {
  padding: 6px 14px;
  font-size: 11px; font-weight: 600;
  text-transform: uppercase; letter-spacing: 0.5px;
  color: var(--text3);
}
.global_search_dropdown_item {
  display: block; padding: 10px 14px;
  text-decoration: none; color: var(--text);
  transition: background 0.15s;
  cursor: pointer; text-align: left;
  border: 0; background: transparent;
  width: 100%; font-family: inherit; font-size: 14px;
}
.global_search_dropdown_item:hover,
.global_search_dropdown_item:focus-visible {
  background: var(--bg3); color: var(--text); outline: none;
}
.global_search_dropdown_item_title { font-weight: 600; margin-bottom: 2px; }
.global_search_dropdown_item_meta { font-size: 12px; color: var(--text3); }
.global_search_dropdown_empty {
  padding: 20px 14px; text-align: center;
  color: var(--text3); font-size: 13px;
}
h1, h2, h3, h4, h5, h6 { color: var(--text); font-weight: 600; line-height: 1.25; margin: 0 0 0.75em; letter-spacing: -0.3px; }
h1 { font-size: 24px; font-weight: 600; letter-spacing: -0.5px; }
h2 { font-size: 18px; font-weight: 600; }
h3 { font-size: 16px; font-weight: 600; }
h4 { font-size: 14px; font-weight: 500; }
p  { margin: 0 0 0.75em; color: var(--text); font-weight: 400; }
b, strong { font-weight: 600; }
p:last-child { margin-bottom: 0; }
ul, ol { margin: 0 0 0.75em 1.25em; color: var(--text); }
ul:last-child, ol:last-child { margin-bottom: 0; }
nav ul { list-style: none; margin: 0; padding: 0; }
img, svg, video { max-width: 100%; height: auto; display: block; }
hr { border: 0; border-top: 1px solid var(--border); margin: 1rem 0; }
button { font-family: inherit; }
table { border-collapse: collapse; width: 100%; }

/* ── Структурные классы из старой темы ── */
.wrap {
  max-width: calc(var(--content) + 2 * var(--gutter)); margin: 0 auto;
  padding: 0 var(--gutter); position: relative;
}

section.page, section.single, section.add_new, section.home_about, section.services,
section.services_archive, section.projects_archive {
  padding: 1.25rem 0 2rem;
}
@media (min-width: 769px) {
  section.page, section.single, section.add_new { padding: 1.5rem 0 3rem; }
}

/* ══════════════════════════════════════════
   ACCESSIBILITY
   ══════════════════════════════════════════ */
:focus-visible {
  outline: 2px solid var(--accent-surface);
  outline-offset: 2px;
  border-radius: var(--radius-xs);
}
:focus:not(:focus-visible) { outline: none; }

.skip-link {
  position: fixed; top: -100%;
  left: 50%; transform: translateX(-50%);
  background: var(--accent-surface); color: #000;
  padding: 10px 24px; border-radius: 0 0 var(--radius-sm) var(--radius-sm);
  font-size: 14px; font-weight: 600;
  z-index: 9999; transition: top 0.2s;
}
.skip-link:focus { top: 0; color: #000; }

/* Универсальный press-feedback: scale(0.97) на кнопках/ссылках/карточках */
button:not(:disabled):active,
.btn:not(:disabled):active,
a.btn:active,
a.btn-cta:active,
.bottom-nav-item:active,
.card:active,
.tile:active,
.project-card:active,
.conversation-item:active {
  transform: scale(0.97);
  transition-duration: 80ms;
}

@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after {
    animation-duration: 0.01ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: 0.01ms !important;
  }
  /* Отключаем transform-press, чтобы не было микро-скачков */
  button:active, .btn:active, a.btn:active, a.btn-cta:active,
  .icon-btn:active, .bottom-nav-item:active, .bottom-nav-cta:active .nav-cta-circle,
  .card:active, .tile:active, .project-card:active, .conversation-item:active,
  /* A1: те же гарантии для добавленных элементов */
  .adm_btn:active, .dash-card:active, .dash-funnel-row:active,
  .noty-btn:active, .qr-btn:active, .voice_msg_play:active, .voice_msg_rate:active,
  .project-file-item:active, .project-file-preview:active,
  input[type="submit"]:active, button[type="submit"]:active {
    transform: none !important;
  }
  html { scroll-behavior: auto; }
}

/* ══════════════════════════════════════════
   TOPBAR
   ══════════════════════════════════════════ */
/* Обёртка-landmark вокруг топбара.
   `display: contents` — не косметика: у body стоит overflow-x, из-за чего
   обычная обёртка ломала прилипание шапки (sticky работал относительно
   родителя высотой ровно в топбар, и шапка уезжала со страницей). С contents
   бокса нет вовсе — топбар остаётся прямым потомком body по раскладке, а
   <header> остаётся в дереве доступности как ориентир. */
.site-header { display: contents; }

.topbar {
  position: sticky; top: 0; z-index: 100;
  /* Резервируем место под system status bar в PWA/WebView edge-to-edge.
     В обычном браузере env() = 0 → высота 56px как раньше. */
  height: calc(56px + env(safe-area-inset-top, 0px));
  padding-top: env(safe-area-inset-top, 0px);
  background: var(--topbar-bg);
  backdrop-filter: blur(14px);
  -webkit-backdrop-filter: blur(14px);
  border-bottom: 1px solid var(--topbar-border);
  display: flex; align-items: center;
  padding-left: 1rem;
  padding-right: 1rem;
  gap: 0.75rem;
  box-shadow: var(--shadow-sm);
}

@media (min-width: 769px) {
  .topbar { padding-left: 1.25rem; padding-right: 1.25rem; gap: 1rem; }
}

.topbar-logo {
  display: flex; align-items: center; gap: 9px;
  text-decoration: none; flex-shrink: 0;
}
.topbar-logo-icon {
  width: 30px; height: 30px;
  background: var(--accent-surface);
  border-radius: 7px;
  display: flex; align-items: center; justify-content: center;
}
.topbar-logo-icon svg { width: 16px; height: 16px; }
.topbar-logo-text { font-size: 15px; font-weight: 700; color: var(--text); letter-spacing: -0.3px; }

.topbar-nav {
  display: none; gap: 1.25rem; align-items: center;
  margin-left: 0.5rem;
}
@media (min-width: 769px) {
  .topbar-nav { display: flex; }
}
.topbar-nav a {
  color: var(--text2); font-size: 13px; font-weight: 500;
  transition: color var(--transition);
}
.topbar-nav a:hover { color: var(--text); }
.topbar-nav a.active {
  color: var(--accent);
  position: relative;
}
.topbar-nav a.active::after {
  content: '';
  position: absolute;
  bottom: -18px; left: 0; right: 0;
  height: 2px;
  background: var(--accent-surface);
  border-radius: 2px;
}

.topbar-spacer { flex: 1; }

.topbar-actions { display: flex; align-items: center; gap: 8px; }

/* Бургер: только мобильный — на десктопе меню в .topbar-nav.
   `!important` вынужденный: 08-polish.css красит все кнопки топбара правилом
   `body.newui .topbar .icon-btn { display:inline-flex !important }` — без
   important здесь media-скрытие молча проигрывает ему. */
.icon-btn.topbar-burger { display: flex; }
@media (min-width: 769px) {
  body.newui .topbar .icon-btn.topbar-burger { display: none !important; }
}
.topbar-burger .burger-x { display: none; }
.topbar-burger.is-open .burger-lines { display: none; }
.topbar-burger.is-open .burger-x { display: block; }

.topbar-mobile-menu {
  position: fixed;
  top: calc(56px + env(safe-area-inset-top, 0px));
  left: 0; right: 0; z-index: 99;
  background: var(--topbar-bg);
  backdrop-filter: blur(14px);
  -webkit-backdrop-filter: blur(14px);
  border-bottom: 1px solid var(--topbar-border);
  padding: 0.25rem 1rem 0.5rem;
  box-shadow: var(--shadow-sm);
  animation: topbarMenuIn 0.18s ease-out;
}
@media (min-width: 769px) { .topbar-mobile-menu { display: none; } }
@keyframes topbarMenuIn {
  from { opacity: 0; transform: translateY(-6px); }
  to   { opacity: 1; transform: none; }
}
@media (prefers-reduced-motion: reduce) { .topbar-mobile-menu { animation: none; } }
.topbar-mobile-ul { list-style: none; margin: 0; padding: 0; }
.topbar-mobile-ul li + li { border-top: 1px solid var(--border2); }
.topbar-mobile-ul a {
  display: flex; align-items: center;
  min-height: 48px;
  color: var(--text); font-size: 15px; font-weight: 500;
  text-decoration: none;
}
.topbar-mobile-ul .current-menu-item > a,
.topbar-mobile-ul .current_page_item > a { color: var(--accent); }

.btn-cta {
  background: var(--accent-surface); color: #000;
  font-weight: 600; font-size: 12px;
  padding: 8px 14px; border-radius: var(--radius-sm);
  text-decoration: none; white-space: nowrap;
  transition: background var(--transition), transform 0.12s ease;
  border: none; cursor: pointer;
  min-height: 36px;
}
.btn-cta:hover { background: var(--accent-surface-hover); color: #000; }
.btn-cta:active { transform: scale(0.97); }

/* Hide CTA on mobile — bottom nav has it */
@media (max-width: 768px) {
  .topbar-actions .btn-cta { display: none; }
}

.icon-btn {
  width: 40px; height: 40px;
  background: transparent; border: 1px solid var(--border2);
  border-radius: var(--radius-sm);
  display: flex; align-items: center; justify-content: center;
  color: var(--text2); cursor: pointer; transition: all var(--transition);
  text-decoration: none; position: relative;
  flex-shrink: 0;
}
.icon-btn:hover { background: var(--bg3); color: var(--text); border-color: var(--border2); }
.icon-btn:active { transform: scale(0.94); transition-duration: 80ms; }
.icon-btn .badge-dot {
  position: absolute; top: -2px; right: -2px;
  width: 8px; height: 8px; border-radius: 50%;
  background: var(--danger); border: 2px solid var(--bg);
}
/* Numeric variant: native pushes unread count → бейдж с числом */
.icon-btn .badge-dot.badge-dot--count {
  width: auto; height: 16px; min-width: 16px;
  padding: 0 5px; border-radius: 10px;
  color: #fff; font-size: 11px; line-height: 12px; font-weight: 600;
  display: inline-flex; align-items: center; justify-content: center;
  top: -4px; right: -4px;
}

/* ── THEME TOGGLE ── показывает ТЕКУЩУЮ тему */
.theme-toggle .icon-sun { display: block; }
.theme-toggle .icon-moon { display: none; }
[data-theme="dark"] .theme-toggle .icon-sun { display: none; }
[data-theme="dark"] .theme-toggle .icon-moon { display: block; }

.topbar-user {
  display: flex; align-items: center; gap: 7px;
  padding: 4px 10px; border-radius: var(--radius-sm);
  border: 1px solid var(--border); cursor: pointer;
  transition: background var(--transition); text-decoration: none; color: var(--text);
}
.topbar-user:hover { background: var(--bg3); color: var(--text); }
.topbar-avatar {
  width: 28px; height: 28px; border-radius: 50%;
  background: var(--accent-surface); color: #000;
  display: flex; align-items: center; justify-content: center;
  font-size: 11px; font-weight: 700;
}
.topbar-username { font-size: 12px; font-weight: 600; }
@media (max-width: 768px) {
  .topbar-username { display: none; }
  .topbar-user { padding: 4px; border: none; }
}

/* ══════════════════════════════════════════
   BOTTOM NAVIGATION (Mobile)
   ══════════════════════════════════════════ */
.bottom-nav {
  position: fixed; bottom: 0; left: 0; right: 0;
  z-index: 200;
  /* Фон НЕПРОЗРАЧНЫЙ и без backdrop-filter — намеренно.
     Полупрозрачность с размытием заставляет iOS вынести фиксированную панель
     в отдельный слой композитинга, а его Safari не переставляет во время
     скролла: панель зримо отрывается от края и возвращается на место только
     когда прокрутка остановилась. Плюс сквозь неё просвечивал текст. */
  background: var(--bg2);
  border-top: 1px solid var(--border);
  display: flex; align-items: stretch;
  /* Высота включает safe-area, а не съедается ею. При box-sizing:border-box
     padding-bottom вычитается ИЗНУТРИ, и на iPhone с home-индикатором (34px)
     полоса содержимого схлопывалась с 64px до 30px: иконки прижимались,
     а кружок CTA сплющивался в овал. */
  height: calc(64px + env(safe-area-inset-bottom, 0px));
  padding-bottom: env(safe-area-inset-bottom, 0px);
  box-shadow: 0 -1px 8px rgba(0,0,0,0.06);
}
[data-theme="dark"] .bottom-nav {
  box-shadow: 0 -1px 8px rgba(0,0,0,0.3);
}

@media (min-width: 769px) {
  .bottom-nav { display: none; }
}

.bottom-nav-item {
  flex: 1;
  display: flex; flex-direction: column;
  align-items: center; justify-content: center;
  gap: 2px;
  color: var(--text3);
  text-decoration: none;
  font-size: 10px; font-weight: 600;
  transition: color var(--transition);
  position: relative;
  -webkit-tap-highlight-color: transparent;
}
/* Подписей больше нет — иконка крупнее и стоит по центру пункта.
   26px: меньше выглядит потерянно в 64px-полосе, больше — липнет к краям. */
.bottom-nav-item svg { width: 26px; height: 26px; flex-shrink: 0; }
.bottom-nav-item:active { opacity: 0.7; }
.bottom-nav-item.active { color: var(--accent); }
.bottom-nav-item.active::before {
  content: '';
  position: absolute; top: 0; left: 25%; right: 25%;
  height: 2px;
  background: var(--accent-surface);
  border-radius: 0 0 2px 2px;
}

.bottom-nav-cta {
  position: relative;
}
.bottom-nav-cta .nav-cta-circle {
  width: 48px; height: 48px;
  /* Кружок — флекс-элемент в колоночном контейнере, то есть сжимается по
     ВЫСОТЕ. Без запрета любая нехватка места делает из круга овал: ширина
     остаётся 48px, высота уезжает. Круглость важнее умещаемости. */
  flex-shrink: 0;
  aspect-ratio: 1;
  background: var(--accent-surface);
  border-radius: 50%;
  display: flex; align-items: center; justify-content: center;
  /* Без подписи кружок центрируется сам — прежний отрицательный отступ
     поднимал его под текст и теперь ломал бы выравнивание ряда. */
  margin-top: 0;
  box-shadow: 0 2px 8px rgba(240,165,0,0.3);
  transition: transform 0.15s ease;
}
.bottom-nav-cta .nav-cta-circle svg { color: #000; width: 20px; height: 20px; }
.bottom-nav-cta:active .nav-cta-circle { transform: scale(0.93); }

/* Шесть пунктов у вошедшего (последний — QR): на узком экране слот равен
   ~53px, и кружок 48px упирается в соседей. Ужимаем всё вместе, а не только
   кружок, иначе ряд перестаёт читаться как ряд. */
@media (max-width: 360px) {
  .bottom-nav-item svg { width: 23px; height: 23px; }
  .bottom-nav-cta .nav-cta-circle { width: 42px; height: 42px; }
  .bottom-nav-cta .nav-cta-circle svg { width: 18px; height: 18px; }
}

/* ══════════════════════════════════════════
   SEARCH BAR
   ══════════════════════════════════════════ */
.searchbar-wrap {
  background: var(--bg2);
  border-bottom: 1px solid var(--border);
  padding: 10px 1rem;
}
@media (min-width: 769px) {
  .searchbar-wrap { padding: 10px 1.25rem; }
}
.searchbar {
  max-width: 600px; margin: 0 auto;
  display: flex; align-items: center;
  background: var(--bg3); border: 1px solid var(--border2);
  border-radius: var(--radius-sm); overflow: hidden;
}
.searchbar input {
  flex: 1; background: transparent; border: none; outline: none;
  color: var(--text); font-family: inherit; font-size: 15px;
  padding: 10px 14px;
  min-height: 44px;
}
@media (min-width: 769px) {
  .searchbar input { font-size: 13px; padding: 8px 12px; min-height: 0; }
}
.searchbar input::placeholder { color: var(--text3); }
.searchbar button {
  background: transparent; border: none;
  padding: 0 14px; cursor: pointer; color: var(--text2);
  display: flex; align-items: center;
  min-height: 44px;
}

/* ══════════════════════════════════════════
   BREADCRUMB
   ══════════════════════════════════════════ */
.breadcrumb {
  display: flex; align-items: center; gap: 6px;
  font-size: 12px; color: var(--text3); margin-bottom: 8px;
  overflow-x: auto; white-space: nowrap;
  -webkit-overflow-scrolling: touch;
}
.breadcrumb a { color: var(--text3); }
.breadcrumb a:hover { color: var(--text2); }
.breadcrumb span { color: var(--text3); }

/* ══════════════════════════════════════════
   PAGE LAYOUT
   ══════════════════════════════════════════ */
.page-wrap {
  max-width: calc(var(--content) + 2 * var(--gutter)); margin: 0 auto;
  padding: 1.25rem var(--gutter) 2rem;
}
@media (min-width: 769px) {
  .page-wrap { padding: 1.5rem var(--gutter) 3rem; }
}

.page-header {
  display: flex; align-items: center; justify-content: space-between;
  flex-wrap: wrap; gap: 10px; margin-bottom: 1.25rem;
}
.page-title { font-size: 20px; font-weight: 700; letter-spacing: -0.4px; }

/* ══════════════════════════════════════════
   BUTTONS
   ══════════════════════════════════════════ */
.btn {
  display: inline-flex; align-items: center; gap: 6px;
  padding: 10px 16px; border-radius: var(--radius-sm);
  font-family: inherit; font-size: 13px; font-weight: 600;
  cursor: pointer; border: 1px solid var(--border2);
  background: var(--bg3); color: var(--text);
  transition: all var(--transition); text-decoration: none; white-space: nowrap;
  min-height: 44px;
}
@media (min-width: 769px) {
  .btn { padding: 8px 14px; font-size: 12px; min-height: 34px; }
}
.btn:hover { background: var(--bg4); border-color: var(--border2); color: var(--text); }
.btn:active { transform: scale(0.97); }
.btn svg { width: 14px; height: 14px; flex-shrink: 0; }
.btn-primary { background: var(--accent-surface); color: #000; border-color: transparent; }
.btn-primary:hover { background: var(--accent-surface-hover); color: #000; }
.btn-danger { background: rgba(248,81,73,0.12); color: var(--danger); border-color: rgba(248,81,73,0.25); }
.btn-danger:hover { background: rgba(248,81,73,0.2); }
.btn-success { background: rgba(63,185,80,0.1); color: var(--success); border-color: rgba(63,185,80,0.25); }

/* ══════════════════════════════════════════
   CARDS (base tile/card component)
   ══════════════════════════════════════════ */
.card {
  background: var(--bg2);
  border: 1px solid var(--border);
  border-radius: var(--radius);
  padding: 1rem;
  box-shadow: var(--card-shadow);
  transition: box-shadow var(--transition), border-color var(--transition);
}
.card:hover {
  box-shadow: var(--card-shadow-hover);
}

/* ══════════════════════════════════════════
   STAT TILES (mobile-first grid)
   ══════════════════════════════════════════ */
.stats-row {
  display: grid;
  grid-template-columns: repeat(2, 1fr);
  gap: 10px; margin-bottom: 1.5rem;
}
@media (min-width: 600px) {
  .stats-row { grid-template-columns: repeat(4, 1fr); }
}
.stat-card {
  background: var(--bg2); border: 1px solid var(--border);
  border-radius: var(--radius); padding: 1.1rem;
  box-shadow: var(--card-shadow);
  transition: box-shadow var(--transition);
}
.stat-card:hover { box-shadow: var(--card-shadow-hover); }
.stat-card .num {
  font-size: 26px; font-weight: 700;
  color: var(--accent); letter-spacing: -1px;
}
.stat-card .lbl { font-size: 12px; color: var(--text3); margin-top: 2px; }

/* ══════════════════════════════════════════
   TABLE (desktop) + CARD LIST (mobile)
   ══════════════════════════════════════════ */
.table-wrap {
  background: var(--bg2); border: 1px solid var(--border);
  border-radius: var(--radius); overflow: hidden; margin-bottom: 1.5rem;
  box-shadow: var(--card-shadow);
}

/* Mobile: convert table rows to stacked cards */
@media (max-width: 768px) {
  .table-wrap { background: transparent; border: none; box-shadow: none; overflow: visible; }
  .table-wrap .overflow-x { overflow: visible; }
  .table-wrap table { display: block; }
  .table-wrap thead { display: none; }
  .table-wrap tbody { display: flex; flex-direction: column; gap: 10px; }
  .table-wrap tbody tr {
    display: grid;
    grid-template-columns: auto 1fr auto;
    gap: 4px 12px;
    background: var(--bg2);
    border: 1px solid var(--border);
    border-radius: var(--radius);
    padding: 14px;
    box-shadow: var(--card-shadow);
  }
  .table-wrap tbody tr:hover { background: var(--bg3); }
  .table-wrap tbody td {
    padding: 2px 0; font-size: 13px;
  }
  /* Title spans full width */
  .table-wrap tbody td:nth-child(3) {
    grid-column: 1 / -1;
    order: -2;
    font-size: 14px; font-weight: 600;
    padding-bottom: 6px;
  }
  /* ID + Date on same row */
  .table-wrap tbody td.td-id {
    order: -1;
    font-size: 11px;
  }
  .table-wrap tbody td.td-date {
    order: -1;
    text-align: right;
    grid-column: 2 / -1;
  }
  /* Hide less important cols on small screens */
  .table-wrap tbody td:nth-child(4) { display: none; } /* Author */
  .table-wrap tbody td:nth-child(5) { grid-column: 1 / 2; } /* Status */
  .table-wrap tbody td:nth-child(6) { grid-column: 2 / 3; text-align: right; } /* Executor */
  .table-wrap tbody td:nth-child(7) { grid-column: 3; } /* Actions */
}

/* Desktop table */
@media (min-width: 769px) {
  table { width: 100%; border-collapse: collapse; }
  thead tr { border-bottom: 1px solid var(--border); }
  thead th {
    text-align: left; padding: 10px 14px;
    font-size: 11px; font-weight: 600; letter-spacing: 0.8px;
    text-transform: uppercase; color: var(--text3);
  }
  tbody tr {
    border-bottom: 1px solid var(--border);
    transition: background var(--transition);
  }
  tbody tr:last-child { border-bottom: none; }
  tbody tr:hover { background: var(--bg3); }
  tbody td { padding: 10px 14px; font-size: 13px; }
}

/* Always visible */
.td-id { color: var(--text2); font-size: 12px; font-weight: 600; }
.td-date { color: var(--text3); font-size: 12px; }
.td-link { color: var(--accent); font-weight: 600; }
.td-link:hover { color: var(--accent-hover); }
.td-muted { color: var(--text2); }

.badge {
  display: inline-flex; align-items: center;
  padding: 3px 10px; border-radius: var(--radius-sm); font-size: 11px; font-weight: 600;
}
.badge-publish { background: rgba(63,185,80,0.12); color: var(--success); }
.badge-draft   { background: var(--bg4); color: var(--text3); }
.badge-admin   { background: rgba(88,166,255,0.12); color: var(--info); }
.badge-exec    { background: var(--accent-dim); color: var(--accent); }

.action-btns { display: flex; gap: 6px; align-items: center; }
.action-icon {
  width: 40px; height: 40px; border-radius: var(--radius-sm);
  background: transparent; border: 1px solid var(--border);
  display: flex; align-items: center; justify-content: center;
  cursor: pointer; color: var(--text2);
  transition: all var(--transition); text-decoration: none;
}
.action-icon svg { width: 15px; height: 15px; }
.action-icon:hover { background: var(--bg4); color: var(--text); border-color: var(--border2); }
.action-icon.del:hover { background: rgba(248,81,73,0.1); color: var(--danger); border-color: rgba(248,81,73,0.25); }

/* ══════════════════════════════════════════
   SECTION DIVIDER
   ══════════════════════════════════════════ */
.section-label {
  font-size: 16px; font-weight: 700;
  letter-spacing: -0.3px; margin-bottom: 1rem;
  display: flex; align-items: center; gap: 8px;
}
.section-label::after {
  content: ''; flex: 1; height: 1px;
  background: var(--border);
}

/* ══════════════════════════════════════════
   MAP BUTTON (panel)
   ══════════════════════════════════════════ */
.map-btn {
  display: inline-flex; align-items: center; gap: 8px;
  padding: 12px 18px; border-radius: var(--radius-sm);
  background: var(--bg2); border: 1px solid var(--border);
  color: var(--text); font-family: inherit; font-size: 13px;
  font-weight: 600; cursor: pointer; transition: all var(--transition);
  text-decoration: none; margin-bottom: 1.5rem;
  box-shadow: var(--card-shadow);
  width: 100%;
  justify-content: center;
}
@media (min-width: 769px) {
  .map-btn { width: auto; justify-content: flex-start; }
}
.map-btn:hover { background: var(--bg3); color: var(--text); box-shadow: var(--card-shadow-hover); }
.map-btn svg { color: var(--accent); }

/* ══════════════════════════════════════════
   FOOTER
   ══════════════════════════════════════════ */
.site-footer {
  border-top: 1px solid var(--border);
  padding: 1.25rem var(--gutter);
  max-width: calc(var(--content) + 2 * var(--gutter)); margin: 0 auto;
  display: flex; flex-wrap: wrap;
  gap: 1rem; justify-content: space-between; align-items: center;
}
@media (max-width: 768px) {
  .site-footer { padding-bottom: 80px; } /* above bottom nav */
}
.site-footer p { font-size: 12px; color: var(--text3); }
.footer-links { display: flex; gap: 1rem; flex-wrap: wrap; }
.footer-links a { font-size: 12px; color: var(--text3); }
.footer-links a:hover { color: var(--text2); }

/* ══════════════════════════════════════════
   UTILITIES
   ══════════════════════════════════════════ */
.overflow-x { overflow-x: auto; -webkit-overflow-scrolling: touch; }

/* Hidden heading for accessibility */
.sr-only {
  position: absolute; width: 1px; height: 1px;
  padding: 0; margin: -1px; overflow: hidden;
  clip: rect(0,0,0,0); white-space: nowrap; border: 0;
}

/* ═══════════════ Отклик на нажатие (A1) ═══════════════
   Press-эффект уже был у .btn/.btn-cta/.icon-btn/.bottom-nav-cta. Здесь —
   всё остальное кликабельное, что оставалось «мёртвым» на палец: админские
   кнопки, карточки дашборда, плеер голосовых, файлы заявки.

   Только transform — идёт на композиторе, не вызывает пересчёт лейаута.
   Длительность 120 мс: короче ощущается дёрганьем, длиннее — вязкостью. */
.adm_btn,
.dash-card,
.dash-funnel-row,
.noty-btn,
.qr-btn,
.voice_msg_play,
.voice_msg_rate,
.project-file-item,
.project-file-preview,
.bottom-nav-item,
button.pe-input,
input[type="submit"],
button[type="submit"] {
  transition: transform 120ms ease, opacity 120ms ease;
  -webkit-tap-highlight-color: transparent;
  touch-action: manipulation;
}
.adm_btn:active,
.noty-btn:active,
.qr-btn:active,
input[type="submit"]:active,
button[type="submit"]:active { transform: scale(0.97); }

/* Карточки и строки — слабее: крупный элемент при scale(.97) «прыгает». */
.dash-card:active,
.dash-funnel-row:active,
.project-file-item:active,
.project-file-preview:active { transform: scale(0.985); }

/* Мелкие круглые кнопки — сильнее, иначе нажатие незаметно. */
.voice_msg_play:active,
.voice_msg_rate:active { transform: scale(0.92); }

/* Отключённые кнопки не должны реагировать — иначе обещают действие. */
.adm_btn:disabled:active,
.noty-btn:disabled:active,
button:disabled:active,
input[type="submit"]:disabled:active { transform: none; }

/* ═══════════════ Переходы между страницами (A4) ═══════════════
   Кроссфейд вместо резкой смены. Chrome/Android поддерживают, Safari/iOS
   игнорирует директиву целиком — деградация штатная, ничего не ломается. */
@view-transition { navigation: auto; }

::view-transition-old(root),
::view-transition-new(root) {
  animation-duration: 180ms;
}

/* ═══════ Согласие на cookie (inc/consent.php) ═══════
   Нижняя панель, не модалка: она ничего не перекрывает и не требует
   немедленного решения — читать сайт можно и не отвечая. Метрика при этом
   не работает, пока не нажали «Принять». */
.consent {
  position: fixed; z-index: 900;
  left: 0; right: 0; bottom: 0;
  padding: 12px;
  background: var(--bg2);
  border-top: 1px solid var(--border);
  box-shadow: 0 -8px 28px rgba(0, 0, 0, 0.16);
}
.consent[hidden] { display: none; }
.consent-inner {
  max-width: 1100px; margin: 0 auto;
  display: flex; flex-direction: column; gap: 12px;
}
.consent-text {
  margin: 0; font-size: 13.5px; line-height: 1.55; color: var(--text2);
}
.consent-text a { color: var(--accent); text-decoration: underline; text-underline-offset: 2px; }
.consent-actions { display: flex; gap: 8px; flex-wrap: wrap; }
.consent-btn {
  flex: 1 1 auto; min-height: 44px; padding: 11px 18px;
  border-radius: 10px; border: 1px solid var(--border2);
  background: var(--bg); color: var(--text);
  font-family: inherit; font-size: 14.5px; font-weight: 600;
  cursor: pointer; transition: background 120ms ease, border-color 120ms ease;
}
.consent-btn:hover { border-color: var(--accent); }
.consent-btn:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; }
.consent-btn-accept {
  background: var(--accent-surface); border-color: var(--accent-surface); color: #000;
}
.consent-btn-accept:hover { background: var(--accent-surface-hover); border-color: var(--accent-surface-hover); }

@media (min-width: 700px) {
  .consent-inner { flex-direction: row; align-items: center; justify-content: space-between; gap: 20px; }
  .consent-actions { flex: 0 0 auto; }
  .consent-btn { flex: 0 0 auto; }
}
/* На мобильном снизу висит нижняя навигация (64px + safe-area) — баннер
   поднимаем над ней, иначе он накрывает кнопки. На ширине от 769px навигация
   скрыта, панель встаёт к самому краю. */
.consent {
  bottom: calc(64px + env(safe-area-inset-bottom, 0px));
  padding-bottom: 12px;
}
@media (min-width: 769px) {
  .consent {
    bottom: 0;
    padding-bottom: calc(12px + env(safe-area-inset-bottom, 0px));
  }
}
/* Пока панель висит, добавляем снизу запас: иначе она накрывает конец
   страницы — а там ссылки на документы и «Настройки cookie», ровно то, что
   человек пойдёт читать перед решением. Высоту панели измеряет JS и кладёт в
   --consent-h: она зависит от переносов текста (на узком экране втрое выше,
   чем на широком), и фиксированное число тут всегда мимо.
   Слагаемое 64px — нижняя навигация, под которой панель и стоит. */
/* Мобильный случай живёт в legacy/08-polish.css: там !important-правило
   отступа под навигацией, и оно всё равно окажется в бандле позже. Здесь —
   только десктоп, где своего отступа у body нет. */
@media (min-width: 769px) {
  html.has-consent-banner body {
    padding-bottom: calc(var(--consent-pad, 80px) + 16px);
  }
}

/* artelteh — часть legacy-overrides.css. Загружается под body.newui.
 * Не редактировать вручную в продакшене без согласования.
 */
/* ─── ARTELTEH LEGACY OVERRIDES ───
   Scope: body.newui — восстанавливает новые токены на старых классах.
   Specificity body.X .Y > .Y побеждает инлайновые <style> такой же специфичности. */

/* ── HTML/BODY: перебиваем main.css hardcoded light bg + Arial ── */
html:has(body.newui),
body.newui {
  background-color: var(--bg) !important;
  background: var(--bg) !important;
  font-family: var(--font);
  color: var(--text);
}
body.newui * { font-family: inherit; }
body.newui h1, body.newui h2, body.newui h3, body.newui h4,
body.newui p, body.newui ul, body.newui li {
  font-family: inherit;
}

/* ── Меню topbar — убрать буллиты и markers ── */
body.newui .topbar-menu-ul,
body.newui .topbar-nav ul {
  list-style: none !important;
  display: flex !important;
  gap: 1.25rem !important;
  padding: 0 !important;
  margin: 0 !important;
}
body.newui .topbar-menu-ul li,
body.newui .topbar-nav li {
  list-style: none !important;
  display: inline-flex;
  margin: 0 !important;
  line-height: 1.3 !important;
  float: none !important;
}
body.newui .topbar-menu-ul li::marker,
body.newui .topbar-nav li::marker { content: ''; }
body.newui .topbar-nav a {
  color: var(--text2); font-size: 13px; font-weight: 500;
  text-decoration: none;
}
body.newui .topbar-nav a:hover { color: var(--text); }

/* Убираем старый header { background: #ffc527 } */
body.newui > header:not(.topbar),
body.newui header:not(.topbar):not(.newui-exempt) {
  background: transparent !important;
  box-shadow: none !important;
  height: auto !important;
  line-height: normal !important;
  margin-bottom: 0 !important;
  border: 0 !important;
}

/* Mobile panel button — только на узких экранах */
body.newui .topbar .topbar-panel-mobile { display: none !important; }
@media (max-width: 768px) {
  body.newui .topbar .topbar-panel-mobile {
    display: inline-flex !important;
  }
}

/* ── Header icon-кнопки одинаковой ширины (перекрыть legacy 20px) ── */
body.newui .topbar .icon-btn,
body.newui .topbar .messages-link,
body.newui .topbar .notifications-toggle {
  width: 40px !important; height: 40px !important;
  padding: 0 !important;
  background: transparent !important;
  border: 1px solid var(--border2) !important;
  border-radius: var(--radius-sm) !important;
  display: inline-flex !important;
  align-items: center !important; justify-content: center !important;
  color: var(--text2) !important;
  margin: 0 !important;
  position: relative;
  flex-shrink: 0;
}
body.newui .topbar .icon-btn:hover,
body.newui .topbar .messages-link:hover,
body.newui .topbar .notifications-toggle:hover {
  background: var(--bg3) !important;
  border-color: var(--accent) !important;
  color: var(--text) !important;
}
body.newui .topbar .notifications-icon { font-size: 14px; }
body.newui .topbar .notifications-badge {
  top: -3px !important; right: -3px !important;
  background: var(--danger) !important; color: #fff !important;
  border: 2px solid var(--bg) !important;
  font-size: 9px !important; font-weight: 600 !important;
  min-width: 16px; height: 16px; line-height: 12px !important;
  padding: 0 4px !important; border-radius: 100px !important;
}

/* ══════════════════════════════════════════
   NOTIFICATIONS — выезжающая правая панель
   ══════════════════════════════════════════ */

/* Backdrop scrim — начинается ПОД topbar (56px desktop / 64px mobile) */
body.newui .notifications-menu-item:has(.notifications-dropdown.show)::before {
  content: '';
  position: fixed;
  top: 56px; right: 0; bottom: 0; left: 0;
  background: rgba(0,0,0,0.5);
  z-index: 99;
  animation: at-fade-in .2s ease;
}
@media (max-width: 768px) {
  body.newui .notifications-menu-item:has(.notifications-dropdown.show)::before {
    top: calc(56px + env(safe-area-inset-top, 0));
  }
  body.newui .notifications-dropdown {
    top: calc(56px + env(safe-area-inset-top, 0)) !important;
    height: calc(100dvh - 56px - env(safe-area-inset-top, 0)) !important;
    max-height: calc(100dvh - 56px - env(safe-area-inset-top, 0)) !important;
  }
}
@keyframes at-fade-in { from { opacity: 0; } to { opacity: 1; } }
@keyframes at-slide-right { from { transform: translateX(100%); } to { transform: translateX(0); } }

body.newui .notifications-dropdown {
  position: fixed !important;
  top: 56px !important; right: 0 !important; left: auto !important; bottom: 0 !important;
  width: 400px !important; max-width: 100vw;
  height: calc(100dvh - 56px) !important; max-height: calc(100dvh - 56px) !important;
  margin: 0 !important;
  background: var(--bg2) !important;
  border: 0 !important;
  border-left: 1px solid var(--border2) !important;
  border-radius: 0 !important;
  box-shadow: -10px 0 30px rgba(0,0,0,0.35) !important;
  overflow: hidden !important;
  z-index: 100;
  flex-direction: column;
  display: none;
  transform: translateX(100%);
}
body.newui .notifications-dropdown.show {
  display: flex !important;
  animation: at-slide-right .25s ease forwards;
}

body.newui .notifications-dropdown-header {
  background: var(--bg2) !important;
  border-bottom: 1px solid var(--border) !important;
  padding: 16px 18px !important; line-height: 1.3 !important;
  flex-shrink: 0;
}
body.newui .notifications-dropdown-header h3 {
  color: var(--text) !important;
  font-size: 14px !important; font-weight: 600 !important;
  margin: 0 !important;
}
body.newui .notifications-reset-btn {
  background: var(--bg2) !important;
  color: var(--text2) !important;
  border: 1px solid var(--border2) !important;
  border-radius: var(--radius-sm) !important;
  padding: 4px 10px !important;
  font-size: 11px !important; font-weight: 600 !important;
  line-height: 1.4 !important;
  cursor: pointer;
  transition: all var(--transition);
}
body.newui .notifications-reset-btn:hover:not(:disabled) {
  background: var(--bg4) !important;
  color: var(--text) !important;
  border-color: var(--accent) !important;
}
body.newui .notifications-reset-btn:disabled {
  opacity: 0.4 !important;
  background: transparent !important;
  cursor: not-allowed;
}
body.newui .view-all-link {
  color: var(--accent) !important;
  text-decoration: none !important;
  font-size: 12px !important; font-weight: 600 !important;
}
body.newui .view-all-link:hover {
  text-decoration: underline !important;
  color: var(--accent-hover) !important;
}
body.newui .notifications-dropdown-content {
  background: var(--bg2) !important;
  max-height: none !important;
  padding: 0 !important;
  flex: 1 1 auto;
  overflow-y: auto;
}
body.newui .notification-dropdown-item {
  background: transparent !important;
  border-bottom: 1px solid var(--border) !important;
  padding: 12px 16px !important;
  cursor: pointer;
  transition: background var(--transition);
}
body.newui .notification-dropdown-item:hover {
  background: var(--bg3) !important;
}
body.newui .notification-dropdown-item.unread {
  background: var(--accent-dim) !important;
  border-left: 3px solid var(--accent) !important;
  padding-left: 13px !important;
}
body.newui .notification-dropdown-item:last-child {
  border-bottom: 0 !important;
}
body.newui .notification-dropdown-title {
  color: var(--text) !important;
  font-size: 13px !important; font-weight: 600 !important;
  margin: 0 0 4px !important;
}
body.newui .notification-dropdown-message {
  color: var(--text2) !important;
  font-size: 12px !important;
  line-height: 1.45 !important;
  margin: 0 0 4px !important;
}
body.newui .notification-dropdown-date {
  color: var(--text3) !important;
  font-size: 11px !important;
  font-variant-numeric: tabular-nums;
}
body.newui .notifications-loading,
body.newui .notifications-empty {
  color: var(--text3) !important;
  padding: 32px 20px !important;
  text-align: center;
  font-size: 13px;
}


/* ── Каркас страниц ── */
body.newui .page,
body.newui section.page {
  background: transparent;
  padding: 0;
}
body.newui .page > .wrap,
body.newui section.page > .wrap {
  max-width: calc(var(--content) + 2 * var(--gutter));
  margin: 0 auto;
  padding: 1.25rem var(--gutter) 2rem;
}
@media (min-width: 769px) {
  body.newui .page > .wrap { padding: 1.5rem var(--gutter) 3rem; }
}

/* Общий сброс фона */
body.newui { background: var(--bg); }

/* ── Кнопки темы ── */
body.newui .adm_btn,
body.newui .btn,
body.newui button.adm_btn {
  display: inline-flex; align-items: center; justify-content: center; gap: 6px;
  font-family: inherit; font-size: 13px; font-weight: 600;
  line-height: 1.2; padding: 10px 16px;
  border-radius: var(--radius-sm);
  background: var(--bg3); color: var(--text) !important;
  border: 1px solid var(--border2);
  text-decoration: none; cursor: pointer;
  transition: all var(--transition);
  min-height: 40px;
}
body.newui .adm_btn:hover,
body.newui .btn:hover { background: var(--bg4); border-color: var(--border2); color: var(--text) !important; }

body.newui .btn.newproject,
body.newui a.newproject {
  background: var(--accent-surface); color: #000 !important;
  border-color: transparent;
}
body.newui .btn.newproject:hover,
body.newui a.newproject:hover { background: var(--accent-surface-hover); color: #000 !important; }

body.newui .logout-btn {
  background: rgba(248,81,73,0.12) !important; color: var(--danger) !important;
  border-color: rgba(248,81,73,0.25) !important;
}
body.newui .logout-btn:hover { background: rgba(248,81,73,0.22) !important; }

/* ── Уведомления / алерты ── */
body.newui .adm_front_noti {
  padding: 12px 16px; border-radius: var(--radius-sm);
  border: 1px solid var(--border); margin-bottom: 1rem !important;
  font-size: 14px; background: var(--bg2) !important; color: var(--text) !important;
}

/* ── Карточка профиля (account-header) ── */
body.newui .account-header {
  background: var(--bg2); border: 1px solid var(--border);
  border-radius: var(--radius); padding: 1.25rem;
  box-shadow: var(--card-shadow);
  margin-bottom: 1.5rem !important;
}
body.newui .account-header h1,
body.newui #user-greeting {
  font-size: 20px; font-weight: 700; letter-spacing: -0.4px;
  color: var(--text); margin: 0;
}
body.newui .user-avatar,
body.newui .user-avatar-placeholder {
  border: 2px solid var(--accent-surface) !important;
  width: 64px !important; height: 64px !important;
  font-size: 24px !important;
}
body.newui .user-avatar-placeholder {
  background: var(--accent-surface) !important;
  color: #000 !important;
}

/* ── Блоки user_data / user_projects / user_notes / user_map / tg_connect ── */
body.newui .user_data,
body.newui .user_projects,
body.newui .user_notes,
body.newui .user_map,
body.newui .tg_connect,
body.newui .avatar-upload-section {
  background: var(--bg2) !important;
  border: 1px solid var(--border) !important;
  border-radius: var(--radius) !important;
  padding: 1.25rem !important;
  box-shadow: var(--card-shadow);
  margin: 0 0 1.25rem !important;
}

body.newui .user_data h4,
body.newui .tg_connect h4,
body.newui .user_projects h2,
body.newui .user_notes h2,
body.newui .user_map h2,
body.newui .avatar-upload-section h3 {
  color: var(--text) !important;
  font-weight: 600;
  margin-top: 0;
}
body.newui .user_data .row {
  display: grid; grid-template-columns: max-content 1fr;
  gap: 6px 12px; padding: 6px 0;
  border-bottom: 1px solid var(--border);
  align-items: center;
}
body.newui .user_data .row:last-child { border-bottom: 0; }
body.newui .user_data .row h4 {
  font-size: 12px; font-weight: 600;
  color: var(--text3); margin: 0;
  text-transform: uppercase; letter-spacing: 0.5px;
}
body.newui .user_data .row span,
body.newui .tg_connect .row span { color: var(--text); font-size: 14px; }

/* ── Поля ввода ── */
body.newui input[type="text"],
body.newui input[type="email"],
body.newui input[type="tel"],
body.newui input[type="number"],
body.newui input[type="password"],
body.newui input[type="url"],
body.newui input[type="date"],
body.newui input[type="search"],
body.newui textarea,
body.newui select {
  background: var(--bg) !important;
  color: var(--text) !important;
  border: 1px solid var(--border2) !important;
  border-radius: var(--radius-sm) !important;
  padding: 10px 12px !important;
  font-family: inherit; font-size: 14px;
  transition: border-color var(--transition), box-shadow var(--transition);
  box-shadow: none !important;
}
body.newui input:focus,
body.newui textarea:focus,
body.newui select:focus {
  outline: none !important;
  border-color: var(--accent) !important;
  box-shadow: 0 0 0 3px var(--accent-dim) !important;
}
body.newui input[type="text"]:disabled,
body.newui input[disabled] {
  background: transparent !important;
  border: 0 !important; padding: 0 !important;
  color: var(--text) !important;
}
body.newui textarea { min-height: 100px; resize: vertical; }

/* ── Заметки ── */
body.newui .note_item {
  background: var(--bg) !important;
  border: 1px solid var(--border) !important;
  border-radius: var(--radius-sm) !important;
  padding: 14px !important;
  margin-bottom: 10px !important;
}
body.newui .note_content { color: var(--text) !important; }
body.newui .note_date { color: var(--text3) !important; }
body.newui .note_footer { border-top-color: var(--border) !important; }
body.newui .note_delete {
  background: rgba(248,81,73,0.12) !important;
  color: var(--danger) !important;
  border: 1px solid rgba(248,81,73,0.25) !important;
  border-radius: var(--radius-xs) !important;
}
body.newui .note_delete:hover { background: rgba(248,81,73,0.22) !important; }
body.newui .notes_empty,
body.newui .notes_loading { color: var(--text3) !important; }

/* ── Таблицы в кабинете / проектах ── */
body.newui .user_projects table,
body.newui .admin_projects table {
  width: 100%; border-collapse: collapse;
}
body.newui .user_projects thead th,
body.newui .admin_projects thead th {
  text-align: left; padding: 10px 12px;
  font-size: 11px; font-weight: 600;
  letter-spacing: 0.8px; text-transform: uppercase;
  color: var(--text3); border-bottom: 1px solid var(--border);
}
body.newui .user_projects tbody td,
body.newui .admin_projects tbody td {
  padding: 10px 12px; font-size: 13px;
  border-bottom: 1px solid var(--border);
}
body.newui .user_projects tbody tr:hover,
body.newui .admin_projects tbody tr:hover { background: var(--bg3); }

/* ── Единые сообщения ── */
body.newui .no-projects,
body.newui .empty-state {
  padding: 2rem; text-align: center;
  color: var(--text3); font-size: 14px;
}

/* ── Breadcrumb legacy ── */
body.newui .breadcrumbs,
body.newui .bread {
  font-size: 12px; color: var(--text3);
  margin-bottom: 0.75rem;
}
body.newui .breadcrumbs a,
body.newui .bread a { color: var(--text3); }
body.newui .breadcrumbs a:hover,
body.newui .bread a:hover { color: var(--text2); }

/* ── Заголовки h1/h2 страниц ── */
body.newui section.page h1:first-of-type,
body.newui section.page > .wrap > h1:first-of-type {
  font-size: 22px; font-weight: 700; letter-spacing: -0.4px;
  margin: 0 0 1rem; color: var(--text);
}
body.newui section.page h2 {
  font-size: 17px; font-weight: 600;
  color: var(--text); margin: 0 0 1rem;
}

/* ── Карта ── */
body.newui .single_map_wrapper,
body.newui #map,
body.newui .leaflet-container {
  border-radius: var(--radius) !important;
  overflow: hidden;
  border: 1px solid var(--border);
}

/* ── Загрузчик файлов ── */
body.newui input[type="file"] {
  padding: 8px !important;
  background: var(--bg2) !important;
  border: 1px dashed var(--border2) !important;
  border-radius: var(--radius-sm) !important;
  color: var(--text) !important;
}

/* ── Формы логина/регистрации (если используют _show_login контейнер) ── */
body.newui .login-form,
body.newui .register-form,
body.newui .auth-form,
body.newui form.login,
body.newui form.register {
  background: var(--bg2);
  border: 1px solid var(--border);
  border-radius: var(--radius);
  padding: 1.5rem;
  box-shadow: var(--card-shadow);
  max-width: 420px; margin: 2rem auto;
}

/* ── Общий сброс устаревшего белого фона ── */
body.newui section,
body.newui .wrap { background: transparent; }

/* ── Старый footer ── */
body.newui > footer,
body.newui footer:not(.site-footer):not(.newui-exempt) {
  background: var(--bg) !important;
  color: var(--text2);
  border-top: 1px solid var(--border);
  padding: 1.5rem 1rem;
  margin-top: 2rem;
}
body.newui footer .wrap {
  max-width: calc(var(--content) + 2 * var(--gutter)); margin: 0 auto;
  display: flex; flex-wrap: wrap;
  gap: 1rem; justify-content: space-between; align-items: center;
}
body.newui footer .copyright {
  font-size: 12px; color: var(--text3);
}
body.newui footer nav ul,
body.newui footer .menu {
  list-style: none; display: flex; gap: 1rem;
  flex-wrap: wrap; padding: 0; margin: 0;
}
body.newui footer nav a,
body.newui footer .menu a {
  font-size: 12px; color: var(--text3);
  text-decoration: none;
}
body.newui footer nav a:hover,
body.newui footer .menu a:hover { color: var(--text2); }

@media (max-width: 768px) {
  body.newui > footer,
  body.newui footer:not(.site-footer):not(.newui-exempt) {
    padding-bottom: 80px;  /* выше bottom-nav */
  }
}

/* ── Убираем 404-стили в пользу токенов ── */
body.newui .error-404 {
  text-align: center; padding: 4rem 1rem; color: var(--text2);
}

/* ── Видимость скрипт-переключённых блоков ── */
body.newui [hidden] { display: none !important; }


/* ── Публичный футер (footer.php, только на публичных страницах) ── */
body.newui .site-footer-cols {
  display: grid; grid-template-columns: 1fr; gap: 1.5rem;
  padding-bottom: 1.5rem; margin-bottom: 1.25rem;
  border-bottom: 1px solid var(--border);
  text-align: left;
}
@media (min-width: 760px) {
  /* Колонка услуг шире прочих: девять длинных названий, и они идут в два
     столбца — иначе список тянется вниз на пол-экрана. */
  body.newui .site-footer-cols { grid-template-columns: 1fr 2.1fr 0.9fr; gap: 2rem; }
}
@media (min-width: 980px) {
  /* Именно колонки, а не grid: grid выравнивает пункты по строкам, и рядом с
     двустрочным названием у односрочного оставалась дыра. Колонки текут
     подряд и заполняют место плотно. */
  body.newui .site-footer-services {
    columns: 2; column-gap: 1.75rem;
  }
  body.newui .site-footer-services li {
    break-inside: avoid;          /* название не разрывается между столбцами */
    margin-bottom: 0.55rem;
  }
}
body.newui .site-footer-name {
  font-size: 16px; font-weight: 700; color: var(--text); letter-spacing: -0.3px;
}
body.newui .site-footer-tagline {
  font-size: 12px; color: var(--accent); margin: 0.15rem 0 0.6rem;
}
body.newui .site-footer-about {
  font-size: 13px; color: var(--text3); line-height: 1.55; margin: 0; max-width: 46ch;
}
body.newui .site-footer-head {
  font-size: 12px; font-weight: 600; text-transform: uppercase;
  letter-spacing: 0.8px; color: var(--text3); margin-bottom: 0.6rem;
}
body.newui .site-footer-col ul { list-style: none; margin: 0; padding: 0; }
body.newui .site-footer-col li { margin-bottom: 0.4rem; }
body.newui .site-footer-col a {
  font-size: 13px; color: var(--text2); text-decoration: none; line-height: 1.45;
}
body.newui .site-footer-col a:hover { color: var(--text); text-decoration: underline; }

/* Абзац с перечислением услуг — во всю ширину блока. Ограничение 72ch и
   авто-поля центровали его, и на фоне заголовка с подзаголовком, прижатых
   влево, он читался как случайный уступ. */
body.newui .section-keywords {
  font-size: 14px; color: var(--text3); line-height: 1.6;
  max-width: none; margin-left: 0; margin-right: 0;
}

/* artelteh — часть legacy-overrides.css. Загружается под body.newui.
 * Не редактировать вручную в продакшене без согласования.
 */
/* ══════════════════════════════════════════
   ARCHIVES — archive-projects.php / services
   ══════════════════════════════════════════ */
body.newui .archive-list,
body.newui .projects-grid,
body.newui .services-grid {
  display: grid; grid-template-columns: 1fr;
  gap: 12px; margin-top: 1rem;
}
@media(min-width: 640px) {
  body.newui .archive-list,
  body.newui .projects-grid,
  body.newui .services-grid { grid-template-columns: repeat(2,1fr); }
}
@media(min-width: 960px) {
  body.newui .projects-grid,
  body.newui .services-grid { grid-template-columns: repeat(3,1fr); }
}

/* ══════════════════════════════════════════
   BREAD (bread.php)
   ══════════════════════════════════════════ */
body.newui .bread,
body.newui .breadcrumbs {
  font-size: 12px; color: var(--text3);
  margin-bottom: 0.75rem;
  display: flex; flex-wrap: wrap; gap: 6px;
}

/* ══════════════════════════════════════════
   POPS (pops.php) — модальные окна
   ══════════════════════════════════════════ */
body.newui .pop,
body.newui .popup,
body.newui .modal {
  background: var(--bg2) !important;
  border: 1px solid var(--border) !important;
  border-radius: var(--radius) !important;
  padding: 1.5rem !important;
  box-shadow: 0 10px 40px rgba(0,0,0,0.18);
  color: var(--text);
}

/* ══════════════════════════════════════════
   USERNOTY (page-usernoty.php) — уведомления
   ══════════════════════════════════════════ */
body.newui .noty-item,
body.newui .notification-item {
  background: var(--bg2); border: 1px solid var(--border);
  border-radius: var(--radius); padding: 1rem;
  margin-bottom: 10px;
}
body.newui .noty-item.unread { border-left: 3px solid var(--accent); }

/* ══════════════════════════════════════════
   ADD NEW PROJECT — page-addnew.php
   ══════════════════════════════════════════ */
body.newui section.add_new { background: transparent; }
body.newui .add_new h1 {
  font-size: 22px; font-weight: 700;
  letter-spacing: -0.4px; margin: 0 0 1.25rem;
}
body.newui .add_new_project {
  background: var(--bg2); border: 1px solid var(--border);
  border-radius: var(--radius); padding: 1.5rem;
  box-shadow: var(--card-shadow);
  max-width: 680px;
}
body.newui .add_new_project .row {
  display: flex; flex-direction: column; gap: 6px;
  margin-bottom: 1rem;
}
body.newui .add_new_project .row._hidden { display: none; }

/* Источник заявки при переходе по QR-коду. Не поле ввода намеренно: значение
   проверено на сервере и меняться не должно, а активный на вид input обещал бы
   обратное. */
body.newui .add_new_project .ref-locked {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 9px 12px;
  border: 1px solid var(--border);
  border-radius: 10px;
  background: var(--bg3, rgba(128, 128, 128, .10));
  color: var(--text);
  font-size: 15px;
}
body.newui .add_new_project .ref-avatar {
  width: 32px;
  height: 32px;
  border-radius: 50%;
  object-fit: cover;
  flex-shrink: 0;
}
body.newui .add_new_project .ref-name { font-weight: 600; }
body.newui .add_new_project .ref-lock { margin-left: auto; color: var(--text2, var(--text)); flex-shrink: 0; }
body.newui .add_new_project .row .title {
  font-size: 12px; font-weight: 600;
  color: var(--text3); text-transform: uppercase;
  letter-spacing: 0.5px;
}
body.newui form.add_new_project,
body.newui .add_new_project { display: block !important; padding: 1.5rem !important; max-width: 680px; }
body.newui form.add_new_project .row {
  display: flex !important;
  flex-direction: column !important;
  align-items: stretch !important;
  gap: 6px !important;
  margin: 0 0 1rem !important;
  width: 100% !important;
}
body.newui form.add_new_project .row .title {
  width: auto !important;
  font-size: 12px !important; font-weight: 600 !important;
  color: var(--text3) !important;
  text-transform: uppercase !important;
  letter-spacing: 0.5px !important;
}
body.newui form.add_new_project .row input,
body.newui form.add_new_project .row select,
body.newui form.add_new_project .row textarea {
  width: 100% !important;
  margin: 0 !important;
  height: auto !important;
  min-height: 40px !important;
  font-size: 14px !important;
  line-height: 1.4 !important;
  padding: 10px 12px !important;
}
body.newui form.add_new_project .row textarea { min-height: 120px !important; padding-top: 10px !important; }
body.newui .add_new_project .add_files {
  display: inline-flex; align-items: center; gap: 6px;
  padding: 10px 16px; border-radius: var(--radius-sm);
  background: var(--bg3); color: var(--text);
  border: 1px dashed var(--border2);
  font-size: 13px; font-weight: 600; cursor: pointer;
  transition: all var(--transition); margin-top: 4px;
}
body.newui .add_new_project .add_files:hover {
  background: var(--bg4); border-color: var(--accent);
}
body.newui .add_new_project #fileCount {
  font-size: 13px; color: var(--text2);
  margin: 8px 0 0 0;
}
body.newui .submit_btn_wrapper {
  display: flex; align-items: center; gap: 12px;
  flex-wrap: wrap;
}
body.newui #submit_post,
body.newui input[type="submit"]#submit_post {
  background: var(--accent-surface) !important;
  color: #000 !important;
  border: none !important;
  padding: 12px 22px !important;
  border-radius: var(--radius-sm) !important;
  font-weight: 600 !important; font-size: 14px !important;
  min-height: 44px; cursor: pointer;
  transition: background var(--transition);
}
body.newui #submit_post:hover { background: var(--accent-surface-hover) !important; }
body.newui #submit_post:disabled { opacity: 0.6; cursor: not-allowed; }

body.newui .project_loading_status,
body.newui .project_success_status {
  align-items: center; gap: 8px;
  font-size: 13px; color: var(--text2);
}
body.newui .project_loading_status[style*="display: none"],
body.newui .project_success_status[style*="display: none"] { display: none !important; }
body.newui .project_success_status { color: var(--success); }
body.newui .loading_spinner {
  width: 16px; height: 16px; border-radius: 50%;
  border: 2px solid var(--border2);
  border-top-color: var(--accent);
  animation: at-spin 0.7s linear infinite;
}
@keyframes at-spin { to { transform: rotate(360deg); } }

body.newui #projectdatefiles,
body.newui #uploadForm { display: none !important; }

/* select2 — поверх нашей темы */
body.newui .select2-container--default .select2-selection--single,
body.newui .select2-container--default .select2-selection--multiple {
  background: var(--bg) !important;
  border: 1px solid var(--border2) !important;
  border-radius: var(--radius-sm) !important;
  min-height: 40px !important;
  color: var(--text) !important;
}
body.newui .select2-container--default .select2-selection__rendered {
  color: var(--text) !important; line-height: 38px !important;
  padding: 0 12px !important;
}
body.newui .select2-dropdown {
  background: var(--bg2) !important;
  border: 1px solid var(--border2) !important;
  border-radius: var(--radius-sm) !important;
  color: var(--text) !important;
}
body.newui .select2-results__option--highlighted[aria-selected] {
  background: var(--accent-dim) !important;
  color: var(--accent) !important;
}
/* Обычные опции дропдауна — читаемый текст (были еле видны в тёмной теме). */
body.newui .select2-results__option {
  color: var(--text) !important;
}

/* ── Мультивыбор (исполнители заявки) ──
   Без этих правил теги выбранных рисуются дефолтным светлым Select2 —
   белые прямоугольники с полупрозрачным текстом, нечитаемо в тёмной теме,
   а фикс line-height от single-версии растягивал контейнер. */
body.newui .select2-container--default.select2-container--multiple .select2-selection--multiple {
  min-height: 40px !important;
  padding: 3px 4px !important;
}
body.newui .select2-container--default.select2-container--multiple .select2-selection__rendered {
  line-height: normal !important;
  padding: 0 !important;
  display: flex;
  flex-wrap: wrap;
  gap: 5px;
  align-items: center;
}
body.newui .select2-container--default .select2-selection__choice {
  background: var(--accent-dim, rgba(191,149,35,.22)) !important;
  border: 1px solid var(--accent, #bf9523) !important;
  color: var(--text) !important;
  border-radius: 7px !important;
  padding: 3px 9px !important;
  margin: 0 !important;
  font-size: 13.5px !important;
  line-height: 1.3 !important;
  display: inline-flex;
  align-items: center;
}
body.newui .select2-container--default .select2-selection__choice__remove {
  color: var(--text2, var(--text)) !important;
  margin-right: 6px !important;
  font-size: 16px !important;
  order: 2;              /* крестик справа от имени */
  margin-left: 6px;
  margin-right: 0 !important;
}
body.newui .select2-container--default .select2-selection__choice__remove:hover {
  color: var(--text) !important;
  background: transparent !important;
}
body.newui .select2-container--default .select2-search--inline .select2-search__field {
  color: var(--text) !important;
  margin-top: 0 !important;
  line-height: 1.6 !important;
}
/* Крестик «очистить всё» (allowClear) — виден в тёмной теме. */
body.newui .select2-container--default .select2-selection__clear {
  color: var(--text2, var(--text)) !important;
}

/* ───────── Server info block (только kouz, page-account.php) ───────── */
body.newui .user_server_info {
  margin-top: 24px;
}
body.newui .user_server_info h2 {
  margin-bottom: 14px;
}
body.newui .srv-card {
  background: var(--bg2);
  border: 1px solid var(--border);
  border-radius: 12px;
  padding: 14px 16px;
  margin-bottom: 12px;
}
body.newui .srv-card--accent {
  border-color: var(--accent, #bf9523);
  box-shadow: 0 0 0 3px rgba(191, 149, 35, 0.08);
}
body.newui .srv-row {
  display: flex;
  justify-content: space-between;
  align-items: baseline;
  gap: 10px;
  margin-bottom: 6px;
}
body.newui .srv-row--sub {
  font-size: 12.5px;
  color: var(--text2);
  margin-top: 6px;
  margin-bottom: 0;
}
body.newui .srv-label {
  font-size: 13px;
  font-weight: 600;
  color: var(--text2);
  text-transform: uppercase;
  letter-spacing: 0.4px;
}
body.newui .srv-value {
  font-size: 14px;
  font-weight: 600;
  color: var(--text);
  font-variant-numeric: tabular-nums;
}
body.newui .srv-value--big {
  font-size: 22px;
  font-weight: 700;
  color: var(--accent, #bf9523);
}
body.newui .srv-bar {
  width: 100%;
  height: 8px;
  background: var(--bg3);
  border-radius: 4px;
  overflow: hidden;
  margin: 6px 0 0;
}
body.newui .srv-bar-fill {
  height: 100%;
  border-radius: 4px;
  transition: width 200ms;
}
body.newui .srv-bar-fill--ok   { background: #1f9d55; }
body.newui .srv-bar-fill--warn { background: #d97706; }
body.newui .srv-bar-fill--crit { background: #dc2626; }

body.newui .srv-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
  gap: 8px;
  margin-top: 12px;
}
body.newui .srv-stat {
  background: var(--bg2);
  border: 1px solid var(--border);
  border-radius: 10px;
  padding: 10px 12px;
  display: flex;
  flex-direction: column;
  gap: 3px;
}
body.newui .srv-stat-label {
  font-size: 11.5px;
  color: var(--text2);
  text-transform: uppercase;
  letter-spacing: 0.3px;
}
body.newui .srv-stat-val {
  font-size: 14px;
  font-weight: 600;
  color: var(--text);
  font-variant-numeric: tabular-nums;
  word-break: break-word;
}

@media (max-width: 600px) {
  body.newui .srv-value--big { font-size: 18px; }
  body.newui .srv-grid { grid-template-columns: 1fr 1fr; gap: 6px; }
  body.newui .srv-stat { padding: 8px 10px; }
  body.newui .srv-stat-val { font-size: 13px; }
}

/* ───────── Projects table (page-account.php) ───────── */
body.newui .user_projects { margin-top: 24px; }
body.newui .projects-empty {
  color: var(--text2);
  padding: 12px 0;
}
body.newui .projects-table-wrap {
  border: 1px solid var(--border);
  border-radius: 12px;
  overflow: hidden;
  background: var(--bg2);
}
body.newui .projects-table {
  width: 100%;
  border-collapse: collapse;
  font-size: 13px;
}
body.newui .projects-table thead th {
  background: var(--bg3);
  color: var(--text2);
  text-transform: uppercase;
  font-size: 10.5px;
  letter-spacing: 0.4px;
  font-weight: 700;
  padding: 8px 10px;
  text-align: left;
  border-bottom: 1px solid var(--border);
}
body.newui .projects-table tbody td {
  padding: 9px 10px;
  border-top: 1px solid var(--border);
  vertical-align: middle;
  color: var(--text);
}
body.newui .projects-table tbody tr:first-child td { border-top: 0; }
body.newui .projects-table .col-id {
  width: 60px;
  font-variant-numeric: tabular-nums;
  color: var(--text2);
  font-size: 11.5px;
}
body.newui .projects-table .col-date {
  width: 100px;
  font-variant-numeric: tabular-nums;
  color: var(--text2);
  white-space: nowrap;
}
body.newui .projects-table .col-title a {
  color: var(--text);
  text-decoration: none;
  font-weight: 500;
}
body.newui .projects-table .col-title a:hover {
  color: var(--accent);
  text-decoration: underline;
}
body.newui .projects-table .col-role { width: 100px; }
body.newui .projects-table .col-status { width: 240px; }

body.newui .role-badge {
  display: inline-block;
  padding: 2px 8px;
  border-radius: 10px;
  font-size: 11px;
  font-weight: 600;
  background: var(--bg3);
  color: var(--text2);
}
body.newui .role-badge.role-author { background: rgba(99,102,241,0.18); color: #6366f1; }
body.newui .role-badge.role-worker { background: rgba(34,197,94,0.18); color: #22c55e; }
[data-theme="dark"] body.newui .role-badge.role-author { color: #a5b4fc; }
[data-theme="dark"] body.newui .role-badge.role-worker { color: #86efac; }

body.newui .status-pill {
  display: inline-block;
  padding: 2px 10px;
  border-radius: 10px;
  font-size: 11.5px;
  font-weight: 500;
  background: var(--bg3);
  color: var(--text);
  border: 1px solid var(--border);
  white-space: normal;
  line-height: 1.3;
}

/* Выполненные строки — полупрозрачные и внизу (порядок задан PHP) */
body.newui .projects-table tr.is-done {
  opacity: 0.45;
}
body.newui .projects-table tr.is-done:hover { opacity: 0.85; }
body.newui .projects-table tr.is-done .col-title a { font-weight: 400; }

/* ───────── Cache-reset кнопка (внизу личного кабинета) ───────── */
body.newui .user_cache_reset,
body.newui .user_app_update {
  margin: 16px 0;
  display: flex;
  justify-content: center;
}
body.newui .user_cache_reset { margin-top: 32px; }
body.newui .cache-reset-btn {
  display: inline-flex;
  flex-direction: column;
  align-items: center;
  gap: 4px;
  padding: 18px 28px;
  background: var(--bg2);
  color: var(--text);
  border: 2px dashed var(--accent, #bf9523);
  border-radius: 14px;
  cursor: pointer;
  font-family: inherit;
  min-width: 280px;
  max-width: 480px;
  width: 100%;
  text-align: center;
  transition: background 150ms, transform 80ms, border-color 150ms;
  -webkit-tap-highlight-color: transparent;
}
body.newui .cache-reset-btn:hover,
body.newui .cache-reset-btn:focus-visible {
  background: var(--bg3);
  border-style: solid;
  outline: none;
}
body.newui .cache-reset-btn:active { transform: scale(0.98); }
body.newui .cache-reset-btn:disabled {
  opacity: 0.6;
  cursor: progress;
}
body.newui .cache-reset-icon {
  color: var(--accent, #bf9523);
  flex-shrink: 0;
  margin-bottom: 2px;
}
body.newui .cache-reset-label {
  font-size: 17px;
  font-weight: 700;
  color: var(--text);
  line-height: 1.2;
}
body.newui .cache-reset-hint {
  font-size: 11.5px;
  font-weight: 500;
  color: var(--text2);
  line-height: 1.3;
}
@media (max-width: 600px) {
  body.newui .cache-reset-btn { padding: 16px 18px; min-width: 0; }
  body.newui .cache-reset-label { font-size: 15px; }
  body.newui .cache-reset-hint { font-size: 11px; }
}

/* Mobile: схлопываем в карточки */
@media (max-width: 640px) {
  body.newui .projects-table thead { display: none; }
  body.newui .projects-table,
  body.newui .projects-table tbody,
  body.newui .projects-table tr,
  body.newui .projects-table td { display: block; width: 100%; }
  body.newui .projects-table tbody tr {
    border-top: 1px solid var(--border);
    padding: 8px 12px;
  }
  body.newui .projects-table tbody tr:first-child { border-top: 0; }
  body.newui .projects-table td {
    padding: 3px 0;
    border: 0;
  }
  body.newui .projects-table .col-id {
    display: inline-block;
    width: auto;
    margin-right: 8px;
  }
  body.newui .projects-table .col-date {
    display: inline-block;
    width: auto;
  }
  body.newui .projects-table .col-title { padding-top: 2px; }
  body.newui .projects-table .col-role,
  body.newui .projects-table .col-status {
    width: auto;
    display: inline-block;
    margin-right: 6px;
    padding-top: 4px;
  }
}



/* Подпись под полем формы (подсказка/ошибка), ссылается aria-describedby. */
body.newui .field-hint {
  margin: 4px 0 0;
  font-size: 12px;
  color: var(--text2, #666);
}
body.newui input:user-invalid + .field-hint,
body.newui textarea:user-invalid + .field-hint {
  color: var(--danger, #d33);
}

/* ═══════ DaData-подсказки адреса: тёмная тема ═══════
   Библиотека зашивает background:#fff и color:#777 литералами — в тёмной теме
   получался белый список с почти невидимым серым текстом (жалоба 04.08).
   Переопределяем на токены; !important нужен, потому что vendor-CSS грузится
   после бандла и бьёт по тем же классам. */
body.newui .suggestions-suggestions,
body.newui .suggestions-suggestion {
  background: var(--bg2) !important;
  border-color: var(--border) !important;
  color: var(--text) !important;
}
body.newui .suggestions-suggestions {
  border-radius: 10px;
  overflow: hidden;
  box-shadow: 0 8px 24px rgba(0, 0, 0, .25);
}
body.newui .suggestions-suggestion {
  padding: 9px 12px !important;
  border: 0 !important;
  border-bottom: 1px solid var(--border) !important;
  font-size: 14.5px;
  line-height: 1.4;
}
body.newui .suggestions-suggestion:last-child { border-bottom: 0 !important; }

/* Наведение и выбор клавишами — одинаково заметны. */
body.newui .suggestions-suggestion:hover,
body.newui .suggestions-selected {
  background: color-mix(in srgb, var(--accent) 16%, var(--bg2)) !important;
  color: var(--text) !important;
}

/* Совпавшая часть запроса — акцентом, а не синим по белому. */
body.newui .suggestions-suggestion strong {
  color: var(--accent) !important;
  font-weight: 600;
}

/* Подсказка сверху («Выберите вариант…»), уточнение и промо DaData. */
body.newui .suggestions-hint,
body.newui .suggestions-subtext,
body.newui .suggestions-promo {
  color: var(--text2, var(--text)) !important;
  background: var(--bg2) !important;
}
body.newui .suggestions-hint {
  border-bottom: 1px solid var(--border) !important;
  padding: 7px 12px !important;
}

/* ══════════════════════════════════════════
   404 (404.php)
   Было инлайном в шаблоне с хардкод-цветами (#bf9523, #333, #666) —
   мимо токенов, поэтому в тёмной теме текст сливался. Перенесено сюда.
   ══════════════════════════════════════════ */
body.newui .error-404-page {
  text-align: center;
  padding: clamp(2.5rem, 8vw, 5rem) 1rem;
  min-height: 55vh;
  display: flex; flex-direction: column;
  justify-content: center; align-items: center;
}
body.newui .error-404-number {
  font-family: var(--font-mono);
  font-size: clamp(64px, 16vw, 110px);
  font-weight: 700; line-height: 1;
  color: var(--accent);
  margin-bottom: 0.5rem;
}
body.newui .error-404-title {
  font-size: clamp(20px, 4vw, 28px); font-weight: 600;
  letter-spacing: -0.4px;
  color: var(--text); margin: 0 0 0.75rem;
}
body.newui .error-404-message {
  font-size: 15px; color: var(--text2);
  max-width: 560px; line-height: 1.6; margin: 0 0 1.75rem;
}
body.newui .error-404-actions {
  display: flex; gap: 12px;
  justify-content: center; flex-wrap: wrap;
}
body.newui .error-404-actions .adm_btn {
  padding: 0 1.75rem; line-height: 44px;
  font-size: 15px; text-decoration: none; display: inline-block;
}
body.newui .error-404-actions .btn-home {
  background: var(--accent-surface); color: #000; border: 0;
}

body.newui .error-404-links {
  margin-top: 2.25rem;
  font-size: 14px;
}
body.newui .error-404-links-label {
  display: block; color: var(--text3);
  font-size: 12px; margin-bottom: 0.6rem;
}
body.newui .error-404-links ul {
  list-style: none; margin: 0; padding: 0;
  display: flex; flex-wrap: wrap; gap: 8px 18px;
  justify-content: center;
}
body.newui .error-404-links a {
  color: var(--text2); text-decoration: none;
  border-bottom: 1px solid var(--border);
  transition: color var(--transition), border-color var(--transition);
}
body.newui .error-404-links a:hover {
  color: var(--text); border-color: var(--accent-border);
}

/* ══════════════════════════════════════════
   ДОКУМЕНТЫ (page-documents.php) + заголовки страниц (page.php)
   ══════════════════════════════════════════ */
body.newui .page-crumbs {
  font-size: 12px; color: var(--text3);
  display: flex; flex-wrap: wrap; gap: 6px; align-items: center;
  margin-bottom: 0.75rem;
}
body.newui .page-crumbs a { color: var(--text3); text-decoration: none; }
body.newui .page-crumbs a:hover { color: var(--text2); text-decoration: underline; }

body.newui .page-title {
  font-size: clamp(22px, 3vw, 30px); font-weight: 600;
  letter-spacing: -0.5px; line-height: 1.2;
  color: var(--text); margin: 0 0 1.25rem;
}

/* Тело документа: длинный текст — своя типографика */
body.newui .page-body { font-size: 15px; line-height: 1.7; color: var(--text2); max-width: 76ch; }
/* section.page в селекторе не для точности, а для веса: 01-core красит
   `body.newui section.page h2` (0-2-3) в 17px/margin 1rem, и голый
   `.page-body h2` (0-2-1) ему молча проигрывал — ритм лонгрида не работал. */
body.newui section.page .page-body h2,
body.newui .page-body h2 {
  font-size: 18px; font-weight: 600; color: var(--text);
  /* 2.6rem сверху (было 2): при 0.9rem под абзацем секции слипались —
     ритм выровнен по посадочной подключения (02.09.2026). */
  margin: 2.6rem 0 0.9rem; letter-spacing: -0.2px;
}
body.newui .page-body h3 {
  font-size: 15px; font-weight: 600; color: var(--text);
  margin: 1.6rem 0 0.45rem;
}
body.newui .page-body p { margin: 0 0 1.1rem; }
body.newui .page-body ul, body.newui .page-body ol { margin: 0 0 1rem; padding-left: 1.3rem; }
body.newui .page-body li { margin: 0.3rem 0; }
body.newui .page-body a { color: var(--accent); }
body.newui .page-body strong { color: var(--text); }
body.newui .page-body code {
  font-family: var(--font-mono); font-size: 0.9em;
  background: var(--bg3); padding: 1px 5px; border-radius: 4px;
}
body.newui .page-body mark {
  background: var(--accent-dim); color: var(--text);
  padding: 1px 6px; border-radius: 4px;
  border: 1px dashed var(--accent-border);
}
body.newui .page-body .doc-updated {
  font-size: 12px; color: var(--text3); font-family: var(--font-mono);
  margin-bottom: 1.5rem;
}
body.newui .page-body .doc-warning {
  background: var(--accent-dim); border: 1px solid var(--accent-border);
  border-radius: var(--radius); padding: 0.85rem 1rem;
  font-size: 14px; color: var(--text);
}

/* Разводящая «Документы» */
body.newui .docs-hub-intro { margin-bottom: 1.75rem; }
body.newui .docs-list { list-style: none; margin: 0; padding: 0; display: grid; gap: 10px; }
@media (min-width: 760px) { body.newui .docs-list { grid-template-columns: repeat(2, 1fr); } }
body.newui .docs-card {
  display: grid; grid-template-columns: 36px 1fr auto; gap: 12px;
  align-items: center; height: 100%;
  padding: 14px 16px;
  background: var(--bg2); border: 1px solid var(--border);
  border-radius: var(--radius); text-decoration: none; color: inherit;
  transition: border-color var(--transition), background var(--transition);
}
body.newui .docs-card:hover { border-color: var(--accent-border); background: var(--bg3); }
body.newui .docs-card-icon {
  width: 36px; height: 36px; border-radius: 9px;
  background: var(--accent-dim); color: var(--accent);
  display: flex; align-items: center; justify-content: center;
}
body.newui .docs-card-icon svg { width: 18px; height: 18px; }
body.newui .docs-card-body { display: flex; flex-direction: column; gap: 3px; min-width: 0; }
body.newui .docs-card-title { font-size: 14px; font-weight: 600; color: var(--text); line-height: 1.35; }
body.newui .docs-card-desc {
  font-size: 12px; color: var(--text3); line-height: 1.45;
  display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden;
}
body.newui .docs-card-cta { color: var(--accent); font-size: 15px; }

/* Юридическая строка в футере */
body.newui .site-footer-legal {
  grid-column: 1 / -1;
  margin-top: 1.25rem; padding-top: 1rem;
  border-top: 1px solid var(--border);
  display: flex; flex-wrap: wrap; gap: 8px 20px;
  align-items: center;
}
/* Тот же вид, что у ссылок в колонках выше: подчёркивание только по наведению,
   размер и цвет общие — иначе нижняя строка выглядит чужой. */
body.newui .site-footer-legal a {
  font-size: 13px; color: var(--text2); text-decoration: none; line-height: 1.45;
}
body.newui .site-footer-legal a:hover { color: var(--text); text-decoration: underline; }

/* Весь блок реквизитов одним шрифтом. Моноширинный тут смотрелся заплаткой:
   строка ОГРНИП — не голое число, а фраза с числом внутри. */
body.newui .copyright-entity { color: var(--text2); }
body.newui .copyright-req { color: var(--text3); }

/* Строка разработчика — самый низ футера, тише всего остального. */
body.newui .site-footer-dev {
  margin-top: 1rem; padding-top: 0.9rem;
  border-top: 1px solid var(--border);
  font-size: 12px; color: var(--text3);
}
body.newui .site-footer-dev a { color: var(--text3); text-decoration: none; }
body.newui .site-footer-dev a:hover { color: var(--text2); text-decoration: underline; }

/* ── Блог (single.php / archive.php / index.php) — задел под запуск ── */
body.newui .blog-meta { font-size: 12.5px; color: var(--text3); font-family: var(--font-mono); margin: -0.75rem 0 1.25rem; }
body.newui .blog-list { display: grid; gap: 12px; margin-top: 1rem; }
@media (min-width: 760px) { body.newui .blog-list { grid-template-columns: repeat(2, 1fr); } }
body.newui .blog-card {
  background: var(--bg2); border: 1px solid var(--border);
  border-radius: var(--radius); padding: 1.1rem 1.25rem;
  display: flex; flex-direction: column; gap: 6px;
}
body.newui .blog-card-title { margin: 0; font-size: 16px; font-weight: 700; line-height: 1.35; }
body.newui .blog-card-title a { color: var(--text); text-decoration: none; }
body.newui .blog-card-title a:hover { color: var(--accent); }
body.newui .blog-card-meta { margin: 0; font-size: 11.5px; color: var(--text3); font-family: var(--font-mono); }
body.newui .blog-card-excerpt { margin: 0; font-size: 13.5px; line-height: 1.55; color: var(--text2); }
body.newui .blog-card-more { font-size: 13px; font-weight: 600; color: var(--accent); text-decoration: none; }
body.newui .blog-pagination { margin-top: 1.25rem; display: flex; gap: 6px; flex-wrap: wrap; }
body.newui .blog-pagination .page-numbers {
  min-width: 38px; height: 38px; padding: 0 12px;
  display: inline-flex; align-items: center; justify-content: center;
  border: 1px solid var(--border); border-radius: 9px;
  color: var(--text2); text-decoration: none; font-size: 13px; font-weight: 600;
}
body.newui .blog-pagination .page-numbers.current { background: var(--accent-dim); border-color: var(--accent-border); color: var(--accent); }
body.newui .service-cta-heading { font-size: 16px; font-weight: 600; color: var(--text); margin: 0 0 0.4rem; }

/* artelteh — часть legacy-overrides.css. Загружается под body.newui.
 * Не редактировать вручную в продакшене без согласования.
 */
/* ══════════════════════════════════════════
   ADMIN PANEL / MAP — page-adminpanel, page-adminmap
   ══════════════════════════════════════════ */
body.newui .admin-panel,
body.newui .adm_panel,
body.newui .admin-tables {
  background: var(--bg2); border: 1px solid var(--border);
  border-radius: var(--radius); padding: 1.25rem;
  box-shadow: var(--card-shadow);
  margin-bottom: 1.25rem;
}

/* Wrapper — без рамки, только отступ */
body.newui .admin-table-wrapper {
  background: transparent !important;
  border: 0 !important;
  box-shadow: none !important;
  padding: 0 !important;
  margin: 0 0 2rem !important;
}
body.newui .admin-table-wrapper > h2,
body.newui .admin-table-wrapper > h2 a {
  color: var(--text) !important;
  font-size: 18px !important; font-weight: 700 !important;
  letter-spacing: -0.3px !important;
  border-bottom: 0 !important;
  padding-bottom: 0 !important;
  margin: 0 0 0.75rem !important;
  text-decoration: none !important;
}
body.newui .admin-table-wrapper > h2 a:hover {
  color: var(--accent) !important;
}

/* Карточка таблицы — единственная рамка */
body.newui .admin-table-card {
  background: var(--bg2) !important;
  border: 1px solid var(--border) !important;
  border-radius: var(--radius) !important;
  overflow: hidden !important;
  box-shadow: var(--card-shadow) !important;
  padding: 0 !important;
  margin: 0 !important;
}
body.newui .admin-table-card table {
  width: 100%; border-collapse: collapse; margin: 0;
  background: transparent !important;
}
body.newui .admin-table-card thead {
  background: var(--bg3) !important;
  border-bottom: 1px solid var(--border) !important;
}
body.newui .admin-table-card thead tr td,
body.newui .admin-table-card thead tr th {
  padding: 10px 14px !important;
  font-size: 11px !important; font-weight: 600 !important;
  letter-spacing: 0.5px !important; text-transform: uppercase !important;
  color: var(--text3) !important;
  border-right: 0 !important;
  border-bottom: 0 !important;
  text-align: left !important;
  background: transparent !important;
}
body.newui .admin-table-card tbody tr {
  border-bottom: 1px solid var(--border) !important;
}
body.newui .admin-table-card tbody tr:last-child { border-bottom: 0 !important; }
body.newui .admin-table-card tbody tr:hover {
  background: var(--bg3) !important;
}
body.newui .admin-table-card tbody td {
  padding: 10px 14px !important; font-size: 13px !important;
  color: var(--text) !important;
  background: transparent !important;
  border: 0 !important;
}
body.newui .admin-table-card a {
  color: var(--accent) !important;
}

/* Map height */
body.newui .single_map_wrapper {
  min-height: 460px;
  margin-top: 1rem;
}

/* ══════════════════════════════════════════
   ADMIN TABLES — mobile card view
   ══════════════════════════════════════════ */
@media (max-width: 768px) {
  body.newui .admin-table-card {
    overflow: visible !important;
    background: transparent !important;
    border: 0 !important;
    box-shadow: none !important;
    padding: 0 !important;
  }
  body.newui .admin-table-card table {
    display: block !important;
    min-width: 0 !important;
    background: transparent !important;
  }
  body.newui .admin-table-card thead { display: none !important; }
  body.newui .admin-table-card tbody {
    display: flex !important;
    flex-direction: column;
    gap: 8px;
    background: transparent !important;
  }
  body.newui .admin-table-card tbody tr {
    display: block !important;
    padding: 12px 14px !important;
    background: var(--bg2) !important;
    border: 1px solid var(--border) !important;
    border-radius: var(--radius) !important;
    box-shadow: var(--card-shadow);
    position: relative;
    overflow: hidden;
  }
  body.newui .admin-table-card tbody tr:hover { background: var(--bg2) !important; }
  body.newui .admin-table-card tbody td {
    display: block !important;
    padding: 0 !important;
    border: 0 !important;
    background: transparent !important;
    font-size: 13px;
    line-height: 1.45;
    color: var(--text2);
  }

  /* ── Projects table: ID,Создание,Название,Автор,Статус,Исполнитель,Действия ── */
  /* ID — мелкий бейдж сверху-слева */
  body.newui .projects_table tbody td:nth-child(1) {
    display: inline-block !important;
    font-size: 10px !important; font-weight: 600;
    padding: 2px 8px !important;
    background: var(--bg3); border-radius: var(--radius-sm);
    color: var(--text3) !important;
    margin-bottom: 6px;
  }
  body.newui .projects_table tbody td:nth-child(1)::before { content: '#'; }
  /* Дата создания — справа от ID */
  body.newui .projects_table tbody td:nth-child(2) {
    display: inline-block !important;
    font-size: 11px !important; color: var(--text3) !important;
    margin-left: 8px;
    font-variant-numeric: tabular-nums;
  }
  /* Название — крупное, основной заголовок */
  body.newui .projects_table tbody td:nth-child(3) {
    font-size: 15px !important; font-weight: 500 !important;
    color: var(--text) !important;
    margin: 6px 0 8px;
  }
  body.newui .projects_table tbody td:nth-child(3) a {
    color: var(--text) !important;
  }
  body.newui .projects_table tbody td:nth-child(3) a:hover { color: var(--accent) !important; }
  /* Автор */
  body.newui .projects_table tbody td:nth-child(4) {
    display: inline-block !important;
    font-size: 12px !important; color: var(--text3) !important;
    margin-right: 12px;
  }
  body.newui .projects_table tbody td:nth-child(4)::before {
    content: 'Автор: '; color: var(--text3);
  }
  /* Статус — pill */
  body.newui .projects_table tbody td:nth-child(5) {
    display: inline-block !important;
    font-size: 10px !important; font-weight: 600 !important;
    padding: 2px 8px !important;
    background: rgba(86,211,100,0.12) !important;
    color: var(--success) !important;
    border-radius: var(--radius-sm);
    text-transform: uppercase;
  }
  /* Исполнитель */
  body.newui .projects_table tbody td:nth-child(6) {
    display: block !important;
    font-size: 12px !important; color: var(--text2) !important;
    margin-top: 8px;
  }
  body.newui .projects_table tbody td:nth-child(6)::before {
    content: 'Исполнитель: '; color: var(--text3);
  }
  /* Действия — внизу справа */
  body.newui .projects_table tbody td.table-actions {
    display: flex !important;
    gap: 6px; justify-content: flex-end;
    margin-top: 10px;
    padding-top: 10px !important;
    border-top: 1px solid var(--border) !important;
  }
  body.newui .projects_table tbody td.table-actions .action-link {
    width: 36px; height: 36px;
    border-radius: var(--radius-sm);
    background: var(--bg3);
    display: inline-flex !important; align-items: center; justify-content: center;
    font-size: 14px !important; margin: 0 !important;
  }

  /* ── Workers/Users table: ID,Регистрация,Логин,Имя,Компания,Телефон,Почта,Проекты ── */
  body.newui .users_table tbody td:nth-child(1),
  body.newui .new_big_table tbody td:nth-child(1) {
    display: inline-block !important;
    font-size: 10px !important; font-weight: 600;
    padding: 2px 8px !important;
    background: var(--bg3); border-radius: var(--radius-sm);
    color: var(--text3) !important; margin-bottom: 6px;
  }
  body.newui .users_table tbody td:nth-child(1)::before,
  body.newui .new_big_table tbody td:nth-child(1)::before { content: '#'; }
  /* Регистрация (date) — рядом с ID */
  body.newui .users_table tbody td:nth-child(2) {
    display: inline-block !important;
    font-size: 11px !important; color: var(--text3) !important;
    margin-left: 8px;
    font-variant-numeric: tabular-nums;
  }
  /* Логин — крупно */
  body.newui .users_table tbody td:nth-child(3) {
    font-size: 16px !important; font-weight: 500 !important;
    margin: 6px 0 4px;
  }
  body.newui .users_table tbody td:nth-child(3) a {
    color: var(--text) !important;
  }
  body.newui .users_table tbody td:nth-child(3) a:hover { color: var(--accent) !important; }
  /* Имя */
  body.newui .users_table tbody td:nth-child(4) {
    font-size: 13px !important; color: var(--text2) !important;
    margin-bottom: 8px;
  }
  /* Компания / Телефон / Почта — список с лейблами */
  body.newui .users_table tbody td:nth-child(5),
  body.newui .users_table tbody td:nth-child(6),
  body.newui .users_table tbody td:nth-child(7) {
    font-size: 12px !important; color: var(--text2) !important;
    padding: 4px 0 !important;
    border-top: 1px dashed var(--border) !important;
  }
  body.newui .users_table tbody td:nth-child(5):empty,
  body.newui .users_table tbody td:nth-child(6):empty,
  body.newui .users_table tbody td:nth-child(7):empty { display: none !important; }
  body.newui .users_table tbody td:nth-child(5)::before { content: 'Компания: '; color: var(--text3); }
  body.newui .users_table tbody td:nth-child(6)::before { content: 'Телефон: '; color: var(--text3); }
  body.newui .users_table tbody td:nth-child(7)::before { content: 'E-mail: '; color: var(--text3); }
  /* Проекты count — pill */
  body.newui .users_table tbody td:nth-child(8) {
    display: inline-flex !important; align-items: center; gap: 4px;
    margin-top: 10px; padding: 4px 10px !important;
    background: var(--accent-dim); color: var(--accent) !important;
    border-radius: var(--radius-sm);
    font-size: 11px !important; font-weight: 600 !important;
  }
  body.newui .users_table tbody td:nth-child(8)::before {
    content: 'проектов: ';
  }
}

/* ══════════════════════════════════════════
   AUTH — login/register
   ══════════════════════════════════════════ */
body.newui section.auth-page {
  background: transparent;
  padding: 1.5rem 0 3rem !important;
}
body.newui section.auth-page > .wrap { display: block !important; }

body.newui .auth-shell {
  max-width: 420px; margin: 0 auto;
  display: flex; flex-direction: column; gap: 1.5rem;
  align-items: stretch;
}
@media (min-width: 600px) {
  body.newui .auth-shell { padding-top: 2rem; }
}

body.newui .auth-brand {
  display: flex; align-items: center; gap: 10px;
  justify-content: center;
  font-size: 18px; font-weight: 600; color: var(--text);
  letter-spacing: -0.3px;
}
body.newui .auth-brand-logo {
  width: 36px; height: 36px;
  background: var(--accent-surface);
  border-radius: 9px;
  display: flex; align-items: center; justify-content: center;
  flex-shrink: 0;
}
body.newui .auth-brand-logo svg { width: 18px; height: 18px; }

body.newui .auth-card {
  background: var(--bg2);
  border: 1px solid var(--border);
  border-radius: var(--radius);
  padding: 2rem 1.75rem;
  box-shadow: var(--card-shadow);
}
body.newui .auth-title {
  font-size: 22px; font-weight: 600;
  color: var(--text); letter-spacing: -0.4px;
  margin: 0 0 0.5rem;
}
body.newui .auth-sub {
  font-size: 13px; color: var(--text2);
  margin: 0 0 1.5rem; line-height: 1.5;
}

body.newui .auth-alert {
  padding: 12px 14px;
  border-radius: var(--radius-sm);
  font-size: 13px; line-height: 1.4;
  margin: 0 0 1rem;
}
body.newui .auth-alert-error {
  background: rgba(255,107,99,0.10) !important;
  color: var(--danger) !important;
  border: 1px solid rgba(255,107,99,0.25) !important;
}
body.newui .auth-alert-success {
  background: rgba(86,211,100,0.10) !important;
  color: var(--success) !important;
  border: 1px solid rgba(86,211,100,0.25) !important;
}

body.newui .auth-form {
  display: flex; flex-direction: column; gap: 14px;
}
body.newui .auth-field-row {
  display: grid; grid-template-columns: 1fr 1fr;
  gap: 12px;
}
@media (max-width: 460px) {
  body.newui .auth-field-row { grid-template-columns: 1fr; }
}

body.newui .auth-field {
  display: flex; flex-direction: column; gap: 6px;
  position: relative;
}
body.newui .auth-field label {
  font-size: 11px; font-weight: 600;
  text-transform: uppercase; letter-spacing: 0.5px;
  color: var(--text3);
}
/* Текстовые поля — на всю ширину. Радио и чекбоксы исключены: им 100%
   растягивало кружок до ширины карточки и выталкивало подпись за экран. */
body.newui .auth-field input:not([type="radio"]):not([type="checkbox"]) {
  width: 100% !important;
  background: var(--bg) !important;
  border: 1px solid var(--border2) !important;
  border-radius: var(--radius-sm) !important;
  padding: 11px 14px !important;
  font-size: 15px !important;
  color: var(--text) !important;
  min-height: 44px;
  font-family: inherit;
  transition: border-color var(--transition), box-shadow var(--transition);
}
body.newui .auth-field input:focus {
  outline: none !important;
  border-color: var(--accent) !important;
  box-shadow: 0 0 0 3px var(--accent-dim) !important;
}
body.newui .auth-hint {
  font-size: 11px; color: var(--text3);
  margin-top: 2px;
}

/* Password toggle */
body.newui .auth-pwd-wrap { position: relative; }
body.newui .auth-pwd-wrap input { padding-right: 44px !important; }
body.newui .auth-pwd-toggle {
  position: absolute; right: 4px; top: 50%; transform: translateY(-50%);
  width: 36px; height: 36px;
  background: transparent !important; border: 0 !important;
  display: flex; align-items: center; justify-content: center;
  color: var(--text3); cursor: pointer;
  border-radius: var(--radius-xs);
}
body.newui .auth-pwd-toggle:hover { color: var(--accent); background: var(--bg3) !important; }
body.newui .auth-pwd-toggle .ico-eye-off { display: none; }
body.newui .auth-pwd-toggle.is-shown .ico-eye { display: none; }
body.newui .auth-pwd-toggle.is-shown .ico-eye-off { display: block; }

body.newui .auth-submit {
  background: var(--accent-surface) !important;
  color: #000 !important;
  border: 0 !important;
  padding: 13px 22px !important;
  border-radius: var(--radius-sm) !important;
  font-weight: 600 !important; font-size: 15px !important;
  min-height: 48px; cursor: pointer;
  transition: background var(--transition), transform var(--transition);
  margin-top: 6px;
  width: 100%;
}
body.newui .auth-submit:hover { background: var(--accent-surface-hover) !important; }
body.newui .auth-submit:active { transform: scale(0.98); }

body.newui .auth-honeypot {
  position: absolute !important; left: -9999px !important;
  width: 1px; height: 1px; overflow: hidden;
}

body.newui .auth-terms {
  font-size: 11px; color: var(--text3);
  line-height: 1.5; margin: 8px 0 0; text-align: center;
}
body.newui .auth-terms a { color: var(--text2); text-decoration: underline; text-underline-offset: 2px; }
body.newui .auth-terms a:hover { color: var(--accent); }

body.newui .auth-footer {
  margin-top: 1.25rem; padding-top: 1.25rem;
  border-top: 1px solid var(--border);
  text-align: center; font-size: 13px; color: var(--text2);
}
body.newui .auth-footer a {
  color: var(--accent); font-weight: 600;
  text-decoration: none;
}
body.newui .auth-footer a:hover { text-decoration: underline; }


/* ── Admin workers: header + add-worker modal ─────────────── */
body.newui .admin-workers-header {
  display: flex; align-items: center; justify-content: space-between;
  gap: 12px; flex-wrap: wrap; margin: 0 0 16px;
}
body.newui .admin-workers-header h1 { margin: 0; }

body.newui .admin-modal {
  position: fixed; inset: 0; z-index: 1000;
  display: flex; align-items: center; justify-content: center;
  padding: 16px;
}
body.newui .admin-modal[hidden] { display: none !important; }
body.newui .admin-modal__backdrop {
  position: absolute; inset: 0;
  background: rgba(0,0,0,0.55);
  backdrop-filter: blur(2px);
}
body.newui .admin-modal__panel {
  position: relative; z-index: 1;
  background: var(--bg2); color: var(--text);
  border: 1px solid var(--border);
  border-radius: var(--radius);
  max-width: 480px; width: 100%;
  max-height: calc(100vh - 32px); overflow: auto;
  padding: 20px 22px 18px;
  box-shadow: 0 18px 60px rgba(0,0,0,0.35);
}
body.newui .admin-modal__close {
  position: absolute; top: 8px; right: 10px;
  width: 32px; height: 32px; border-radius: 50%;
  background: transparent; border: 0; cursor: pointer;
  font-size: 22px; line-height: 1; color: var(--text2);
}
body.newui .admin-modal__close:hover { color: var(--text); background: var(--bg3); }
body.newui .admin-modal__title { margin: 0 0 14px; font-size: 18px; }
body.newui .admin-modal__form { display: flex; flex-direction: column; gap: 10px; }
body.newui .admin-modal__row { display: flex; flex-direction: column; gap: 4px; font-size: 13px; color: var(--text2); }
body.newui .admin-modal__row em { color: var(--danger); font-style: normal; }
body.newui .admin-modal__row input {
  font: inherit; color: var(--text);
  background: var(--bg); border: 1px solid var(--border);
  border-radius: var(--radius-sm); padding: 9px 11px;
  transition: border-color var(--transition);
}
body.newui .admin-modal__row input:focus { outline: none; border-color: var(--accent); }
body.newui .admin-modal__error {
  background: rgba(220,53,69,0.12); color: var(--danger);
  border: 1px solid rgba(220,53,69,0.35);
  padding: 8px 12px; border-radius: var(--radius-sm); font-size: 13px;
}
body.newui .admin-modal__actions {
  display: flex; justify-content: flex-end; gap: 8px; margin-top: 6px;
}
body.newui .admin-modal__success { display: block; }
body.newui .admin-modal__success h3 { margin: 0 0 8px; font-size: 16px; color: var(--success, #1f8a3f); }
body.newui .admin-modal__success dl { margin: 10px 0; }
body.newui .admin-modal__success dt { font-size: 12px; color: var(--text2); margin-top: 6px; }
body.newui .admin-modal__success dd { margin: 2px 0 0; }
body.newui .admin-modal__success code {
  display: inline-block; background: var(--bg3); border: 1px solid var(--border);
  padding: 4px 8px; border-radius: var(--radius-sm); font-family: ui-monospace, monospace;
  user-select: all; word-break: break-all;
}
body.newui .admin-modal__note { font-size: 12px; color: var(--text2); margin: 8px 0 0; }

/* ── Logout page (centered icon + message) ────────────────── */
body.newui .logout-page .auth-card { text-align: center; }
body.newui .logout-page .auth-title { text-align: center; margin-top: 0; }
body.newui .logout-page .auth-sub   { text-align: center; }
body.newui .logout-icon {
  width: 64px; height: 64px; margin: 4px auto 14px;
  display: flex; align-items: center; justify-content: center;
  border-radius: 50%;
  background: var(--bg3); color: var(--text2);
}
body.newui .logout-icon svg { width: 30px; height: 30px; }
body.newui .logout-icon--done {
  background: rgba(76, 175, 80, 0.16);
  color: #1f7a2b;
}
[data-theme="dark"] body.newui .logout-icon--done {
  background: rgba(76, 175, 80, 0.22);
  color: #6ad07c;
}
body.newui .logout-page .auth-form { margin-top: 6px; }
body.newui a.auth-submit.logout-submit-link {
  display: block; text-decoration: none; text-align: center;
}
body.newui .logout-page .auth-footer {
  text-align: center;
  border-top: 1px solid var(--border);
  padding-top: 1rem; margin-top: 1.25rem;
}


/* ── Панель над админскими таблицами ────────────────────────────
   Класс `.admin-table-toolbar` стоял в трёх шаблонах (заказы, исполнители,
   пользователи), но CSS под него не было вообще: строка прилипала к краю, а
   на «Заказах» ещё и разъезжалась из-за нестилизованного <select>. Теперь
   панель одинаковая на всех трёх страницах. */
body.newui .admin-table-toolbar {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 8px 18px;
  margin: 0 0 12px;
  padding: 11px 14px;
  background: var(--bg2);
  border: 1px solid var(--border);
  border-radius: var(--radius, 12px);
  font-size: 13.5px;
  color: var(--text2, var(--text));
  line-height: 1.3;
}
body.newui .admin-table-toolbar b {
  color: var(--text);
  font-weight: 600;
}
/* Инлайновые margin-left из шаблонов убраны — расстояния держит gap. */
body.newui .admin-table-toolbar > span,
body.newui .admin-table-toolbar > form { margin: 0 !important; }

/* Активный фильтр из карточек дашборда. Без этой плашки «Всего: 7» читается
   как «в базе 7 заявок», а не «7 в отфильтрованном списке». */
body.newui .admin-table-filter {
  display: inline-flex;
  align-items: center;
  gap: 7px;
  padding: 3px 6px 3px 10px;
  border-radius: var(--radius-sm);
  background: color-mix(in srgb, var(--accent, #bf9523) 16%, transparent);
  color: var(--text);
  font-size: 12.5px;
}
body.newui .admin-table-filter a {
  text-decoration: none;
  color: var(--text2, var(--text));
  font-size: 15px;
  line-height: 1;
  padding: 0 3px;
}
body.newui .admin-table-filter a:hover { color: var(--text); }

body.newui .admin-table-toolbar form {
  display: flex;
  align-items: center;
  /* Селект прижимаем вправо: это управление, а не часть счётчиков. */
  margin-left: auto !important;
}
body.newui .admin-table-toolbar label {
  display: flex;
  align-items: center;
  gap: 8px;
  margin: 0;
}
body.newui .admin-table-toolbar select {
  font: inherit;
  font-size: 13.5px;
  padding: 5px 10px;
  border: 1px solid var(--border);
  border-radius: 8px;
  background: var(--bg);
  color: var(--text);
  cursor: pointer;
}
body.newui .admin-table-toolbar select:focus {
  outline: none;
  border-color: var(--accent);
}

/* Счётчик комментариев в таблице заказов. Ноль приглушён, чтобы взгляд
   цеплялся за заявки, где обсуждение есть. */
body.newui .cell-comments { text-align: center; white-space: nowrap; }
body.newui .comments-badge {
  display: inline-flex;
  align-items: center;
  gap: 4px;
  font-variant-numeric: tabular-nums;
  color: var(--text);
}
body.newui .comments-badge--zero { color: var(--text2, var(--text)); opacity: .5; }
body.newui .comments-badge svg { display: block; }

@media (max-width: 600px) {
  body.newui .admin-table-toolbar { gap: 6px 12px; font-size: 12.5px; }
  body.newui .admin-table-toolbar form { margin-left: 0 !important; width: 100%; }
}

/* ═══════ Выбор роли при регистрации ═══════
   Radio-карточки вместо <select>: вариантов два, и выбор влияет на права —
   он должен быть виден целиком, без раскрытия списка. */
body.newui .auth-label {
  display: block;
  margin-bottom: 6px;
  font-size: 13px;
  color: var(--text2, var(--text));
}
body.newui .auth-roles { display: grid; gap: 8px; }
body.newui .auth-role {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 11px 13px;
  border: 1px solid var(--border);
  border-radius: 10px;
  background: var(--bg);
  color: var(--text);
  font-size: 14.5px;
  cursor: pointer;
  transition: border-color 120ms ease, background 120ms ease;
}
body.newui .auth-role:active { transform: scale(0.99); }
body.newui .auth-role input {
  accent-color: var(--accent); flex-shrink: 0; margin: 0;
  /* Общее правило auth-форм задаёт input width:100% — радио растягивалось
     до 222px, текст роли выталкивало за экран (горизонтальный скролл на
     регистрации с телефона). Найдено при A/B-проверке бандлов. */
  width: 18px !important; height: 18px !important;
  min-height: 0; padding: 0 !important; border: 0 !important;
}
/* :has поддерживают все актуальные браузеры; где нет — просто не подсветится. */
body.newui .auth-role:has(input:checked) {
  border-color: var(--accent);
  background: color-mix(in srgb, var(--accent) 12%, var(--bg));
}

/* ═══════ Заявки на регистрацию (панель админа) ═══════ */
body.newui .reg-moderation .reg-count {
  display: inline-block;
  min-width: 22px;
  padding: 1px 7px;
  border-radius: 999px;
  background: var(--accent);
  color: #fff;
  font-size: 13px;
  text-align: center;
  vertical-align: middle;
}
body.newui .reg-table td { vertical-align: middle; }
body.newui .reg-actions { white-space: nowrap; }
body.newui .reg-actions .adm_btn { padding: 5px 12px; font-size: 13px; }
body.newui .reg-reject { background: transparent; border: 1px solid var(--border); color: var(--text2, var(--text)); }
body.newui .reg-approve { background: var(--accent); color: #fff; }
@media (max-width: 700px) {
  body.newui .reg-actions { white-space: normal; }
  body.newui .reg-actions .adm_btn { display: block; width: 100%; margin: 3px 0; }
}

/* Разделы админки без своей таблицы — ряд ссылок над «Заказами». */
body.newui .admin-tools {
  display: flex; flex-wrap: wrap; gap: 8px;
  margin: 0 0 1.25rem;
}
body.newui .admin-tools .adm_btn { margin: 0; }

/* Счета в кабинете заказчика: платят их одним заходом по всем заявкам. */
body.newui .client-invoices {
  background: var(--bg2); border: 1px solid var(--border);
  border-radius: var(--radius); padding: 18px 20px; margin-bottom: 1.25rem;
}
body.newui .cli-inv-head { display: flex; align-items: baseline; justify-content: space-between; gap: 12px; }
body.newui .cli-inv-head h2 { margin: 0 !important; }
body.newui .cli-inv-due { font-weight: 700; color: var(--accent); white-space: nowrap; }
body.newui .cli-inv-list { list-style: none; margin: 12px 0 0; padding: 0; }
body.newui .cli-inv-item {
  display: grid; grid-template-columns: 1fr auto auto auto;
  align-items: center; gap: 12px;
  padding: 11px 0; border-bottom: 1px solid var(--border);
}
body.newui .cli-inv-item:last-child { border-bottom: 0; }
body.newui .cli-inv-main { display: flex; flex-direction: column; gap: 3px; min-width: 0; }
body.newui .cli-inv-title { font-size: 14px; font-weight: 600; color: var(--text); }
body.newui .cli-inv-meta { font-size: 11px; color: var(--text3); }
body.newui .cli-inv-amount { font-weight: 700; white-space: nowrap; }
body.newui .cli-inv-status {
  font-size: 11px; font-weight: 600; text-transform: uppercase;
  padding: 3px 8px; border-radius: 6px;
  background: var(--bg3); color: var(--text3); white-space: nowrap;
}
body.newui .cli-inv-item.is-paid .cli-inv-status { background: rgba(86,211,100,.15); color: var(--success); }
body.newui .cli-inv-item.is-overdue .cli-inv-status { background: rgba(209,36,47,.14); color: var(--danger); }
body.newui .cli-inv-item.is-canceled { opacity: .55; }

/* Телефон под замком: объяснение и кнопка запроса вместо поля ввода. */
body.newui .field-locked {
  display: inline-flex; align-items: center; gap: 8px; flex-wrap: wrap;
  font-size: 12px; color: var(--text3);
}
body.newui .acc-phone-req {
  min-height: 30px; padding: 0 10px;
  border: 1px solid var(--border); border-radius: 8px;
  background: var(--bg3); color: var(--text);
  font-size: 12px; font-weight: 600; font-family: inherit; cursor: pointer;
}
body.newui .acc-phone-req:hover { border-color: var(--text3); }

@media (max-width: 640px) {
  body.newui .cli-inv-item { grid-template-columns: 1fr auto; row-gap: 6px; }
  body.newui .cli-inv-main { grid-column: 1 / -1; }
  body.newui .cli-inv-pay { grid-column: 1 / -1; text-align: center; }
}

/* ── Доступ в приложение (B24, page-account.php, кабинет kouz) ── */
body.newui .app-access-state {
  font-size: 13px; line-height: 1.5;
  padding: 0.75rem 1rem; border-radius: var(--radius);
  margin-bottom: 0.85rem; border: 1px solid var(--border);
  color: var(--text2);
}
body.newui .app-access-state.is-off {
  background: var(--accent-dim); border-color: var(--accent-border);
}
body.newui .app-access-state b { color: var(--text); }
body.newui .app-access-state code {
  font-family: var(--font-mono); font-size: 0.9em;
  background: var(--bg3); padding: 1px 5px; border-radius: 4px;
}
body.newui .app-access-search {
  width: 100%; margin-bottom: 0.75rem;
  padding: 9px 12px; font-size: 14px;
  background: var(--bg2); color: var(--text);
  border: 1px solid var(--border); border-radius: var(--radius-sm);
}
body.newui .app-access-search:focus { outline: none; border-color: var(--accent-border); }
body.newui .app-access-toggle {
  display: inline-flex; align-items: center; gap: 8px;
  cursor: pointer; font-size: 13px; color: var(--text2);
}
body.newui .app-access-toggle input { width: 16px; height: 16px; accent-color: var(--accent); cursor: pointer; }
body.newui .app-access-toggle input:disabled { opacity: .5; cursor: wait; }
body.newui .app-access-always { font-size: 12px; color: var(--text3); }

body.newui .app-access-state {
  display: flex; flex-wrap: wrap; gap: 12px;
  align-items: center; justify-content: space-between;
}
body.newui .app-access-state-text { flex: 1 1 320px; min-width: 0; }
body.newui .app-access-switch {
  display: inline-flex; align-items: center; gap: 8px;
  font-size: 13px; font-weight: 600; color: var(--text2);
  cursor: pointer; white-space: nowrap;
}
body.newui .app-access-switch input { width: 18px; height: 18px; accent-color: var(--accent); cursor: pointer; }
body.newui .app-access-switch input:disabled { opacity: .5; cursor: wait; }
body.newui .app-access-state.is-on { background: transparent; border-color: var(--border); }

/* На узком экране общая карточная раскладка прячет thead, и колонки
   «Роль»/«E-mail» теряют смысл. Подписи берём из data-label строк. */
@media (max-width: 768px) {
  body.newui #appAccessTable tbody tr { padding: 12px 14px !important; }
  body.newui #appAccessTable tbody td { display: flex !important; gap: 10px; justify-content: space-between; align-items: baseline; }
  body.newui #appAccessTable tbody td + td { margin-top: 6px; }
  body.newui #appAccessTable tbody td + td::before {
    content: attr(data-label);
    flex: 0 0 auto; font-size: 11.5px; color: var(--text3);
  }
  body.newui #appAccessTable tbody td:first-child { display: block !important; }
  body.newui #appAccessTable tbody td:first-child b { font-size: 14px; color: var(--text); }
  body.newui #appAccessTable tbody td:first-child small { color: var(--text3); }
  body.newui #appAccessTable tbody td[data-label="E-mail"] { word-break: break-all; text-align: right; }
}

/* ── Настройка ежедневного отчёта (page-account.php, кабинет kouz) ── */
body.newui .report-form { display: flex; flex-direction: column; gap: 12px; margin-top: 12px; }
body.newui .report-row { display: flex; flex-wrap: wrap; gap: 12px; }
body.newui .report-row label {
  flex: 1 1 260px; min-width: 0;
  display: flex; flex-direction: column; gap: 5px;
  font-size: 12px; font-weight: 600; color: var(--text2);
}
body.newui .report-row label em { font-weight: 500; font-style: normal; color: var(--text3); }
body.newui .report-row .app-access-search { margin-bottom: 0; }
body.newui .report-check {
  flex: 0 0 auto !important; flex-direction: row !important;
  align-items: center; gap: 8px !important; align-self: flex-end;
  padding-bottom: 10px; cursor: pointer;
}
body.newui .report-check input { width: 18px; height: 18px; accent-color: var(--accent); cursor: pointer; }
body.newui .report-actions { display: flex; flex-wrap: wrap; align-items: center; gap: 10px; }
body.newui .report-msg { font-size: 13px; }
body.newui .report-msg.is-ok { color: #4ec97e; }
body.newui .report-msg.is-error { color: #e05252; }

/* artelteh — часть legacy-overrides.css. Загружается под body.newui.
 * Не редактировать вручную в продакшене без согласования.
 */
/* ══════════════════════════════════════════
   SERVICES — archive-services.php / single-services.php
   ══════════════════════════════════════════ */
body.newui section.services_archive {
  background: transparent;
  /* Верхний отступ: 1rem прижимал крошки вплотную к топбару. */
  padding: 1.75rem 0 3rem !important;
  width: 100% !important;
  display: block !important;
}
@media (min-width: 769px) {
  body.newui section.services_archive { padding: 2.5rem 0 4rem !important; }
}
body.newui section.services_archive > .wrap {
  width: 100% !important;
  max-width: calc(var(--content) + 2 * var(--gutter)) !important;
  margin: 0 auto !important;
  box-sizing: border-box;
}

body.newui .services-hero {
  margin: 0 0 1.5rem;
}
body.newui .services-hero-tag {
  font-size: 11px; font-weight: 600;
  text-transform: uppercase; letter-spacing: 1.2px;
  color: var(--accent);
  margin-bottom: 0.5rem;
}
body.newui .services-hero h1 {
  font-size: clamp(24px, 3vw, 32px); font-weight: 600;
  letter-spacing: -0.6px; line-height: 1.15;
  color: var(--text); margin: 0 0 0.5rem;
}
body.newui .services-hero-sub {
  font-size: 15px; color: var(--text2); line-height: 1.5;
  margin: 0; padding-bottom: 15px;
}

body.newui .services-grid {
  display: grid; grid-template-columns: 1fr;
  gap: 12px; list-style: none; padding: 0; margin: 0;
}
@media (min-width: 760px) { body.newui .services-grid { grid-template-columns: repeat(2,1fr); } }

body.newui .service-card {
  display: grid;
  grid-template-columns: 40px 1fr auto;
  gap: 12px 14px;
  padding: 16px 18px;
  background: var(--bg2); border: 1px solid var(--border);
  border-radius: var(--radius);
  text-decoration: none; color: var(--text);
  transition: border-color var(--transition), background var(--transition), transform var(--transition);
  align-items: center;
}
body.newui .service-card:hover {
  border-color: var(--accent-border);
  background: var(--bg3);
  transform: translateY(-1px);
}
body.newui .service-card-icon {
  width: 40px; height: 40px;
  background: var(--accent-dim); border-radius: 10px;
  display: flex; align-items: center; justify-content: center;
}
body.newui .service-card-icon svg { width: 20px; height: 20px; color: var(--accent); }
body.newui .service-card-body {
  display: flex; flex-direction: column; gap: 4px;
  min-width: 0;
}
body.newui .service-card-title {
  font-size: 14px; font-weight: 500; line-height: 1.35;
  color: var(--text);
}
body.newui .service-card-desc {
  font-size: 12px; color: var(--text2);
  line-height: 1.45; margin: 0;
  display: -webkit-box; -webkit-line-clamp: 2;
  -webkit-box-orient: vertical; overflow: hidden;
}
body.newui .service-card-cta {
  font-size: 16px; color: var(--accent);
  align-self: center;
  transition: transform var(--transition);
}
body.newui .service-card:hover .service-card-cta { transform: translateX(2px); }

/* Single service page */
body.newui section.single-service { background: transparent; padding: 1.75rem 0 3rem !important; }
body.newui section.single-service {
  width: 100% !important;
  display: block !important;
}
@media (min-width: 769px) {
  body.newui section.single-service { padding: 2.5rem 0 4rem !important; }
}
body.newui section.single-service > .wrap {
  display: block !important;
  width: 100% !important;
  max-width: calc(var(--content) + 2 * var(--gutter)) !important;
  margin: 0 auto !important;
  box-sizing: border-box;
}

body.newui .service-article {
  margin: 0;
  display: flex; flex-direction: column; gap: 1.5rem;
}
body.newui .service-article-header { margin: 0; }
body.newui .service-article-tag {
  font-size: 11px; font-weight: 600;
  text-transform: uppercase; letter-spacing: 1.2px;
  color: var(--accent); margin-bottom: 0.5rem;
}
body.newui .service-article-header h1 {
  font-size: clamp(24px, 3vw, 32px); font-weight: 600;
  letter-spacing: -0.6px; line-height: 1.15;
  color: var(--text); margin: 0;
}
body.newui .service-article-body {
  background: var(--bg2); border: 1px solid var(--border);
  border-radius: var(--radius);
  padding: 1.5rem 1.75rem;
  font-size: 15px; line-height: 1.7; color: var(--text);
}
body.newui .service-article-body:empty,
body.newui .service-article-body:not(:has(*)),
body.newui .service-article-body:has(p:only-child:empty) {
  display: none;
}
/* Контейнер стал шире (общая ширина сайта 1176 вместо прежних 840), а строка
   прозой длиннее 75 знаков не читается — ограничиваем сам текст, не карточку. */
body.newui .service-article-body > * { max-width: 74ch; }
body.newui .service-article-body p { margin: 0 0 1em; color: var(--text); font-weight: 400; }
body.newui .service-article-body p:last-child { margin: 0; }
body.newui .service-article-body h2,
body.newui .service-article-body h3 {
  margin-top: 1.5em; color: var(--text);
}
body.newui .service-article-body ul,
body.newui .service-article-body ol {
  padding-left: 1.5em; margin: 0 0 1em;
}
body.newui .service-article-body li { margin: 0.25em 0; }

body.newui .service-article-cta {
  background: linear-gradient(135deg, var(--accent-dim) 0%, var(--bg2) 70%);
  border: 1px solid var(--accent-border);
  border-radius: var(--radius);
  padding: 1.25rem 1.5rem;
  display: flex; flex-wrap: wrap; align-items: center;
  justify-content: space-between; gap: 1rem;
}
body.newui .service-article-cta-text { flex: 1; min-width: 220px; }
body.newui .service-article-cta-text h3 {
  font-size: 16px; font-weight: 600;
  color: var(--text); margin: 0 0 0.25rem;
}
body.newui .service-article-cta-text p {
  font-size: 13px; color: var(--text2); margin: 0;
}
body.newui .service-article-cta .btn-cta {
  background: var(--accent-surface); color: #000;
  font-weight: 600; font-size: 13px;
  padding: 10px 18px; border-radius: var(--radius-sm);
  text-decoration: none; white-space: nowrap;
  border: 0; min-height: 40px;
  display: inline-flex; align-items: center;
}
body.newui .service-article-cta .btn-cta:hover { background: var(--accent-surface-hover); }

/* ══════════════════════════════════════════
   ARCHIVES
   ══════════════════════════════════════════ */
body.newui .projects_archive,
body.newui .services_archive {
  display: grid; grid-template-columns: 1fr;
  gap: 12px;
}
@media(min-width: 640px) {
  body.newui .projects_archive,
  body.newui .services_archive { grid-template-columns: repeat(2,1fr); }
}
@media(min-width: 960px) {
  body.newui .projects_archive,
  body.newui .services_archive { grid-template-columns: repeat(3,1fr); }
}
body.newui .inarchive,
body.newui .projects_archive > article,
body.newui .services_archive > article {
  background: var(--bg2); border: 1px solid var(--border);
  border-radius: var(--radius); padding: 1rem;
  box-shadow: var(--card-shadow);
  transition: box-shadow var(--transition), border-color var(--transition);
  display: flex; flex-direction: column; gap: 6px;
  text-decoration: none; color: inherit;
}
body.newui .inarchive:hover,
body.newui .projects_archive > article:hover,
body.newui .services_archive > article:hover {
  border-color: var(--accent-border);
  box-shadow: var(--card-shadow-hover);
}
body.newui .inarchive h2,
body.newui .inarchive h3 {
  font-size: 15px; font-weight: 600; color: var(--text);
  margin: 0;
}
body.newui .post_date {
  font-size: 11px; color: var(--text3);
}

/* ══════════════════════════════════════════
   404
   ══════════════════════════════════════════ */
body.newui .error-404,
body.newui body.error404 section.page {
  text-align: center; padding: 4rem 1rem;
}
body.newui section.page .error404-title {
  font-size: 6rem; font-weight: 700; color: var(--accent);
  line-height: 1; margin-bottom: 1rem;
}

/* ══════════════════════════════════════════
   ADMIN TABLES — new_big_table
   ══════════════════════════════════════════ */
body.newui .new_big_table {
  width: 100%; border-collapse: collapse;
  background: var(--bg2);
  border: 1px solid var(--border);
  border-radius: var(--radius);
  overflow: hidden;
  margin-bottom: 1rem;
}
body.newui .new_big_table thead th {
  background: var(--bg3); text-align: left;
  padding: 10px 12px; font-size: 11px;
  font-weight: 600; letter-spacing: 0.8px;
  text-transform: uppercase; color: var(--text3);
  border-bottom: 1px solid var(--border);
}
body.newui .new_big_table tbody td {
  padding: 10px 12px; font-size: 13px;
  color: var(--text); border-bottom: 1px solid var(--border);
}
body.newui .new_big_table tbody tr:last-child td { border-bottom: 0; }
body.newui .new_big_table tbody tr:hover { background: var(--bg3); }
body.newui .new_big_table a { color: var(--accent); }

body.newui .table-actions {
  display: flex; flex-wrap: wrap; gap: 6px;
  padding: 0.75rem 0;
}


/* ── Консультация + смежные услуги (single-services.php) ── */
body.newui .service-consult {
  margin-top: 1rem;
  padding: 1.15rem 1.25rem;
  border: 1px dashed var(--border);
  border-radius: var(--radius);
  background: transparent;
}
body.newui .service-consult h3 {
  font-size: 16px; font-weight: 600; color: var(--text);
  margin: 0 0 0.4rem;
}
body.newui .service-consult p {
  font-size: 14px; color: var(--text2); line-height: 1.55; margin: 0 0 0.75rem;
}
body.newui .service-consult-link {
  font-size: 14px; font-weight: 600;
  color: var(--accent); text-decoration: none;
}
body.newui .service-consult-link:hover { text-decoration: underline; }

body.newui .service-related { margin-top: 2.5rem; }
body.newui .service-related h2 {
  font-size: 18px; font-weight: 600; letter-spacing: -0.3px;
  color: var(--text); margin: 0 0 0.9rem;
}
body.newui .service-related-grid {
  display: grid; grid-template-columns: 1fr; gap: 10px;
}
@media (min-width: 700px) {
  body.newui .service-related-grid { grid-template-columns: repeat(3, 1fr); }
}
body.newui .service-related-card {
  display: flex; flex-direction: column; gap: 5px;
  padding: 0.9rem 1rem;
  background: var(--bg2); border: 1px solid var(--border);
  border-radius: var(--radius);
  text-decoration: none; color: inherit;
  transition: border-color var(--transition), box-shadow var(--transition);
}
body.newui .service-related-card:hover {
  border-color: var(--accent-border);
  box-shadow: var(--card-shadow-hover);
}
body.newui .service-related-title {
  font-size: 14px; font-weight: 600; color: var(--text); line-height: 1.35;
}
body.newui .service-related-desc {
  font-size: 12.5px; color: var(--text3); line-height: 1.45;
}

/* ── Как мы работаем (single-services.php) ── */
body.newui .service-steps { margin-top: 0.5rem; }
body.newui .service-steps h2 {
  font-size: 18px; font-weight: 600; letter-spacing: -0.3px;
  color: var(--text); margin: 0 0 0.9rem;
}
body.newui .service-steps-list {
  list-style: none; margin: 0; padding: 0;
  display: grid; gap: 10px;
}
@media (min-width: 760px) { body.newui .service-steps-list { grid-template-columns: repeat(3, 1fr); } }
body.newui .service-steps-list li {
  display: flex; gap: 12px; align-items: flex-start;
  padding: 1rem; background: var(--bg2);
  border: 1px solid var(--border); border-radius: var(--radius);
}
body.newui .service-step-num {
  flex: 0 0 26px; height: 26px; border-radius: 50%;
  background: var(--accent-dim); color: var(--accent);
  font-family: var(--font-mono); font-size: 12px; font-weight: 700;
  display: flex; align-items: center; justify-content: center;
}
body.newui .service-step-body {
  font-size: 13px; color: var(--text2); line-height: 1.5;
}
body.newui .service-step-body b {
  display: block; color: var(--text); font-size: 14px;
  font-weight: 600; margin-bottom: 3px;
}
body.newui .service-consult-go {
  font-size: 14px; font-weight: 600; color: var(--accent);
  text-decoration: none; margin-left: 1rem;
}
body.newui .service-consult-go:hover { text-decoration: underline; }

/* ── Страница консультации ── */
body.newui .page-body .lead {
  font-size: 16px; color: var(--text); line-height: 1.6;
  margin-bottom: 1.5rem;
}
body.newui .page-body ol { counter-reset: none; }

/* ── Блок «Кратко» на странице услуги (план, п. 8.3) ──
   Фактическая выжимка в начале текста: человеку — быстрый ответ, языковым
   моделям — готовый к цитированию абзац с конкретикой. */
body.newui .service-article-body .svc-facts {
  padding: 14px 16px; margin: 0 0 1.25rem;
  background: var(--accent-dim); border: 1px solid var(--accent-border);
  border-radius: var(--radius);
  font-size: 14px; line-height: 1.6; color: var(--text2);
}
body.newui .service-article-body .svc-facts b { color: var(--text); }
body.newui .service-article-body h3 {
  font-size: 14px; font-weight: 600; color: var(--text);
  margin: 1.2em 0 0.3em;
}

/* artelteh — часть legacy-overrides.css. Загружается под body.newui.
 * Не редактировать вручную в продакшене без согласования.
 */
/* ══════════════════════════════════════════
   POLISH — scrollbars, selection, focus, motion
   ══════════════════════════════════════════ */

body.newui ::selection {
  background: var(--accent-dim);
  color: var(--text);
}

/* Custom scrollbar (WebKit) — subtle, themed */
body.newui ::-webkit-scrollbar { width: 10px; height: 10px; }
body.newui ::-webkit-scrollbar-track { background: transparent; }
body.newui ::-webkit-scrollbar-thumb {
  background: var(--border2);
  border-radius: 100px;
  border: 2px solid var(--bg);
}
body.newui ::-webkit-scrollbar-thumb:hover { background: var(--text3); }
body.newui { scrollbar-width: thin; scrollbar-color: var(--border2) transparent; }

/* Unified focus-visible */
body.newui *:focus-visible {
  outline: 2px solid var(--accent);
  outline-offset: 2px;
  border-radius: var(--radius-xs);
}

/* Tabular nums for all numeric data (dates, ids) */
body.newui .td-id,
body.newui .td-date,
body.newui .message_date,
body.newui .conversation_last_date,
body.newui .note_date {
  font-variant-numeric: tabular-nums;
}

/* Reduced motion — disable custom transitions on request */
@media (prefers-reduced-motion: reduce) {
  body.newui *,
  body.newui *::before,
  body.newui *::after {
    transition-duration: 0.01ms !important;
    animation-duration: 0.01ms !important;
    animation-iteration-count: 1 !important;
  }
}

/* Active conversation highlight — clearer than hover */
body.newui .messages_conversations_list > li.active,
body.newui .messages_conversations_list > li[aria-current="true"] {
  background: var(--accent-dim) !important;
  border-left: 3px solid var(--accent);
  padding-left: 11px !important;
}

/* Consistent card hover for interactive cards */
body.newui .tile,
body.newui .inarchive,
body.newui .stat-card {
  transition: border-color var(--transition), box-shadow var(--transition), transform var(--transition);
}
body.newui .tile:hover,
body.newui .inarchive:hover {
  transform: translateY(-1px);
}

/* Link underline on hover for better affordance */
body.newui .td-link:hover,
body.newui .message_author_link:hover,
body.newui a.message_author_link:hover {
  text-decoration: underline;
  text-underline-offset: 2px;
}

/* Placeholder color everywhere */
body.newui input::placeholder,
body.newui textarea::placeholder {
  color: var(--text3) !important;
  opacity: 1;
}

/* Safe-area bottom padding on mobile (iOS notch).
   `!important` тут не убрать — он держит отступ под нижней навигацией против
   страничных стилей. Поэтому панель согласия НЕ спорит с этим правилом, а
   добавляет к нему свою высоту через --consent-pad (ставит JS в
   inc/consent.php, при скрытии обнуляет). Иначе панель накрывала конец
   страницы, а любые попытки перебить это правило снаружи проигрывали. */
@media (max-width: 768px) {
  body.newui {
    padding-bottom: calc(72px + env(safe-area-inset-bottom, 0) + var(--consent-pad, 0px)) !important;
  }

  /* Touch targets ≥44px на мобиле, кнопки крупнее */
  body.newui .topbar .icon-btn,
  body.newui .topbar .messages-link,
  body.newui .topbar .notifications-toggle,
  body.newui .topbar .topbar-user,
  body.newui .chat-back-btn,
  body.newui .icon-btn,
  body.newui .btn,
  body.newui .adm_btn,
  body.newui input[type="submit"],
  body.newui button[type="submit"] {
    min-height: 44px !important;
  }
  body.newui .topbar .icon-btn,
  body.newui .topbar .messages-link,
  body.newui .topbar .notifications-toggle {
    width: 40px !important; height: 40px !important;
    border: 1px solid var(--border) !important;
  }
  body.newui .topbar .icon-btn svg,
  body.newui .topbar .messages-link svg,
  body.newui .topbar .notifications-toggle svg {
    width: 18px !important; height: 18px !important;
  }
  body.newui .topbar {
    height: calc(56px + env(safe-area-inset-top, 0)) !important;
    padding: env(safe-area-inset-top, 0) 10px 0 !important;
    gap: 4px !important;
  }
  body.newui .topbar-spacer { flex: 1 1 auto !important; min-width: 0; }
  body.newui .topbar-logo-icon { width: 32px !important; height: 32px !important; }
  body.newui .topbar-logo-icon svg { width: 18px !important; height: 18px !important; }
  body.newui .topbar-logo-text { display: none !important; }
  body.newui .topbar-actions { margin-left: auto; }
  body.newui .topbar-actions { gap: 4px !important; }
  body.newui .topbar-user { padding: 0 !important; height: 40px !important; border: 0 !important; }
  body.newui .topbar-avatar { width: 32px !important; height: 32px !important; font-size: 12px !important; }
  body.newui .topbar-username { display: none !important; }
  /* На очень узких экранах прячем поиск (Cmd+K + поле сверху) */
  @media (max-width: 400px) {
    body.newui .topbar .search-toggle { display: none !important; }
  }

  /* Шрифты крупнее — h1, body, кнопки */
  body.newui h1 { font-size: 22px !important; }
  body.newui h2 { font-size: 18px !important; }
  body.newui .btn,
  body.newui .adm_btn,
  body.newui input[type="submit"],
  body.newui button[type="submit"] {
    font-size: 14px !important;
  }
  body.newui .btn-cta { font-size: 14px !important; padding: 10px 14px !important; }

  /* Inputs/textarea — 16px чтобы iOS не зумил */
  body.newui input[type="text"],
  body.newui input[type="email"],
  body.newui input[type="tel"],
  body.newui input[type="number"],
  body.newui input[type="password"],
  body.newui input[type="search"],
  body.newui textarea,
  body.newui select { font-size: 16px !important; }

  /* Карточки — побольше padding для тача */
  body.newui .stat-card,
  body.newui .tile,
  body.newui .service-card,
  body.newui .comment_item,
  body.newui .new-dialog-card {
    padding: 14px 16px !important;
  }
  body.newui .messages_conversations_list > li {
    padding: 14px 16px !important;
  }
  body.newui .conversation_user_name { font-size: 14px !important; }
  body.newui .conversation_preview { font-size: 13px !important; }

  /* Bottom nav крупнее */
  /* height с safe-area ВНУТРИ calc: border-box вычитает padding-bottom из
     высоты, и на iPhone полоса содержимого падала до 30px (64 − 34). */
  body.newui .bottom-nav {
    height: calc(64px + env(safe-area-inset-bottom, 0px)) !important;
    padding-bottom: env(safe-area-inset-bottom, 0px) !important;
  }
  body.newui .bottom-nav-item {
    font-size: 11px !important; font-weight: 500 !important;
    gap: 3px !important;
    padding: 6px 0 !important;
  }
  body.newui .bottom-nav-item:not(.bottom-nav-cta) svg {
    width: 22px !important; height: 22px !important;
  }
  body.newui .bottom-nav-cta .nav-cta-circle {
    width: 46px !important; height: 46px !important;
    /* Не сжимать по высоте: иначе круг превращается в овал (см. shared.css). */
    flex-shrink: 0 !important;
    aspect-ratio: 1 !important;
    margin-top: -16px !important;
  }
  body.newui .bottom-nav-cta .nav-cta-circle svg {
    width: 20px !important; height: 20px !important;
  }
  body.newui .bottom-nav-cta span {
    margin-top: -2px;
  }
}

/* Типографская шкала — грузится ПОСЛЕДНЕЙ.
 *
 * Лежит отдельным файлом, а не в shared.css, намеренно: shared идёт в бандле
 * первым, и его правила проигрывали одноимённым легаси-селекторам той же
 * специфичности (`body.newui .chk-counter` встречается в обоих). Шкала обязана
 * побеждать — значит должна быть последней, а не самой «тяжёлой»: наращивать
 * специфичность ради этого означало бы гонку, в которой каждый следующий файл
 * снова окажется сильнее.
 *
 * Токены --font / --font-mono остаются в shared.css: определения переменных
 * от порядка не зависят.
 */

/* ══════════════════════════════════════════
   ТИПОГРАФИКА
   Одна шкала на весь интерфейс. До неё размеры и веса задавались по месту в
   каждом файле, и заголовки одного уровня в разных блоках отличались на
   пару пикселей — глаз это читает как «свёрстано наспех».

   Manrope        400 500 600 700 800 — весь текст.
   JetBrains Mono 400 500 — ТОЛЬКО числа и техданные (см. блок ниже).
   ══════════════════════════════════════════ */

/* H1 — название страницы/заявки. */
body.newui h1 {
  font-weight: 700;
  font-size: clamp(22px, 2.4vw, 30px);
  line-height: 1.15;
  letter-spacing: -0.5px;
  color: var(--text);
}
/* .page-title — H1 контентных страниц (статьи, услуги, гео, документы,
   посадочные); страницы приложения этот класс не используют. Крупнее и
   жирнее общего h1 — просьба владельца 02.09.2026: заголовок должен
   доминировать над телом, а не сливаться с H2. */
body.newui .page-title,
body.newui section.page h1.page-title:first-of-type,
body.newui section.page > .wrap > h1.page-title:first-of-type {
  font-weight: 800;
  font-size: clamp(26px, 3.4vw, 38px);
  line-height: 1.12;
  letter-spacing: -0.8px;
  color: var(--text);
  margin: 0 0 1.5rem;
}

/* Заголовок блока: «Чек-лист работ», «Смета и оплаты». */
body.newui h3,
body.newui .block-title,
body.newui .single h2,
body.newui .admin-table-wrapper h2,
body.newui .pjx-main h2,
body.newui .pjx-side h2 {
  font-weight: 700;
  font-size: 16px;
  line-height: 1.3;
  letter-spacing: -0.2px;
  color: var(--text);
}

/* Подпись-лейбл капсом: «Заказчик», «Объект и услуга».
   Мелкий кегль компенсируется разрядкой — без неё капс слипается. */
body.newui .label-caps,
body.newui .pjx-eyebrow,
body.newui .pj-group-title,
body.newui .fin-sub {
  font-weight: 600;
  font-size: 11px;
  line-height: 1.2;
  letter-spacing: .12em;
  text-transform: uppercase;
  color: var(--text3);
}

/* Основной текст и значения полей. */
body.newui .pj-val,
body.newui .field-value {
  font-weight: 500;
  font-size: 14px;
  line-height: 1.45;
  color: var(--text);
}

/* Мелкие пояснения под полями и подписи. */
body.newui .hint,
body.newui .form-hint,
body.newui .pj-deadline-hint,
body.newui .chk-status,
body.newui .tpl-hint {
  font-weight: 400;
  font-size: 12px;
  line-height: 1.5;
  color: var(--text3);
}

/* Кнопки. Мелкие — 12px, задаются в своих модулях. */
button, input, select, textarea { font-family: var(--font); }
body.newui .btn,
body.newui .adm_btn {
  font-weight: 600;
  font-size: 13px;
}

/* ─────────────────────────────────────────
   Числа и техданные — JetBrains Mono.

   Не «для красоты»: в моноширинном все цифры одной ширины, поэтому колонка
   сумм не пляшет при пересчёте, а таймстемпы в ленте выстраиваются друг под
   другом сами. Прозу моноширинным НЕ набираем — читается заметно хуже.

   Что попадает: номер заявки, телефон, даты и время, счётчики вида «3 / 5»,
   временные метки в истории, денежные суммы.
   ───────────────────────────────────────── */
body.newui .num,
/* номер заявки */
body.newui .pjx-tag--id,
/* телефон */
body.newui .pjx-phone,
body.newui a[href^="tel:"],
/* даты и время */
body.newui .pjx-step-date,
body.newui .pjx-foot,
body.newui .comment_date,
body.newui .ptl-meta,
body.newui .conversation_last_date,
body.newui .fin-pay-meta,
body.newui .cal-daynum,
/* счётчики */
body.newui .chk-counter,
body.newui .conv-unread-count,
body.newui .conv-tab-badge,
body.newui .pjx-step-dot,
/* деньги */
body.newui .fin-total-val,
body.newui .fin-sum,
body.newui .fin-pay-amount,
body.newui .tpl-est-qty,
body.newui .tpl-est-price {
  font-family: var(--font-mono);
  font-variant-numeric: tabular-nums;
  /* Размер НЕ трогаем. Попытка «оптически подравнять» через font-size:0.94em
     сломала бы шкалу: em в font-size считается от РОДИТЕЛЯ, а не от своего
     размера, и счётчик «3 / 5» на 12px превращался в 13.2px от блока на 14px.
     Каждый элемент оставляет размер, назначенный ему шкалой. */
  letter-spacing: -0.01em;
}
/* Вес у mono только 400/500 — жирных начертаний в паре нет. */
body.newui .fin-total-val,
body.newui .chk-counter,
body.newui .conv-unread-count,
body.newui .conv-tab-badge { font-weight: 500; }

/* ═══════ Страница результатов поиска (search.php) ═══════ */
body.newui .search-form { display: flex; gap: 8px; margin: 0 0 1.25rem; }
body.newui .search-form input[type="search"] {
  flex: 1 1 auto; min-height: 46px; padding: 11px 14px;
  border: 1px solid var(--border2); border-radius: var(--radius-sm);
  background: var(--bg); color: var(--text);
  font-family: inherit; font-size: 15px;
}
body.newui .search-form input[type="search"]:focus {
  outline: none; border-color: var(--accent);
}
body.newui .search-form .btn-primary { flex: 0 0 auto; min-height: 46px; }
body.newui .search-count {
  margin: 0 0 1rem; font-size: 13px; color: var(--text3);
  font-family: var(--font-mono);
}
body.newui .search-list { display: grid; gap: 10px; }
body.newui .search-item {
  padding: 1rem 1.15rem;
  background: var(--bg2); border: 1px solid var(--border);
  border-radius: var(--radius);
}
body.newui .search-item-type {
  display: inline-block; margin-bottom: 5px;
  font-size: 11px; font-weight: 700; letter-spacing: 0.04em;
  text-transform: uppercase; color: var(--accent);
}
body.newui .search-item-title { margin: 0 0 4px; font-size: 16px; font-weight: 700; line-height: 1.35; }
body.newui .search-item-title a { color: var(--text); text-decoration: none; }
body.newui .search-item-title a:hover { color: var(--accent); }
body.newui .search-item-sum { margin: 0; font-size: 13.5px; line-height: 1.55; color: var(--text2); }
body.newui .search-empty { padding: 1.25rem 0; }
body.newui .search-empty-title { margin: 0 0 0.5rem; font-size: 16px; font-weight: 600; color: var(--text); }
body.newui .search-empty p { font-size: 14px; line-height: 1.6; color: var(--text2); }
body.newui .search-empty a { color: var(--accent); }

/* Кнопка удаления переписки в шапке чата (только админам).
   Красим в опасный цвет, чтобы не путали с поиском и медиа. */
body.newui .chat-purge-btn { color: #b32d2e; }
body.newui .chat-purge-btn:hover { background: rgba(179, 45, 46, 0.1); }

/* ═══════ Футер на светлой теме ═══════
   В светлой теме футер был `--bg` (#fff) — ровно как страница, и подвал
   визуально сливался с контентом: граница в один пиксель не читалась.
   Даём ему собственную поверхность.

   Правило живёт в 11-typography (последний файл бандла) и с `!important`
   намеренно: базовое `body.newui > footer { background: var(--bg) !important }`
   в 01-core иначе не перебить — порядок в бандле важнее специфичности,
   а !important там уже стоит.

   Скоуп — только светлая: тема переключается атрибутом `data-theme="dark"`,
   значение по умолчанию (без атрибута) — светлое. В тёмной футер и так
   отличается от полотна страницы. */
html:not([data-theme="dark"]) body.newui > footer,
html:not([data-theme="dark"]) body.newui footer:not(.site-footer):not(.newui-exempt) {
  background: var(--bg3) !important;
  border-top: 1px solid var(--border2);
  box-shadow: inset 0 1px 0 #fff;   /* мягкая линия света по верхней кромке */
}
/* Шапка на светлой теме — тем же приёмом, что и подвал: полотно страницы
   белое, а шапка и подвал на полтона темнее, и страница получает верхнюю и
   нижнюю границы. Токен --topbar-bg тут не трогаем: он полупрозрачный и общий
   для обеих тем, а нам нужен именно светлый вариант. */
html:not([data-theme="dark"]) body.newui .topbar {
  background: var(--bg3);
  border-bottom: 1px solid var(--border2);
  box-shadow: inset 0 -1px 0 #fff;   /* световая кромка снизу, зеркально подвалу */
}
/* Строка поиска раскрывается прямо под шапкой — иначе она осталась бы белой
   полосой между двумя серыми блоками. */
html:not([data-theme="dark"]) body.newui .searchbar-wrap {
  background: var(--bg3);
}

/* Ссылки в подвале на новом фоне: чуть темнее, чтобы не «плавали». */
html:not([data-theme="dark"]) body.newui footer .site-footer-legal a,
html:not([data-theme="dark"]) body.newui footer .site-footer-geo a,
html:not([data-theme="dark"]) body.newui footer .site-footer-dev a {
  color: var(--text2);
}
html:not([data-theme="dark"]) body.newui footer .site-footer-legal a:hover,
html:not([data-theme="dark"]) body.newui footer .site-footer-geo a:hover,
html:not([data-theme="dark"]) body.newui footer .site-footer-dev a:hover {
  color: var(--accent);
}

/* ═══════════════ География работ (/geo/, /geo/<город>/) ═══════════════
   Паттерн Trust & Authority: доверие и цифры → локальная фактура →
   решение → действие. До 24.08.2026 страница была текстовым потоком, где
   самое ценное (сетевая организация, число объектов) не читалось.
   Компоненты намеренно повторяют язык карточек с /services/. */

/* ── Шапка ── */
body.newui .geo-head { margin-bottom: 1.75rem; }
body.newui .geo-head-tag {
  display: inline-flex; align-items: center; gap: 6px;
  margin-bottom: 0.7rem; padding: 5px 11px;
  background: var(--accent-dim); border: 1px solid var(--accent-border, var(--border));
  border-radius: var(--radius-sm);
  font-size: 12px; font-weight: 700; letter-spacing: 0.03em;
  text-transform: uppercase; color: var(--accent);
}
body.newui .geo-head-tag svg { width: 13px; height: 13px; flex-shrink: 0; }
body.newui .geo-head-lead {
  max-width: 62ch;                     /* 65–75 знаков в строке */
  margin: 0.6rem 0 0; font-size: 15px; line-height: 1.65; color: var(--text2);
}

/* ── Метрики ── */
body.newui .geo-metrics {
  display: grid; gap: 10px; margin: 1.25rem 0 0;
  grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));
}
body.newui .geo-metric {
  padding: 12px 14px;
  background: var(--bg2); border: 1px solid var(--border);
  border-radius: var(--radius);
}
body.newui .geo-metric dt {
  /* --text3 на светлой теме давал 4.31:1 при норме 4.5 — берём --text2. */
  font-size: 12px; line-height: 1.35; color: var(--text2); margin-bottom: 4px;
}
body.newui .geo-metric dd {
  margin: 0; font-family: var(--font-mono);   /* цифры — моноширинным */
  font-size: 22px; font-weight: 700; line-height: 1.15; color: var(--text);
}
body.newui .geo-metric-unit {
  font-family: var(--font); font-size: 13px; font-weight: 600; color: var(--text3);
}

/* ── Карточка локальной фактуры ── */
body.newui .geo-facts {
  margin: 1.75rem 0;
  padding: 16px 18px;
  background: var(--bg2); border: 1px solid var(--border);
  border-radius: var(--radius);
}
body.newui .geo-facts-title {
  margin: 0 0 0.9rem; font-size: 16px; font-weight: 700; color: var(--text);
}
/* Две колонки на десктопе: строк в карточке четыре, а текст каждой упирается в
   68ch — в одну колонку правая половина карточки оставалась пустой. */
body.newui .geo-facts-list { display: grid; gap: 14px; margin: 0; }
@media (min-width: 860px) {
  body.newui .geo-facts-list {
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 16px 32px;
  }
}
body.newui .geo-fact dt {
  display: flex; align-items: center; gap: 7px;
  margin-bottom: 3px;
  font-size: 12.5px; font-weight: 700; letter-spacing: 0.02em;
  text-transform: uppercase; color: var(--accent);
}
body.newui .geo-fact dt svg { width: 15px; height: 15px; flex-shrink: 0; }
body.newui .geo-fact dd {
  margin: 0; max-width: 68ch;
  font-size: 14px; line-height: 1.6; color: var(--text2);
}

/* ── Текст города ── */
body.newui .geo-body { max-width: 68ch; }
body.newui .geo-body p { font-size: 15px; line-height: 1.7; }
/* H3 — сценарии в «Типовых задачах»: тише, чем H2-вопросы с планкой. */
body.newui .geo-body h3 {
  margin: 1.5em 0 0.4em;
  font-size: 16px; font-weight: 700; color: var(--text);
}
/* Вопросы FAQ — якоря в потоке текста, а не просто жирные строки.
   Тег остаётся H2: по нему собирается FAQPage-разметка. */
body.newui section.page .geo-body h2,
body.newui .geo-body h2 {
  position: relative;
  margin: 2.4rem 0 0.6rem; padding-left: 14px;
  font-size: 17px; line-height: 1.4;
}
body.newui .geo-body h2::before {
  content: ''; position: absolute; left: 0; top: 0.18em; bottom: 0.18em;
  width: 3px; border-radius: 2px; background: var(--accent);
}

/* ── Объекты ── */
body.newui .geo-cases { margin: 2rem 0; }
body.newui .geo-cases-count { margin: 0 0 0.85rem; font-size: 14px; color: var(--text2); }
body.newui .geo-cases-count b { font-family: var(--font-mono); color: var(--text); }
/* Компактный список: строка на объект. Карточки с иконкой и двумя этажами
   занимали пол-экрана ради трёх адресов. */
body.newui .geo-cases-list {
  list-style: none; margin: 0; padding: 0;
  background: var(--bg2); border: 1px solid var(--border); border-radius: var(--radius);
}
body.newui .geo-case {
  display: flex; align-items: baseline; flex-wrap: wrap; gap: 4px 10px;
  padding: 10px 14px; border-bottom: 1px solid var(--border);
  font-size: 13.5px; line-height: 1.45;
}
body.newui .geo-case:last-child { border-bottom: 0; }
body.newui .geo-case-dot {
  width: 5px; height: 5px; border-radius: 50%; flex-shrink: 0;
  background: var(--accent); transform: translateY(-2px);
}
body.newui .geo-case-street { font-weight: 600; color: var(--text); }
body.newui .geo-case-type { color: var(--text3); }
body.newui .geo-case-type::before { content: '· '; }
body.newui .geo-case-year {
  margin-left: auto; font-family: var(--font-mono); font-size: 12px; color: var(--text3);
}
@media (max-width: 520px) {
  body.newui .geo-case-year { margin-left: 0; width: 100%; }
}
body.newui .geo-cases-note { margin: 0.7rem 0 0; font-size: 12px; color: var(--text3); }

/* ── Услуги: язык карточек с /services/ ── */
body.newui .geo-services { margin: 2rem 0; }
body.newui .geo-services-grid {
  display: grid; gap: 8px; margin-top: 0.9rem;
  grid-template-columns: repeat(auto-fill, minmax(250px, 1fr));
  grid-auto-rows: 1fr;               /* одинаковая высота карточек в ряду */
}
body.newui .geo-service-card {
  display: grid; grid-template-columns: 32px 1fr auto; align-items: center; gap: 12px;
  min-height: 52px; padding: 11px 14px;
  background: var(--bg2); border: 1px solid var(--border); border-radius: var(--radius);
  text-decoration: none; color: var(--text);
  transition: border-color var(--transition), background var(--transition);
}
body.newui .geo-service-card:hover { border-color: var(--accent-border); background: var(--bg3); }
body.newui .geo-service-card:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; }
body.newui .geo-service-icon {
  display: flex; align-items: center; justify-content: center;
  width: 32px; height: 32px; border-radius: 8px;
  background: var(--accent-dim); color: var(--accent);
}
body.newui .geo-service-icon svg { width: 16px; height: 16px; }
body.newui .geo-service-title { font-size: 13.5px; font-weight: 600; line-height: 1.35; }
body.newui .geo-service-cta { color: var(--text3); font-size: 15px; }
body.newui .geo-service-card:hover .geo-service-cta { color: var(--accent); }

/* ── Хаб: карточки городов ── */
body.newui .geo-city-list { margin: 2rem 0; }
body.newui .geo-cities {
  display: grid; gap: 10px; margin-top: 0.9rem;
  grid-template-columns: repeat(auto-fill, minmax(230px, 1fr));
}
body.newui .geo-city-card {
  display: grid; grid-template-columns: 38px 1fr auto; align-items: center; gap: 12px;
  min-height: 64px; padding: 13px 15px;
  background: var(--bg2); border: 1px solid var(--border); border-radius: var(--radius);
  text-decoration: none; color: var(--text);
  transition: border-color var(--transition), background var(--transition);
}
body.newui .geo-city-card:hover { border-color: var(--accent-border); background: var(--bg3); }
body.newui .geo-city-card:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; }
body.newui .geo-city-icon {
  display: flex; align-items: center; justify-content: center;
  width: 38px; height: 38px; border-radius: 10px;
  background: var(--accent-dim); color: var(--accent);
}
body.newui .geo-city-icon svg { width: 19px; height: 19px; }
body.newui .geo-city-body { display: flex; flex-direction: column; gap: 2px; min-width: 0; }
body.newui .geo-city-name { font-size: 15px; font-weight: 700; line-height: 1.25; }
body.newui .geo-city-meta { font-size: 12px; line-height: 1.35; color: var(--text3); }
/* Моноширинный только на числах — прозой он в проекте запрещён. */
body.newui .geo-city-meta.is-num { font-family: var(--font-mono); }
body.newui .geo-city-cta { color: var(--text3); font-size: 16px; }
body.newui .geo-city-card:hover .geo-city-cta { color: var(--accent); }

/* ── CTA ── */
body.newui .geo-cta {
  display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between;
  gap: 14px; margin: 2rem 0 0; padding: 18px 20px;
  background: var(--accent-dim); border: 1px solid var(--accent-border, var(--border));
  border-radius: var(--radius);
}
body.newui .geo-cta-text { max-width: 52ch; }
body.newui .geo-cta-text p { margin: 0.35rem 0 0; font-size: 14px; line-height: 1.6; color: var(--text2); }
/* Кнопка CTA. Акцентный фон задаём здесь явно: `body.newui .btn` в 01-core
   ставит `background: var(--bg3)` и `color: var(--text) !important`, а этот
   файл в бандле позже — иначе кнопка остаётся серой, как и было до правки. */
body.newui .geo-cta-btn {
  flex-shrink: 0; min-height: 46px; padding: 12px 20px;
  font-size: 14px; font-weight: 700;
  background: var(--accent-surface); color: #000 !important;
  border-color: transparent; border-radius: var(--radius-sm);
}
body.newui .geo-cta-btn:hover {
  background: var(--accent-surface-hover); color: #000 !important; border-color: transparent;
}
body.newui .geo-cta-btn:focus-visible { outline: 2px solid var(--text); outline-offset: 2px; }

@media (max-width: 520px) {
  body.newui .geo-metric dd { font-size: 20px; }
  body.newui .geo-cta { flex-direction: column; align-items: stretch; }
  body.newui .geo-cta-btn { justify-content: center; }
}

/* Уважаем системную настройку «меньше движения». */
@media (prefers-reduced-motion: reduce) {
  body.newui .geo-city-card,
  body.newui .geo-service-card { transition: none; }
}

/* ── Футер: география ──
   Городов будет около двадцати, поэтому не строка ссылок подряд, а подпись
   отдельной строкой и сетка колонками. Цвет приглушённый в ОБЕИХ темах:
   раньше ссылки наследовали акцент и полоса светилась жёлтым. */
/* Ширина на весь ряд: футерный .wrap — flex, и без этого блок сжимается
   в одну колонку. */
body.newui .site-footer-geo { margin-top: 1.1rem; width: 100%; flex-basis: 100%; }
body.newui .site-footer-geo-title {
  display: inline-flex; align-items: center; gap: 5px; margin-bottom: 0.55rem;
  font-size: 12.5px; font-weight: 700; letter-spacing: 0.02em;
  text-transform: uppercase; color: var(--text2) !important; text-decoration: none;
}
body.newui .site-footer-geo-title:hover { color: var(--accent) !important; }
body.newui .site-footer-geo-all { font-size: 13px; opacity: 0.7; }
/* Поток, а не колонки: при пяти городах сетка расползалась пустыми
   треками, при двадцати — наоборот сжимала названия. Флекс-обтекание
   одинаково опрятно и на пяти, и на двадцати. */
body.newui .site-footer-geo-list {
  list-style: none; margin: 0; padding: 0;
  display: flex; flex-wrap: wrap; gap: 2px 6px;
}
body.newui .site-footer-geo-list a {
  display: flex; align-items: center; min-height: 30px;
  padding: 5px 10px; border-radius: 8px;
  font-size: 12.5px; line-height: 1.45;
  /* --text3 на светлой давал 4.05:1 при норме 4.5 — берём --text2. */
  color: var(--text2) !important; text-decoration: none;
  background: var(--bg3);
  transition: background var(--transition), color var(--transition);
}
body.newui .site-footer-geo-list a:hover {
  background: var(--accent-dim); color: var(--accent) !important;
}
@media (prefers-reduced-motion: reduce) {
  body.newui .site-footer-geo-list a { transition: none; }
}

/* ═══════════════ Карта области на /geo/ ═══════════════
   Контуры приходят из assets/img/mo-districts.svg без единого цвета в
   разметке — вся раскраска здесь, поэтому карта переключается вместе с темой.
   Обводка у московских кварталов того же цвета, что заливка: после упрощения
   между ними остались щели, и без неё центр выглядел бы дырявым. */
body.newui .geo-map {
  margin: 1.75rem 0 0;
  /* Полей нет: карта идёт от края до края блока, север и юг области срезаются
     его границей. Потому же overflow — иначе контуры вылезут наружу. */
  padding: 0;
  overflow: hidden;
  background: var(--bg2);
  border: 1px solid var(--border);
  border-radius: var(--radius);
}
body.newui .geo-map-svg {
  display: block; width: 100%;
  /* Высота задана, а не выведена из пропорций: вместе с `slice` она и решает,
     насколько глубоко срезаны верх и низ. Область вытянута по вертикали, целиком
     она занимала бы почти весь экран. */
  height: 680px;
}
body.newui .geo-map-districts path {
  fill: var(--bg3);
  stroke: var(--border2);
  stroke-width: 0.8;
  stroke-opacity: 0.7;
  vector-effect: non-scaling-stroke;
}
body.newui .geo-map-msk path {
  fill: var(--border2);
  stroke: var(--border2);
  stroke-width: 2;
  stroke-linejoin: round;
  opacity: 0.55;
}
body.newui .geo-map-msk-label {
  fill: var(--text2); font-family: var(--font);
  font-size: 20px; font-weight: 600;
  paint-order: stroke; stroke: var(--bg2); stroke-width: 5px; stroke-linejoin: round;
}

body.newui .geo-map-hit { fill: transparent; }
/* Поводок — только линия связи, кликать по нему незачем: иначе тонкая линия
   через пол-карты перехватывает нажатия по соседним городам. */
body.newui .geo-map-leader {
  stroke: var(--text3); stroke-width: 1.2; opacity: 0.45; pointer-events: none;
}
body.newui .geo-map-city:hover .geo-map-leader { opacity: 0.9; stroke: var(--accent); }
body.newui .geo-map-dot {
  fill: var(--bg2); stroke: var(--accent); stroke-width: 2.5;
  transition: fill 0.15s ease;
}
body.newui .geo-map-city.has-objects .geo-map-dot { fill: var(--accent); }
body.newui .geo-map-label {
  fill: var(--text); font-family: var(--font);
  font-size: 18px; font-weight: 600;
  /* Обводка цветом карточки — подпись читается поверх границ районов */
  paint-order: stroke; stroke: var(--bg2); stroke-width: 6px; stroke-linejoin: round;
}
body.newui .geo-map-city { cursor: pointer; }
body.newui .geo-map-city:hover .geo-map-dot,
body.newui .geo-map-city:focus-visible .geo-map-dot { fill: var(--accent); }
body.newui .geo-map-city:hover .geo-map-label,
body.newui .geo-map-city:focus-visible .geo-map-label { fill: var(--accent); }
body.newui .geo-map-city:focus-visible { outline: none; }
body.newui .geo-map-city:focus-visible .geo-map-hit {
  fill: var(--accent-dim); stroke: var(--accent); stroke-width: 2;
}

/* На узком экране пятнадцать подписей превращаются в кашу — оставляем точки:
   они остаются кликабельными, а названия и так есть в списке городов выше. */
/* Планшет: подписи-столбцы не помещаются, но карта ещё читается — оставляем
   точки покрупнее. `r` и `stroke-width` как CSS-свойства у SVG-геометрии
   поддерживаются всеми современными браузерами. */
@media (max-width: 900px) {
  /* Ширина меньше — масштаб `slice` тоже, и при прежней высоте область
     перестала бы срезаться совсем. Опускаем потолок, чтобы кадр остался тем же. */
  body.newui .geo-map-svg { height: 520px; }
  body.newui .geo-map-label,
  body.newui .geo-map-leader { display: none; }
  body.newui .geo-map-dot { r: 12; stroke-width: 4; }
  body.newui .geo-map-hit { r: 30; }
  body.newui .geo-map-msk-label { font-size: 30px; stroke-width: 7px; }
}

/* Телефон: пятнадцать городов ближнего пояса на карте шириной в ладонь
   превращаются в кучу точек — ни прочитать, ни попасть. Прячем: список
   городов выше даёт то же самое и лучше. */
@media (max-width: 700px) {
  body.newui .geo-map { display: none; }
}

@media (prefers-reduced-motion: reduce) {
  body.newui .geo-map-dot { transition: none; }
}

/* ─── Города на странице услуги (С2) ───
   Текстовая строка, не карточки: это перелинковка, а не витрина. */
body.newui .service-geo {
  margin: 1.75rem 0 0; padding: 14px 18px;
  background: var(--bg2); border: 1px solid var(--border);
  border-radius: var(--radius);
  font-size: 13.5px; line-height: 1.7; color: var(--text2);
}
body.newui .service-geo-label { font-weight: 600; color: var(--text); }
body.newui .service-geo a { color: var(--accent); text-decoration: none; }
body.newui .service-geo a:hover { text-decoration: underline; }

/* ─── Соседние города на странице города ───
   Не карточки: это вспомогательная навигация, а не отдельный смысловой блок.
   Строка со ссылками между «услугами» и призывом к действию. */
body.newui .geo-near {
  display: flex; flex-wrap: wrap; align-items: baseline; gap: 8px 14px;
  margin: 1.5rem 0 0;
  padding-top: 1.1rem;
  border-top: 1px solid var(--border);
}
body.newui .geo-near-label {
  font-size: 13px; font-weight: 600; color: var(--text2);
}
body.newui .geo-near-list {
  display: flex; flex-wrap: wrap; gap: 8px 16px;
  margin: 0; padding: 0; list-style: none;
}
body.newui .geo-near-list li { margin: 0; }
body.newui .geo-near-list li::marker { content: ''; }
body.newui .geo-near-list a {
  font-size: 13.5px; color: var(--accent);
  border-bottom: 1px solid transparent;
}
body.newui .geo-near-list a:hover { border-bottom-color: currentColor; }

/* Блок «работы рядом» — тот же список, что у своих объектов, но ссылками. */
body.newui .geo-cases--nearby .geo-case-street {
  color: var(--accent); font-weight: 600;
}
/* Счётчик — к правому краю строки, как год в списке объектов. Слева от него
   пустоты на пол-строки больше нет, а числа выровнены в столбик. */
body.newui .geo-cases--nearby .geo-case-type {
  margin-left: auto; font-size: 12.5px;
}
body.newui .geo-cases--nearby .geo-case-type b {
  font-family: var(--font-mono); font-weight: 600; color: var(--text2);
}
body.newui .geo-cases--nearby .geo-case-type::before { content: none; }
@media (max-width: 520px) {
  body.newui .geo-cases--nearby .geo-case-type { margin-left: 0; }
}
body.newui .geo-cases--nearby .geo-case-street:hover { text-decoration: underline; }

/* ══════════════════════════════════════════
   Посадочная «Подключение электричества» —
   конверсионные блоки (SEO-PLAN «ВЧ-кластеры»)
   ══════════════════════════════════════════ */
body.newui .pl-cta-row {
  display: flex; flex-wrap: wrap; gap: 0.75rem;
  margin: 1.25rem 0 0.5rem;
}
body.newui .pl-btn,
body.newui .page-body a.pl-btn {
  display: inline-flex; align-items: center; justify-content: center;
  min-height: 48px; padding: 0.8rem 1.4rem;
  background: var(--accent-surface); color: #000;
  font-size: 15px; font-weight: 600;
  border-radius: var(--radius-sm); text-decoration: none;
  transition: background var(--transition), transform 0.12s ease;
}
body.newui .pl-btn:hover,
body.newui .page-body a.pl-btn:hover { background: var(--accent-surface-hover); color: #000; }
body.newui .pl-btn:active { transform: scale(0.97); }
body.newui .pl-btn--ghost,
body.newui .page-body a.pl-btn--ghost {
  background: transparent; color: var(--text);
  border: 1px solid var(--border);
}
body.newui .pl-btn--ghost:hover,
body.newui .page-body a.pl-btn--ghost:hover { background: transparent; border-color: var(--text2); color: var(--text); }
@media (max-width: 600px) {
  body.newui .pl-cta-row .pl-btn { flex: 1 1 100%; }
}

body.newui ul.pl-points {
  display: grid; gap: 0.75rem;
  margin: 1.25rem 0 0.5rem; padding: 0; list-style: none;
}
@media (min-width: 700px) {
  body.newui ul.pl-points { grid-template-columns: repeat(3, 1fr); }
}
body.newui .pl-points li {
  border: 1px solid var(--border); border-radius: var(--radius);
  padding: 1rem 1.1rem;
  font-size: 14px; color: var(--text2); line-height: 1.5;
  margin: 0;
}
body.newui .pl-points li::before { content: none; }
body.newui .pl-points b {
  display: block; color: var(--text);
  font-size: 14.5px; margin-bottom: 0.3rem;
}

body.newui .pl-banner {
  border: 1px solid var(--border); border-left: 3px solid var(--accent);
  border-radius: var(--radius);
  padding: 1.25rem 1.4rem; margin: 1.75rem 0;
}
body.newui .pl-banner .pl-banner-title {
  font-size: 17px; font-weight: 700; color: var(--text); margin: 0;
}
body.newui .pl-banner p { margin: 0.35rem 0 0.9rem; font-size: 14.5px; color: var(--text2); }

/* Вертикальный ритм посадочной подключения (page-id-2068): базовый ритм
   .page-body (2rem над H2, 0.9rem под абзацем) для лендинга с CTA-блоками
   тесен — секции слипались. Скоуп по id, чтобы не трогать документы и
   /price/, живущие тем же .page-body. */
body.newui.page-id-2068 .page-body { font-size: 15.5px; }
body.newui.page-id-2068 .pl-cta-row { margin: 1.75rem 0 2.5rem; }
body.newui.page-id-2068 ul.pl-points { margin: 2rem 0 2.5rem; }
body.newui.page-id-2068 .pl-banner { margin: 2.5rem 0; padding: 1.5rem 1.6rem; }
body.newui.page-id-2068 .pl-banner p { margin: 0.45rem 0 1.1rem; }

