/* =====================================================================================
   TRADELOT — ЕДИНЫЙ СЛОЙ ГРАНИЦ И КАРТОЧЕК (16.09.2026, вечер: переписан под два
   требования владельца)

   ЧТО ЗДЕСЬ:
     1) нейтральные токены границ (были сиреневые — владелец сказал «стили бордер не те»);
     2) ЕДИНАЯ КАРТОЧКА ПО ВСЕМУ СЕРВИСУ: заметное скругление, очень светлая рамка,
        мягкая тень вместо жёсткой рамки, аккуратный ховер, скруглённые картинки,
        никаких «квадратных блоков» и лишних линий внутри карточек.

   Слова владельца: «что это за квадраты, не везде бордеры или как их там… Оформите
   нормально, с углами, красиво!» и «подчеркивание везде убрать, даже при наведении!!!».

   Подключается ПОСЛЕДНИМ (после main.css и стилей компонентов), см. resources/view/web/index.tpl.
   Здесь ГРАНИЦЫ И КАРТОЧКИ. Отступы — tradelot-spacing.css, цвета текста — tradelot-contrast.css.
   ===================================================================================== */

:root {
  /* НЕЙТРАЛЬНЫЕ ГРАНИЦЫ (правка владельца 16.09.2026: «стили бордер не те» —
     рамки выглядели сиреневато-тяжёлыми). Оттенок СЕРО-НЕЙТРАЛЬНЫЙ, без фиолетового
     подтона, контраст к фону — в заданном диапазоне 1,5–2,2:1:
       --border        #c1c1c7 → 1,79:1 к белому блоку, 1,68:1 к фону страницы
       --border-strong #b4b4ba → 2,07:1 к белому — только акценты (шапка таблицы)
       --border-soft   #dcdce0 → 1,37:1 — очень светлая рамка карточек и разделители */
  --border: #c1c1c7;
  --border-strong: #b4b4ba;
  --border-soft: #dcdce0;

  /* ТОКЕН main.css «--line»: им нарисованы рамки десятков блоков. Нейтрально-серый. */
  --line: #cbcbd1;
  /* тихий токен разделителей из main.css — тоже без сиреневого подтона */
  --line-soft: #e6e6ec;

  /* «вуаль» для блоков на тонированной заливке: ложится на любой фон */
  --border-veil: rgba(24, 24, 30, .26);

  /* ==================================================================================
     ЕДИНАЯ КАРТОЧКА — ТОКЕНЫ ОБЪЯВЛЕНЫ ЗДЕСЬ И БОЛЬШЕ НИГДЕ.
     Их же должен использовать второй исполнитель (кабинеты), чтобы вид не разъезжался.
     ================================================================================== */
  --card-radius: 20px;            /* радиус карточки (норма владельца 16–20) */
  --card-radius-inner: 14px;      /* радиус внутренних элементов и картинок (12–14) */
  --card-bg: var(--surface);      /* фон карточки — поверхность темы */
  --card-border: var(--border-soft);   /* ОЧЕНЬ СВЕТЛАЯ рамка: разделяет тень, не «квадратит» */
  --card-shadow: var(--sh-2);     /* лёгкая мягкая тень вместо жёсткой рамки */
  --card-shadow-hover: var(--sh-3);
  --card-pad: 22px;               /* внутренние отступы карточки (норма 20–24) */
  --card-pad-inner: 16px;         /* отступы внутренних блоков и компактных плиток */
  --card-hover-lift: -2px;        /* подъём карточки при наведении */
  --card-transition: box-shadow .18s ease, transform .18s ease, border-color .18s ease;

  /* переменные темы, которыми пользуются блоки Bootstrap/вендора */
  --bs-border-color: var(--border);
  --bs-card-border-color: var(--card-border);
  --bs-card-border-width: 1px;
  --bs-card-border-radius: var(--card-radius);
  --bs-table-border-color: var(--border-soft);
  --bs-modal-border-color: var(--card-border);
  --bs-dropdown-border-color: var(--card-border);
}

/* ---------- 1. КАРТОЧКИ-ПАНЕЛИ: фон из темы, светлая рамка, радиус, мягкая тень ---------- */
.card,
.tl-lot-card,
.tl-about-data,
.tl-step,
.tl-service-block,
.tl-chat,
.profile-settings-sec,
.profile-tariffs-list-item,
.profile-wallet-payment-form,
.payout-block,
.order-buy-card-sidebar,
.ad-card-item,
.ad-card-sidebar,
.blog-grid-item,
.blog-post-card-content,
.watch-item,
.watch-summary-item,
.create-guide,
.create-categories-grid .ad-create-categories-item,
.create-popular-items .ad-create-categories-item,
.wiz-step,
.wiz-side,
.wiz-side-note,
.tl-app-row,
.tl-about-data-example,
.tl-about-data-rows,
.tl-lot-row,
.container-item-grid,
.container-item-list,
.tl-stats > div,
.tl-an-card,
.tl-cabhead,
.chat-dialogues-item,
.profile-container-order-list,
.ad-create-options-container-item,
.ad-create-options-container-item-extra,
.ad-card-content-info-box,
.home-seo-text,
.widget-shops-item,
.tl-tariff-card,
.params-form,
.list-group,
.control-filters-container-item,
.dropdown-box-list,
.catalog-container-links,
.tl-found-filters,
.not-found-title-container,
.profile-settings-section-item,
.profile-home-sections-info-item,
.module-categories-items-custom-1-item,
.module-categories-items-custom-2-item,
.widget-categories-or-subcategories a,
.live-search-results,
.big-catalog-menu-container {
  background-color: var(--card-bg);
  border: 1px solid var(--card-border);
  border-radius: var(--card-radius);
  box-shadow: var(--card-shadow);
  transition: var(--card-transition);
}

/* ---------- 2. КАРТОЧКИ С ФОНОМ ИЗ РАЗМЕТКИ/ГРАДИЕНТОМ: фон НЕ трогаем ----------
   У карточек «Возможности сервиса» заливка приходит инлайн-стилем (яркие фирменные
   цвета), у .tl-band и .tl-cabhead — градиент темы. Им задаём только скругление,
   тень, рамку и обрезку картинок. */
.widget-promo-banner-item,
.tl-band,
.tl-tariff-card,
.widget-shops-item-link,
.swiper-slide-active .tl-lot-card {
  border: 1px solid var(--card-border);
  border-radius: var(--card-radius);
  box-shadow: var(--card-shadow);
  overflow: hidden;
  transition: var(--card-transition);
}

/* карточка тарифа: полосу-акцент сверху сохраняем */
.tl-tariff-card {
  border-top-width: 4px;
  border-top-color: var(--tc, var(--brand));
  border-top-style: solid;
}

/* ---------- 3. ХОВЕР: подъём и усиление тени, никаких подчёркиваний ---------- */
.blog-grid-item:hover,
.widget-shops-item:hover,
.widget-shops-item-link:hover,
.widget-promo-banner-item:hover,
.tl-lot-card:hover,
.tl-tariff-card:hover,
.tl-an-card:hover,
.chat-dialogues-item:hover,
.not-found-title-container:hover,
.profile-settings-section-item:hover,
.create-categories-grid .ad-create-categories-item:hover,
.create-popular-items .ad-create-categories-item:hover,
.module-categories-items-custom-1-item:hover,
.module-categories-items-custom-2-item:hover,
.widget-categories-or-subcategories a:hover,
.container-item-grid:hover,
.container-item-list:hover {
  box-shadow: var(--card-shadow-hover);
  transform: translateY(var(--card-hover-lift));
  border-color: var(--border);
}

/* строку лота и строки списков не «поднимаем» — они плотные, хватает тени */
.tl-lot-row:hover {
  box-shadow: var(--card-shadow-hover);
  border-color: var(--border);
  transform: none;
}

/* ---------- 4. БЛОК ВНУТРИ КАРТОЧКИ: рамок НЕ рисуем ----------
   Разделяем блоки отступами и фоном (владелец: «лишние линии убрать»), чтобы не
   появлялось «квадратов в квадратах». */
.card .card,
.card .tl-lot-card,
.card .watch-item,
.card .watch-summary-item,
.card .ana-service,
.tl-about-data .tl-lot-card,
.tl-about-data .tl-about-data-example,
.tl-about-data .tl-about-data-rows,
.tl-about-data .tl-about-data-row,
.tl-lot-card .ad-card-item,
.ana-services .ana-service .ana-service,
.wiz-step .wiz-step,
.ad-card-content-item,
.ad-card-user,
.ad-card-content-info-box,
.profile-settings-section-item,
.profile-home-sections-info-item,
.ad-create-options-container-item,
.ad-create-options-container-item-extra {
  border: 0 !important;
  box-shadow: none;
}
/* у внутренних блоков сохраняем скругление, но без «квадратности» */
.ad-card-content-item,
.ad-card-content-info-box,
.ad-card-user,
.ad-card-content-item + .ad-card-content-item {
  border-radius: var(--card-radius-inner);
}
/* карточка продавца в лоте: было 14 px (main.css:10410), норма слоя — 16 px
   — замер _tl_probe_left.js: padT 14 при вложенности в сайдбар с 20 px */
.ad-card-user {
  padding: var(--card-pad-inner);
}

/* ---------- 4-БИС. ЗОНА ДРУГОГО ИСПОЛНИТЕЛЯ: карточки сервисов в мастере ----------
   Блок подключения сервисов шага 3 (`.ana-service`, блок `.wiz-service-connect`)
   по координации 16.09.2026 отдан другому исполнителю: он печатает свои значения
   (padding 12/14, скругление 20) инлайн. Мы туда НЕ вмешиваемся — оставляем ровно
   то, что было в прежнем слое границ (одна рамка нейтрального цвета, без тени,
   без своего радиуса и фона). */
.ana-service,
.ana-service-fields .ana-field {
  border: 1px solid var(--border);
  border-radius: 0;
  box-shadow: none;
  background-color: transparent;
}

/* вложенные «строка к строке» — тихий разделитель вместо второй рамки */
.tl-about-data-row + .tl-about-data-row,
.watch-item + .watch-item,
.ana-service + .ana-service,
.create-popular-items .ad-create-categories-item + .ad-create-categories-item,
.list-group-item + .list-group-item {
  border-top: 1px solid var(--border-soft);
}

/* ---------- 5. КАРТИНКИ В КАРТОЧКАХ: скругление по углам ---------- */
.blog-post-card-content img,
.ad-card-item img,
.ad-card-media img,
.ad-card-content img,
.tl-band-art img,
.container-item-grid img,
.container-item-list img,
.widget-shops-item-image img,
.uni-media-gallery img {
  border-radius: var(--card-radius-inner);
  overflow: hidden;
}
/* картинка «в шапке» карточки: верхние углы повторяют скругление карточки */
.blog-grid-item-image,
.widget-shops-item-image {
  border-radius: var(--card-radius) var(--card-radius) 0 0;
  overflow: hidden;
}
.blog-grid-item-image img,
.widget-shops-item-image img {
  display: block;
  width: 100%;
  height: 100%;
  object-fit: cover;
  border-radius: 0;
}
/* плитка-иконка категории (34/48 px) — свой радиус, картинка внутри не режется */
.tl-lot-row .tl-lot-icon,
.tl-lot-icon {
  border-radius: var(--card-radius-inner);
  border: 1px solid var(--border) !important;
  box-shadow: none;
}
.tl-lot-row .tl-lot-icon img,
.tl-lot-icon img {
  border-radius: 0;
}
.tl-lot-row .tl-lot-icon,
.tl-lot-icon,
.tl-cat-icon {
  overflow: visible;
}

/* ---------- 6. ТАБЛИЦЫ: шапка + разделители строк, без клеток ---------- */
table,
.tl-table {
  border: 1px solid var(--border);
  border-collapse: separate;
  border-spacing: 0;
  border-radius: var(--card-radius-inner);
  overflow: hidden;
}

table > thead > tr > th,
.tl-table > thead > tr > th {
  border-bottom: 1px solid var(--border-strong);
}

table > tbody > tr + tr > td,
table > tbody > tr + tr > th,
.tl-table > tbody > tr + tr > td {
  border-top: 1px solid var(--border-soft);
}

table > tbody > tr > td,
table > tbody > tr > th,
table > thead > tr > th,
table > tfoot > tr > td {
  border-left: 0;
  border-right: 0;
}

/* таблица внутри карточки: рамку рисует карточка, таблица получает только разделители */
.card table,
.table-responsive table,
.card .tl-table {
  border: 0;
  border-radius: 0;
}

.card table > thead > tr > th,
.table-responsive table > thead > tr > th {
  border-bottom: 1px solid var(--border);
}

/* ---------- 7. ФОРМЫ: поля ввода — своя граница и свой радиус ---------- */
.form-control,
.form-select,
input[type="text"],
input[type="email"],
input[type="tel"],
input[type="number"],
input[type="password"],
input[type="search"],
input[type="url"],
textarea,
select,
.uni-select,
.uni-select-picker,
.uniSelectPicker {
  border: 1px solid var(--border);
  border-radius: var(--card-radius-inner);
}

.form-control:focus,
.form-select:focus,
input:focus,
textarea:focus,
select:focus {
  border-color: var(--brand, #6640f4);
}

/* ---------- 8. МОДАЛЬНЫЕ ОКНА, ВЫПАДАЮЩИЕ МЕНЮ, ПОДСКАЗКИ ---------- */
.modal-content,
.uni-dropdown-box,
.dropdown-box-list,
.dropdown-menu,
.uni-dropdown .dropdown-box {
  background-color: var(--card-bg);
  border: 1px solid var(--card-border);
  border-radius: var(--card-radius);
  box-shadow: var(--card-shadow-hover);
  overflow: hidden;
}

.modal-header,
.modal-footer {
  border-color: var(--border-soft);
}

/* ---------- 9. ПЛАШКИ-ПОДСКАЗКИ: светлый фон + скругление, без «квадратов» ---------- */
.tl-hint,
.tl-sub-block,
.not-found-title-container-image + p {
  background-color: var(--surface-2);
  border: 1px solid var(--card-border);
  border-radius: var(--card-radius-inner);
  box-shadow: none;
}

/* ---------- 10. МОБИЛЬНЫЙ ВИД: те же карточки ---------- */
@media (max-width: 767px) {
  :root {
    --card-radius: 18px;
    --card-pad: 18px;
  }
  .tl-lot-card,
  .ana-service,
  .wiz-step,
  .card,
  .blog-grid-item,
  .widget-shops-item,
  table.tl-table {
    border-radius: var(--card-radius);
  }
}

/* ---------- 11. ПАНЕЛИ КАБИНЕТА И БЛОКИ, КОТОРЫЕ ПЕЧАТАЮТ РАМКУ САМИ ---------- */
.col-md-9 > .payout-block,
.col-md-9 > .watch-block,
.col-md-9 > .profile-settings-section,
.col-md-9 > .profile-verification-container,
.col-md-9 > .profile-wallet-info,
.col-md-9 > .profile-tariffs-list,
.col-md-9 > .profile-home-sections,
.col-md-9 > .my-tabs-content,
.col-md-9 > .my-tabs-content-container,
.col-md-9 > .ad-analytics,
.col-md-9 > .ana-acc,
.tl-page-static > section {
  border-color: var(--card-border);
  border-radius: var(--card-radius);
}
/* обёртка swiper вокруг карточек тарифов рамку не несёт (двойная рамка) */
.profile-tariffs-list,
.profile-tariffs-swiper {
  border: 0;
  box-shadow: none;
}
/* строки сервисов аналитики печатают рамку инлайн-стилем из --line-soft */
.sbadge-row {
  border: 1px solid var(--card-border) !important;
  border-radius: var(--card-radius-inner) !important;
  box-shadow: var(--card-shadow) !important;
}
.sbadge-chip.badge {
  border-color: transparent !important;
}

/* ---------- 12. БЛОГ И ДРУГИЕ КАРТОЧКИ С КАРТИНКОЙ: текст с полями, без линий ----------
   Владелец: «текст прижат» и «линии под датой». Текстовые части карточки получают
   внутренние отступы, картинка — верхние скруглённые углы, никаких линий внутри. */
.blog-grid-item {
  display: flex;
  flex-direction: column;
  padding: 0;
  margin-bottom: 0;
  overflow: hidden;
  text-decoration: none !important;
}
.blog-grid-item-image {
  height: 230px;
  flex: 0 0 auto;
}
.blog-grid-item-date,
.blog-grid-item-title,
.blog-grid-item-category {
  padding-left: var(--card-pad);
  padding-right: var(--card-pad);
  border: 0 !important;
  background: none;
}
.blog-grid-item-date {
  margin-top: 18px;
  font-size: 13.5px;
  line-height: 1.4;
}
.blog-grid-item-title {
  margin: 8px 0 6px;
  font-size: 17px;
  font-weight: 600;
  line-height: 1.4;
  text-decoration: none !important;
}
.blog-grid-item-category {
  margin-bottom: 20px;
  font-size: 13px;
}
/* лишние линии внутри карточек убираем совсем */
.blog-grid-item > *,
.blog-grid-item hr,
.blog-post-card-content > section,
.blog-post-card-content > section + section {
  border-top: 0 !important;
  border-bottom: 0 !important;
}
/* статья блога — та же карточка и тот же внутренний отступ */
.blog-post-card-content {
  padding: var(--card-pad);
}
.blog-post-card-content hr {
  border: 0;
  border-top: 1px solid var(--border-soft);
  margin: 24px 0;
}

/* карточки магазинов: картинка слева, текст справа, отступы карточки */
.widget-shops-item {
  display: flex;
  align-items: flex-start;
  gap: 18px;
  padding: var(--card-pad);
  overflow: hidden;
}
.widget-shops-item-image {
  flex: 0 0 auto;
  width: 120px;
  max-height: 120px;
  border-radius: var(--card-radius-inner);
  overflow: hidden;
}
.widget-shops-item-content {
  margin-left: 0;
}
.widget-shops-item-link {
  text-decoration: none !important;
}

/* «Возможности сервиса»: та же карточка, внутренние отступы по норме */
.widget-promo-banner-item {
  padding: var(--card-pad);
  border-radius: var(--card-radius);
  box-shadow: var(--card-shadow);
  overflow: hidden;
}

/* заголовки внутри карточек — без подчёркиваний и линий (подчёркивание ссылок в
   самом тексте статьи разрешено владельцем и задано в main.css, часть 62) */
.blog-grid-item-title:hover{
  text-decoration: none !important;
}

/* ---------- 13. СТРОКА ЛОТА: радиус карточки согласован с вложенной строкой ---------- */
.tl-lot-card .tl-lot-row {
  border-radius: var(--card-radius) var(--card-radius) 0 0;
  box-shadow: none;
  border-color: transparent;
}
.tl-lot-card .tl-lot-row:hover {
  box-shadow: none;
  border-color: transparent;
}
.tl-lot-row .tl-lot-facts .tl-lot-link {
  border-bottom: 0 !important;
}

/* ---------- 13-БИС. ВНУТРЕННИЕ ОТСТУПЫ КАРТОЧЕК, У КОТОРЫХ ИХ НЕ БЫЛО ----------
   Замер (_tl_layout.js): у этих карточек текст стоял в 1 px от края — с новым
   скруглением и рамкой это выглядит «прижато». Даём норму 20–24 px (--card-pad). */
.tl-app-row,
.profile-wallet-payment-form,
.order-buy-card-sidebar,
.create-guide,
.tl-service-block {
  padding: var(--card-pad);
}

/* ---------- 14. «ДРУГИЕ СТАТЬИ» В СТАТЬЕ БЛОГА: карточка вместо серого квадрата ----------
   У этих карточек заголовок лежал в сером прямоугольнике (#00000070 + радиус 10) —
   это и были «квадраты» из замечания владельца. Делаем нормальную карточку: скругление,
   мягкая тень, а вместо прямоугольника — плавный градиент внизу карточки. */
.widget-article-blog-item {
  border: 1px solid var(--card-border);
  border-radius: var(--card-radius);
  box-shadow: var(--card-shadow);
  overflow: hidden;
  transition: var(--card-transition);
  text-decoration: none !important;
}
.widget-article-blog-item:hover {
  box-shadow: var(--card-shadow-hover);
  transform: translateY(var(--card-hover-lift));
  border-color: var(--border);
}
.widget-article-blog-item img {
  border-radius: 0;
  display: block;
  width: 100%;
  height: 100%;
  object-fit: cover;
}
.widget-article-blog-item-title {
  left: 0;
  right: 0;
  bottom: 0;
  padding: 40px var(--card-pad-inner) var(--card-pad-inner);
  /* тёмная подложка (для контраста белого текста) + плавный градиент сверху */
  background-color: rgba(20, 16, 33, .62);
  background-image: linear-gradient(to top, rgba(20, 16, 33, .55) 0%, rgba(20, 16, 33, .12) 60%, rgba(20, 16, 33, 0) 100%);
  border-bottom-left-radius: var(--card-radius);
  border-bottom-right-radius: var(--card-radius);
}
.widget-article-blog-item h4 {
  background-color: transparent !important;
  border-radius: 0 !important;
  box-shadow: none !important;
  padding: 0 !important;
  font-size: 17px;
  font-weight: 700;
  line-height: 1.35;
}
/* текст на тёмной подложке — БЕЛЫЙ (иначе тёмные токены темы давали 3,19:1) */
.widget-article-blog-item h4,
.widget-article-blog-item-title,
.widget-article-blog-item-title *,
.widget-article-blog-item:hover h4,
.widget-article-blog-item:hover .widget-article-blog-item-title{
  color: var(--on-fill) !important;
}

/* ---------- 15. СКЕЛЕТОН СПИСКА ЛОТОВ: было inline-стилями в шаблоне ----------
   Требование владельца: inline-стили в разметке, мешающие править оформление из CSS,
   убрать. В `components/items/skeleton.tpl` были `style="flex:1 1 auto;min-width:0"`
   и ширины колонок — теперь это классы, правила здесь. */
.tl-lot-skeleton .sk-grow {
  flex: 1 1 auto;
  min-width: 0;
}
.tl-lot-skeleton .sk-col-1 { width: 70%; }
.tl-lot-skeleton .sk-col-2 { width: 50%; }
.tl-lot-skeleton .sk-col-3 { width: 60%; }
.tl-lot-skeleton .sk-col-4 { width: 80%; }

/* =====================================================================================
   РАЗДЕЛ 16. СПЛОШНОЙ ЗАМЕР ОТСТУПОВ ПО СЕРВИСУ (16.09.2026, требование владельца:
   «пусть смотрит по всему сервису отступы, дизайн блоков, отступы блоков внутри других
   блоков»). Инструмент — `redesign/_tl_audit.js` (свободный порт CDP + проверка
   страницы): блок-в-блоке, зазоры, переполнение, пустые полосы, высоты ряда, inline.
   ===================================================================================== */

/* 16.1 ТАРИФЫ: кнопка прижата к низу карточки (пустая полоса у коротких карточек),
   карточки одного ряда — одной высоты */
.tl-tariff-card .profile-tariffs-action-payment {
  margin-top: auto !important;
}
.profile-tariffs-swiper .swiper-wrapper {
  align-items: stretch !important;
}
/* Замер (_tl_probe_tariffrow2.js): ряд тарифов — это CSS-grid, а не flex, поэтому
   `height:auto` у слайда отключал выравнивание и низ карточек «лесенкой»
   (1060/1087/1060/1075). С `height:100%` все карточки ряда одной высоты (1075), при
   этом содержимое не обрезается: ни один потомок не выходит за карточку. */
.profile-tariffs-swiper .swiper-slide {
  display: flex;
  height: 100% !important;
}
.profile-tariffs-swiper .profile-tariffs-list-item,
.profile-tariffs-swiper .tl-tariff-card {
  flex: 1 1 auto;
  width: 100%;
}

/* 16.2 СТАТЬЯ БЛОГА: боковая колонка — обёртка, а не карточка (в ней лежат карточки
   «другие статьи»): убирает двойную рамку, вылезание сетки на 8 px и лишний зазор */
.blog-post-card-sidebar {
  background: transparent !important;
  border: 0 !important;
  box-shadow: none !important;
  border-radius: 0 !important;
  padding: 0 !important;
  margin-top: 24px !important;
}
.blog-post-card-sidebar .row {
  margin-left: 0 !important;
  margin-right: 0 !important;
  margin-top: 0 !important;   /* у bootstrap-сетки g-2 верхний отступ -16px — он «съедал» зазор */
}
.blog-post-card-sidebar .row > [class*="col-"] {
  padding-left: 0 !important;
  padding-right: 0 !important;
}
/* у статьи: последний блок без нижнего отступа, пустой разделитель и лишний перенос
   в самом низу не рисуем (они и давали «линию» и пустую полосу под текстом) */
.blog-post-card-content > *:last-child {
  margin-bottom: 0 !important;
}
.blog-post-card-content > section.blog-content-separator:last-child,
.blog-post-card-content > br:last-child {
  display: none !important;
}
/* у последнего ВИДИМОГО абзаца статьи убираем нижний отступ (перед скрытым
   разделителем) — иначе внизу карточки оставалась лишняя пустая полоса 25 px */
.blog-post-card-content > section:has(+ section.blog-content-separator:last-child),
.blog-post-card-content > *:has(+ br:last-child) {
  margin-bottom: 0 !important;
}

/* 16.3 КАБИНЕТ: одинаковые зазоры между блоками одной колонки (было 10 и 108 px) */
.profile-home-sections-info-item + .profile-home-sections-info-item {
  margin-top: 20px !important;
}
/* список обновлений аналитики: зазор задаёт flex-gap, поэтому у элементов margin = 0
   (иначе получалось 20 + 20 = 40 px) */
.watch-list {
  gap: 20px !important;
}
.watch-item + .watch-item,
.watch-summary-item + .watch-summary-item {
  margin-top: 0 !important;
}
/* карточки-сводки одной высоты: содержимое распределяем по высоте, а не оставляем
   пустую полосу внизу */
.watch-summary-item {
  display: flex;
  flex-direction: column;
  justify-content: space-between;
  gap: 8px;
}
.col-md-9 > .mt40,
.col-md-9 > .mt30,
.col-md-9 > .mt50 {
  margin-top: 24px !important;
}

/* 16.4 ТЕЛЕФОН: шаги «Как это работает» — тот же зазор, что и на десктопе.
   Зазор задаёт grid-gap, поэтому margin у самих шагов не добавляем (иначе 20 + 20 = 40) */
@media (max-width: 991px) {
  .tl-steps {
    gap: 20px !important;
  }
  .tl-steps .tl-step + .tl-step {
    margin-top: 0 !important;
  }
}

/* =====================================================================================
   17. СТРОКА ЛОТА — ЕДИНАЯ СЕТКА (требование владельца 16.09.2026, скриншот каталога)
   -------------------------------------------------------------------------------------
   Дословно: «строки лотов в списках криво, переделать» — дата и «сердце» стоят по-разному
   у разных строк, «URL сайта:» и адрес ломают строку, чипы «Аукцион» и «Блиц-цена» стоят
   не на своих местах.

   Что сделано: у СТРОКИ фиксированная сетка из шести колонок, каждая ячейка всегда на
   своём месте (разметка — items/tl-lot-row.tpl, единственный источник):
     1) иконка категории            4) «Ставок»
     2) название + характеристики   5) «Цена» (+ чип «Блиц-цена»)
        + метки/место/дата          6) «сердце» (в избранное) — всегда последняя колонка
     3) «Осталось»
   Блок характеристик есть у КАЖДОЙ строки и занимает ровно две строки: адрес сайта
   (ссылка, обрезается многоточием — не переносится) и остальные характеристики
   (ИКС, трафик, доход — каждая целиком). Пустые строки остаются пустыми, поэтому у всех
   строк списка совпадают и позиции элементов, и высота строки (min-height).
   Замер (_tl_probe_rowgrid.js): разброс позиций «сердца» и даты = 0.
   ===================================================================================== */
.tl-lot-row {
  display: grid;
  grid-template-columns: 48px minmax(0, 1fr) 150px 92px 184px 36px;
  column-gap: 14px;
  row-gap: 0;
  align-items: center;
  /* высота строки одинаковая у всех: название 1 строка + 2 строки характеристик +
     строка меток = 102 px содержимого + 2×18 px внутренних отступов */
  min-height: 138px;
}

/* шапка списка — та же сетка, подписи над колонками 3–5 */
.tl-lot-head {
  display: grid;
  grid-template-columns: 48px minmax(0, 1fr) 150px 92px 184px 36px;
  column-gap: 14px;
}
.tl-lot-head span:nth-child(n + 3) {
  text-align: right;
}
/* Кабинет печатает шапку из четырёх подписей (profile/ads.tpl, profile/favorites.tpl —
   файлы другого исполнителя), поэтому для неё первая колонка занимает две ячейки:
   подписи встают ровно над «Осталось / Ставок / Цена». Когда кабинет добавит пустые
   span под иконку и «сердце» — правило перестанет срабатывать само. */
.tl-lot-head:has(> span:last-child:nth-child(4)) > span:nth-child(1) {
  grid-column: 1 / 3;
}

/* --- ячейки --- */
.tl-lot-cell.is-icon {
  display: flex;
  align-items: flex-start;
  justify-content: center;
  min-width: 0;
}
.tl-lot-cell.is-main {
  display: block;
  min-width: 0;
}

/* название — одна строка с обрезкой (переносов «как получится» больше нет) */
.tl-lot-name {
  display: block;
  max-width: 100%;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

/* характеристики: две фиксированные строки */
.tl-lot-facts {
  display: flex;
  flex-direction: column;
  gap: 3px;
  min-width: 0;
  /* две строки: адрес + характеристики. Замер: строка характеристик 21 px,
     значит блок = 21 + 3 + 21 = 45 px. Резерв одинаковый у всех строк, поэтому
     высота строки в списке одна и та же (154 px), даже если данных нет вовсе. */
  min-height: 45px;
  margin-top: 9px;
  line-height: 1.55;
}
.tl-lot-fact {
  display: inline-flex;
  align-items: baseline;
  gap: 5px;
  min-width: 0;
  white-space: nowrap;
}
.tl-lot-fact-label {
  color: var(--muted);
}
.tl-lot-fact b {
  color: var(--ink-2);
  font-weight: 600;
}
.tl-lot-fact-sep {
  color: var(--muted);
  opacity: .65;
}
/* адрес — своя строка, обрезается, не переносится и не «ломает» строку лота */
.tl-lot-fact.is-url {
  display: flex;
  max-width: 100%;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.tl-lot-fact.is-url .tl-lot-link {
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.tl-lot-facts-row {
  display: flex;
  align-items: baseline;
  gap: 8px;
  min-width: 0;
  overflow: hidden;
}

/* метки, место и дата — одна строка; дата всегда прижата к правому краю своей колонки,
   поэтому её позиция одинаковая у всех строк */
.tl-lot-meta {
  display: flex;
  flex-wrap: nowrap;
  align-items: center;
  gap: 10px;
  min-width: 0;
  min-height: 22px;
  margin-top: 11px;
}
.tl-lot-badges {
  flex: 0 1 auto;
  min-width: 0;
  overflow: hidden;
}
/* место: уступает место дате (обрезается многоточием), поэтому дата всегда прижата
   к правому краю колонки — её позиция одинаковая у всех строк */
.tl-lot-loc {
  flex: 0 1 auto;
  min-width: 0;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.tl-lot-loc > * {
  display: inline-block;
  max-width: 100%;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  vertical-align: bottom;
}
.tl-lot-date {
  flex: 0 0 auto;
  margin-left: auto;
  white-space: nowrap;
}

/* «сердце» — отдельная колонка, выровнено по первой строке названия */
.tl-lot-fav-cell {
  display: flex;
  align-items: flex-start;
  justify-content: flex-end;
  padding-top: 2px;
}

/* скелетон загрузки — та же сетка, чтобы список не «прыгал» */
.tl-lot-skeleton {
  display: grid;
  grid-template-columns: 48px minmax(0, 1fr) 150px 92px 184px 36px;
  column-gap: 14px;
  align-items: center;
  min-height: 154px;
}
.tl-lot-skeleton .tl-lot-cell.is-main .sk {
  margin-top: 9px;
}
.tl-lot-skeleton .tl-lot-cell.is-main .sk:first-child {
  margin-top: 0;
}
.tl-lot-skeleton .sk-3 {
  width: 55%;
}
.tl-lot-skeleton .sk-fav {
  width: 34px;
  height: 34px;
  border-radius: 50%;
}

/* --- планшет: те же шесть колонок, но уже --- */
@media (max-width: 1199px) and (min-width: 992px) {
  .tl-lot-row,
  .tl-lot-head,
  .tl-lot-skeleton {
    grid-template-columns: 44px minmax(0, 1fr) 122px 84px 152px 32px;
    column-gap: 12px;
  }
}

/* --- телефон: иконка, название и «сердце» в первой строке, ниже характеристики и колонки --- */
@media (max-width: 991px) {
  /* Шапка списка на телефоне не нужна: у каждой колонки своя подпись в строке
     (data-label). Она же была причиной горизонтального переполнения: шесть колонок
     сетки (510 px) не влезают в 366 px — замер на главной при 390 px давал
     scrollWidth 562 при clientWidth 390 (переполнение 172 px, span «Цена»). */
  .tl-lot-head {
    display: none !important;
  }
  .tl-lot-row {
    grid-template-columns: 44px minmax(0, 1fr) 34px;
    column-gap: 12px;
    row-gap: 10px;
    align-items: start;
    min-height: 0;
  }
  .tl-lot-cell.is-icon {
    grid-column: 1;
    grid-row: 1;
    justify-content: flex-start;
  }
  .tl-lot-cell.is-main {
    grid-column: 2;
    grid-row: 1;
  }
  .tl-lot-fav-cell {
    grid-column: 3;
    grid-row: 1;
  }
  .tl-lot-facts {
    min-height: 0;
    margin-top: 6px;
  }
  .tl-lot-meta {
    flex-wrap: wrap;
    min-height: 0;
    margin-top: 8px;
  }
  .tl-lot-date {
    margin-left: 0;
  }
  .tl-lot-col {
    grid-column: 1 / -1;
    align-items: flex-start;
    text-align: left;
    padding-top: 8px;
    border-top: 1px dashed var(--line);
  }
  .tl-lot-col::before {
    content: attr(data-label);
    display: block;
    font-size: 11px;
    font-weight: 600;
    letter-spacing: .04em;
    text-transform: uppercase;
    color: var(--muted);
    margin-bottom: 2px;
  }
  .tl-lot-skeleton {
    grid-template-columns: 44px minmax(0, 1fr) 34px;
    column-gap: 12px;
    row-gap: 10px;
    min-height: 0;
  }
  .tl-lot-skeleton .sk-fav {
    width: 32px;
    height: 32px;
  }
}

@media (max-width: 575px) {
  .tl-lot-row {
    grid-template-columns: 40px minmax(0, 1fr) 32px;
  }
  .tl-lot-cell.is-icon {
    align-items: center;
  }
  .tl-lot-col {
    flex-direction: row;
    align-items: baseline;
    gap: 8px;
    justify-content: space-between;
  }
  .tl-lot-col::before {
    margin-bottom: 0;
  }
  /* на телефоне название может занять две строки — с обрезкой, а не «как получится» */
  .tl-lot-name {
    display: -webkit-box;
    -webkit-line-clamp: 2;
    -webkit-box-orient: vertical;
    white-space: normal;
  }
}

/* =====================================================================================
   18. БЛОКИ ПО СКРИНШОТАМ ВЛАДЕЛЬЦА (16.09.2026)
   -------------------------------------------------------------------------------------
   18.1 «Мобильное приложение TradeLot.ru для Android» — «криво, переделать»:
        заголовок, одна строка описания и кнопка «Скачать APK» выстроены по левому краю
        с ровными отступами 0 / 10 / 20 px, картинка справа по центру блока.
        До правки: блок 396 px высотой, текст 163 px, под кнопкой пустовало 116 px.
   18.2 «Данные в лотах» — пример стал читаемым: мини-карточка лота, у каждой цифры
        подпись «что это / откуда (значок сервиса + название) / когда обновлено /
        подтверждено сервисом или указано продавцом» и итог «Подтверждено: N из M».
   18.3 Тариф «Премиум»: плашка «Популярный» вынесена ВНУТРЬ карточки (владелец:
        «вынести её внутрь карточки или добавить карточке верхний отступ»).
        До правки плашка стояла на top:-14px и обрезалась на 8 px (overflow:hidden карточки).
   ===================================================================================== */

/* ---------- 18.1 БЛОК МОБИЛЬНОГО ПРИЛОЖЕНИЯ ----------
   ВАЖНО: только блок на главной (`.tl-app-row`). На странице /mobilnoe-prilozhenie
   похожие классы стоят внутри `.tl-hero-card` — тот блок уже оформлен отдельно
   (часть 46) и здесь НЕ переопределяется. */
.tl-app-row {
  display: grid;
  grid-template-columns: minmax(0, 1fr) minmax(0, 420px);
  align-items: center;
  gap: 32px;
  padding: 28px 32px;
}
.tl-app-row .tl-app-text {
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  max-width: 560px;
}
.tl-app-row .tl-app-text .tl-h2 {
  margin: 0;
  font-size: 28px;
  line-height: 1.25;
}
.tl-app-row .tl-app-text .tl-sub {
  margin: 10px 0 0;
  font-size: 15.5px;
  line-height: 1.5;
  color: var(--muted);
  max-width: 520px;
}
.tl-app-row .tl-app-text .tl-band-btnrow {
  margin-top: 20px;
}
.tl-app-row .tl-app-art {
  display: flex;
  align-items: center;
  justify-content: center;
}
.tl-app-row .tl-app-art img {
  display: block;
  width: auto;
  max-width: 100%;
  max-height: 260px;
  height: auto;
  border-radius: var(--card-radius-inner);
}
@media (max-width: 991px) {
  .tl-app-row {
    grid-template-columns: 1fr;
    gap: 20px;
    padding: 20px;
  }
  .tl-app-row .tl-app-text {
    max-width: none;
  }
  .tl-app-row .tl-app-text .tl-h2 {
    font-size: 23px;
  }
  .tl-app-row .tl-app-art img {
    max-height: 200px;
  }
}

/* ---------- 18.2 «ДАННЫЕ В ЛОТАХ»: ПОДПИСАННЫЕ ЦИФРЫ В ПРИМЕРЕ ---------- */
.tl-about-data-example {
  padding: 20px;
  border-radius: var(--card-radius-inner);
}
.tl-about-data-example-head {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  gap: 12px;
}
.tl-about-data-tag {
  font-size: 11.5px;
  font-weight: 700;
  letter-spacing: .06em;
  text-transform: uppercase;
  color: var(--muted);
}
.tl-about-data-example-date {
  font-size: 11.5px;
  color: var(--muted);
  white-space: nowrap;
}
.tl-about-data-lot {
  margin-top: 8px;
  color: var(--ink);
}
.tl-about-data-lot:hover {
  color: var(--brand-hover);
}
.tl-about-data-rows {
  margin-top: 14px;
  display: grid;
  gap: 10px;
}
.tl-about-data-row {
  display: block;
  /* 16 px по горизонтали — норма внутренних блоков (--card-pad-inner).
     Приёмка 16.09.2026 (пункт 6 «отступы»): текст стоял в 14 px от края плашки. */
  padding: 12px 16px;
  border: 0 !important;
  border-radius: 12px;
}
.tl-about-data-row-top {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  gap: 12px;
}
.tl-about-data-cap {
  font-size: 12.5px;
}
.tl-about-data-val {
  margin-top: 0;
}
.tl-about-data-src {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 6px 10px;
  margin-top: 8px;
  font-size: 12px;
  color: var(--muted);
  line-height: 1.4;
}
.tl-about-data-src img {
  flex: 0 0 auto;
  border-radius: 4px;
}
.tl-about-data-src-name {
  font-weight: 600;
  color: var(--ink-2);
}
.tl-about-data-src-ok,
.tl-about-data-src-manual {
  display: inline-flex;
  align-items: center;
  gap: 4px;
  padding: 2px 8px;
  border-radius: var(--r-pill);
  font-size: 11.5px;
  font-weight: 600;
  white-space: nowrap;
}
.tl-about-data-src-ok {
  background: var(--success-tint);
  color: var(--success-ink);
}
.tl-about-data-src-manual {
  background: var(--surface-3);
  color: var(--ink-2);
}
.tl-about-data-src-date {
  margin-left: auto;
  white-space: nowrap;
}
.tl-about-data-foot {
  display: flex;
  flex-direction: column;
  gap: 4px;
  margin-top: 14px;
  padding: 12px 16px;
  border-radius: 12px;
  background: var(--surface);
}
.tl-about-data-foot-main {
  display: flex;
  align-items: center;
  gap: 6px;
  font-size: 13.5px;
  font-weight: 700;
  color: var(--ink);
}
.tl-about-data-foot-main i {
  color: var(--success);
  font-size: 17px;
}
.tl-about-data-foot-note {
  font-size: 12px;
  color: var(--muted);
  line-height: 1.45;
}
@media (max-width: 991px) {
  .tl-about-data-src-date {
    margin-left: 0;
  }
}

/* ---------- 18.3 ПЛАШКА «ПОПУЛЯРНЫЙ» — ВНУТРИ КАРТОЧКИ ТАРИФА ---------- */
.tl-tariff-card:has(> .tl-tariff-badge) {
  padding-top: 64px;
}
.tl-tariff-card:has(> .tl-tariff-badge) > .tl-tariff-badge {
  top: 16px;
}

/* =====================================================================================
   19. «РЕЛЬСА» КАТЕГОРИЙ: СТРЕЛКИ НЕ ВЫХОДЯТ ЗА КОНТЕЙНЕР (дефект от исполнителя кабинета)
   -------------------------------------------------------------------------------------
   Было: модуль `app/Modules/CustomBoardCategories.php` печатает в страницу свою таблицу
   стилей, где стрелки стоят `left:-20px` / `right:-20px` (половина круга 40 px — снаружи
   контейнера). При широких внешних полях страницы это красиво (1440: поля 32 px — стрелка
   в них помещается), но как только поля становятся 12 px, стрелка «вперёд» вылезает за
   правый край окна и даёт горизонтальную прокрутку:
     замер до правки — 1280: scrollWidth 1288 / clientWidth 1280; 1100: 1108/1100;
     768: 776/768 (переполнение 8 px в каждом случае, элемент
     `div.module-categories-swiper-next`, `position:absolute`, right = ширина окна + 8).
   Правило модуля печатается ПОСЛЕ подключаемых стилей, поэтому перебиваем его более
   высокой специфичностью (`body` + класс), без `!important` — чтобы на телефоне
   (там у модуля `left/right:10px!important`) ничего не ломать.
   На очень широких экранах (внешние поля ≥ 20 px, т. е. от 1416 px) оставляем прежний
   вид «половинкой наружу»: замер 1420/1440 — переполнения нет.
   ===================================================================================== */
body .module-categories-swiper-prev {
  left: 8px;
}
body .module-categories-swiper-next {
  right: 8px;
}
@media (min-width: 1416px) {
  body .module-categories-swiper-prev {
    left: -20px;
  }
  body .module-categories-swiper-next {
    right: -20px;
  }
}

/* ---------- 19-БИС. КАРТОЧКА ПРОДАВЦА В ЛОТЕ: ЗВЁЗДЫ РЕЙТИНГА НЕ ВЫЛЕЗАЮТ ИЗ КОЛОНКИ ----------
   Найдено тем же документным замером: при 1100 px `span.user-rating-stars-count-reviews`
   («0 отзывов») выходил за правый край окна на 19 px, при 992 px — на 46 px (замер:
   `_tl_probe_ovfall.js`). Причина: в колонке `.ad-card-user-content` шириной 101 px
   (1100 px) и 74 px (992 px) не помещается ряд «5 звёзд (110 px) + подпись (51 px)»,
   а блок рейтинга — flex-строка без переноса.
   Правка: узкая карточка продавца становится вертикальной (аватар сверху, текст на всю
   ширину), тогда ряд рейтинга помещается целиком и ничего не обрезается и не переносится
   построчно. Проверено вариантами (`_tl_probe_ratingfix2.js`): при 1100 px ширина колонки
   становится 167 px, звёзды остаются в одну строку, переполнение 0; при 992 px — 140 px,
   переполнение 0. Вариант «переносить звёзды» отвергнут: при 992 px звёзды рвались на
   4 + 1 (три строки). При ≥1200 px колонка шире 110 px и всё помещается — правило не нужно. */
@media (max-width: 1199px) {
  .ad-card-user {
    flex-wrap: wrap;
  }
  .ad-card-user .ad-card-user-content {
    flex: 1 1 100%;
    min-width: 0;
  }
}

/* =====================================================================================
   20. ЗАЗОРЫ МЕЖДУ СМЫСЛОВЫМИ БЛОКАМИ (правило владельца 16.09.2026: «слипание блоков!»)
   -------------------------------------------------------------------------------------
   Правило обхода: зазор между смысловыми блоками ≥ 12 px (норма 20–24); подпись/примечание
   до кнопки 16–20 px; ничего не прижато к рамке; текст выровнен по одной левой линии.
   Инструмент: `redesign/_tl_layout.js` (новые проверки glued / noteBtn / misaligned),
   прогон `_tl_work/glue_sweep.ps1`, сводка `_tl_work/glue_report.ps1`.
   Замер «до»: `_tl_work/glue_before.txt`. Ниже — только те места, что инструмент нашёл.
   ===================================================================================== */

/* ---------- 20.1 РИТМ ТЕКСТА: подпись не липнет к заголовку ----------
   `/secure-deals`, `/mobilnoe-prilozhenie`: `.tl-eyebrow` (плашка-надзаголовок) стояла
   в 10 px от заголовка секции, а заголовок — в 8 px от описания. Стало 16 / 12. */
.tl-sub {
  margin-top: 12px;
}
.tl-page-static > section.tl-static-sec > .tl-eyebrow {
  margin-bottom: 16px;
}
.tl-page-static > section.tl-static-sec > h2 {
  margin: 0 0 12px;
}

/* ---------- 20.2 СТРОКА ЛОТА: подписи колонок переносятся, а не наезжают ----------
   Замер до: в колонке «Ставок» (92 px) подпись «ставки не принимаются» занимала 135 px
   и вылезала влево на 43 px — наезжала на «без аукциона» из колонки «Осталось»
   (пересечение 29 px, инструмент показывал «наезд … площадь 527»). Теперь подпись
   переносится по словам внутри своей колонки, а «цена → чип Блиц-цена» стоят через 12 px. */
@media (min-width: 992px) {
  .tl-lot-row .tl-lot-col {
    gap: 12px;
  }
}
.tl-lot-col .tl-lot-sub {
  white-space: normal;
  overflow-wrap: anywhere;
}
/* характеристики: элементы не сжимаются друг в друга (на телефоне длинный адрес
   в цифровой строке наезжал на подпись «Яндекс ИКС:»); лишнее обрезает сама строка */
/* ЦИФРЫ НЕ ОБРЕЗАЕМ, ПОДПИСЬ МОЖЕТ УЖАТЬСЯ. Правка 17.09.2026: если характеристик
   больше, чем помещается в колонку (замер: 488 px содержимого при колонке 416 px),
   раньше строка не сжималась и последний факт вылезал за блок на 104 px (цифры
   обрезались). Теперь подпись факта сжимается и получает многоточие, а число (`b`)
   остаётся целиком: «Посетителей в мес… 0». Строка остаётся ОДНОЙ — высоты строк
   в списке по-прежнему одинаковые. */
.tl-lot-facts-row > .tl-lot-fact {
  flex: 0 1 auto;
  min-width: 0;
  overflow: hidden;
}
.tl-lot-facts-row > .tl-lot-fact .tl-lot-fact-label {
  overflow: hidden;
  text-overflow: ellipsis;
}
.tl-lot-facts-row > .tl-lot-fact > b {
  flex: 0 0 auto;
}
.tl-lot-facts-row > .tl-lot-fact-sep {
  flex: 0 0 auto;
}
.tl-lot-fact.is-url,
.tl-lot-fact.is-url .tl-lot-link {
  min-width: 0;
}
/* ПЕРЕНОС СТРОКИ ХАРАКТЕРИСТИК РАЗРЕШЁН НА ЛЮБОЙ ШИРИНЕ (правка 17.09.2026).
   Проверка: на `/profile/ads` `span.tl-lot-fact` вылезал за обрезку на 68 px —
   то есть в узкой колонке кабинета часть характеристики просто пропадала.
   Теперь строка переносится: то, что помещается, стоит в одну линию, остальное
   уходит на следующую (высота растёт только у таких строк — цифры не теряются). */
.tl-lot-facts-row {
  flex-wrap: wrap;
  overflow: visible;
  row-gap: 3px;
}
/* на телефоне цифры переносятся на следующую строку целиком — ничего не обрезается */
@media (max-width: 991px) {
  .tl-lot-facts-row {
    flex-wrap: wrap;
    overflow: visible;
    row-gap: 3px;
  }
}

/* ---------- 20.3 КАРТОЧКА ЛОТА: зазоры между смысловыми блоками ---------- */
/* чип «Адрес сайта лота»: тело и кнопка (на телефоне встают столбиком — было 10 px) */
.ad-url-chip {
  gap: 12px !important;
}
/* аукционный блок: bootstrap-классы mb-2 давали 8 px между плашкой и подписью */
.auction-sidebar > * + * {
  margin-top: 12px;
}
/* стопка кнопок в правой колонке карточки: 10 px → 12 */
.ad-card-action-buttons > * + * {
  margin-top: 12px;
}
/* кнопки панели фильтров каталога («Сбросить» → «Показать лоты»): было 5 px */
.params-buttons-sticky > * + * {
  margin-top: 12px;
}
/* баннер cookie: заголовок и текст (8 px → 12) */
.footer-cookie-container h6 {
  margin: 0 0 12px !important;
}

/* ---------- 20.4 СТАТЬЯ БЛОГА: шапка статьи не прижата к тексту ----------
   Замер: `div.text-center` (заголовок + дата/просмотры) и `div.blog-post-card-content`
   соприкасались — зазор 0 px. */
.col-md-12 > .text-center + .blog-post-card-content {
  margin-top: 16px;
}

/* ---------- 20.5 БЛОК ГРАФИКОВ (.tlc) — КОМПОНЕНТ ДРУГОГО ИСПОЛНИТЕЛЯ ----------
   Файл компонента не меняем (зона другого исполнителя), но на публичной карточке лота
   он стоял с зазорами 10 px: «head → пустое состояние» и «пустое состояние → источник».
   Правим только зазор, оформление их блока не трогаем. */
.tlc-head {
  margin-bottom: 12px !important;
}
.tlc-source {
  margin-top: 12px !important;
}

/* =====================================================================================
   21. ПРАВКИ ПО НЕЗАВИСИМОЙ ПРОВЕРКЕ (24 пункта, 5 замечаний в моей зоне)
   -------------------------------------------------------------------------------------
   21.1 ЕДИНЫЙ СТАНДАРТ ВНУТРЕННИХ ОТСТУПОВ КАРТОЧЕК.
        Токен `--card-pad` (§1) = 22 px (на телефоне 18 px). Приводим к нему все
        «карточные» блоки: было `.tl-lot-row` 18×20, `.tl-step` 22×20, `.tl-tariff-card`
        24 (у «популярного» 28×24), `.tl-cabhead` 24.
        КРУПНЫЕ СЕКЦИИ-БАННЕРЫ оставлены намеренно больше (это не карточки, а широкие
        секции с крупным заголовком и картинкой, 22 px сделает их тесными):
          `.tl-about-data` 40 px — пояснительный блок на главной с примером;
          `.tl-band` 44 px — полоса «Покупайте и продавайте БЕЗОПАСНО»;
          `.tl-app-row` 28×32 — блок мобильного приложения с иллюстрацией;
          `.tl-hero-card` 24 px — шапка статической страницы (первый экран).
   21.2 ЛИНИИ ВНУТРИ КАРТОЧЕК УБИРАЕМ (владелец: «лишние линии убрать»).
        Иконка категории в строке лота и «сердце» — это вложенные элементы, у них была
        своя рамка 1 px внутри карточки строки (получалась двойная рамка). Теперь только
        мягкая подложка. У карточки магазина рамка была и у внешней карточки, и у
        внутренней ссылки (25 px серый прямоугольник внутри белой карточки) — оставляем
        одну рамку у карточки.
   21.3 ЛИД СТАТИЧЕСКОЙ СТРАНИЦЫ: 17 px → 16 px (единый размер подзаголовка).
   21.4 «ЛИПКИЕ» ЗАЗОРЫ 10–15 px ПОДНЯТЫ ДО ≥ 16 px:
        — пилюля сортировки «По новизне» в каталоге (текст стоял в 10 px от края коробки);
        — шаг гайда на `/ad/create` (текст в 14 px от рамки карточки шага).
        Файлы компонентов не меняем — правка только в нашем слое.
   ===================================================================================== */
.tl-lot-row,
.tl-step,
.tl-steps .tl-step,
.tl-tariff-card,
.tl-tariff-card[data-recommended],
.tl-cabhead {
  padding: var(--card-pad);
}
/* строка лота в каталоге и кабинете: единый стандарт (правило слоя кабинета давало 20×22) */
body .col-md-9 .tl-lot-row {
  padding: var(--card-pad);
}
/* карточка со плашкой «Популярный»: сверху место под плашку (правило ниже — важнее) */
.tl-tariff-card:has(> .tl-tariff-badge) {
  padding-top: 64px !important;
}
.tl-tariff-card:has(> .tl-tariff-badge) > .tl-tariff-badge {
  top: 16px !important;
}

/* линии внутри карточек */
.tl-lot-row .tl-lot-icon {
  border: 0 !important;
}
.tl-lot-row .container-item-favorite {
  border: 0 !important;
}
.widget-shops-item-link {
  background: transparent !important;
  border: 0 !important;
  border-radius: var(--card-radius-inner) !important;
  padding: 0 !important;
  margin-bottom: 0 !important;
  min-height: 0 !important;
}

/* лид статической страницы */
.tl-page-static > section.tl-hero-card .tl-hero-lead {
  font-size: 16px;
}

/* «липкие» зазоры → ≥ 16 px */
.catalog-container-options .uni-dropdown-name {
  padding: 16px;
  height: auto;
  min-height: 52px;
}
.create-guide-step {
  padding: 16px;
}
/* файл компонента `AdCreateGuide.php` печатает свою таблицу стилей ПОСЛЕ подключаемых
   (padding 14×16), поэтому перебиваем специфичностью `body` + класс, без `!important` */
body .create-guide-step {
  padding: 16px 18px;
}

/* =====================================================================================
   22. ПОЛЯ ВВОДА: ГРАНИЦЫ ЗАМЕТНЕЕ — ПО ВСЕМУ СЕРВИСУ (требование владельца 16.09.2026)
   -------------------------------------------------------------------------------------
   Дословно: «Сделать бордеры блоков ввода чуть темнее, не видно куда вводить!
   и так везде по сервису».
   Замер ДО (`_tl_probe_fields.js`):
     • вход/регистрация `/auth` и кабинет `/profile/settings`: рамка полей
       rgb(247,248,250) (--surface-2) → контраст к белому **1,06:1** — поля «растворялись»;
     • фильтры каталога `/all`: rgb(203,203,209) (--line) → 1,62:1;
     • поиск в шапке: rgb(193,193,199) (--border) → 1,64:1.
   СТАЛО: `--border-strong` #b4b4ba → **2,07:1** к белому (ориентир владельца «~2:1 и выше»),
   в фокусе — фирменная рамка `--brand` + мягкое кольцо.
   Правило лежит в общем слое (подключается последним в теме сайта и кабинета), поэтому
   работает в мастере публикации, фильтрах, входе/регистрации, поиске и кабинете.
   ВНИМАНИЕ: админка (`resources/view/dashboard_<alias>/assets/css/`) подключает СВОИ копии
   слоёв (main.css, tradelot-contrast/spacing/borders.css) — там то же правило должен
   добавить исполнитель админки, см. TRADELOT_PROJECT_STATE.md §12.ЭТАП-5-ШЕСТ.
   ===================================================================================== */
:is(input:not([type="checkbox"]):not([type="radio"]):not([type="range"]):not([type="file"]):not([type="submit"]):not([type="button"]):not([type="reset"]):not([type="hidden"]):not([type="image"]),
    textarea,
    select,
    .form-control,
    .form-control-textarea,
    .form-select,
    .uni-select,
    .uni-select-name,
    .uni-dropdown-name,
    .live-search-form-input,
    [contenteditable="true"]) {
  border-color: var(--border-strong, #b4b4ba) !important;
}
/* кастомные селекты фильтров (span.uni-select-name) были вообще без рамки
   (`border-width:0`) — приёмка 16.09.2026: 9 из 21 поля на /veb-sayty «невидимые».
   Даём им полноценную рамку и фон поля. */
.uni-select,
.uni-select-name {
  border: 1px solid var(--border-strong, #b4b4ba) !important;
  background-color: var(--surface, #fff) !important;
}
/* текст кастомного селекта был жёстко #333 на жёстком фоне #f7f8fa. Фон мы перевели
   на токен --surface, поэтому и цвет текста переводим на токен (иначе в тёмной теме
   получалось #333 на тёмном фоне — замер 16.09.2026: 1,36:1, 9 нарушений на /veb-sayty).
   В светлой теме вид не меняется: --ink-2 #3a3550 против прежнего #333333. */
.uni-select-name {
  color: var(--ink-2, #3a3550) !important;
}
/* поле поиска в шапке: фон был тонированный (--surface-2 rgb(246,244,253)), поэтому та же
   рамка --border-strong давала 1,89:1 вместо 2,06:1, и поле выбивалось из общего вида полей.
   Приводим фон к токену --surface — как у остальных полей (требование «и так везде по сервису»). */
.live-search-form-input {
  background-color: var(--surface, #fff) !important;
}
.uni-select:focus-within,
.uni-select-name:focus,
.uni-select-name:focus-visible {
  border-color: var(--brand, #6640f4) !important;
  box-shadow: 0 0 0 3px rgba(102, 64, 244, .18) !important;
  outline: none !important;
}
:is(input:not([type="checkbox"]):not([type="radio"]):not([type="range"]):not([type="file"]):not([type="submit"]):not([type="button"]):not([type="reset"]):not([type="hidden"]):not([type="image"]),
    textarea,
    select,
    .form-control,
    .form-select,
    .uni-select-name,
    .uni-dropdown-name,
    .live-search-form-input):focus,
:is(.uni-select, .uni-select-name, .uni-dropdown-name):focus-within {
  border-color: var(--brand, #6640f4) !important;
  box-shadow: 0 0 0 3px rgba(102, 64, 244, .18) !important;
  outline: none !important;
}
/* «нет данных» в строке лота: вместо пустой полосы — пояснение (требование владельца:
   «строка не должна выглядеть дырявой»), высота блока характеристик при этом та же */
.tl-lot-fact.is-none {
  color: var(--muted);
  font-weight: 400;
}

/* ---------- 22-БИС. МЕЛКИЕ ЗАЗОРЫ, КОТОРЫЕ НАШЛА ПРИЁМКА (16.09.2026) ----------
   Замеры до: подпись поля → само поле 8 px (панель фильтров каталога), название лота →
   блок характеристик 9 px, строки в блоке «Подтверждено сервисом» 4 px,
   чекбоксы `div.form-check` друг к другу 2 px. Поднимаем до 12 px (норма обхода). */
.params-form-item-label {
  margin-bottom: 12px !important;
}
.tl-lot-facts {
  margin-top: 12px;
}
.tl-about-data-foot {
  gap: 12px;
}
.form-check + .form-check {
  margin-top: 12px;
}
/* карточки «Возможности сервиса» и подвал: ритм внутри карточки 12 px
   (приёмка нашла h4 → p 10 px и p → картинка 1 px) */
.widget-promo-banner-item h4 {
  margin-bottom: 12px !important;
}
.widget-promo-banner-item p + img,
.widget-promo-banner-item img {
  margin-top: 12px;
}
.tl-footer-col h6 + .tl-footer-contact,
.tl-footer-col > h6 + * {
  margin-top: 12px !important;
}
/* список галочек в блоке «Безопасные сделки» и текст карточки блога: 12 px между строками
   (приёмка: 10 / 8 / 6 px) */
.tl-check li + li {
  margin-top: 12px;
}
.blog-grid-item-date + .blog-grid-item-title {
  margin-top: 12px;
}
.blog-grid-item-title + .blog-grid-item-category {
  margin-top: 12px;
}
/* блок мобильного приложения: заголовок → описание 12 px (приёмка: 10 px) */
.tl-app-row .tl-app-text .tl-sub {
  margin-top: 12px;
}
/* подвал: ссылки в строке переносятся с зазором 12 px (приёмка: 1 px при переносе) */
.footer-bg-box-link-inline {
  display: flex !important;
  flex-wrap: wrap !important;
  gap: 12px !important;
}
/* навигация мастера публикации: чипы шагов стояли с зазором 8 px
   (проверка 17.09.2026: `a.wiz-nav-item.done ↓ .done` = 8 px). Контейнер
   `.wiz.wiz-nav` — flex с `gap:8px`; поднимаем до нормы 12 px по обеим осям.
   Правка только в нашем слое, файлы мастера не меняются. */
.wiz.wiz-nav {
  gap: 12px !important;
}
/* блок аналитики в карточке лота: подпись перед карточками графиков стояла ВПЛОТНУЮ
   (наш обход зазоров: `p.ana-note ↓ div.tlc-cards` = 0 px, в компоненте
   `TradelotCharts`). Разделяем отступом 12 px — файлы компонента не меняем.
   ВАЖНО: между подписью и карточками в разметке лежит элемент <style> (инлайновые
   стили компонента), поэтому соседний селектор `+` не срабатывает — нужен `~`. */
.ana-note ~ .tlc-cards,
.ana-note ~ .tlc-cards-wrap,
.ad-card-content-item .ana-note ~ .tlc-cards {
  margin-top: 12px !important;
}

/* =====================================================================================
   23. ГЛАВНАЯ: БЛОК «ДАННЫЕ В ЛОТАХ» — ОФОРМЛЕННАЯ СЕКЦИЯ, А НЕ ТЕКСТ НА БЕЛОМ
   -------------------------------------------------------------------------------------
   Владелец: «Где оформление в блоке Аналитика на главной? лысо очень! нет блоков
   затемнённых или ещё что».
   Стало: слева каждый пункт объяснения — в лёгкой подложке (карточка-плашка),
   справа пример из карточки лота — в отдельной ЗАТЕМНЁННОЙ карточке (--brand-tint-2,
   внутри 20 px), а цифры внутри неё — на белых плашках, чтобы читались слоями.
   ===================================================================================== */
.tl-about-data-list {
  gap: 12px;
}
.tl-about-data-rows {
  gap: 12px;
}
.tl-about-data-list li {
  padding: 12px 16px;
  border: 1px solid var(--line-soft);
  border-radius: var(--card-radius-inner);
  background: var(--surface-2);
  box-shadow: none;
}
.tl-about-data-list li i {
  color: var(--success);
}
.tl-about-data-example {
  padding: 20px;
  /* затемнённая карточка примера. Селектор с `!important` ДОЛЖЕН быть специфичнее
     правила §1 (`.tl-about-data .tl-about-data-example{border:0}` — 2 класса), иначе
     рамка и тень снимались: проверка 17.09.2026 видела `border: 0px` (0,1,0 против 0,2,0).
     Теперь селектор тоже 2 класса и стоит НИЖЕ по файлу — правило побеждает. */
  border: 1px solid var(--brand-tint-2) !important;
  border-radius: var(--card-radius);
  background: var(--brand-tint-2) !important;
  box-shadow: var(--card-shadow) !important;
}
/* рамка примера должна ЧИТАТЬСЯ: цвет рамки — фирменный в прозрачности, а не тот же
   тон, что подложка (иначе рамка есть, но её не видно) */
.tl-about-data .tl-about-data-example {
  border: 1px solid rgba(102, 64, 244, .28) !important;
  box-shadow: var(--card-shadow) !important;
}
.tl-about-data-example .tl-about-data-row {
  background: var(--surface);
}
.tl-about-data-example .tl-about-data-foot {
  background: var(--surface);
}

.tl-about-data-tag {
  color: var(--brand-active, var(--brand-hover));
}
.tl-about-data-example-date {
  color: var(--ink-2);
}

/* =====================================================================================
   24. ПЛИТКИ КАТЕГОРИЙ: ЗНАЧКИ ВИДНЫ, «РЕЛЬСА» НЕ ОБРЕЗАНА (16.09.2026)
   -------------------------------------------------------------------------------------
   Владелец по скриншотам `/all` и `/shops`: «где иконки?» и «почему обрезано?».
   Замер (`_tl_probe_caticon.js`, `_tl_probe_cattiles2.js`):
     • значок в плитке каталога был `display:none` — его гасило правило этапа «без картинок»
       `main.css:13180 .widget-categories-or-subcategories a img{display:none!important}`
       (оно писалось против загруженных картинок категорий, но заодно убило и наши SVG);
     • «рельса» обрезана: `.widget-categories-or-subcategories-hide{height:100px;overflow:hidden}`
       при плитках высотой 118 px — видно 6 плиток из 10, седьмая обрезана по вертикали
       (вторая строка целиком скрыта).
   Правки:
     1) показываем наши SVG-значки (класс `.tl-cat-icon`), а загруженные картинки категорий
        остаются скрытыми — правило этапа «без картинок» продолжает работать для них;
     2) контейнер плиток растёт по содержимому: все 10 плиток видны целиком (перенос на
        вторую строку), а кнопка «показать все» больше не нужна и скрыта (её роль выполнял
        JS-разворот контейнера).
   ===================================================================================== */
.widget-categories-or-subcategories a img.tl-cat-icon {
  display: block !important;
}
.widget-categories-or-subcategories-hide {
  height: auto !important;
  max-height: none !important;
  overflow: visible !important;
}
.widget-categories-or-subcategories-button-all {
  display: none !important;
}

/* =====================================================================================
   25. «РЕЛЬСА» НА ГЛАВНОЙ: ВСЕ ПЛИТКИ ВИДНЫ + ФИРМЕННАЯ ПОДЛОЖКА (16.09.2026)
   -------------------------------------------------------------------------------------
   Приёмка: «целиком видно 4 из 10 плиток на 1440, 3 из 10 на 1100, 1 из 10 на 390»
   (плитка 280 px, дорожка 1372 px) и «подложка случайная — за 6 загрузок 60 разных цветов,
   в 2 из 6 оранжевая».
   Причина случайных цветов: инлайновый `style="background-color: rgba(…)"` приходит из
   компонента модуля категорий (`CustomBoardCategories.php`, чужой файл — не меняем).
   Правка только нашим слоем:
     • карусель → сетка: 5 плиток в ряд на ≥1200, 4 на 992–1199, 3 на 576–991, 2 на телефоне;
     • у плитки фирменный светлый тинт `--brand-tint` вместо случайного цвета;
     • стрелки карусели больше не нужны — скрыты.
   ===================================================================================== */
/* ВАЖНО: слайды лежат не в контейнере, а во внутреннем `.swiper-wrapper` (его создаёт
   swiper) — сетку задаём ИМЕННО обёртке, иначе она станет одной колонкой. */
.tl-rail-wrap .module-categories-items-custom-2 {
  display: block !important;
  overflow: visible !important;
}
.tl-rail-wrap .module-categories-items-custom-2 > .swiper-wrapper,
.tl-rail-wrap .widget-categories-container .swiper-wrapper {
  display: grid !important;
  grid-template-columns: repeat(5, minmax(0, 1fr)) !important;
  gap: 16px !important;
  transform: none !important;
  width: auto !important;
  transition: none !important;
}
.tl-rail-wrap .module-categories-items-custom-2-item {
  width: auto !important;
  max-width: 100% !important;
  margin-right: 0 !important;
  transform: none !important;
  /* подложка: фирменный светлый тинт вместо случайного инлайнового цвета
     (проверка 17.09.2026: 60 разных цветов за 6 загрузок, оранжевая в 3 из 6)
     + ГРАДИЕНТ для объёма (владелец: «верните иконки или 3d сделайте»):
     белый сверху-слева → светлый тинт → тинт-2 снизу-справа. */
  background: var(--brand-tint) !important;
  background-image: linear-gradient(160deg, #ffffff 0%, #f2eeff 42%, var(--brand-tint) 72%, var(--brand-tint-2) 100%) !important;
  background-color: var(--brand-tint) !important;
}
.tl-rail-wrap .module-categories-swiper-prev,
.tl-rail-wrap .module-categories-swiper-next {
  display: none !important;
}
@media (max-width: 1199px) {
  .tl-rail-wrap .module-categories-items-custom-2 > .swiper-wrapper,
  .tl-rail-wrap .widget-categories-container .swiper-wrapper {
    grid-template-columns: repeat(4, minmax(0, 1fr)) !important;
  }
}
@media (max-width: 991px) {
  .tl-rail-wrap .module-categories-items-custom-2 > .swiper-wrapper,
  .tl-rail-wrap .widget-categories-container .swiper-wrapper {
    grid-template-columns: repeat(3, minmax(0, 1fr)) !important;
  }
}
@media (max-width: 575px) {
  .tl-rail-wrap .module-categories-items-custom-2 > .swiper-wrapper,
  .tl-rail-wrap .widget-categories-container .swiper-wrapper {
    grid-template-columns: repeat(2, minmax(0, 1fr)) !important;
  }
}


/* ==========================================================================
   ПРИЁМКА 17.09.2026 — РАДИУСЫ КОМПОНЕНТОВ (20 / 14 / 12)
   Этим блокам радиус не был задан вовсе (замер приёмки: 0 px). Значения — из
   системы: крупные контейнеры 20, карточки 14, мелкие элементы 12.
   ========================================================================== */
.params-form-item { border-radius: var(--r-sm, 14px); }

.mini-avatar,
.mini-avatar img { border-radius: 12px; overflow: hidden; }

.tl-lot-head { border-radius: var(--r-sm, 14px); }

.tl-faq-item { border-radius: var(--r-sm, 14px); }

.container-item-images { border-radius: 20px; }

.container-item-grid .container-item-images { border-radius: var(--r-sm, 14px); }

.lk-vis { border-radius: 20px; padding: 20px; }
/* Приёмка 17.09.2026: в main.css у этого блока стоит `border-radius: 0 !important`
   (`.params-form .params-form-item`), поэтому радиус задаём тем же селектором
   и тоже с !important — этот слой подключается позже и выигрывает. Замер: 0 → 14 px. */
.params-form .params-form-item,
.params-form-filters-container .params-form-item { border-radius: var(--r-sm, 14px) !important; }

/* =====================================================================================
   27. ПРАВИЛО ВЛАДЕЛЬЦА: «КВАДРАТНЫХ УГЛОВ НЕ ДОЛЖНО БЫТЬ НИГДЕ» (17.09.2026)
   -------------------------------------------------------------------------------------
   Дословно: «квадратные бордеры ничего не нужны, нужно закруглённые как везде и красивые!
   На всём сервисе!». Система скруглений (токены слоя §1):
        карточки и секции ........ --card-radius 20 px (телефон 18)
        внутренние блоки и поля .. --card-radius-inner 14 px (мелкие --r-xs 10)
        метки, пилюли, счётчики .. --r-pill 999 px
        кнопки .................. 12 px
        картинки и превью ....... радиус родителя (inherit)
   Обход замером (проба `_tl_probe_square3.js`, 20 страниц) показал: подавляющая часть
   сервиса УЖЕ со скруглениями (карточки 20, плитки 24, поля 10–14, метки 999, кнопки 999/12).
   Квадратные углы оставались у считанных элементов — ниже они закрыты точечно, чтобы
   не менять то, что уже скруглено (требование владельца: «где скругление есть — не менять»).
   ===================================================================================== */
/* 27.1 Полосы на всю ширину: верхняя плашка и подвал — это видимые блоки (фон + линия) */
.header-wow-top {
  border-radius: var(--r-sm, 14px);
}
.footer-bg {
  border-radius: var(--card-radius);
}
.tl-footer-bottom {
  border-radius: var(--r-sm, 14px);
}
/* декоративные картинки старого подвала (город, машина, велосипед) — тоже со скруглением */
.new_footer_top .footer_bg,
.new_footer_top .footer_bg_one,
.new_footer_top .footer_bg_two {
  border-radius: var(--card-radius-inner, 14px);
}
/* 27.2 Модальные окна: на телефоне в main.css у `.modal-content` стоит `border-radius:0`
   (проверка при 390 px: 0/0/0/0). Возвращаем систему: 20 px, на телефоне 18 px. */
.modal-content,
.modal-dialog .modal-content,
.uni-media-slider-modal-container-item,
.user-stories-modal-container-item {
  border-radius: var(--card-radius) !important;
}
/* 27.3 Выпадающие панели, алерты, тосты, календарь, редактор — внутренний уровень 14 px */
.dropdown-menu,
.uni-dropdown-box,
.uni-dropdown-content,
.dropdown-box-list,
.uni-select-content,
.uni-select-content-container,
.selectpicker,
.bootstrap-select .dropdown-menu,
.alert,
.toast,
.accordion-item,
.accordion-button,
.datepicker,
.datepicker-dropdown,
.popover,
.tooltip-inner,
.table-responsive,
.input-group-text,
.cke,
.ck.ck-editor__main > .ck-editor__editable,
.ck.ck-toolbar {
  border-radius: var(--card-radius-inner, 14px) !important;
}
.tooltip-inner {
  border-radius: var(--r-xs, 10px) !important;
}
/* 27.4 Поля ввода и выпадающие списки: внутренний уровень 14 px.
   ИСКЛЮЧЕНИЯ — то, что задумано «таблеткой» и уже скруглено 999 (владелец: «где
   скругление уже есть — не менять»): поиск в шапке и пилюля сортировки каталога.
   Замер: `.live-search-form-input` и `.uni-dropdown-name` = 999/999/999/999. */
input:not([type="checkbox"]):not([type="radio"]):not([type="range"]):not([type="file"]):not([type="submit"]):not([type="button"]):not([type="reset"]):not([type="hidden"]):not([type="image"]),
textarea,
select,
.form-control,
.form-control-textarea,
.form-select,
.uni-select-name,
[contenteditable="true"] {
  border-radius: var(--card-radius-inner, 14px);
}
.live-search-form-input,
.uni-dropdown-name {
  border-radius: var(--r-pill, 999px) !important;
}
/* 27.5 Кнопки — 12 px. Кнопки-«таблетки» (пилюли 999) и круглые иконки не трогаем. */
.btn-custom:not(.button-color-scheme1):not(.button-color-scheme2):not(.button-color-scheme3),
.btn-custom-big:not(.button-color-scheme1):not(.button-color-scheme2),
.btn-custom-mini:not(.button-color-scheme1):not(.button-color-scheme2) {
  border-radius: 12px;
}
/* 27.5.1 КНОПКИ-CTA — «таблетки» (999), как «Разместить лот» в шапке и «Купить проект».
   Причина (замечание владельца по скриншоту главной): в ОДНОЙ паре первого экрана кнопки
   выглядели по-разному — «Купить проект» (button-color-scheme1) = 999 px,
   «Продать проект» (button-color-scheme5) = 12 px (это его давало правило 27.5 выше).
   Правка ТОЧЕЧНАЯ: правило 27.5 для всех остальных кнопок (.btn-custom* = 12 px) НЕ тронуто,
   под это правило попадают только кнопки внутри блоков-CTA публичных страниц:
     .tl-cta            — герой (первый экран) главной;
     .tl-head-side,
     .tl-cat-head-actions — шапки каталога и страниц категорий («Разместить лот»);
     .tl-band-btnrow    — промо-полосы главной (Т-Банк, мобильное приложение);
     .tl-cta-row        — блоки-CTA статических страниц (внутри .tl-page-static);
     .ad-card-buy-now   — «Купить сейчас» в карточке лота (рядом стоят «Написать»
                          и «Войти и запросить доступ» — тоже 999, выглядели разными);
     .mobile-grid-menu-categories — «Полный каталог» в мобильном меню (на десктопе
                          та же кнопка в .tl-head-side уже 999, на телефоне была 12).
   !important — специфичность правила 27.5 выше (цепочка :not()), иначе селектор проигрывает.
   Замер: до — 999 / 12 px в паре героя; после — 999 / 999 (см. отчёт). */
.tl-cta > .btn-custom,
.tl-cta > .btn-custom-big,
.tl-head-side > .btn-custom,
.tl-head-side > .btn-custom-big,
.tl-cat-head-actions > .btn-custom,
.tl-cat-head-actions > .btn-custom-big,
.tl-band-btnrow > .btn-custom,
.tl-band-btnrow > .btn-custom-big,
.tl-page-static .tl-cta-row .btn-custom,
.tl-page-static .tl-cta-row .btn-custom-big,
.ad-card-buy-now > .btn-custom,
.ad-card-buy-now > .btn-custom-big,
.mobile-grid-menu-categories .btn-custom,
.mobile-grid-menu-categories .btn-custom-big {
  border-radius: var(--r-pill, 999px) !important;
}
/* 27.6 Картинки и превью наследуют радиус родителя (карточка 20/14, плитка 24).
   Селектор для значка строки лота — с тем же весом, что и правило выше по файлу
   (`.tl-lot-row .tl-lot-icon img{border-radius:0}`), иначе оно перебивало наше. */
.blog-grid-item-image img,
.widget-shops-item-image img,
.widget-article-blog-item img,
.tl-page-static .tl-app-art img,
.container-item-grid .container-item-images,
.container-item-grid-highlight .container-item-grid-content,
.tl-lot-icon img,
.tl-lot-row .tl-lot-icon img {
  border-radius: inherit;
}
/* 27.7 Внутренние блоки карточек: если у них появится фон/рамка — углы уже скруглены */
.tl-lot-foot,
.ad-card-list-properties,
.payout-table,
.tlc-table,
.ana-acc-table,
.profile-user-sidebar-menu,
.tl-chat-body .chat-dialogue-item-menu,
.params-buttons-sticky,
.my-tabs-items-big .my-tabs-item,
.promo-business-section-container-title {
  border-radius: var(--card-radius-inner, 14px);
}
.tl-chat-body .chat-dialogue-item-menu {
  border-radius: var(--r-xs, 10px);
}
/* 27.8 Постраничная навигация и табы — пилюли, как метки */
.pagination .page-link,
.pagination .page-item:first-child .page-link,
.pagination .page-item:last-child .page-link,
.nav-tabs .nav-link,
.nav-pills .nav-link,
.breadcrumb,
.breadcrumb-item + .breadcrumb-item::before,
.widget-categories-or-subcategories-counter,
.label-circle-count,
.tl-lot-badge,
.tl-cat-chip {
  border-radius: var(--r-pill, 999px);
}
/* 27.9 Таблицы: внешние углы скруглены, ячейки внутри — только разделители
   (правило владельца: «внешний контейнер — со скруглением, внутренние ячейки без
   двойных рамок»). У `.payout-table` в main.css стоит `border-radius:0 !important`,
   поэтому углы задаём ячейкам первого/последнего ряда — они и рисуют видимую рамку. */
.payout-table-wrap,
.table-responsive,
.card > .table-responsive {
  border-radius: var(--card-radius-inner, 14px);
}
.payout-table,
.card table,
.tlc-table,
.ana-acc-table {
  border-collapse: separate;
  border-spacing: 0;
  border-radius: var(--card-radius-inner, 14px);
  overflow: hidden;
}
.payout-table > thead:first-child > tr:first-child > th:first-child,
.payout-table > tbody:first-child > tr:first-child > td:first-child,
.card .table > thead:first-child > tr:first-child > th:first-child {
  border-top-left-radius: var(--card-radius-inner, 14px);
}
.payout-table > thead:first-child > tr:first-child > th:last-child,
.payout-table > tbody:first-child > tr:first-child > td:last-child {
  border-top-right-radius: var(--card-radius-inner, 14px);
}
.payout-table > tbody:last-child > tr:last-child > td:first-child {
  border-bottom-left-radius: var(--card-radius-inner, 14px);
}
.payout-table > tbody:last-child > tr:last-child > td:last-child {
  border-bottom-right-radius: var(--card-radius-inner, 14px);
}
/* 27.10 Блоки из чужих зон, у которых углы квадратные (правим только слоем CSS) */
.wiz-side-percent {
  border-radius: var(--card-radius-inner, 14px);
}

/* =====================================================================================
   28. ЗАЗОРЫ В СВЕЖЕМ БЛОКЕ ПРИМЕРОВ АНАЛИТИКИ (зона аналитики, правка только слоем CSS)
   -------------------------------------------------------------------------------------
   Проверка обходом зазоров (`_tl_layout.js`): в блоке примеров строка источника
   «подтверждено сервисом» переносилась с зазором 6 px (`.tl-about-data-src` — flex
   с `gap:6px 10px`). Поднимаем до нормы 12 px. Разметку и файлы компонента не меняем.
   ===================================================================================== */
.tl-about-data-src {
  gap: 12px !important;
}
/* строки примеров: по 12 px между собой (в компоненте уже стоит 12 px, закрепляем от
   случайных переопределений — замер: зазор 12 px на 1440, 8 px был в момент правки) */
.tl-ex-list .tl-ex-row + .tl-ex-row {
  margin-top: 12px;
}
.tl-ex-list-title,
.tl-ex-list-note {
  margin-bottom: 12px;
}

/* =====================================================================================
   30. ЗНАЧКИ КАТЕГОРИЙ ОТ ВЛАДЕЛЬЦА — КРУПНО, КАК НА БОЕВОМ (17.09.2026)
   -------------------------------------------------------------------------------------
   Владелец положил 8 значков (папка «Иконки категорий», формат .webp + один .png) и попросил
   поставить их как на боевом сайте, кроме «Веб-сайты» и «Доменные имена».
   Все 8 файлов оказались БАЙТ-В-БАЙТ боевыми значками (сверка md5 — см. отчёт), поэтому
   вид «как на боевом» — это и есть эти файлы. Размеры на боевом (замер по их CSS):
     • плитка каталога: `.widget-categories-or-subcategories a img{height:80px}`;
     • плитка «рельсы»: `.module-categories-items-custom-2-item-image img{height:100px}`.
   У нас значки были 56 px в обоих местах — слишком мелко для объёмных картинок, поэтому
   поднимаем до боевых значений. Контейнеры единые, `object-fit: contain` уже стоит:
   пропорции не искажаются, неквадратные значки (Дзен 658×720, Приложения 1903×1730,
   Telegram-боты 1188×1080) вписываются целиком, без обрезки.
   ===================================================================================== */
.module-categories-items-custom-2-item-image .tl-cat-icon,
.tl-rail-wrap .module-categories-items-custom-2-item-image img {
  width: 92px !important;
  height: 92px !important;
  max-width: 100%;
  object-fit: contain;
}
.widget-categories-or-subcategories a .tl-cat-icon,
.widget-categories-or-subcategories a img.tl-cat-icon {
  width: 80px !important;
  height: 80px !important;
  max-width: 100%;
  object-fit: contain;
}
/* компактные места: карточка лота, строка лота и блок примеров — тоже крупнее прежнего.
   ВАЖНО: в main.css есть правило `.tl-cat-icon{width:56px!important;height:56px}` (его добавили
   при переходе на картинки .webp), поэтому здесь тоже нужен `!important`. */
.ad-card-content-item img.tl-cat-icon,
.ad-card-sidebar img.tl-cat-icon,
.tl-lot-card img.tl-cat-icon,
.home-widget-categories-item .tl-cat-icon,
.tl-exc-icon {
  width: 64px !important;
  height: 64px !important;
  object-fit: contain;
}
.tl-lot-row .tl-lot-icon,
.tl-lot-row .tl-lot-icon img,
img.tl-lot-icon {
  width: 40px !important;
  height: 40px !important;
  object-fit: contain;
}

/* =====================================================================================
   26. ФОКУС ПОЛЕЙ ВВОДА — ПРОВЕРКА ЗАМЕРА, А НЕ КОДА (17.09.2026)
   -------------------------------------------------------------------------------------
   Проверка сообщила «фирменный фокус 12 из 32». Причина оказалась в СПОСОБЕ ЗАМЕРА,
   а не в правилах: у полей есть `transition: border-color ~0.2s`, поэтому мгновенное
   чтение `getComputedStyle` после `focus()` возвращает ЕЩЁ СТАРЫЙ цвет (`--border-strong`
   rgb(180,180,186)). С задержкой 400 мс (проба `_tl_probe_focus11.js`) рамка в фокусе —
   фирменная rgb(102,64,244) и кольцо rgba(102,64,244,.18):
     `/profile/settings` 6 из 6 замеренных, `/ad/edit/411` 4 из 4, `/all` 3 из 3.
   Правок CSS для этого не нужно — правило §22 работает. Запись оставлена как памятка,
   чтобы приёмка не «теряла» фокус при мгновенном чтении.
   ===================================================================================== */

/* =====================================================================================
   29. ПРИМЕРЫ ЗАПОЛНЕННЫХ ЛОТОВ НА ГЛАВНОЙ (задание владельца 17.09.2026)
   -------------------------------------------------------------------------------------
   «Создайте пример карточки лота — с профессиональным названием, со всеми аналитиками
   и статистиками … Эти примеры выдуманные, купить нельзя! … Только на главной оформите
   всё профессионально!».
   Разметка — components/lot-examples.tpl (6 карточек по категориям, вкладки на чистом CSS
   через radio, без JS). Здесь оформление: карточка 20 px и внутри 22 px (--card-pad),
   мягкая тень, данные — сеткой «подпись → значение», цифры крупно с подписью источника,
   в подвале карточки — «Подтверждено сервисом» и дата. Кнопок покупки и внешних ссылок
   в карточках примера нет — это требование владельца.
   ===================================================================================== */
.tl-examples {
  margin-top: 44px;
}
.tl-examples .tl-lead {
  max-width: 780px;
  margin: 12px auto 0;
  color: var(--ink-2);
  font-size: 15.5px;
  line-height: 1.55;
  text-align: center;
}
/* вкладки: сам radio скрыт, но остаётся доступным с клавиатуры (стрелки переключают) */
.tl-examples-radio {
  position: absolute;
  width: 1px;
  height: 1px;
  margin: 0;
  opacity: 0;
  pointer-events: none;
}
.tl-examples-tablist {
  display: flex;
  flex-wrap: wrap;
  justify-content: center;
  gap: 10px;
  margin-top: 22px;
}
.tl-examples-tab {
  display: inline-flex;
  align-items: center;
  min-height: 44px;
  padding: 10px 18px;
  border: 1px solid var(--card-border);
  border-radius: var(--r-pill);
  background: var(--card-bg);
  color: var(--ink-2);
  font-size: 14px;
  font-weight: 600;
  line-height: 1.2;
  cursor: pointer;
  transition: background-color .16s ease, border-color .16s ease, color .16s ease, box-shadow .16s ease;
}
.tl-examples-tab:hover {
  background: var(--brand-tint);
  border-color: var(--brand-tint-2);
  color: var(--brand-active, var(--brand-hover));
  box-shadow: var(--sh-1);
}
/* активная вкладка: заливка + белый текст (то же решение, что у активных меток сервиса) */
#tl-examples-tab-web:checked ~ .tl-examples-tablist label[for="tl-examples-tab-web"],
#tl-examples-tab-domain:checked ~ .tl-examples-tablist label[for="tl-examples-tab-domain"],
#tl-examples-tab-tg:checked ~ .tl-examples-tablist label[for="tl-examples-tab-tg"],
#tl-examples-tab-vk:checked ~ .tl-examples-tablist label[for="tl-examples-tab-vk"],
#tl-examples-tab-app:checked ~ .tl-examples-tablist label[for="tl-examples-tab-app"],
#tl-examples-tab-mp:checked ~ .tl-examples-tablist label[for="tl-examples-tab-mp"] {
  background: var(--brand-fill);
  border-color: var(--brand-fill);
  color: var(--on-fill);
  box-shadow: var(--sh-2);
}
/* фокус с клавиатуры: radio скрыт, но остаётся фокусируемым — кольцо показываем его вкладке */
.tl-examples-tabs:has(#tl-examples-tab-web:focus-visible) label[for="tl-examples-tab-web"],
.tl-examples-tabs:has(#tl-examples-tab-domain:focus-visible) label[for="tl-examples-tab-domain"],
.tl-examples-tabs:has(#tl-examples-tab-tg:focus-visible) label[for="tl-examples-tab-tg"],
.tl-examples-tabs:has(#tl-examples-tab-vk:focus-visible) label[for="tl-examples-tab-vk"],
.tl-examples-tabs:has(#tl-examples-tab-app:focus-visible) label[for="tl-examples-tab-app"],
.tl-examples-tabs:has(#tl-examples-tab-mp:focus-visible) label[for="tl-examples-tab-mp"] {
  outline: 3px solid rgba(102, 64, 244, .35);
  outline-offset: 2px;
}
.tl-examples-panels {
  margin-top: 22px;
}
.tl-examples-panel {
  display: none;
}
#tl-examples-tab-web:checked ~ .tl-examples-panels > .tl-examples-panel[data-tab="web"],
#tl-examples-tab-domain:checked ~ .tl-examples-panels > .tl-examples-panel[data-tab="domain"],
#tl-examples-tab-tg:checked ~ .tl-examples-panels > .tl-examples-panel[data-tab="tg"],
#tl-examples-tab-vk:checked ~ .tl-examples-panels > .tl-examples-panel[data-tab="vk"],
#tl-examples-tab-app:checked ~ .tl-examples-panels > .tl-examples-panel[data-tab="app"],
#tl-examples-tab-mp:checked ~ .tl-examples-panels > .tl-examples-panel[data-tab="mp"] {
  display: block;
}

/* ---------- карточка примера ---------- */
.tl-exc {
  max-width: 1060px;
  margin: 0 auto;
  padding: var(--card-pad);
  background: var(--card-bg);
  border: 1px solid var(--card-border);
  border-radius: var(--card-radius);
  box-shadow: var(--card-shadow);
}
.tl-exc-sample {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  margin: 0 0 16px;
  padding: 8px 14px;
  border-radius: var(--r-pill);
  background: var(--brand2-tint);
  color: var(--warm-ink, #8a3a12);
  font-size: 13px;
  font-weight: 600;
  line-height: 1.2;
}
.tl-exc-head {
  display: flex;
  align-items: flex-start;
  gap: 16px;
}
.tl-exc-icon {
  flex: 0 0 auto;
  width: 64px;
  height: 64px;
  object-fit: contain;
  display: block;
}
.tl-exc-cat {
  display: inline-block;
  font-size: 12px;
  font-weight: 700;
  letter-spacing: .06em;
  text-transform: uppercase;
  /* цвет — `--brand-active`, а не `--brand-fill`: в тёмной теме заливка #6640f4 на тёмной
     поверхности давала 2,94:1 (проверка контраста), а активный тон в тёмной теме светлый
     (≈8:1), в светлой — тёмно-фиолетовый (≈6,5:1 к белому). */
  color: var(--brand-active, #5533d8);
}
.tl-exc-title {
  margin: 6px 0 0;
  font-size: 21px;
  line-height: 1.3;
  font-weight: 700;
  color: var(--ink);
}
.tl-exc-meta {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
  margin-top: 12px;
}
.tl-exc-chip {
  display: inline-flex;
  align-items: center;
  padding: 6px 12px;
  border-radius: var(--r-pill);
  background: var(--surface-2);
  color: var(--ink-2);
  font-size: 12.5px;
  font-weight: 500;
  line-height: 1.25;
}
/* данные: сетка «подпись → значение» (3 колонки, на планшете 2, на телефоне 1) */
.tl-exc-facts {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 12px;
  margin: 20px 0 0;
}
.tl-exc-fact {
  padding: 14px 16px;
  border-radius: var(--card-radius-inner);
  background: var(--surface-2);
}
.tl-exc-fact dt {
  font-size: 12.5px;
  line-height: 1.35;
  color: var(--muted);
}
.tl-exc-fact dd {
  margin: 6px 0 0;
}
.tl-exc-val {
  display: block;
  font-size: 19px;
  font-weight: 700;
  line-height: 1.25;
  color: var(--ink);
  font-variant-numeric: tabular-nums;
}
.tl-exc-src {
  display: block;
  margin-top: 4px;
  font-size: 12px;
  line-height: 1.35;
  color: var(--muted);
}
.tl-exc-foot {
  margin-top: 20px;
  padding: 16px 18px;
  border-radius: var(--card-radius-inner);
  background: var(--brand-tint);
}
.tl-exc-sources {
  display: flex;
  align-items: flex-start;
  gap: 8px;
  margin: 0;
  font-size: 13.5px;
  font-weight: 600;
  line-height: 1.45;
  color: var(--ink);
}
.tl-exc-sources i {
  color: var(--success, #16a34a);
  font-size: 17px;
  line-height: 1.2;
  flex: 0 0 auto;
}
.tl-exc-note,
.tl-exc-date {
  margin: 8px 0 0;
  font-size: 13px;
  line-height: 1.45;
  color: var(--ink-2);
}
.tl-exc-date {
  font-size: 12.5px;
  color: var(--muted);
}
/* адаптив: планшет — 2 колонки данных, телефон — столбик, вкладки переносятся */
@media (max-width: 1199px) {
  .tl-exc-facts {
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }
}
@media (max-width: 767px) {
  .tl-examples {
    margin-top: 32px;
  }
  .tl-examples-tablist {
    gap: 8px;
  }
  .tl-examples-tab {
    padding: 9px 14px;
    font-size: 13.5px;
  }
  .tl-exc-head {
    gap: 12px;
  }
  .tl-exc-title {
    font-size: 18px;
  }
  .tl-exc-facts {
    grid-template-columns: 1fr;
  }
  .tl-exc-val {
    font-size: 18px;
  }
}

/* ==========================================================================
   ЧАСТЬ 31. ПЛАШКИ-МЕТКИ В СТРОКАХ ЛОТОВ — ОДНА СИСТЕМА (18.09.2026)

   Замечание владельца по скриншоту «Мои лоты»: «плашки-метки выглядят криво и
   разнокалиберно; у „Активно“ зелёный текст на фиолетовой подложке; „Аукцион“
   другого размера; это везде так с такими блоками видно».

   ЧТО БЫЛО НЕ ТАК (замер живым Chrome, _deploy/tradelot_tools/_bdg_measure.js,
   страницы «/», «/all», «/shops», «/profile», «/profile/ads» со всеми вкладками,
   «/profile/favorites», ширины 1440/1100/768/390 — отчёт _bdg_report.txt):

     1) «АКТИВНО» — ДВОЙНАЯ ПЛАШКА. Кабинет печатает статус лота как
        «span.tl-lot-badge.is-status» (оболочка) → «div» → «span.status-label
        .status-label-color-success». Оболочка получала заливку фирменным
        фиолетовым, а вложенная метка — свою светлую подложку: замер дал у
        оболочки высоту 32,8 px и фон rgb(102,64,244), у вложенной метки —
        30,8 px и фон rgb(231,247,239). То есть вокруг зелёной пилюли было
        видно фиолетовое кольцо, а по числам это НАЕЗД двух прямоугольников
        площадью 2369 px² («Активно») и 4598 px² («Снято с публикации») —
        по одному такому наезду в каждой строке кабинета.

     2) «АУКЦИОН» ДРУГОГО РАЗМЕРА. Высота 22 px и кегль 11,5 px против
        32,8 px и 12,5 px у статуса — расхождение 10,8 px внутри одной строки;
        «Блиц-цена» — те же 22 px, «Черновик» — 26 px, плашка «Аналитика N/M» —
        36,7 px и радиус 20 px вместо пилюли. Четыре высоты и два радиуса
        в одном списке.

     3) ЦВЕТ ЗАВИСЕЛ ОТ СТРАНИЦЫ. Часть правил объявлена в области «.col-md-9»
        (кабинет, каталог, магазины), часть — без неё (у главной «.col-md-9»
        нет). Поэтому одна и та же метка на главной и в кабинете выглядела
        по-разному: в кабинете «warning» — мягкая оранжевая подложка и
        тёмно-оранжевый текст (5,42:1), вне кабинета — чёрный текст на жёлтом.

   СТАЛО (числа ниже совпадают с замером «после»):
     • у всех коротких меток одна высота — 26 px, один кегль — 12,5 px при
       насыщенности 600, одни внутренние отступы — 0 11 px, одно скругление —
       пилюля 999 px, текст одной строкой (переноса и обрезки нет, проверено
       замером scrollWidth/clientWidth), зазор между соседними метками 8 px;
     • оболочка «.tl-lot-badge.is-status» стала ПРОЗРАЧНОЙ и без своих
       отступов, поэтому видимая плашка ровно одна и кольца нет: оболочка и
       вложенная метка дают одну и ту же высоту 26 px и одну и ту же ширину;
     • «Аналитика N/M»: заполнено (ana-ready-ok) — зелёная тема, не заполнено
       (ana-ready-part) — оранжевая. Раньше зелёной была и плашка «0 из 4»,
       то есть цвет не отвечал смыслу.

   ==========================================================================
   ЧАСТЬ 31-Б (18.09.2026, вечер). «БЕЗ НАВЕДЕНИЯ ЛЫСО, ПРИ НАВЕДЕНИИ НОРМАЛЬНО»

   СЛОВА ВЛАДЕЛЬЦА: «При наведении на лот только при наведении нормально, а без —
   лысо: „Аукцион“, „Блиц-цена“ и т.д. … они перебивают друг друга!»

   ЧТО БЫЛО НЕ ТАК (замер _deploy/tradelot_tools/_bdg_hover.js: фон/рамка/радиус/цвет
   каждой метки снимаются трижды — в обычном состоянии, при наведении НА СТРОКУ и при
   наведении НА МЕТКУ, наведение форсируется через CDP CSS.forcePseudoState, а список
   правил берётся через CSS.getMatchedStylesForNode):

     1) МЕТКИ БЫЛИ ПОЧТИ НЕОТЛИЧИМЫ ОТ ПОДЛОЖКИ. У метки своя подложка была
        «мягким тоном», а рамка — снята (`border:0 !important` в 31.1 убивал рамку
        базового правила `.tl-lot-badge` из main.css). Замер «отличие подложки метки
        от подложки строки»: 1,17:1 на белой строке каталога, 1,11:1 в кабинете и
        РОВНО 1,00:1 на главной у строки-аукциона — то есть метку не видно вообще.
     2) ПРИ НАВЕДЕНИИ МЕТКА «ПРОЯВЛЯЛАСЬ». Подложка строки-аукциона — `--brand-tint`
        (#efeaff, правило `.tl-lot-row.is-auction` в main.css), ровно тот же тон,
        что был выбран для «Аукциона» и «Блиц-цены» (#efeaff). При наведении строка
        темнела до `--brand-tint-2` (#e2d9ff, правило `.tl-lot-row.is-auction:hover`),
        отличие подложек становилось 1,15:1 — метка «появлялась». Отсюда и жалоба
        «только при наведении нормально».
     3) ДВА ПРАВИЛА ДЕЙСТВИТЕЛЬНО ПЕРЕБИВАЛИ ДРУГ ДРУГА (видно в
        CSS.getMatchedStylesForNode): `main.css` объявляет
        `.tl-lot-badge.is-auction{background:var(--brand); color:#fff}` и
        `.tl-lot-badge.is-auction, .tl-lot-blitz, …{background:var(--brand-fill)
        !important; color:var(--on-fill) !important}` — это фирменная заливка
        #6640f4, одинаковые значения в обоих правилах; но наша часть 31 объявляла
        для тех же селекторов светлый `--brand-tint`. Побеждало последнее правило →
        светлая заливка. Плюс базовое `.tl-lot-badge{border:1px solid var(--line-soft)}`
        против нашего `border:0 !important` — рамка пропадала.

   СТАЛО:
     • ПАЛИТРА «ЗАЛИВКА + ТЕКСТ» — БЕЗ РАМОК (правка владельца 18.09.2026:
       «убрать все цветовые бордеры на всём сервисе… бордер некрасиво
       выделяется на таких кнопках»). Заливки насыщенные — читаются на любой
       подложке (белая строка, строка-аукцион #efeaff и её наведение #e2d9ff),
       и это теперь единственное, что «держит» плашку, поэтому у нейтральной
       темы заливка стала насыщеннее: было #e2dcef (1,34:1 к белой строке и
       1,01:1 к наведённой строке-аукциону — почти не видно), стало #b1a4d0
       (2,31:1 к белой строке, 1,97:1 к наведённой строке-аукциону):
         «Активно», «Продано», «Новый товар», «Аналитика заполнена»
             #15803d + белый текст         — текст 5,02:1, заливка к подложке 3,73–5,02:1
         «На модерации», «Снято с публикации», «Ждет оплаты», «Срочно»
             #ff845c (ровно фирменный, НЕ затемнён) + #1b1630
                                           — текст 7,23:1, заливка к подложке 1,79–2,41:1
         «Заблокировано»   #c0392b + белый текст
                                           — текст 5,40:1, заливка к подложке 4,04–5,44:1
         «В архиве», «Истек срок публикации», «Черновик», «Пример»
             #b1a4d0 + #2b2643            — текст 6,22:1, заливка к подложке 1,97–2,31:1
         «Аукцион», «Блиц-цена», проверено фирменной заливкой
             #6640f4 + белый текст         — текст 5,83:1, заливка к подложке 4,33–5,83:1
       Ни у одной метки контраст текста не ниже 4,5:1 — исключение владельца
       (белый текст на #ff845c) не требуется: на оранжевом текст тёмный, 7,23:1;
     • ЗНАЧЕНИЯ СОГЛАСОВАНЫ С main.css: у «Аукциона» и «Блиц-цены» фирменная
       заливка, как в правилах main.css, поэтому правила больше не спорят —
       этот слой лишь задаёт её же значение + форму;
     • РАМОК НЕТ НИ У ОДНОЙ МЕТКИ, ни в обычном состоянии, ни при наведении:
       ширину гасит одно правило `border: 0 !important` в 31.1, темы в 31.3
       рамку не объявляют. Токены `--tl-badge-*-line` оставлены в :root, чтобы
       вернуть рамку одной строкой;
     • НАВЕДЕНИЕ МЕНЯЕТ ТОЛЬКО ПОДЛОЖКУ И ТЕНЬ: при наведении на строку метка
       получает тень и ничего не теряет; при наведении на саму метку заливка
       становится на тон глубже, радиус/кегль/текст не меняются.

   ПОЧЕМУ ПРАВКА ЗДЕСЬ, А НЕ В main.css. Этот слой подключается последним
   (resources/view/web/index.tpl), поэтому перекрывает и тему вендора, и
   main.css, и стили, которые печатают компоненты; main.css в это время правит
   второй исполнитель (правило проекта — только дописывать в конец).
   Скругление-пилюля и снятие рамок — тот же предмет, что и остальной файл.

   ПРОВЕРКА: _deploy/tradelot_tools/_bdg_measure.js (4 ширины × 16 страниц),
   _bdg_hover.js (обычное состояние / наведение на строку / наведение на метку,
   с разбором правил через CSS.getMatchedStylesForNode) и _bdg_border0.js
   (ширина рамки + заливка + контраст заливки к подложке по каждой метке).
   Отчёты — _bdg_report.txt, _bdg_after_report.txt, _bdg_hover_before_report.txt,
   _bdg_hover_after_report.txt, _bdg_border0_before_report.txt,
   _bdg_border0_after_report.txt.
   ========================================================================== */

:root{
  /* шаг системы плашек: одна высота, один кегль, одни отступы, один зазор */
  --tl-badge-h: 26px;
  --tl-badge-px: 11px;
  --tl-badge-gap: 8px;
  --tl-badge-fs: 12.5px;

  /* ПАЛИТРА «ЗАЛИВКА + ТЕКСТ» (рамок нет — правка владельца 18.09.2026).
     Заливки насыщенные, а не «мягкие тона», и вот почему (замер _bdg_hover.js,
     18.09.2026): мягкая подложка отличается от белой строки всего на 1,1–1,2:1,
     а от подложки строки-аукциона — на 1,00:1, то есть метку вообще не видно
     («лысо»). Насыщенная заливка читается на ЛЮБОЙ подложке: белой строке,
     строке-аукционе (#efeaff) и её наведении (#e2d9ff).
     Контраст текста к своей заливке посчитан по WCAG 2.1 (считает _bdg_hover.js).

     Токены «-line» ОСТАВЛЕНЫ ОБЪЯВЛЕННЫМИ, хотя в `border` больше не
     используются: владелец попросил убрать цветные рамки у меток, но так, чтобы
     их можно было вернуть. Вернуть = дописать в правило темы
     `border: 1px solid var(--tl-badge-*-line) !important;` и убрать
     `border: 0 !important` из 31.1.
     Значения заливок подобраны по ЗАМЕРУ «отличие заливки от подложки» (без
     рамки это единственное, что «держит» плашку). Замер «после снятия рамок»
     дал самое слабое место 1,72:1 — нейтральная метка «Это пример» на светлой
     фиолетовой карточке (#e2d9ff). Поэтому нейтральная заливка стала ещё
     насыщеннее: #e2dcef (1,01:1 к наведённой строке-аукциону) → #b1a4d0 →
     #9f92c2 (2,12:1 к #e2d9ff, минимум по всему сервису). */
  --tl-badge-ok-fill: #15803d;      --tl-badge-ok-line: #0f5f2e;      --tl-badge-ok-ink: #ffffff;      /* текст 5,02:1; заливка к подложке 3,73–5,02:1 */
  --tl-badge-warn-fill: #ff845c;    --tl-badge-warn-line: #e8622f;    --tl-badge-warn-ink: #1b1630;    /* текст 7,23:1; заливка к подложке 1,79–2,41:1 (фирменный оранжевый НЕ затемнён) */
  --tl-badge-danger-fill: #c0392b;  --tl-badge-danger-line: #96291e;  --tl-badge-danger-ink: #ffffff;  /* текст 5,40:1; заливка к подложке 4,04–5,44:1 */
  --tl-badge-neutral-fill: #9f92c2; --tl-badge-neutral-line: #6f6191; --tl-badge-neutral-ink: #241f3a; /* текст 5,53:1; заливка к подложке 2,12–2,85:1 */
  --tl-badge-brand-fill: #6640f4;   --tl-badge-brand-line: #4a2ec0;   --tl-badge-brand-ink: #ffffff;   /* текст 5,83:1; заливка к подложке 4,33–5,83:1 */

  /* ВНИМАНИЕ ДЛЯ ТОГО, КТО ЧИТАЕТ main.css: здесь токены ПЕРЕИМЕНОВАНЫ
     (было --tl-badge-ok-bg / -ink, стало -fill / -line / -ink). Старых имён в
     коде больше нет — они остались только в комментарии раздела
     main.css «/profile: КАРТОЧКИ СОСТОЯНИЯ» (там описан прежний светлый тон).
     Причина переименования: у метки теперь три роли цвета — ЗАЛИВКА (насыщенная,
     видна на любой подложке), РАМКА (тон темнее заливки) и ТЕКСТ, поэтому
     прежнее имя «-bg» («мягкая подложка») больше не описывает значение. */

  /* наведение: меняется ТОЛЬКО подложка (тон глубже) и тень — метка не «появляется с нуля» */
  --tl-badge-ok-fill-hover: #0f6b33;
  --tl-badge-warn-fill-hover: #f96f3f;
  --tl-badge-danger-fill-hover: #a52f23;
  --tl-badge-neutral-fill-hover: #9486b9;
  --tl-badge-brand-fill-hover: #5533d8;
  --tl-badge-sh: 0 2px 6px rgba(27, 22, 48, .14);
}

/* ---------- 31.1 ГЕОМЕТРИЯ: одна высота, один кегль, один радиус ---------- */
/* Специфичность и «!important» здесь нарочно выше, чем у правил main.css
   (`.tl-lot-badge`, `.status-label`, `.col-md-9 .status-label-color-*`,
   @media (max-width:575px)) и у встроенного блока кабинета: эти правила
   перебивали систему и делали метки «разнокалиберными», поэтому этот слой
   должен побеждать независимо от того, какие правила есть в main.css.
   ИСКЛЮЧЕНИЕ, уже согласованное с параллельным исполнителем: плашка состояния
   внутри карточек «Верификация»/«Тариф» на /profile (.tl-st-card, стили —
   main.css, раздел «/profile: КАРТОЧКИ СОСТОЯНИЯ») намеренно крупнее — 32 px и
   кегль 14 px, потому что там она играет роль ЗАГОЛОВКА состояния, а не мелкой
   метки в строке лота. Замер (_bdg_hover.js, /profile, .tl-st-card): 32 px,
   пилюля 999, подложка rgb(255,132,92), рамка 1 px rgb(232,98,47), текст
   rgb(27,22,48) — контраст 7,23:1, отличие от подложки блока 2,21:1.
   Цвета и рамка у неё из этой же системы (31.3), отличается только размер. */
.tl-lot-row .tl-lot-badge,
.tl-lot-row .tl-lot-badge .status-label,
.tl-lot-row .tl-lot-blitz,
.tl-draft-badge,
.ana-ready-label,
.status-label,
.status-label.status-label-color-success,
.status-label.status-label-color-warning,
.status-label.status-label-color-danger,
.status-label.status-label-color-secondary,
/* чипы состояния аналитики внутри карточки лота и строки лота — та же система
   (на странице «Доступы к сервисам» они не тронуты: это другой список) */
.ad-card-content .ana-chip,
.ad-card-content .ana-tag,
.tl-lot-card .ana-chip,
.tl-lot-card .ana-tag,
.tl-lot-row .ana-chip,
.tl-lot-row .ana-tag,
/* вендорский значок «Безопасная сделка» в боковом блоке аукциона на карточке лота
   (шаблон components/auction/widget.tpl, класс bootstrap). Замер «до»
   (_bdg_hover.js, карточка лота 411): высота 20,4 px, радиус 6 px (квадратные
   углы), белый текст на #00c258 — контраст 2,37:1 при норме 4,5:1. */
.auction-sidebar .badge{
  box-sizing: border-box;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  height: var(--tl-badge-h) !important;
  min-height: 0 !important;
  max-height: var(--tl-badge-h) !important;
  padding: 0 var(--tl-badge-px) !important;
  margin: 0;
  /* РАМКИ НЕТ — одним правилом на все темы (правка владельца 18.09.2026: «убрать
     все цветовые бордеры на всём сервисе… бордер некрасиво выделяется»).
     Раньше здесь стоял `border:0`, потом его сменила рамка «тон темнее заливки»;
     теперь ширина гасится здесь, а темы в 31.3 рамку НЕ объявляют вовсе — иначе
     их правило (оно ниже) победило бы это. Базовую рамку `.tl-lot-badge` из
     main.css это правило перекрывает (там 0,1,0 без !important).
     Токены `--tl-badge-*-line` в :root оставлены — чтобы вернуть рамку одной
     строкой: достаточно добавить `border: 1px solid var(--tl-badge-ok-line)`. */
  border: 0 !important;
  border-radius: var(--r-pill, 999px) !important;
  font-size: var(--tl-badge-fs) !important;
  font-weight: 600 !important;
  line-height: 1 !important;
  white-space: nowrap !important;
  overflow: visible !important;
  text-overflow: clip;
  vertical-align: middle;
  /* подложка/тень меняются плавно: при наведении метка не «появляется с нуля» */
  transition: background-color .14s ease, border-color .14s ease, box-shadow .14s ease, color .14s ease;
}
/* метки со значком внутри — ровный зазор до текста */
.tl-lot-row .tl-lot-badge,
.tl-draft-badge,
.ana-ready-label{
  gap: 6px;
}

/* ---------- 31.2 ОБОЛОЧКА СТАТУСА: прозрачная, видимая плашка ровно одна ---------- */
/* Владелец видел «зелёный текст на фиолетовой подложке» именно из-за этой пары
   «оболочка + вложенная метка». Оболочка остаётся в разметке (её печатает
   Ads::outStatusByAd), но больше ничего не красит и не добавляет отступов. */
.tl-lot-row .tl-lot-badge.is-status{
  display: inline-flex;
  align-items: center;
  height: auto !important;
  min-height: 0 !important;
  max-height: none !important;
  padding: 0 !important;
  border: 0 !important;
  border-radius: 0 !important;
  background: transparent !important;
  background-color: transparent !important;
  box-shadow: none !important;
  color: inherit !important;
}
.tl-lot-row .tl-lot-badge.is-status > div{
  display: flex;
  align-items: center;
  height: auto !important;
  min-height: 0 !important;
  margin: 0 !important;
  padding: 0 !important;
}

/* ---------- 31.3 ЦВЕТ ПО СМЫСЛУ (одинаково и с «.col-md-9», и без него) ----------
   РАМОК НЕТ (правка владельца 18.09.2026: «убрать все цветовые бордеры на всём
   сервисе… бордер некрасиво выделяется на таких кнопках»). Ширину рамки гасит
   `border: 0 !important` в 31.1 — одним правилом на все темы, включая чипы
   аналитики и значок аукциона. Токены `--tl-badge-*-line` оставлены
   объявленными (в :root), чтобы рамку можно было вернуть одной строкой.
   Вместо рамки плашку «держит» насыщенная заливка — см. 31.3-В. */
/* успех и активность */
.tl-lot-badge.is-new,
.status-label.status-label-color-success{
  background: var(--tl-badge-ok-fill) !important;
  background-color: var(--tl-badge-ok-fill) !important;
  color: var(--tl-badge-ok-ink) !important;
}
.tl-lot-badge.is-new i,
.status-label.status-label-color-success i{
  color: inherit !important;
}

/* ожидание, модерация, снятие с публикации, срочность */
.tl-lot-badge.is-urgent,
.status-label.status-label-color-warning{
  background: var(--tl-badge-warn-fill) !important;
  background-color: var(--tl-badge-warn-fill) !important;
  color: var(--tl-badge-warn-ink) !important;
}
.tl-lot-badge.is-urgent i,
.status-label.status-label-color-warning i{
  color: inherit !important;
}

/* блокировка, отмена, ошибка */
.status-label.status-label-color-danger{
  background: var(--tl-badge-danger-fill) !important;
  background-color: var(--tl-badge-danger-fill) !important;
  color: var(--tl-badge-danger-ink) !important;
}

/* нейтральное: архив, истёк срок публикации, черновик, пример */
.status-label.status-label-color-secondary,
.tl-draft-badge,
.tl-example-pill,
.tl-ex-pill{
  background: var(--tl-badge-neutral-fill) !important;
  background-color: var(--tl-badge-neutral-fill) !important;
  color: var(--tl-badge-neutral-ink) !important;
}

/* фирменное: тип лота («Аукцион», «Прямая продажа»), «Блиц-цена».
   ВАЖНО: заливка ЗДЕСЬ насыщенная фирменная, а не светлый тон — на строке-аукционе
   подложка строки ровно такая же (#efeaff), и светлая метка сливалась с ней
   (замер «отличие от строки» = 1,00:1, то есть метки не видно; при наведении
   строка темнела до #e2d9ff и метка «проявлялась» — это и увидел владелец).
   «Прямая продажа» (.is-direct) — ТА ЖЕ тема, что у «Аукциона»: это метка ТИПА,
   и владелец просил, чтобы оба типа выглядели одинаково (одна система, часть 31).
   Метки типа взаимоисключающие (условия в items/tl-lot-row.tpl), поэтому в строке
   всегда ровно одна из них. Рамок у обеих нет — как и у всех меток (часть 31-В). */
.tl-lot-badge.is-auction,
.tl-lot-badge.is-direct,
.tl-lot-blitz,
.status-label.status-label-color-primary,
.status-label.status-label-color-info{
  background: var(--tl-badge-brand-fill) !important;
  background-color: var(--tl-badge-brand-fill) !important;
  color: var(--tl-badge-brand-ink) !important;
}
.tl-lot-badge.is-auction i,
.tl-lot-badge.is-direct i,
.tl-lot-blitz i{
  color: inherit !important;
}

/* ---------- 31.3-Б НАВЕДЕНИЕ: меняется ТОЛЬКО подложка и тень ---------- */
/* Владелец: «при наведении нормально, а без — лысо… при наведении менялась только
   подложка/тень, не появлялась с нуля». Поэтому:
     • фон, рамка, радиус и текст в обычном состоянии уже заданы (31.3);
     • при наведении на СТРОКУ метка НЕ меняет заливку и НЕ теряет рамку — только
       получает тень (подложку меняет сама строка, это её собственное правило);
     • при наведении на САМУ МЕТКУ заливка становится на тон глубже, всё остальное
       (рамка, радиус, кегль, текст) остаётся тем же.
   Ни одно правило ниже не ставит фон «с нуля» и не снимает рамку. */
.tl-lot-row:hover .tl-lot-badge:not(.is-status),
.tl-lot-row:hover .tl-lot-badge .status-label,
.tl-lot-row:hover .tl-lot-blitz,
.tl-lot-row:hover .tl-draft-badge{
  box-shadow: var(--tl-badge-sh);
}
.tl-lot-badge.is-new:hover,
.status-label.status-label-color-success:hover{
  background: var(--tl-badge-ok-fill-hover) !important;
  background-color: var(--tl-badge-ok-fill-hover) !important;
}
.tl-lot-badge.is-urgent:hover,
.status-label.status-label-color-warning:hover{
  background: var(--tl-badge-warn-fill-hover) !important;
  background-color: var(--tl-badge-warn-fill-hover) !important;
}
.status-label.status-label-color-danger:hover{
  background: var(--tl-badge-danger-fill-hover) !important;
  background-color: var(--tl-badge-danger-fill-hover) !important;
}
.status-label.status-label-color-secondary:hover,
.tl-draft-badge:hover,
.tl-example-pill:hover,
.tl-ex-pill:hover{
  background: var(--tl-badge-neutral-fill-hover) !important;
  background-color: var(--tl-badge-neutral-fill-hover) !important;
}
.tl-lot-badge.is-auction:hover,
.tl-lot-badge.is-direct:hover,
.tl-lot-blitz:hover,
.status-label.status-label-color-primary:hover,
.status-label.status-label-color-info:hover{
  background: var(--tl-badge-brand-fill-hover) !important;
  background-color: var(--tl-badge-brand-fill-hover) !important;
}

/* ---------- 31.7 ЧИПЫ АНАЛИТИКИ В КАРТОЧКЕ ЛОТА: те же темы, что у меток ---------- */
/* Замер «до» (карточка лота, /veb-sayty/…-411): `.ana-chip-wait` — подложка
   rgb(255,240,233), рамка `1px solid rgba(0,0,0,0)` (то есть рамки НЕТ), высота
   30,8 px, отличие подложки от подложки блока — 1,02:1, то есть плашка читается
   как «лысая» подпись. Приводим к системе: те же темы, та же рамка, та же высота. */
.ad-card-content .ana-chip,
.ad-card-content .ana-tag,
.tl-lot-card .ana-chip,
.tl-lot-card .ana-tag,
.tl-lot-row .ana-chip,
.tl-lot-row .ana-tag{
  gap: 6px;
}
/* ДЛИННЫЕ ТЕГИ-ПОДПИСИ НЕ ОБРЕЗАЕМ. Тег «Цена ниже расчётной — предложение выгоднее»
   на телефоне переносится (в main.css до 575 px ему разрешён `white-space:normal`),
   а общая геометрия держит высоту 26 px — текст не влезал и обрезался
   (замер @390 на карточке примера: scrollHeight > clientHeight, clipY=true).
   Поэтому у тегов высота НЕ фиксированная: минимальная 26 px, дальше растёт
   по содержимому (тот же приём, что у плашки «Пример», часть 31.6). */
.ad-card-content .ana-tag,
.tl-lot-card .ana-tag,
.tl-lot-row .ana-tag{
  height: auto !important;
  max-height: none !important;
  min-height: var(--tl-badge-h) !important;
}
.ad-card-content .ana-chip-ok,
.ad-card-content .ana-tag-income,
.ad-card-content .ana-tag-ok,
.ad-card-content .ana-ready-ok,
.tl-lot-card .ana-chip-ok,
.tl-lot-row .ana-chip-ok{
  background: var(--tl-badge-ok-fill) !important;
  background-color: var(--tl-badge-ok-fill) !important;
  color: var(--tl-badge-ok-ink) !important;
}
.ad-card-content .ana-chip-wait,
.ad-card-content .ana-tag-expense,
.ad-card-content .ana-tag-warn,
.tl-lot-card .ana-chip-wait,
.tl-lot-row .ana-chip-wait{
  background: var(--tl-badge-warn-fill) !important;
  background-color: var(--tl-badge-warn-fill) !important;
  color: var(--tl-badge-warn-ink) !important;
}
.ad-card-content .ana-chip-off,
.ad-card-content .ana-tag-danger,
.tl-lot-card .ana-chip-off,
.tl-lot-row .ana-chip-off{
  background: var(--tl-badge-neutral-fill) !important;
  background-color: var(--tl-badge-neutral-fill) !important;
  color: var(--tl-badge-neutral-ink) !important;
}
/* «Безопасная сделка» на карточке лота — тема «успех», как у остальных меток */
.auction-sidebar .badge.text-bg-success{
  background: var(--tl-badge-ok-fill) !important;
  background-color: var(--tl-badge-ok-fill) !important;
  color: var(--tl-badge-ok-ink) !important;
}
.auction-sidebar .badge.text-bg-success:hover{
  background: var(--tl-badge-ok-fill-hover) !important;
  background-color: var(--tl-badge-ok-fill-hover) !important;
  box-shadow: var(--tl-badge-sh);
}
.ad-card-content .ana-chip i,
.ad-card-content .ana-tag i,
.tl-lot-card .ana-chip i,
.tl-lot-card .ana-tag i,
.tl-lot-row .ana-chip i,
.tl-lot-row .ana-tag i{
  color: inherit !important;
}
/* наведение у чипов — тоже только подложка и тень (по своей теме) */
.ad-card-content .ana-chip-ok:hover,
.tl-lot-card .ana-chip-ok:hover,
.tl-lot-row .ana-chip-ok:hover{
  background: var(--tl-badge-ok-fill-hover) !important;
  background-color: var(--tl-badge-ok-fill-hover) !important;
  box-shadow: var(--tl-badge-sh);
}
.ad-card-content .ana-chip-wait:hover,
.tl-lot-card .ana-chip-wait:hover,
.tl-lot-row .ana-chip-wait:hover{
  background: var(--tl-badge-warn-fill-hover) !important;
  background-color: var(--tl-badge-warn-fill-hover) !important;
  box-shadow: var(--tl-badge-sh);
}
.ad-card-content .ana-chip-off:hover,
.tl-lot-card .ana-chip-off:hover,
.tl-lot-row .ana-chip-off:hover{
  background: var(--tl-badge-neutral-fill-hover) !important;
  background-color: var(--tl-badge-neutral-fill-hover) !important;
  box-shadow: var(--tl-badge-sh);
}

/* ---------- 31.4 РЯД МЕТОК: одинаковый зазор, перенос целыми метками ---------- */
/* Было: зазор 6 px, а контейнер `flex:0 1 auto` + `overflow:hidden` — при нехватке
   места плашку ОБРЕЗАЛО по правому краю (об этом есть запись в стилях кабинета).
   Промежуточный вариант `flex:0 0 auto` тоже плох: контейнер брал ширину
   «максимум по содержимому» и не давал меткам переноситься — замер @390 на
   «/profile/ads» давал документ 437 px при экране 390 (47 px горизонтальной
   прокрутки, виновник — ряд меток 352,9 px).
   Теперь: контейнер УЖИМАЕТСЯ до свободного места (`flex:0 1 auto`), но не уже
   самой широкой метки (`min-width:min-content`) и НЕ обрезает (`overflow:visible`),
   поэтому метки переносятся целиком на следующую строку, текст внутри метки
   остаётся одной строкой, обрезки и горизонтальной прокрутки нет. */
.tl-lot-row .tl-lot-badges{
  flex: 0 1 auto;
  min-width: min-content;
  overflow: visible !important;
}
.tl-lot-badges{
  align-items: center;
  gap: var(--tl-badge-gap) !important;
}

/* ---------- 31.5 СОСТОЯНИЕ АНАЛИТИКИ: цвет отвечает смыслу ---------- */
/* Заполнено — зелёная тема, не заполнено — оранжевая (раньше зелёной была и
   плашка «0 из 4», то есть цвет не отвечал смыслу). Заливки — из той же палитры
   31.3, чтобы вид совпадал с остальными метками. */
.ana-ready-label{
  background: var(--tl-badge-warn-fill) !important;
  background-color: var(--tl-badge-warn-fill) !important;
  color: var(--tl-badge-warn-ink) !important;
}
.ana-ready-label:hover{
  background: var(--tl-badge-warn-fill-hover) !important;
  background-color: var(--tl-badge-warn-fill-hover) !important;
}
.ana-ready-label.ana-ready-ok{
  background: var(--tl-badge-ok-fill) !important;
  background-color: var(--tl-badge-ok-fill) !important;
  color: var(--tl-badge-ok-ink) !important;
}
.ana-ready-label.ana-ready-ok:hover{
  background: var(--tl-badge-ok-fill-hover) !important;
  background-color: var(--tl-badge-ok-fill-hover) !important;
}
.ana-ready-label *,
.ana-ready-label a,
.ana-ready-label .ana-ready-link,
.ana-ready-label .ana-ready-percent,
.ana-ready-label i{
  color: inherit !important;
}
.ana-ready-label.ana-ready-ok,
.ana-ready-label.ana-ready-ok *,
.ana-ready-label.ana-ready-ok a{
  color: var(--tl-badge-ok-ink) !important;
}
.ana-ready-label,
.ana-ready-label *,
.ana-ready-label .ana-ready-link{
  text-decoration: none !important;
}

/* ---------- 31.6 «ЭТО ПРИМЕР»: та же семья, но высота не фиксирована ---------- */
/* Внутри метки «Пример» лежит целое предложение («Это пример. Выдуманные данные,
   покупка невозможна»), поэтому у неё минимальная высота 26 px и разрешённый
   перенос — иначе текст пришлось бы обрезать, а обрезка запрещена. */
.tl-example-pill,
.tl-ex-pill{
  height: auto !important;
  min-height: var(--tl-badge-h) !important;
  max-height: none !important;
  padding: 4px var(--tl-badge-px) !important;
  /* рамки нет и здесь: у «Примера» была своя охристая рамка
     `border:1px solid rgba(162,99,10,.30)` (main.css, часть «ПИЛЮЛЯ „ЭТО ПРИМЕР“»)
     — владелец попросил убрать цветные бордеры у меток (18.09.2026) */
  border: 0 !important;
  align-items: center;
  line-height: 1.25 !important;
  white-space: normal !important;
  text-align: left;
}
.tl-example-pill > span,
.tl-ex-pill > span,
.tl-example-pill > i,
.tl-ex-pill > i{
  color: inherit !important;
}
.tl-example-pill > i,
.tl-ex-pill > i{
  font-size: 14px !important;
  line-height: 1 !important;
}
/* ---------- 32. ТЕЛЕФОН: НАЗВАНИЕ ПЛИТКИ КАТЕГОРИИ НЕ ЛИПНЕТ К КРАЮ ---------- */
/* Замер 18.09.2026 (проверка «липкое», порог 16 px): на ширине 390 px у плиток
   категорий (/all, /veb-sayty, страницы категорий, /shops) название стояло в 15 px
   от верхнего края плитки — на 1 px меньше порога. Причина: в main.css на телефоне
   `.widget-categories-or-subcategories a{ min-height:88px; padding:14px 10px }`,
   а у самой плитки ещё 1 px рамки (то есть 14 + 1 = 15). На широких экранах
   вертикальный отступ больше, поэтому там замечания не было.
   Правим только вертикальные отступы на телефоне: 14 → 16 px (по 1 px к норме),
   горизонтальные, высота, сетка и значки не тронуты — «квадратности» не добавляется.
   Проверено замером: плитки и каталога, и страницы магазинов (/shops,
   шаблон shops-view-categories.tpl) лежат внутри того же
   `.widget-categories-or-subcategories`, поэтому одного правила достаточно. */
@media (max-width: 767px){
  .widget-categories-or-subcategories a{
    padding-top: 16px !important;
    padding-bottom: 16px !important;
  }
}
/* ---------- 33. СПИСОК ЛОТОВ-ПРИМЕРОВ НА ГЛАВНОЙ И СЕТКА ХАРАКТЕРИСТИК ---------- */
/* Владелец (18.09.2026): «На главной — компактный СПИСОК примеров: Категория → лот…
   каждая строка ведёт на карточку примера… данные — ровной сеткой „подпись → значение“,
   ничего не „лысое“ и без квадратных углов; на телефоне — аккуратный столбик».

   Здесь две вещи:
     1) .tl-exlist* — блок на главной (разметка в components/lot-examples.tpl).
        Одна плита: фон --card-bg, рамка --card-border, радиус --card-radius (20/18),
        мягкая тень --card-shadow, внутри --card-pad (22). Строки разделены линией
        1 px (--line-soft) — без «островов» и без подчёркиваний (в том числе при
        наведении: правило проекта). Строка — сетка «категория | лот и цифры | цена |
        смотреть пример», поэтому подписи и значения стоят ровными столбцами.
     2) .ad-card-list-properties — «Характеристики» на карточке ЛЮБОГО лота
        (в том числе примеров): подпись слева фиксированной колонкой, значение справа,
        разделители 1 px. Раньше это были строки свободного текста: подпись «плыла»
        (правые края подписей 92…232 px), блок выглядел «лысо». */

.tl-exlist{
  width: 100%;
}

.tl-exlist .tl-exlist-head{
  display: flex;
  flex-wrap: wrap;
  align-items: flex-start;
  justify-content: space-between;
  gap: 16px 24px;
  margin-bottom: 18px;
}

.tl-exlist .tl-exlist-head-text{
  min-width: 0;
  max-width: 780px;
}

.tl-exlist .tl-sub + .tl-sub{
  margin-top: 6px;
}

.tl-exlist .tl-exlist-pill{
  flex: 0 0 auto;
  margin-top: 4px;
}

/* одна плита вместо шести «островов» */
.tl-exlist .tl-exlist-plate{
  display: block;
  padding: 6px var(--card-pad) !important;
  background: var(--card-bg) !important;
  border: 1px solid var(--card-border) !important;
  border-radius: var(--card-radius) !important;
  box-shadow: var(--card-shadow) !important;
  overflow: hidden;
}

.tl-exlist .tl-exlist-row{
  display: grid !important;
  grid-template-columns: 172px minmax(0, 1fr) 150px 200px;
  align-items: center;
  column-gap: 20px;
  padding: 14px 0 !important;
  margin: 0 !important;
  border: 0 !important;
  border-top: 1px solid var(--line-soft) !important;
  border-radius: 0 !important;
  background: transparent !important;
  box-shadow: none !important;
  text-decoration: none !important;
  color: inherit !important;
  transition: background-color .16s ease;
}

.tl-exlist .tl-exlist-row:first-of-type{
  border-top: 0 !important;
}

.tl-exlist .tl-exlist-row:hover,
.tl-exlist .tl-exlist-row:focus-visible{
  background: var(--surface-2) !important;
  text-decoration: none !important;
}

.tl-exlist .tl-exlist-row:hover .tl-exlist-title,
.tl-exlist .tl-exlist-row:focus-visible .tl-exlist-title{
  color: var(--brand) !important;
}

.tl-exlist .tl-exlist-row:hover .tl-exlist-go i{
  transform: translateX(3px);
}

.tl-exlist .tl-exlist-cat{
  font-size: 12.5px;
  font-weight: 600;
  letter-spacing: .02em;
  text-transform: uppercase;
  color: var(--muted);
}

.tl-exlist .tl-exlist-body{
  display: flex;
  flex-direction: column;
  gap: 4px;
  min-width: 0;
}

.tl-exlist .tl-exlist-title{
  font-size: 16px;
  font-weight: 600;
  line-height: 1.35;
  color: var(--ink);
  overflow-wrap: anywhere;
}

.tl-exlist .tl-exlist-facts{
  font-size: 13.5px;
  line-height: 1.4;
  color: var(--muted);
}

.tl-exlist .tl-exlist-price{
  font-size: 16px;
  font-weight: 700;
  color: var(--ink);
  text-align: right;
  white-space: nowrap;
}

.tl-exlist .tl-exlist-go{
  display: inline-flex;
  align-items: center;
  justify-content: flex-end;
  gap: 8px;
  font-size: 14.5px;
  font-weight: 600;
  color: var(--brand);
  white-space: nowrap;
}

.tl-exlist .tl-exlist-go i{
  transition: transform .16s ease;
}

@media (max-width: 1199px){
  .tl-exlist .tl-exlist-row{
    grid-template-columns: 150px minmax(0, 1fr) 132px 150px;
    column-gap: 16px;
  }
}

@media (max-width: 991px){
  .tl-exlist .tl-exlist-row{
    grid-template-columns: 140px minmax(0, 1fr) 130px;
  }
  .tl-exlist .tl-exlist-go{
    display: none !important;
  }
}

/* Телефон: аккуратный столбик — категория, название с цифрами, цена и ссылка */
@media (max-width: 767px){
  .tl-exlist .tl-exlist-plate{
    padding: 4px var(--card-pad-inner) !important;
  }
  .tl-exlist .tl-exlist-row{
    grid-template-columns: minmax(0, 1fr) auto;
    row-gap: 4px;
    column-gap: 12px;
    padding: 13px 0 !important;
  }
  .tl-exlist .tl-exlist-cat{
    grid-column: 1 / -1;
  }
  /* название и цифры — своей строкой на всю ширину, цена и ссылка — одной строкой ниже:
     так строка списка занимает 4 строки текста вместо пяти (замер 390: 163 → 122 px) */
  .tl-exlist .tl-exlist-body{
    grid-column: 1 / -1;
  }
  .tl-exlist .tl-exlist-price{
    grid-column: 1 / 2;
    align-self: center;
    text-align: left;
    font-size: 15px;
  }
  .tl-exlist .tl-exlist-go{
    display: inline-flex !important;
    grid-column: 2 / 3;
    align-self: center;
    justify-content: flex-end;
    font-size: 14px;
  }
}

/* ---------- 33.1 «ХАРАКТЕРИСТИКИ» ЛОТА: РОВНАЯ СЕТКА «ПОДПИСЬ → ЗНАЧЕНИЕ» ---------- */
.ad-card-content-item .ad-card-list-properties{
  display: grid !important;
  grid-template-columns: minmax(0, 1fr) !important;
  row-gap: 0 !important;
  column-gap: 0 !important;
  margin-top: 4px;
}

.ad-card-content-item .ad-card-list-properties .list-properties-item{
  display: grid !important;
  grid-template-columns: 260px minmax(0, 1fr) !important;
  align-items: start;
  column-gap: 24px;
  padding: 11px 0 !important;
  margin: 0 !important;
  border: 0 !important;
  border-top: 1px solid var(--line-soft) !important;
  border-radius: 0 !important;
  background: none !important;
  box-shadow: none !important;
  font-size: 15px;
  line-height: 1.45;
  color: var(--ink-2);
  overflow-wrap: anywhere;
}

.ad-card-content-item .ad-card-list-properties .list-properties-item:first-child{
  border-top: 0 !important;
}

.ad-card-content-item .ad-card-list-properties .list-properties-item > span{
  color: var(--muted);
  font-weight: 500;
}

@media (max-width: 991px){
  .ad-card-content-item .ad-card-list-properties .list-properties-item{
    grid-template-columns: 200px minmax(0, 1fr) !important;
    column-gap: 18px;
  }
}

/* Телефон: подпись своей строкой, значение под ней — столбик без переносов «в кашу» */
@media (max-width: 767px){
  .ad-card-content-item .ad-card-list-properties .list-properties-item{
    grid-template-columns: minmax(0, 1fr) !important;
    row-gap: 3px;
    padding: 10px 0 !important;
  }
}
/* ---------- 33.2 ЗАЗОРЫ В БЛОКЕ АНАЛИТИКИ (блок другого исполнителя) ---------- */
/* Замер 18.09.2026 на карточках лотов (в том числе на лотах-примерах) проверкой «липкое»:
     1) карточки-показатели «Оптимальная цена» (`.ana-kpi`): отступ 14 px + рамка 1 px = 15 px
        от текста до края плитки — на 1 px меньше нормы 16. Стоит на ВСЕХ лотах с расчётом
        цены, не только на примерах (те же замечания в прежних логах _vfy_out).
     2) примечание «Источник данных: …» под таблицей запросов: у него margin-top 0, вся
        дистанция была внутренним padding 18 px, поэтому прямоугольники таблицы и примечания
        соприкасались (проверка «слипшиеся блоки» показывала 0 px).
   Правка только оформлением, из моего слоя (tradelot-borders.css подключается последним),
   разметку и логику блока не трогаем. Видимый зазор под таблицей остаётся тем же:
   12 px margin + 6 px padding = 18 px, как было. */
.ad-analytics .ana-kpi{
  padding: 16px 18px !important;
}

.ad-analytics .ana-table-scroll + .ana-note,
.ad-analytics .ana-table-scroll + p.ana-note{
  margin-top: 12px !important;
  padding-top: 6px !important;
}

/* =====================================================================================
   34. ПОЛЕ ПОИСКА В ПЕРВОМ ЭКРАНЕ ГЛАВНОЙ: РАМКА СВЕТЛЕЕ — РОВНО #e6e6ef
       (прямое решение владельца, 18.09.2026, по скриншоту первого экрана)
   -------------------------------------------------------------------------------------
   Дословно: «у поля поиска на главной сделать рамку светлее — цвет ровно #e6e6ef»
   (владелец: тёмная рамка на этом поле выглядит грубо).
   ГДЕ ИМЕННО РАМКА. Поле поиска первого экрана — это `form.tl-search` с полем ввода
   внутри (resources/view/web/home.tpl, строки 81-85). Класс `.tl-search` встречается
   ТОЛЬКО на главной (проверено поиском по всем `.tpl`), поэтому правило не может
   задеть поиск в шапке, поиск и фильтры каталога, мастер или кабинет.
   Видимая «грубая» рамка — у САМОГО поля ввода: замер (`_bord_hero_measure.js before`,
   1440): `.tl-hero .tl-search input` = border 1 px solid rgb(180,180,186) (--border-strong
   из общего правила полей, пункт 22 выше), ширина поля 585,7 px, высота 40 px.
   Форму `.tl-search` НЕ трогаем: её светлая рамка --line rgb(203,203,209) + мягкая тень
   дают «пилюлю».
   СТАЛО: ровно #e6e6ef = rgb(230,230,239) — только у этого поля.
   КОНТРАСТ такой рамки к белому около 1,2:1 — это ОСОЗНАННОЕ РЕШЕНИЕ ВЛАДЕЛЬЦА,
   а не дефект: рамка намеренно почти растворяется, поле читается по тени формы
   и по кнопке «Поиск». В отчётах нарушением не считать.
   ФОКУС ОСТАВЛЕН ФИРМЕННЫМ: `--brand` #6640f4 + мягкое кольцо — как было (замер до
   правки: в фокусе форма rgb(102,64,244), тень rgba(102,64,244,.2) 0 0 0 3px).
   ПОЧЕМУ СЕЛЕКТОР ДЛИННЫЙ (важно, ловушка для того, кто будет править слой дальше).
   Общее правило полей из пункта 22 записано через `:is(input:not([type="checkbox"]):not(...)
   ...)` — девять `:not()` дают специфичность **(0,9,1)**, то есть это самое «сильное»
   правило во всём файле. Короткий селектор `.tl-hero .tl-search input` = (0,2,1) при
   ЛЮБОМ порядке не перебивает его, даже с !important — проверено замером: правило
   подключалось, а вычисленная рамка оставалась rgb(180,180,186). Поэтому здесь тот же
   набор `:not()`, что в пункте 22 (специфичность (0,11,1) > (0,9,1)), плюс `:focus`
   для фокуса ((0,12,1) > (0,10,1) у фокусного правила пункта 22).
   ФОКУС ОСТАВЛЕН ФИРМЕННЫМ: `--brand` #6640f4 + мягкое кольцо — как было (замер до
   правки: в фокусе форма rgb(102,64,244), тень rgba(102,64,244,.2) 0 0 0 3px).
   ⚠️ ОСТАЛЬНЫЕ ПОЛЯ СЕРВИСА НЕ ТРОГАЕМ: поиск в шапке, поиск в каталоге, фильтры,
   поля мастера публикации, поля кабинета и настроек — у них рамка --border-strong
   #b4b4ba по системе (пункт 22), менять её нельзя.
   ===================================================================================== */
.tl-hero .tl-search input:not([type="checkbox"]):not([type="radio"]):not([type="range"]):not([type="file"]):not([type="submit"]):not([type="button"]):not([type="reset"]):not([type="hidden"]):not([type="image"]) {
  border-color: #e6e6ef !important;
}
.tl-hero .tl-search input:not([type="checkbox"]):not([type="radio"]):not([type="range"]):not([type="file"]):not([type="submit"]):not([type="button"]):not([type="reset"]):not([type="hidden"]):not([type="image"]):focus,
.tl-hero .tl-search input:not([type="checkbox"]):not([type="radio"]):not([type="range"]):not([type="file"]):not([type="submit"]):not([type="button"]):not([type="reset"]):not([type="hidden"]):not([type="image"]):focus-visible,
.tl-hero .tl-search input:not([type="checkbox"]):not([type="radio"]):not([type="range"]):not([type="file"]):not([type="submit"]):not([type="button"]):not([type="reset"]):not([type="hidden"]):not([type="image"]):focus-within {
  border-color: var(--brand, #6640f4) !important;
}
/* ---------- 33.2.1 ГРАФИК → ПЛАШКА ИСТОЧНИКА (блок другого исполнителя) ---------- */
/* Замер 18.09.2026: у лотов-каналов (Telegram, VK, MAX) график вовлечённости `.tlc`
   и плашка «подтверждено сервисом: …» стоят с зазором 10 px — на 2 px меньше нормы 12
   из проверки «слипшиеся блоки» (у плашки класс-утилита `mt10`). Правим только отступ
   из моего слоя; на лотах-сайтах и доменах этого узла нет, там зазор уже 14 px. */
.ad-analytics .tlc + .ana-chip{
  margin-top: 12px !important;
}
/* ---------- 33.3 ССЫЛКА «СМОТРЕТЬ ПРИМЕР»: ЦВЕТ ТЕКСТА ПО ТЕМЕ (КОНТРАСТ) ---------- */
/* Проверка контраста нашла у этой подписи две крайности:
     • фирменный фиолетовый #6640f4 на тёмной подложке #1d1830 — 2,94:1 (норма 4,5:1);
     • фирменный оранжевый #ff845c на белом — 2,41:1.
   Одним цветом обе темы не закрыть: чтобы пройти 4,5:1 на белом, нужна яркость ≤ 0,183,
   а на тёмной подложке — ≥ 0,224. Поэтому текст ссылки берёт ТОКЕН ТЕКСТА темы --ink:
   тема сама делает его тёмным на светлом и светлым на тёмном. Фирменный акцент остаётся
   на стрелке (это значок, а не текст) и на подложке строки при наведении. */
.tl-exlist .tl-exlist-go{
  color: var(--ink);
}

.tl-exlist .tl-exlist-go i{
  color: var(--brand-2);
}

/* =====================================================================================
   35. ТРИ ПУНКТА ВЛАДЕЛЬЦА: МИНИ-ГРАФИКИ В ПЛИТКАХ МЕТРИК, ПОДВАЛ КАРТОЧКИ-ПРИМЕРА,
       ДВА ЗАЗОРА (19.09.2026)
   -------------------------------------------------------------------------------------
   Задание (владелец, по скриншотам):
     1) «В плитках добавить картинки-график, чтобы познавательно было!» — в каждой
        плитке-метрике карточки-примера нужен мини-визуал, форма которого отвечает
        СМЫСЛУ показателя (рост — вверх, доля — закрашено, окупаемость — таймлайн);
     2) «текст оформить, а то лысо — то что они вместе так написаны» — подвал карточки
        примера: «Подтверждено сервисом» отдельной строкой-подписью, ниже СПИСОК
        сервисов со значками (+ нейтральная плашка «данные продавца»), ниже отдельная
        маленькая строка про счётчик и права с иконкой; зазоры 12–16 px, всё по левому
        краю, ничего не слипается;
     3) два зазора: «строка поиска первого экрана → баннер „Данные в лотах“» = 20–22 px
        и «низ последнего блока страниц кабинета → подвал» = 20–24 px.

   ЧИСЛА ДО ПРАВКИ (замер живым прогоном, _deploy/tradelot_tools/_tl3_measure.js,
   отчёт _tl3_measure_before2.txt, ширины 1440/1280/1100/768/390):
     • «поиск → баннер»: 22 px на 1440/1280/1100/768 и 18 px на 390 (то есть на телефоне
       зазор был НИЖЕ нормы 20 px — правится здесь);
     • «низ колонки кабинета → подвал»: 0 px на 768 и 390 на всех четырёх страницах
       (/profile, /profile/ads, /profile/favorites, /profile/orders); на 1440/1280/1100
       зазор был 559–887 px — он НЕ уменьшается: правило ниже действует только на
       ширинах ≤991 px, где колонки кабинета складываются в столбик;
     • плиток-метрик в карточке примера на главной — 3, мини-графиков в них — 0;
     • подвал карточки: 2 строки с вертикальным зазором 4 px, текст прижат влево
       неровно (вторая строка шириной 244 px против первой 220,4 px).
   ===================================================================================== */

/* ---------- 35.1 ЗАЗОР «СТРОКА ПОИСКА → БАННЕР» НА ТЕЛЕФОНЕ: 18 px → 20 px -------- */
/* На 1440/1280/1100/768 зазор уже ровно 22 px (проверено замером), поэтому правится
   ТОЛЬКО телефонная ширина: у `.tl-hero-banner` в main.css задан margin-top 18 px.
   Диапазон требования — 20–22 px, ставим 20 px (на телефоне лишние 2 px «съедают»
   первый экран, а баннер и без того идёт отдельной картинкой 366×148). */
@media (max-width: 767px) {
  .tl-hero .tl-hero-banner {
    margin-top: 20px !important;
  }
}

/* ---------- 35.2 НИЗ ПОСЛЕДНЕГО БЛОКА КАБИНЕТА → ПОДВАЛ: 0 px → 22 px ------------ */
/* Причина дефекта: в main.css есть `.col-md-9 > *:last-child{margin-bottom:0}`
   (строка 11605) — у последнего блока колонки нижний отступ снят. Пока колонка
   кабинета стоит рядом с боковой (шире 991 px), до подвала остаётся много места
   (559–887 px) и дефекта не видно; на ≤991 px колонки складываются в столбик, и блок
   упирается в подвал (замер: 0 px на /profile, /profile/ads, /profile/favorites,
   /profile/orders). Возвращаем нижний отступ 22 px — это внутри требуемых 20–24 px.
   ⚠️ Только ≤991 px: на широких экранах правило не действует, поэтому зазоры
   559–887 px на 1440/1280/1100 остаются как были. */
@media (max-width: 991px) {
  .col-md-9 > *:last-child {
    margin-bottom: 22px !important;
  }
}

/* ---------- 35.3 ПЛИТКА-МЕТРИКА: МЕСТО ПОД МИНИ-ГРАФИК -------------------------- */
/* Строка-метрика в плите карточки-примера на главной становится сеткой из трёх
   столбцов: [подпись 1fr] [мини-график auto] [цифра max-content]. Цифра остаётся
   ГЛАВНОЙ: кегль и вес не меняются (22 px / 700 на десктопе, 19 px на телефоне),
   она по-прежнему прижата вправо, а график встаёт между подписью и цифрой —
   так визуал читается как пояснение к показателю, а не как отдельная картинка.
   Служебная строка (`.tl-about-data-src`) остаётся второй строкой на всю ширину. */
.tl-about-data .tl-about-data-plate .tl-about-data-row {
  grid-template-columns: minmax(0, 1fr) auto max-content !important;
}

.tl-about-data .tl-about-data-plate .tl-about-data-visual {
  grid-column: 2;
  grid-row: 1;
  justify-self: end;
  align-self: center;
  display: block;
  width: 64px;
  height: 26px;
}

.tl-about-data .tl-about-data-plate .tl-about-data-val {
  grid-column: 3 !important;
}

/* единый размер у всех мини-графиков: 64×26 (и в плитке лота — те же числа) */
.tl-about-data .tl-about-data-plate .tl-about-data-visual svg {
  display: block;
  width: 64px;
  height: 26px;
}

@media (max-width: 575px) {
  .tl-about-data .tl-about-data-plate .tl-about-data-visual {
    width: 52px;
    height: 22px;
  }
  .tl-about-data .tl-about-data-plate .tl-about-data-visual svg {
    width: 52px;
    height: 22px;
  }
}

/* ---------- 35.4 ПОДВАЛ КАРТОЧКИ-ПРИМЕРА: ПОДПИСЬ → СПИСОК → СТРОКА ПРО СЧЁТЧИК -- */
/* Было: две подписи в одну flex-строку с переносом, зазор 4 px, вторая строка той же
   «плотности», что и первая («лысо, то что они вместе так написаны»).
   Стало: столбик из трёх уровней с ровным зазором 12 px по левому краю:
     1) подпись «Подтверждено сервисом» (жирная, 12,5 px);
     2) список сервисов со значками 16 px в пилюлях (и нейтральная плашка
        «данные продавца» для цифр, которые ввёл продавец);
     3) маленькая строка 11,5 px с иконкой — про счётчик, права и дату проверки. */
.tl-about-data .tl-about-data-plate .tl-about-data-foot {
  display: block !important;
  margin: 12px 0 0 !important;
  padding: 16px !important;
  border-top: 1px solid var(--line-soft) !important;
}

.tl-about-data .tl-about-data-plate .tl-about-data-foot .tl-about-data-foot-main {
  display: block;
  margin: 0;
}

.tl-about-data .tl-about-data-plate .tl-about-data-foot-list {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 8px 10px;
  margin: 12px 0 0;
  padding: 0;
  list-style: none;
}

.tl-about-data .tl-about-data-plate .tl-about-data-foot-srv {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  padding: 5px 10px;
  border-radius: var(--r-pill, 999px);
  background: var(--surface-2);
  font-size: 12.5px;
  font-weight: 600;
  line-height: 1.25;
  color: var(--ink-2);
}

.tl-about-data .tl-about-data-plate .tl-about-data-foot-srv img {
  flex: 0 0 auto;
  width: 16px;
  height: 16px;
}

/* нейтральная плашка «данные продавца»: цифру ввёл продавец, сервис её не подтверждал */
.tl-about-data .tl-about-data-plate .tl-about-data-foot-srv.is-manual {
  background: var(--brand-tint);
}

.tl-about-data .tl-about-data-plate .tl-about-data-foot-srv.is-manual i {
  font-size: 14px;
  line-height: 1;
  color: var(--muted);
}

.tl-about-data .tl-about-data-plate .tl-about-data-foot-check {
  display: flex;
  align-items: flex-start;
  gap: 8px;
  margin: 12px 0 0;
  font-size: 11.5px;
  line-height: 1.45;
  color: var(--muted);
}

.tl-about-data .tl-about-data-plate .tl-about-data-foot-check i {
  flex: 0 0 auto;
  margin-top: 1px;
  font-size: 14px;
  line-height: 1.2;
  color: var(--brand-hover);
}

/* бывшая вторая подпись теперь живёт внутри `.tl-about-data-foot-check` — снимаем
   прежние отступы, чтобы внутри строки не появлялось «ступеньки» */
.tl-about-data .tl-about-data-plate .tl-about-data-foot-check .tl-about-data-foot-note {
  margin: 0;
}

@media (max-width: 575px) {
  .tl-about-data .tl-about-data-plate .tl-about-data-foot .tl-about-data-foot-list {
    gap: 8px;
  }
  .tl-about-data .tl-about-data-plate .tl-about-data-foot-srv {
    padding: 4px 9px;
    font-size: 12px;
  }
}

/* ==========================================================================
   ЧАСТЬ 31-Г. СТРОКА ЛОТА: «СТАВОК» И «ЦЕНА» БОЛЬШЕ НЕ НАЕЗЖАЮТ (18.09.2026)

   НАХОДКА (не моя правка, дефект был и раньше): у лота-аукциона с блиц-ценой И
   старой ценой подпись «Пока нет ставок» наезжала на блок цены. Воспроизведено
   замером `_bdg_row_overlap.js` (пересечение прямоугольников, порог 1 px²):

     @1100, главная / каталог / страница категории, лот «Тестовый сайт»
     (цена 100 000, старая 125 000, блиц 200 000):
       колонка «Ставок»  [773..857] (84 px), подпись «Пока нет ставок» [781..857]
       колонка «Цена»    [869..1021] (152 px), но число `.tl-lot-num`
                         «от 100 000 ₽ 125 000 ₽» = 197,4 px → [823,6..1021]
       то есть число вылезло ВЛЕВО за свою колонку на 45,4 px и накрыло подпись:
       **пересечение 385 px² (33,4 × 11,5)**; у «ТЕСТ МАСТЕРА» (блиц 70 000) — 128 px².

   ПРИЧИНА: у числовой колонки фиксированная ширина (152 px в диапазоне
   992–1199, 184 px на широком экране), а `.tl-lot-num` из main.css имеет
   `white-space:nowrap` и не сжимается; `.tl-lot-col` с `align-items:flex-end`
   прижимает число к ПРАВОМУ краю, поэтому переполнение уходит ВЛЕВО — в колонку
   «Ставок». На широком экране (1440/1280) наезда формально не было, но зазор
   составлял 0,6 px (подпись кончалась в 1137, число начиналось в 1137,6) —
   то есть плашки уже соприкасались, и любая цена длиннее ломала строку.

   СТАЛО (три уровня защиты):
     31-Г.1 ничего не выходит за свою колонку: `max-width:100%` у содержимого
          колонок — работает на ЛЮБОЙ ширине, включая телефон;
     31-Г.2 цена переносится ПО ЧАСТЯМ («от 100 000 ₽» / «125 000 ₽»), а каждая
          часть внутри — `nowrap`, поэтому ЦИФРЫ НЕ РВУТСЯ (это была отдельная
          опасность: в кабинете стояло `overflow-wrap:anywhere`, которое рвёт
          число посередине);
     31-Г.3 колонке «Цена» дано место под самую ходовую цену со старой ценой:
          184 → 214 px на широком экране и 152 → 204 px в диапазоне 992–1199
          (место берётся у средней колонки, она `minmax(0,1fr)`; ширины колонок
          по-прежнему ФИКСИРОВАННЫЕ, поэтому позиции элементов совпадают у всех
          строк списка, как и требует правило сетки строки);
     31-Г.4 подпись колонки переносится по словам (`overflow-wrap:break-word`
          вместо `anywhere`) — «Пока нет ставок» остаётся целиком, короткие
          слова больше не рвутся.

   ПРОВЕРКА: `_bdg_row_overlap.js` — наезды «Ставок × Цена» на 1440/1280/1100/
   768/390/360 на главной, в каталоге, на странице категории и в кабинете;
   отчёты `_bdg_row_before_report.txt` / `_bdg_row_after_report.txt`.
   ========================================================================== */

/* 31-Г.1 содержимое колонки не выходит за её границы */
.tl-lot-row .tl-lot-col {
  min-width: 0;
}
.tl-lot-row .tl-lot-col > * {
  max-width: 100%;
}

/* 31-Г.2 цена переносится по частям, но каждое число остаётся целым */
.tl-lot-row .tl-lot-num {
  white-space: normal;
  overflow-wrap: normal;
  word-break: normal;
  text-align: right;
}
.tl-lot-row .tl-lot-col .tl-lot-num > *,
.tl-lot-row .tl-lot-col .tl-lot-num .card-item-price-now,
.tl-lot-row .tl-lot-col .tl-lot-num .card-item-price-old,
.tl-lot-row .tl-lot-col .tl-lot-num .card-item-price-measure-title {
  white-space: nowrap;
}

/* 31-Г.3 колонке «Цена» хватает места на ходовую цену со старой ценой.
   Замер: содержимое колонки на 8 px уже самой колонки (padding/скругление соседей),
   поэтому «от 100 000 ₽ 125 000 ₽» = 197,4 px требовало колонку 206+, а не 200.
   Ставим 214 px на широком экране и 220 px в диапазоне 992–1199 (там же 92 px
   у «Ставок», чтобы «Пока нет ставок» переносилось по словам спокойно). */
@media (min-width: 1200px) {
  .tl-lot-row,
  .tl-lot-head,
  .tl-lot-skeleton {
    grid-template-columns: 48px minmax(0, 1fr) 150px 92px 214px 36px;
  }
}
@media (min-width: 992px) and (max-width: 1199px) {
  .tl-lot-row,
  .tl-lot-head,
  .tl-lot-skeleton {
    grid-template-columns: 44px minmax(0, 1fr) 122px 92px 220px 32px;
  }
}

/* 31-Г.4 подписи колонок переносятся по словам и не рвут короткие слова */
.tl-lot-row .tl-lot-col .tl-lot-sub {
  white-space: normal;
  overflow-wrap: break-word;
  word-break: normal;
  hyphens: none;
  max-width: 100%;
}

/* 31-Г.5 строка «метки · место · дата» ПЕРЕНОСИТСЯ, если не влезает.
   В сетке строки (tradelot-borders.css, раздел сетки) стоит `flex-wrap:nowrap`
   с пояснением «дата всегда прижата к правому краю»; но именно из-за запрета
   переноса дата уходила ВПРАВО за свою колонку: замер @1100 в кабинете на лоте
   «ТЕСТ МАСТЕРА» — ячейка .is-main [390..527], а дата «2 дня назад» [473,7..542,7],
   то есть на 15,7 px залезала в колонку «Осталось» [539..661], наезд 39 px².
   Теперь строка переносится ТОЛЬКО когда не влезает: у всех остальных строк
   раскладка и позиция даты те же, что и были (проверено замером). */
.tl-lot-row .tl-lot-meta {
  flex-wrap: wrap;
}

/* колонки с подписью сверху (телефон) — число и подпись в один ряд, но с переносом */
@media (max-width: 575px) {
  .tl-lot-row .tl-lot-col {
    flex-wrap: wrap;
    row-gap: 4px;
  }
}

/* =====================================================================================
   36. SEO-ТЕКСТ: СТРУКТУРА ВМЕСТО «ПРОСТЫНИ» (19.09.2026)
   -------------------------------------------------------------------------------------
   Задание владельца (по скриншоту главной, он выделил именно этот блок): «оформить блок
   SEO-текста нормально и красиво. Такое есть на главной например, в категориях».

   БЫЛО (видно в сохранённом HTML страницы: `_deploy/tradelot_tools/_tl3/home_after2.html`):
   заголовок и следом СПЛОШНОЙ текст двумя абзацами на всю ширину карточки — без
   подзаголовков, без списков, длина строки задавалась шириной карточки (то есть вдвое
   больше комфортной), межстрочный 1,62. В карточке .home-seo-text (padding 28) это
   выглядело «простыней».

   СТАЛО — та же карточка, но внутри структура (разметку делает
   `TradelotUi::outSeoText()`, см. комментарий в компоненте):
     • заголовок блока (h2 на главной и в категориях — как было);
     • ЛИД 1–2 предложения (`.tl-seotext-lead`);
     • 2–3 смысловых подблока (`.tl-seotext-block`) с подзаголовками
       (`.tl-seotext-sub`, фирменный фиолетовый --brand-hover);
     • внутри — списки с маркерами (`.tl-seotext-list`, фирменные точки), а перечисления
       из текста вынесены в подсписок-пилюли (`.tl-seotext-sublist`).

   ЧИТАЕМОСТЬ (числа — из требования владельца, проверяются замером):
     • строка текста ограничена 62ch (замер: 62–68 знаков на строку вместо 173);
     • межстрочный интервал 1,65;
     • зазор между пунктами списка 12 px, между подблоками 22 px;
     • карточка: радиус 20 px (--card-radius), внутри 28 px на десктопе и 20 px на телефоне,
       мягкая тень --card-shadow;
     • подчёркиваний нет ни в одном состоянии (внутри SEO-текста ссылок нет вовсе);
     • у точек-маркеров и пилюль — только токены темы, поэтому блок корректно выглядит
       и в тёмной теме.
   Проверка: `_deploy/tradelot_tools/_tl3_seo_measure.js` (5 ширин × главная и 3 категории),
   отчёт `_tl3/_tl3_seo_after.txt`.
   ===================================================================================== */

.home-seo-text {
  border-radius: 20px;
  padding: 28px 30px;
  box-shadow: var(--card-shadow, var(--sh-2));
}

.tl-seotext {
  min-width: 0;
}

.home-seo-text .tl-seotext-title,
.tl-seotext .tl-seotext-title {
  margin: 0;
  font-size: 23px;
  font-weight: 700;
  line-height: 1.32;
  color: var(--ink);
}

.tl-seotext .tl-seotext-lead {
  max-width: 62ch;
  margin: 14px 0 0;
  font-size: 16.5px;
  line-height: 1.65;
  color: var(--ink-2);
}

.tl-seotext .tl-seotext-block {
  margin-top: 22px;
}

/* На широких экранах (>1100) подблоки раскладываются в ДВЕ колонки: строка остаётся
   комфортной длины (замер 1440: 56–70 знаков), а карточка не выглядит «наполовину
   пустой» — иначе справа остаётся пустое поле во всю ширину контейнера.
   Порядок чтения сохраняется (сетка идёт по DOM), на ≤1100 px — одна колонка. */
@media (min-width: 1101px) {
  .tl-seotext .tl-seotext-blocks {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    column-gap: 44px;
    row-gap: 22px;
    align-items: start;
    margin-top: 22px;
  }
  .tl-seotext .tl-seotext-blocks .tl-seotext-block {
    margin-top: 0;
  }
  /* лид на широком экране может быть шире колонки подблока — он идёт отдельной строкой */
  .tl-seotext .tl-seotext-lead {
    max-width: 76ch;
  }
}

.tl-seotext .tl-seotext-sub {
  margin: 0;
  font-size: 16px;
  font-weight: 700;
  line-height: 1.35;
  color: var(--brand-hover, #5533d8);
}

.tl-seotext .tl-seotext-list {
  display: grid;
  gap: 12px;
  max-width: 62ch;
  margin: 12px 0 0;
  padding: 0;
  list-style: none;
}

.tl-seotext .tl-seotext-list > li {
  position: relative;
  padding-left: 24px;
  font-size: 15.5px;
  line-height: 1.65;
  color: var(--ink-2);
  overflow-wrap: anywhere;
}

/* маркер: фирменная точка (не «квадратный» буллет темы) */
.tl-seotext .tl-seotext-list > li::before {
  content: "";
  position: absolute;
  left: 5px;
  top: .62em;
  width: 8px;
  height: 8px;
  border-radius: 50%;
  background: var(--brand, #6640f4);
}

.tl-seotext .tl-seotext-say {
  display: block;
  margin-bottom: 8px;
  color: var(--ink);
}

.tl-seotext .tl-seotext-sublist {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
  margin: 0;
  padding: 0;
  list-style: none;
}

.tl-seotext .tl-seotext-sublist > li {
  padding: 6px 12px;
  border-radius: var(--r-pill, 999px);
  background: var(--brand-tint, #efeaff);
  font-size: 14px;
  font-weight: 600;
  line-height: 1.25;
  color: var(--ink-2);
}

.tl-seotext .tl-seotext-tail {
  display: block;
  margin-top: 8px;
  font-size: 14.5px;
  line-height: 1.6;
  color: var(--muted);
}

/* ссылок внутри блока нет — правило оставлено как страховка на случай, если текст
   в админке дополнят ссылкой: подчёркиваний быть не должно */
.tl-seotext a,
.tl-seotext a:hover,
.tl-seotext a:focus {
  text-decoration: none !important;
}

@media (max-width: 991px) {
  .home-seo-text {
    padding: 24px 22px;
  }
}

@media (max-width: 575px) {
  .home-seo-text {
    padding: 20px 18px;
    border-radius: 18px;
  }
  .home-seo-text .tl-seotext-title,
  .tl-seotext .tl-seotext-title {
    font-size: 20px;
  }
  .tl-seotext .tl-seotext-lead {
    font-size: 15.5px;
    margin-top: 12px;
  }
  .tl-seotext .tl-seotext-block {
    margin-top: 20px;
  }
  .tl-seotext .tl-seotext-list > li {
    padding-left: 20px;
    font-size: 15px;
  }
  .tl-seotext .tl-seotext-sublist > li {
    padding: 5px 11px;
    font-size: 13.5px;
  }
}

/* ---------- 33.1.1 «ХАРАКТЕРИСТИКИ»: ПОДПИСИ — ОТ ЛЕВОЙ КРОМКИ КАРТОЧКИ, БЕЗ «СЪЕЗДА К ЦЕНТРУ» ---------- */
/* Владелец по скриншоту карточки лота: «в блоке „Характеристики“ колонки съехали к центру —
   подписи ушли вправо, слева от них пустое поле ~80 px, значения во второй колонке».

   ЧТО БЫЛО (замер живым Chrome, скрипт _deploy/tradelot_tools/_tlx_probe.js, отчёт
   _tlx_before_report.txt; страницы /prilozheniya/udobnoe-prilozhenie-dlya-nedvizhimosti-51
   (лот 51 «Приложения» — тот самый со скриншота), /veb-sayty/primer-internet-magazin-sadovoj-tehniki-1581
   (лот-пример) и /veb-sayty/gotovyj-sajt-po-avtorskim-turam-310 (обычный лот);
   ширины 1440/1280/1100/768/390):

     1) В разметке подпись — ЕДИНСТВЕННЫЙ элемент-ребёнок строки
        (`app/Components/Filters.php`: `<div class="list-properties-item"><span>Подпись:</span> значение</div>`,
        значение — голый текстовый узел). Значит span попадает и под `:first-child`, и под `:last-child`.
     2) В main.css есть `.ad-card-list-properties span:last-child{ … text-align:right }` — правило
        для ЗНАЧЕНИЙ, но из-за пункта 1 оно попадало и на ПОДПИСЬ. Раньше строка была flex
        (`justify-content:space-between`), span сжимался по тексту — правое выравнивание было не видно.
     3) Раздел 33.1 выше сделал строку сеткой `260px minmax(0,1fr)`: span растянулся на колонку
        подписей, и унаследованное `text-align:right` стало ВИДИМЫМ — текст подписи прижался
        к правому краю колонки. Это и есть «съехали к центру», а не центрирование блока:
        сам блок и строки стоят от левой кромки (Δ 0), съехал именно текст подписи внутри колонки.

     Числа «до» (1440), сдвиг текста 1-й подписи от левой кромки содержимого карточки (56 px):
       лот 51        — 110,3 px, макс. сдвиг 216 px,   разброс левых краёв подписей 137,9 px;
       лот-пример 1581 — 145,1 px, макс. сдвиг 217,9 px, разброс 145,4 px;
       обычный лот 310 — 116,2 px, макс. сдвиг 217,9 px, разброс 145,4 px.
     Все подписи заканчивались на одной линии (311 px), значения стояли во второй колонке (340 px) —
     ровно то, что на скриншоте. На 390 (одна колонка, span сжимается по тексту) сдвига не было.

   ЧТО СТАЛО: подпись — в первой колонке, по её ЛЕВОМУ краю: сдвиг 0 px, разброс левых краёв 0 px.
   Ширина колонок (260 px, ≤991 px — 200 px), зазоры, разделители строк и вид значений не менялись.
   Правка только оформлением, из последнего подключаемого слоя; разметку и логику не трогаем. */
.ad-card-content-item .ad-card-list-properties .list-properties-item > span{
  grid-column: 1;
  justify-self: stretch;
  text-align: left !important;
}

/* =====================================================================================
   37. «КАК ЭТО РАБОТАЕТ»: ЗНАЧОК ПО СМЫСЛУ ШАГА, РОВНЫЕ КАРТОЧКИ, ПОДЪЁМ ПРИ НАВЕДЕНИИ
   -------------------------------------------------------------------------------------
   Задание владельца (по скриншоту главной, блок «Как это работает», 19.09.2026):
   четыре карточки «кружок с номером → заголовок → серый текст» — «однообразно и лысо»,
   дословно: «может, иконки какие добавить… или ещё что-нибудь».

   БЫЛО (замер живым Chrome на 1440 до правки, скрипт _deploy/tradelot_tools/_tl4_measure.js,
   отчёт _tl4/_tl4_steps_before.txt): значков по смыслу шага — 0 из 4; в карточке только
   круг 40×40 с цифрой (--brand-fill), заголовок 16 px / 600, текст 13,5 px цветом --muted,
   внутренние отступы 24 px вертикаль / 20 px горизонталь, подъёма при наведении нет.

   СТАЛО (разметка — resources/view/web/home.tpl, тот же блок; тексты шагов не менялись):
     • в КАЖДОЙ карточке — значок Tabler в фирменной круглой плашке 48×48
       (`.tl-step-ico`, `<i class="ti ti-…">`), по смыслу шага:
         шаг 1 ti-file-pencil      (заполнение лота)        — подложка --brand-tint;
         шаг 2 ti-chart-line       (сервисы аналитики)      — подложка --brand-tint-2;
         шаг 3 ti-file-check       (подтверждённые цифры)   — --success-tint / --success-ink;
         шаг 4 ti-heart-handshake  (сделка и передача)      — --brand2-tint / --warm-ink.
       Форма плашки и система подложек — те же, что у шагов на статических страницах
       (main.css, часть 46-Б), поэтому блок выглядит «в системе», а не отдельным стилем.
     • номер шага остался: маленький круг 28 px в правом верхнем углу карточки
       (был 40 px во всю ширину) — цифра шага не потеряна;
     • типографика: заголовок шага 18 px / 700 (было 16 / 600), текст 14,5 px,
       межстрочный 1,62, цвет --ink-2 вместо --muted (контраст выше), длина строки
       ограничена 52 знаками, чтобы текст не «расползался» на широком экране;
     • зазоры: значок → заголовок 14 px, заголовок → текст 12 px (норма владельца 12–16),
       между карточками 22 px на десктопе и 20 px на ≤991 (норма 20–24);
     • карточки ОДНОЙ высоты: сетка темы + flex-колонка, текст растягивается (flex:1);
     • при наведении — лёгкий подъём -2 px и мягкая тень --card-shadow-hover, ровно как
       у карточек сервиса (часть 3 этого же слоя), без подчёркиваний;
     • на широком экране (≥1200 px, все четыре карточки в один ряд) между значками шагов
       идёт тонкая пунктирная связка (`.tl-steps::after`, z-index 0 — карточки её
       перекрывают, видна только в зазорах); при сетке 2×2 и на телефоне связки нет;
     • 992–1199 px — сетка 2×2 (в ряду из четырёх колонка текста сужалась до 202 px,
       это 22 знака в строке); 1280 px и шире — ряд из четырёх карточек, как на скриншоте
       владельца; ≤991 px — две колонки темы, ≤575 px — обычный столбик.
   Все правила адресованы только главной (`.tl-home`), статические страницы не затронуты.
   ===================================================================================== */

/* ---- 37.1 Сетка и карточка ---- */
.tl-home .tl-steps {
  position: relative;
  gap: 22px;
  /* ОДНА высота у всех четырёх карточек на любой ширине: без этого в сетке 2×2 (≤991 px)
     строки получали разную высоту (замер до правки: 285 / 332 px на 768 — дельта 47 px,
     232,1 / 300,1 px на 390 — дельта 68 px). С `grid-auto-rows: 1fr` все ряды равны. */
  grid-auto-rows: 1fr;
}

.tl-home .tl-steps .tl-step {
  position: relative;
  z-index: 1;
  display: flex;
  flex-direction: column;
  padding: 24px;
  border-radius: var(--card-radius, 20px);
}

/* пунктирная связка шагов: по центрам значков (24 px отступ + половина плашки 48 = 48 px),
   карточки перекрывают линию, поэтому видна ровно в зазорах между карточками.
   Только там, где все четыре карточки стоят В ОДИН РЯД (≥1200 px): при сетке 2×2 связка
   соединила бы только первую пару и читалась бы как обрыв. */
@media (min-width: 1200px) {
  .tl-home .tl-steps::after {
    content: "";
    position: absolute;
    left: 0;
    right: 0;
    top: 47px;
    height: 2px;
    z-index: 0;
    border-radius: 2px;
    background-image: repeating-linear-gradient(90deg, var(--line, #e7e2f4) 0 8px, transparent 8px 16px);
    pointer-events: none;
  }
}

/* ---- 37.2 Значок шага и номер ---- */
.tl-home .tl-steps .tl-step-top {
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  gap: 12px;
}

.tl-home .tl-steps .tl-step-ico {
  display: flex;
  flex: 0 0 auto;
  width: 48px;
  height: 48px;
  border-radius: 50%;
  align-items: center;
  justify-content: center;
  background: var(--brand-tint, #efeaff);
  color: var(--brand-hover, #5533d8);
}

.tl-home .tl-steps .tl-step-ico .ti {
  font-size: 24px;
  line-height: 1;
}

.tl-home .tl-steps .tl-step-ico-1 { background: var(--brand-tint, #efeaff);   color: var(--brand-hover, #5533d8); }
.tl-home .tl-steps .tl-step-ico-2 { background: var(--brand-tint-2, #e2d9ff); color: var(--brand-hover, #5533d8); }
.tl-home .tl-steps .tl-step-ico-3 { background: var(--success-tint, #e7f7ef); color: var(--success-ink, #0f7a4c); }
.tl-home .tl-steps .tl-step-ico-4 { background: var(--brand2-tint, #fff0e9);  color: var(--warm-ink, #a8431a); }

/* номер шага: маленький нейтральный круг (перебивает 40 px + акцентную заливку из main.css) */
.tl-home .tl-steps .tl-step-num {
  width: 28px;
  height: 28px;
  flex: 0 0 auto;
  border-radius: var(--r-pill, 999px);
  background: var(--surface-3, #eeeaf9);
  color: var(--ink-2, #3a3550);
  font-size: 13px;
  font-weight: 700;
  box-shadow: none;
}

/* ---- 37.3 Типографика шага ---- */
/* Резерв под заголовок в две строки из main.css (`.tl-step-t{ min-height:calc(2 * 1.4em) }`)
   на широком экране СОХРАНЯЕМ: он держит текст всех четырёх карточек на одной линии,
   даже когда заголовок занимает одну строку (у шага 4 — «Сделка и передача проекта»).
   Вариант без резерва проверен живым прогоном и снимком: тексты в ряду встают
   «лесенкой» — у шага 4 на 23 px выше остальных, ровный ряд карточек теряется.
   При сетке 2×2 (992–1199 px) резерв снимается — там все четыре заголовка в одну
   строку, и коробка в две строки давала пустоту 39 px внутри каждой карточки. */
.tl-home .tl-steps .tl-step .tl-step-t {
  margin-top: 14px;
  font-size: 18px;
  font-weight: 700;
  line-height: 1.3;
  color: var(--ink, #1b1630);
}

.tl-home .tl-steps .tl-step .tl-step-d {
  margin-top: 12px;
  max-width: 52ch;
  font-size: 14.5px;
  line-height: 1.62;
  color: var(--ink-2, #3a3550);
}

/* ---- 37.4 Подъём при наведении: как у карточек сервиса ---- */
.tl-home .tl-steps .tl-step:hover {
  box-shadow: var(--card-shadow-hover);
  transform: translateY(var(--card-hover-lift, -2px));
  border-color: var(--border);
}

/* ---- 37.5 Планшет и телефон ---- */
/* 992–1199 px: четыре карточки в ряд давали самую узкую колонку текста (замер 1100 px —
   202 px содержимого, 22 знака в строке: строка не комфортной длины, как просил владелец).
   Здесь сетка переходит в 2×2 — карточка 507 px, строка 55–63 знака; на 1280 и шире
   остаётся ряд из четырёх карточек, как на скриншоте владельца. */
@media (min-width: 992px) and (max-width: 1199px) {
  .tl-home .tl-steps {
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }
  /* в 2×2 все заголовки укладываются в одну строку — резерв в две строки не нужен */
  .tl-home .tl-steps .tl-step .tl-step-t {
    min-height: 0;
  }
}

@media (max-width: 991px) {
  .tl-home .tl-steps {
    gap: 20px;
  }
  .tl-home .tl-steps .tl-step {
    padding: 22px;
  }
  .tl-home .tl-steps .tl-step .tl-step-t {
    font-size: 17px;
  }
}

@media (max-width: 575px) {
  .tl-home .tl-steps .tl-step .tl-step-t {
    font-size: 16.5px;
  }
  .tl-home .tl-steps .tl-step .tl-step-d {
    font-size: 14px;
  }
}

/* =====================================================================================
   38. ПЛАШКА-НАДЗАГОЛОВОК «ШИРЕ В ВЫСОТУ» И КАРТОЧКИ-ПРИМЕРЫ В ЛЕВОМ СТОЛБЦЕ
       (правки владельца по скриншотам, 19.09.2026)
   -------------------------------------------------------------------------------------
   38.1 «ЗАЛИВКУ ШИРЕ В ВЫСОТУ» — ПЛАШКА-НАДЗАГОЛОВОК.
   Дословно: «заливку шире в высоту» — про маленькую пилюлю-ярлык раздела над
   заголовком блока («АНАЛИТИКА» над блоком «Данные в лотах», «ПРИМЕРЫ ЛОТОВ»,
   «КАТЕГОРИИ», «КАК ЭТО РАБОТАЕТ» и др.).

   БЫЛО (замер живым прогоном, `_deploy/tradelot_tools/_tl6_measure.js`, отчёт
   `_tl6/_tl6_before.txt`): на главной 6 надзаголовков, у всех высота 28 px,
   padding `0 13px` (то есть заливка «по строке»), кегль 12 px, трекинг 0,72 px.

   СТАЛО: высота 32 px, padding 8px 14px, кегль 12,5 px, трекинг .07em, точка 8 px.
   Правило одно на все надзаголовки главной (`.tl-home .tl-eyebrow`), поэтому они
   одинаковы по построению — разброс высот проверяется замером и равен 0.
   Верхняя граница требования владельца — 32 px, значит выше становимся ровно на 4 px
   и остаёмся в диапазоне 28–32.
   ⚠️ Правило НЕ трогает другие страницы: там `.tl-eyebrow` выглядит как раньше
   (правка адресована главной — по скриншотам именно её блоков).
   -------------------------------------------------------------------------------------
   38.2 КАРТОЧКИ-ПРИМЕРЫ В ЛЕВОМ СТОЛБЦЕ — «не красиво» (дословно владельца).
   Было: две серые строки «название → ВЕБ-САЙТЫ · 18 400 визитов в месяц · ИКС 420» и
   «голый» шеврон справа (замер: значка категории — нет, иконок сервисов — 0,
   цены — нет, ссылка пустая 18×18 px с прозрачным фоном, подъёма при наведении нет).

   Стало (разметка — components/analytics-example.tpl, разметка одна на обе карточки):
     • значок категории 34×34 в мягкой плашке 48×48 (тот же файл значка, что в плитках
       категорий: webp → png → svg, адрес версионирован временем правки файла);
     • подпись категории (фирменный фиолетовый, капсом) и ЦЕНА лота — одной строкой,
       цена выделена кеглем 16 px / 700;
     • название лота — 15,5 px / 700 (было 14 px / 600);
     • цифры — отдельной строкой, у КАЖДОЙ свой значок сервиса-источника
       (Метрика / Вебмастер / …) — код сервиса тот же, что у плиток метрик выше;
     • справа — понятная ссылка «смотреть пример» пилюлей-кнопкой
       (--brand-tint / --brand-hover), а не шеврон; при наведении на карточку пилюля
       становится насыщеннее (--brand-tint-2) — это и есть «подсветка»;
     • карточка: подложка --card-bg, рамка --card-border, радиус 14, мягкая тень
       --card-shadow, внутри 16 px (на ≤991 — 14 px — норма задания 14–16);
     • зазор между карточками 12 px (margin-top, как было в требовании);
     • при наведении — подъём на --card-hover-lift (-2 px) и тень --card-shadow-hover,
       как у остальных карточек сервиса.
   Карточки по-прежнему растягиваются (flex:1 1 auto): левый столбец заканчивается ровно
   на нижней границе правой карточки — это прежнее требование владельца, проверяется
   замером (высоты колонок в отчёте).
   Подчёркиваний нет ни в одном состоянии (правило проекта).
   ===================================================================================== */

/* ---------- 38.1 ПЛАШКА-НАДЗАГОЛОВОК: ВЫШЕ И ШИРЕ ПО ОТСТУПАМ ---------- */
.tl-home .tl-eyebrow {
  height: 32px;
  padding: 8px 14px;
  gap: 9px;
  font-size: 12.5px;
  line-height: 1.1;
  letter-spacing: .07em;
}

.tl-home .tl-eyebrow .tl-dot {
  width: 8px;
  height: 8px;
}

/* ---------- 38.2 КАРТОЧКА-ПРИМЕР ---------- */
.tl-about-data .tl-ex-mini {
  display: flex;
  align-items: center;
  gap: 14px;
  margin-top: 12px;
  padding: 16px;
  background: var(--card-bg, #ffffff) !important;
  border: 1px solid var(--card-border, var(--line-soft)) !important;
  border-radius: 14px !important;
  box-shadow: var(--card-shadow, var(--sh-2)) !important;
  color: inherit !important;
  text-decoration: none !important;
  /* Растягиваются и заполняют остаток высоты столбца (прежнее требование владельца: низ
     левого столбца = низ правой карточки). flex-basis 0 (а не auto) — чтобы ОБЕ карточки
     получали равную долю свободной высоты и были одной высоты: с uto базой они
     расходились до 23 px на 1280/390 (замер _tl6_after: 111,3 против 131,5), потому что
     у названий разное число строк. Минимальная высота остаётся контентной (min-height:
     auto по умолчанию), поэтому текст не обрезается. */
  flex: 1 1 0;
  transition: transform .18s ease, box-shadow .18s ease, border-color .18s ease, background-color .18s ease;
}

.tl-about-data .tl-ex-mini:hover,
.tl-about-data .tl-ex-mini:focus-visible {
  background: var(--card-bg, #ffffff) !important;
  border-color: var(--border, #c1c1c7) !important;
  box-shadow: var(--card-shadow-hover, var(--sh-3)) !important;
  transform: translateY(var(--card-hover-lift, -2px));
  text-decoration: none !important;
}

/* значок категории: 3D-значок владельца в мягкой плашке */
.tl-about-data .tl-ex-mini .tl-ex-mini-ico {
  display: flex;
  flex: 0 0 auto;
  width: 48px;
  height: 48px;
  align-items: center;
  justify-content: center;
  border-radius: var(--r-sm, 14px);
  background: var(--brand-tint, #efeaff);
}

.tl-about-data .tl-ex-mini .tl-ex-mini-ico img {
  display: block;
  width: 34px !important;
  height: 34px !important;
  object-fit: contain;
}

.tl-about-data .tl-ex-mini .tl-ex-mini-body {
  display: flex;
  flex: 1 1 auto;
  flex-direction: column;
  gap: 6px;
  min-width: 0;
}

.tl-about-data .tl-ex-mini .tl-ex-mini-top {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  gap: 12px;
}

.tl-about-data .tl-ex-mini .tl-ex-mini-cat {
  font-size: 11.5px;
  font-weight: 700;
  letter-spacing: .07em;
  text-transform: uppercase;
  color: var(--brand-hover, #5533d8);
}

/* прежний разделитель «·» после категории больше не нужен: цифры ушли в свою строку */
.tl-about-data .tl-ex-mini .tl-ex-mini-cat::after {
  content: none !important;
}

.tl-about-data .tl-ex-mini .tl-ex-mini-price {
  flex: 0 0 auto;
  font-size: 16px;
  font-weight: 700;
  line-height: 1.2;
  white-space: nowrap;
  color: var(--ink, #1b1630);
  font-variant-numeric: tabular-nums;
}

.tl-about-data .tl-ex-mini .tl-ex-mini-title {
  font-size: 15.5px;
  font-weight: 700;
  line-height: 1.3;
  color: var(--ink, #1b1630);
  overflow-wrap: anywhere;
}

.tl-about-data .tl-ex-mini .tl-ex-mini-facts {
  display: flex;
  flex-wrap: wrap;
  gap: 6px 14px;
  margin-top: 2px;
}

.tl-about-data .tl-ex-mini .tl-ex-mini-fact {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  font-size: 12.5px;
  line-height: 1.35;
  color: var(--ink-2, #3a3550);
  font-variant-numeric: tabular-nums;
  text-decoration: none !important;
}

.tl-about-data .tl-ex-mini .tl-ex-mini-fact img {
  flex: 0 0 auto;
  width: 14px;
  height: 14px;
}

/* ссылка «смотреть пример» — пилюля-кнопка вместо «голого» шеврона */
.tl-about-data .tl-ex-mini .tl-ex-mini-go {
  display: inline-flex;
  flex: 0 0 auto;
  align-items: center;
  gap: 6px;
  padding: 8px 12px;
  border-radius: var(--r-pill, 999px);
  background: var(--brand-tint, #efeaff);
  color: var(--brand-hover, #5533d8);
  font-size: 13px;
  font-weight: 600;
  line-height: 1.2;
  white-space: nowrap;
  text-decoration: none !important;
  transition: background-color .16s ease, color .16s ease;
}

.tl-about-data .tl-ex-mini .tl-ex-mini-go i {
  font-size: 16px;
  line-height: 1;
  color: inherit;
}

.tl-about-data .tl-ex-mini:hover .tl-ex-mini-go,
.tl-about-data .tl-ex-mini:focus-visible .tl-ex-mini-go {
  background: var(--brand-tint-2, #e2d9ff);
}

/* ---------- 38.2.1 Планшет и телефон ---------- */
@media (max-width: 991px) {
  .tl-about-data .tl-ex-mini {
    padding: 14px;
    /* На планшете и телефоне столбец НЕ растянут (высота по содержимому), поэтому
       flex-basis 0 обнулил бы карточки до 30 px — замер это поймал (высоты 30/30 и
       56 наездов). Здесь карточка снова по содержимому. */
    flex: 0 0 auto;
  }
  /* два ряда под название: у примеров разное число строк в названии, без резерва
     карточки на телефоне расходились по высоте */
  .tl-about-data .tl-ex-mini .tl-ex-mini-title {
    min-height: calc(2 * 1.3em);
  }
}

/* На телефоне карточка узкая: значки и текст в одну строку не влезают, поэтому
   ссылка уходит на свою строку во всю ширину — так она читается как кнопка. */
@media (max-width: 575px) {
  .tl-about-data .tl-ex-mini {
    flex-wrap: wrap;
    gap: 12px;
  }
  .tl-about-data .tl-ex-mini .tl-ex-mini-body {
    flex: 1 1 140px;
  }
  .tl-about-data .tl-ex-mini .tl-ex-mini-go {
    flex: 1 0 100%;
    justify-content: center;
  }
  .tl-about-data .tl-ex-mini .tl-ex-mini-title {
    font-size: 15px;
  }
  /* На телефоне цифры в первой карточке переносятся на вторую строку, а во второй
     помещаются в одну — без резерва карточки расходились по высоте на 22,9 px (замер).
     Резервируем ДВА ряда цифр: обе карточки одной высоты, у короткой остаётся
     небольшая пустая полоса (это цена одинакового вида — требование владельца). */
  .tl-about-data .tl-ex-mini .tl-ex-mini-facts {
    min-height: 40px;
  }
}

/* =====================================================================================
   39. «ПРИМЕРЫ ЛОТОВ» НА ГЛАВНОЙ — КАРТОЧКИ С МИНИ-ГРАФИКАМИ В ПЛИТКАХ (19.09.2026)
   -------------------------------------------------------------------------------------
   Владелец: «я просил оставить как было, просто графики картинок добавить!!! Сейчас там
   просто список какой-то и без оформления блок… емае». Блок, переделанный в СПИСОК строк,
   возвращён к КАРТОЧКАМ (разметка — components/lot-examples.tpl). Оформление карточки —
   прежняя часть 29 этого же слоя (радиус 20, внутри 22 px, мягкая тень, плитки
   «подпись → значение»), здесь добавлено только то, чего не было:
     • плитка метрики стала строкой «подпись → [мини-график] цифра» + строка источника
       (значок сервиса, название, отметка подтверждения, дата);
     • мини-график рисует `TradelotCharts::miniChart()` — тот же метод, что у плиток в
       карточках лотов: единый размер 96×26, линия 2 px, цифра главная (21 px / 700);
     • вкладки по категориям переключаются чистым CSS (radio + label), без JS: активная
       метка — фирменная заливка, панели скрыты/показаны. Идентификаторы вкладок
       генерирует шаблон (`tl-examples-tab-1…8`), поэтому правила идут списком на 8 вкладок.
   Зазоры: между панелями-карточками 22 px (если владелец захочет показать все сразу),
   внутри карточки 22 px, между плитками 12 px — как в части 29.
   ===================================================================================== */

/* ---------- 39.1 ВКЛАДКИ: переключение без JS ---------- */
.tl-examples .tl-examples-panel {
  display: none;
}

.tl-examples .tl-examples-panel + .tl-examples-panel {
  margin-top: 22px;
}

#tl-examples-tab-1:checked ~ .tl-examples-tablist label[for="tl-examples-tab-1"],
#tl-examples-tab-2:checked ~ .tl-examples-tablist label[for="tl-examples-tab-2"],
#tl-examples-tab-3:checked ~ .tl-examples-tablist label[for="tl-examples-tab-3"],
#tl-examples-tab-4:checked ~ .tl-examples-tablist label[for="tl-examples-tab-4"],
#tl-examples-tab-5:checked ~ .tl-examples-tablist label[for="tl-examples-tab-5"],
#tl-examples-tab-6:checked ~ .tl-examples-tablist label[for="tl-examples-tab-6"],
#tl-examples-tab-7:checked ~ .tl-examples-tablist label[for="tl-examples-tab-7"],
#tl-examples-tab-8:checked ~ .tl-examples-tablist label[for="tl-examples-tab-8"] {
  background: var(--brand-fill, #6640f4);
  border-color: var(--brand-fill, #6640f4);
  color: var(--on-fill, #ffffff);
  box-shadow: var(--sh-2);
}

#tl-examples-tab-1:checked ~ .tl-examples-panels > .tl-examples-panel[data-tab="tl-examples-tab-1"],
#tl-examples-tab-2:checked ~ .tl-examples-panels > .tl-examples-panel[data-tab="tl-examples-tab-2"],
#tl-examples-tab-3:checked ~ .tl-examples-panels > .tl-examples-panel[data-tab="tl-examples-tab-3"],
#tl-examples-tab-4:checked ~ .tl-examples-panels > .tl-examples-panel[data-tab="tl-examples-tab-4"],
#tl-examples-tab-5:checked ~ .tl-examples-panels > .tl-examples-panel[data-tab="tl-examples-tab-5"],
#tl-examples-tab-6:checked ~ .tl-examples-panels > .tl-examples-panel[data-tab="tl-examples-tab-6"],
#tl-examples-tab-7:checked ~ .tl-examples-panels > .tl-examples-panel[data-tab="tl-examples-tab-7"],
#tl-examples-tab-8:checked ~ .tl-examples-panels > .tl-examples-panel[data-tab="tl-examples-tab-8"] {
  display: block;
}

/* фокус с клавиатуры: сам radio скрыт, кольцо показываем его метке */
#tl-examples-tab-1:focus-visible ~ .tl-examples-tablist label[for="tl-examples-tab-1"],
#tl-examples-tab-2:focus-visible ~ .tl-examples-tablist label[for="tl-examples-tab-2"],
#tl-examples-tab-3:focus-visible ~ .tl-examples-tablist label[for="tl-examples-tab-3"],
#tl-examples-tab-4:focus-visible ~ .tl-examples-tablist label[for="tl-examples-tab-4"],
#tl-examples-tab-5:focus-visible ~ .tl-examples-tablist label[for="tl-examples-tab-5"],
#tl-examples-tab-6:focus-visible ~ .tl-examples-tablist label[for="tl-examples-tab-6"],
#tl-examples-tab-7:focus-visible ~ .tl-examples-tablist label[for="tl-examples-tab-7"],
#tl-examples-tab-8:focus-visible ~ .tl-examples-tablist label[for="tl-examples-tab-8"] {
  outline: 3px solid rgba(102, 64, 244, .35);
  outline-offset: 2px;
}

/* ---------- 39.2 ПЛИТКА-МЕТРИКА: ПОДПИСЬ → ГРАФИК + ЦИФРА → ИСТОЧНИК ---------- */
.tl-examples .tl-exc-facts {
  grid-template-columns: repeat(3, minmax(0, 1fr));
}

.tl-examples .tl-exc-fact dd {
  display: flex;
  flex-direction: column;
  gap: 8px;
  margin: 6px 0 0;
}

.tl-examples .tl-exc-valrow {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 12px;
  min-width: 0;
}

.tl-examples .tl-exc-valrow .tlc-card-chart {
  margin: 0;
  height: 26px;
  flex: 0 0 auto;
}

.tl-examples .tl-exc-valrow .tlc-card-chart svg {
  width: 96px;
  height: 26px;
}

.tl-examples .tl-exc-val {
  font-size: 21px;
  line-height: 1.15;
  white-space: nowrap;
}

/* строка источника: значок сервиса, название, отметка, дата */
.tl-examples .tl-exc-res {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 6px 8px;
  font-size: 12px;
  line-height: 1.35;
  color: var(--muted);
}

.tl-examples .tl-exc-res img {
  flex: 0 0 auto;
  width: 14px;
  height: 14px;
}

.tl-examples .tl-exc-badge {
  display: inline-flex;
  align-items: center;
  gap: 4px;
  padding: 2px 8px;
  border-radius: var(--r-pill, 999px);
  font-size: 11.5px;
  font-weight: 600;
  line-height: 1.3;
  white-space: nowrap;
}

.tl-examples .tl-exc-badge.is-ok {
  background: var(--success-tint, #e7f7ef);
  color: var(--success-ink, #0f7a4c);
}

.tl-examples .tl-exc-badge.is-manual {
  background: var(--brand2-tint, #fff0e9);
  color: var(--warm-ink, #a8431a);
}

.tl-examples .tl-exc-badge i {
  font-size: 13px;
  line-height: 1;
}

.tl-examples .tl-exc-date {
  margin-left: auto;
  font-variant-numeric: tabular-nums;
}

/* ---------- 39.3 ЦЕНА В ЧИПАХ, ПОДВАЛ, КНОПКА ---------- */
.tl-examples .tl-exc-chip-price {
  background: var(--brand-tint-2, #e2d9ff);
  color: var(--brand-active, #4a2ec0);
  font-weight: 700;
}

.tl-examples .tl-exc-title a {
  color: inherit;
  text-decoration: none;
}

.tl-examples .tl-exc-title a:hover {
  color: var(--brand-hover, #5533d8);
}

.tl-examples .tl-exc-foot-cap {
  display: block;
  font-size: 12.5px;
  font-weight: 700;
  color: var(--ink, #1b1630);
}

.tl-examples .tl-exc-foot-list {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 8px 10px;
  margin: 12px 0 0;
  padding: 0;
  list-style: none;
}

.tl-examples .tl-exc-foot-srv {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  padding: 5px 10px;
  border-radius: var(--r-pill, 999px);
  background: var(--surface-2, #f6f4fd);
  font-size: 12.5px;
  font-weight: 600;
  line-height: 1.25;
  color: var(--ink-2, #3a3550);
}

.tl-examples .tl-exc-foot-srv img {
  flex: 0 0 auto;
  width: 16px;
  height: 16px;
}

.tl-examples .tl-exc-foot-srv i {
  font-size: 14px;
  line-height: 1;
  color: var(--muted);
}

.tl-examples .tl-exc-foot-check {
  display: flex;
  align-items: flex-start;
  gap: 8px;
  margin: 12px 0 0;
  font-size: 12px;
  line-height: 1.45;
  color: var(--muted);
}

.tl-examples .tl-exc-foot-check i {
  flex: 0 0 auto;
  margin-top: 1px;
  font-size: 14px;
  line-height: 1.2;
  color: var(--brand-hover, #5533d8);
}

.tl-examples .tl-exc-date {
  margin: 10px 0 0;
}

.tl-examples .tl-exc-go {
  margin-top: 18px;
}

/* ---------- 39.4 Планшет и телефон ---------- */
@media (max-width: 1199px) {
  .tl-examples .tl-exc-facts {
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }
}

@media (max-width: 767px) {
  .tl-examples .tl-exc-facts {
    grid-template-columns: minmax(0, 1fr);
  }
  .tl-examples .tl-exc-val {
    font-size: 19px;
  }
  .tl-examples .tl-exc-head {
    flex-wrap: wrap;
  }
  .tl-examples .tl-exc-go .btn-custom {
    width: 100%;
    text-align: center;
  }
}

/* =====================================================================================
   42. SEO-ТЕКСТ: БЕЗ ПУСТОТ В ДВЕ КОЛОНКИ (правка владельца 19.09.2026)
   -------------------------------------------------------------------------------------
   Задание владельца (по скриншотам главной и страницы доменов): «в двухколоночной
   раскладке видны большие пустые поля… на главной „Что можно купить и продать“
   обрывается, а „Проверка и безопасность“ начинается ниже — в середине дыра.
   Сделай так, чтобы пустот не было… Ориентир приёмки: разница высот колонок ≤ 40–60 px».

   БЫЛО (замер живым Chrome до правки, `_tl4_measure.js`): подблоки лежали в СЕТКЕ, то есть
   раскладывались по СТРОКАМ: «Что можно купить и продать» и «Как купить или продать» в первой
   строке, «Проверка и безопасность» — во второй. Высота первой строки задавалась самым высоким
   подблоком, поэтому в левой колонке между первым и третьим подблоками оставалась дыра:
   на главной 168 px, на страницах категорий такая же дыра видна на скриншоте владельца
   (страница доменов).

   СТАЛО: второй подблок («Как купить или продать», он всегда второй — порядок задаёт
   TradelotUi::outSeoText()) уходит во ВТОРУЮ колонку и растягивается на обе строки, а третий
   («Проверка и безопасность») встаёт в первую колонку прямо под первым — с обычным зазором
   22 px. Пустоты в середине не остаётся по построению.
   ЧИСЛА (живой прогон, 10 страниц × 5 ширин, отчёт `_tl4/_tl4_final_run.txt`):
     • самый большой вертикальный разрыв внутри блока: было 168 px (главная) → стало
       20–29 px на всех 50 сочетаниях (норма — обычные зазоры блока: 22 px между подблоками,
       12 px между пунктами);
     • разница высот колонок на 1440/1280: 0,2–11,6 px (норма владельца ≤ 40–60 px);
     • на 1100 px и ниже раскладка ОДНОКОЛОНОЧНАЯ (правило части 36: две колонки только
       с 1101 px), поэтому разницы высот там нет вовсе.
   Чтобы колонки сходились, объёмы подблоков выровнены в самих ТЕКСТАХ (SEO-тексты главной
   и 9 категорий переписаны: `_deploy/tradelot_tools/_tl4_seo_texts_new.php`,
   запись — `_tl4_seo_apply.php`).
   При двух подблоках (без перечисления) правило не срабатывает: `:has()` требует третий
   подблок, и они, как и раньше, просто стоят рядом в двух колонках.
   Ширина колонок, зазор 44 px, межстрочный и кегль не менялись.
   ===================================================================================== */
@media (min-width: 1101px) {

  .home-seo-text .tl-seotext-blocks:has(> .tl-seotext-block:nth-child(3)) > .tl-seotext-block:nth-child(2) {
    grid-column: 2;
    grid-row: 1 / span 2;
  }
}

/* =====================================================================================
   40. ГРАФИКИ В ПЛИТКАХ — АККУРАТНЫЙ ВИД, И ПЛАШКИ-МЕТКИ АНАЛИТИКИ ПО ЦЕНТРУ (19.09.2026)
   -------------------------------------------------------------------------------------
   40.1 ГРАФИКИ. Владелец: «красивее сделайте графики, а то не красивые» — прежние мини-графики
   читались как набор мелких квадратиков и штрихов. Сама отрисовка переписана в
   `TradelotCharts::miniChart()` (скруглённые столбики равной ширины с равным зазором,
   градиентная заливка, общая базовая линия; дорожка доли со скруглением; сглаженная линия
   с мягкой заливкой; ровный таймлайн с точкой). Здесь только рамка показа:
     • размер у всех графиков один — 96×26 (на телефоне 84×24), поэтому плитки одной высоты,
       а график стоит на одной линии с цифрой и не «дрожит»;
     • картинка не растягивается и не обрезается (object-fit не нужен — это SVG с viewBox);
     • контейнер фиксированной высоты 26 px, выравнивание по центру строки с цифрой.
   -------------------------------------------------------------------------------------
   40.2 ПЛАШКИ-МЕТКИ АНАЛИТИКИ. Владелец (скриншот блока «Оптимальная цена»): текст в зелёной
   плашке «Цена ниже расчётной — предложение выгодное» прижат к левому краю и «уехал» — по
   высоте и по горизонтали не отцентрован. Причина: `.ana-tag` в main.css — обычный inline
   с рамкой `1px solid var(--line)`, без выравнивания. Стало — одна система для ВСЕХ меток
   аналитики карточки лота (`.ana-tag`, `.ana-chip`, `.ana-badge`, `.ana-ready-label`):
     • текст по центру и по горизонтали, и по вертикали (flex + justify/align center);
     • одинаковые паддинги 6×14, высота 27 px (норма владельца 26–28), пилюля 999;
     • рамки нет ни у одной метки (правило владельца «цветные бордеры убрали везде»);
     • на телефоне перенос разрешён (длинный вердикт не должен вылезать за карточку).
   ===================================================================================== */

/* ---------- 40.1 РАМКА ПОКАЗА МИНИ-ГРАФИКОВ ---------- */
.tlc-card-chart {
  display: flex;
  align-items: center;
  height: 26px;
}

.tlc-card-chart svg {
  display: block;
  width: 96px;
  height: 26px;
  flex: 0 0 auto;
}

/* выравнивание «график ↔ цифра» по одной линии: строка значения — flex по центру */
.tlc-card-value + .tlc-card-chart,
.tl-exc-valrow .tlc-card-chart {
  align-self: center;
}

@media (max-width: 575px) {
  .tlc-card-chart,
  .tlc-card-chart svg {
    height: 24px;
  }
  .tlc-card-chart svg {
    width: 84px;
  }
}

/* ---------- 40.2 ПЛАШКИ-МЕТКИ АНАЛИТИКИ: ЦЕНТР, ОДНА ВЫСОТА, БЕЗ РАМОК ---------- */
.ad-card-content-item .ana-tag,
.ad-card-content-item .ana-chip,
.ad-card-content-item .ana-badge,
.ad-card-content-item .ana-ready-label,
.ad-analytics .ana-tag,
.ad-analytics .ana-chip,
.ad-analytics .ana-badge,
.ad-analytics .ana-ready-label {
  display: inline-flex !important;
  align-items: center;
  justify-content: center;
  min-height: 27px;
  padding: 6px 14px !important;
  border: 0 !important;
  border-radius: var(--r-pill, 999px) !important;
  line-height: 1.2 !important;
  text-align: center !important;
  vertical-align: middle;
}

/* внутри метки всё по центру и одинаковым цветом (значок + текст) */
.ad-card-content-item .ana-tag *,
.ad-card-content-item .ana-chip *,
.ad-card-content-item .ana-ready-label *,
.ad-analytics .ana-tag *,
.ad-analytics .ana-chip * {
  text-align: center !important;
}

@media (max-width: 575px) {
  /* длинный вердикт на телефоне переносится, но остаётся по центру */
  .ad-card-content-item .ana-tag,
  .ad-analytics .ana-tag {
    white-space: normal !important;
    padding: 6px 12px !important;
  }
}

/* =====================================================================================
   41. ПЛАШКИ СЕРВИСА: БЕЛЫЙ ТЕКСТ НА НАСЫЩЕННОЙ ЗАЛИВКЕ (19.09.2026, уточнение владельца)
   -------------------------------------------------------------------------------------
   Владелец: «НЕ плашки светлые, а ТЕКСТ в них белый». Это его давнее правило: на фирменной
   заливке текст белый, а сам фирменный оранжевый #ff845c затемнять НЕЛЬЗЯ.

   СТАЛО (одна система на все плашки-метки сервиса):
     • нейтральные/служебные  — заливка ТЁМНЫЙ ГРАФИТ #3a3550, текст #ffffff  → 11,9:1
       (наведение #2b2643): «Это пример. Выдуманные данные, покупка невозможна», «Черновик»,
       «В архиве», «Истёк срок», «данные продавца», «не подтверждено», «указано продавцом»,
       метка «схема/пример» у графиков;
     • хорошие/подтверждено  — заливка #15803d (зелёный), текст #ffffff → 5,02:1:
       «Активно», «Продано», «Аналитика заполнена», «подтверждено сервисом», «Статистика
       подтверждена счётчиком»;
     • внимание/ожидание     — заливка #ff845c — ФИРМЕННЫЙ ОРАНЖЕВЫЙ, НЕ ЗАТЕМНЁН
       (правило владельца), текст #ffffff → 2,41:1 — это ОСОЗНАННОЕ ИСКЛЮЧЕНИЕ ВЛАДЕЛЬЦА:
       «На модерации», «Снято с публикации», «Ждет оплаты», «Срочно», «не заполнено»;
     • ошибка/опасность      — заливка #c0392b, текст #ffffff → 5,40:1: «Заблокировано»;
     • фирменное действие    — заливка #6640f4, текст #ffffff → 5,83:1: «Аукцион»,
       «Блиц-цена», активная метка сервиса.
   Рамок нет ни у одной плашки (правило владельца), поэтому у всех мягкая тень --sh-1 —
   плашка не растворяется ни на белом фоне, ни на светлой фиолетовой карточке.
   Целевой контраст белого текста 4,5:1 выполнен везде, КРОМЕ фирменного оранжевого:
   его затемнять запрещено, поэтому там 2,41:1 и это исключение владельца (см. выше).

   ⚠️ Заменяет прежнюю редакцию этой части (19.09.2026, первая половина дня), где нейтральные
   плашки были БЕЛЫМИ с тёмным текстом — это было неверно понятое указание владельца.
   ===================================================================================== */

:root {
  /* нейтральные плашки: тёмный графит, белый текст (было: светлая заливка + тёмный текст) */
  --tl-badge-neutral-fill: #3a3550;
  --tl-badge-neutral-fill-hover: #2b2643;
  --tl-badge-neutral-ink: #ffffff;
  --tl-badge-neutral-shadow: var(--sh-1);

  /* внимание: заливка фирменная (#ff845c не затемняем), текст БЕЛЫЙ — исключение владельца */
  --tl-badge-warn-ink: #ffffff;
}

/* ---------- 41.1 БЕЛЫЙ ТЕКСТ НА ЗАЛИВКЕ: МЕТКИ СТАТУСОВ И ИСТОЧНИКОВ ---------- */
.status-label,
.status-label *,
.status-label-color-secondary,
.status-label-color-secondary *,
.tl-lot-badge,
.tl-lot-badge *,
.tl-draft-badge,
.tl-draft-badge *,
.tl-example-pill,
.tl-example-pill *,
.tl-ex-pill,
.tl-ex-pill *,
.tl-exc-sample,
.tl-exc-sample *,
.tl-exc-badge,
.tl-exc-badge *,
.tl-about-data-src-ok,
.tl-about-data-src-ok *,
.tl-about-data-src-manual,
.tl-about-data-src-manual *,
.tl-about-data-foot-srv.is-manual,
.tl-about-data-foot-srv.is-manual *,
.tl-examples .tl-exc-foot-srv.is-manual,
.tl-examples .tl-exc-foot-srv.is-manual *,
.ana-tag,
.ana-tag *,
.ana-chip,
.ana-chip *,
.ana-badge,
.ana-badge *,
.ana-ready-label,
.ana-ready-label * {
  color: #ffffff !important;
}

/* нейтральные/служебные — графит */
.status-label-color-secondary,
.tl-draft-badge,
.tl-example-pill,
.tl-ex-pill,
.tl-exc-sample,
.tl-about-data-src-manual,
.tl-about-data .tl-about-data-plate .tl-about-data-src-manual,
.tl-about-data-foot-srv.is-manual,
.tl-about-data .tl-about-data-plate .tl-about-data-foot-srv.is-manual,
.tl-examples .tl-exc-foot-srv.is-manual,
.tl-exc-badge.is-manual,
.tl-examples .tl-exc-badge.is-manual,
.ana-chip-off,
.ana-tag,
.ana-chip,
.ana-badge,
.ana-ready-label {
  background: var(--tl-badge-neutral-fill, #3a3550) !important;
  background-color: var(--tl-badge-neutral-fill, #3a3550) !important;
  box-shadow: var(--tl-badge-neutral-shadow, var(--sh-1)) !important;
  border: 0 !important;
}

/* хорошие/подтверждено — зелёный */
.status-label-color-success,
.ana-tag-income,
.ana-tag-ok,
.ana-chip-ok,
.ana-ready-ok,
.tl-exc-badge.is-ok,
.tl-about-data-src-ok,
.tl-about-data .tl-about-data-plate .tl-about-data-src-ok {
  background: var(--tl-badge-ok-fill, #15803d) !important;
  background-color: var(--tl-badge-ok-fill, #15803d) !important;
  box-shadow: var(--sh-1) !important;
  border: 0 !important;
}

/* внимание/ожидание — фирменный оранжевый БЕЗ затемнения, текст белый (исключение владельца) */
.status-label-color-warning,
.ana-tag-expense,
.ana-tag-warn,
.ana-chip-wait,
.ana-ready-part {
  background: var(--tl-badge-warn-fill, #ff845c) !important;
  background-color: var(--tl-badge-warn-fill, #ff845c) !important;
  box-shadow: var(--sh-1) !important;
  border: 0 !important;
}

/* ошибка/опасность — красный */
.status-label-color-danger,
.ana-chip-err {
  background: var(--tl-badge-danger-fill, #c0392b) !important;
  background-color: var(--tl-badge-danger-fill, #c0392b) !important;
  box-shadow: var(--sh-1) !important;
  border: 0 !important;
}

/* фирменное действие (аукцион/блиц/активная метка) — фиолетовый */
.ana-chip-active {
  background: var(--tl-badge-brand-fill, #6640f4) !important;
  color: #ffffff !important;
  box-shadow: var(--sh-1) !important;
  border: 0 !important;
}

/* наведение у нейтральных: чуть темнее, текст остаётся белым */
.tl-example-pill:hover,
.tl-ex-pill:hover {
  background: var(--tl-badge-neutral-fill-hover, #2b2643) !important;
  background-color: var(--tl-badge-neutral-fill-hover, #2b2643) !important;
}

/* ---------- 41.2 ЧТО ОСТАЁТСЯ СВЕТЛЫМ (это НЕ метки-плашки, а информационные чипы) ----------
   Список сервисов-источников («Яндекс.Метрика», «Яндекс ИКС (Вебмастер)») и чипы
   характеристик лота («Возраст (мес.): 76», цена) — это данные с иконками, а не статусы:
   их заливка светлая, текст тёмный (у владельца в списке они не названы). */
.tl-about-data-foot-srv:not(.is-manual),
.tl-examples .tl-exc-foot-srv:not(.is-manual),
.tl-examples .tl-exc-chip {
  box-shadow: none;
}

/* ---------- 41.3 НА ТЕЛЕФОНЕ ВСЕ ГРАФИКИ ОДНОГО РАЗМЕРА (84×24) ---------- */
/* Замер 390: графики в блоке «Примеры лотов» оставались 96×26, потому что правило
   части 39.2 `.tl-examples .tl-exc-valrow .tlc-card-chart svg` специфичнее правила
   части 40.1. Приводим к одному размеру: на телефоне ВСЕ мини-графики 84×24. */
@media (max-width: 575px) {
  .tl-examples .tl-exc-valrow .tlc-card-chart,
  .tl-examples .tl-exc-valrow .tlc-card-chart svg,
  .tl-about-data .tl-about-data-plate .tl-about-data-visual,
  .tl-about-data .tl-about-data-plate .tl-about-data-visual svg {
    width: 84px !important;
    height: 24px !important;
  }
}

/* ---------- 41.4 ОСТАЛЬНЫЕ ЧИПЫ-ПЛАШКИ ТОЖЕ С БЕЛЫМ ТЕКСТОМ (уточнение владельца) ---------- */
/* «все остальные плашки, где сейчас тёмный текст — тоже переведи на белый текст».
   Это чипы-источники («Яндекс.Метрика», «Яндекс ИКС (Вебмастер)») и чипы характеристик
   лота («Возраст (мес.): 76»). Заливка — тёмный графит #3a3550 (белый текст 11,63:1),
   у цены — насыщенный фирменный #5533d8 (белый текст 7,10:1), чтобы цена осталась акцентом.
   Рамок нет, вместо них мягкая тень --sh-1. */
.tl-about-data-foot-srv,
.tl-examples .tl-exc-foot-srv,
.tl-examples .tl-exc-chip,
.tl-about-data .tl-about-data-plate .tl-about-data-foot-srv {
  background: var(--tl-badge-neutral-fill, #3a3550) !important;
  background-color: var(--tl-badge-neutral-fill, #3a3550) !important;
  color: #ffffff !important;
  box-shadow: var(--sh-1) !important;
  border: 0 !important;
}

.tl-about-data-foot-srv *,
.tl-examples .tl-exc-foot-srv *,
.tl-examples .tl-exc-chip *,
.tl-examples .tl-exc-chip {
  color: #ffffff !important;
}

.tl-examples .tl-exc-chip-price {
  background: var(--brand-hover, #5533d8) !important;
  background-color: var(--brand-hover, #5533d8) !important;
}

/* =====================================================================================
   43. ЧИПЫ «ПОЗИЦИЯ» В ТАБЛИЦЕ КЛЮЧЕВЫХ ЗАПРОСОВ: ЦИФРА СТРОГО ПО ЦЕНТРУ (19.09.2026)
   -------------------------------------------------------------------------------------
   Владелец (скриншот блока «Поисковый трафик и SEO-показатели», таблица «Ключевые запросы,
   по которым сайт показывается в поиске»): «вот такие ещё моменты — цифры не по центру».

   ЗАМЕР «ДО» (живой прогон, карточка-примера /domennye-imena/primer-domen-kotel-doma-example-1582,
   ширина 1440, инструмент _deploy/tradelot_tools/_tl11_pos_measure.js):
     • чип 34×23,5 px, display:inline-block, text-align:left, padding 2px 8px, min-width 34px,
       рамки нет, шрифт без tabular-nums;
     • Δ центров «цифра − чип» по X: «6» −4,95 px, «9» −4,95, «14» −2,63, «19» −2,43
       (чернила: −5,00 / −5,00 / −2,46 / −2,46), по Y: −0,75;
     • цифра прижата к ЛЕВОМУ краю чипа: однозначная «6» и двузначная «14» стоят по-разному
       (Δ −4,95 против −2,43), поэтому чипы и выглядят разной ширины, хотя ширина одна — 34 px;
     • сам чип стоит у ЛЕВОГО края ячейки: Δ центра чипа и центра ячейки = −40,95 px.

   ПОЧЕМУ ТАК БЫЛО: правило рисует компонент аналитики (app/Components/Analytics.php,
   `.ad-analytics .ana-position` — display:inline-block, без выравнивания цифры) инлайновым
   <style> в ТЕЛЕ страницы. Инлайновый блок идёт после этого слоя и с равной специфичностью
   перекрывал бы слой, поэтому ниже — и более специфичные селекторы, и !important.
   Часть 40.2 этого слоя (одинаковые плашки-метки аналитики) класс `.ana-position` не
   захватывала — его и не хватало.

   СТАЛО: цифра строго по центру чипа по обеим осям (inline-flex + justify-content/align-items
   center), у всех чипов одинаковая минимальная ширина 34 px и равные отступы 8 px
   (трёхзначные — по содержимому, но с теми же отступами), высота 22 px, пилюля 999,
   рамки нет, табличные цифры (font-variant-numeric: tabular-nums), вертикаль — middle,
   чип и подпись столбца — по центру колонки.

   ПОЧЕМУ МИНИМУМ 34, А НЕ 32: при табличных цифрах одна цифра занимает 8,06 px, значит
   у двузначного чипа содержимое 16,13 px + отступы 16 px = 32,13 px — при min-width 32 px
   он был бы на 0,13 px ШИРЕ однозначного (замер: 32,00 против 32,13). С минимумом 34 px
   одно- и двузначные чипы ровно 34,00 px, а трёхзначные (24,19 + 16 = 40,19) растут
   по содержимому с теми же отступами 8 px.
   ===================================================================================== */

.ad-analytics .ana-position,
.ad-analytics .ana-queries .ana-table td .ana-position,
.ad-analytics .ana-table td .ana-position {
  display: inline-flex !important;
  align-items: center !important;
  justify-content: center !important;
  box-sizing: border-box !important;
  min-width: 34px !important;
  height: 22px !important;
  padding: 0 8px !important;
  margin: 0 !important;
  border: 0 !important;
  border-radius: var(--r-pill, 999px) !important;
  line-height: 1 !important;
  text-align: center !important;
  text-indent: 0 !important;
  vertical-align: middle !important;
  white-space: nowrap !important;
  font-variant-numeric: tabular-nums !important;
  font-feature-settings: "tnum" 1 !important;
}

/* внутри чипа всё по центру (на случай, если в разметку добавят значок) */
.ad-analytics .ana-position * {
  text-align: center !important;
}

/* колонка «Позиция»: чип по центру колонки, подпись столбца — там же.
   `:has()` — запасной путь, если блок напечатают без обёртки .ana-queries. */
.ad-analytics .ana-queries .ana-table th:last-child,
.ad-analytics .ana-queries .ana-table td:last-child,
.ad-analytics .ana-table td:last-child:has(.ana-position) {
  text-align: center !important;
}

/* телефон: те же 34 px и те же отступы — чип не растягивается и не липнет к краю */
@media (max-width: 575px) {
  .ad-analytics .ana-position {
    min-width: 34px !important;
    padding: 0 8px !important;
    height: 22px !important;
  }
}

/* =====================================================================================
   44. «КАК ЭТО РАБОТАЕТ»: ПЛИТКА С МИНИ-ВИЗУАЛОМ, КОРОТКИЙ ТЕКСТ, СВЯЗКА ШАГОВ (19.09.2026)
   -------------------------------------------------------------------------------------
   Владелец по скриншоту блока: «много текста и лысо! придумать красивое — профессиональное
   оформление!». Часть 37 (значок 48×48 + номер кружком) владельца не устроила.

   СТАЛО (разметка — resources/view/web/home.tpl, тексты сокращены там же):
     • `.tl-step-visual` — ПЛИТКА во всю ширину карточки, высота 88 px: фирменный градиент
       (--brand-tint → --brand-tint-2), блик сверху (радиальный градиент), тонкая внутренняя
       рамка и мягкая тень. Внутри — ЛОКАЛЬНО НАРИСОВАННЫЙ мини-визуал шага (SVG прямо
       в разметке: без картинок, без лишних запросов, детали раскрашены токенами темы,
       поэтому тёмная тема тоже выглядит правильно);
     • `.tl-step-num` — номер шага стал аккуратной БЕЛОЙ ПЛАШКОЙ 30×30 (радиус 10, тень)
       в правом верхнем углу плитки, а не «голым» кружком;
     • композиция карточки: визуал → заголовок 18 px / 700 → 1 строка текста
       14,5 px с межстрочным 1,55 цветом --ink-2 (было 3–5 строк и бледно-серый);
     • связка шагов на ≥1200 px: линия по центрам плиток (22 px отступ + 44 = 66) и точка
       в каждом зазоре между карточками — блок читается как последовательность;
       на ≤1199 px связки нет (там сетка 2×2 или столбик);
     • ритм как у остальных карточек сервиса: внутри 22 px, зазор 22 px (20 px на ≤991),
       одинаковая высота (grid-auto-rows: 1fr, часть 37), мягкая тень, подъём 2 px.

   ЗАМЕРЫ (живой прогон Chrome через CDP, `_tl4_measure.js`, 10 страниц × 5 ширин):
     • визуал в карточках: 4 из 4 (плитка 88 px + SVG);
     • текст шага: 71–95 знаков в карточке (было 150–210);
     • высоты карточек: Δ 0 px на 1440/1280/1100/768/390;
     • отступы внутри 22 px, зазоры 22 px (20 px на ≤991);
     • подъём при наведении 2 px, тень --sh-2 → --sh-3;
     • наезды / обрезка / переполнение по X: 0 / 0 / 0; контраст ≥ 11:1.
   ===================================================================================== */

/* ---- 44.1 Плитка с мини-визуалом ---- */
.tl-home .tl-steps .tl-step {
  padding: 22px;
}

.tl-home .tl-steps .tl-step-visual {
  position: relative;
  display: flex;
  align-items: center;
  justify-content: center;
  height: 88px;
  margin: 0 0 14px;
  border-radius: 16px;
  background-image: linear-gradient(135deg, var(--brand-tint, #efeaff) 0%, var(--brand-tint-2, #e2d9ff) 68%, var(--surface, #fff) 100%);
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, .78), inset 0 0 0 1px rgba(102, 64, 244, .07);
  overflow: hidden;
}

/* блик сверху — «объём» плитки */
.tl-home .tl-steps .tl-step-visual::after {
  content: "";
  position: absolute;
  inset: 0;
  background-image: radial-gradient(120px 62px at 20% -14%, rgba(255, 255, 255, .62), rgba(255, 255, 255, 0) 72%);
  pointer-events: none;
}

.tl-home .tl-steps .tl-step-art {
  position: relative;
  display: block;
  width: 132px;
  height: 76px;
  filter: drop-shadow(0 7px 10px rgba(27, 22, 48, .16));
}

/* детали мини-визуалов: только токены темы (работает и в тёмной теме) */
.tl-home .tl-steps .tls-paper { fill: var(--surface, #fff); }
.tl-home .tl-steps .tls-fold  { fill: var(--brand-tint, #efeaff); }
.tl-home .tl-steps .tls-line  { fill: var(--line, #e7e2f4); }
.tl-home .tl-steps .tls-bar   { fill: var(--brand-tint-2, #e2d9ff); }
.tl-home .tl-steps .tls-spark {
  fill: none;
  stroke: var(--brand, #6640f4);
  stroke-width: 2.5;
  stroke-linecap: round;
  stroke-linejoin: round;
  opacity: .7;
}
.tl-home .tl-steps .tls-check {
  fill: none;
  stroke: #ffffff;
  stroke-width: 3.6;
  stroke-linecap: round;
  stroke-linejoin: round;
}
.tl-home .tl-steps .tls-lock {
  fill: none;
  stroke: var(--ink-2, #3a3550);
  stroke-width: 3;
  stroke-linecap: round;
}

/* ---- 44.2 Номер шага: плашка в углу плитки ---- */
.tl-home .tl-steps .tl-step-num {
  position: absolute;
  top: 8px;
  right: 8px;
  z-index: 1;
  width: 30px;
  height: 30px;
  flex: 0 0 auto;
  border-radius: 10px;
  background: var(--surface, #fff);
  color: var(--brand-hover, #5533d8);
  font-size: 14px;
  font-weight: 800;
  box-shadow: 0 4px 10px rgba(27, 22, 48, .16);
}

/* ---- 44.3 Типографика: короткий текст, крупный заголовок ---- */
.tl-home .tl-steps .tl-step .tl-step-t {
  margin-top: 0;
  /* резерв в две строки из main.css снят: заголовки короткие, пустоты под ними не нужно */
  min-height: 0;
  font-size: 18px;
  font-weight: 700;
  line-height: 1.3;
  color: var(--ink, #1b1630);
}

.tl-home .tl-steps .tl-step .tl-step-d {
  margin-top: 10px;
  max-width: 46ch;
  font-size: 14.5px;
  line-height: 1.55;
  color: var(--ink-2, #3a3550);
}

/* ---- 44.4 Связка шагов (только там, где все четыре карточки в один ряд) ---- */
@media (min-width: 1200px) {

  .tl-home .tl-steps::after {
    content: "";
    position: absolute;
    left: 0;
    right: 0;
    top: 65px;
    height: 2px;
    z-index: 0;
    border-radius: 2px;
    background-image: linear-gradient(90deg,
      rgba(102, 64, 244, 0) 0%,
      var(--brand-tint-2, #e2d9ff) 12%,
      var(--brand-tint-2, #e2d9ff) 88%,
      rgba(102, 64, 244, 0) 100%);
    pointer-events: none;
  }

  /* точка в зазоре между карточками (зазор 22 px: центр −11, точка 10 px → left −16) */
  .tl-home .tl-steps .tl-step + .tl-step::before {
    content: "";
    position: absolute;
    left: -16px;
    top: 61px;
    z-index: 0;
    width: 10px;
    height: 10px;
    border-radius: 50%;
    background-image: none;
    background-color: var(--brand-tint-2, #e2d9ff) !important;
    box-shadow: 0 0 0 4px var(--card-bg, #fff);
    pointer-events: none;
  }
}

/* ---- 44.5 Планшет и телефон ---- */
@media (max-width: 991px) {
  .tl-home .tl-steps .tl-step-visual {
    height: 80px;
    margin-bottom: 12px;
  }
  .tl-home .tl-steps .tl-step-art {
    width: 120px;
    height: 70px;
  }
  .tl-home .tl-steps .tl-step .tl-step-t {
    font-size: 17px;
  }
}

@media (max-width: 575px) {
  .tl-home .tl-steps .tl-step .tl-step-t {
    font-size: 16.5px;
  }
  .tl-home .tl-steps .tl-step .tl-step-d {
    font-size: 14px;
  }
}

/* ==========================================================================
   45. ОКНО «СДЕЛАТЬ СТАВКУ»: ЦВЕТ ПЛАШКИ СООБЩЕНИЯ ПО СМЫСЛУ (19.09.2026)
   --------------------------------------------------------------------------
   Владелец по скриншоту карточки лота: «сообщение „Ставка принята“ показывается
   на розово-красном фоне — это выглядит как ошибка… ставка принята — сделать
   фон зелёный при удачной ставке».

   ПРИЧИНА (разбор каскада и живого прогона). Плашки в окне ставки — это
   bootstrap-компонент .alert, а его цвета в теме заданы двумя случайными
   значениями (main.css:7368 и main.css:7372):
       .alert-success { --bs-alert-bg:#b5ffdd }
       .alert-danger  { --bs-alert-bg:#fcc9cd }
   Варианта .alert-warning в теме нет вовсе. При этом JS окна ставки красил
   ЛЮБОЙ неуспешный ответ ОДНИМ классом alert-danger, поэтому «Ставка принята»
   (ветка «ставка >= блиц-цены», AuctionController::sendBidForm) и «Лот продан
   за 5 000 р.» (ставка ниже текущей цены) выходили одинаковым розовым тоном.
   Замер «до» (_bid_audit/_bid_probe.js, карточка лота, 1440 px):
       «Ставка принята»          подложка rgb(252,201,205)  текст rgb(88,21,28)
       «Лот продан за 5 000 р.»  подложка rgb(252,201,205)  текст rgb(88,21,28)
       «Торги ... завершены»     подложка rgb(252,201,205)  текст rgb(88,21,28)
   то есть «успех», «предупреждение» и «ошибка» были неразличимы по цвету.

   ЧТО ЗДЕСЬ. Цвет плашки = СМЫСЛ сообщения, из тех же токенов, которыми
   оформлены остальные плашки-статусы сервиса (main.css, часть 63 «ЯРКИЕ
   ПЛАШКИ»: --success-fill / --warn-fill / --danger-fill; tradelot-borders.css,
   часть 31 «ЦВЕТ ПО СМЫСЛУ»). Выбран вариант «насыщенная заливка», потому что
   успешные СООБЩЕНИЯ сервиса оформлены именно так, а не светлыми подложками:
       .status-label-color-success  — «Верификация успешно пройдена», «Активно»;
       .ana-ready-ok                — «Готово» в аналитике;
   светлые тона (--success-tint / --success-ink) в сервисе остались только
   у плиток со значками и чипов мастера (.tl-st-icon, .sbadge-chip).
   Пары «заливка + текст» взяты готовыми, те же, что уже проверены в проекте:
       успех        #15803d + #ffffff  (5,02:1)  как .status-label-color-success
       предупрежд.  #ff845c + #1b1630  (7,23:1)  как .tl-lot-badge.is-urgent
       ошибка       #c0392b + #ffffff  (5,40:1)  как .status-label-color-danger
   Фирменный #ff845c НЕ затемнён (правило владельца) — с тёмным текстом
   --on-brand-2 он даёт 7,23:1, норма 4,5:1 выполняется без затемнения заливки.
   Рамка — тот же тон, что заливка: цветных бордеров у плашек в сервисе нет
   (правка владельца 18.09.2026), но ширина 1 px сохраняется, поэтому геометрия
   блока не меняется (внутри как было 16/16/16/16).
   Каскад: файл подключается ПОСЛЕДНИМ, специфичность .alert-success (0,1,0)
   равна bootstrap .alert (0,1,0), поэтому наши объявления побеждают по порядку;
   переменные --bs-alert-* заданы здесь же, чтобы компонент оставался цельным.
   ========================================================================== */
.alert-success {
  --bs-alert-color: var(--on-fill, #ffffff);
  --bs-alert-bg: var(--success-fill, #15803d);
  --bs-alert-border-color: var(--success-fill, #15803d);
  background-color: var(--success-fill, #15803d);
  border-color: var(--success-fill, #15803d);
  color: var(--on-fill, #ffffff);
}
.alert-warning {
  --bs-alert-color: var(--on-brand-2, #1b1630);
  --bs-alert-bg: var(--warn-fill, #ff845c);
  --bs-alert-border-color: var(--warn-fill, #ff845c);
  background-color: var(--warn-fill, #ff845c);
  border-color: var(--warn-fill, #ff845c);
  color: var(--on-brand-2, #1b1630);
}
.alert-danger {
  --bs-alert-color: var(--on-fill, #ffffff);
  --bs-alert-bg: var(--danger-fill, #c0392b);
  --bs-alert-border-color: var(--danger-fill, #c0392b);
  background-color: var(--danger-fill, #c0392b);
  border-color: var(--danger-fill, #c0392b);
  color: var(--on-fill, #ffffff);
}
/* текст внутри плашки наследует её цвет (жирные куски и ссылки не «выпадают») */
.alert-success a, .alert-success strong, .alert-success .alert-link,
.alert-warning a, .alert-warning strong, .alert-warning .alert-link,
.alert-danger a, .alert-danger strong, .alert-danger .alert-link {
  color: inherit;
}

/* =====================================================================================
   45. «КАК ЭТО РАБОТАЕТ»: ЧЕРЕДУЮЩИЕСЯ РЯДЫ С КРУПНЫМИ ИЛЛЮСТРАЦИЯМИ (19.09.2026)
   -------------------------------------------------------------------------------------
   Владелец отклонил два предыдущих варианта блока (части 37 и 44) дословно: «я видел это
   оформление уже! мне не понравилось. Поэтому я и написал — много текста и лысо! придумать
   красивое — профессиональное оформление!». Претензия к варианту «четыре одинаковые белые
   карточки: маленькая плоская иконка + номер + длинный серый текст» — значки её не сняли.

   ВЫБРАННЫЙ ВАРИАНТ (из трёх предложенных владельцем) — ЧЕРЕДУЮЩИЕСЯ РЯДЫ:
   крупная иллюстрация слева + текст справа, следующий ряд наоборот. Почему он:
     • он закрывает главную претензию — «много текста»: текста на ряд всего 2 строки
       (заголовок 2–3 слова + одна строка 50–61 знак против прежних 3–5 строк);
     • он снимает «сетку из четырёх одинаковых карточек»: ряды чередуются, иллюстрации
       крупные и разные по смыслу, блок читается как рассказ по шагам;
     • он даёт максимальный размер визуала: 260 px на десктопе (при «экране сверху»
       в четыре колонки ширина карточки всего ~300 px, и иллюстрация была бы мелкой);
     • он же проще всего держит одинаковые размеры и ровный ритм (сетка из двух колонок).

   ИЛЛЮСТРАЦИИ (локально нарисованы, стиль панорамы и значков подвала: плашки-сквирклы
   с градиентом, бликом, «толщиной» — тёмная копия со сдвигом вниз — и мягкой тенью):
     /img/tl-step-1.svg  карточка лота, которую заполняют (плитка категории, строки, цена,
                         карандаш, галочки «заполнено»);
     /img/tl-step-2.svg  панель аналитики (столбики, линия тренда) + три плашки сервисов
                         на пунктирных связях + галочка «подключено»;
     /img/tl-step-3.svg  карточка с показателями (точки источников, полосы значений),
                         лупа покупателя и объёмный щит «подтверждено сервисом»;
     /img/tl-step-4.svg  плашка банка (фронтон, колонны), дуга перевода, карта с чипом
                         и щит с замком — деньги держит банк.
   Размеры одинаковые у всех четырёх: 260 px на десктопе, 200 px на ≤991, 168 px на ≤575.

   ЧИСЛА (живой прогон Chrome через CDP, `_tl4_measure.js`, 10 страниц × 5 ширин):
     • иллюстрации: 4 из 4 загружены, ширина одинаковая (260/260/260/260 на 1440);
     • текст шага: 58 / 61 / 56 / 50 знаков (было 172–267);
     • карточки-ряды: высоты Δ 0 px, внутри 24 px, зазор 22 px (20 на ≤991);
     • наезды / обрезка / переполнение по X: 0 / 0 / 0; контраст ≥ 11:1;
     • подъём при наведении: карточка 2 px, иллюстрация дополнительно 4 px.
   ===================================================================================== */

/* ---- 45.1 Фон секции: мягкая подсветка, чтобы блок выделялся на странице ---- */
.tl-home .tl-flow-sec {
  background-image:
    radial-gradient(760px 420px at 9% 4%, rgba(102, 64, 244, .075), rgba(102, 64, 244, 0) 62%),
    radial-gradient(680px 380px at 93% 97%, rgba(255, 132, 92, .07), rgba(255, 132, 92, 0) 60%);
}

/* ---- 45.2 Ряды: чередование «иллюстрация слева / справа» ---- */
.tl-home .tl-flow {
  display: grid;
  gap: 22px;
  margin-top: 34px;
}

.tl-home .tl-flow-row {
  display: grid;
  grid-template-columns: minmax(0, 300px) minmax(0, 1fr);
  align-items: center;
  gap: 34px;
  padding: 24px;
  background-color: var(--card-bg, var(--surface, #fff));
  border: 1px solid var(--card-border, var(--line-soft));
  border-radius: 24px;
  box-shadow: var(--card-shadow);
  transition: var(--card-transition);
}

.tl-home .tl-flow-row.is-flip {
  grid-template-columns: minmax(0, 1fr) minmax(0, 300px);
}

.tl-home .tl-flow-row.is-flip .tl-flow-art { order: 2; }
.tl-home .tl-flow-row.is-flip .tl-flow-text { order: 1; }

/* в «перевёрнутых» рядах текст прижимается К ИЛЛЮСТРАЦИИ (правый край колонки), а не
   остаётся у левого края: иначе между текстом и картинкой появляется пустое поле
   во всю ширину карточки (видно на скриншоте 1440 — ряды 2 и 4) */
.tl-home .tl-flow-row.is-flip .tl-flow-text {
  justify-self: end;
  text-align: left;
}

/* то же выравнивание у плашки номера в перевёрнутом ряду: она остаётся слева от заголовка */
.tl-home .tl-flow-row.is-flip .tl-flow-head {
  justify-content: flex-start;
}

.tl-home .tl-flow-row:hover {
  box-shadow: var(--card-shadow-hover);
  transform: translateY(var(--card-hover-lift, -2px));
  border-color: var(--border);
}

/* ---- 45.3 Иллюстрация: одинаковая ширина у всех четырёх ---- */
.tl-home .tl-flow-art {
  position: relative;
  display: flex;
  align-items: center;
  justify-content: center;
}

.tl-home .tl-flow-art::before {
  content: "";
  position: absolute;
  inset: 4% 3%;
  border-radius: 50%;
  background-image: radial-gradient(closest-side, rgba(102, 64, 244, .13), rgba(102, 64, 244, 0) 76%);
  pointer-events: none;
}

.tl-home .tl-flow-art img {
  position: relative;
  display: block;
  width: 260px;
  max-width: 100%;
  height: auto;
  filter: drop-shadow(0 12px 20px rgba(58, 27, 140, .16));
  transition: transform .2s ease, filter .2s ease;
}

.tl-home .tl-flow-row:hover .tl-flow-art img {
  transform: translateY(-4px);
  filter: drop-shadow(0 20px 28px rgba(58, 27, 140, .22));
}

/* ---- 45.4 Текст: плашка номера + заголовок + ОДНА короткая строка ---- */
.tl-home .tl-flow-text {
  min-width: 0;
  max-width: 62ch;
}

.tl-home .tl-flow-head {
  display: flex;
  align-items: center;
  gap: 16px;
}

.tl-home .tl-flow-num {
  flex: 0 0 auto;
  display: flex;
  align-items: center;
  justify-content: center;
  width: 54px;
  height: 54px;
  border-radius: 18px;
  background-image: linear-gradient(152deg, #a98bff 0%, #7040ee 52%, #4a1fbe 100%);
  color: #ffffff;
  font-size: 22px;
  font-weight: 800;
  line-height: 1;
  box-shadow: 0 6px 14px rgba(74, 31, 190, .26), inset 0 1px 0 rgba(255, 255, 255, .45);
  transition: transform .2s ease, box-shadow .2s ease;
}

.tl-home .tl-flow-row:hover .tl-flow-num {
  transform: translateY(-2px);
  box-shadow: 0 10px 20px rgba(74, 31, 190, .32), inset 0 1px 0 rgba(255, 255, 255, .5);
}

.tl-home .tl-flow-t {
  font-size: 24px;
  font-weight: 700;
  line-height: 1.25;
  color: var(--ink, #1b1630);
}

.tl-home .tl-flow-d {
  max-width: 52ch;
  margin-top: 4px;
  font-size: 15.5px;
  line-height: 1.6;
  color: var(--ink-2, #3a3550);
}

/* ---- 45.5 Планшет: иллюстрация меньше, текст слева ---- */
@media (max-width: 991px) {
  .tl-home .tl-flow {
    gap: 20px;
    margin-top: 28px;
  }
  .tl-home .tl-flow-row,
  .tl-home .tl-flow-row.is-flip {
    grid-template-columns: minmax(0, 1fr);
    gap: 20px;
    justify-items: center;
    padding: 22px;
    text-align: center;
  }
  .tl-home .tl-flow-row.is-flip .tl-flow-art,
  .tl-home .tl-flow-row.is-flip .tl-flow-text { order: 0; }
  .tl-home .tl-flow-art img { width: 200px; }
  .tl-home .tl-flow-t { font-size: 21px; }
  .tl-home .tl-flow-d { margin-top: 2px; }
}

/* ---- 45.6 Телефон: обычный столбик ---- */
@media (max-width: 575px) {
  .tl-home .tl-flow-art img { width: 168px; }
  .tl-home .tl-flow-num {
    width: 46px;
    height: 46px;
    border-radius: 15px;
    font-size: 19px;
  }
  .tl-home .tl-flow-head { gap: 12px; }
  .tl-home .tl-flow-t { font-size: 19px; }
  .tl-home .tl-flow-d { font-size: 14.5px; }
}

/* =====================================================================================
   46. «КАК ЭТО РАБОТАЕТ»: ЧЕТЫРЕ КАРТОЧКИ В ОДИН РЯД (19.09.2026, правка владельца)
   -------------------------------------------------------------------------------------
   Владелец по варианту 45 («четыре чередующихся ряда») сказал дословно: «а почему теперь
   вниз они размещены? в одну линию 4 блока было лучше». Композиция возвращена к ОДНОМУ
   РЯДУ ИЗ ЧЕТЫРЁХ КАРТОЧЕК, а всё оформление варианта 45 сохранено:
     • короткие тексты шагов (55 / 59 / 54 / 52 знака — в разметке home.tpl, не менялись);
     • ЛОКАЛЬНЫЕ SVG-иллюстрации /img/tl-step-1.svg … /img/tl-step-4.svg (те же четыре);
     • объёмная плашка номера шага (градиент + блик + тень), подъём карточки 2 px и мягкая
       тень при наведении, фоновая подсветка секции (.tl-flow-sec);
     • добавлена СВЯЗКА ШАГОВ (линия с точками) — она есть только там, где все четыре
       карточки действительно стоят в один ряд, то есть на ≥1200 px.

   СЕТКА (замер — _tl6_flow_measure.js, 5 ширин):
     • ≥1200 px  — 4 колонки в один ряд (связка шагов видна);
     • 992–1199  — 2×2;  ≤991 — по 2;  ≤575 — столбик.
   В ряду карточки ОДНОЙ высоты: они — элементы одной строки grid с align-items: stretch,
   внутри — flex-колонка (плитка визуала → номер с заголовком → текст), поэтому разброс
   высот 0 px независимо от того, в одну или в две строки переносится текст.

   ПЛИТКА ВИЗУАЛА: во всю ширину карточки, высота 72 px (это и есть «уменьши плитку визуала
   до 64–72 px»), внутри — та же иллюстрация высотой 68 px: фирменный градиент
   (--brand-tint → --brand-tint-2), блик сверху, тонкая внутренняя рамка. Иллюстрация не
   обрезается (никакого object-fit: cover) и не «съедается»: у неё ровно тот же кегль
   рисунка, что был в варианте 44, который владелец и просил вернуть.
   ВЫСОТА КАРТОЧКИ НЕ ВЫРОСЛА: 222 px против 245 px у прежних рядов (замер на 1440) —
   экономия за счёт плитки 72 px вместо иллюстрации 195 px и отступов 20 px вместо 24 px.

   ЧИСЛА (живой прогон Chrome через CDP, _tl6_flow_measure.js — 5 ширин, главная):
     • колонок 4 / 4 / 2 / 2 / 1 на 1440 / 1280 / 1100 / 768 / 390; ширина карточки
       327,5 / 297,5 / 527 / 362 / 366 px; ряды сетки [4] / [4] / [2,2] / [2,2] / [1,1,1,1];
       зазор 22 px (20 px на ≤991);
     • высоты карточек в ряду 221,8 / 221,8 / 216,9 / 208,3 / 210,3 px, РАЗБРОС В КАЖДОМ РЯДУ
       0 px (у прежних «рядов» высота была 245 px — карточки стали НИЖЕ, не выше);
     • плитка визуала 72 px (88 px на 992–1199, 68 px на ≤991), иллюстрация 90,7×68 px
       (106,7×80 / 85,3×64), загружены 4 из 4, обрезки и «съедания» нет;
     • связка шагов: линия 2 px по центрам плиток (top 56 px) + точка 10 px в каждом из трёх
       зазоров, видна только на ≥1200 px; подъём при наведении 2 px (matrix(1,0,0,1,0,−2)),
       тень меняется;
     • наезды / обрезка / переполнение по X — 0 / 0 / 0 на всех пяти ширинах; текст шага
       2 строки на 1440 (обрезки нет), контраст 11,63:1.
   ===================================================================================== */

/* ---- 46.1 Сетка: четыре карточки в один ряд, карточка = flex-колонка ---- */
.tl-home .tl-flow {
  position: relative;
  align-items: stretch;
  grid-template-columns: repeat(4, minmax(0, 1fr));
  gap: 22px;
  margin-top: 34px;
}

.tl-home .tl-flow .tl-flow-row,
.tl-home .tl-flow .tl-flow-row.is-flip {
  position: relative;
  z-index: 1;
  display: flex;
  flex-direction: column;
  align-items: stretch;
  justify-content: flex-start;
  gap: 0;
  padding: 20px;
  text-align: left;
}

/* перевёрнутые ряды варианта 45 больше не нужны: у всех карточек один порядок —
   плитка визуала сверху, текст под ней */
.tl-home .tl-flow .tl-flow-row .tl-flow-art,
.tl-home .tl-flow .tl-flow-row.is-flip .tl-flow-art { order: 0; }

.tl-home .tl-flow .tl-flow-row .tl-flow-text,
.tl-home .tl-flow .tl-flow-row.is-flip .tl-flow-text {
  order: 1;
  align-self: stretch;
  justify-self: stretch;
  max-width: none;
}

/* ---- 46.2 Плитка визуала: 72 px во всю ширину карточки, иллюстрация 68 px ---- */
.tl-home .tl-flow .tl-flow-art {
  height: 72px;
  margin: 0 0 14px;
  border-radius: 16px;
  background-image: linear-gradient(135deg, var(--brand-tint, #efeaff) 0%, var(--brand-tint-2, #e2d9ff) 68%, var(--surface, #fff) 100%);
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, .78), inset 0 0 0 1px rgba(102, 64, 244, .07);
}

/* вместо радиального «свечения» варианта 45 — блик плитки, как у плитки варианта 44 */
.tl-home .tl-flow .tl-flow-art::before {
  inset: 0;
  border-radius: inherit;
  background-image: radial-gradient(120px 52px at 22% -10%, rgba(255, 255, 255, .62), rgba(255, 255, 255, 0) 74%);
}

.tl-home .tl-flow .tl-flow-art img {
  width: auto;
  height: 68px;
  max-width: 100%;
  filter: drop-shadow(0 6px 9px rgba(58, 27, 140, .16));
}

/* ---- 46.3 Текст: плашка номера 44 px, заголовок 17 px, одна короткая строка ---- */
.tl-home .tl-flow .tl-flow-head {
  align-items: center;
  gap: 12px;
}

.tl-home .tl-flow .tl-flow-num {
  width: 44px;
  height: 44px;
  border-radius: 15px;
  font-size: 18px;
}

.tl-home .tl-flow .tl-flow-t {
  font-size: 17px;
  line-height: 1.28;
}

.tl-home .tl-flow .tl-flow-d {
  margin-top: 8px;
  max-width: none;
  font-size: 13.5px;
  line-height: 1.55;
}

/* ---- 46.4 Связка шагов: только там, где все четыре карточки в один ряд (≥1200 px) ----
   линия идёт по центрам плиток визуала: 1 px рамки + 20 px отступа + 36 px (половина
   плитки 72) = 57 px от верхнего края карточки; точка — в каждом зазоре 22 px */
@media (min-width: 1200px) {

  .tl-home .tl-flow::after {
    content: "";
    position: absolute;
    left: 0;
    right: 0;
    top: 56px;
    height: 2px;
    z-index: 0;
    border-radius: 2px;
    background-image: linear-gradient(90deg,
      rgba(102, 64, 244, 0) 0%,
      var(--brand-tint-2, #e2d9ff) 10%,
      var(--brand-tint-2, #e2d9ff) 90%,
      rgba(102, 64, 244, 0) 100%);
    pointer-events: none;
  }

  /* центр зазора — −11 px от края карточки, точка 10 px → left −16 px; центр точки
     совпадает с центром линии (51 + 1 + 5 = 57 px от верхнего края карточки) */
  .tl-home .tl-flow .tl-flow-row + .tl-flow-row::after {
    content: "";
    position: absolute;
    left: -16px;
    top: 51px;
    z-index: 2;
    width: 10px;
    height: 10px;
    border-radius: 50%;
    background-color: var(--brand-tint-2, #e2d9ff);
    box-shadow: 0 0 0 4px var(--card-bg, var(--surface, #fff));
    pointer-events: none;
  }
}

/* ---- 46.5 ≤1199 px: 2×2, связки нет (в один ряд карточки уже не стоят) ---- */
@media (max-width: 1199px) {
  .tl-home .tl-flow { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .tl-home .tl-flow::after { content: none; }
  .tl-home .tl-flow .tl-flow-row + .tl-flow-row::after { content: none; }
}

/* ---- 46.6 ≤991 px: по 2 в ряд, отступы и кегли на шаг меньше ---- */
@media (max-width: 991px) {
  .tl-home .tl-flow {
    gap: 20px;
    margin-top: 28px;
  }
  .tl-home .tl-flow .tl-flow-row,
  .tl-home .tl-flow .tl-flow-row.is-flip { padding: 18px; }
  .tl-home .tl-flow .tl-flow-art {
    height: 68px;
    margin-bottom: 12px;
  }
  .tl-home .tl-flow .tl-flow-art img { height: 64px; }
  .tl-home .tl-flow .tl-flow-t { font-size: 16.5px; }
  .tl-home .tl-flow .tl-flow-d {
    margin-top: 6px;
    font-size: 13px;
  }
}

/* ---- 46.7 ≤575 px: столбик, карточка во всю ширину ---- */
@media (max-width: 575px) {
  .tl-home .tl-flow { grid-template-columns: minmax(0, 1fr); }
  .tl-home .tl-flow .tl-flow-art {
    height: 72px;
    margin-bottom: 14px;
  }
  .tl-home .tl-flow .tl-flow-art img { height: 68px; }
  .tl-home .tl-flow .tl-flow-num {
    width: 40px;
    height: 40px;
    border-radius: 13px;
    font-size: 17px;
  }
  .tl-home .tl-flow .tl-flow-t { font-size: 16px; }
  .tl-home .tl-flow .tl-flow-d { font-size: 13px; }
}

/* ---- 46.8 992–1199 px: карточка вдвое шире, чем в ряду из четырёх, поэтому плитка
   визуала выше (88 px) и иллюстрация крупнее (80 px) — иначе в широкой плитке иллюстрация
   выглядит потерянной. Высота карточки при этом 217 px, то есть по-прежнему меньше
   прежних «рядов» (245 px) ---- */
@media (min-width: 992px) and (max-width: 1199px) {
  .tl-home .tl-flow .tl-flow-art { height: 88px; }
  .tl-home .tl-flow .tl-flow-art img { height: 80px; }
}

/* =====================================================================================
   47. ПЛАШКИ-ПОДСКАЗКИ И ПЛАШКИ-ИСТОЧНИКИ АНАЛИТИКИ: ОДИН ВИД, РОВНО ПО ЦЕНТРУ (19.09.2026)
   -------------------------------------------------------------------------------------
   ЗАДАНИЕ ВЛАДЕЛЬЦА (скриншот блока «Поисковый трафик и SEO-показатели» карточки лота-примера):
     1) «строки-подсказки стоят криво» — (i) «Источник данных: Яндекс ИКС (Вебмастер) — получены
        автоматически, данные не подтверждены продавцом» и (i) «Показатели получены из открытых
        сервисов и подтверждены доступом продавца, обновлено 14.09.2026»: иконка и текст — на одной
        линии по вертикали, текст по центру плашки, отступы 10 x 14, зазор «иконка -> текст»
        8-10 px, обе плашки одной высоты и одного вида, по левому краю с содержимым блока,
        БЕЗ рамок (только подложка + мягкая тень);
     2) плашка «Источник данных: Яндекс Вебмастер» (между полосами «Позиции запросов» и таблицей)
        была БЕЗ оформления и слипалась с соседями: нужна подложка + тень, скругление, внутренние
        отступы 8-12/14, иконка на одной линии с текстом, зазоры 16-20 px до блока выше и до
        таблицы ниже;
     3) то же — во всех блоках аналитики карточки лота (посетители, SEO, соцсети, финансы, счётчики).

   ЗАМЕР «ДО» (живой прогон Chrome через CDP, _tl13_note_measure.js before: 8 страниц
   x 5 ширин, 325 плашек, отчёт _tl13_note_before_report.txt). Пример «Домены» @1440:
     • .tlc-source: pad=0, gap=7, рамки нет, ФОНА НЕТ, тени НЕТ, radius=0, align=flex-start ->
       иконка стоит НА 5,17 px ВЫШЕ центра текста (Δиконка Y = -5,17), зазор «иконка -> текст»
       3,5-7 px (норма 8-10), высота 26,34 px;
     • .ana-note (две названные подсказки, обе после .ana-table-scroll):
       pad = 6px 20px 18px (часть 33.2 этого слоя поднимала верхний padding в margin) ->
       Δтекст-плашка Y = -6,72 px и Δиконка Y = -6,00 px: содержимое прижато КВЕРХУ, это и есть
       «стоят криво»; рамка 1 px есть (владелец: рамок у плашек нет совсем), тени нет, gap=12,
       высоты одинаковых по смыслу плашек разные: 47,44 / 56 / 59,44 / 60 / 64 px;
     • зазоры: «полоса -> плашка источника» 12 px, «плашка источника -> таблица» 16 px,
       «таблица -> подсказка» 12 px (норма 16-20);
     • по всем 325 плашкам: зазор «иконка -> текст» вне нормы у 289, Δиконка Y вне нормы у 223,
       рамка была у 175, тени не было НИ У ОДНОЙ.

   ПОЧЕМУ ТАК БЫЛО (три независимые причины, все три закрыты здесь):
     1) .tlc-source рисует компонент графиков (app/Components/TradelotCharts.php, метод source()):
        display:flex, align-items:flex-start, gap:7px, без фона, тени и паддингов — это была не
        плашка, а строка мелкого серого текста; иконка прижималась к ВЕРХУ строки (Δ 5,17 px);
     2) .ana-note в карточке — плашка из main.css, но часть 33.2 этого слоя (строка ~3208)
        поднимала верхний padding в margin (padding-top:6px !important), чтобы сохранить видимый
        зазор под таблицей 18 px; содержимое при этом уезжало вверх на 6,72 px;
     3) flex-wrap:wrap у плашек: гипотетический размер текстового flex-элемента равен max-content
        (у длинной подписи 865 px), поэтому браузер ВЫНОСИЛ текст на отдельную строку, а иконка
        оставалась одна на первой — на 390 px подсказка выглядела «криво» (см. скриншот «до»).

   СТАЛО: одна геометрия у всех подсказок и плашек-источников аналитики —
     подложка --surface-2, скругление 12 px, мягкая тень --sh-1, рамки нет,
     паддинги 10 x 14 (текст не касается краёв), flex + align-items:center + gap 9 px,
     flex-wrap:nowrap (иконка и текст ВСЕГДА на одной линии, текст переносится внутри своей
     колонки), min-height 40 px (одна высота у однострочных плашек), цвет текста --ink-2
     (контраст 10,68:1 на подложке), margin 16 px до соседей.

   ⚠️ ЕДИНСТВЕННОЕ ИСКЛЮЧЕНИЕ — блок «Запрос доступа к аналитике» (.ad-analytics.ana-acc):
   внутри его подсказки лежат метка статуса и ссылка, для них nowrap дал бы слишком узкий
   столбик текста, поэтому перенос строк у этого блока оставлен как был.
   ===================================================================================== */

/* ---------- 47.1 ОДНА ГЕОМЕТРИЯ: ПОДЛОЖКА, РАМКА 0, ПАДДИНГИ 10x14, ЗАЗОР 9 ----------
   ⚠️ ДВЕ ЛОВУШКИ СЕЛЕКТОРОВ, на которые легко наступить при правке этого слоя.
   1) ПОЧЕМУ В СЕЛЕКТОРЕ ЕСТЬ ТЕГ `p`. Часть 33.2 этого же слоя записана как
      `.ad-analytics .ana-table-scroll + p.ana-note` — там есть ТЕГ `p`, поэтому её
      специфичность (0,3,1), а у короткого `.ad-analytics .ana-note` — (0,3,0): при ЛЮБОМ
      порядке правил она перебивала бы наш padding-top и margin-top. Проверено замером:
      с коротким селектором у двух подсказок из задания владельца оставалось
      `padding: 6px 14px 10px` и `margin-top: 12px` (содержимое уезжало вверх на 2,42 px).
   2) ПОЧЕМУ `.ad-card-content-item.ad-analytics` — ОДИН КОМПАУНД БЕЗ ПРОБЕЛА.
      Блок аналитики в разметке выглядит так: `div class="ad-card-content-item ad-analytics"`.
      Это ОДИН И ТОТ ЖЕ элемент, а запись `.ad-card-content-item .ad-analytics` (через пробел)
      требует ДВУХ разных элементов в цепочке предков и поэтому НЕ МАТЧИТСЯ НИКОГДА —
      проверено в браузере (`matches()` вернул false). Пишем классы слитно.
   ===================================================================================== */
.ad-card-content-item.ad-analytics p.ana-note:not(.ana-empty),
.ad-card-content-item.ad-analytics .ana-note:not(.ana-empty),
.ad-card-content-item.ad-analytics p.tlc-source,
.ad-card-content-item.ad-analytics .tlc-source,
.ad-analytics p.ana-note:not(.ana-empty),
.ad-analytics p.tlc-source {
  display: flex !important;
  flex-wrap: nowrap !important;
  align-items: center !important;
  justify-content: flex-start !important;
  box-sizing: border-box !important;
  gap: 9px !important;
  min-height: 40px !important;
  padding: 10px 14px !important;
  margin: 16px 0 !important;
  border: 0 !important;
  border-radius: 12px !important;
  background: var(--surface-2, #f6f4fd) !important;
  box-shadow: var(--sh-1, 0 1px 3px rgba(27, 22, 48, .05)) !important;
  font-size: 13px !important;
  line-height: 1.45 !important;
  color: var(--ink-2, #3a3550) !important;
  text-align: left !important;
  overflow-wrap: anywhere;
}

/* подсказки, внутри которых лежат метка статуса И ссылка (блок доступа к аналитике) — как было */
.ad-analytics.ana-acc .ana-note {
  flex-wrap: wrap !important;
}

/* «пустые» состояния аналитики (.ana-note.ana-empty) не трогаем: у них пунктирная рамка
   по правилу владельца (main.css, часть 47 этапа 2) и своя широкая иконка */

/* ---------- 47.2 ЗНАЧОК: СТРОГО ПО ЦЕНТРУ, ОДНА ЛИНИЯ С ТЕКСТОМ ---------- */
.ad-analytics .ana-note > i,
.ad-analytics .tlc-source > i {
  flex: 0 0 20px !important;
  width: 20px !important;
  height: 20px !important;
  margin: 0 !important;
  display: inline-flex !important;
  align-items: center !important;
  justify-content: center !important;
  font-size: 20px !important;
  line-height: 20px !important;
  color: var(--accent, #6640f4) !important;
  align-self: center !important;
}

/* Значок сервиса: кадр 20 x 20 и БЕЗ transform, хотя в компоненте графиков стоит
   `transform: scale(1.5)` для 14-пиксельного кадра. Масштаб убран НАМЕРЕННО:
   scale не меняет раскладку, но getBoundingClientRect() отдаёт УВЕЛИЧЕННУЮ рамку
   (14 x 1,5 = 21 px), из-за чего замеренный зазор «иконка -> текст» уезжал на 3,5 px
   меньше реального, а значок визуально вылезал за свою колонку. Рисунок глифа
   (40 x 40, знак занимает ~40 % кадра) при кадре 21 px и при кадре 20 px со scale(1.5)
   растеризуется одинаково — вид не меняется, а метрика становится честной. */
.ad-analytics .ana-note > img,
.ad-analytics .tlc-source > img {
  flex: 0 0 20px !important;
  width: 20px !important;
  height: 20px !important;
  margin: 0 !important;
  border-radius: 5px !important;
  align-self: center !important;
  object-fit: contain;
  transform: none !important;
}

/* текст плашки: своя колонка, переносится ВНУТРИ неё и не выносит иконку на отдельную строку */
.ad-analytics .tlc-source > span,
.ad-analytics .ana-note > span:not(.ana-chip):not(.sbadge-source) {
  flex: 0 1 auto;
  min-width: 0;
}

/* ---------- 47.3 МЕТКИ ВНУТРИ ПОДСКАЗКИ — ТОЙ ЖЕ ВЫСОТЫ, ЧТО ЗНАЧОК ----------
   Иначе плашка с меткой была бы выше плашки со значком, а владелец просит у подсказок
   ОДНУ высоту: 20 px (значок 20 px + паддинги 10 + 10 = 40 px ровно).

   ⚠️ ПОЧЕМУ ЗДЕСЬ `height`, А НЕ ТОЛЬКО `min-height` (ловушка для правящего слой дальше).
   Часть 40 этого слоя задаёт меткам карточки `height: var(--tl-badge-h) !important`
   (`--tl-badge-h: 26px`, объявлен в части 31), а часть 33 — ещё и `min-height: 27px`.
   Явная высота с !important сильнее любого min-height, поэтому одной `min-height: 20px`
   НЕ ХВАТИЛО: замер показал у метки ровно 26 px, а плашка с ней — 46 px вместо 40 px
   (проверено _tl13_chip_probe.js: computed height 26px, min-height 20px, padding 2px 9px,
   line-height 16px). Здесь высота задаётся явно — 20 px у всех вложенных меток. */
.ad-analytics .ana-note > .ana-chip,
.ad-analytics .ana-note > .ana-tag,
.ad-analytics .ana-note > .sbadge-source-icon {
  flex: 0 1 auto !important;
  display: inline-flex !important;
  align-items: center !important;
  justify-content: center !important;
  box-sizing: border-box !important;
  height: 20px !important;
  min-height: 20px !important;
  padding: 2px 9px !important;
  font-size: 12px !important;
  line-height: 16px !important;
}

/* Телефон: длинную метку-вердикт подсказки блока «Оптимальная цена» иначе не разместить —
   у неё `white-space: nowrap` (main.css), при 390 px она шире плашки и распирает строку.
   Замер 19.09.2026 (после первой редакции части 47): плашка вырастала до 981 px, а текст
   сжимался в столбик шириной 8 px — 52 строки по одному слову. Разрешаем метке переносить
   текст и снимаем жёсткую высоту только на телефоне. */
@media (max-width: 575px) {
  .ad-analytics .ana-note > .ana-tag,
  .ad-analytics .ana-note > .ana-chip {
    height: auto !important;
    max-width: 100% !important;
    white-space: normal !important;
    text-align: center !important;
  }
}

/* значок сервиса, напечатанный прямо в подсказке (outIconInline): круг 20 px, как у значка
   подсказки — иначе плашка с ним была 42 px вместо 40 px */
.ad-analytics .ana-note > .sbadge-source-icon {
  width: 20px !important;
  padding: 0 !important;
  border-radius: 50% !important;
}

/* текст плашки: своя колонка, переносится ВНУТРИ неё и не выносит иконку на отдельную строку */

/* ---------- 47.4 ПЛАШКА ИСТОЧНИКА ВНУТРИ ПОДСКАЗКИ: БЕЗ РАМКИ И ТОЙ ЖЕ ВЫСОТЫ ----------
   Владелец: «рамки у плашек убраны совсем» (ПЕРЕДАЧА 18.09) — поэтому у вложенной плашки
   сервиса рамка снята, а вместо неё белая подложка и та же мягкая тень. Высота 20 px —
   чтобы подсказка с плашкой сервиса была ровно той же высоты, что и подсказка без неё
   (это те самые две плашки из пункта 1 задания: 40 px у обеих). */
.ad-analytics .ana-note .sbadge-source {
  flex: 0 1 auto;
  min-width: 0;
  box-sizing: border-box !important;
  min-height: 20px !important;
  padding: 0 10px 0 1px !important;
  gap: 6px !important;
  border: 0 !important;
  background: var(--surface, #ffffff) !important;
  box-shadow: var(--sh-1, 0 1px 3px rgba(27, 22, 48, .05)) !important;
  font-size: 12px !important;
  line-height: 18px !important;
}

.ad-analytics .ana-note .sbadge-source .sbadge-source-icon {
  flex: 0 0 18px !important;
  width: 18px !important;
  height: 18px !important;
}

/* ---------- 47.5 ЗАЗОРЫ ДО СОСЕДЕЙ 16-20 px ---------- */
/* соседние блоки графиков в карточке стояли ВПЛОТНУЮ (замер: .tlc -> .tlc = 0 px) */
.ad-analytics .tlc + .tlc {
  margin-top: 16px !important;
}

/* «подсказка -> карточки показателей»: часть 22 этого слоя ставила 12 px (норма 16-20) */
.ad-analytics .ana-note ~ .tlc-cards,
.ad-analytics .ana-note ~ .tlc-cards-wrap {
  margin-top: 16px !important;
}

/* Блок «Запрос доступа к аналитике»: под подсказкой идёт КНОПКА, у неё свой margin-top 16 px
   (main.css: `.ad-card-content-item .ana-note + .btn-custom`). Блок — флекс-контейнер, поэтому
   margins НЕ схлопываются и получалось 32 px (16 + 16) при норме 16-20. Убираем нижний отступ
   подсказки — зазор целиком даёт кнопка. */
.ad-card-content-item.ad-analytics.ana-acc p.ana-note:not(.ana-empty),
.ad-card-content-item.ad-analytics.ana-acc .ana-note:not(.ana-empty) {
  margin-bottom: 0 !important;
}

/* «плашка-источник -> метка статуса» в блоках соцсетей: часть 33.2.1 этого слоя ставила метке
   `margin-top: 12px`, когда у плашки отступов не было вовсе. Теперь 16 px даёт сама плашка
   (47.1), и суммарно выходило 28 px (16 внутри .tlc + 12 у метки). Обнуляем только там, где
   перед меткой стоит именно плашка-источник: если `:has()` не поддержан, правило просто не
   сработает и останется прежний вид (28 px), ничего не ломается. */
.ad-analytics .tlc:has(> .tlc-source) + .ana-chip {
  margin-top: 0 !important;
}

/* Правило части 33.2 этого слоя (`.ad-analytics .ana-table-scroll + .ana-note` с
   `padding-top:6px !important`) перекрыто частью 47.1 выше: отступы у всех подсказок
   теперь одинаковые (10 x 14), а видимый зазор под таблицей даёт margin 16 px. */
/* =====================================================================================
   48. МАСТЕР ПУБЛИКАЦИИ: ПЛАШКА РАЗДЕЛА НАД ШАГОМ 1 И ЗАЗОРЫ ВНУТРИ ВСЕХ ПЯТИ ШАГОВ
       (правка владельца по скриншоту мастера, 19.09.2026)
   -------------------------------------------------------------------------------------
   ЗАМЕЧАНИЯ ВЛАДЕЛЬЦА:
     1) «Название категории не оформлено» — над блоком «Шаг 1. Основное» стояла ГОЛАЯ
        строка «Веб-сайты»;
     2) «Слипание: между строкой категории и блоком „Шаг 1. Основное“ нет зазора»;
     3) «пройти весь мастер (шаги 1–5): найти другие слипания (зазор < 16 px) и голые
        неоформленные надписи и привести к системе».

   ЗАМЕР «ДО» (живой прогон: вход продавцом → кабинет → «Разместить лот» → раздел 440
   «Веб-сайты» → мастер, 5 шагов × 5 ширин = 25 замеров; скрипт _wc1_measure.js, отчёт
   _wc/before/report.json):
     • строка раздела — SPAN.ad-create-options-category-chain: display блок, ширина 982 px
       ВО ВСЮ СТРОКУ, высота 24 px, кегль 16 px, вес 500, трекинг normal,
       подложки НЕТ, рамки НЕТ, паддинги 0, скругление 0, тени НЕТ, контраст 17,44:1 —
       то есть голая строка текста, а не элемент оформления (замечание 1 подтверждено);
     • зазор «строка раздела → шапка шага» = 22,0 px на ВСЕХ пяти ширинах (не 0). То есть
       нулевого отступа в числах не было: строка КАЗАЛАСЬ прилипшей к плашке шага, потому
       что у неё не было ни подложки, ни собственного блока, и стояла она на 22 px ПРАВЕЕ
       плашки шага (левый край 55 против 33 на 1440 и 35 против 13 на 390). После правки
       зазор закреплён здесь явно (22 px, на телефоне 20 px) и уже не зависит от того,
       какой файл подключится позже;
     • пар с зазором < 16 px по мастеру — 100 (21 уникальная пара × 5 ширин):
       6 px «шапка шага → подсказка» во всех пяти шагах, 0 px «.ad-card-content-item →
       .adf-block» в шаге 3, 7 px «кнопка генерации текста → блок-подсказка», 8 px
       «поле → подсказка» (у подсказки в разметке inline margin-top:8px), 8/10/12/14/15 px
       внутри блоков аналитики, 12 px между карточками сервисов, 8 и 14 px в блоке
       «Подтверждение прав» (шаг 2), 12 px в блоке расчёта комиссии (шаг 5), 14 px «заголовок
       карточки → её содержимое» и 10 px между строками формы в «Контактах» (шаг 5).

   ЗАМЕР «ПОСЛЕ» (тот же прогон, отчёт _wc/final/report.json, 25 замеров):
     • плашка раздела ОДИНАКОВА на всех пяти ширинах: высота 32 px, паддинги 8 × 14,
       кегль 12,5 px / 600, трекинг 0,875 px (.07em), радиус 999 px, подложка
       rgb(239, 234, 255) = --brand-tint, текст rgb(85, 51, 216) = --brand-hover,
       КОНТРАСТ 6,27:1 (норма ≥ 4,5:1), точка 8 px, «голость» = false
       (подложка, рамка 0, паддинги и скругление на месте);
     • зазор «плашка раздела → плашка шага»: 22 px на 1440 / 1280 / 1100 / 768 и 20 px на 390;
     • левые края: плашка = первая карточка шага = ряд кнопок (Δ 0 px) на всех пяти ширинах;
       значок внутри плашки шага на 1 px левее (Δ 1 px) на 1440 / 1280 / 1100 / 768,
       на 390 у плашки шага свои паддинги (14 px), поэтому её значок на 7 px левее;
     • пар с зазором < 16 px по мастеру — 0 (было 100); наездов — 0; переполнения
       по X — 0 px на всех пяти ширинах; минимальный зазор между соседними блоками
       шага 16 px, максимальный 30 px (пары 20 / 22 / 24 / 30 px не изменились);
     • все 25 прогонов (5 шагов × 5 ширин) открылись настоящим кликом по чипу шага,
       страницы мастера — HTTP 200, дельта журнала — 0 строк, линт/ядро/гигиена чисто.

   48.1 ВЫБРАННЫЙ ВАРИАНТ — ПЛАШКА-НАДЗАГОЛОВОК (как «АНАЛИТИКА» на главной), а НЕ подзаголовок
   «Раздел: Веб-сайты». Почему: подзаголовок остаётся такой же голой строкой текста, то есть
   замечание 1 («не оформлено») он не закрывает — поменялся бы только текст. Плашка-надзаголовок
   уже есть в системе (.tl-eyebrow на главной и на статичных страницах), поэтому мастер получает
   тот же элемент, а не «похожий»: та же подложка --brand-tint, тот же текст --brand-hover,
   пилюля, высота 32 px, паддинги 8 × 14, кегль 12,5, трекинг .07em, точка 8 px (геометрия —
   часть 38.1 этого слоя). Плашка при этом ОСТАЁТСЯ КЛИКАБЕЛЬНОЙ: по разметке ad.js клик по
   `.ad-create-options-category-chain` открывает экран выбора раздела, поэтому курсор pointer
   и мягкая подсветка при наведении сохранены (поведение не менялось, только вид).

   48.2 ЛЕВЫЙ КРАЙ ПЛАШКИ = ЛЕВЫЙ КРАЙ КАРТОЧЕК ШАГА. Плашка стоит в том же потоке, что и
   карточки, и получает те же 22 px отступа контейнера шага: левый край 55 px на 1440 и 35 px
   на 390 — ровно как у карточек шага (55 / 35) и у ряда кнопок (55 / 35), Δ 0 px.
   ПЛАШКА ШАГА как полоса начинается на 33 px (13 px на телефоне) — это её собственная, более
   широкая полоса «во всю ширину» (см. комментарий AdWizard::outStyles к `.wiz-step`), внутри
   неё значок шага стоит на 54 px, то есть Δ 1 px от нашей плашки. Полосу шага здесь НЕ двигаем:
   это разметка шага, а не оформление раздела, и её ширина — отдельное решение владельца.

   48.3 ЗАЗОРЫ ВНУТРИ ШАГОВ. Правило одно: два соседних СМЫСЛОВЫХ блока мастера разделены
   не меньше 16 px. Значения заданы через margin-top !important у соседа, поэтому работают
   поверх стилей самого мастера: AdWizard::outStyles печатает свой <style> в ТЕЛЕ страницы,
   то есть ПОЗЖЕ этого слоя, и без !important проигрывает по порядку при равной специфичности.
   Верхний отступ НЕ увеличивает уже большие зазоры: соседние margin'ы схлопываются (браузер
   берёт максимум), поэтому пары с 20 / 22 / 24 / 30 px остались ровно такими же —
   это проверено повторным замером после правки.
   ===================================================================================== */

/* ---------- 48.1 ПЛАШКА-НАДЗАГОЛОВОК РАЗДЕЛА (та же геометрия, что у .tl-eyebrow) ---------- */
.wiz-step > .ad-create-options-category-chain {
  display: inline-flex !important;
  align-items: center !important;
  gap: 9px !important;
  width: auto !important;
  max-width: calc(100% - 44px);
  height: 32px !important;
  min-height: 32px !important;
  padding: 8px 14px !important;
  border: 0 !important;
  border-radius: var(--r-pill, 999px) !important;
  background: var(--brand-tint, #efeaff) !important;
  color: var(--brand-hover, #5533d8) !important;
  font-size: 12.5px !important;
  font-weight: 600 !important;
  line-height: 1.1 !important;
  letter-spacing: .07em !important;
  text-transform: uppercase !important;
  text-decoration: none !important;
  box-shadow: none !important;
  white-space: normal;
  cursor: pointer;
}

/* точка перед названием раздела — тот же элемент, что у надзаголовков главной
   (`.tl-home .tl-eyebrow .tl-dot`): 8 px, цвет --brand-2) */
.wiz-step > .ad-create-options-category-chain::before {
  content: "" !important;
  flex: 0 0 8px !important;
  width: 8px !important;
  height: 8px !important;
  border-radius: 50% !important;
  background-color: var(--brand-2, #a07bff) !important;
}

/* плашка кликабельна (ad.js открывает по ней выбор раздела) — при наведении она
   становится насыщеннее, как остальные пилюли сервиса; рамок и подчёркиваний нет */
.wiz-step > .ad-create-options-category-chain:hover,
.wiz-step > .ad-create-options-category-chain:focus-visible {
  background: var(--brand-tint-2, #e2d9ff) !important;
  text-decoration: none !important;
}

/* ---------- 48.2 ЗАЗОР «ПЛАШКА РАЗДЕЛА → ПЛАШКА ШАГА»: 22 px (на телефоне 20 px) ---------- */
.wiz-step > .ad-create-options-category-chain {
  margin-top: 0 !important;
  margin-bottom: 22px !important;
  margin-left: 22px !important;
  margin-right: 22px !important;
}

@media (max-width: 575px) {
  .wiz-step > .ad-create-options-category-chain { margin-bottom: 20px !important; }
}

/* ---------- 48.3 ЗАЗОРЫ ВНУТРИ ШАГОВ: БОЛЬШЕ 16 px ---------- */

/* 48.3.1 «заголовок карточки → её содержимое»: было 8 px (схлопывание 8 и 14) и 6 px
   у заголовка «Адрес сайта» (inline-стиль в разметке блока ссылки) → 16 px */
.wiz-step .ad-create-options-container-item-title {
  margin-bottom: 16px !important;
}

/* 48.3.2 подсказка мастера: у подсказки «Название видят покупатели…» в разметке стоит
   inline margin-top:8px, у остальных верхний отступ 0; было 6 px до заголовка шага
   во всех пяти шагах и 8 px до поля → 16 px */
.wiz-step .wiz-step-hint {
  margin-top: 16px !important;
}

/* 48.3.3 блок-подсказка внутри карточки: было 7 px до кнопки «Сгенерировать текст» → 16 px */
.wiz-step .ad-create-options-container-item .wiz-note {
  margin-top: 16px !important;
}

/* 48.3.4 строки формы друг под другом (шаг 5, «Контакты»): было 10 px → 16 px */
.wiz-step .ad-create-options-container-item > .row + .row {
  margin-top: 16px !important;
}

/* 48.3.5 блоки шага 3 (аналитика) и карточки сервисов: было 8 / 10 / 12 / 14 / 15 px → 16 px */
.wiz-step .adf-block > * + * {
  margin-top: 16px !important;
}

/* 48.3.6 внутри карточки сервиса аналитики (заголовок → подсказка): было 10 px → 16 px */
.wiz-step .ana-service > * + * {
  margin-top: 16px !important;
}

/* 48.3.7 блок «Подтверждение прав» (шаг 2): было 8 и 14 px → 16 px */
.wiz-step .tl-own > * + * {
  margin-top: 16px !important;
}

/* 48.3.8 блок расчёта комиссии (шаг 5): было 12 px → 16 px */
.wiz-step .wiz-money > * + * {
  margin-top: 16px !important;
}

/* 48.3.9 блок «Кто видит ссылку на сайт»: подпись → чипы 14 px и чип → чип 12 px
   (это ЗАЗОРЫ flex-контейнера, а не отступы) → 16 px по вертикали; по горизонтали
   оставлены прежние 12 px */
.wiz-step .lk-vis {
  row-gap: 16px !important;
}

/* 48.3.10 блок продавца в шаге 3: было 14 px и 0 px (блоки стояли вплотную) → 16 px */
.wiz-step .adf-seller > * + * {
  margin-top: 16px !important;
}

/* 48.3.11 ТРИ ПАРЫ, КОТОРЫЕ ОБЫЧНОЙ СПЕЦИФИЧНОСТИ НЕ ПОДДАЛИСЬ.
   Здесь мало «просто !important»: у этих правил селектор с #id или они лежат во встроенном
   <style> компонента, который печатается в ТЕЛЕ страницы (то есть позже этого слоя), поэтому
   при равной специфичности они перебивали наши правила (проверено обходом CSSOM, _wc4_why.js):
     • #analyticsReadiness .ana-service-slot            { margin: 0 0 12px !important } (1,1,0)
     • #analyticsReadiness .ana-service-slot + .ana-service-slot { margin-top: 0 !important } (1,2,0)
     • #analyticsReadiness .ana-service-hint            { margin-top: 10px !important } (1,1,0)
     • .adf-btn-row + .adf-block-hint (встроенный <style>) { margin-top: 14px !important } (0,2,0)
   Поэтому селекторы взяты на ступень специфичнее: с #analyticsReadiness (1,2,0 / 1,3,0) и с
   элементом p в селекторе (0,2,1). Карточки сервисов — 12 → 16 px, подсказка внутри карточки
   сервиса — 10 → 16 px, подсказка под рядом кнопок — 14 → 16 px. */

.wiz-step #analyticsReadiness .ana-service-slot:not(:last-child) {
  margin-bottom: 16px !important;
}

.wiz-step #analyticsReadiness .ana-service-slot + .ana-service-slot {
  margin-top: 16px !important;
}

.wiz-step #analyticsReadiness .ana-service-hint {
  margin-top: 16px !important;
}

.wiz-step .adf-block > p.adf-block-hint,
.wiz-step .adf-block > .adf-btn-row + .adf-block-hint {
  margin-top: 16px !important;
}

/* 48.3.12 панель инструкции подтверждения прав (шаг 2): «DNS TXT-запись» → подсказка
   8 px, подсказка → нумерованный список 6 px → 16 px. Стили этого блока печатает сам
   компонент AdOwnership (свой <style> в теле страницы), поэтому нужен !important. */
.wiz-step .tl-own-instr > * + * {
  margin-top: 16px !important;
}

/* 48.3.13 плитки способов подтверждения прав: зазор сетки 8 px → 16 px по вертикали
   (на 1440 плитки стоят в один ряд, поэтому по горизонтали зазор не менялся) */
.wiz-step .tl-own-methods {
  row-gap: 16px !important;
}

/* 48.4 ЧТО ОСТАВЛЕНО КАК ЕСТЬ (не «слипание», а пара «заголовок + подпись» одной карточки):
   имя сервиса → его пояснение в карточках готовности аналитики (`.ana-service-name` →
   `.ana-service-desc`, замер 4,0 px на шаге 3). Это НЕ два блока: пара живёт внутри одной
   текстовой колонки карточки (.ana-slot-text) и её значение задано системой карточек
   аналитики (main.css: `#analyticsReadiness .ana-service-desc { margin-top: 4px }`).
   В замер пар «блок ↔ блок» эта пара не входит по определению (см. _wc1_measure.js, SCOPES). */

/* =====================================================================================
   49. §SEO4. ЗАЗОР ПОД БЛОКОМ SEO-ТЕКСТА: НЕ ПРИЖИМАТЬ К ПОДВАЛУ (18.09.2026)
   -------------------------------------------------------------------------------------
   Владелец (скриншот страницы категории): «блок SEO-текста внизу страницы прижат
   к разделительной линии».

   БЫЛО (замер живым Chrome, скрипт _deploy/tradelot_tools/_tlseo4_gap.js, отчёт
   _tlseo4/_tlseo4_gap_before.txt; 11 страниц × 5 ширин 1440/1280/1100/768/390):
   низ .home-seo-text совпадал с верхом <footer> ровно — зазор 0,0 px на ВСЕХ страницах
   категорий, margin-bottom у блока 0. Отсюда и ощущение «текст лежит на линии».

   СТАЛО: собственный нижний зазор блока — 56 px на десктопе, 40 px на планшете,
   36 px на телефоне (требование владельца: 40–64 px / 32–40 px).

   Почему margin, а не padding: зазор нужен МЕЖДУ карточкой и подвалом, а padding
   увеличил бы саму карточку и «оторвал» бы текст от её нижней рамки.
   ===================================================================================== */

.home-seo-text {
  margin-bottom: 56px;
}

@media (max-width: 991px) {
  .home-seo-text {
    margin-bottom: 40px;
  }
}

@media (max-width: 575px) {
  .home-seo-text {
    margin-bottom: 36px;
  }
}

/* 49.1. §SEO4. ГЛАВНАЯ: БЛОК ЛЕЖИТ В .tl-section — НЕ УДВАИВАЕМ ЗАЗОР
   -------------------------------------------------------------------------------------
   Замер живым Chrome (_deploy/tradelot_tools/_tlseo4_probe.js): на главной низ карточки
   .home-seo-text отстоит от подвала на 56 px (наш отступ) + 72 px (собственный
   padding-bottom секции .tl-section-tight) = 128 px, тогда как на страницах категорий
   ровно 56 px. Числа приводим к одному виду: внутри .tl-section отступ самой карточки
   гасим, а секцию выравниваем по 56 / 40 / 36 px (как в категориях). :has() в этом файле
   уже используется (см. часть 36), так что правило безопасно: если браузер его не знает,
   остаётся прежний отступ секции 72 px — вёрстка не ломается. */

.tl-section .home-seo-text {
  margin-bottom: 0;
}

.tl-section:has(> .container > .home-seo-text) {
  padding-bottom: 56px;
}

@media (max-width: 991px) {
  .tl-section:has(> .container > .home-seo-text) {
    padding-bottom: 40px;
  }
}

@media (max-width: 575px) {
  .tl-section:has(> .container > .home-seo-text) {
    padding-bottom: 36px;
  }
}

/* >>> ЧАСТЬ 50 (18.09.2026): ПУСТЫЕ СОСТОЯНИЯ — ТЕКСТ НЕ ПРИЛИПАЕТ К РАМКЕ <<<
   Владелец показал страницу магазина: в блоках «Лотов нет» и «Отзывов нет» текст упирался
   в пунктирную рамку снизу (внутренних отступов у контейнера не было вообще).
   Даём нормальные отступы и центрирование — как у пустых состояний кабинета (.tl-empty). */
.not-found-title-container{
  padding: 22px 18px !important;
  display: flex !important;
  flex-direction: column !important;
  align-items: center !important;
  justify-content: center !important;
  gap: 8px !important;
  min-height: 96px !important;
}
.not-found-title-container > p{
  margin: 0 !important;
  text-align: center !important;
}
.not-found-title-container .not-found-title-container-image{
  margin: 0 !important;
  line-height: 1 !important;
}
@media (max-width: 575px){
  .not-found-title-container{ padding: 18px 14px !important; min-height: 84px !important; }
}
/* >>> КОНЕЦ ЧАСТИ 50 >>> */

/* ---------- 51.1 ЯКОРЬ И ПЛАШКА ПОДСКАЗКИ ---------- */
.wiz-51-anchor { color: inherit; }
.wiz-side.wiz-side > .wiz-side-note {
  display: block !important;
  margin: 14px 0 0 !important;
  padding: 12px !important;
  border: 0 !important;
  border-radius: 12px !important;
  background: var(--surface-2, #f6f4fd) !important;
  box-shadow: var(--sh-1, 0 1px 3px rgba(27, 22, 48, .05)) !important;
  font-size: 13px !important;
  line-height: 1.45 !important;
  color: var(--muted, #6c6883) !important;
}
.wiz-side.wiz-side > .wiz-side-note > div {
  margin-top: 0 !important;
  white-space: normal !important;
  overflow: visible !important;
  text-overflow: clip !important;
}
@media (max-width: 575px) {
  .wiz-side.wiz-side > .wiz-side-note { padding: 12px !important; }
}

   ПОЧЕМУ ПРАВИЛА СТОЯТ ПЕРВЫМИ, А ПОЯСНЕНИЯ — В КОНЦЕ (найдено замером 19.09.2026).
   Первая версия этой части была написана «как принято»: большой пояснительный комментарий,
   затем правила. Живой замер показал, что правило 51.2 (плашка) в этом случае НЕ применяется:
   в отданном браузеру файле оно есть (проверено и обычным запросом, и запросом с обходом
   кеша), но в разобранном листе (document.styleSheets → CSSOM) его нет — а следующее правило
   51.3 (`.wiz-side-note > div`) разбирается нормально. Замер: _ws21_tail.js —
   в хвосте листа последние правила идут «…@media (max-width: 575px) { .not-found-title-container … }»
   → «.wiz-side.wiz-side > .wiz-side-note > div» → «@media (max-width: 575px) { .wiz-side…note { padding: 12px } }»,
   то есть ровно одно правило (плашка) из середины выпало. Следствие в живом виде:
   на 1440 px плашка оставалась БЕЗ внутренних отступов (padding 12px 0 0), а на 390 px
   работала только медиа-правка (padding 12px) — то есть «текст прижат к краю» на десктопе.
   Лечение: перед правилами поставлен безвредный «якорь» (`.wiz-51-anchor` — такого класса
   в разметке нет), правила идут сразу за ним и БЕЗ комментария между ними, а весь текст
   пояснений перенесён СЮДА, в конец части. После этого все три правила разбираются и
   применяются на всех ширинах (проверено повторным замером и разбором CSSOM).
   ⚠️ Если в этом слое снова появится правка, которая «не работает, хотя есть в файле», —
   первым делом проверить CSSOM: _deploy/tradelot_tools/_ws21_tail.js.

/* =====================================================================================
   51. МАСТЕР: СТРОКА «* ПОЛЯ СО ЗВЁЗДОЧКОЙ ОБЯЗАТЕЛЬНЫ» В ПАНЕЛИ «ПОДГОТОВКА
       К ПУБЛИКАЦИИ» — ПЛАШКА, ОТСТУПЫ, ВЫРАВНИВАНИЕ (19.09.2026, правка владельца)
   -------------------------------------------------------------------------------------
   ВЛАДЕЛЕЦ (скриншот правой панели): «это ещё в работе? где звёздочка и текст криво» —
   строка лежит в скруглённой плашке внизу панели, прижата/сдвинута относительно
   остальных строк панели, и самого символа «*» в фразе не видно.

   ЗАМЕР «ДО» (живой прогон Chrome через CDP, _ws5_plate.js, 1440 и 390):
     • плашка подсказки — это КАРТОЧКА из этого же слоя (часть 1: у `.wiz-side-note`
       подложка --card-bg, скругление 20 px и мягкая тень). Замер: 286 × 31,8 px,
       подложка rgb(255,255,255), скругление 20 px, тень rgba(27,22,48,.07) 0 6px 18px;
     • ПАДДИНГИ плашки: `12px 0px 0px` — по горизонтали НОЛЬ, поэтому ТЕКСТ СТОЯЛ
       ВПРИТЫК к левому краю плашки (текст x=1105 = край плашки x=1105) и вплотную
       к низу (низ текста 623,6 при низе плашки 624,4). Это и есть «прижата»;
     • относительно текста соседних блоков панели строка стояла на 45 px ЛЕВЕЕ
       (заголовки блоков шагов и строка «Осталось: …» — x=1150, содержимое блоков
       начинается на x=1117 = край панели + 12 px внутреннего отступа карточки);
     • сверху была лишняя линия-разделитель (`border-top: 1px`) поверх скруглённой
       плашки — это и есть «криво» на скриншоте;
     • САМ СИМВОЛ «*» в разметке ЕСТЬ: живой HTML — «* Поля со звёздочкой обязательны»,
       ширина текста со звёздочкой 214,6 px против 206,3 px без неё (символ занимает
       8,3 px и рисуется). Пропадал он только в языках без своего content.tr: там
       подставлялся запасной `storage/translations/default.tr`, а в нём строка была
       БЕЗ звёздочки (правка 51.4).

   СТАЛО (замер «после», _ws5_plate.js after, 1440 и 390):
     • плашка системы — подложка --surface-2, скругление 12 px, мягкая тень --sh-1,
       рамок нет (тот же вид, что у плашек-подсказок части 47);
     • внутренние отступы 12 px по горизонтали И по вертикали: текст не прижат
       к краю плашки и не прижат к её низу; 12 px по горизонтали — ровно тот же отступ,
       что у карточек шагов, поэтому текст подсказки встаёт на одну левую линию с их
       содержимым (1117 = 1105 + 12);
     • левый край САМОЙ ПЛАШКИ = левому краю шапки панели и блоков шагов (Δ 0 px);
     • лишняя линия-разделитель сверху убрана — плашка сама отделяет блоки;
     • зазор «последний блок шага → плашка» 14 px (норма владельца 12–16), до низа
       панели 16 px на десктопе и 12 px на телефоне (внутренний отступ панели);
     • кегль 13 px, межстрочный 1,45 — как у подписей панели; перенос строк разрешён,
       обрезки нет ни на одной ширине (замер: внутренняя обрезка 0, обрезка блока 0);
     • контраст текста подсказки 4,89:1 (норма ≥ 4,5:1): цвет --muted на подложке
       --surface-2, одинаков на всех пяти ширинах;
     • итоговая строка целиком: «* Поля со звёздочкой обязательны»; ширина текста
       со звёздочкой 214,6 px против 206,3 px без неё — символ «*» занимает 8,3 px
       и нарисован, это и есть ответ на «где звёздочка»;
     • плашка одинакова на 1440 / 1280 / 1100 / 768 / 390: высота 42,8 px, паддинги
       12 px, скругление 12 px, подложка rgb(246,244,253), кегль 13 px, цвет rgb(108,104,131).

   51.4 ЗВЁЗДОЧКА ВО ВСЕХ ИСТОЧНИКАХ ТЕКСТА (правка перевода, не кода):
   фраза живёт под ключом `tr_fd244b6718a0c69d5caa3f8aec95b893` (md5 исходного текста
   «Поля со звёздочкой обязательны») — это ключ в `storage/translations/<iso>/content.tr`
   и в таблице `uni_translations_default_content` (`type=content`). До правки:
     • uni_translations_default_content (id=4524) — «* Поля со звёздочкой обязательны» (есть);
     • storage/translations/ru/content.tr — «* Поля со звёздочкой обязательны» (есть);
     • storage/translations/en/content.tr — «* Fields marked with an asterisk are required» (есть);
     • storage/translations/default.tr — «Поля со звёздочкой обязательны» (НЕТ звёздочки) ←
       это запасной файл для языков без своего content.tr, из него звёздочка и пропадала.
   В `default.tr` звёздочка добавлена — теперь фраза начинается с «*» во ВСЕХ четырёх
   источниках, «сырой» ключ нигде не печатается.

   51.5 ОБЯЗАТЕЛЬНЫЕ ПОЛЯ ПАНЕЛИ (проверка владельца «у обязательных звёздочка есть,
   у необязательных — нет»; замер по живому HTML, _ws8_steps.php):
     • шаг 1 «Основное» — Адрес сайта, Название лота, Описание, Что входит в лот —
       НЕ обязательные (в форме звёздочек нет) → в панели без звёздочки;
     • шаг 2 «Подтверждение прав» — «Права на актив подтверждены» — не обязательное;
     • шаг 3 «Аналитика и финансы» — четыре сервиса — не обязательные;
     • шаг 4 «Контент и характеристики» — ВСЕ ШЕСТЬ полей обязательные: «Возраст (мес.)*»,
       «Присутствие в каталогах*», «Уникальность текста*», «Тематика*», «CMS*», «Язык*»
       (в форме это `<span class="params-form-item-label-required">*</span>` при
       `uni_ads_filters.required = 1`; в панели «Осталось: Возраст (мес.)*»);
     • шаг 5 «Условия продажи» — «Цена указана», «Блиц-цена» — не обязательные.
   В базе у категории 440 помечено обязательными 8 фильтров; ещё два из них —
   «Расходы (руб. мес.)» (#2) и «URL сайта» (#13) — в шаге 4 НЕ выводятся (первые два
   относятся к финансам шага 3, адрес сайта спрашивается в шаге 1), поэтому их подписи
   печатают другие блоки, и звёздочки там нет. Это отдельный вопрос к владельцу:
   либо снять у них `required` в базе, либо помечать их и в своих блоках.
   ===================================================================================== */

/* ---------- 52.1 ЗАЗОРЫ ПРАВОЙ ПАНЕЛИ, ПОЛОСЫ ШАГОВ И ПЛАШКИ РАЗДЕЛА ---------- */
.wiz-52-anchor { color: inherit; }
.wiz-side.wiz-side > .wiz-side-head { margin-bottom: 16px !important; }
.wiz-side.wiz-side > .wiz-side-percent { margin-top: 16px !important; }
.wiz-side.wiz-side > .wiz-side-steps { margin-top: 16px !important; }
.wiz-side.wiz-side > .wiz-side-note { margin-top: 16px !important; }
.wiz-side.wiz-side .wiz-side-step { row-gap: 16px !important; }
.wiz-nav.wiz-nav { row-gap: 16px !important; }
.wiz-step > .ad-create-options-category-chain {
  display: flex !important;
  width: fit-content !important;
  max-width: calc(100% - 44px) !important;
}

/* =====================================================================================
   52. ЗАЗОРЫ В МАСТЕРЕ: ПРАВАЯ ПАНЕЛЬ, ПОЛОСА ШАГОВ, ПЛАШКА РАЗДЕЛА (19.09.2026)
   -------------------------------------------------------------------------------------
   ВЛАДЕЛЕЦ: «зазоры в мастере всё ещё не сработали — блоки прилипли друг к другу».
   Прошлый скан (_wc1_measure.js) давал «пар < 16 px = 0», потому что НЕ заходил внутрь
   правой панели «Подготовка к публикации» и в полосу плашек шагов. Новый скан
   (_wz30_gaps.js: CDP, геометрия + elementFromPoint прямо в зазоре + правила через
   CSS.getMatchedStylesForNode) нашёл там пять пар. Таблица «до → после» (замер 1440;
   на 1280 / 1100 / 768 / 390 те же числа):

     пара блоков                                                  было    стало
     ─────────────────────────────────────────────────────────────────────────────
     «Подготовка к публикации» → блок процента 0%                  10 px   16 px
     блок процента 0% → список шагов 1…5                           10 px   16 px
     список шагов 1…5 → подпись «* Поля со звёздочкой…»            14 px   16 px
     счётчик шага «0/4» → строка «Осталось: …» (в карточке шага)    2 px   16 px
     плашка шага → плашка шага (когда ряд переносится в 2 строки)  12 px   16 px
     плашка раздела «ВЕБ-САЙТЫ» → карточка «Шаг 1. Основное»       22 px   22 px
     подпись «* Поля со звёздочкой…» → низ панели                  17 px   17 px

   ПОЧЕМУ НЕ РАБОТАЛИ ПРЕЖНИЕ ЗНАЧЕНИЯ (ответ на «margin-bottom не действует»):
     • у правой панели верхние отступы задавала тема (`[class*="wiz-side"] > * + *`
       { margin-top: 16px }), но её перебивали стили самого мастера, которые печатаются
       в ТЕЛЕ страницы ПОЗЖЕ этого слоя (`.wiz-side-percent{margin-top:0}` и подобные),
       а у шапки панели был свой `margin-bottom: 10px`. Поэтому здесь отступ задан
       у всех четырёх блоков панели явно и с `!important` — он больше не зависит от
       порядка подключения файлов;
     • внутри карточки шага счётчик и строка «Осталось» стоят в grid-сетке с `gap: 2px 8px`:
       это ЗАЗОР СЕТКИ, а не отступы, поэтому никакой `margin` его не менял — правится
       только `row-gap` у самой карточки;
     • полоса плашек шагов — flex с `gap: 12px`; при переносе на вторую строку вертикальный
       зазор 12 px тоже давал `gap`, поэтому правится `row-gap` у полосы.

   ПЛАШКА РАЗДЕЛА — зазор 20–24 px ПО ФАКТУ (проверка требования владельца).
   Замер: между низом плашки и верхом карточки «Шаг 1. Основное» ровно 22 px, и правило
   ДЕЙСТВУЕТ: через CSS.getMatchedStylesForNode видно
   `.wiz-step > .ad-create-options-category-chain { margin-top: 0; margin-bottom: 22px !important }`,
   вычисленный `margin` элемента = `0px 22px 22px`. Дополнительно зазор проверен «по пикселям»:
   в полосе между плашкой и карточкой взяты 5 точек, в каждой `elementFromPoint` вернул сам
   контейнер шага — полоса действительно пустая, её ничто не перекрывает.
   Для устойчивости плашка переведена с `inline-flex` на `flex` (блочный бокс): у строчного
   бокса низ зависит от строчного бокса строки, у блочного зазор равен ровно margin-bottom.
   ===================================================================================== */

.wiz-53-anchor{--tl-53:0}
.not-found-title-container{padding:22px 18px !important;display:flex !important;flex-direction:column !important;align-items:center !important;justify-content:center !important;gap:8px !important;min-height:96px !important;}
.not-found-title-container > p{margin:0 !important;text-align:center !important;}
.not-found-title-container .not-found-title-container-image{margin:0 !important;line-height:1 !important;}
@media (max-width:575px){.not-found-title-container{padding:18px 14px !important;min-height:84px !important;}}
/* >>> ЧАСТЬ 53 (18.09.2026): ПУСТЫЕ СОСТОЯНИЯ — ТЕКСТ НЕ ПРИЛИПАЕТ К РАМКЕ <<<
   Это переиздание части 50: та была затёрта параллельным исполнителем, который перезаписывал
   файл слоя «на месте». Владелец показал страницу магазина — в блоках «Лотов нет» и «Отзывов нет»
   текст упирался в пунктирную рамку (внутренних отступов у контейнера не было).
   ВАЖНО про порядок: сначала безвредный якорь, затем правила, и только ПОТОМ пояснение —
   Chrome выбрасывает первое правило после большого комментария (находка исполнителя мастера).
   >>> КОНЕЦ ЧАСТИ 53 >>> */

/* ---------- 53.1 ВОЗДУХ НАД ПЛАШКОЙ РАЗДЕЛА И ЗВЁЗДОЧКА В СТРОКЕ ---------- */
.wiz-53-anchor { color: inherit; }
.wiz-step > .ad-create-options-category-chain { margin-top: 18px !important; }
@media (max-width: 575px) {
  .wiz-step > .ad-create-options-category-chain { margin-top: 16px !important; }
}

/* =====================================================================================
   53. ПЛАШКА РАЗДЕЛА: ВОЗДУХ ОТ ВЕРХНЕЙ ГРАНИЦЫ БЛОКА + ЗВЁЗДОЧКА В СТРОКЕ (19.09.2026)
   -------------------------------------------------------------------------------------
   ВЛАДЕЛЕЦ (скриншот, обведены плашка «ВЕБ-САЙТЫ» и блок «Шаг 1. Основное»):
   «ну вот же.. прилипание к общему блоку.. зазора нет!» + «а текст также криво со звёздочкой».

   ЗАМЕР «ДО» (_wz40_air.js, живой прогон 1440):
     • «свой блок» плашки найден обходом предков: ближайший предок с видимой рамкой/подложкой —
       SECTION.wiz-step.active (рамка 1 px, подложка #fff, скругление 20 px, padding 0 0 22 px).
       Отступ сверху у него 0, поэтому ВОЗДУХ «верхняя граница блока → плашка» = **0 px**
       (1 px от внешней рамки). Прошлая правка давала только зазор СНИЗУ (22 px), а сверху
       плашка стояла вплотную к рамке карточки — именно это владелец и видел;
     • зазор «плашка → карточка шага» = 22 px (его не трогаем, он в норме 20–24);
     • звёздочка: Range отдаёт рамку СТРОКИ, поэтому чернила глифов измерены метриками
       шрифта (canvas TextMetrics, Manrope 13 px): у «*» чернила лежат от +5 до +10 px НАД
       базовой линией (низ знака на 5 px выше базовой), у «Поля» — от −1 до +10 px.
       То есть звёздочка висит в верхней половине строки и не касается базовой линии —
       это рисунок самого знака, а не ошибка кегля.

   СТАЛО:
     • воздух сверху: `margin-top: 18px` у плашки (на телефоне 16 px). Первым ребёнком
       плашка стоит в карточке с рамкой 1 px, поэтому margin не «схлопывается» с родителем
       и зазор получается ровно заданным. Замер: воздух 18 px (19 px от внешней рамки),
       зазор до карточки шага 22 px (20 px на телефоне);
     • звёздочка стала ЧАСТЬЮ строки: фраза теперь «Поля со звёздочкой (*) обязательны».
       Метрики шрифта: группа «(*)» занимает от −3 до +11 px относительно базовой линии
       (скобки опускаются ниже базовой), поэтому строка читается ровно, а звёздочка
       стоит внутри скобок и не «висит» отдельно слева. Текст — как и раньше — приходит
       из переводов (ключ tr_fd244b6718a0c69d5caa3f8aec95b893: default.tr, ru/content.tr,
       en/content.tr и uni_translations_default_content, id 4524), «сырых» ключей нет.

   ⚠️ Про левый край: плашка стоит на левой линии шапки панели и блоков шагов (1105 = 1105,
   Δ 0 px), а её текст — на линии содержимого карточек шагов (1117 = 1105 + 12 px
   внутреннего отступа, ровно как у карточек). Внутренние 12 px у плашки — требование
   владельца из прошлой правки («нормальные внутренние отступы 12–14 px», иначе текст
   прижат к краю плашки), поэтому текст и не может стоять на самой линии рамки панели.
   ===================================================================================== */

.wiz-54-anchor{--tl-54:0}
.wiz-step > .ad-create-options-category-chain{margin-top:18px !important;margin-bottom:22px !important;}
@media (max-width:575px){.wiz-step > .ad-create-options-category-chain{margin-top:16px !important;margin-bottom:20px !important;}}
/* >>> ЧАСТЬ 54 (18.09.2026): ВОЗДУХ НАД ПЛАШКОЙ РАЗДЕЛА В МАСТЕРЕ <<<
   Владелец: «ну что — где зазоры?» Плашка «ВЕБ-САЙТЫ» стояла вплотную к верхней границе блока,
   потому что в правилах мастера было margin-top: 0 (строка выше по файлу).
   Теперь: 18 px сверху (16 px на телефоне) и 22 px до карточки шага (20 px на телефоне).
   Порядок (якорь → правила → пояснение) сохранён: Chrome выбрасывает первое правило после большого комментария.
   >>> КОНЕЦ ЧАСТИ 54 >>> */

.wiz-55-anchor{--tl-55:0}
.wiz-step{padding-top:18px !important;}
.wiz-step > .ad-create-options-category-chain{margin-top:0 !important;}
@media (max-width:575px){.wiz-step{padding-top:16px !important;}}
/* >>> ЧАСТЬ 55 (18.09.2026): ВОЗДУХ НАД КАРТОЧКОЙ ШАГА ДЛЯ ВСЕХ ШАГОВ МАСТЕРА <<<
   Владелец показал шаг 2: карточка «Шаг 2. Подтверждение прав» стоит вплотную к верхней границе
   общего блока (на шагах 2–5 плашки раздела нет, поэтому воздух не создавался).
   Решение — воздух у самого контейнера шага: .wiz-step { padding-top: 18px } — работает для ВСЕХ шагов
   (1–5) одинаково. У плашки раздела (шаг 1) верхний margin обнулён, чтобы не удваивался зазор.
   Порядок (якорь → правила → пояснение) сохранён: Chrome выбрасывает первое правило после большого комментария.
   >>> КОНЕЦ ЧАСТИ 55 >>> */

.wiz-56-anchor{--tl-56:0}
.wiz-step .wiz-step-head{margin-left:22px !important;margin-right:22px !important;}
.wiz-step .wiz-step-hint{max-width:none !important;width:auto !important;}
@media (max-width:991px){.wiz-step .wiz-step-head{margin-left:16px !important;margin-right:16px !important;}}
/* >>> ЧАСТЬ 56 (18.09.2026): БОКОВОЙ ВОЗДУХ У ЗАГОЛОВКОВ ШАГОВ + ШИРИНА ПОДПИСИ <<<
   Владелец: «у блоков „Шаг 1“, „Шаг 2“ … ты забыл воздух слева и справа» и «на 3 шаге текст влево,
   а на остальных нормально на всю длину».
   1) В стилях мастера (AdWizard::outStyles) есть правило
      .wiz-step > *:not(.wiz-step-head) { margin-left/right: 22px } — то есть ВСЁ, КРОМЕ заголовка шага,
      получает боковые отступы, а сам заголовок идёт во всю ширину. Здесь это выравнивается.
   2) Подпись шага где-то ограничена по ширине (max-width) — на шаге 3 из-за этого текст шёл «в левый угол»;
      здесь ограничение снято, подпись занимает всю ширину, как на остальных шагах.
   Порядок (якорь → правила → пояснение) сохранён: Chrome выбрасывает первое правило после большого комментария.
   >>> КОНЕЦ ЧАСТИ 56 >>> */

.wiz-57-anchor{--tl-57:0}
.not-found-title-container.not-found-title-container{
  box-sizing:border-box !important;
  display:flex !important;
  flex-direction:column !important;
  align-items:center !important;
  justify-content:center !important;
  text-align:center !important;
  gap:10px !important;
  padding:24px 22px !important;
  min-height:96px !important;
  background:var(--surface-2, #f6f4fd) !important;
}
.not-found-title-container.not-found-title-container > p{
  margin:0 0 16px !important;
  max-width:100% !important;
  text-align:center !important;
}
.not-found-title-container.not-found-title-container > p:last-child{ margin-bottom:0 !important; }
.not-found-title-container.not-found-title-container > .not-found-title-container-image{
  margin:0 !important;
  line-height:1 !important;
}
.not-found-title-container.not-found-title-container > .btn-custom,
.not-found-title-container.not-found-title-container > .btn-custom-mini,
.not-found-title-container.not-found-title-container > .btn-custom-big{
  margin:0 !important;
  max-width:100% !important;
  white-space:normal !important;
}
@media (max-width:575px){
  .not-found-title-container.not-found-title-container{ padding:22px !important; min-height:84px !important; }
}
.tl-empty.tl-empty{
  box-sizing:border-box !important;
  gap:10px !important;
  padding:32px 24px !important;
}
.tl-empty.tl-empty > .btn-custom,
.tl-empty.tl-empty > .btn-custom-mini,
.tl-empty.tl-empty > .btn-custom-big{ margin-top:6px !important; }
.tl-empty.tl-empty > .tl-empty-image,
.tl-empty.tl-empty > .tl-empty-icon{ margin:0 !important; }
.tl-empty.tl-empty > .tl-empty-text{ margin:0 !important; }
@media (max-width:991px){
  .tl-empty.tl-empty{ padding:28px 22px !important; }
}
@media (max-width:575px){
  .tl-empty.tl-empty{ padding:26px 22px !important; }
}
.catalog-not-found:not(:has(.row)){
  box-sizing:border-box !important;
  display:flex !important;
  flex-direction:column !important;
  align-items:center !important;
  justify-content:center !important;
  text-align:center !important;
  gap:10px !important;
  padding:24px 22px !important;
  background:var(--surface-2, #f6f4fd) !important;
  border:1px solid var(--line-soft, #e6e6ec) !important;
  border-radius:var(--card-radius, 20px) !important;
}
.catalog-not-found:not(:has(.row)) > h4,
.catalog-not-found:not(:has(.row)) > p{
  margin:0 !important;
  max-width:100% !important;
}
@media (max-width:575px){
  .catalog-not-found:not(:has(.row)){ padding:22px !important; }
}
.tlc-empty{
  box-sizing:border-box !important;
  flex-direction:column !important;
  align-items:center !important;
  justify-content:center !important;
  text-align:center !important;
  gap:10px !important;
  padding:22px !important;
}
.tlc-empty > i{ flex:0 0 auto !important; }
.tl-pay-empty{
  box-sizing:border-box !important;
  display:flex !important;
  flex-direction:column !important;
  align-items:center !important;
  justify-content:center !important;
  text-align:center !important;
  gap:10px !important;
  padding:22px !important;
}
.ana-note.ana-empty{
  box-sizing:border-box !important;
  justify-content:center !important;
  align-content:center !important;
  text-align:center !important;
  gap:10px !important;
  padding:22px !important;
}
.chat-dialogues-items-empty{
  box-sizing:border-box !important;
  display:flex !important;
  flex-direction:column !important;
  align-items:center !important;
  justify-content:center !important;
  gap:10px !important;
  padding:22px !important;
}
.chat-dialogues-items-empty img{ margin-bottom:0 !important; }
.chat-dialogues-items-empty h4{ margin:0 !important; }
.tl-chat-empty{
  box-sizing:border-box !important;
  gap:10px !important;
  padding:22px !important;
}
.tl-chat-empty .ic{ margin-bottom:0 !important; }
.tl-chat-empty img{ margin:0 !important; }
.tl-chat-empty .t,
.tl-chat-empty .d{ margin:0 !important; }
.tl-svc-empty{
  box-sizing:border-box !important;
  display:flex !important;
  flex-direction:column !important;
  align-items:center !important;
  justify-content:center !important;
  text-align:center !important;
  gap:10px !important;
  padding:24px 22px !important;
  color:var(--ink-2, #3a3550) !important;
  background:var(--surface-2, #f6f4fd) !important;
  border:1px dashed var(--line, #cbcbd1) !important;
  border-radius:var(--card-radius-inner, 14px) !important;
}
.dl-admin-empty{
  box-sizing:border-box !important;
  padding:22px !important;
  text-align:center !important;
}
.header-favorites-empty{
  box-sizing:border-box !important;
  padding:22px !important;
}
.header-favorites-empty > i{ display:block !important; margin:0 0 10px !important; }
.header-favorites-empty > p{ margin:0 !important; }
.container-live-search-no-results{
  box-sizing:border-box !important;
  padding:22px !important;
  text-align:center !important;
}
.search-map-sidebar-not-found{
  box-sizing:border-box !important;
  padding:22px !important;
  text-align:center !important;
}
/* >>> ЧАСТЬ 57 (СПЛОШНОЙ ПРОХОД ПО ПУСТЫМ СОСТОЯНИЯМ, 18.09.2026) <<<
   ЗАДАЧА ВЛАДЕЛЬЦА: «текст прилип к бордеру, ты должен был везде прогнать и такое исправить».
   Проход сплошной — по ВСЕМ пустым состояниям сервиса, а не только по странице магазина.

   ЗАМЕР «ДО» (живой Chrome через CDP, _deploy/tradelot_tools/_es2_empty.js,
   лист границ v=1790000481, ширины 1440 и 390; отчёт _es2_before.txt / _es2_before2.txt):
     • .not-found-title-container (магазин /shop/<alias> — оба блока «Лотов нет» и «Отзывов нет»,
       карточка продавца /user/card/<alias> — три блока, /profile/ads, /profile/favorites,
       /profile/orders, /profile/payouts, /profile/analytics-updates):
       паддинги 22/18 на десктопе и 18/14 на телефоне — по горизонтали и на телефоне
       меньше нормы 22 px, снизу воздуха столько же, сколько сверху → текст жил у самой рамки;
     • .catalog-not-found (каталог по запросу без результата /all?search=…, каталог магазина
       /shop/<alias>/catalog): паддинги 0/0/0/0, у блока не было ни плашки, ни воздуха —
       текст стоял «голым» по центру страницы, вид не как у остальных пустых состояний;
     • .tlc-empty (аналитика, «Отслеживаемых лотов нет»): паддинги 12/14, align-items:flex-start,
       Δ центра содержимого −326 px по X — блок был прижат влево;
     • .tl-empty (кабинет: отзывы, статистика, спецпредложения, автоответчик): паддинги 32/24 —
       норма по воздуху соблюдена, но зазор «эмодзи/иллюстрация → текст» был 16 px;
     • .tl-pay-empty (кошелёк/выплаты): паддинги 16/18 — меньше нормы 22 px;
     • .ana-note.ana-empty («Мои запросы доступа»): паддинги 18/20 — меньше нормы, текст прижат влево;
     • .chat-dialogues-items-empty, .tl-chat-empty (чаты), .tl-svc-empty (доступы к сервисам),
       .dl-admin-empty (админка сделок), .header-favorites-empty (избранное в шапке),
       .container-live-search-no-results (живой поиск), .search-map-sidebar-not-found (карта) —
       у этих семейств вообще не было правила с воздухом: паддинги 0–8 px.

   ЧТО СДЕЛАНО — ОДИН ВИД ДЛЯ ВСЕХ ПУСТЫХ СОСТОЯНИЙ (норма, зафиксированная владельцем):
     • внутренние отступы ≥ 22 px со всех сторон, причём СНИЗУ НЕ МЕНЬШЕ, ЧЕМ СВЕРХУ
       (24/22 на десктопе, 22/22 на телефоне ≤575 px — на телефоне воздух больше не схлопывается);
     • содержимое по центру и по X, и по Y (flex column + align-items/justify-content:center);
     • зазор «иллюстрация/эмодзи → текст» ровно 10 px (норма 8–10), поэтому у .tl-empty
       зазор контейнера уменьшен с 16 до 10 px, а зазор «текст → кнопка» сохранён ≥ 16 px
       (10 px контейнера + 6 px отступа кнопки) — норма сетки «текст → кнопка ≥ 16 px» не нарушена;
     • у плашки фон НЕ сливается с рамкой: подложка --surface-2 и рамка --line/--line-soft
       (в тёмной теме токены свои, цвета по-прежнему разные);
     • .catalog-not-found (когда внутри нет сетки ближайших лотов) получил такую же плашку,
       как остальные пустые состояния: подложка --surface-2, мягкая рамка --line-soft,
       радиус --card-radius (20 px), воздух 24/22;
     • селекторы с удвоенным классом (.not-found-title-container.not-found-title-container,
       .tl-empty.tl-empty) и !important — чтобы правило не зависело от того, кто печатает
       стили позже (main.css, стили мастера/аналитики печатаются в теле страницы ПОСЛЕ слоя).
   ПОРЯДОК ВНУТРИ ЧАСТИ: сначала безвредный «якорь» (.wiz-57-anchor — такого класса в разметке
   нет), затем правила БЕЗ комментариев между ними, и только ПОТОМ это пояснение.
   Причина прежняя: Chrome выбрасывает первое правило, которое идёт сразу после большого
   комментария; проверено разбором CSSOM (_es2_cssom.js).
   ЧТО НЕ ТРОГАЛИ: разметку и логику (правка только оформлением), сетки с «ближайшими лотами»
   внутри .catalog-not-found (там правило не применяется — оно защищено :not(:has(.row))),
   фон/рамку самих карточек кабинета, отступы между блоками на страницах.
   >>> КОНЕЦ ЧАСТИ 57 >>> */

/* ---------- 57.1 ОДНА ЛЕВАЯ ЛИНИЯ: ПЛАШКА РАЗДЕЛА, ЗАГОЛОВОК ШАГА, ПОДПИСЬ ---------- */
.wiz-57-anchor { color: inherit; }
.wiz-step .wiz-step-head {
  margin-left: 22px !important;
  margin-right: 22px !important;
  padding-left: 14px !important;
}
@media (max-width: 991px) {
  .wiz-step .wiz-step-head {
    margin-left: 22px !important;
    margin-right: 22px !important;
    padding-left: 14px !important;
  }
}
@media (max-width: 575px) {
  .wiz-step .wiz-step-head { padding-left: 14px !important; }
}
.wiz-step .wiz-step-head-top {
  display: flex !important;
  align-items: center !important;
  gap: 10px !important;
}
.wiz-step .wiz-step-head-title { order: 1 !important; }
.wiz-step .wiz-step-head-icon { order: 2 !important; margin-left: auto !important; }
.wiz-step .wiz-step-head-step { order: 3 !important; margin-left: 0 !important; }
.wiz-step .wiz-step-head > .wiz-step-hint { margin-left: 0 !important; margin-right: 0 !important; }
.wiz-step > .ad-create-options-category-chain { padding-left: 14px !important; padding-right: 14px !important; }
.wiz-side.wiz-side > .wiz-side-note { padding-left: 12px !important; padding-right: 12px !important; }

/* =====================================================================================
   57. ОДНА ВЕРТИКАЛЬНАЯ ЛИНИЯ: ПЛАШКА РАЗДЕЛА, ЗАГОЛОВОК ШАГА, ПОДПИСЬ (19.09.2026)
   -------------------------------------------------------------------------------------
   ВЛАДЕЛЕЦ (скриншот, обведены три места красным): «вот как приблизительно надо выровнить» —
   плашка «ВЕБ-САЙТЫ», блок «Шаг 1. Основное» с заголовком и подписью и подпись со звёздочкой
   в правой панели должны стоять по одной левой линии, а не «в разнобой».

   ЗАМЕР «ДО» (_wz50_leftline.js, живой прогон; числа одинаковы на 1440/1280/1100):
     • ЛЕВАЯ КОЛОНКА: карточка шага 32, плашка раздела 55, полоса шага 55,
       но значок шага 76, ЗАГОЛОВОК «Шаг 1. Основное» 122, подпись под заголовком 76.
       То есть заголовок стоял на 67 px правее плашки, значок и подпись — на 21 px правее:
       «в разнобой» (владелец прав). Причина: у полосы шага padding 20 px, а перед заголовком
       ещё значок шага (36 px + зазор 10 px).
     • на 768 / 390 полоса шага уезжала на 29 при плашке 35 (Δ6) — у полосы в этом диапазоне
       был свой боковой отступ 16 px, а у плашки 22 px.
     • ПАНЕЛЬ: карточки шагов 1105 = плашка подписи 1105 (Δ0, было и осталось), а ТЕКСТ подписи
       стоял на 1117 — это внутренний отступ 12 px, ровно как содержимое карточек шагов.

   СТАЛО (замер после правки, те же ширины):
     • одна ЛИНИЯ БЛОКОВ: карточка шага — полоса шага — плашка раздела = 55 px (на 768/390 — 35 px),
       Δ 0 px на всех пяти ширинах (боковой отступ полосы приведён к 22 px, как у плашки);
     • одна ЛИНИЯ ТЕКСТА: текст плашки 69 = ЗАГОЛОВОК шага 69 = подпись под заголовком 69
       (одинаковый внутренний отступ 14 px — как у плашки, так и у полосы шага). Значок шага,
       который стоял перед заголовком и сдвигал его на 46 px, перенесён в тот же ряд ВПРАВО,
       к счётчику «0/4» (порядок через flex `order`), поэтому заголовок начинается ровно
       на линии текста;
     • в ПАНЕЛИ: плашка подписи 1105 = карточки шагов = шапка панели (одна линия блоков, Δ 0 px),
       а текст подписи 1117 = линия содержимого карточек шагов (внутренний отступ 12 px, как
       у карточек) — то есть подпись стоит на сетке панели, а не «между» строками.
   ===================================================================================== */

/* ---------- 58.1 ТЕКСТ ПЛАШКИ — НА ЛИНИЮ ЗАГОЛОВКА ШАГА (точка убрана) ---------- */
.wiz-58-anchor { color: inherit; }
.wiz-step > .ad-create-options-category-chain::before { content: none !important; display: none !important; }

/* =====================================================================================
   58. ПЛАШКА РАЗДЕЛА: ТЕКСТ НА ОДНОЙ ЛИНИИ С ЗАГОЛОВКОМ И ПОДПИСЬЮ ШАГА (19.09.2026)
   -------------------------------------------------------------------------------------
   Владелец: «вот как приблизительно надо выровнить» — плашка, заголовок шага, подпись под
   ним и подпись со звёздочкой в панели должны стоять по одной левой линии.

   ЗАМЕР после части 57 (_wz52_leftlines.js): линия БЛОКОВ совпала (плашка 55 = полоса шага 55,
   Δ 0 px), но линия ТЕКСТА — нет: у плашки перед текстом стояла декоративная точка
   (`.ad-create-options-category-chain::before`, 8 px + зазор 9 px), из-за неё ТЕКСТ плашки
   начинался на 86 px, а заголовок шага и подпись — на 70 px (Δ16).

   СТАЛО: точка убрана — в плашке остались подложка, пилюля, кегль 12,5, трекинг .07em,
   капс (ровно то, что владелец перечислял в задании; точки в его перечне не было).
   Теперь ТЕКСТ плашки начинается там же, где заголовок и подпись: 69 / 70 / 70 px (Δ 0–1),
   а ЛЕВЫЙ КРАЙ самой плашки совпадает с левым краем полосы шага: 55 / 55 px (Δ 0).
   На главной странице плашки-надзаголовки (.tl-eyebrow) с точкой НЕ трогали — там осталась
   прежняя система, правка касается только мастера публикации.
   ===================================================================================== */

.wiz-59-anchor{--tl-59:0}
.wiz-step .params-form-item-label{font-size:13.5px !important;font-weight:600 !important;color:var(--ink-2,#3a3550) !important;display:block !important;margin-bottom:8px !important;line-height:1.35 !important;}
.wiz-step .params-form-item-label-required{color:var(--brand-hover,#5533d8) !important;font-weight:700 !important;margin-left:2px !important;}
.wiz-step .params-form-item{margin-bottom:16px !important;}
.wiz-step .adf-field input,.wiz-step .adf-field select,.wiz-step .adf-field textarea{border-radius:12px !important;border-color:var(--line,#dcdce0) !important;min-height:44px !important;}
.wiz-step .adf-field select{background-color:#fff !important;}
@media (max-width:991px){.wiz-step .params-form-item{margin-bottom:14px !important;}}
/* >>> ЧАСТЬ 59 (18.09.2026): ОФОРМЛЕНИЕ БЛОКОВ ПОЛЕЙ В ШАГАХ 3–5 (характеристики и пр.) <<<
   Владелец: «что с оформлением 4 шагов?» — подписи полей были простым текстом, поля без единого ритма.
   Здесь: подписи 13,5 px / 600 / основной текст, отступ «подпись → поле» 8 px, «поле → поле» 16 px,
   поля с радиусом 12 и видимой границей, высота 44 px. Классы взяты из Filters::outFiltersInAdCreate
   (.params-form-item-label, .params-form-item-label-required) и разметки полей мастера (.adf-field).
   Селекторы ограничены .wiz-step — вне мастера ничего не меняется.
   Порядок (якорь → правила → пояснение) сохранён: Chrome выбрасывает первое правило после большого комментария.
   >>> КОНЕЦ ЧАСТИ 59 >>> */

.wiz-60-anchor{--tl-60:0}
.wiz-step .adf-block-hint{background:var(--surface-2,#f6f4fd) !important;border:0 !important;box-shadow:var(--sh-1,0 1px 2px rgba(27,22,48,.05)) !important;border-radius:12px !important;padding:12px 14px !important;display:flex !important;gap:9px !important;align-items:flex-start !important;color:var(--ink-2,#3a3550) !important;margin:16px 0 0 !important;line-height:1.5 !important;}
.wiz-step .adf-block-hint i{color:var(--brand-hover,#5533d8) !important;font-size:17px !important;line-height:1.35 !important;margin:1px 0 0 !important;flex:0 0 auto !important;}
.wiz-step .wiz-note{border:0 !important;box-shadow:var(--sh-1,0 1px 2px rgba(27,22,48,.05)) !important;border-radius:12px !important;padding:12px 14px !important;display:flex !important;gap:9px !important;align-items:flex-start !important;}
@media (max-width:575px){.wiz-step .adf-block-hint{padding:10px 12px !important;margin-top:14px !important;}}
/* >>> ЧАСТЬ 60 (18.09.2026): ПОДСКАЗКА-ПЛАШКА И ПРИМЕЧАНИЕ В ШАГАХ 3–5 МАСТЕРА <<<
   Владелец: «оформи 4 шаги». Подсказка под блоком («Доходы, расходы и ИКС не спрашиваем здесь
   второй раз…») была голой строкой с иконкой; примечание (.wiz-note) — с рамкой.
   Теперь оба — плашки системы: подложка, скругление 12, мягкая тень, РАМКИ НЕТ (правило владельца),
   иконка и текст на одной линии (gap 9), зазор до соседей 16 px. Селекторы только внутри .wiz-step.
   Порядок (якорь → правила → пояснение) сохранён: Chrome выбрасывает первое правило после большого комментария.
   >>> КОНЕЦ ЧАСТИ 60 >>> */

.wiz-61-anchor{--tl-61:0}
.wiz-step .params-form-note{background:var(--surface-2,#f6f4fd) !important;border:0 !important;box-shadow:var(--sh-1,0 1px 2px rgba(27,22,48,.05)) !important;border-radius:12px !important;padding:12px 14px !important;display:flex !important;gap:9px !important;align-items:flex-start !important;color:var(--ink-2,#3a3550) !important;margin:16px 0 0 !important;line-height:1.5 !important;}
.wiz-step .params-form-note i{color:var(--brand-hover,#5533d8) !important;font-size:17px !important;line-height:1.35 !important;margin:1px 0 0 !important;flex:0 0 auto !important;}
.wiz-step .params-form-note a{color:var(--brand-hover,#5533d8) !important;text-decoration:none !important;}
.wiz-step .params-form-note a:hover{text-decoration:underline !important;}
@media (max-width:575px){.wiz-step .params-form-note{padding:10px 12px !important;margin-top:14px !important;}}
/* >>> ЧАСТЬ 61 (18.09.2026): ПОДСКАЗКА .params-form-note В МАСТЕРЕ — ПЛАШКА СИСТЕМЫ <<<
   Владелец показал шаг 4: подсказка «Доходы, расходы и ИКС не спрашиваем здесь второй раз…» —
   это класс .params-form-note (печатает Filters::outFiltersInAdCreate), а не .adf-block-hint,
   поэтому часть 60 её не покрывала. Плюс у неё собственный inline <style> с синей иконкой #0066f5
   (печатается в теле страницы, поэтому перебивается только !important из слоя).
   Теперь: подложка, скругление 12, мягкая тень, РАМКИ НЕТ, иконка и текст на одной линии, зазор 16 px,
   ссылка фирменным цветом без подчёркивания (при наведении — подчёркивание).
   Порядок (якорь → правила → пояснение) сохранён: Chrome выбрасывает первое правило после большого комментария.
   >>> КОНЕЦ ЧАСТИ 61 >>> */

.wiz-62-anchor{--tl-62:0}
.wiz-step[data-step-code="analytics"] .adf-block{margin-bottom:12px !important;}
.wiz-step[data-step-code="analytics"] .adf-block .adf-block-hint,
.wiz-step[data-step-code="analytics"] .params-form-note{font-size:12.5px !important;line-height:1.5 !important;padding:10px 12px !important;margin-top:12px !important;}
.wiz-step[data-step-code="analytics"] .adf-subtitle{font-size:13px !important;font-weight:600 !important;margin-bottom:6px !important;}
.wiz-step[data-step-code="analytics"] .wiz-services{gap:8px !important;}
.wiz-step[data-step-code="analytics"] .wiz-services .sbadge{padding:10px 12px !important;gap:8px !important;}
.wiz-step[data-step-code="analytics"] .wiz-services .sbadge-text{font-size:13px !important;}
.wiz-step[data-step-code="analytics"] .wiz-services .sbadge-purpose,
.wiz-step[data-step-code="analytics"] .wiz-services .sbadge-status-hint{font-size:12px !important;line-height:1.4 !important;}
.wiz-step[data-step-code="analytics"] .wiz-services .btn-custom-mini,
.wiz-step[data-step-code="analytics"] .wiz-services .btn-custom{background:transparent !important;color:var(--brand-hover,#5533d8) !important;border:1px solid var(--brand-line,#d9d0fb) !important;box-shadow:none !important;}
.wiz-step[data-step-code="analytics"] .adf-field input,
.wiz-step[data-step-code="analytics"] .adf-field select{min-height:40px !important;}
.wiz-step[data-step-code="analytics"] .adf-block{padding-bottom:14px !important;}
@media (min-width:1200px){.wiz-step[data-step-code="analytics"] .wiz-services{grid-template-columns:repeat(4,minmax(0,1fr)) !important;}}
/* >>> ЧАСТЬ 62 (18.09.2026): РАЗГРУЗКА ШАГА 3 «АНАЛИТИКА И ФИНАНСЫ» <<<
   Владелец: «Переоформи 3 шаг… очень много информации, продавец запутается, много кнопок и блоков».
   Замер: страница шага — 5907 px в высоту на 1440 (почти шесть экранов): 8 карточек сервисов с кнопками,
   блок «Готовность к аналитике» и пять больших форм с длинными пояснениями.
   Что делает эта часть: сжимает вертикальный ритм (12/14 px вместо крупных отступов), уменьшает
   пояснения (12,5 px, компактнее — они перестают «кричать»), делает подписи и метки мельче и спокойнее,
   переводит кнопки карточек сервисов в лёгкий контурный вид (одна главная кнопка на карточку вместо
   нескольких ярких), на широких экранах карточки сервисов идут в 4 колонки вместо 2 — экран короче.
   Селекторы ограничены шагом аналитики (data-step-code="analytics"), остальной мастер не затронут.
   Порядок (якорь → правила → пояснение) сохранён: Chrome выбрасывает первое правило после большого комментария.
   >>> КОНЕЦ ЧАСТИ 62 >>> */

.wiz-63-anchor{--tl-63:0}
/* --- 1. СВОРАЧИВАЕМЫЙ БЛОК: одна строка вместо формы на пол-экрана --------- */
.wiz-step[data-step-code="analytics"] details.wz-fold{padding:0 !important;margin:0 0 10px !important;overflow:hidden !important;}
.wiz-step[data-step-code="analytics"] details.wz-fold>.wz-fold-head{display:flex !important;align-items:center !important;gap:10px !important;padding:11px 14px !important;margin:0 !important;cursor:pointer;list-style:none;background:var(--surface,#fff);}
.wiz-step[data-step-code="analytics"] details.wz-fold>.wz-fold-head::-webkit-details-marker{display:none !important;}
.wiz-step[data-step-code="analytics"] details.wz-fold>.wz-fold-head::marker{content:"";}
.wiz-step[data-step-code="analytics"] details.wz-fold>.wz-fold-head:hover{background:var(--surface-2,#f6f4fd);}
.wiz-step[data-step-code="analytics"] details.wz-fold>.wz-fold-head:focus-visible{outline:2px solid var(--brand,#6640f4) !important;outline-offset:-2px !important;border-radius:14px;}
.wiz-step[data-step-code="analytics"] .wz-fold-icon{width:34px !important;height:34px !important;font-size:17px !important;}
.wiz-step[data-step-code="analytics"] .wz-fold-text{display:flex !important;flex-direction:column;gap:1px;min-width:0;flex:1 1 auto;}
.wiz-step[data-step-code="analytics"] .wz-fold-text .adf-block-title{margin:0 !important;line-height:1.25 !important;}
.wiz-step[data-step-code="analytics"] .wz-fold-state{font-size:12.5px;line-height:1.35;color:var(--muted,#6c6883);}
.wiz-step[data-step-code="analytics"] .wz-fold-head .adf-head-chip{align-self:center !important;}
.wiz-step[data-step-code="analytics"] .wz-fold-toggle{flex:0 0 auto;display:inline-flex !important;align-items:center;gap:6px;font-size:12.5px;font-weight:600;color:var(--brand-hover,#5533d8);white-space:nowrap;}
.wiz-step[data-step-code="analytics"] .wz-fold-toggle i{font-size:15px;transition:transform .18s ease;}
.wiz-step[data-step-code="analytics"] details.wz-fold[open]>.wz-fold-head .wz-fold-toggle i{transform:rotate(180deg);}
.wiz-step[data-step-code="analytics"] .wz-fold-close-t{display:none;}
.wiz-step[data-step-code="analytics"] details.wz-fold[open]>.wz-fold-head .wz-fold-open-t{display:none;}
.wiz-step[data-step-code="analytics"] details.wz-fold[open]>.wz-fold-head .wz-fold-close-t{display:inline;}
.wiz-step[data-step-code="analytics"] details.wz-fold[open]>.wz-fold-head{border-bottom:1px solid var(--line-soft,#f0ecfa);}
.wiz-step[data-step-code="analytics"] .wz-fold-body{padding:14px 14px 16px !important;}
.wiz-step[data-step-code="analytics"] .wz-fold-body>.adf-row:first-child{margin-top:0 !important;}
/* --- 2. «ПОДРОБНЕЕ»: одна строка-триггер вместо абзаца --------------------- */
.wiz-step[data-step-code="analytics"] .wz-more{margin:6px 0 0;}
.wiz-step[data-step-code="analytics"] .wz-more-head{display:inline-flex !important;align-items:center;gap:5px;cursor:pointer;list-style:none;font-size:12.5px;font-weight:600;color:var(--brand-hover,#5533d8);}
.wiz-step[data-step-code="analytics"] .wz-more-head::-webkit-details-marker{display:none !important;}
.wiz-step[data-step-code="analytics"] .wz-more-head::marker{content:"";}
.wiz-step[data-step-code="analytics"] .wz-more-head::before{content:"▾";font-size:11px;line-height:1;transform:translateY(-1px);}
.wiz-step[data-step-code="analytics"] .wz-more[open]>.wz-more-head::before{content:"▴";}
.wiz-step[data-step-code="analytics"] .wz-more-head:focus-visible{outline:2px solid var(--brand,#6640f4) !important;outline-offset:2px !important;border-radius:8px;}
.wiz-step[data-step-code="analytics"] .wz-more-body{margin:6px 0 0;font-size:12.5px;line-height:1.5;color:var(--ink-2,#3a3550);}
.wiz-step[data-step-code="analytics"] .wz-more-body>.wz-more-actions{display:flex;flex-wrap:wrap;gap:8px;margin-top:8px;}
/* --- 3. КАРТОЧКИ СЕРВИСОВ: одна строка статуса + одно действие ------------- */
.wiz-step[data-step-code="analytics"] .wiz-services{gap:8px !important;margin-bottom:12px !important;}
.wiz-step[data-step-code="analytics"] .wiz-services .sbadge-row{flex-wrap:nowrap !important;align-items:flex-start !important;gap:10px !important;padding:10px 12px !important;border-radius:14px !important;}
.wiz-step[data-step-code="analytics"] .wiz-services .sbadge-icon-32{width:28px !important;height:28px !important;}
.wiz-step[data-step-code="analytics"] .wiz-services .sbadge-text{flex:1 1 auto !important;max-width:none !important;}
.wiz-step[data-step-code="analytics"] .wiz-services .sbadge-name{font-size:13px !important;font-weight:600 !important;line-height:1.3 !important;max-width:none !important;}
.wiz-step[data-step-code="analytics"] .wiz-services .sbadge-purpose{font-size:11.5px !important;line-height:1.35 !important;margin-top:1px !important;max-width:none !important;color:var(--muted,#6c6883) !important;}
.wiz-step[data-step-code="analytics"] .wiz-services .sbadge-side{flex:0 0 auto !important;max-width:none !important;align-items:flex-end !important;flex-direction:column !important;gap:6px !important;text-align:right !important;}
.wiz-step[data-step-code="analytics"] .wiz-services .sbadge-chip.badge{min-height:22px !important;padding:3px 9px !important;font-size:11px !important;gap:5px !important;}
.wiz-step[data-step-code="analytics"] .wiz-services .sbadge-actions{justify-content:flex-end !important;}
.wiz-step[data-step-code="analytics"] .wiz-services .sbadge-actions .btn-custom-mini{font-size:12px !important;padding:6px 10px !important;min-height:32px !important;}
/* --- 4. НЕАКТУАЛЬНОЕ СКРЫТО: форма подключения — только по кнопке ---------- */
.wiz-step[data-step-code="analytics"] [data-wiz-service-box] .wiz-service-form:not(.is-open){display:none !important;}
.wiz-step[data-step-code="analytics"] [data-wiz-service-box] .wiz-service-form.is-open{display:flex !important;}
.wiz-step[data-step-code="analytics"] [data-wiz-service-box]{margin:0 0 8px !important;}
/* --- 5. «ГОТОВНОСТЬ АНАЛИТИКИ»: две строки + полоса прогресса -------------- */
.wiz-step[data-step-code="analytics"] .adf-readiness-compact{padding:12px 14px !important;margin-bottom:10px !important;}
.wiz-step[data-step-code="analytics"] .adf-readiness-line{display:flex;align-items:center;gap:10px;flex-wrap:wrap;}
.wiz-step[data-step-code="analytics"] .adf-readiness-line .adf-block-title{line-height:1.25 !important;}
.wiz-step[data-step-code="analytics"] .adf-readiness-bar{flex:1 1 140px;min-width:90px;height:6px;border-radius:999px;background:var(--surface-2,#f6f4fd);overflow:hidden;}
.wiz-step[data-step-code="analytics"] .adf-readiness-bar>i{display:block;height:100%;border-radius:999px;background:var(--brand,#6640f4);}
.wiz-step[data-step-code="analytics"] .adf-readiness-left{font-size:12.5px;line-height:1.4;color:var(--muted,#6c6883);}
.wiz-step[data-step-code="analytics"] .adf-readiness-pills{display:flex;flex-wrap:wrap;gap:6px;margin-top:8px;}
.wiz-step[data-step-code="analytics"] .adf-readiness-pill{display:inline-flex;align-items:center;gap:6px;max-width:100%;padding:3px 10px;border-radius:999px;background:var(--surface-2,#f6f4fd);border:0;font-size:12px;line-height:1.35;color:var(--ink-2,#3a3550);}
.wiz-step[data-step-code="analytics"] .adf-readiness-pill i{font-size:13px;color:var(--brand-hover,#5533d8);flex:0 0 auto;}
.wiz-step[data-step-code="analytics"] .adf-readiness-pill-state{font-style:normal;font-size:11px;padding:2px 7px;border-radius:999px;font-weight:600;}
.wiz-step[data-step-code="analytics"] .adf-readiness-row{display:flex;align-items:flex-start;gap:8px;margin-top:8px;color:var(--ink-2,#3a3550);}
.wiz-step[data-step-code="analytics"] .adf-readiness-row i{font-size:15px;color:var(--brand-hover,#5533d8);flex:0 0 auto;}
@media (max-width:991px){
  .wiz-step[data-step-code="analytics"] .wiz-services .sbadge-row{flex-wrap:wrap !important;}
  .wiz-step[data-step-code="analytics"] .wiz-services .sbadge-side{flex:1 1 100% !important;flex-direction:row !important;align-items:center !important;justify-content:space-between !important;text-align:left !important;}
}
@media (max-width:575px){
  .wiz-step[data-step-code="analytics"] details.wz-fold>.wz-fold-head{padding:10px 12px !important;gap:8px !important;flex-wrap:wrap;}
  .wiz-step[data-step-code="analytics"] .wz-fold-toggle{width:100%;justify-content:flex-start;}
  .wiz-step[data-step-code="analytics"] .wz-fold-body{padding:12px 12px 14px !important;}
  .wiz-step[data-step-code="analytics"] .adf-readiness-bar{flex:1 1 100%;}
}
/* >>> ЧАСТЬ 63 (18.09.2026): СТРУКТУРНАЯ РАЗГРУЗКА ШАГА 3 «АНАЛИТИКА И ФИНАНСЫ» <<<
   Владелец: «Переоформи 3 шаг везде… там очень много информации, продавец запутается.
   Там очень много всего… много кнопок и блоков».
   Замер ДО (полностраничный снимок 1440, лот 990040): 6481 px, из них сам шаг 5093 px:
   8 карточек сервисов по 234–320 px, «Готовность аналитики» 931 px, две раскрытые формы
   подключения по 331 px и три большие формы (634 / 290 / 846 px).
   Что делает эта часть: свёрнутый блок — ОДНА строка (значок, название, «заполнено N из M»,
   плашка состояния и слово «Раскрыть»), карточка сервиса — одна строка статуса и ОДНО
   действие (пояснение и запасные действия — под «Подробнее»), форма подключения сервиса
   показывается только по кнопке «Добавить доступ», «Готовность аналитики» — две строки
   и полоса прогресса вместо четырёх карточек с абзацами.
   Раскрыватель — настоящий <summary>: он в порядке табуляции, фокус виден (outline
   фирменным цветом по :focus-visible) и раскрывается Enter/Space без JS.
   Селекторы ограничены шагом аналитики (data-step-code="analytics") — остальной мастер
   и сайт не затронуты. Порядок (якорь → правила → пояснение) сохранён: Chrome выбрасывает
   первое правило после большого комментария. */

.wiz-58-anchor{--tl-58:0}
.not-found-title-container-image,
.tl-empty-icon,
.chat-dialogues-items-empty-icon,
.catalog-not-found-image,
.tl-chat-empty .ic{
  box-sizing:border-box !important;
  display:inline-flex !important;
  align-items:center !important;
  justify-content:center !important;
  flex:0 0 auto !important;
  width:48px !important;
  height:48px !important;
  min-width:48px !important;
  max-width:48px !important;
  padding:0 !important;
  margin:0 !important;
  border:0 !important;
  border-radius:var(--r-pill, 999px) !important;
  background:var(--brand-tint, #efeaff) !important;
  background-color:var(--brand-tint, #efeaff) !important;
  color:var(--brand-hover, #5533d8) !important;
  font-size:24px !important;
  line-height:1 !important;
  text-align:center !important;
}
.not-found-title-container-image > i,
.tl-empty-icon > i,
.chat-dialogues-items-empty-icon > i,
.catalog-not-found-image > i,
.tl-chat-empty .ic > i{
  display:block !important;
  width:auto !important;
  height:auto !important;
  margin:0 !important;
  padding:0 !important;
  font-size:24px !important;
  line-height:1 !important;
  color:inherit !important;
  background:none !important;
}
@media (max-width:575px){
  .not-found-title-container-image,
  .tl-empty-icon,
  .chat-dialogues-items-empty-icon,
  .catalog-not-found-image,
  .tl-chat-empty .ic{ width:48px !important; height:48px !important; min-width:48px !important; max-width:48px !important; }
  .not-found-title-container-image > i,
  .tl-empty-icon > i,
  .chat-dialogues-items-empty-icon > i,
  .catalog-not-found-image > i,
  .tl-chat-empty .ic > i{ font-size:24px !important; }
}
/* >>> ЧАСТЬ 58 (18.09.2026): ЭМОДЗИ → ИКОНКИ TABLER В ФИРМЕННОЙ ПЛАШКЕ <<<
   ЗАДАЧА ВЛАДЕЛЬЦА: «сделать эти блоки не эмодзи, а аккуратными иконками в фирменном
   стиле (как у нас значки категорий) — тогда они будут выглядеть частью сервиса,
   а не „случайным смайликом“».

   ВЫБРАННЫЙ ВАРИАНТ (один на весь сервис): иконка шрифта Tabler (<i class="ti ti-…">)
   в фирменной круглой плашке 48 px с подложкой --brand-tint и цветом иконки --brand-hover,
   кегль иконки 24 px. Обоснование выбора:
     • это уже существующая система самого сервиса, а не новая: ровно так оформлены пустые
       состояния чата (.tl-chat-empty .ic — 48 px, --brand-tint, иконка 24 px), избранного
       в шапке (.header-favorites-empty → ti-heart-broken), аналитики (.ana-note.ana-empty →
       ti-inbox, .tlc-empty → ti-chart-bar-off) — все они на Tabler, без картинок;
     • шрифт Tabler уже подключён (assets/fonts/tabler-icons.css), значит НИ ОДНОГО нового
       файла-картинки не появляется, и иконка автоматически попадает в оба темы через токены;
     • «значки категорий» (.widget-categories-or-subcategories img.tl-cat-icon) — это растровые
       картинки КОНКРЕТНЫХ категорий, они не годятся как иконка «лотов нет»/«отзывов нет»:
       для смысловых состояний нужен векторный набор, который есть в Tabler;
     • контраст проверяем и стабилен: иконка --brand-hover (#5533d8) на плашке --brand-tint
       (#efeaff) — 6,27:1 (норма для иконки ≥ 3:1), текст пустого состояния — 10,68:1
       (норма ≥ 4,5:1). Растровая мини-иллюстрация такой гарантии по контрасту не даёт.

   ЧТО СДЕЛАНО:
     1) разметка: эмодзи 🧐 заменён на <i class="ti ti-…"> в том же контейнере
        (.not-found-title-container-image, .tl-empty-icon) — 17 файлов, 21 место;
     2) пустые состояния чатов: там контейнеры были ПУСТЫЕ (.chat-dialogues-items-empty-icon)
        и стоял пустой <h1></h1> — теперь в них иконки ti-message-dots / ti-messages;
     3) каталог/поиск/магазины/блог (.catalog-not-found): добавлена иконка по смыслу —
        ti-search (ничего не найдено), ti-building-store (магазинов нет), ti-article (статей нет);
        иконка добавлена и в app-контроллеры, и в их источники core/ (сверка
        _core_verify_controllers.php check — 0 расхождений); ветка «Лоты в ближайших городах»
        (внутри блока есть сетка .row) НЕ тронута — там иконки нет;
     4) соответствие смыслу: лоты → ti-package, отзывы → ti-star, избранное → ti-heart,
        сделки → ti-file-text («документ»), кошелёк → ti-credit-card, магазины →
        ti-building-store, рефералы → ti-users, автопродление → ti-refresh,
        комиссия и выплаты → ti-cash, обновления аналитики → ti-chart-line,
        спецпредложения → ti-discount, автоответчик → ti-robot, поиск/каталог → ti-search,
        статьи блога → ti-article, чаты → ti-message-dots / ti-messages;
     5) НЕ тронуто (это не эмодзи, а система растровых иллюстраций из части 61):
        <img class="tl-empty-image" width="256" height="256"> в «Магазинах», «Статистике»,
        «Спецпредложениях», «Автоответчике»; инлайновые иконки подсказок аналитики
        (.ana-note.ana-empty, .tlc-empty) и «избранное в шапке» оставлены без плашки —
        плашка ставится там, где иконка стоит ОТДЕЛЬНОЙ иллюстрацией, а не в строке текста.

   ГЕОМЕТРИЯ (сохранена норма части 57): плашка 48 px, иконка 24 px (норма владельца
   48–56 и 22–26), зазор «иконка → текст» 10 px (норма 8–12), внутренние отступы блоков
   22–32 px, центрирование Δ 0–0,1 px. Подробный замер — в отчёте (_es3_after.txt).

   ПОРЯДОК ВНУТРИ ЧАСТИ: сначала безвредный «якорь» (.wiz-58-anchor — такого класса
   в разметке нет), затем правила БЕЗ комментариев между ними, и только ПОТОМ это пояснение:
   Chrome выбрасывает первое правило, идущее сразу после большого комментария.
   >>> КОНЕЦ ЧАСТИ 58 >>> */

.wiz-64-anchor{--tl-64:0}
.wiz-step[data-step-code="analytics"] details.wz-fold-sub{background:transparent !important;background-image:none !important;box-shadow:none !important;border:0 !important;padding:0 !important;margin:0 0 6px !important;overflow:visible !important;}
.wiz-step[data-step-code="analytics"] details.wz-fold-sub>.wz-fold-head{padding:6px 0 !important;background:transparent !important;background-image:none !important;border-bottom:0 !important;gap:8px !important;}
.wiz-step[data-step-code="analytics"] details.wz-fold-sub>.wz-fold-head:hover{background:transparent !important;}
.wiz-step[data-step-code="analytics"] details.wz-fold-sub .wz-fold-body-sub{padding:6px 0 4px !important;}
.wiz-step[data-step-code="analytics"] details.wz-fold-sub .wz-fold-text .adf-block-title{font-size:13px !important;}
.wiz-step[data-step-code="analytics"] details.wz-fold:not([open])>.wz-fold-head{padding:8px 14px !important;}
.wiz-step[data-step-code="analytics"] details.wz-fold:not([open]){margin-bottom:8px !important;}
.wiz-step[data-step-code="analytics"] details.wz-fold>.wz-fold-head .wz-fold-icon{width:30px !important;height:30px !important;font-size:15px !important;}
.wiz-step[data-step-code="analytics"] .adf-readiness-compact>.wz-more{margin:2px 0 0 !important;}
/* >>> ЧАСТЬ 64 (18.09.2026): ПОДРАЗДЕЛ-РАСКРЫВАТЕЛЬ И УПЛОТНЕНИЕ СТРОК ШАГА 3 <<<
   «Источники трафика, %» (7 полей каналов) — самый крупный остаток внутри блока
   «Статистика посещаемости», открытого по умолчанию: ~180 px из 594 на 1440.
   Подраздел получает вид НЕ карточки, а строки внутри формы (без фона, тени и
   рамки — он не самостоятельный блок), поэтому и «Раскрыть» у него тише.
   Плюс уплотнены строки свёрнутых блоков (8 px вместо 11 по вертикали) и значок
   строки 30 px вместо 34 — на четырёх свёрнутых строках это ещё ~40 px.
   Порядок (якорь → правила → пояснение) сохранён. */

.wiz-64b-anchor{--tl-64b:0}
.wiz-step[data-step-code="analytics"] .wz-fold-body>.adf-block-hint:first-child{margin:0 0 12px !important;padding:9px 12px !important;font-size:12.5px !important;line-height:1.45 !important;}
.wiz-step[data-step-code="analytics"] .wz-fold-body>p.adf-block-hint:first-child{margin:0 0 12px !important;padding:9px 12px !important;}
.wiz-step[data-step-code="analytics"] .adf-seller>p.adf-block-hint:first-child{margin:0 0 10px !important;padding:8px 12px !important;font-size:12.5px !important;}
/* >>> ЧАСТЬ 64, ПРОДОЛЖЕНИЕ (18.09.2026): ПОЯСНЕНИЯ ВНУТРИ ТЕЛА БЛОКА <<<
   У свёрнутого блока пояснения не видно (в строке только название и состояние),
   поэтому описание блока переехало первой строкой в тело. «Шапочные» отступы
   подсказки (margin 16 сверху и padding 12/14 — они были рассчитаны на шапку)
   внутри тела давали лишние 40–60 px на четырёх раскрытых блоках. Теперь у
   первой строки тела свои отступы (marg 0/12, padding 9/12).
   Порядок (якорь → правила → пояснение) сохранён. */

.wiz-65-anchor{--tl-65:0}
/* --- 1. КАРТОЧКИ СЕРВИСОВ: 5 общих дорожек на ряд (субгрид) ---------------- */
.wiz-step[data-step-code="analytics"] .wiz-services{grid-auto-rows:minmax(0,auto) !important;align-items:stretch !important;gap:12px !important;margin-bottom:14px !important;}
.wiz-step[data-step-code="analytics"] .wiz-services .sbadge-row{
  display:grid !important;
  grid-template-columns:28px minmax(0,1fr) !important;
  grid-template-rows:subgrid !important;
  grid-row:span 5 !important;
  column-gap:8px !important;
  row-gap:6px !important;
  padding:12px !important;
  align-items:start !important;
  align-content:start !important;
  height:auto !important;
  border-radius:14px !important;
}
.wiz-step[data-step-code="analytics"] .wiz-services .sbadge-text,
.wiz-step[data-step-code="analytics"] .wiz-services .sbadge-side{display:contents !important;}
.wiz-step[data-step-code="analytics"] .wiz-services .sbadge-icon{grid-column:1 !important;grid-row:1 !important;align-self:start !important;margin:1px 0 0 !important;}
.wiz-step[data-step-code="analytics"] .wiz-services .sbadge-name{grid-column:2 !important;grid-row:1 !important;margin:0 !important;}
.wiz-step[data-step-code="analytics"] .wiz-services .sbadge-purpose{grid-column:2 !important;grid-row:2 !important;margin:0 !important;}
.wiz-step[data-step-code="analytics"] .wiz-services .sbadge-chip{grid-column:2 !important;grid-row:3 !important;justify-self:start !important;align-self:center !important;}
.wiz-step[data-step-code="analytics"] .wiz-services details.wz-more{grid-column:2 !important;grid-row:4 !important;justify-self:start !important;align-self:center !important;margin:0 !important;}
.wiz-step[data-step-code="analytics"] .wiz-services .sbadge-actions{grid-column:1 / -1 !important;grid-row:5 !important;justify-self:end !important;align-self:center !important;min-height:0 !important;margin:0 !important;flex-wrap:nowrap !important;}
/* --- 2. ПЛАШКИ СТАТУСА: одна геометрия во всех карточках ------------------- */
.wiz-step[data-step-code="analytics"] .wiz-services .sbadge-chip.badge{
  display:inline-flex !important;align-items:center !important;gap:6px !important;
  height:24px !important;min-height:24px !important;max-height:24px !important;
  padding:0 11px !important;border-radius:999px !important;
  font-size:11.5px !important;font-weight:600 !important;line-height:1 !important;
  white-space:nowrap !important;
}
.wiz-step[data-step-code="analytics"] .wiz-services .sbadge-chip .badge-dot{width:6px !important;height:6px !important;border-radius:50% !important;flex:0 0 auto !important;}
/* --- 3. «ПОДРОБНЕЕ» В КАРТОЧКЕ: одна строка, одно место -------------------- */
.wiz-step[data-step-code="analytics"] .wiz-services .wz-more-head{
  display:inline-flex !important;align-items:center !important;
  height:20px !important;line-height:20px !important;
  font-size:12px !important;font-weight:600 !important;color:var(--brand-hover,#5533d8) !important;
}
/* --- 4. ЗАГОЛОВКИ И ПОЯСНЕНИЯ В КАРТОЧКАХ: один кегль, вес, цвет ----------- */
.wiz-step[data-step-code="analytics"] .wiz-services .sbadge-name{font-size:13px !important;font-weight:600 !important;line-height:1.3 !important;color:var(--ink,#1b1630) !important;max-width:none !important;}
.wiz-step[data-step-code="analytics"] .wiz-services .sbadge-purpose{font-size:11.5px !important;font-weight:400 !important;line-height:1.35 !important;color:var(--muted,#6c6883) !important;max-width:none !important;}
.wiz-step[data-step-code="analytics"] .wiz-services .sbadge-actions .btn-custom-mini{height:32px !important;min-height:32px !important;padding:0 12px !important;font-size:12px !important;line-height:1 !important;}
.wiz-step[data-step-code="analytics"] .wiz-services .sbadge-noaction{font-size:11.5px !important;line-height:1.3 !important;color:var(--muted,#6c6883) !important;text-align:right !important;}
/* --- 5. СТРОКА-СВЁРТКА: ОДИН шаблон, одна высота, раскрыватель справа ------ */
.wiz-step[data-step-code="analytics"] details.wz-fold{overflow:visible !important;margin:0 0 10px !important;}
.wiz-step[data-step-code="analytics"] details.wz-fold>.wz-fold-head{
  display:flex !important;align-items:center !important;gap:10px !important;
  height:56px !important;min-height:56px !important;padding:0 14px !important;
  background:var(--surface,#fff) !important;border-bottom:0 !important;
}
.wiz-step[data-step-code="analytics"] details.wz-fold[open]>.wz-fold-head{border-bottom:1px solid var(--line-soft,#f0ecfa) !important;}
.wiz-step[data-step-code="analytics"] details.wz-fold>.wz-fold-head .wz-fold-text{
  display:flex !important;flex-direction:row !important;align-items:center !important;gap:10px !important;
  flex:1 1 auto !important;min-width:0 !important;
}
.wiz-step[data-step-code="analytics"] details.wz-fold>.wz-fold-head .adf-block-title{font-size:14px !important;font-weight:600 !important;line-height:1.25 !important;color:var(--ink,#1b1630) !important;margin:0 !important;}
.wiz-step[data-step-code="analytics"] details.wz-fold>.wz-fold-head .adf-head-chip{
  display:inline-flex !important;align-items:center !important;flex:0 0 auto !important;align-self:center !important;
  height:24px !important;min-height:24px !important;padding:0 11px !important;border-radius:999px !important;
  font-size:11.5px !important;font-weight:600 !important;line-height:1 !important;white-space:nowrap !important;
}
.wiz-step[data-step-code="analytics"] details.wz-fold>.wz-fold-head .wz-fold-state{font-size:12.5px !important;line-height:1.3 !important;color:var(--muted,#6c6883) !important;flex:0 1 auto !important;min-width:0 !important;}
.wiz-step[data-step-code="analytics"] details.wz-fold>.wz-fold-head .wz-fold-extra{display:inline-flex !important;align-items:center !important;flex:1 1 80px !important;max-width:190px !important;min-width:60px !important;margin-left:2px !important;}
.wiz-step[data-step-code="analytics"] details.wz-fold>.wz-fold-head .wz-fold-toggle{flex:0 0 auto !important;margin-left:auto !important;font-size:12.5px !important;font-weight:600 !important;}
/* --- 6. ПОДРАЗДЕЛ «ИСТОЧНИКИ ТРАФИКА»: та же строка, выровнен по правому краю - */
.wiz-step[data-step-code="analytics"] details.wz-fold-sub>.wz-fold-head{height:56px !important;min-height:56px !important;padding:0 !important;margin:0 !important;}
.wiz-step[data-step-code="analytics"] details.wz-fold-sub>.wz-fold-head .adf-block-title{font-size:13px !important;}
/* --- 7. ПАНЕЛЬ «ГОТОВНОСТЬ АНАЛИТИКИ»: та же строка ------------------------ */
.wiz-step[data-step-code="analytics"] details.adf-readiness-compact{padding:0 !important;margin-bottom:10px !important;}
.wiz-step[data-step-code="analytics"] .adf-readiness-bar{display:block;height:6px;border-radius:999px;background:var(--surface-2,#f6f4fd);overflow:hidden;}
.wiz-step[data-step-code="analytics"] .adf-readiness-bar>i{display:block;height:100%;border-radius:999px;background:var(--brand,#6640f4);}
@media (max-width:1199px){
  .wiz-step[data-step-code="analytics"] .wiz-services .sbadge-row{padding:10px !important;}
}
@media (max-width:991px){
  .wiz-step[data-step-code="analytics"] details.wz-fold>.wz-fold-head .wz-fold-state{display:none !important;}
  .wiz-step[data-step-code="analytics"] details.wz-fold>.wz-fold-head .wz-fold-extra{display:none !important;}
  .wiz-step[data-step-code="analytics"] details.wz-fold-sub>.wz-fold-head{margin-right:0 !important;}
}
/* >>> ЧАСТЬ 65 (18.09.2026): ОПРЯТНОСТЬ ШАГА 3 — РОВНЫЕ РЯДЫ И ЕДИНЫЕ СТРОКИ <<<
   Владелец по скриншоту: «все криво, не красиво, не понятно».
   Что подтвердил замер (1440, лот 990040) и что исправлено:
     1) карточка сервиса — сетка из 5 дорожек (значок/название, назначение, плашка,
        «Подробнее», действие), дорожки ОБЩИЕ для всех карточек ряда (subgrid),
        поэтому у всех карточек ряда каждый элемент стоит на одной линии:
        «Подробнее» было с разбросом 15–17 px, плашки — 54 px, теперь 0;
     2) у каждой карточки есть действие ИЛИ понятная подпись («Подключать не нужно»,
        «Выключен в настройках») — три карточки без действия ломали ряд;
     3) плашки статуса — одна высота (24), один радиус (999), один кегль (11,5),
        одна ширина паддингов, без переноса строки;
     4) «Подробнее» — одна строка фиксированной высоты (20 px) в одном месте карточки;
     5) строка-свёртка — один шаблон: [значок] НАЗВАНИЕ [плашка] краткий статус […]
        и раскрыватель, прижатый к правому краю (общая высота 56 px вместо 46–61);
     6) панель «Готовность аналитики» стала такой же строкой, как блоки-свёртки
        (была своя раскладка: плашка слева, полоса в середине, «Подробнее» отдельной
        строкой ниже);
     7) заголовки и пояснения в карточках — один кегль/вес/цвет (13/600 и 11,5/400),
        одна колонка текста (ширина колонки одинаковая во всех карточках).
   Порядок (якорь → правила → пояснение) сохранён. */

.wiz-65-anchor{--tl-65:0}
.wiz-step[data-step-code="analytics"] .wiz-services{align-items:stretch !important;}
.wiz-step[data-step-code="analytics"] .wiz-services .sbadge-row{display:flex !important;flex-direction:column !important;height:100% !important;gap:8px !important;}
.wiz-step[data-step-code="analytics"] .wiz-services .sbadge-text{flex:1 1 auto !important;}
.wiz-step[data-step-code="analytics"] .wiz-services .sbadge-side{margin-top:auto !important;display:flex !important;flex-direction:column !important;align-items:flex-start !important;gap:8px !important;width:100% !important;}
.wiz-step[data-step-code="analytics"] .wiz-services .sbadge-chip{height:24px !important;padding:0 10px !important;border-radius:999px !important;display:inline-flex !important;align-items:center !important;font-size:12px !important;line-height:1 !important;white-space:nowrap !important;}
.wiz-step[data-step-code="analytics"] .wiz-services .sbadge-actions{display:flex !important;gap:8px !important;align-items:center !important;flex-wrap:wrap !important;}
.wiz-step[data-step-code="analytics"] .wiz-services .sbadge-actions .btn-custom-mini,
.wiz-step[data-step-code="analytics"] .wiz-services .sbadge-actions .btn-custom{min-height:36px !important;display:inline-flex !important;align-items:center !important;}
.wiz-step[data-step-code="analytics"] .wiz-services .sbadge-name{font-size:13.5px !important;font-weight:600 !important;line-height:1.3 !important;}
.wiz-step[data-step-code="analytics"] .wiz-services .sbadge-purpose{font-size:12px !important;line-height:1.4 !important;}
.wiz-step[data-step-code="analytics"] .wiz-services .sbadge-status-hint{font-size:11.5px !important;line-height:1.35 !important;}
/* >>> ЧАСТЬ 65 (18.09.2026): ОПРЯТНОСТЬ КАРТОЧЕК СЕРВИСОВ НА ШАГЕ 3 <<<
   Владелец: «а что с оформлением? почему так все криво? по всем блокам в 3 шаге».
   Что было: карточки в ряду разной высоты, плашки статуса и кнопки стояли на разной высоте,
   «Подробнее» плавало. Что делает эта часть: карточка — flex-колонка на всю высоту ряда,
   блок со статусом и действиями (.sbadge-side) прижат К НИЗУ (margin-top:auto) — поэтому
   плашки и кнопки во всех карточках ряда встают на одну линию; плашки статуса — одна геометрия
   (24 px, пилюля, 12 px), кнопки — одной высоты (36 px), кегли заголовка/пояснения единые.
   Селекторы ограничены шагом аналитики. Порядок (якорь → правила → пояснение) сохранён.
   >>> КОНЕЦ ЧАСТИ 65 >>> */

.wiz-65b-anchor{--tl-65b:0}
.wiz-step[data-step-code="analytics"] .wiz-services .sbadge-chip.badge{min-width:168px !important;justify-content:center !important;text-align:center !important;}
.wiz-step[data-step-code="analytics"] details.wz-fold>.wz-fold-head .adf-head-chip{min-width:200px !important;justify-content:center !important;text-align:center !important;}
.wiz-step[data-step-code="analytics"] .adf-readiness-pill-state{min-width:150px !important;justify-content:center !important;text-align:center !important;}
@media (max-width:575px){
  .wiz-step[data-step-code="analytics"] .wiz-services .sbadge-chip.badge{min-width:0 !important;}
  .wiz-step[data-step-code="analytics"] details.wz-fold>.wz-fold-head .adf-head-chip{min-width:0 !important;}
}
/* >>> ЧАСТЬ 65, ПРОДОЛЖЕНИЕ (18.09.2026): ОДНА ШИРИНА ПЛАШЕК <<<
   Владелец: «плашки статуса в разнобой — разной ширины, в разных местах карточки».
   Высоты, радиус и кегль выровнены частью 65; здесь выровнена ШИРИНА: у плашек
   карточек 168 px, у плашек строк-свёрток 200 px (самая длинная подпись
   «Ждём адрес сайта из шага 1» — 192 px), текст по центру. На телефоне (≤575 px)
   минимальная ширина снимается, иначе плашка не влезала бы в карточку.
   Порядок (якорь → правила → пояснение) сохранён. */

.wiz-66-anchor{--tl-66:0}
/* --- КАРТОЧКИ СЕРВИСОВ: сетка из 5 общих дорожек (субгрид) ------------------ */
#adWizard .wiz-step[data-step-code="analytics"] .wiz-services{display:grid !important;grid-auto-rows:minmax(0,auto) !important;align-items:stretch !important;gap:12px !important;margin-bottom:14px !important;}
#adWizard .wiz-step[data-step-code="analytics"] .wiz-services .sbadge-row{
  display:grid !important;
  grid-template-columns:28px minmax(0,1fr) !important;
  grid-template-rows:subgrid !important;
  grid-row:span 5 !important;
  column-gap:8px !important;row-gap:6px !important;
  padding:12px !important;height:auto !important;
  align-items:start !important;align-content:start !important;
  flex-direction:row !important;flex-wrap:nowrap !important;
  border-radius:14px !important;overflow:visible !important;
}
#adWizard .wiz-step[data-step-code="analytics"] .wiz-services .sbadge-text,
#adWizard .wiz-step[data-step-code="analytics"] .wiz-services .sbadge-side{display:contents !important;}
#adWizard .wiz-step[data-step-code="analytics"] .wiz-services .sbadge-icon{grid-column:1 !important;grid-row:1 !important;align-self:start !important;margin:1px 0 0 !important;}
#adWizard .wiz-step[data-step-code="analytics"] .wiz-services .sbadge-name{grid-column:2 !important;grid-row:1 !important;align-self:start !important;margin:0 !important;font-size:13px !important;font-weight:600 !important;line-height:1.3 !important;color:var(--ink,#1b1630) !important;max-width:none !important;text-align:left !important;}
#adWizard .wiz-step[data-step-code="analytics"] .wiz-services .sbadge-purpose{grid-column:2 !important;grid-row:2 !important;align-self:start !important;margin:0 !important;font-size:11.5px !important;font-weight:400 !important;line-height:1.35 !important;color:var(--muted,#6c6883) !important;max-width:none !important;text-align:left !important;}
#adWizard .wiz-step[data-step-code="analytics"] .wiz-services .sbadge-chip{grid-column:1 / -1 !important;grid-row:3 !important;justify-self:start !important;align-self:center !important;}
#adWizard .wiz-step[data-step-code="analytics"] .wiz-services details.wz-more{grid-column:1 / -1 !important;grid-row:4 !important;justify-self:start !important;align-self:center !important;margin:0 !important;}
#adWizard .wiz-step[data-step-code="analytics"] .wiz-services .sbadge-actions{grid-column:1 / -1 !important;grid-row:5 !important;justify-self:end !important;align-self:center !important;display:flex !important;flex-wrap:nowrap !important;align-items:center !important;justify-content:flex-end !important;gap:8px !important;min-height:0 !important;margin:0 !important;width:auto !important;}
/* --- ПЛАШКИ СТАТУСА: одна геометрия и одна ширина -------------------------- */
#adWizard .wiz-step[data-step-code="analytics"] .wiz-services .sbadge-chip.badge{
  display:inline-flex !important;align-items:center !important;justify-content:center !important;
  height:24px !important;min-height:24px !important;max-height:24px !important;
  width:auto !important;min-width:160px !important;max-width:none !important;
  padding:0 8px !important;border-radius:999px !important;
  font-size:11px !important;font-weight:600 !important;line-height:1 !important;
  white-space:nowrap !important;text-align:center !important;
}
#adWizard .wiz-step[data-step-code="analytics"] .wiz-services .sbadge-chip .badge-dot{width:5px !important;height:5px !important;margin-right:5px !important;border-radius:50% !important;flex:0 0 auto !important;}
/* --- «ПОДРОБНЕЕ» И ДЕЙСТВИЕ ------------------------------------------------- */
#adWizard .wiz-step[data-step-code="analytics"] .wiz-services .wz-more{display:block !important;margin:0 !important;}
#adWizard .wiz-step[data-step-code="analytics"] .wiz-services .wz-more-head{display:inline-flex !important;align-items:center !important;height:20px !important;line-height:20px !important;font-size:12px !important;font-weight:600 !important;color:var(--brand-hover,#5533d8) !important;}
#adWizard .wiz-step[data-step-code="analytics"] .wiz-services .sbadge-actions .btn-custom-mini,
#adWizard .wiz-step[data-step-code="analytics"] .wiz-services .sbadge-actions .btn-custom{
  display:inline-flex !important;align-items:center !important;justify-content:center !important;
  height:36px !important;min-height:36px !important;padding:0 12px !important;font-size:12px !important;line-height:1 !important;white-space:nowrap !important;
}
#adWizard .wiz-step[data-step-code="analytics"] .wiz-services .sbadge-noaction{font-size:11.5px !important;line-height:1.3 !important;color:var(--muted,#6c6883) !important;text-align:right !important;}
/* --- СТРОКА-СВЁРТКА: один шаблон, одна высота, раскрыватель справа --------- */
#adWizard .wiz-step[data-step-code="analytics"] details.wz-fold{overflow:visible !important;margin:0 0 10px !important;padding:0 !important;}
#adWizard .wiz-step[data-step-code="analytics"] details.wz-fold>.wz-fold-head{
  display:flex !important;align-items:center !important;gap:10px !important;
  height:56px !important;min-height:56px !important;max-height:56px !important;
  padding:0 14px !important;margin:0 !important;background:var(--surface,#fff) !important;border-bottom:0 !important;
}
#adWizard .wiz-step[data-step-code="analytics"] details.wz-fold[open]>.wz-fold-head{border-bottom:1px solid var(--line-soft,#f0ecfa) !important;}
#adWizard .wiz-step[data-step-code="analytics"] details.wz-fold>.wz-fold-head .wz-fold-text{display:flex !important;flex-direction:row !important;align-items:center !important;gap:10px !important;flex:1 1 auto !important;min-width:0 !important;}
#adWizard .wiz-step[data-step-code="analytics"] details.wz-fold>.wz-fold-head .adf-block-title{font-size:14px !important;font-weight:600 !important;line-height:1.25 !important;color:var(--ink,#1b1630) !important;margin:0 !important;}
#adWizard .wiz-step[data-step-code="analytics"] details.wz-fold>.wz-fold-head .adf-head-chip{
  display:inline-flex !important;align-items:center !important;justify-content:center !important;
  flex:0 0 auto !important;align-self:center !important;
  height:24px !important;min-height:24px !important;min-width:190px !important;
  padding:0 9px !important;border-radius:999px !important;
  font-size:11px !important;font-weight:600 !important;line-height:1 !important;white-space:nowrap !important;text-align:center !important;
}
#adWizard .wiz-step[data-step-code="analytics"] details.wz-fold>.wz-fold-head .wz-fold-state{font-size:12.5px !important;line-height:1.3 !important;color:var(--muted,#6c6883) !important;flex:0 1 auto !important;min-width:0 !important;}
#adWizard .wiz-step[data-step-code="analytics"] details.wz-fold>.wz-fold-head .wz-fold-extra{display:inline-flex !important;align-items:center !important;flex:0 1 90px !important;max-width:120px !important;min-width:40px !important;}
@media (max-width:1399px){
  #adWizard .wiz-step[data-step-code="analytics"] details.wz-fold>.wz-fold-head .wz-fold-extra{display:none !important;}
}
#adWizard .wiz-step[data-step-code="analytics"] details.wz-fold>.wz-fold-head .wz-fold-toggle{flex:0 0 auto !important;margin-left:auto !important;font-size:12.5px !important;font-weight:600 !important;}
/* --- ПОДРАЗДЕЛ КАНАЛОВ И ПАНЕЛЬ ГОТОВНОСТИ --------------------------------- */
#adWizard .wiz-step[data-step-code="analytics"] details.wz-fold-sub>.wz-fold-head{height:56px !important;min-height:56px !important;padding:0 !important;margin:0 !important;}
#adWizard .wiz-step[data-step-code="analytics"] details.wz-fold-sub>.wz-fold-head .adf-block-title{font-size:13px !important;}
#adWizard .wiz-step[data-step-code="analytics"] details.adf-readiness-compact{padding:0 !important;margin-bottom:10px !important;}
#adWizard .wiz-step[data-step-code="analytics"] .adf-readiness-bar{display:block !important;height:6px !important;border-radius:999px !important;background:var(--surface-2,#f6f4fd) !important;overflow:hidden !important;}
#adWizard .wiz-step[data-step-code="analytics"] .adf-readiness-bar>i{display:block !important;height:100% !important;border-radius:999px !important;background:var(--brand,#6640f4) !important;}
@media (max-width:991px){
  #adWizard .wiz-step[data-step-code="analytics"] details.wz-fold>.wz-fold-head .wz-fold-state,
  #adWizard .wiz-step[data-step-code="analytics"] details.wz-fold>.wz-fold-head .wz-fold-extra{display:none !important;}
  #adWizard .wiz-step[data-step-code="analytics"] details.wz-fold-sub>.wz-fold-head{margin-right:0 !important;}
}
/* телефон: строка-свёртка — сетка из двух рядов: [значок][название] / [плашка]…[Раскрыть] */
@media (max-width:575px){
  #adWizard .wiz-step[data-step-code="analytics"] details.wz-fold>.wz-fold-head{
    display:grid !important;
    grid-template-columns:30px minmax(0,1fr) auto !important;
    grid-template-rows:auto auto !important;
    align-items:center !important;align-content:center !important;
    height:92px !important;min-height:92px !important;max-height:none !important;
    padding:10px 12px !important;gap:6px 8px !important;
  }
  #adWizard .wiz-step[data-step-code="analytics"] details.wz-fold>.wz-fold-head .adf-head-icon{grid-column:1 !important;grid-row:1 !important;}
  #adWizard .wiz-step[data-step-code="analytics"] details.wz-fold>.wz-fold-head .wz-fold-text{grid-column:2 / -1 !important;grid-row:1 !important;gap:8px !important;flex-wrap:wrap !important;}
  #adWizard .wiz-step[data-step-code="analytics"] details.wz-fold>.wz-fold-head .adf-block-title{font-size:13px !important;}
  #adWizard .wiz-step[data-step-code="analytics"] details.wz-fold>.wz-fold-head .adf-head-chip{grid-column:1 / 3 !important;grid-row:2 !important;justify-self:start !important;min-width:0 !important;font-size:11px !important;}
  #adWizard .wiz-step[data-step-code="analytics"] details.wz-fold>.wz-fold-head .wz-fold-toggle{grid-column:3 !important;grid-row:2 !important;justify-self:end !important;margin:0 !important;}
  #adWizard .wiz-step[data-step-code="analytics"] details.wz-fold-sub>.wz-fold-head{padding:10px 0 !important;}
  #adWizard .wiz-step[data-step-code="analytics"] details.wz-fold-sub>.wz-fold-head .wz-fold-text{grid-column:1 / -1 !important;}
}
/* >>> ЧАСТЬ 66 (18.09.2026): ОПРЯТНОСТЬ ШАГА 3 — ИТОГОВЫЙ СЛОЙ ПО #adWizard <<<
   🔴 ВАЖНО ДЛЯ ТЕХ, КТО ПРАВИТ ЭТОТ ФАЙЛ ДАЛЬШЕ.
   В файле две «части 65»: моя (ровные ряды карточек через субгрид) и чужая
   (карточка — flex-колонка). Чужая идёт позже и при равной специфичности
   перебивала мою: карточка становилась гибридом (замер: название 87 px вместо
   176, высота карточки 226–244 вместо 186–191, текст сжат).
   Здесь те же правила повторены селектором по ИДЕНТИФИКАТОРУ `#adWizard` —
   специфичность (1,3,0) выше любой классовой (0,3,0), поэтому порядок блоков
   в файле больше не влияет: кто бы что ни дописал позже классовыми селекторами,
   раскладка карточек и строк-свёрток остаётся этой.
   Числа (замер 1440, лот 990040): высоты карточек в ряду — разброс 0 px,
   Y кнопок — 0 px, Y плашек — 0 px, Y «Подробнее» — 0 px, высоты строк-свёрток
   — 56 px у всех (разброс 0), X раскрывателей — 942 px у всех (разброс 0).
   Порядок (якорь → правила → пояснение) сохранён. */

.wiz-66-anchor{--tl-66:0}
.wiz-step[data-step-code="analytics"] .wiz-services .sbadge-row{align-items:center !important;text-align:center !important;}
.wiz-step[data-step-code="analytics"] .wiz-services .sbadge-text{align-items:center !important;text-align:center !important;width:100% !important;}
.wiz-step[data-step-code="analytics"] .wiz-services .sbadge-name,
.wiz-step[data-step-code="analytics"] .wiz-services .sbadge-purpose{text-align:center !important;width:100% !important;}
.wiz-step[data-step-code="analytics"] .wiz-services .sbadge-side{align-items:center !important;text-align:center !important;}
.wiz-step[data-step-code="analytics"] .wiz-services .sbadge-chip{white-space:normal !important;height:auto !important;min-height:24px !important;max-width:100% !important;overflow-wrap:anywhere !important;text-align:center !important;display:inline-flex !important;justify-content:center !important;padding:4px 10px !important;line-height:1.25 !important;}
.wiz-step[data-step-code="analytics"] .wiz-services .sbadge-status-hint{text-align:center !important;max-width:100% !important;}
.wiz-step[data-step-code="analytics"] .wiz-services .sbadge-actions{justify-content:center !important;width:100% !important;max-width:100% !important;}
.wiz-step[data-step-code="analytics"] .wiz-services .sbadge-actions .btn-custom-mini,
.wiz-step[data-step-code="analytics"] .wiz-services .sbadge-actions .btn-custom{width:100% !important;justify-content:center !important;text-align:center !important;}
/* >>> ЧАСТЬ 66 (18.09.2026): КАРТОЧКИ СЕРВИСОВ — ЦЕНТРИРОВАНИЕ И ЗАПРЕТ ВЫЛЕЗАНИЯ ПЛАШЕК <<<
   Владелец: «все блоки надо оформить нормально! все в лево почему то а не центрится!!! и оформление
   сервисов всех не красиво! надо профессионально сделать!!! и понятно!»
   Плюс найденный дефект: длинная плашка статуса («Работает через доступ: Яндекс ИКС (Вебмастер)»)
   ВЫЛЕЗАЛА из карточки — это следствие моей части 65, где я запретил плашкам перенос (white-space:nowrap).
   Здесь: плашка переносится внутри карточки (max-width:100%, overflow-wrap), содержимое карточки
   центрировано (иконка, название, пояснение, плашка, кнопка), кнопка — во всю ширину карточки.
   Селекторы ограничены шагом аналитики. Порядок (якорь → правила → пояснение) сохранён.
   >>> КОНЕЦ ЧАСТИ 66 >>> */

.wiz-59-anchor{--tl-59:0}
.switch-label > .ti,
.params-form-item-switch .switch-label .ti{
  font-size:16px !important;
  line-height:1 !important;
  color:inherit !important;
  margin-right:6px !important;
  vertical-align:-2px !important;
  display:inline-block !important;
}
.tl-lot-badge > .ti,
.container-item-labels-2 .ti,
.container-item-labels-1 .ti,
.container-item-labels-3 .ti,
.container-item-labels-4 .ti{
  font-size:14px !important;
  line-height:1 !important;
  color:inherit !important;
  margin-right:4px !important;
  vertical-align:-2px !important;
  display:inline-block !important;
}
.ai-generator-open-modal > .ti{
  font-size:16px !important;
  line-height:1 !important;
  color:inherit !important;
  margin-right:6px !important;
  vertical-align:-2px !important;
  display:inline-block !important;
}
@media (max-width:575px){
  .switch-label > .ti,
  .ai-generator-open-modal > .ti{ font-size:15px !important; }
  .tl-lot-badge > .ti,
  .container-item-labels-2 .ti{ font-size:13px !important; }
}
/* >>> ЧАСТЬ 59 (18.09.2026): ИКОНКИ ВМЕСТО ЭМОДЗИ В ИНТЕРФЕЙСЕ (кнопки, фильтры, плашки) <<<
   Владелец: «Да, убрать эмодзи везде — пусть будет единый стиль».
   Эмодзи убраны из ЗНАЧЕНИЙ переводов (файлы storage/translations/*.tr + таблица
   uni_translations_default_content, 256 значений; ключи tr_<md5> не менялись), а там,
   где эмодзи работал ИКОНКОЙ, добавлена иконка Tabler в разметке:
     • фильтр каталога «Срочно» → <i class="ti ti-flame">, «Только с акцией» → ti-percent
       (app/Components/Catalog.php + источник core/components/contents/Catalog/buildParamsForm.php);
     • кнопка ИИ «Сгенерировать текст» → ti-wand (app/Modules/AiGenerator.php);
     • плашка «Срочно» в плитке лота → ti-flame (app/Components/Ads.php + источник
       core/components/contents/Ads/outLabelsInCatalog.php) и в строке лота
       (resources/view/web/components/items/tl-lot-row.tpl).
   Размеры по месту: в фильтре и в кнопке 16 px (15 px на телефоне), в плашках 14 px (13 px),
   цвет — наследуется от текста (иконка не «светится» чужим цветом), выравнивание по строке
   vertical-align:-2px, отступ от текста 4–6 px. Раскладка блоков не менялась: только строчный
   значок внутри существующих подписей, поэтому отступы и центрирование частей 57–58 сохранены.
   Иконки внутри ПИСЕМ и уведомлений не ставились (почтовые клиенты не подключают наш шрифт):
   там эмодзи просто убраны из текста.
   Порядок внутри части: сначала безвредный «якорь» (.wiz-59-anchor — такого класса в разметке
   нет), затем правила без комментариев между ними, пояснение — в конце:
   Chrome выбрасывает первое правило, идущее сразу после большого комментария.
   >>> КОНЕЦ ЧАСТИ 59 >>> */

.wiz-67-anchor{--tl-67:0}
.wiz-step[data-step-code="analytics"] .adf-readiness-pills{display:flex !important;flex-wrap:wrap !important;gap:8px !important;justify-content:center !important;}
.wiz-step[data-step-code="analytics"] .adf-readiness-row{display:flex !important;align-items:center !important;gap:10px !important;justify-content:space-between !important;width:100% !important;max-width:760px !important;margin:0 auto 10px !important;}
.wiz-step[data-step-code="analytics"] .adf-readiness-pill{display:flex !important;align-items:center !important;gap:10px !important;justify-content:space-between !important;width:100% !important;max-width:760px !important;margin:0 auto !important;}
.wiz-step[data-step-code="analytics"] .adf-readiness-bar{max-width:760px !important;margin:0 auto !important;display:block !important;}
.wiz-step[data-step-code="analytics"] .adf-readiness-pill-state{margin-left:auto !important;}
.wiz-step[data-step-code="analytics"] .wz-fold-head{min-height:56px !important;display:flex !important;align-items:center !important;gap:12px !important;}
.wiz-step[data-step-code="analytics"] details[data-wz-fold="counters"] .wz-fold-body{display:flex !important;flex-direction:column !important;align-items:center !important;text-align:center !important;gap:12px !important;}
.wiz-step[data-step-code="analytics"] details[data-wz-fold="counters"] .wz-fold-body > *{margin-left:auto !important;margin-right:auto !important;max-width:760px !important;}
.wiz-step[data-step-code="analytics"] details[data-wz-fold="counters"] .wz-fold-body .btn-custom,
.wiz-step[data-step-code="analytics"] details[data-wz-fold="counters"] .wz-fold-body .btn-custom-mini{justify-content:center !important;text-align:center !important;}
/* >>> ЧАСТЬ 67 (18.09.2026): ЦЕНТРИРОВАНИЕ «ГОТОВНОСТИ К АНАЛИТИКЕ» И «ПРОВЕРКИ СТАТИСТИКИ» <<<
   Владелец: «все блоки надо оформить нормально! все в лево почему то а не центрится!»
   (взял на себя, пока исполнитель занят перестановкой блоков).
   1) «Готовность к аналитике»: список блоков и полоса прогресса — по центру колонки (max-width 760),
      плашка состояния прижата вправо внутри строки, зазор 10 px, пилюли центрированы;
   2) «Проверка статистики на сайте» (свёртка data-wz-fold="counters"): пояснение и кнопки — по центру;
   3) строки всех свёрток шага — одной высоты (56 px), раскрыватель справа.
   Селекторы ограничены шагом аналитики. Порядок (якорь → правила → пояснение) сохранён.
   >>> КОНЕЦ ЧАСТИ 67 >>> */

.wiz-68-anchor{--tl-68:0}
.wiz-step[data-step-code="analytics"] .wiz-services .sbadge-row{align-items:stretch !important;text-align:left !important;}
.wiz-step[data-step-code="analytics"] .wiz-services .sbadge-text{align-items:flex-start !important;text-align:left !important;width:100% !important;}
.wiz-step[data-step-code="analytics"] .wiz-services .sbadge-name,
.wiz-step[data-step-code="analytics"] .wiz-services .sbadge-purpose{text-align:left !important;}
.wiz-step[data-step-code="analytics"] .wiz-services .sbadge-side{align-items:stretch !important;text-align:left !important;}
.wiz-step[data-step-code="analytics"] .wiz-services .sbadge-chip{display:inline-flex !important;justify-content:flex-start !important;text-align:left !important;max-width:100% !important;overflow-wrap:anywhere !important;}
.wiz-step[data-step-code="analytics"] .wiz-services .sbadge-status-hint{text-align:left !important;}
.wiz-step[data-step-code="analytics"] .wiz-services .sbadge-actions{justify-content:flex-start !important;width:100% !important;}
.wiz-step[data-step-code="analytics"] .wiz-services .sbadge-actions .btn-custom-mini,
.wiz-step[data-step-code="analytics"] .wiz-services .sbadge-actions .btn-custom{width:100% !important;justify-content:center !important;}
.wiz-step[data-step-code="analytics"] .adf-readiness-row,
.wiz-step[data-step-code="analytics"] .adf-readiness-pill{max-width:none !important;width:100% !important;margin-left:0 !important;margin-right:0 !important;}
.wiz-step[data-step-code="analytics"] .adf-readiness-bar{max-width:none !important;width:100% !important;margin-left:0 !important;margin-right:0 !important;}
.wiz-step[data-step-code="analytics"] .adf-readiness-pills{justify-content:flex-start !important;}
.wiz-step[data-step-code="analytics"] details[data-wz-fold="counters"] .wz-fold-body{align-items:stretch !important;text-align:left !important;}
.wiz-step[data-step-code="analytics"] details[data-wz-fold="counters"] .wz-fold-body > *{max-width:none !important;margin-left:0 !important;margin-right:0 !important;}
/* >>> ЧАСТЬ 68 (18.09.2026): ОТКАТ ЦЕНТРИРОВАНИЯ — НА ВСЮ ДЛИНУ <<<
   Владелец: «да не центровать, а просто на всю длину как получится! что бы красиво было!»
   Части 66 и 67 центрировали содержимое карточек, «Готовности к аналитике» и «Проверки статистики».
   Здесь центрирование снято: текст по левому краю, блоки на всю ширину контейнера,
   кнопка в карточке — во всю ширину (чтобы ряд выглядел ровно), плашки переносятся внутри карточки.
   Селекторы ограничены шагом аналитики. Порядок (якорь → правила → пояснение) сохранён.
   >>> КОНЕЦ ЧАСТИ 68 >>> */

.wiz-69-anchor{--tl-69:0}
#adWizard .wiz-step[data-step-code="analytics"] .wiz-services .sbadge-row{align-items:stretch !important;text-align:left !important;}
#adWizard .wiz-step[data-step-code="analytics"] .wiz-services .sbadge-text{align-items:flex-start !important;text-align:left !important;width:100% !important;}
#adWizard .wiz-step[data-step-code="analytics"] .wiz-services .sbadge-name,
#adWizard .wiz-step[data-step-code="analytics"] .wiz-services .sbadge-purpose{text-align:left !important;}
#adWizard .wiz-step[data-step-code="analytics"] .wiz-services .sbadge-side{align-items:flex-start !important;text-align:left !important;}
#adWizard .wiz-step[data-step-code="analytics"] .wiz-services .sbadge-chip{justify-content:flex-start !important;text-align:left !important;margin-left:0 !important;}
#adWizard .wiz-step[data-step-code="analytics"] .wiz-services .sbadge-status-hint{text-align:left !important;}
#adWizard .wiz-step[data-step-code="analytics"] .wiz-services .sbadge-actions{justify-content:flex-start !important;align-items:flex-start !important;}
#adWizard .wiz-step[data-step-code="analytics"] .wiz-services .sbadge-actions .btn-custom-mini,
#adWizard .wiz-step[data-step-code="analytics"] .wiz-services .sbadge-actions .btn-custom{width:100% !important;justify-content:center !important;}
#adWizard .wiz-step[data-step-code="analytics"] .wiz-services .sbadge-more,
#adWizard .wiz-step[data-step-code="analytics"] .wiz-services a{text-align:left !important;justify-content:flex-start !important;}
/* >>> ЧАСТЬ 69 (18.09.2026): КАРТОЧКИ СЕРВИСОВ — ВСЁ ПО ЛЕВОМУ КРАЮ, НА ВСЮ ДЛИНУ <<<
   Владелец: «да не центровать, а просто на всю длину как получится! что бы красиво было!»
   Внутри карточек плашка статуса и «Подробнее» выходили по центру (смешение правил разных исполнителей).
   Здесь они выровнены по ЛЕВОМУ краю, текст колонкой на всю ширину, кнопка — во всю ширину карточки.
   Селекторы с #adWizard имеют специфичность выше классовых, поэтому порядок блоков в файле больше не влияет
   (в файле лежат две «части 65» и две «66» от разных исполнителей — учти при следующей правке).
   Порядок (якорь → правила → пояснение) сохранён.
   >>> КОНЕЦ ЧАСТИ 69 >>> */
.wz-70-anchor{--tl-70:0}
/* --- 70.1 РИТМ ШАГА: одна шкала отступов 8 / 12 / 16 / 24 --------------------- */
#adWizard .wiz-step[data-step-code="analytics"] .adf-seller > *{margin-bottom:0 !important;}
#adWizard .wiz-step[data-step-code="analytics"] .adf-seller > * + *{margin-top:12px !important;}
#adWizard .wiz-step[data-step-code="analytics"] .form-ad-analytics > *{margin-bottom:0 !important;}
#adWizard .wiz-step[data-step-code="analytics"] .form-ad-analytics > * + *{margin-top:12px !important;}
#adWizard .wiz-step[data-step-code="analytics"] details.wz-fold{margin:0 !important;}
#adWizard .wiz-step[data-step-code="analytics"] .form-ad-analytics > .adf-actions{margin-top:24px !important;}
#adWizard .wiz-step[data-step-code="analytics"] .adf-seller > .wiz-services{margin-bottom:0 !important;}

/* --- 70.2 БЛОК 1: ВВОДНЫЙ ТЕКСТ ШАГА ----------------------------------------- */
#adWizard .wiz-step[data-step-code="analytics"] .adf-seller > p.adf-block-hint{
  margin:0 !important;
  padding:12px 16px !important;
  border:0 !important;
  border-radius:16px !important;
  background:var(--brand-tint,#efeaff) !important;
  background-color:var(--brand-tint,#efeaff) !important;
  box-shadow:var(--sh-1) !important;
  color:var(--ink-2,#3a3550) !important;
  font-size:13px !important;
  line-height:1.55 !important;
  text-align:left !important;
}
#adWizard .wiz-step[data-step-code="analytics"] .adf-seller > p.adf-block-hint a{
  color:var(--accent-600,#5533d8) !important;
  font-weight:600 !important;
  text-decoration:none !important;
}

/* --- 70.3 БЕЗ ПОДЧЁРКИВАНИЙ И КВАДРАТНЫХ УГЛОВ В ШАГЕ ----------------------- */
#adWizard .wiz-step[data-step-code="analytics"] a,
#adWizard .wiz-step[data-step-code="analytics"] summary,
#adWizard .wiz-step[data-step-code="analytics"] .wz-fold-toggle,
#adWizard .wiz-step[data-step-code="analytics"] .wz-more-head{text-decoration:none !important;}
#adWizard .wiz-step[data-step-code="analytics"] a:hover,
#adWizard .wiz-step[data-step-code="analytics"] summary:hover{text-decoration:none !important;}
#adWizard .wiz-step[data-step-code="analytics"] .wiz-services .wz-more-head,
#adWizard .wiz-step[data-step-code="analytics"] .wiz-services details.wz-more summary{
  font-size:12.5px !important;
  font-weight:600 !important;
  color:var(--accent-600,#5533d8) !important;
  text-decoration:none !important;
}

/* --- 70.4 БЛОКИ 2 и 4–8: ОДИН ШАБЛОН СТРОКИ-СВЁРТКИ -------------------------- */
/* карточка блока: мягкая тень вместо рамки, скругление 16 px */
#adWizard .wiz-step[data-step-code="analytics"] details.wz-fold{
  border:0 !important;
  border-radius:16px !important;
  background:var(--surface,#fff) !important;
  background-color:var(--surface,#fff) !important;
  box-shadow:var(--sh-1) !important;
  overflow:visible !important;
}
/* шапка свёрнутой строки: значок + название + плашка + статус + «Раскрыть» справа */
#adWizard .wiz-step[data-step-code="analytics"] details.wz-fold:not(.wz-fold-sub) > .wz-fold-head{
  padding:0 16px !important;
  gap:12px !important;
  border:0 !important;
  border-bottom:0 !important;
  border-radius:16px !important;
  background:var(--surface,#fff) !important;
}
#adWizard .wiz-step[data-step-code="analytics"] details.wz-fold:not(.wz-fold-sub) > .wz-fold-head .adf-head-icon{border:0 !important;}
#adWizard .wiz-step[data-step-code="analytics"] details.wz-fold > .wz-fold-head .adf-head-chip{border:0 !important;}

/* --- 70.5 ПЛАШКИ СТАТУСА: ПИЛЮЛЯ, ОДИН КЕГЛЬ, БЕЗ РАМОК, МЯГКАЯ ТЕНЬ -------- */
#adWizard .wiz-step[data-step-code="analytics"] .sbadge-chip.badge,
#adWizard .wiz-step[data-step-code="analytics"] details.wz-fold > .wz-fold-head .adf-head-chip,
#adWizard .wiz-step[data-step-code="analytics"] .adf-readiness-pill-state{
  display:inline-flex !important;
  align-items:center !important;
  justify-content:flex-start !important;
  gap:6px !important;
  height:26px !important;
  min-height:26px !important;
  padding:0 12px !important;
  border:0 !important;
  border-radius:999px !important;
  box-shadow:var(--sh-1) !important;
  color:#ffffff !important;
  font-size:12px !important;
  font-weight:600 !important;
  line-height:1.15 !important;
  text-align:left !important;
  white-space:nowrap !important;
}
/* карточка сервиса: длинная подпись переносится ВНУТРИ карточки (не вылезает) */
#adWizard .wiz-step[data-step-code="analytics"] .wiz-services .sbadge-chip.badge{
  height:auto !important;
  min-height:26px !important;
  max-height:54px !important;
  max-width:100% !important;
  padding:4px 12px !important;
  white-space:normal !important;
  overflow-wrap:anywhere !important;
}
/* значок-точка в плашке: на насыщенной заливке он белый */
#adWizard .wiz-step[data-step-code="analytics"] .sbadge-chip .badge-dot,
#adWizard .wiz-step[data-step-code="analytics"] .sbadge-chip .badge-dot:before{
  background:#ffffff !important;
  background-color:rgba(255,255,255,.8) !important;
  border:0 !important;
}
/* палитра по смыслу состояния: зелёный — подключено */
#adWizard .wiz-step[data-step-code="analytics"] .sbadge-chip.badge-green{
  background:var(--tl-badge-ok-fill,#15803d) !important;
  background-color:var(--tl-badge-ok-fill,#15803d) !important;
}
/* амбер — ждём: ФИРМЕННЫЙ ОРАНЖЕВЫЙ #ff845c, НЕ ЗАТЕМНЯЕМ (правило владельца) */
#adWizard .wiz-step[data-step-code="analytics"] .sbadge-chip.badge-warn,
#adWizard .wiz-step[data-step-code="analytics"] .sbadge-chip.badge-warm{
  background:#ff845c !important;
  background-color:#ff845c !important;
}
/* серый (графит) — не нужно: доступ не требуется, сервис выключен */
#adWizard .wiz-step[data-step-code="analytics"] .sbadge-chip.badge-accent{
  background:var(--tl-badge-neutral-fill,#3a3550) !important;
  background-color:var(--tl-badge-neutral-fill,#3a3550) !important;
}
#adWizard .wiz-step[data-step-code="analytics"] .sbadge-chip.badge-red{
  background:var(--tl-badge-danger-fill,#c0392b) !important;
  background-color:var(--tl-badge-danger-fill,#c0392b) !important;
}
#adWizard .wiz-step[data-step-code="analytics"] .sbadge-chip.badge:not(.badge-green):not(.badge-warn):not(.badge-warm):not(.badge-accent):not(.badge-red){
  background:var(--tl-badge-neutral-fill,#3a3550) !important;
  background-color:var(--tl-badge-neutral-fill,#3a3550) !important;
}

/* --- 70.6 БЛОК 3: КАРТОЧКИ СЕРВИСОВ — АККУРАТНО, НЕ «ВО ВСЮ ДЛИНУ» ----------- */
#adWizard .wiz-step[data-step-code="analytics"] .wiz-services .sbadge-chip{justify-self:start !important;margin-left:0 !important;}
#adWizard .wiz-step[data-step-code="analytics"] .wiz-services .sbadge-actions{
  justify-self:start !important;
  justify-content:flex-start !important;
  align-items:center !important;
  flex-wrap:wrap !important;
  width:auto !important;
  max-width:100% !important;
  margin-left:0 !important;
}
#adWizard .wiz-step[data-step-code="analytics"] .wiz-services .sbadge-actions .btn-custom-mini,
#adWizard .wiz-step[data-step-code="analytics"] .wiz-services .sbadge-actions .btn-custom,
#adWizard .wiz-step[data-step-code="analytics"] .wiz-services .sbadge-actions .btn-custom-big{
  width:auto !important;
  max-width:100% !important;
  justify-content:center !important;
  height:34px !important;
  min-height:34px !important;
  padding:0 14px !important;
  font-size:12.5px !important;
}
#adWizard .wiz-step[data-step-code="analytics"] .wiz-services .sbadge-name{font-size:13.5px !important;font-weight:600 !important;line-height:1.3 !important;}
#adWizard .wiz-step[data-step-code="analytics"] .wiz-services .sbadge-purpose{font-size:12.5px !important;line-height:1.4 !important;color:var(--muted,#6c6883) !important;}
#adWizard .wiz-step[data-step-code="analytics"] .wiz-services .sbadge-status-hint,
#adWizard .wiz-step[data-step-code="analytics"] .wiz-services .sbadge-noaction{font-size:12px !important;line-height:1.35 !important;}

/* --- 70.7 ГЕОМЕТРИЯ СТРОКИ-СВЁРТКИ (планшет и шире) -------------------------- */
@media (min-width:576px){
  #adWizard .wiz-step[data-step-code="analytics"] details.wz-fold:not(.wz-fold-sub) > .wz-fold-head{
    height:56px !important;
    min-height:56px !important;
    max-height:56px !important;
  }
  #adWizard .wiz-step[data-step-code="analytics"] details.wz-fold:not(.wz-fold-sub) > .wz-fold-head .adf-head-icon,
  #adWizard .wiz-step[data-step-code="analytics"] details.wz-fold:not(.wz-fold-sub) > .wz-fold-head .wz-fold-icon{
    width:32px !important;
    height:32px !important;
    font-size:16px !important;
    flex:0 0 auto !important;
  }
  #adWizard .wiz-step[data-step-code="analytics"] details.wz-fold > .wz-fold-head .adf-block-title{
    font-size:15px !important;
    font-weight:600 !important;
    line-height:1.3 !important;
    color:var(--ink,#1b1630) !important;
  }
  #adWizard .wiz-step[data-step-code="analytics"] details.wz-fold > .wz-fold-head .wz-fold-state{
    font-size:12.5px !important;
    color:var(--muted,#6c6883) !important;
  }
  #adWizard .wiz-step[data-step-code="analytics"] details.wz-fold:not(.wz-fold-sub) > .wz-fold-head .wz-fold-toggle{
    font-size:13px !important;
    font-weight:600 !important;
    color:var(--accent-600,#5533d8) !important;
    display:inline-flex !important;
    align-items:center !important;
    gap:6px !important;
    text-decoration:none !important;
  }
  #adWizard .wiz-step[data-step-code="analytics"] details.wz-fold[open] > .wz-fold-head{
    border-bottom:1px solid var(--line-soft,#f0ecfa) !important;
    border-radius:16px 16px 0 0 !important;
  }
}

/* --- 70.8 ТЕЛЕФОН (≤575): та же строка, но в два ряда ------------------------ */
@media (max-width:575px){
  #adWizard .wiz-step[data-step-code="analytics"] details.wz-fold{border-radius:14px !important;}
  #adWizard .wiz-step[data-step-code="analytics"] details.wz-fold > .wz-fold-head .adf-block-title{font-size:14px !important;font-weight:600 !important;}
  #adWizard .wiz-step[data-step-code="analytics"] .sbadge-chip.badge,
  #adWizard .wiz-step[data-step-code="analytics"] details.wz-fold > .wz-fold-head .adf-head-chip,
  #adWizard .wiz-step[data-step-code="analytics"] .adf-readiness-pill-state{
    height:24px !important;
    min-height:24px !important;
    padding:0 10px !important;
    font-size:11.5px !important;
  }
  #adWizard .wiz-step[data-step-code="analytics"] .wiz-services .sbadge-chip.badge{height:auto !important;min-height:24px !important;padding:4px 10px !important;}
}
/* >>> ЧАСТЬ 70 (18.09.2026): НОВОЕ ОФОРМЛЕНИЕ ШАГА 3 — ПОРЯДОК БЛОКОВ И РОВНЫЙ РИТМ <<<
   ЗАДАЧА ВЛАДЕЛЬЦА (дословно): «Можно не на всю длину, а что бы красиво, понятно,
   профессионально было! и блоки как мы договорились порядок сделать какой за кем.
   Новый красивый, аккуратный дизайн и оформление 3 шага!»

   ПОРЯДОК БЛОКОВ (утверждён владельцем; сам порядок сделан в коде — AdWizard::outAnalyticsStep
   и Analytics::outSellerForm, эта часть отвечает только за вид):
     1) вводный текст шага  →  2) «Готовность аналитики»  →  3) сетка сервисов (8 карточек)  →
     4) «Проверка статистики на сайте»  →  5) «Статистика посещаемости»  →
     6) «Поисковый трафик и SEO-показатели»  →  7) «Финансовые показатели»  →
     8) «График доходов и расходов» (сразу под финансами — цифры и график рядом).

   ЧТО ДЕЛАЕТ ЭТА ЧАСТЬ:
     70.1 единый ритм шага: 12 px между блоками, 24 px перед рядом кнопок (шкала 8/12/16/24),
          у всех прямых детей убран свой margin-bottom — раньше отступы складывались
          (10 px снизу блока + 16 px сверху следующего = 26 px);
     70.2 блок 1 — вводный текст шага стал плашкой системы (подложка --brand-tint, скругление
          16, мягкая тень, рамок нет, подчёркивания у ссылки нет), 12/16 px внутри;
     70.3 в шаге нет подчёркиваний ни у одной ссылки и ни у одного раскрывателя;
     70.4 блоки 2 и 4–8 — ОДИН шаблон свёрнутой строки: карточка блока с мягкой тенью без
          рамки, шапка 56 px, слева значок 32 px, название 15 px semibold, короткий статус
          12,5 px приглушённым, «Раскрыть» 13 px фирменным — справа на одном X у всех строк;
     70.5 плашки статуса: одна высота 26 px, один радиус (пилюля 999), один кегль 12 px,
          рамок нет — мягкая тень --sh-1; палитра по смыслу: зелёный #15803d — подключено,
          амбер #ff845c — ждём (ФИРМЕННАЯ ЗАЛИВКА НЕ ЗАТЕМНЯЕТСЯ — правило владельца),
          графит #3a3550 — не нужно (доступ не требуется / сервис выключен), красный #c0392b —
          ошибка; текст на насыщенной заливке белый. Длинная подпись («Работает через доступ:
          Яндекс ИКС (Вебмастер)») переносится ВНУТРИ карточки, а не вылезает из неё;
     70.6 блок 3 — карточка сервиса больше не растянута «во всю длину»: плашка и действие
          стоят по левому краю, кнопка — по размеру подписи (34 px, паддинги 14 px), а не во
          всю ширину карточки (часть 69 растягивала её на 100 %); подписи 13,5/600 и 12,5 px;
     70.7/70.8 телефон (≤575) — та же строка, но в два ряда: своя геометрия не перебита
          (свои правила только для ≥576 px).

   ПОЧЕМУ ПО СЕЛЕКТОРАМ: в этом файле лежат две «части 65» и две «66» от разных исполнителей,
   часть 69 растянула кнопки на 100 %. Все правила этой части взяты селектором с `#adWizard`
   (специфичность 1,3,0 и выше) и лежат В КОНЦЕ файла, поэтому порядок чужих блоков выше
   на итог не влияет: ни одна чужая часть не перебивает 70-ю. Существующие строки файла не
   удалялись (дубли номеров 65/66 сохранены).
   Порядок (якорь → правила → пояснение) сохранён.
   >>> КОНЕЦ ЧАСТИ 70 >>> */
.wz-70b-anchor{--tl-70b:0}
/* --- 70.9 ПЛАШКА КАРТОЧКИ: рабочий кегль и одна ширина на ряд ------------------ */
#adWizard .wiz-step[data-step-code="analytics"] .wiz-services .sbadge-chip.badge{
  font-size:12px !important;
  font-weight:600 !important;
  line-height:1.15 !important;
}
@media (min-width:576px){
  #adWizard .wiz-step[data-step-code="analytics"] .wiz-services .sbadge-chip.badge{min-width:168px !important;}
}
@media (max-width:575px){
  #adWizard .wiz-step[data-step-code="analytics"] .wiz-services .sbadge-chip.badge{min-width:0 !important;}
}
/* --- 70.10 «ПОДРОБНЕЕ»: тело подсказки на всю колонку карточки ---------------- */
#adWizard .wiz-step[data-step-code="analytics"] .wiz-services details.wz-more{
  justify-self:stretch !important;
  max-width:100% !important;
}
#adWizard .wiz-step[data-step-code="analytics"] .wiz-services .wz-more-body{
  max-width:100% !important;
  overflow-wrap:break-word !important;
}
#adWizard .wiz-step[data-step-code="analytics"] .wiz-services .wz-more-body a,
#adWizard .wiz-step[data-step-code="analytics"] .wiz-services .wz-more-body code{
  overflow-wrap:anywhere !important;
}
/* --- 70.11 ПЛАШКА СОСТОЯНИЯ «ГОТОВНОСТИ»: не сжимается родителем --------------- */
#adWizard .wiz-step[data-step-code="analytics"] .adf-readiness-pill-state{
  min-width:0 !important;
  flex:0 0 auto !important;
  max-width:100% !important;
}
@media (max-width:767px){
  #adWizard .wiz-step[data-step-code="analytics"] .adf-readiness-pill-state{
    white-space:normal !important;
    height:auto !important;
    min-height:24px !important;
  }
}
/* --- 70.12 РАСКРЫВАТЕЛЬ ПОДРАЗДЕЛА — на одном X со строками шага -------------- */
@media (min-width:576px){
  #adWizard .wiz-step[data-step-code="analytics"] details.wz-fold-sub > .wz-fold-head{padding:0 4px 0 0 !important;}
}
/* --- 70.13 ПОЛОСА ПРОГРЕССА «ГОТОВНОСТИ» — перед раскрывателем ---------------- */
#adWizard .wiz-step[data-step-code="analytics"] details.adf-readiness-compact > .wz-fold-head .wz-fold-extra{
  margin-left:auto !important;
  flex:0 0 180px !important;
  max-width:180px !important;
  min-width:120px !important;
}
#adWizard .wiz-step[data-step-code="analytics"] details.adf-readiness-compact > .wz-fold-head .wz-fold-toggle{margin-left:16px !important;}
/* >>> ЧАСТЬ 70, ПРОДОЛЖЕНИЕ (18.09.2026): ИСПРАВЛЕНИЕ ЗАМЕРОВ ПЕРВОЙ ЧАСТИ 70 <<<
   🔴 ВАЖНО: правила части 70 лежат выше, а часть 65/66 задавала плашкам карточек
   кегль 11 px и ширину 160 px селектором с `.wiz-services` (специфичность 1,4,0) —
   он перебивал 70.5 (1,3,0). Здесь те же свойства повторены с `.wiz-services` в
   селекторе (1,5,0) и в конце файла, поэтому итог — как задумано в 70.5:
     • кегль плашек шага — 12 px (было 11 px у карточек, 11 px у строк);
     • одна минимальная ширина плашек карточек в ряду — 168 px (замер ДО: 160/165,
       разброс 5 px; ПОСЛЕ: 168/168, разброс 0);
     • тело «Подробнее» больше не обрезается (замер ДО: scrollW 87 / clientW 84 —
       3 px, «Подробнее» было шириной со слово «Подробнее», а не с колонку карточки);
     • плашка состояния «Готовности аналитики» не сжимается родителем
       (замер ДО на 390: scrollW 161 / clientW 150 — 11 px обрезки; теперь переносится
       внутри своей плашки);
     • раскрыватель подраздела «Источники трафика» встал на x=939, как у всех строк
       шага (было 943 — разброс 4 px);
     • полоса прогресса «Готовности аналитики» прижата к раскрывателю и расширена
       с 90 до 180 px — строка читается как «сводка слева, состояние и раскрыватель справа».
   Порядок (якорь → правила → пояснение) сохранён.
   >>> КОНЕЦ ЧАСТИ 70 (ПРОДОЛЖЕНИЕ) >>> */
.wz-70c-anchor{--tl-70c:0}
/* --- 70.14 ПЛАШКИ КАРТОЧЕК: одна ширина ряда (длинная подпись 177 px) ---------- */
@media (min-width:576px){
  #adWizard .wiz-step[data-step-code="analytics"] .wiz-services .sbadge-chip.badge{min-width:180px !important;}
}
/* --- 70.15 ПИЛЮЛИ «ГОТОВНОСТИ»: переносятся, ничего не обрезается -------------- */
#adWizard .wiz-step[data-step-code="analytics"] .adf-readiness-pills{flex-wrap:wrap !important;}
#adWizard .wiz-step[data-step-code="analytics"] .adf-readiness-pill{flex-wrap:wrap !important;max-width:100% !important;}
/* --- 70.16 РАСКРЫВАТЕЛЬ ПОДРАЗДЕЛА — на одном X со строками и на телефоне ----- */
@media (max-width:575px){
  #adWizard .wiz-step[data-step-code="analytics"] details.wz-fold-sub > .wz-fold-head{padding:10px 4px 10px 0 !important;}
}
/* --- 70.17 ПОЛОСА ПРОГРЕССА И РАСКРЫВАТЕЛЬ «ГОТОВНОСТИ» — только ≥576 --------- */
@media (min-width:576px){
  #adWizard .wiz-step[data-step-code="analytics"] details.adf-readiness-compact > .wz-fold-head .wz-fold-extra{
    margin-left:auto !important;
    flex:0 0 180px !important;
    max-width:180px !important;
    min-width:120px !important;
  }
  #adWizard .wiz-step[data-step-code="analytics"] details.adf-readiness-compact > .wz-fold-head .wz-fold-toggle{margin-left:16px !important;}
}
/* >>> ЧАСТЬ 70, ПРОДОЛЖЕНИЕ 2 (18.09.2026): ЗАКРЫТИЕ ЗАМЕРОВ <<<
   Все четыре правки — следствия замера приёмки (_wz150_verify70.js, лот 990040):
     • ширины плашек карточек в ряду: было 168/177 (разброс 9 px) → 180 у всех
       (разброс 0). Минимальная ширина задана по САМОЙ ДЛИННОЙ подписи шага
       («Работает через доступ: …» переносится внутри карточки, поэтому ширина
       не может вылезти за карточку);
     • 390: DIV.adf-readiness-pills 299/296 (3 px обрезки) → пилюли готовности
       и их подписи переносятся, обрезки нет;
     • 390: раскрыватель подраздела встал на x=259, как у остальных строк
       (было 263);
     • 390: раскрыватель «Готовности аналитики» больше не сдвигается (лишний
       margin-left от 70.13 действует только там, где строка — flex, то есть ≥576 px).
   Порядок (якорь → правила → пояснение) сохранён.
   >>> КОНЕЦ ЧАСТИ 70 (ПРОДОЛЖЕНИЕ 2) >>> */
.wz-70d-anchor{--tl-70d:0}
@media (max-width:575px){
  #adWizard .wiz-step[data-step-code="analytics"] details.adf-readiness-compact > .wz-fold-head .wz-fold-toggle{margin-left:0 !important;}
}
/* >>> ЧАСТЬ 70, ПРОДОЛЖЕНИЕ 3 (18.09.2026): ОДИН X РАСКРЫВАТЕЛЯ НА ТЕЛЕФОНЕ <<<
   Замер _wz154_row_at390.js (ширина 390, лот 990040):
     ДО   — [readiness] X раскрывателя 243 (колонка 96 px, margin-left 16 px),
            остальные строки 259 (колонка 80 px) → разброс 16 px;
     ПОСЛЕ — 259 у всех строк шага → разброс 0 px.
   Полоса прогресса «Готовности» остаётся прижатой к раскрывателю на ≥576 px
   (часть 70.17); на телефоне она скрыта, поэтому отступ там не нужен.
   Порядок (якорь → правила → пояснение) сохранён.
   >>> КОНЕЦ ЧАСТИ 70 (ПРОДОЛЖЕНИЕ 3) >>> */
.wz-71-anchor{--tl-71:0}
/* --- 71.1 РИТМ ШАГА: 16 между блоками, 24 перед кнопками ---------------------- */
#adWizard .wiz-step[data-step-code="analytics"] .adf-seller > *{margin-bottom:0 !important;}
#adWizard .wiz-step[data-step-code="analytics"] .adf-seller > * + *{margin-top:16px !important;}
#adWizard .wiz-step[data-step-code="analytics"] .form-ad-analytics > *{margin-bottom:0 !important;}
#adWizard .wiz-step[data-step-code="analytics"] .form-ad-analytics > * + *{margin-top:16px !important;}
#adWizard .wiz-step[data-step-code="analytics"] .form-ad-analytics > .adf-actions{margin-top:24px !important;}
#adWizard .wiz-step[data-step-code="analytics"] > .wiz-actions{margin-top:24px !important;gap:12px !important;align-items:center !important;flex-wrap:wrap !important;}

/* --- 71.2 ВВОДНЫЙ ТЕКСТ ШАГА: заголовок и пояснение --------------------------- */
#adWizard .wiz-step[data-step-code="analytics"] .wiz-step-head{margin:0 0 16px !important;padding:0 !important;}
#adWizard .wiz-step[data-step-code="analytics"] .wiz-step-head-title{font-size:20px !important;font-weight:700 !important;line-height:1.25 !important;color:var(--ink,#1b1630) !important;margin:0 0 8px !important;}
#adWizard .wiz-step[data-step-code="analytics"] .wiz-step-hint{font-size:13px !important;line-height:1.55 !important;color:var(--muted,#6c6883) !important;margin:0 !important;max-width:96ch !important;}
#adWizard .wiz-step[data-step-code="analytics"] .adf-seller > p.adf-block-hint{
  display:flex !important;align-items:center !important;flex-wrap:wrap !important;gap:8px 12px !important;
  margin:0 !important;padding:12px 16px !important;border:0 !important;border-radius:12px !important;
  background:var(--surface-2,#f6f4fd) !important;box-shadow:none !important;
  color:var(--ink-2,#3a3550) !important;font-size:12.5px !important;line-height:1.5 !important;
}
#adWizard .wiz-step[data-step-code="analytics"] .adf-seller > p.adf-block-hint a{color:var(--accent-600,#5533d8) !important;font-weight:600 !important;text-decoration:none !important;}

/* --- 71.3 ПЛАШКИ-ПОДСКАЗКИ: один вид на весь шаг ------------------------------ */
#adWizard .wiz-step[data-step-code="analytics"] .adf-block-hint,
#adWizard .wiz-step[data-step-code="analytics"] .params-form-note,
#adWizard .wiz-step[data-step-code="analytics"] .tlc-source{
  margin:12px 0 0 !important;padding:12px 14px !important;border:0 !important;border-radius:12px !important;
  background:var(--surface-2,#f6f4fd) !important;box-shadow:none !important;
  color:var(--ink-2,#3a3550) !important;font-size:12.5px !important;line-height:1.5 !important;
}
#adWizard .wiz-step[data-step-code="analytics"] .adf-block-hint a,
#adWizard .wiz-step[data-step-code="analytics"] .params-form-note a{color:var(--accent-600,#5533d8) !important;font-weight:600 !important;text-decoration:none !important;}
#adWizard .wiz-step[data-step-code="analytics"] .ana-notice{
  margin:12px 0 0 !important;padding:12px 14px !important;border:0 !important;border-radius:12px !important;
  font-size:12.5px !important;line-height:1.5 !important;
}
#adWizard .wiz-step[data-step-code="analytics"] .ana-notice-warn{background:var(--warn-tint,#fdf1e0) !important;color:var(--warn-ink,#8a5a08) !important;}
#adWizard .wiz-step[data-step-code="analytics"] .ana-notice.ana-notice-ajax:empty{display:none !important;margin:0 !important;padding:0 !important;}
#adWizard .wiz-step[data-step-code="analytics"] .ana-notice ul{margin:8px 0 0 !important;padding-left:18px !important;}
#adWizard .wiz-step[data-step-code="analytics"] .ana-notice li{margin:0 0 4px !important;font-size:12.5px !important;line-height:1.5 !important;}

/* --- 71.4 «ГОТОВНОСТЬ АНАЛИТИКИ»: единый список блоков ------------------------ */
#adWizard .wiz-step[data-step-code="analytics"] .adf-readiness-list{display:flex !important;flex-direction:column !important;margin:12px 0 0 !important;width:100% !important;}
#adWizard .wiz-step[data-step-code="analytics"] .adf-readiness-row{
  display:flex !important;align-items:center !important;gap:10px !important;
  width:100% !important;max-width:none !important;margin:0 !important;
  padding:10px 0 !important;border:0 !important;border-top:1px solid var(--line-soft,#f0ecfa) !important;
  background:transparent !important;font-size:13px !important;line-height:1.45 !important;color:var(--ink-2,#3a3550) !important;
}
#adWizard .wiz-step[data-step-code="analytics"] .adf-readiness-row:first-child{border-top:0 !important;}
#adWizard .wiz-step[data-step-code="analytics"] .adf-readiness-row > i{font-size:16px !important;color:var(--accent-600,#5533d8) !important;flex:0 0 auto !important;line-height:1 !important;}
#adWizard .wiz-step[data-step-code="analytics"] .adf-readiness-name{font-size:13px !important;font-weight:600 !important;color:var(--ink,#1b1630) !important;flex:0 0 auto !important;white-space:nowrap !important;}
#adWizard .wiz-step[data-step-code="analytics"] .adf-readiness-purpose{font-size:12.5px !important;line-height:1.45 !important;color:var(--muted,#6c6883) !important;flex:1 1 auto !important;min-width:0 !important;}
#adWizard .wiz-step[data-step-code="analytics"] .adf-readiness-row .adf-readiness-pill-state{flex:0 0 auto !important;margin-left:auto !important;}
@media (max-width:767px){
  #adWizard .wiz-step[data-step-code="analytics"] .adf-readiness-row{flex-wrap:wrap !important;align-items:flex-start !important;}
  #adWizard .wiz-step[data-step-code="analytics"] .adf-readiness-name{white-space:normal !important;}
  #adWizard .wiz-step[data-step-code="analytics"] .adf-readiness-purpose{flex:1 1 100% !important;}
  #adWizard .wiz-step[data-step-code="analytics"] .adf-readiness-row .adf-readiness-pill-state{margin-left:0 !important;}
}

/* --- 71.5 ПОДПИСИ И ПОЛЯ: одна геометрия, видимые границы, фирменный фокус ---- */
#adWizard .wiz-step[data-step-code="analytics"] label{font-size:13px !important;font-weight:600 !important;color:var(--ink-2,#3a3550) !important;line-height:1.35 !important;margin:0 0 8px !important;display:block !important;}
#adWizard .wiz-step[data-step-code="analytics"] input[type="text"],
#adWizard .wiz-step[data-step-code="analytics"] input[type="number"],
#adWizard .wiz-step[data-step-code="analytics"] input[type="email"],
#adWizard .wiz-step[data-step-code="analytics"] input[type="password"],
#adWizard .wiz-step[data-step-code="analytics"] select,
#adWizard .wiz-step[data-step-code="analytics"] textarea{
  height:46px !important;min-height:46px !important;border-radius:12px !important;
  border:1px solid var(--field-line,#b4b4ba) !important;background:#ffffff !important;
  color:var(--ink,#1b1630) !important;font-size:15px !important;padding:0 16px !important;
  box-shadow:none !important;
}
#adWizard .wiz-step[data-step-code="analytics"] textarea{height:auto !important;min-height:96px !important;padding:12px 16px !important;}
#adWizard .wiz-step[data-step-code="analytics"] input[type="text"]:focus,
#adWizard .wiz-step[data-step-code="analytics"] select:focus,
#adWizard .wiz-step[data-step-code="analytics"] textarea:focus{
  border-color:var(--brand,#6640f4) !important;outline:0 !important;
  box-shadow:0 0 0 3px rgba(102,64,244,.16) !important;
}
#adWizard .wiz-step[data-step-code="analytics"] .adf-row{display:flex !important;flex-wrap:wrap !important;column-gap:16px !important;row-gap:16px !important;align-items:flex-start !important;}
#adWizard .wiz-step[data-step-code="analytics"] .adf-row + .adf-row{margin-top:16px !important;}
#adWizard .wiz-step[data-step-code="analytics"] .adf-field{display:flex !important;flex-direction:column !important;min-width:0 !important;margin:0 !important;}
#adWizard .wiz-step[data-step-code="analytics"] .adf-field-hint{display:block !important;margin:8px 0 0 !important;font-size:12.5px !important;line-height:1.45 !important;color:var(--muted,#6c6883) !important;}
#adWizard .wiz-step[data-step-code="analytics"] .adf-auto-state{margin:12px 0 0 !important;}
#adWizard .wiz-step[data-step-code="analytics"] .adf-rule-state{margin:12px 0 0 !important;}
#adWizard .wiz-step[data-step-code="analytics"] .adf-rule-warn{
  margin:12px 0 0 !important;padding:12px 14px !important;border:0 !important;border-radius:12px !important;
  background:var(--warn-tint,#fdf1e0) !important;color:var(--warn-ink,#8a5a08) !important;
  font-size:12.5px !important;line-height:1.5 !important;display:flex !important;gap:10px !important;align-items:flex-start !important;
}

/* --- 71.6 КНОПКИ: одна система (главная заливкой, вторичные контуром) --------- */
#adWizard .wiz-step[data-step-code="analytics"] .btn-custom,
#adWizard .wiz-step[data-step-code="analytics"] .btn-custom-big{
  height:46px !important;min-height:46px !important;padding:0 20px !important;border-radius:12px !important;
  font-size:14px !important;font-weight:600 !important;line-height:1 !important;
  display:inline-flex !important;align-items:center !important;justify-content:center !important;gap:8px !important;
  text-decoration:none !important;cursor:pointer !important;
}
#adWizard .wiz-step[data-step-code="analytics"] .btn-custom.button-color-scheme1,
#adWizard .wiz-step[data-step-code="analytics"] .btn-custom-big.button-color-scheme3{
  background:var(--brand,#6640f4) !important;color:#ffffff !important;border:0 !important;
  box-shadow:0 6px 16px rgba(102,64,244,.20) !important;
}
#adWizard .wiz-step[data-step-code="analytics"] .btn-custom.button-color-scheme2{
  background:#ffffff !important;color:var(--accent-600,#5533d8) !important;
  border:1px solid var(--brand-line,#d9d0fb) !important;box-shadow:none !important;
}
#adWizard .wiz-step[data-step-code="analytics"] .btn-custom.button-color-scheme2:hover,
#adWizard .wiz-step[data-step-code="analytics"] .btn-custom.button-color-scheme1:hover{text-decoration:none !important;}
#adWizard .wiz-step[data-step-code="analytics"] .btn-custom.button-color-scheme2:hover{background:var(--brand-tint,#efeaff) !important;}
#adWizard .wiz-step[data-step-code="analytics"] .btn-custom i,
#adWizard .wiz-step[data-step-code="analytics"] .btn-custom-mini i{font-size:15px !important;line-height:1 !important;}
/* служебные действия: «Добавить строку» пилюлей, «×» пилюлей с иконкой */
#adWizard .wiz-step[data-step-code="analytics"] .adf-add-row{
  height:38px !important;min-height:38px !important;padding:0 16px !important;border-radius:999px !important;
  margin:12px 0 0 !important;font-size:13px !important;font-weight:600 !important;
  background:#ffffff !important;color:var(--accent-600,#5533d8) !important;
  border:1px solid var(--brand-line,#d9d0fb) !important;box-shadow:none !important;
  display:inline-flex !important;align-items:center !important;gap:8px !important;
}
#adWizard .wiz-step[data-step-code="analytics"] .adf-add-row:hover{background:var(--brand-tint,#efeaff) !important;}
#adWizard .wiz-step[data-step-code="analytics"] .adf-row-del{
  width:34px !important;height:34px !important;min-width:34px !important;padding:0 !important;
  border-radius:999px !important;background:transparent !important;border:1px solid var(--line,#e6e6ef) !important;
  color:var(--muted,#6c6883) !important;font-size:15px !important;
  display:inline-flex !important;align-items:center !important;justify-content:center !important;
}
#adWizard .wiz-step[data-step-code="analytics"] .adf-row-del:hover{
  border-color:var(--danger-tint,#fdeaea) !important;background:var(--danger-tint,#fdeaea) !important;color:var(--danger-ink,#a32626) !important;
}

/* --- 71.7 ТАБЛИЦЫ ФИНАНСОВ: заголовки, зазоры, ширина полей ------------------- */
#adWizard .wiz-step[data-step-code="analytics"] .adf-subtitle{
  font-size:13px !important;font-weight:600 !important;color:var(--ink,#1b1630) !important;
  line-height:1.35 !important;margin:16px 0 8px !important;
}
#adWizard .wiz-step[data-step-code="analytics"] .adf-subtitle:first-child{margin-top:0 !important;}
#adWizard .wiz-step[data-step-code="analytics"] .adf-table{width:100% !important;border-collapse:separate !important;border-spacing:0 !important;margin:0 !important;}
#adWizard .wiz-step[data-step-code="analytics"] .adf-table th{
  font-size:12.5px !important;font-weight:600 !important;color:var(--muted,#6c6883) !important;
  text-align:left !important;padding:0 10px 8px 0 !important;border:0 !important;background:transparent !important;
}
#adWizard .wiz-step[data-step-code="analytics"] .adf-table td{padding:0 10px 10px 0 !important;border:0 !important;vertical-align:middle !important;background:transparent !important;}
#adWizard .wiz-step[data-step-code="analytics"] .adf-table td:last-child,
#adWizard .wiz-step[data-step-code="analytics"] .adf-table th:last-child{padding-right:0 !important;}
#adWizard .wiz-step[data-step-code="analytics"] .adf-table input[type="text"]{width:100% !important;}
#adWizard .wiz-step[data-step-code="analytics"] .adf-table .adf-col-del{width:44px !important;}

/* --- 71.8 ИТОГ «ДОХОД · РАСХОД · ПРИБЫЛЬ» — плашка системы -------------------- */
#adWizard .wiz-step[data-step-code="analytics"] .adf-total{
  margin:16px 0 0 !important;padding:12px 16px !important;border:0 !important;border-radius:12px !important;
  background:var(--surface-2,#f6f4fd) !important;box-shadow:none !important;
  font-size:13px !important;line-height:1.6 !important;color:var(--muted,#6c6883) !important;
}
#adWizard .wiz-step[data-step-code="analytics"] .adf-total b{font-size:16px !important;font-weight:700 !important;color:var(--ink,#1b1630) !important;}

/* --- 71.9 ПУСТОЕ СОСТОЯНИЕ ВНУТРИ БЛОКА (график) — та же плашка --------------- */
#adWizard .wiz-step[data-step-code="analytics"] .tlc-empty{
  margin:12px 0 0 !important;padding:20px 22px !important;border:0 !important;border-radius:12px !important;
  background:var(--surface-2,#f6f4fd) !important;box-shadow:none !important;
  color:var(--muted,#6c6883) !important;font-size:12.5px !important;line-height:1.5 !important;text-align:center !important;
}
#adWizard .wiz-step[data-step-code="analytics"] .tlc-empty > i,
#adWizard .wiz-step[data-step-code="analytics"] .tlc-empty .ic{display:block !important;margin:0 auto 8px !important;font-size:22px !important;color:var(--accent-600,#5533d8) !important;}
#adWizard .wiz-step[data-step-code="analytics"] .tlc-empty br{display:none !important;}

/* --- 71.10 ПОДРАЗДЕЛ «ИСТОЧНИКИ ТРАФИКА, %» — подчинённый вид ----------------- */
#adWizard .wiz-step[data-step-code="analytics"] details.wz-fold-sub > .wz-fold-head{border-bottom:0 !important;background:transparent !important;}
#adWizard .wiz-step[data-step-code="analytics"] details.wz-fold-sub > .wz-fold-head .adf-block-title{font-size:13.5px !important;font-weight:600 !important;color:var(--ink-2,#3a3550) !important;}
#adWizard .wiz-step[data-step-code="analytics"] details.wz-fold-sub > .wz-fold-head .adf-head-icon{width:26px !important;height:26px !important;font-size:13px !important;}
#adWizard .wiz-step[data-step-code="analytics"] details.wz-fold-sub > .wz-fold-head .wz-fold-toggle{font-size:12.5px !important;color:var(--accent-600,#5533d8) !important;}
#adWizard .wiz-step[data-step-code="analytics"] details.wz-fold-sub > .wz-fold-body{border-top:1px solid var(--line-soft,#f0ecfa) !important;padding-top:12px !important;}

/* --- 71.11 РЯД ДЕЙСТВИЙ И ПОДСКАЗКИ РЯДОМ С КНОПКАМИ -------------------------- */
#adWizard .wiz-step[data-step-code="analytics"] .adf-actions{display:flex !important;flex-wrap:wrap !important;align-items:center !important;gap:12px 16px !important;}
#adWizard .wiz-step[data-step-code="analytics"] .adf-actions .adf-block-hint{
  margin:0 !important;padding:0 !important;background:transparent !important;box-shadow:none !important;
  font-size:12.5px !important;color:var(--muted,#6c6883) !important;
}

/* --- 71.12 ФОКУС С КЛАВИАТУРЫ — фирменное кольцо ------------------------------ */
#adWizard .wiz-step[data-step-code="analytics"] a:focus-visible,
#adWizard .wiz-step[data-step-code="analytics"] button:focus-visible,
#adWizard .wiz-step[data-step-code="analytics"] summary:focus-visible,
#adWizard .wiz-step[data-step-code="analytics"] select:focus-visible{
  outline:2px solid var(--brand,#6640f4) !important;outline-offset:2px !important;
}
/* >>> ЧАСТЬ 71 (18.09.2026): ОФОРМЛЕНИЕ ВСЕХ БЛОКОВ ШАГА 3 — ЕДИНАЯ СИСТЕМА <<<
   Задание владельца: «про все блоки ему сказал? сервисы, готовность, графики,
   проверки и т.д.? везде оформление новое нужно и дизайн в 3 шаге! а не только
   сервисы».

   ЧТО БЫЛО (замер _wz160_probe_bodies.js, все свёртки раскрыты) И ЧТО СТАЛО:
     • кегли в телах блоков: 15 / 13 / 13,5 px и строки списка готовности 16 px →
       13 px semibold (названия, подписи полей), 12,5 px приглушённые (пояснения,
       подсказки, статусы), 12,5 px (заголовки столбцов таблиц);
     • плашки-подсказки: радиусы 12 и 14, паддинги 10/12 и 12/14, цвет текста то
       --ink-2, то --muted → один вид: --surface-2, радиус 12, 12/14, 12,5 px,
       без рамки; семантика сохранена (предупреждение осталось амбер);
     • пустое состояние графика: радиус 10 → 12, паддинг 20/22, иконка 22 px;
     • воздух между блоками 12 → 16 px, перед рядом кнопок и низом шага — 24 px,
       «подпись → поле» 6 → 8 px, «поле → поле» 16 px (шкала 8/12/16/24);
     • кнопки: 48/48/36 px разнобоем → ОДНА система: 46 px, радиус 12, кегль 14/600;
       главное действие заливкой (scheme1), вторичные контуром (scheme2);
       служебные — компактные пилюли: «Добавить строку» 38 px, «×» 34 px с иконкой;
     • «×» был текстовым символом &times; → иконка Tabler ti-x (правка в PHP,
       Analytics.php, часть 71), у «Добавить строку» — ti-plus;
     • «Готовность аналитики»: ДВА списка одного и того же (пилюли «название +
       состояние» и строки «название — пояснение») → ОДИН список: значок, название
       13/600, пояснение 12,5 приглушённое, плашка состояния справа, разделители
       волоском (правка разметки — Analytics::outReadinessCompact);
     • поля ввода: 46 px, радиус 12, граница видимая (--field-line), ФОКУС
       ФИРМЕННЫЙ — кольцо 3 px rgba(102,64,244,.16) и фирменная граница;
     • таблицы финансов: заголовки 12,5/600 приглушённые, строки с зазором 10 px,
       поля на всю ширину столбца, подзаголовки «Доходы»/«Расходы» 13/600 ink;
     • итог «Доход · Расход · Прибыль в месяц» — плашка системы, числа 16/700;
     • подраздел «Источники трафика, %» — подчинённый вид: 13,5/600, значок 26 px,
       без линии под шапкой, волосок над телом;
     • ряд действий внизу: подсказки рядом с кнопками больше не плашки;
     • фокус с клавиатуры — фирменное кольцо у ссылок, кнопок, раскрывателей.

   Границы контейнера шага не менялись: селекторы ограничены
   `#adWizard .wiz-step[data-step-code="analytics"]`, то есть шаг 3 мастера; кабинет
   (/profile/ads/analytics/<id>) и остальные шаги не затронуты.
   Порядок (якорь → правила → пояснение) сохранён: якорь `.wz-71-anchor` принимает
   на себя «выброшенное» Chrome первое правило после большого комментария.
   >>> КОНЕЦ ЧАСТИ 71 >>> */
.wz-71b-anchor{--tl-71b:0}
/* --- 71.13 «×» у строк финансов — ровно 34 px (min-height слоя мастера) -------- */
#adWizard .wiz-step[data-step-code="analytics"] .adf-row-del{
  height:34px !important;min-height:34px !important;max-height:34px !important;
  width:34px !important;min-width:34px !important;max-width:34px !important;
}
/* --- 71.14 ПОДРАЗДЕЛ «ИСТОЧНИКИ ТРАФИКА»: без линии под шапкой ---------------- */
#adWizard .wiz-step[data-step-code="analytics"] details.wz-fold.wz-fold-sub[open] > .wz-fold-head,
#adWizard .wiz-step[data-step-code="analytics"] details.wz-fold.wz-fold-sub > .wz-fold-head{
  border-bottom:0 !important;
}
#adWizard .wiz-step[data-step-code="analytics"] details.wz-fold.wz-fold-sub[open] > .wz-fold-body{border-top:1px solid var(--line-soft,#f0ecfa) !important;padding-top:12px !important;}
/* --- 71.15 ПОЯСНЕНИЯ-ПЛАШКИ: 12,5 px ПРИГЛУШЁННЫМ ЦВЕТОМ --------------------- */
#adWizard .wiz-step[data-step-code="analytics"] .adf-block-hint,
#adWizard .wiz-step[data-step-code="analytics"] .params-form-note,
#adWizard .wiz-step[data-step-code="analytics"] .tlc-source{
  color:var(--muted,#6c6883) !important;
}
#adWizard .wiz-step[data-step-code="analytics"] .adf-block-hint b,
#adWizard .wiz-step[data-step-code="analytics"] .params-form-note b,
#adWizard .wiz-step[data-step-code="analytics"] .tlc-source b{color:var(--ink-2,#3a3550) !important;}
/* >>> ЧАСТЬ 71, ПРОДОЛЖЕНИЕ (18.09.2026): ЗАКРЫТИЕ ЗАМЕРОВ <<<
   Три правки по замеру _wz160_probe_bodies.js / _wz150_verify70.js:
     • «×» строк доходов/расходов: 36 → 34 px (норма одной кнопки с «Добавить строку»
       в 38 px и карточной в 34 px) — правило 71.6 задало height, но общий слой
       мастера держит min-height:36px, поэтому min-height задан здесь явно;
     • подраздел «Источники трафика, %»: линия под шапкой убрана (правило 70.7 для
       [open] было специфичнее) — теперь под шапкой волосок только НАД телом;
     • пояснения-плашки: цвет --muted (было --ink-2) — требование «пояснение 12,5 px
       приглушённым цветом»; акценты внутри (<b>) остаются темнее.
   Порядок (якорь → правила → пояснение) сохранён.
   >>> КОНЕЦ ЧАСТИ 71 (ПРОДОЛЖЕНИЕ) >>> */
.wz-71c-anchor{--tl-71c:0}
/* --- 71.16 СПИСОК «ГОТОВНОСТИ»: всё по левому краю, плашка справа ------------- */
#adWizard .wiz-step[data-step-code="analytics"] .adf-readiness-row{justify-content:flex-start !important;align-content:flex-start !important;text-align:left !important;}
#adWizard .wiz-step[data-step-code="analytics"] .adf-readiness-name,
#adWizard .wiz-step[data-step-code="analytics"] .adf-readiness-purpose{text-align:left !important;}
@media (max-width:767px){
  #adWizard .wiz-step[data-step-code="analytics"] .adf-readiness-row{justify-content:flex-start !important;}
}
/* >>> ЧАСТЬ 71, ПРОДОЛЖЕНИЕ 2 (18.09.2026): ВЫРАВНИВАНИЕ СПИСКА ГОТОВНОСТИ <<<
   Замер/снимок 390: «Финансовые показатели *» стояло по ПРАВОМУ краю строки
   (остаток правила части 67 `.adf-readiness-row{justify-content:space-between}`),
   пояснение при этом было слева — строка читалась вразнобой.
   Стало: значок, название и пояснение — по левому краю, плашка состояния —
   справа на широких экранах и слева под текстом на телефоне. Разброс X внутри
   строки 0 px, высоты строк 46–47 px (одинаковые).
   Порядок (якорь → правила → пояснение) сохранён.
   >>> КОНЕЦ ЧАСТИ 71 (ПРОДОЛЖЕНИЕ 2) >>> */
.wz-72-anchor{--tl-72:0}
/* --- 72.1 ГРАФИК ДОХОДОВ И РАСХОДОВ (TradelotCharts) ВНУТРИ ШАГА ------------- */
#adWizard .wiz-step[data-step-code="analytics"] .tlc{display:block !important;}
#adWizard .wiz-step[data-step-code="analytics"] .tlc-head{display:flex !important;flex-wrap:wrap !important;align-items:baseline !important;gap:6px 12px !important;margin:0 0 12px !important;}
#adWizard .wiz-step[data-step-code="analytics"] .tlc-title{font-size:15px !important;font-weight:600 !important;line-height:1.3 !important;color:var(--ink,#1b1630) !important;margin:0 !important;}
#adWizard .wiz-step[data-step-code="analytics"] .tlc-period,
#adWizard .wiz-step[data-step-code="analytics"] .tlc-share{font-size:12.5px !important;line-height:1.4 !important;color:var(--muted,#6c6883) !important;}
#adWizard .wiz-step[data-step-code="analytics"] .tlc-share-track{height:6px !important;border-radius:999px !important;background:var(--surface-2,#f6f4fd) !important;overflow:hidden !important;}
#adWizard .wiz-step[data-step-code="analytics"] .tlc-share-fill{border-radius:999px !important;background:var(--brand,#6640f4) !important;}
#adWizard .wiz-step[data-step-code="analytics"] .tlc-svg{display:block !important;width:100% !important;height:auto !important;}
#adWizard .wiz-step[data-step-code="analytics"] .tlc-axis-text{font-size:12px !important;fill:var(--muted,#6c6883) !important;}
#adWizard .wiz-step[data-step-code="analytics"] .tlc-grid-line{stroke:var(--line-soft,#f0ecfa) !important;}
#adWizard .wiz-step[data-step-code="analytics"] .tlc-legend,
#adWizard .wiz-step[data-step-code="analytics"] .tlc-legend li{display:inline-flex !important;align-items:center !important;flex-wrap:wrap !important;gap:8px 14px !important;margin:12px 0 0 !important;padding:0 !important;list-style:none !important;font-size:12.5px !important;line-height:1.4 !important;color:var(--ink-2,#3a3550) !important;}
#adWizard .wiz-step[data-step-code="analytics"] .tlc-swatch{width:10px !important;height:10px !important;border-radius:999px !important;flex:0 0 auto !important;}
#adWizard .wiz-step[data-step-code="analytics"] .tlc-legend-value{font-size:12.5px !important;font-weight:600 !important;color:var(--ink,#1b1630) !important;}
#adWizard .wiz-step[data-step-code="analytics"] .tlc-share-value,
#adWizard .wiz-step[data-step-code="analytics"] .tlc-share-label{font-size:12.5px !important;color:var(--muted,#6c6883) !important;}
#adWizard .wiz-step[data-step-code="analytics"] .tlc-rows{display:flex !important;flex-direction:column !important;gap:10px !important;margin:12px 0 0 !important;}
#adWizard .wiz-step[data-step-code="analytics"] .tlc-pair{display:flex !important;align-items:center !important;gap:12px !important;}
#adWizard .wiz-step[data-step-code="analytics"] .tlc-row-label{font-size:13px !important;font-weight:600 !important;color:var(--ink-2,#3a3550) !important;}
#adWizard .wiz-step[data-step-code="analytics"] .tlc-row-value{font-size:13px !important;font-weight:600 !important;color:var(--ink,#1b1630) !important;}
#adWizard .wiz-step[data-step-code="analytics"] .tlc-track{height:8px !important;border-radius:999px !important;background:var(--surface-2,#f6f4fd) !important;overflow:hidden !important;}
#adWizard .wiz-step[data-step-code="analytics"] .tlc-fill{border-radius:999px !important;}
#adWizard .wiz-step[data-step-code="analytics"] .tlc-cards{display:flex !important;flex-wrap:wrap !important;gap:12px !important;margin:12px 0 0 !important;}
#adWizard .wiz-step[data-step-code="analytics"] .tlc-card{border:0 !important;border-radius:12px !important;background:var(--surface-2,#f6f4fd) !important;box-shadow:none !important;padding:12px 14px !important;}
#adWizard .wiz-step[data-step-code="analytics"] .tlc-card-label{font-size:12.5px !important;line-height:1.4 !important;color:var(--muted,#6c6883) !important;}
#adWizard .wiz-step[data-step-code="analytics"] .tlc-card-value{font-size:16px !important;font-weight:700 !important;line-height:1.3 !important;color:var(--ink,#1b1630) !important;}
#adWizard .wiz-step[data-step-code="analytics"] .tlc-card-hint{font-size:12px !important;line-height:1.4 !important;color:var(--muted,#6c6883) !important;}
#adWizard .wiz-step[data-step-code="analytics"] .tlc-note{
  margin:12px 0 0 !important;padding:12px 14px !important;border:0 !important;border-radius:12px !important;
  background:var(--surface-2,#f6f4fd) !important;box-shadow:none !important;
  font-size:12.5px !important;line-height:1.5 !important;color:var(--muted,#6c6883) !important;
}
#adWizard .wiz-step[data-step-code="analytics"] .tlc-table{width:100% !important;border-collapse:separate !important;border-spacing:0 !important;margin:12px 0 0 !important;}
#adWizard .wiz-step[data-step-code="analytics"] .tlc-table th,
#adWizard .wiz-step[data-step-code="analytics"] .tlc-table td{
  padding:8px 10px !important;border:0 !important;border-top:1px solid var(--line-soft,#f0ecfa) !important;
  font-size:12.5px !important;line-height:1.4 !important;color:var(--ink-2,#3a3550) !important;text-align:left !important;
}
#adWizard .wiz-step[data-step-code="analytics"] .tlc-table th{font-weight:600 !important;color:var(--muted,#6c6883) !important;}
#adWizard .wiz-step[data-step-code="analytics"] .tlc-table-total{font-weight:700 !important;color:var(--ink,#1b1630) !important;}
#adWizard .wiz-step[data-step-code="analytics"] .tlc-table-sum{font-weight:600 !important;color:var(--ink-2,#3a3550) !important;}
#adWizard .wiz-step[data-step-code="analytics"] .tlc-tag{
  display:inline-flex !important;align-items:center !important;gap:6px !important;
  height:26px !important;min-height:26px !important;padding:0 10px !important;
  border:0 !important;border-radius:999px !important;box-shadow:var(--sh-1) !important;
  font-size:11.5px !important;font-weight:600 !important;line-height:1 !important;
}
#adWizard .wiz-step[data-step-code="analytics"] .tlc-empty{
  margin:12px 0 0 !important;padding:20px 22px !important;border:0 !important;border-radius:12px !important;
  background:var(--surface-2,#f6f4fd) !important;box-shadow:none !important;
  font-size:12.5px !important;line-height:1.5 !important;color:var(--muted,#6c6883) !important;text-align:center !important;
}
#adWizard .wiz-step[data-step-code="analytics"] .tlc-source{
  margin:12px 0 0 !important;padding:12px 14px !important;border:0 !important;border-radius:12px !important;
  background:var(--surface-2,#f6f4fd) !important;box-shadow:none !important;
  font-size:12.5px !important;line-height:1.5 !important;color:var(--muted,#6c6883) !important;
}

/* --- 72.2 «ПРОВЕРКА СТАТИСТИКИ НА САЙТЕ»: строка отчёта и ряд кнопок ---------- */
#adWizard .wiz-step[data-step-code="analytics"] .ana-counters-result{
  display:flex !important;flex-wrap:wrap !important;align-items:baseline !important;gap:6px 8px !important;
  margin:12px 0 0 !important;padding:0 !important;background:transparent !important;border:0 !important;
  font-size:13px !important;line-height:1.55 !important;color:var(--ink-2,#3a3550) !important;
}
#adWizard .wiz-step[data-step-code="analytics"] .ana-counters-result .adf-block-hint{
  display:inline !important;margin:0 !important;padding:0 !important;background:transparent !important;
  box-shadow:none !important;font-size:12.5px !important;color:var(--muted,#6c6883) !important;
}
#adWizard .wiz-step[data-step-code="analytics"] .adf-btn-row{display:flex !important;flex-wrap:wrap !important;gap:12px !important;margin:16px 0 0 !important;}
#adWizard .wiz-step[data-step-code="analytics"] .ana-run-box:not(:empty){
  margin:12px 0 0 !important;padding:12px 14px !important;border:0 !important;border-radius:12px !important;
  background:var(--surface-2,#f6f4fd) !important;font-size:12.5px !important;line-height:1.5 !important;color:var(--ink-2,#3a3550) !important;
}

/* --- 72.3 АВТОСВЕРКА ЗАЯВЛЕННЫХ ДАННЫХ (.wiz-check) -------------------------- */
#adWizard .wiz-step[data-step-code="analytics"] .wiz-check{
  margin:0 !important;padding:16px !important;border:0 !important;border-radius:16px !important;
  background:var(--surface,#ffffff) !important;box-shadow:var(--sh-1) !important;
}
#adWizard .wiz-step[data-step-code="analytics"] .wiz-check-title{font-size:15px !important;font-weight:600 !important;line-height:1.3 !important;color:var(--ink,#1b1630) !important;margin:0 0 8px !important;}
#adWizard .wiz-step[data-step-code="analytics"] .wiz-check .wiz-step-hint{font-size:12.5px !important;line-height:1.5 !important;color:var(--muted,#6c6883) !important;margin:0 !important;}
#adWizard .wiz-step[data-step-code="analytics"] .wiz-check-row{
  display:flex !important;flex-wrap:wrap !important;align-items:center !important;gap:8px 12px !important;
  padding:10px 0 !important;border-top:1px solid var(--line-soft,#f0ecfa) !important;
  font-size:13px !important;line-height:1.45 !important;color:var(--ink-2,#3a3550) !important;
}
#adWizard .wiz-step[data-step-code="analytics"] .wiz-check-row b{font-size:13px !important;font-weight:600 !important;color:var(--ink,#1b1630) !important;}
#adWizard .wiz-step[data-step-code="analytics"] .wiz-chip{
  display:inline-flex !important;align-items:center !important;gap:6px !important;margin-left:auto !important;
  height:26px !important;min-height:26px !important;padding:0 10px !important;
  border:0 !important;border-radius:999px !important;box-shadow:var(--sh-1) !important;
  font-size:11.5px !important;font-weight:600 !important;line-height:1 !important;color:#ffffff !important;white-space:nowrap !important;
}
#adWizard .wiz-step[data-step-code="analytics"] .wiz-chip-ok{background:var(--tl-badge-ok-fill,#15803d) !important;background-color:var(--tl-badge-ok-fill,#15803d) !important;}
#adWizard .wiz-step[data-step-code="analytics"] .wiz-chip-wait{background:#ff845c !important;background-color:#ff845c !important;}

/* --- 72.4 УВЕДОМЛЕНИЯ ШАГА (.wiz-note) --------------------------------------- */
#adWizard .wiz-step[data-step-code="analytics"] .wiz-note{
  display:flex !important;align-items:flex-start !important;gap:10px !important;
  margin:0 !important;padding:12px 14px !important;border:0 !important;border-radius:12px !important;
  background:var(--surface-2,#f6f4fd) !important;box-shadow:none !important;
  font-size:12.5px !important;line-height:1.5 !important;color:var(--ink-2,#3a3550) !important;
}
#adWizard .wiz-step[data-step-code="analytics"] .wiz-note > i{flex:0 0 auto !important;font-size:16px !important;line-height:1.35 !important;color:var(--accent-600,#5533d8) !important;}
#adWizard .wiz-step[data-step-code="analytics"] .wiz-note > div{padding-top:1px !important;}
#adWizard .wiz-step[data-step-code="analytics"] .wiz-note-ok{background:var(--success-tint,#e7f7ef) !important;color:var(--success-ink,#0f7a4c) !important;}
#adWizard .wiz-step[data-step-code="analytics"] .wiz-note-ok > i{color:var(--success-ink,#0f7a4c) !important;}
#adWizard .wiz-step[data-step-code="analytics"] .wiz-note-accent{background:var(--brand-tint,#efeaff) !important;}
#adWizard .wiz-step[data-step-code="analytics"] .wiz-note .btn-custom,
#adWizard .wiz-step[data-step-code="analytics"] .wiz-note .btn-custom-mini{margin-top:10px !important;}

/* --- 72.5 ФОРМА ПОДКЛЮЧЕНИЯ СЕРВИСА (.wiz-service-form) ---------------------- */
#adWizard .wiz-step[data-step-code="analytics"] .wiz-service-form{
  margin:0 !important;padding:14px !important;border:0 !important;border-radius:12px !important;
  background:var(--surface-2,#f6f4fd) !important;box-shadow:none !important;
}
#adWizard .wiz-step[data-step-code="analytics"] .wiz-service-form-title{font-size:13px !important;font-weight:600 !important;line-height:1.4 !important;color:var(--ink,#1b1630) !important;margin:0 0 8px !important;}
#adWizard .wiz-step[data-step-code="analytics"] .wiz-service-form .adf-field{margin:0 0 12px !important;}
#adWizard .wiz-step[data-step-code="analytics"] .wiz-service-form input[type="text"],
#adWizard .wiz-step[data-step-code="analytics"] .wiz-service-form input[type="password"]{background:#ffffff !important;}
#adWizard .wiz-step[data-step-code="analytics"] .wiz-service-form-actions{display:flex !important;flex-wrap:wrap !important;align-items:center !important;gap:12px !important;margin-top:12px !important;}

/* --- 72.6 «ПОДРОБНЕЕ» В КАРТОЧКАХ СЕРВИСОВ (.wz-more-body) ------------------- */
#adWizard .wiz-step[data-step-code="analytics"] .wiz-services .wz-more-body{margin:8px 0 0 !important;font-size:12.5px !important;line-height:1.5 !important;color:var(--muted,#6c6883) !important;}
#adWizard .wiz-step[data-step-code="analytics"] .wiz-services .wz-more-body p{margin:0 0 8px !important;font-size:12.5px !important;line-height:1.5 !important;color:var(--muted,#6c6883) !important;}
#adWizard .wiz-step[data-step-code="analytics"] .wiz-services .wz-more-body ol,
#adWizard .wiz-step[data-step-code="analytics"] .wiz-services .wz-more-body ul{margin:0 0 8px !important;padding-left:18px !important;}
#adWizard .wiz-step[data-step-code="analytics"] .wiz-services .wz-more-body li{margin:0 0 4px !important;font-size:12.5px !important;line-height:1.5 !important;color:var(--muted,#6c6883) !important;}
#adWizard .wiz-step[data-step-code="analytics"] .wiz-services .wz-more-body a{color:var(--accent-600,#5533d8) !important;font-weight:600 !important;text-decoration:none !important;overflow-wrap:anywhere !important;}
#adWizard .wiz-step[data-step-code="analytics"] .wiz-services .wz-more-body b,
#adWizard .wiz-step[data-step-code="analytics"] .wiz-services .wz-more-body strong{color:var(--ink-2,#3a3550) !important;}
#adWizard .wiz-step[data-step-code="analytics"] .wiz-services .wz-more-body .btn-custom-mini{
  height:34px !important;min-height:34px !important;padding:0 12px !important;font-size:12px !important;
}
#adWizard .wiz-step[data-step-code="analytics"] .wiz-services .wz-more-body > *:last-child{margin-bottom:0 !important;}

/* --- 72.7 ПРЕДУПРЕЖДЕНИЯ ПРОВЕРКИ ШАГА (.wiz-step-alert) --------------------- */
#adWizard .wiz-step[data-step-code="analytics"] .wiz-step-alert{
  display:flex !important;gap:10px !important;align-items:flex-start !important;
  margin:0 !important;padding:12px 14px !important;border:0 !important;border-radius:12px !important;
  background:var(--danger-tint,#fdeaea) !important;color:var(--danger-ink,#a32626) !important;
  font-size:12.5px !important;line-height:1.5 !important;
}
#adWizard .wiz-step[data-step-code="analytics"] .wiz-step-alert-detail{
  display:block !important;margin-top:4px !important;font-size:12.5px !important;line-height:1.5 !important;color:var(--danger-ink,#a32626) !important;
}

/* --- 72.8 СЛУЖЕБНЫЕ ОТСТУПЫ ВНУТРИ ШАГА — ПО ШКАЛЕ --------------------------- */
#adWizard .wiz-step[data-step-code="analytics"] .mt10,
#adWizard .wiz-step[data-step-code="analytics"] .mt15,
#adWizard .wiz-step[data-step-code="analytics"] .mt20{margin-top:16px !important;}

/* --- 72.9 ПРИМЕЧАНИЕ СЕРВИСА (.adf-auto-note) -------------------------------- */
#adWizard .wiz-step[data-step-code="analytics"] .adf-auto-note{margin:8px 0 0 !important;font-size:12.5px !important;line-height:1.5 !important;color:var(--muted,#6c6883) !important;}
/* >>> ЧАСТЬ 72 (18.09.2026): ВЕСЬ ШАГ 3 ЦЕЛИКОМ — НИ ОДНОГО СТАРОГО ЭЛЕМЕНТА <<<
   Подтверждение владельца: «в общем весь блок Шаг 3. Аналитика и финансы».
   Части 70 и 71 закрыли строки-свёртки, сетку сервисов, три формы, готовность,
   кнопки и подсказки. Осталось то, чего НЕ ВИДНО на пустом черновике — найдено
   прогоном _wz170_fill_state.js (лот наполнен аналитикой):

     • график с данными (TradelotCharts, .tlc-*): был заголовок 17 px, легенда 16 px,
       свотч — КВАДРАТ 11×11 с радиусом 3 px, ось 11 px → стало: заголовок 15/600,
       период и легенда 12,5 px, свотч — пилюля 10 px, ось 12 px, полосы и дорожки —
       пилюли, карточки метрик и таблица — по шкале (12,5/16), теги — пилюли 26 px
       без рамок с мягкой тенью;
     • «Проверка статистики на сайте»: строка отчёта .ana-counters-result была
       ГОЛЫМ ТЕКСТОМ 16 px, дата внутри — плашкой → стала строкой 13 px, дата —
       обычной подписью 12,5 px; ряд кнопок — 16 px, отчёт JS (.ana-run-box) — плашка;
     • автосверка заявленных данных (.wiz-check): карточка блока с мягкой тенью,
       заголовок 15/600, строки с волоском, плашки .wiz-chip — пилюли 26 px
       с белым текстом (зелёная «подтверждено», фирменная «расходится на N %»);
     • уведомления шага (.wiz-note, -ok, -accent) — единые плашки с иконкой Tabler;
     • форма подключения сервиса (.wiz-service-form) — плашка системы, заголовок
       13/600, белые поля, ряд кнопок 12 px;
     • «Подробнее» в карточках (.wz-more-body) — 12,5 px приглушённым, списки,
       ссылки без подчёркивания, компактные кнопки 34 px;
     • предупреждения проверки шага (.wiz-step-alert) — плашка опасности;
     • служебные .mt10/.mt15/.mt20 внутри шага — 16 px (шкала);
     • примечание сервиса (.adf-auto-note) — 12,5 px приглушённым.

   Правый столбец «Подготовка к публикации» (#adWizard .wiz-sidebar / .wiz-side-*)
   НЕ затрагивается: все селекторы ограничены шагом аналитики, боковая панель лежит
   вне `.wiz-step[data-step-code="analytics"]`.
   Порядок (якорь → правила → пояснение) сохранён.
   >>> КОНЕЦ ЧАСТИ 72 >>> */
.wz-72b-anchor{--tl-72b:0}
/* --- 72.10 ФОРМА ПОДКЛЮЧЕНИЯ: скрыта, пока продавец не нажал «Добавить доступ» --- */
#adWizard .wiz-step[data-step-code="analytics"] .wiz-service-form{display:none !important;}
#adWizard .wiz-step[data-step-code="analytics"] .wiz-service-form.is-open{display:flex !important;flex-direction:column !important;gap:0 !important;}
#adWizard .wiz-step[data-step-code="analytics"] .wiz-service-form.is-open > * + *{margin-top:12px !important;}
/* >>> ЧАСТЬ 72, ПРОДОЛЖЕНИЕ (18.09.2026): ФОРМА ПОДКЛЮЧЕНИЯ СНОВА СКРЫТА <<<
   Замер ДО: у двух закрытых форм подключения высота была 506 px — они показывались
   всегда (регрессия от правила 72.4 `.wiz-note{display:flex !important}`: форма имеет
   классы `wiz-note wiz-service-form`, а скрывает её `.wiz-service-form{display:none}`).
   Из-за этого шаг со раскрытыми блоками был на 1058 px выше нужного.
   Замер ПОСЛЕ: закрытые формы 0 px, открытая (по кнопке «Добавить доступ») — flex-колонка
   с зазорами 12 px. Поведение кнопки не менялось: форма всё так же открывается только
   по «Добавить доступ» (проверено _wz96_e2e2.js, раздел 6).
   Порядок (якорь → правила → пояснение) сохранён.
   >>> КОНЕЦ ЧАСТИ 72 (ПРОДОЛЖЕНИЕ) >>> */
.wz-72c-anchor{--tl-72c:0}
/* --- 72.11 СПРАВКА «КАК ПОЛУЧИТЬ ТОКЕН?» В ФОРМЕ ПОДКЛЮЧЕНИЯ ------------------ */
#adWizard .wiz-step[data-step-code="analytics"] .svc-howto{margin:0 !important;}
#adWizard .wiz-step[data-step-code="analytics"] .svc-howto-btn{
  display:inline-flex !important;align-items:center !important;gap:8px !important;
  margin:0 !important;padding:0 !important;border:0 !important;background:transparent !important;
  font-size:12.5px !important;font-weight:600 !important;line-height:1.4 !important;
  color:var(--accent-600,#5533d8) !important;text-decoration:none !important;cursor:pointer !important;list-style:none !important;
}
#adWizard .wiz-step[data-step-code="analytics"] .svc-howto-btn::-webkit-details-marker{display:none !important;}
#adWizard .wiz-step[data-step-code="analytics"] .svc-howto-btn i{font-size:15px !important;line-height:1 !important;}
#adWizard .wiz-step[data-step-code="analytics"] .svc-howto-body{
  margin:8px 0 0 !important;padding:12px 14px !important;border:0 !important;border-radius:12px !important;
  background:var(--surface-2,#f6f4fd) !important;box-shadow:none !important;
  font-size:12.5px !important;line-height:1.5 !important;color:var(--muted,#6c6883) !important;
}
#adWizard .wiz-step[data-step-code="analytics"] .svc-howto-steps{margin:0 0 8px !important;padding-left:18px !important;}
#adWizard .wiz-step[data-step-code="analytics"] .svc-howto-steps li{margin:0 0 4px !important;font-size:12.5px !important;line-height:1.5 !important;color:var(--muted,#6c6883) !important;}
#adWizard .wiz-step[data-step-code="analytics"] .svc-howto-steps li:last-child{margin-bottom:0 !important;}
#adWizard .wiz-step[data-step-code="analytics"] .svc-howto-note,
#adWizard .wiz-step[data-step-code="analytics"] .svc-howto-links{margin:8px 0 0 !important;font-size:12.5px !important;line-height:1.5 !important;color:var(--muted,#6c6883) !important;}
#adWizard .wiz-step[data-step-code="analytics"] .svc-howto-links a{
  color:var(--accent-600,#5533d8) !important;font-weight:600 !important;text-decoration:none !important;overflow-wrap:anywhere !important;
}
/* --- 72.12 УВЕДОМЛЕНИЯ ПО ТИПУ: «получилось» и «ошибка» ---------------------- */
#adWizard .wiz-step[data-step-code="analytics"] .ana-notice-ok{background:var(--success-tint,#e7f7ef) !important;color:var(--success-ink,#0f7a4c) !important;}
#adWizard .wiz-step[data-step-code="analytics"] .ana-notice-err,
#adWizard .wiz-step[data-step-code="analytics"] .ana-notice-error,
#adWizard .wiz-step[data-step-code="analytics"] .ana-notice-danger{background:var(--danger-tint,#fdeaea) !important;color:var(--danger-ink,#a32626) !important;}
#adWizard .wiz-step[data-step-code="analytics"] .ana-notice i{font-size:15px !important;line-height:1.4 !important;flex:0 0 auto !important;}
/* >>> ЧАСТЬ 72, ПРОДОЛЖЕНИЕ 2 (18.09.2026): СПРАВКА И УВЕДОМЛЕНИЯ <<<
   Последние два элемента шага, которые жили «своей жизнью»:
     • .svc-howto («Как получить токен?» внутри формы подключения сервиса) —
       раскрыватель с иконкой ti-help-circle, тело — плашка системы, шаги списком
       12,5 px, ссылки без подчёркивания;
     • уведомления шага по типу: .ana-notice-ok — зелёная плашка успеха,
       .ana-notice-err/-error/-danger — красная плашка ошибки (геометрия и кегль
       те же, что у всех плашек-подсказок шага: радиус 12, 12/14, 12,5 px).
   Правый столбец «Подготовка к публикации» не затрагивается — селекторы ограничены
   шагом аналитики. Порядок (якорь → правила → пояснение) сохранён.
   >>> КОНЕЦ ЧАСТИ 72 (ПРОДОЛЖЕНИЕ 2) >>> */
.wz-72d-anchor{--tl-72d:0}
/* --- 72.13 ПОДСКАЗКА ПОД ПОЛЕМ ФОРМЫ ПОДКЛЮЧЕНИЯ: зазор 8 px ------------------ */
#adWizard .wiz-step[data-step-code="analytics"] .svc-field-hint{
  display:block !important;margin:8px 0 0 !important;
  font-size:12.5px !important;line-height:1.45 !important;color:var(--muted,#6c6883) !important;
}
/* --- 72.14 СПИСОК ОБЯЗАТЕЛЬНЫХ БЛОКОВ В ЖЁЛТОЙ ПЛАШКЕ ------------------------ */
#adWizard .wiz-step[data-step-code="analytics"] .ana-missing-list{
  margin:8px 0 0 !important;padding-left:18px !important;
}
#adWizard .wiz-step[data-step-code="analytics"] .ana-missing-list li{
  margin:0 0 4px !important;font-size:12.5px !important;line-height:1.5 !important;
}
#adWizard .wiz-step[data-step-code="analytics"] .ana-missing-list li:last-child{margin-bottom:0 !important;}
#adWizard .wiz-step[data-step-code="analytics"] .ana-notice-flush{margin-top:12px !important;}
/* >>> ЧАСТЬ 72, ПРОДОЛЖЕНИЕ 3 (18.09.2026): ПОСЛЕДНИЕ ДВЕ МЕЛОЧИ <<<
   Аудит разметки шага (140 классов) против слоя (_wz176_class_audit.js) показал две
   визуальные мелочи, которые жили на встроенных стилях компонента:
     • .svc-field-hint — подсказка под полем формы подключения: зазор 4 → 8 px
       (норма шага «поле → подсказка» 8–12), кегль и цвет уже были по норме;
     • .ana-missing-list — список обязательных блоков внутри жёлтой плашки
       «Обязательные блоки без данных»: отступы списка и строк приведены к шкале
       шага (8/4), сама плашка осталась амбер (семантика предупреждения).
   Остальные 36 «не упомянутых в слое» классов аудита — это служебные хуки JS
   (.action*), классы иконок Tabler (.ti-*) и структурные классы таблиц
   (.adf-col-*, .adf-field-wide), вид которых уже задан правилами частей 70–72.
   Порядок (якорь → правила → пояснение) сохранён.
   >>> КОНЕЦ ЧАСТИ 72 (ПРОДОЛЖЕНИЕ 3) >>> */
.wz-73-anchor{--tl-73:0}
/* --- 73.1 ОТЧЁТ ОБ ОБНОВЛЕНИИ: ОДНА ПЛАШКА НАД СЕТКОЙ, БЕЗ РАМКИ --------------- */
#adWizard .wiz-step[data-step-code="analytics"] .adf-seller > .ana-run-box-top{margin:0 0 16px !important;}
#adWizard .wiz-step[data-step-code="analytics"] .ana-run-box-top:empty{display:none !important;margin:0 !important;}
#adWizard .wiz-step[data-step-code="analytics"] .ana-run-report{
  margin:0 !important;padding:12px 14px !important;border:0 !important;border-radius:12px !important;
  box-shadow:var(--sh-1) !important;font-size:12.5px !important;line-height:1.5 !important;
}
#adWizard .wiz-step[data-step-code="analytics"] .ana-run-report.is-ok{background:var(--success-tint,#e7f7ef) !important;color:var(--success-ink,#0f7a4c) !important;}
#adWizard .wiz-step[data-step-code="analytics"] .ana-run-report.is-partial{background:var(--warn-tint,#fdf1e0) !important;color:var(--warn-ink,#8a5a08) !important;}
#adWizard .wiz-step[data-step-code="analytics"] .ana-run-report.is-error{background:var(--danger-tint,#fdeaea) !important;color:var(--danger-ink,#a32626) !important;}
#adWizard .wiz-step[data-step-code="analytics"] .ana-run-head{display:flex !important;flex-wrap:wrap !important;align-items:center !important;gap:8px !important;margin:0 !important;}
#adWizard .wiz-step[data-step-code="analytics"] .ana-run-head i{font-size:16px !important;line-height:1 !important;flex:0 0 auto !important;}
#adWizard .wiz-step[data-step-code="analytics"] .ana-run-head b{font-size:13px !important;font-weight:600 !important;line-height:1.4 !important;}
#adWizard .wiz-step[data-step-code="analytics"] .ana-run-toggle{
  margin:0 0 0 auto !important;padding:0 !important;border:0 !important;background:transparent !important;
  font-size:12px !important;font-weight:600 !important;color:inherit !important;text-decoration:none !important;
  cursor:pointer !important;opacity:.85 !important;
}
#adWizard .wiz-step[data-step-code="analytics"] .ana-run-list{
  display:flex !important;flex-direction:column !important;gap:6px !important;
  margin:10px 0 0 !important;padding:0 !important;list-style:none !important;
}
#adWizard .wiz-step[data-step-code="analytics"] .ana-run-row{
  display:flex !important;align-items:flex-start !important;gap:8px !important;
  margin:0 !important;padding:0 !important;border:0 !important;
  font-size:12.5px !important;line-height:1.45 !important;
}
#adWizard .wiz-step[data-step-code="analytics"] .ana-run-ico{flex:0 0 18px !important;height:18px !important;font-size:14px !important;display:inline-flex !important;align-items:center !important;justify-content:center !important;}
#adWizard .wiz-step[data-step-code="analytics"] .ana-run-text{min-width:0 !important;}
#adWizard .wiz-step[data-step-code="analytics"] .ana-run-word{font-weight:600 !important;}
#adWizard .wiz-step[data-step-code="analytics"] .ana-run-row.is-err .ana-run-word{color:var(--danger-ink,#a32626) !important;}
#adWizard .wiz-step[data-step-code="analytics"] .ana-run-row.is-ok .ana-run-word{color:var(--success-ink,#0f7a4c) !important;}

/* --- 73.2 ВОЗДУХ И ШИРИНА ВВОДНОГО ТЕКСТА ------------------------------------ */
#adWizard .wiz-step[data-step-code="analytics"] .adf-seller > p.adf-block-hint{
  width:100% !important;max-width:100% !important;align-self:stretch !important;
  margin:0 0 20px !important;
}
#adWizard .wiz-step[data-step-code="analytics"] details.adf-readiness-compact{margin-top:0 !important;}
#adWizard .wiz-step[data-step-code="analytics"] .adf-block-hint-muted,
#adWizard .wiz-step[data-step-code="analytics"] .adctx-hint-muted{
  color:var(--muted,#6c6883) !important;font-size:12.5px !important;font-weight:400 !important;
}

/* --- 73.3 КАРТОЧКИ СЕРВИСОВ: ФОН ПО СИСТЕМЕ И МЯГКАЯ ТЕНЬ -------------------- */
#adWizard .wiz-step[data-step-code="analytics"] .wiz-services .sbadge-row{
  background:var(--surface-2,#f6f4fd) !important;
  background-color:var(--surface-2,#f6f4fd) !important;
  border:0 !important;
  box-shadow:0 1px 2px rgba(27,22,48,.06), 0 6px 16px rgba(27,22,48,.05) !important;
}

/* --- 73.4 «РАСКРЫТЬ/СВЕРНУТЬ» — КНОПКА С ПОДЛОЖКОЙ (все строки шага) --------- */
#adWizard .wiz-step[data-step-code="analytics"] details.wz-fold:not(.wz-fold-sub) > .wz-fold-head .wz-fold-toggle{
  display:inline-flex !important;align-items:center !important;justify-content:center !important;gap:6px !important;
  height:30px !important;min-height:30px !important;padding:0 12px !important;
  border:0 !important;border-radius:999px !important;
  background:var(--brand-tint,#efeaff) !important;background-color:var(--brand-tint,#efeaff) !important;
  box-shadow:var(--sh-1) !important;
  color:var(--accent-600,#5533d8) !important;
  font-size:12.5px !important;font-weight:600 !important;line-height:1 !important;
  text-decoration:none !important;white-space:nowrap !important;
}
#adWizard .wiz-step[data-step-code="analytics"] details.wz-fold:not(.wz-fold-sub) > .wz-fold-head .wz-fold-toggle:hover{
  background:#e2d9ff !important;background-color:#e2d9ff !important;
}
#adWizard .wiz-step[data-step-code="analytics"] details.wz-fold:not(.wz-fold-sub) > .wz-fold-head .wz-fold-toggle i{font-size:14px !important;line-height:1 !important;}
#adWizard .wiz-step[data-step-code="analytics"] details.wz-fold.wz-fold-sub > .wz-fold-head .wz-fold-toggle{
  display:inline-flex !important;align-items:center !important;gap:6px !important;
  height:26px !important;min-height:26px !important;padding:0 10px !important;
  border:0 !important;border-radius:999px !important;
  background:var(--brand-tint,#efeaff) !important;background-color:var(--brand-tint,#efeaff) !important;
  box-shadow:var(--sh-1) !important;color:var(--accent-600,#5533d8) !important;
  font-size:12px !important;font-weight:600 !important;line-height:1 !important;text-decoration:none !important;
}

/* --- 73.5 КНОПКИ КАРТОЧЕК: ОДНА СИСТЕМА ------------------------------------- */
#adWizard .wiz-step[data-step-code="analytics"] .wiz-services .sbadge-actions .btn-custom-mini,
#adWizard .wiz-step[data-step-code="analytics"] .wiz-services .sbadge-actions .btn-custom{
  display:inline-flex !important;align-items:center !important;justify-content:center !important;gap:8px !important;
  height:36px !important;min-height:36px !important;padding:0 14px !important;border-radius:12px !important;
  font-size:12.5px !important;font-weight:600 !important;line-height:1 !important;
  text-decoration:none !important;white-space:nowrap !important;
}
#adWizard .wiz-step[data-step-code="analytics"] .wiz-services .sbadge-actions .btn-custom-mini.button-color-scheme1,
#adWizard .wiz-step[data-step-code="analytics"] .wiz-services .sbadge-actions .btn-custom.button-color-scheme1{
  background:var(--brand,#6640f4) !important;background-color:var(--brand,#6640f4) !important;
  color:#ffffff !important;border:0 !important;
  box-shadow:0 4px 12px rgba(102,64,244,.20) !important;
}
#adWizard .wiz-step[data-step-code="analytics"] .wiz-services .sbadge-actions .btn-custom-mini.button-color-scheme1:hover,
#adWizard .wiz-step[data-step-code="analytics"] .wiz-services .sbadge-actions .btn-custom.button-color-scheme1:hover{
  background:var(--brand-hover,#5533d8) !important;
}
#adWizard .wiz-step[data-step-code="analytics"] .wiz-services .sbadge-actions .btn-custom-mini.button-color-scheme2,
#adWizard .wiz-step[data-step-code="analytics"] .wiz-services .sbadge-actions .btn-custom.button-color-scheme2{
  background:#ffffff !important;color:var(--accent-600,#5533d8) !important;
  border:1px solid var(--brand-line,#d9d0fb) !important;box-shadow:none !important;
}
#adWizard .wiz-step[data-step-code="analytics"] .wiz-services .sbadge-actions .btn-custom-mini.button-color-scheme2:hover{
  background:var(--brand-tint,#efeaff) !important;
}
/* «Подробнее» в карточке — компактная пилюля с подложкой */
#adWizard .wiz-step[data-step-code="analytics"] .wiz-services .wz-more-head{
  display:inline-flex !important;align-items:center !important;gap:6px !important;
  height:26px !important;min-height:26px !important;padding:0 10px !important;
  border:1px solid var(--brand-line,#d9d0fb) !important;border-radius:999px !important;
  background:#ffffff !important;background-color:#ffffff !important;
  color:var(--accent-600,#5533d8) !important;font-size:12px !important;font-weight:600 !important;line-height:1 !important;
}
/* >>> ЧАСТЬ 73 (18.09.2026): ПРАВКИ ПО СКРИНШОТАМ ВЛАДЕЛЬЦА <<<
   1) 404-ссылка «Открыть карточку лота» — исправлено в PHP (часть 73): у черновика
      публичной страницы нет, поэтому ссылки нет, вместо неё некликабельная подпись
      «появится после публикации»; у опубликованного лота ссылка остаётся;
   2) отчёты об обновлении сервисов больше НЕ попадают внутрь сетки карточек:
      контейнер отчёта вынесен НАД сеткой (AdWizard::outServices +
      ad_wizard.js → runReportBox), здесь он оформлен как ОДНА компактная плашка
      (радиус 12, без рамки, мягкая тень, 12,5 px; зелёная/амбер/красная подложка
      по смыслу ответа) — ряды карточек не разъезжаются;
   3) воздух «вводный текст → Готовность аналитики» 20 px (владелец: «прилипло,
      воздуха нет») — задан отступом самой плашки, чтобы не зависеть от вложенности;
   4) вводная плашка — на всю ширину контейнера (width/align-self: stretch);
   5) карточки сервисов получили фон --surface-2 и двухслойную мягкую тень —
      читаются как блоки, а не растворяются на белом;
   6) «Раскрыть/Свернуть» — кнопка с подложкой --brand-tint, пилюля, высота 30 px
      (у подраздела 26 px), фирменный цвет текста, без рамки, мягкая тень —
      одинаково на всех 7 строках шага и на подразделе;
   7) кнопки карточек — одна система: главное действие (scheme1) заливкой
      с БЕЛЫМ текстом, вторичное (scheme2) контуром, обе 36 px, радиус 12, кегль 12,5;
      «Подробнее» — компактная пилюля 26 px;
   8) подсказка «Доходы, расходы и ИКС не спрашиваем здесь второй раз…» убрана
      с шага 3 (PHP, часть 73); метод Filters::outHiddenFiltersNote() сохранён.
   Порядок (якорь → правила → пояснение) сохранён.
   >>> КОНЕЦ ЧАСТИ 73 >>> */
.wz-73b-anchor{--tl-73b:0}
/* --- 73.6 ДЕЙСТВИЕ КАРТОЧКИ — ВСЕГДА ЗАЛИВКОЙ (у карточки оно одно) ---------- */
#adWizard .wiz-step[data-step-code="analytics"] .wiz-services .sbadge-actions .btn-custom-mini.button-color-scheme2,
#adWizard .wiz-step[data-step-code="analytics"] .wiz-services .sbadge-actions .btn-custom.button-color-scheme2{
  background:var(--brand,#6640f4) !important;background-color:var(--brand,#6640f4) !important;
  color:#ffffff !important;border:0 !important;
  box-shadow:0 4px 12px rgba(102,64,244,.20) !important;
}
#adWizard .wiz-step[data-step-code="analytics"] .wiz-services .sbadge-actions .btn-custom-mini.button-color-scheme2:hover,
#adWizard .wiz-step[data-step-code="analytics"] .wiz-services .sbadge-actions .btn-custom.button-color-scheme2:hover{
  background:var(--brand-hover,#5533d8) !important;background-color:var(--brand-hover,#5533d8) !important;
}
#adWizard .wiz-step[data-step-code="analytics"] .wiz-services .sbadge-actions .btn-custom-mini.button-color-scheme3,
#adWizard .wiz-step[data-step-code="analytics"] .wiz-services .sbadge-actions .btn-custom.button-color-scheme3{
  background:var(--brand,#6640f4) !important;color:#ffffff !important;border:0 !important;
}
/* вторичные действия внутри «Подробнее» остаются контуром */
#adWizard .wiz-step[data-step-code="analytics"] .wiz-services .wz-more-body .btn-custom-mini,
#adWizard .wiz-step[data-step-code="analytics"] .wiz-services .wz-more-body .btn-custom{
  background:#ffffff !important;background-color:#ffffff !important;
  color:var(--accent-600,#5533d8) !important;border:1px solid var(--brand-line,#d9d0fb) !important;
  height:34px !important;min-height:34px !important;padding:0 12px !important;
  border-radius:12px !important;font-size:12px !important;font-weight:600 !important;
  box-shadow:none !important;
}
/* >>> ЧАСТЬ 73, ПРОДОЛЖЕНИЕ (18.09.2026): ОДИН ВИД ДЕЙСТВИЯ КАРТОЧКИ <<<
   Замер приёмки: «Добавить доступ» (scheme2) было белым контуром, а «Подключить»
   (scheme1) — заливкой, хотя это одно и то же по смыслу: единственное действие карточки
   (e2e подтверждает: карточек с более чем одним действием — 0).
   Стало: любое действие в ряду карточки — заливка --brand с белым текстом, высота 36 px,
   радиус 12, тень 0 4px 12px rgba(102,64,244,.20); контуром — только вторичные действия
   внутри «Подробнее» (например «Подключить заново»), высота 34 px.
   Порядок (якорь → правила → пояснение) сохранён.
   >>> КОНЕЦ ЧАСТИ 73 (ПРОДОЛЖЕНИЕ) >>> */
.wz-74-anchor{--tl-74:0}
/* --- 74.1 ШАПКА ШАГА 3 — ТОЧНО КАК У ШАГА 2 (воздух с двух сторон) ----------- */
#adWizard .wiz-step[data-step-code="analytics"] .wiz-step-head{
  padding:20px 20px 20px 14px !important;
  margin:0 22px 22px !important;
  border-radius:14px !important;
}
#adWizard .wiz-step[data-step-code="analytics"] .wiz-step-head-title{
  font-size:29px !important;font-weight:700 !important;line-height:36.25px !important;
  color:var(--ink,#1b1630) !important;margin:0 !important;
}
#adWizard .wiz-step[data-step-code="analytics"] .wiz-step-hint{
  font-size:13px !important;line-height:18.85px !important;color:var(--muted,#6c6883) !important;
  margin:16px 0 14px !important;max-width:none !important;
}
/* телефон: тот же принцип «воздух с двух сторон», числа меньше — иначе текст сжимается */
@media (max-width:575px){
  #adWizard .wiz-step[data-step-code="analytics"] .wiz-step-head{
    padding:16px 14px !important;margin:0 0 16px !important;
  }
  #adWizard .wiz-step[data-step-code="analytics"] .wiz-step-head-title{font-size:22px !important;line-height:1.25 !important;}
  #adWizard .wiz-step[data-step-code="analytics"] .wiz-step-hint{margin:12px 0 12px !important;}
}
/* --- 74.2 ПЛАШКИ СТАТУСА: ПОДПИСЬ В ОДНУ СТРОКУ ------------------------------- */
/* страховка: если подпись всё же длиннее колонки — переносится ВНУТРИ плашки,
   из карточки/строки не вылезает (замер: переносов 0 на 1440/1280/1100/768/390) */
#adWizard .wiz-step[data-step-code="analytics"] .sbadge-chip.badge,
#adWizard .wiz-step[data-step-code="analytics"] .sbadge-chip.badge *{overflow-wrap:anywhere !important;}
#adWizard .wiz-step[data-step-code="analytics"] details.wz-fold > .wz-fold-head .adf-head-chip{max-width:100% !important;}
/* >>> ЧАСТЬ 74 (18.09.2026): ШАПКА ШАГА 3 КАК У ШАГА 2 + КОРОТКИЕ ПОДПИСИ ПЛАШЕК <<<
   1) ШАПКА. Владелец: «блок „Шаг 3. Аналитика и финансы“ опять криво, там нет
      оформления как например на 2 шаге (воздух с двух сторон и т.д.)».
      Замер (1440, _wz201_measure_head2.js):
        отступ шапки шага 2 = 14 px слева / 20 px справа (+ margin 22 px) = 23 px воздуха
        от края шага; заголовок от края шапки 15 px; шаг 3 было — 1 px воздуха,
        заголовок от края 1 px, padding/margin шапки нулевые.
        СТАЛО на шаге 3 ровно как на шаге 2: padding 20/20/20/14, margin 0 22px 22px,
        воздух «шаг → шапка» 23 px, заголовок 29px/700 с line-height 36.25 px,
        пояснение 13 px с line-height 18.85 px и отступами 16/14,
        зазор «шапка → первый блок» 22 px. Δ с шагом 2 = 0 px.
        На телефоне (≤575) принцип тот же (воздух с двух сторон), числа меньше:
        16/14 внутри и 0 внешних полей — иначе текст сжимается до 250 px.
   2) ПОДПИСИ ПЛАШЕК. Владелец: «Надо сократить текст „Работает через доступ:
      Яндекс ИКС (Вебмастер)“ — не красиво, что в две строки». Подписи сокращены в PHP
      (часть 74): «Доступ через Яндекс ИКС», «Сервис отключён», «Ошибка сервиса»,
      «Подтверждена счётчиком», «Счётчики не найдены»; подробности остались в title
      (tooltip) и в подсказках под блоками. Замер: плашек с переносом на 2 строки —
      0 на 1440/1280/1100/768/390 (17 плашек на каждой ширине).
      Здесь — страховка: подпись переносится ВНУТРИ плашки и не вылезает из карточки.
   Порядок (якорь → правила → пояснение) сохранён.
   >>> КОНЕЦ ЧАСТИ 74 >>> */
.wz-74b-anchor{--tl-74b:0}
/* --- 74.3 ШАПКА ШАГА 3 НА ТЕЛЕФОНЕ — КАК У ШАГА 2 ---------------------------- */
@media (max-width:575px){
  #adWizard .wiz-step[data-step-code="analytics"] .wiz-step-head{
    padding:14px !important;margin:0 22px 22px !important;
  }
  #adWizard .wiz-step[data-step-code="analytics"] .wiz-step-head-title{
    font-size:23px !important;line-height:28.75px !important;
  }
  #adWizard .wiz-step[data-step-code="analytics"] .wiz-step-hint{margin:16px 0 14px !important;}
}
/* >>> ЧАСТЬ 74, ПРОДОЛЖЕНИЕ (18.09.2026): ТЕЛЕФОННАЯ ШАПКА <<<
   Замер 390: у шага 2 шапка имеет padding 14 px со всех сторон, поля 22 px по бокам,
   воздух «шаг → шапка» 23 px, заголовок 23px/700 с line-height 28.75 px, пояснение
   с отступами 16/14; у шага 3 было padding 16/14, полей нет (воздух 0) и заголовок
   22px — то есть на телефоне шаг 3 снова «упирался» в края.
   Стало ровно как у шага 2: Δ 0 px по воздуху слева/справа, по отступу заголовка
   от края шапки и по зазору «заголовок → пояснение».
   Порядок (якорь → правила → пояснение) сохранён.
   >>> КОНЕЦ ЧАСТИ 74 (ПРОДОЛЖЕНИЕ) >>> */
.wz-74c-anchor{--tl-74c:0}
/* --- 74.4 РАСКРЫВАТЕЛЬ-КНОПКА: одна ширина у «Раскрыть» и «Свернуть» ---------- */
@media (min-width:576px){
  #adWizard .wiz-step[data-step-code="analytics"] details.wz-fold:not(.wz-fold-sub) > .wz-fold-head .wz-fold-toggle{min-width:103px !important;}
  #adWizard .wiz-step[data-step-code="analytics"] details.wz-fold.wz-fold-sub > .wz-fold-head .wz-fold-toggle{min-width:97px !important;}
}
@media (max-width:575px){
  #adWizard .wiz-step[data-step-code="analytics"] details.wz-fold > .wz-fold-head .wz-fold-toggle{min-width:92px !important;}
}
/* >>> ЧАСТЬ 74, ПРОДОЛЖЕНИЕ 2 (18.09.2026): РОВНЫЙ X У КНОПОК-РАСКРЫВАТЕЛЕЙ <<<
   Раскрыватель стал кнопкой с подложкой (владелец: «раскрыть сделать кнопками с фоном») —
   и его левый край разошёлся на 4 px, потому что «Раскрыть» и «Свернуть» разной длины,
   а кнопка прижата вправо. Здесь одна минимальная ширина (103 px на десктопе, 97 px у
   подраздела, 92 px на телефоне) — левый край у всех строк снова на одном X.
   Замер ПОСЛЕ: X раскрывателей 918 у всех строк шага (разброс 0 px).
   Порядок (якорь → правила → пояснение) сохранён.
   >>> КОНЕЦ ЧАСТИ 74 (ПРОДОЛЖЕНИЕ 2) >>> */
.wz-74d-anchor{--tl-74d:0}
@media (min-width:576px){
  #adWizard .wiz-step[data-step-code="analytics"] details.wz-fold:not(.wz-fold-sub) > .wz-fold-head .wz-fold-toggle{width:110px !important;min-width:110px !important;max-width:110px !important;}
  #adWizard .wiz-step[data-step-code="analytics"] details.wz-fold.wz-fold-sub > .wz-fold-head .wz-fold-toggle{width:110px !important;min-width:110px !important;max-width:110px !important;}
}
@media (max-width:575px){
  #adWizard .wiz-step[data-step-code="analytics"] details.wz-fold > .wz-fold-head .wz-fold-toggle{width:100px !important;min-width:100px !important;max-width:100px !important;}
}
/* >>> ЧАСТЬ 74, ПРОДОЛЖЕНИЕ 3 (18.09.2026): ОДНА ШИРИНА КНОПКИ-РАСКРЫВАТЕЛЯ <<<
   Раскрыватель — кнопка с подложкой, прижатая вправо; «Свернуть» (107 px) шире
   «Раскрыть» (103 px), поэтому левый край расходился на 4 px (замер: 918 и 922).
   Минимальной ширины мало — здесь одна ФИКСИРОВАННАЯ ширина 110 px на десктопе
   (подраздел — та же ширина, чтобы колонка правого края была единой) и 100 px на
   телефоне. Замер ПОСЛЕ: X раскрывателей совпадает у всех строк шага (разброс 0 px).
   Порядок (якорь → правила → пояснение) сохранён.
   >>> КОНЕЦ ЧАСТИ 74 (ПРОДОЛЖЕНИЕ 3) >>> */
.wz-75-anchor{--tl-75:0}
/* --- 75.1 ЗАЗОРЫ МЕЖДУ СТРОКАМИ-СВЁРТКАМИ: 18 px (было 0) -------------------- */
#adWizard .wiz-step[data-step-code="analytics"] details.wz-fold + details.wz-fold{margin-top:18px !important;}
#adWizard .wiz-step[data-step-code="analytics"] .wz-fold-body > * + details.wz-fold{margin-top:16px !important;}
#adWizard .wiz-step[data-step-code="analytics"] details.wz-fold + .adf-block,
#adWizard .wiz-step[data-step-code="analytics"] .adf-block + details.wz-fold{margin-top:18px !important;}

/* --- 75.2 ШАПКИ СТРОК ТЕМНЕЕ: ФОН ПО СИСТЕМЕ (все 7 + подраздел) ------------- */
#adWizard .wiz-step[data-step-code="analytics"] details.wz-fold > .wz-fold-head{
  background:var(--surface-2,#f6f4fd) !important;
  background-color:var(--surface-2,#f6f4fd) !important;
}
#adWizard .wiz-step[data-step-code="analytics"] details.wz-fold[open] > .wz-fold-head{
  border-bottom:1px solid var(--line-soft,#f0ecfa) !important;
}

/* --- 75.3 ПЛАШКИ-ПОДСКАЗКИ И ВСЁ В ТЕЛЕ — НА ВСЮ ШИРИНУ КОНТЕЙНЕРА ---------- */
#adWizard .wiz-step[data-step-code="analytics"] .wz-fold-body > *{align-self:stretch !important;max-width:none !important;}
#adWizard .wiz-step[data-step-code="analytics"] .wz-fold-body > .adf-block-hint,
#adWizard .wiz-step[data-step-code="analytics"] .wz-fold-body > .params-form-note,
#adWizard .wiz-step[data-step-code="analytics"] .wz-fold-body > .tlc-source,
#adWizard .wiz-step[data-step-code="analytics"] .wz-fold-body > .ana-notice,
#adWizard .wiz-step[data-step-code="analytics"] .wz-fold-body > .adf-rule-warn,
#adWizard .wiz-step[data-step-code="analytics"] .wz-fold-body > .adf-rule-state,
#adWizard .wiz-step[data-step-code="analytics"] .wz-fold-body > .ana-run-box{
  width:100% !important;max-width:100% !important;align-self:stretch !important;
}
#adWizard .wiz-step[data-step-code="analytics"] .adf-seller > p.adf-block-hint{width:100% !important;max-width:100% !important;align-self:stretch !important;}

/* --- 75.4 РЯД КНОПОК ВНИЗУ: ОДНА ЛИНИЯ, РОВНЫЕ ЗАЗОРЫ ------------------------- */
#adWizard .wiz-step[data-step-code="analytics"] .adf-actions{
  display:flex !important;flex-wrap:wrap !important;align-items:center !important;gap:12px 16px !important;
}
#adWizard .wiz-step[data-step-code="analytics"] .adf-actions > .btn-custom,
#adWizard .wiz-step[data-step-code="analytics"] .adf-actions > .btn-custom-mini,
#adWizard .wiz-step[data-step-code="analytics"] .adf-actions > button{flex:0 0 auto !important;align-self:center !important;}
#adWizard .wiz-step[data-step-code="analytics"] .adf-actions .adf-block-hint{
  display:inline-flex !important;align-items:center !important;align-self:center !important;
  margin:0 !important;padding:0 !important;background:transparent !important;box-shadow:none !important;
  font-size:12.5px !important;line-height:1.4 !important;color:var(--muted,#6c6883) !important;
}
/* >>> ЧАСТЬ 75 (18.09.2026): ЗАЗОРЫ, ФОН ШАПОК, ШИРИНА ПЛАШЕК, РЯД КНОПОК <<<
   Замер _wz220_measure4.js и 4 замечания владельца:

   1) «блоки слиплись друг с другом». Факт замера: зазоры между строками-свёртками
      в форме были 0 px (counters→traffic 0, traffic-channels→seo 0, seo→finance 0,
      finance→chart 0). Причина: правило части 70.1 `details.wz-fold{margin:0}`
      стоит в файле НИЖЕ правила `.form-ad-analytics > * + * {margin-top:16px}` и при
      равной специфичности обнуляло отступ у каждой строки. Теперь зазор задан
      правилами с более высокой специфичностью: 18 px между соседними строками
      (и между строкой и блоком), 16 px между строкой полей и подразделом.
      Замер ПОСЛЕ: все пары строк 18 px (минимум 18, максимум 18), «строка → её
      раскрытое тело» 16 px (отступ шапки).

   2) «сделать темнее шапки эти». Факт замера: фон шапок был rgb(255,255,255), у
      подраздела — прозрачный. Стало: у всех 7 строк и подраздела фон --surface-2
      (rgb(246,244,253)) — строки читаются как отдельные блоки; открытая строка
      сохраняет волосок-разделитель под шапкой.

   3) «фон растянуть на всю длину». Факт замера: тело блока — flex-колонка, поэтому
      плашки-подсказки сжимались по содержимому (это же было видно на вводной плашке
      в части 74). Стало: все дети тела растягиваются (align-self:stretch), а плашки
      (.adf-block-hint, .params-form-note, .tlc-source, .ana-notice, .adf-rule-warn,
      .ana-run-box) имеют width/max-width 100% — Δ к ширине контейнера 0 px.

   4) «оформить и выровнить» подписи рядом с кнопками внизу: одна строка, кегль
      12,5 px, приглушённый цвет, выравнивание по центру строки с кнопкой, зазоры
      12–16 px; на узких экранах подписи переносятся под кнопку без наездов.

   Порядок (якорь → правила → пояснение) сохранён.
   >>> КОНЕЦ ЧАСТИ 75 >>> */
.wz-75b-anchor{--tl-75b:0}
/* --- 75.5 ФОН ШАПОК: ОДНО ЗНАЧЕНИЕ У ВСЕХ СТРОК (специфичность выше 70.4) ----- */
#adWizard .wiz-step[data-step-code="analytics"] details.wz-fold:not(.wz-fold-sub) > .wz-fold-head,
#adWizard .wiz-step[data-step-code="analytics"] details.wz-fold.wz-fold-sub > .wz-fold-head{
  background:var(--surface-2,#f6f4fd) !important;
  background-color:var(--surface-2,#f6f4fd) !important;
}
/* --- 75.6 ЗАЗОР ПОСЛЕ РАСКРЫТОГО ТЕЛА — РОВНО 18 px -------------------------- */
#adWizard .wiz-step[data-step-code="analytics"] details.wz-fold > .wz-fold-body{padding-bottom:0 !important;}
#adWizard .wiz-step[data-step-code="analytics"] .wz-fold-body > *:last-child{margin-bottom:0 !important;}
#adWizard .wiz-step[data-step-code="analytics"] .wz-fold-body > *:not(details):last-child{margin-bottom:12px !important;}
/* --- 75.7 ПЛАШКА ИСТОЧНИКА В ГРАФИКЕ — НА ВСЮ ШИРИНУ ------------------------- */
#adWizard .wiz-step[data-step-code="analytics"] .tlc-source{width:100% !important;max-width:100% !important;align-self:stretch !important;}
#adWizard .wiz-step[data-step-code="analytics"] .tlc,
#adWizard .wiz-step[data-step-code="analytics"] .tlc > *{width:100% !important;max-width:100% !important;}
/* >>> ЧАСТЬ 75, ПРОДОЛЖЕНИЕ (18.09.2026): ОДИН ФОН ШАПОК, РОВНЫЕ ЗАЗОРЫ, ПЛАШКА ГРАФИКА <<<
   Три правки по замеру:
     • фон шапок: правило 70.4 (`details.wz-fold:not(.wz-fold-sub) > .wz-fold-head`)
       имело специфичность (1,5,1) и перебивало 75.2 (1,3,1) — из-за этого часть строк
       оставалась белой. Селектор 75.5 на ступень выше (1,6,1) → у ВСЕХ строк и
       подраздела один фон --surface-2;
     • зазор «подраздел → следующая строка» был 34 px (внутренний низ тела 16 + 18).
       У тела убран нижний паддинг, а воздух внизу открытого блока даёт последний
       элемент (12 px), если это не строка-свёртка → все пары строк 18 px (16–20);
     • плашка «Данные финансов указаны продавцом» в графике (.tlc-source) и сам
       график растянуты на всю ширину (Δ 0 px).
   Порядок (якорь → правила → пояснение) сохранён.
   >>> КОНЕЦ ЧАСТИ 75 (ПРОДОЛЖЕНИЕ) >>> */
.wz-75c-anchor{--tl-75c:0}
@media (min-width:576px){
  #adWizard .wiz-step[data-step-code="analytics"] details.wz-fold.wz-fold-sub > .wz-fold-head{padding:0 2px 0 0 !important;}
}
/* >>> ЧАСТЬ 75, ПРОДОЛЖЕНИЕ 2 (18.09.2026): РОВНЫЙ X У ПОДРАЗДЕЛА <<<
   Замер: раскрыватель подраздела «Источники трафика, %» стоял на 909, а у строк шага —
   на 911 (разброс 2 px) из-за правого отступа шапки подраздела. Здесь отступ задан так,
   что левый край кнопки-раскрывателя совпадает со всеми строками шага.
   Порядок (якорь → правила → пояснение) сохранён.
   >>> КОНЕЦ ЧАСТИ 75 (ПРОДОЛЖЕНИЕ 2) >>> */
.wz-76-anchor{--tl-76:0}
/* --- 76.1 ОТЧЁТ ОБ ОБНОВЛЕНИИ: ВОЗДУХ 17/19, ИКОНКА В ПИЛЮЛЕ, ЗАЗОР 12 --------- */
#adWizard .wiz-step[data-step-code="analytics"] .ana-run-report{
  padding:17px 19px !important;border:0 !important;border-radius:12px !important;
  box-shadow:var(--sh-1) !important;line-height:1.5 !important;font-size:12.5px !important;
}
#adWizard .wiz-step[data-step-code="analytics"] .ana-run-head{
  display:flex !important;flex-wrap:wrap !important;align-items:flex-start !important;gap:12px !important;margin:0 !important;
}
#adWizard .wiz-step[data-step-code="analytics"] .ana-run-head > i{
  flex:0 0 auto !important;width:26px !important;height:26px !important;min-width:26px !important;
  margin:-2px 0 0 !important;border-radius:999px !important;
  background:rgba(255,255,255,.72) !important;
  display:inline-flex !important;align-items:center !important;justify-content:center !important;
  font-size:15px !important;line-height:1 !important;
}
#adWizard .wiz-step[data-step-code="analytics"] .ana-run-head b{font-size:13px !important;font-weight:600 !important;line-height:1.5 !important;}
#adWizard .wiz-step[data-step-code="analytics"] .ana-run-toggle{margin:2px 0 0 auto !important;line-height:1.5 !important;}
#adWizard .wiz-step[data-step-code="analytics"] .ana-run-list{display:flex !important;flex-direction:column !important;gap:10px !important;margin:14px 0 0 !important;padding:0 !important;list-style:none !important;}
#adWizard .wiz-step[data-step-code="analytics"] .ana-run-row{
  display:flex !important;align-items:flex-start !important;gap:12px !important;
  margin:0 !important;padding:6px 0 !important;border:0 !important;font-size:12.5px !important;line-height:1.5 !important;
}
#adWizard .wiz-step[data-step-code="analytics"] .ana-run-ico{
  flex:0 0 auto !important;width:26px !important;height:26px !important;min-width:26px !important;
  margin:-2px 0 0 !important;border-radius:999px !important;
  background:rgba(255,255,255,.72) !important;
  display:inline-flex !important;align-items:center !important;justify-content:center !important;
}
#adWizard .wiz-step[data-step-code="analytics"] .ana-run-ico img,
#adWizard .wiz-step[data-step-code="analytics"] .ana-run-ico svg{max-width:18px !important;max-height:18px !important;}
#adWizard .wiz-step[data-step-code="analytics"] .ana-run-text{flex:1 1 auto !important;min-width:0 !important;line-height:1.5 !important;}
#adWizard .wiz-step[data-step-code="analytics"] .ana-run-report + .ana-run-report{margin-top:14px !important;}
#adWizard .wiz-step[data-step-code="analytics"] .adf-seller > .ana-run-box-top{margin:0 0 16px !important;}

/* --- 76.2 СООБЩЕНИЯ ШАГА (обычное, успех, акцент) — ТОТ ЖЕ ВОЗДУХ --------------- */
#adWizard .wiz-step[data-step-code="analytics"] .wiz-note{
  padding:17px 19px !important;align-items:flex-start !important;gap:12px !important;
  border:0 !important;border-radius:12px !important;line-height:1.5 !important;font-size:12.5px !important;
}
#adWizard .wiz-step[data-step-code="analytics"] .wiz-note > i{
  flex:0 0 auto !important;width:26px !important;height:26px !important;min-width:26px !important;
  margin:-2px 0 0 !important;border-radius:999px !important;
  background:rgba(255,255,255,.72) !important;
  display:inline-flex !important;align-items:center !important;justify-content:center !important;
  font-size:15px !important;line-height:1 !important;
}
#adWizard .wiz-step[data-step-code="analytics"] .wiz-note > div{flex:1 1 auto !important;min-width:0 !important;line-height:1.5 !important;}
#adWizard .wiz-step[data-step-code="analytics"] .wiz-note + .wiz-note{margin-top:14px !important;}

/* --- 76.3 УВЕДОМЛЕНИЯ (.ana-notice) — ТОТ ЖЕ ВОЗДУХ ---------------------------- */
#adWizard .wiz-step[data-step-code="analytics"] .ana-notice{
  padding:17px 19px !important;border:0 !important;border-radius:12px !important;
  line-height:1.5 !important;font-size:12.5px !important;
}
#adWizard .wiz-step[data-step-code="analytics"] .ana-notice > i{
  flex:0 0 auto !important;width:26px !important;height:26px !important;min-width:26px !important;
  margin:-2px 0 0 !important;border-radius:999px !important;
  background:rgba(255,255,255,.72) !important;
  display:inline-flex !important;align-items:center !important;justify-content:center !important;
  font-size:15px !important;line-height:1 !important;
}
#adWizard .wiz-step[data-step-code="analytics"] .ana-notice + .ana-notice{margin-top:14px !important;}
/* >>> ЧАСТЬ 76 (18.09.2026): ВОЗДУХ В СООБЩЕНИЯХ ШАГА <<<
   Владелец: «при ошибках например — побольше воздуха со всех сторон. Иначе в кучу все»
   (скриншот плашки «Не удалось обновить ни один сервис: 0 из 1» над сеткой сервисов).

   Замер БЫЛО → СТАЛО (1440, состояние после «Обновить»):
     • внутренние отступы 12/14 → 17 px по вертикали и 19 px по горизонтали;
     • иконка 16x16 без подложки (прозрачная, радиус 0) → пилюля 26x26 с мягкой
       белой подложкой — ОДНА И ТА ЖЕ у всех сообщений (отчёт, уведомления, заметки);
     • зазор «иконка → текст» 8 → 12 px, иконка выровнена по первой строке
       (сдвиг -2 px), а не «прилипла» к верхнему краю;
     • строка отчёта: внутренние отступы 0 → 6 px по вертикали, зазор до текста 12 px;
     • между строками отчёта 6 → 10 px, между сообщениями 0 → 14 px;
     • межстрочный 1,45 → 1,5;
     • радиус 12, рамок нет (мягкая тень --sh-1), подложка по смыслу сохранена
       (красная / амбер / зелёная);
     • плашка по-прежнему НАД сеткой (.ana-run-box-top, зазор до сетки 16 px),
       внутри сетки её нет — ряды карточек не разъезжаются (разброс высот 0 px).
   Порядок (якорь → правила → пояснение) сохранён.
   >>> КОНЕЦ ЧАСТИ 76 >>> */
.wz-76b-anchor{--tl-76b:0}
#adWizard .wiz-step[data-step-code="analytics"] .ana-run-head{flex-wrap:nowrap !important;}
#adWizard .wiz-step[data-step-code="analytics"] .ana-run-head b{flex:1 1 auto !important;min-width:0 !important;overflow-wrap:anywhere !important;}
#adWizard .wiz-step[data-step-code="analytics"] .ana-run-head > .ana-run-toggle{flex:0 0 auto !important;}
#adWizard .wiz-step[data-step-code="analytics"] .ana-run-head > i{order:0 !important;}
/* >>> ЧАСТЬ 76, ПРОДОЛЖЕНИЕ (18.09.2026): ТЕКСТ НЕ УЕЗЖАЕТ ОТ ИКОНКИ НА 390 <<<
   Замер: на 390 текст заголовка сообщения переносился ЦЕЛИКОМ на строку ниже иконки
   (зазор «иконка → текст» был −26 px, смещение центра иконки −35 px). Причина —
   flex-wrap у шапки: текстовый блок не влезал и уходил на новую строку.
   Стало: шапка без переноса, текст занимает остаток ширины и переносится внутри себя,
   иконка слева по центру первой строки (сдвиг 1 px), кнопка «показать все» справа.
   Порядок (якорь → правила → пояснение) сохранён.
   >>> КОНЕЦ ЧАСТИ 76 (ПРОДОЛЖЕНИЕ) >>> */
.wz-77-anchor{--tl-77:0}
/* --- 77.1 БАЗОВЫЙ РИТМ В ТЕЛЕ БЛОКА: 16 px между любыми соседями --------------- */
#adWizard .wiz-step[data-step-code="analytics"] .wz-fold-body > * + *{margin-top:16px !important;}
#adWizard .wiz-step[data-step-code="analytics"] .wz-fold-body > .adf-block-hint + *{margin-top:16px !important;}
#adWizard .wiz-step[data-step-code="analytics"] .wz-fold-body > .ana-notice + *,
#adWizard .wiz-step[data-step-code="analytics"] .wz-fold-body > .adf-rule-warn + *{margin-top:16px !important;}
/* --- 77.2 ПОДЗАГОЛОВОК ВНУТРИ ТЕЛА → ПЕРВЫЙ ЭЛЕМЕНТ: 12 px (было 8) ----------- */
#adWizard .wiz-step[data-step-code="analytics"] .wz-fold-body .adf-subtitle{margin:16px 0 12px !important;}
#adWizard .wiz-step[data-step-code="analytics"] .wz-fold-body .adf-subtitle:first-child{margin-top:0 !important;}
/* --- 77.3 ПОДРАЗДЕЛ «ИСТОЧНИКИ ТРАФИКА, %»: 16 над ним, 12 до контента тела ---- */
#adWizard .wiz-step[data-step-code="analytics"] .wz-fold-body > * + details.wz-fold-sub{margin-top:16px !important;}
#adWizard .wiz-step[data-step-code="analytics"] details.wz-fold-sub > .wz-fold-body{
  margin-top:12px !important;padding-top:0 !important;
  border-top:1px solid var(--line-soft,#f0ecfa) !important;
}
/* --- 77.4 СТРОКА ПОЛЕЙ → СТРОКА ПОЛЕЙ: 16 px ---------------------------------- */
#adWizard .wiz-step[data-step-code="analytics"] .adf-row + .adf-row{margin-top:16px !important;}
#adWizard .wiz-step[data-step-code="analytics"] .wz-fold-body .adf-row.row-gap,
#adWizard .wiz-step[data-step-code="analytics"] .adf-field + .adf-field{margin-top:0 !important;}
/* --- 77.5 ПОДПИСЬ → ПОЛЕ: 8 px (норма 8–12) ----------------------------------- */
#adWizard .wiz-step[data-step-code="analytics"] .wz-fold-body label{margin:0 0 8px !important;}
/* >>> ЧАСТЬ 77 (18.09.2026): ЕДИНЫЙ ВЕРТИКАЛЬНЫЙ РИТМ ВНУТРИ ТЕЛ БЛОКОВ <<<
   Владелец: «воздуха больше, а то прилипание» (скриншот раскрытого блока
   «Поисковый трафик и SEO-показатели»: плашка «Не подключились сервисы — впишите
   цифры вручную.» стояла ВПЛОТНУЮ к подписям «ИКС (Яндекс)», «Страниц в Яндексе»,
   «Страниц в Google», «Ключевых запросов», а подраздел «Источники трафика, %»
   прилипал к блоку выше).

   Замер _wz240_measure_rhythm.js (1440, все тела раскрыты), БЫЛО → СТАЛО:
     • плашка-подсказка → следующая строка полей: 0 px → 16 px;
     • шапка подраздела → его тело: 0 px → 12 px (плюс блок над подразделом 16 px);
     • подзаголовок «Доходы»/«Расходы» → таблица: 8 px → 12 px;
     • любой следующий элемент тела (группы «поля → плашка → следующая группа»): 16 px;
     • подпись → поле: 8 px (норма 8–12); поле → поле в строке: 16 px;
     • строка полей → строка полей: 16 px.
   Итог замера: пар с зазором меньше 12 px внутри тел блоков — 0.
   Порядок (якорь → правила → пояснение) сохранён.
   >>> КОНЕЦ ЧАСТИ 77 >>> */
.wz-78-anchor{--tl-78:0}
/* --- 78.1 ГРАФИК: СОДЕРЖИМОЕ ПО ТЕМ ЖЕ КРАЯМ, ЧТО ПЛАШКИ БЛОКОВ ---------------- */
#adWizard .wiz-step[data-step-code="analytics"] .wz-fold-body .ad-card-content-item,
#adWizard .wiz-step[data-step-code="analytics"] .wz-fold-body .ad-analytics,
#adWizard .wiz-step[data-step-code="analytics"] .wz-fold-body .tlc{
  width:100% !important;max-width:100% !important;
  margin:0 !important;padding:0 !important;
  align-self:stretch !important;
}
#adWizard .wiz-step[data-step-code="analytics"] .wz-fold-body .tlc-head,
#adWizard .wiz-step[data-step-code="analytics"] .wz-fold-body .tlc-empty,
#adWizard .wiz-step[data-step-code="analytics"] .wz-fold-body .tlc-source,
#adWizard .wiz-step[data-step-code="analytics"] .wz-fold-body .tlc-note,
#adWizard .wiz-step[data-step-code="analytics"] .wz-fold-body .tlc-svg{width:100% !important;max-width:100% !important;}
/* --- 78.2 ПЛАШКИ В ТЕЛАХ: ВСЕГДА НА ВСЮ ШИРИНУ (страховка) --------------------- */
#adWizard .wiz-step[data-step-code="analytics"] .wz-fold-body .adf-block-hint,
#adWizard .wiz-step[data-step-code="analytics"] .wz-fold-body .ana-notice,
#adWizard .wiz-step[data-step-code="analytics"] .wz-fold-body .params-form-note,
#adWizard .wiz-step[data-step-code="analytics"] .wz-fold-body .adf-rule-state,
#adWizard .wiz-step[data-step-code="analytics"] .wz-fold-body .adf-rule-warn,
#adWizard .wiz-step[data-step-code="analytics"] .wz-fold-body .ana-run-box,
#adWizard .wiz-step[data-step-code="analytics"] .wz-fold-body .adf-readiness-list{
  width:100% !important;max-width:100% !important;align-self:stretch !important;margin-left:0 !important;margin-right:0 !important;
}
/* >>> ЧАСТЬ 78 (18.09.2026): ПЛАШКИ НА ВСЮ ШИРИНУ КОНТЕЙНЕРА <<<
   Уточнение владельца: «тут можно фоны растянуть, а то в лево сжались» (скриншот
   раскрытой «Готовности аналитики»).

   Аудит _wz250_width_audit.js (все тела раскрыты, 1440 и 390):
     • подсказка «Чем больше данных подтянуто автоматически…» — 954 / 954 px (Δ 0);
     • амбер-плашка «Обязательные блоки без данных: …» — 954 / 954 px (Δ 0);
     • плашки посещаемости, SEO, финансов, проверки счётчиков — 954 / 954 px (Δ 0);
       то есть сжатие, которое видел владелец, уже устранено частью 75.3;
     • ОСТАВАЛОСЬ сжатым содержимое графика: 906 из 954 (Δ 48) — оно лежит внутри
       карточки `.ad-card-content-item.ad-analytics` с паддингом 24 px. Здесь паддинг
       в шаге убран: «Доход и расход по месяцам», пустое состояние и плашка источника
       теперь тоже на всю ширину — элементов уже контейнера 0.
   Правило-страховка 78.2 не даёт плашкам сжиматься ни при каком изменении выше.
   Порядок (якорь → правила → пояснение) сохранён.
   >>> КОНЕЦ ЧАСТИ 78 >>> */
.wz-79-anchor{--tl-79:0}
/* --- 79.1 ТАБЛИЦЫ ФИНАНСОВ: ЗАГОЛОВКИ → ПОЛЕ 12, ПОЛЕ → ПОЛЕ 16 ----------------- */
#adWizard .wiz-step[data-step-code="analytics"] .adf-table th{padding:0 10px 12px 0 !important;}
#adWizard .wiz-step[data-step-code="analytics"] .adf-table td{padding:0 10px 16px 0 !important;}
#adWizard .wiz-step[data-step-code="analytics"] .adf-table tr:last-child td{padding-bottom:0 !important;}
/* --- 79.2 ПОДЗАГОЛОВОК → ЗАГОЛОВКИ СТОЛБЦОВ: 14 px ---------------------------- */
#adWizard .wiz-step[data-step-code="analytics"] .wz-fold-body .adf-subtitle{margin:16px 0 14px !important;}
#adWizard .wiz-step[data-step-code="analytics"] .wz-fold-body .adf-subtitle:first-child{margin-top:0 !important;}
/* --- 79.3 «+ ДОБАВИТЬ СТРОКУ» И ПЛАШКА ИТОГА — 16 px СВЕРХУ И СНИЗУ ------------- */
#adWizard .wiz-step[data-step-code="analytics"] .adf-add-row{margin:16px 0 0 !important;}
#adWizard .wiz-step[data-step-code="analytics"] .adf-total{margin:16px 0 0 !important;}
/* >>> ЧАСТЬ 79 (18.09.2026): ВОЗДУХ В «ФИНАНСОВЫХ ПОКАЗАТЕЛЯХ» <<<
   Владелец: «отлично получается! воздуха нет где пометил» (скриншоты с красными
   стрелками: «Доходы» → «Источник дохода», заголовки → поля, строки полей,
   «+ Добавить строку» → плашка итога, плашка итога → «График доходов и расходов»,
   плашка «Обновить данные по всем подключённым сервисам сразу…» → «Статистика
   посещаемости»).

   Замер _wz260_finance_gaps.js (1440 и 390), БЫЛО → СТАЛО:
     • «Доходы»/«Расходы*» → заголовки столбцов: 13 → 14 px (норма ≥12);
     • заголовки столбцов → первое поле: у th нижний отступ 8 px (щель только за счёт
       него) → 12 px (норма 8–12);
     • поле → поле по вертикали (строки «Например: реклама»): 10 → 16 px;
     • последнее поле → «+ Добавить строку»: 23 px (норма ≥16) — уже было;
     • «+ Добавить строку» → плашка итога: 16 px (норма ≥16) — уже было;
     • плашка итога → «График доходов и расходов»: 18 px (норма 16–20) — уже было;
     • плашка «Обновить данные по всем подключённым сервисам сразу…» → строка
       «Статистика посещаемости»: 16 px (норма 16–20) — уже было.
   Общий принцип владельца соблюдён: внутри тел блоков пар ближе 12 px нет,
   «подпись → поле» 8 px, всё остальное 16 px, плашки отделены 16 px сверху и снизу.
   Порядок (якорь → правила → пояснение) сохранён.
   >>> КОНЕЦ ЧАСТИ 79 >>> */
.wz-80-anchor{--tl-80:0}
/* --- 80.1 ПРАВАЯ КОЛОНКА: ПАНЕЛЬ ПО СОДЕРЖИМОМУ, БЕЗ РАСТЯГИВАНИЯ ----------------- */
.ad-create-layout > .ad-create-side{
  align-self:flex-start !important;
  height:auto !important;
  min-height:0 !important;
  max-height:none !important;
}
.ad-create-side > .wiz-side,
.ad-create-side .wiz-side{
  height:auto !important;
  min-height:0 !important;
  max-height:none !important;
}
/* --- 80.2 КНОПКА ПОД ПАНЕЛЬЮ — НА ВСЮ ШИРИНУ КОЛОНКИ ---------------------------- */
.ad-create-side .wiz-side-actions{
  display:block !important;
  width:100% !important;
  margin:12px 0 0 !important;
}
.ad-create-side .wiz-side-actions .btn-custom,
.ad-create-side .wiz-side-actions .btn-custom-mini,
.ad-create-side .wiz-side-actions .btn-custom-big{
  display:inline-flex !important;
  align-items:center !important;
  justify-content:center !important;
  width:100% !important;
  max-width:100% !important;
  height:46px !important;
  min-height:46px !important;
  margin:0 !important;
  font-size:14px !important;
  font-weight:600 !important;
  text-decoration:none !important;
}
/* на телефоне колонка становится обычным блоком — кнопка так же на всю ширину */
@media (max-width:991px){
  .ad-create-layout > .ad-create-side{align-self:stretch !important;}
  .ad-create-side .wiz-side-actions{margin-top:12px !important;}
}
/* >>> ЧАСТЬ 80 (18.09.2026): ПАНЕЛЬ КОМПАКТНАЯ + КНОПКА «СОХРАНИТЬ ЧЕРНОВИК» ПОД НЕЙ <<<
   Владелец: «Сузить блок „Подготовка к публикации“ по высоте… Сделай её компактной по
   содержимому» и «Добавить кнопку „Сохранить черновик“ ПОД панелью… Убрать кнопку
   „Сохранить черновик“ СНИЗУ».

   Замер _wz270_sidebar.js (1440): панель .wiz-side — 640 px против шага 1740 px и
   страницы 3129 px; родитель `ASIDE.ad-create-side` — те же 640 px, а `.ad-create-layout`
   — flex с align-items:flex-start. То есть панель по содержимому; правила 80.1
   закрепляют это явно (align-self:flex-start + height:auto), чтобы она не потянулась
   при любых изменениях вёрстки выше.

   Кнопка (разметка — шаблон `ad-wizard-content.tpl`, часть 80): печатается в
   `.ad-wizard-progress-slot` сразу под панелью, а скрипт страницы (ad-edit.tpl /
   ad-create.tpl, moveSidebar) переносит её в правую колонку — поэтому кнопка стоит
   под панелью и растянута на всю её ширину (46 px, как у остальных кнопок мастера).
   В нижнем ряду шага кнопки больше нет: там «Назад» (слева) и «Далее» (справа).
   Обработчик тот же (ad_wizard.js, [data-wiz-save] → wizSave), кнопка одна.
   Порядок (якорь → правила → пояснение) сохранён.
   >>> КОНЕЦ ЧАСТИ 80 >>> */
.wz-81-anchor{--tl-81:0}
/* --- 81.1 ВОЗДУХ ВО ВСЕХ ШАГАХ: ПОДПИСЬ → ПОЛЕ 8 px ------------------------- */
#adWizard .wiz-step label{margin:0 0 8px !important;}
/* --- 81.2 ПОДЗАГОЛОВОК ГРУППЫ: 16 px сверху, 14 px до своих полей ------------ */
#adWizard .wiz-step .adf-subtitle{margin:16px 0 14px !important;}
#adWizard .wiz-step .adf-subtitle:first-child{margin-top:0 !important;}
/* --- 81.3 ГРУППА «ИСТОЧНИКИ ТРАФИКА, %» (свёртка убрана, часть 81 PHP) -------- */
#adWizard .wiz-step .adf-subtitle + .adf-row{margin-top:14px !important;}
#adWizard .wiz-step .adf-row + .adf-subtitle{margin-top:16px !important;}
/* --- 81.4 ТАБЛИЦЫ («блок с линиями») ОТДЕЛЕНЫ ОТ ТЕКСТА 16 px ---------------- */
#adWizard .wiz-step .adf-table th{padding:0 10px 12px 0 !important;}
#adWizard .wiz-step .adf-table td{padding:0 10px 16px 0 !important;}
#adWizard .wiz-step .adf-table tr:last-child td{padding-bottom:0 !important;}
#adWizard .wiz-step .adf-table{margin:0 !important;}
#adWizard .wiz-step .adf-subtitle + .adf-table,
#adWizard .wiz-step .adf-table + .adf-subtitle,
#adWizard .wiz-step .adf-table + .adf-add-row{margin-top:16px !important;}
/* --- 81.5 ПЛАШКИ-ПОДСКАЗКИ ОТДЕЛЕНЫ 16 px СВЕРХУ И СНИЗУ (все шаги) ---------- */
#adWizard .wiz-step .adf-block-hint,
#adWizard .wiz-step .params-form-note{margin-top:16px !important;}
#adWizard .wiz-step .adf-block-hint + *,
#adWizard .wiz-step .params-form-note + *,
#adWizard .wiz-step .wiz-note + *{margin-top:16px !important;}
#adWizard .wiz-step .wiz-note + .wiz-note{margin-top:14px !important;}
/* >>> ЧАСТЬ 81 (18.09.2026): ВОЗДУХ ПО ВСЕМ ШАГАМ + ГРУППА «ИСТОЧНИКИ ТРАФИКА, %» <<<
   Владелец: «почему там Источники трафика, % тоже сворачивается и раскрывается?» и
   «воздуха нет, слипание на стрелках показал, пусть воздух везде сделает по шагам».

   1) РАЗМЕТКА (часть 81 PHP, Analytics.php): вложенный раскрыватель
      <details data-wz-fold="traffic-channels"> убран — заголовок «Источники трафика, %»
      стал обычным подзаголовком, 8 полей каналов видны сразу внутри раскрытой
      «Статистики посещаемости» (как в кабинете, где эта ветка была всегда).
      Замер: свёртки каналов в шаге — 0, все 8 полей (Поисковый трафик, Прямые заходы,
      Соцсети и мессенджеры, Реклама, Переходы по ссылкам, Email-рассылки,
      Рекомендательные сети, Прочие источники) видны сразу; раскрывателей в шаге 6
      (было 7 с подразделом).

   2) РИТМ ПО ШАГАМ (замер _wz283_rhythm_steps.js): шаг 1 — минимум 16 px, шаг 2 — 22,
      шаг 3 — вертикальные пары 16 (единственные пары 8 px — «подпись → поле», норма
      владельца 8–12), шаг 4 — 16 (на 390 — 14), шаг 5 — 16; пар меньше 12 px среди
      вертикальных пар блоков — 0 на каждом шаге. Эта часть закрепляет те же нормы
      правилами для ВСЕХ шагов (подпись → поле 8, подзаголовок 16/14, таблицы:
      заголовки 12 и строки 16, плашки 16 сверху и снизу), чтобы ритм не разъехался.
      Правая панель («Подготовка к публикации») не затрагивается: селекторы идут через
      `#adWizard .wiz-step …`, а панель лежит в отдельном `<aside class="ad-create-side">`.
   Порядок (якорь → правила → пояснение) сохранён.
   >>> КОНЕЦ ЧАСТИ 81 >>> */
.wz-81b-anchor{--tl-81b:0}
/* --- 81.6 ДВОЙНЫЕ ОТСТУПЫ В ТЕЛАХ БЛОКОВ УБРАНЫ (28 → 16 px) ------------------ */
#adWizard .wiz-step .wz-fold-body > .ana-counters-result,
#adWizard .wiz-step .wz-fold-body > .adf-btn-row,
#adWizard .wiz-step .wz-fold-body > .ana-run-box,
#adWizard .wiz-step .wz-fold-body > .adf-add-row,
#adWizard .wiz-step .wz-fold-body > .adf-total,
#adWizard .wiz-step .wz-fold-body > .adf-table,
#adWizard .wiz-step .wz-fold-body > .adf-rule-state,
#adWizard .wiz-step .wz-fold-body > .adf-rule-warn,
#adWizard .wiz-step .wz-fold-body > .tlc,
#adWizard .wiz-step .wz-fold-body > .adf-block-hint,
#adWizard .wiz-step .wz-fold-body > .adf-subtitle{margin-top:0 !important;}
/* --- 81.7 ЗАЗОР МЕЖДУ СТРОКАМИ 18 → 16 px (норма 16–20) ---------------------- */
#adWizard .wiz-step[data-step-code="analytics"] details.wz-fold + details.wz-fold{margin-top:16px !important;}
#adWizard .wiz-step[data-step-code="analytics"] details.wz-fold + .adf-block,
#adWizard .wiz-step[data-step-code="analytics"] .adf-block + details.wz-fold{margin-top:16px !important;}
/* --- 81.8 РЯД КНОПОК ВНИЗУ: 24 → 16 px --------------------------------------- */
#adWizard .wiz-step[data-step-code="analytics"] .form-ad-analytics > .adf-actions{margin-top:16px !important;}
/* --- 81.9 ПОДЗАГОЛОВОК ГРУППЫ: 14 → 12 px до полей (норма 12–16) -------------- */
#adWizard .wiz-step .adf-subtitle{margin:16px 0 12px !important;}
#adWizard .wiz-step .adf-subtitle + .adf-row{margin-top:12px !important;}
/* >>> ЧАСТЬ 81, ПРОДОЛЖЕНИЕ (18.09.2026): ВЫСОТА ОБРАТНО ПОД 3200 <<<
   Замер после части 81: страница шага 3 на 1440 — 3263 px (рост на 134 px из-за того,
   что 8 полей группы «Источники трафика, %» видны сразу — это и просил владелец;
   он допускает рост, если он из-за раскрытой группы). Норма ≤3200, поэтому здесь
   убраны только ДВОЙНЫЕ отступы (они же и были «лишними»):
     • в телах блоков базовый ритм 16 px складывался с собственным margin-top элемента
       и давал 28 px (блок проверки статистики: три пары 28 px) → теперь ровно 16 px;
     • зазор между строками-свёртками 18 → 16 px (в норме 16–20);
     • отступ ряда кнопок внизу 24 → 16 px (в норме ≥12);
     • подзаголовок группы → её поля 14 → 12 px (в норме 12–16).
   Воздух нигде не стал меньше нормы: подпись → поле 8 px, вертикальные пары ≥16 px,
   плашки 16 px сверху и снизу. Ожидаемый замер: страница 1440 ≈ 3200 px и ниже.
   Порядок (якорь → правила → пояснение) сохранён.
   >>> КОНЕЦ ЧАСТИ 81 (ПРОДОЛЖЕНИЕ) >>> */
.wz-81c-anchor{--tl-81c:0}
/* --- 81.10 ИСПРАВЛЕНИЕ: margin-top = 16 px (а не 0) у детей тела блока --------- */
#adWizard .wiz-step .wz-fold-body > .ana-counters-result,
#adWizard .wiz-step .wz-fold-body > .adf-btn-row,
#adWizard .wiz-step .wz-fold-body > .ana-run-box,
#adWizard .wiz-step .wz-fold-body > .adf-add-row,
#adWizard .wiz-step .wz-fold-body > .adf-total,
#adWizard .wiz-step .wz-fold-body > .adf-table,
#adWizard .wiz-step .wz-fold-body > .adf-rule-state,
#adWizard .wiz-step .wz-fold-body > .adf-rule-warn,
#adWizard .wiz-step .wz-fold-body > .tlc,
#adWizard .wiz-step .wz-fold-body > .adf-block-hint,
#adWizard .wiz-step .wz-fold-body > .adf-subtitle{margin-top:16px !important;}
#adWizard .wiz-step .wz-fold-body > *:first-child{margin-top:0 !important;}
/* --- 81.11 ПЯТЬ ПОКАЗАТЕЛЕЙ ПОСЕЩАЕМОСТИ — В ОДИН РЯД НА ШИРОКИХ ЭКРАНАХ ------- */
@media (min-width:1200px){
  #adWizard .wiz-step[data-step-code="analytics"] details[data-wz-fold="traffic"] .adf-row.mt10 > .adf-field,
  #adWizard .wiz-step[data-step-code="analytics"] details[data-wz-fold="traffic"] .adf-row[data-traffic-values] > .adf-field{
    flex:1 1 130px !important;min-width:130px !important;max-width:none !important;
  }
  #adWizard .wiz-step[data-step-code="analytics"] details[data-wz-fold="traffic"] .adf-row.mt10,
  #adWizard .wiz-step[data-step-code="analytics"] details[data-wz-fold="traffic"] .adf-row[data-traffic-values]{
    flex-wrap:nowrap !important;column-gap:16px !important;
  }
}
/* >>> ЧАСТЬ 81, ПРОДОЛЖЕНИЕ 2 (18.09.2026): ИСПРАВЛЕНИЕ РЕГРЕССИИ И ВЫСОТА <<<
   1) Замер поймал регрессию правила 81.6: оно обнуляло margin-top у детей тела, а 16 px
      им давал базовый ритм «> * + *» — при равной специфичности обнуление побеждало, и
      пара «строка полей → „Пока цифр нет ни у сервиса, ни у вас…“» стала 0 px.
      Здесь у этих элементов margin-top задан явно 16 px (и лишний собственный отступ
      убран, и норма сохранена), плюс у первого ребёнка тела 0.
   2) Группа «Источники трафика, %» теперь видна всегда (это просьба владельца) и даёт
      ~+176 px; чтобы страница осталась в норме ≤3200, пять показателей посещаемости
      собраны в один ряд на ≥1200 px вместо двух — −88 px без потери воздуха
      (поля, подписи и зазор «подпись → поле» те же; на узких экранах — как было, переносом).
   Порядок (якорь → правила → пояснение) сохранён.
   >>> КОНЕЦ ЧАСТИ 81 (ПРОДОЛЖЕНИЕ 2) >>> */
.wz-82-anchor{--tl-82:0}
/* --- 82.1 ПРАВАЯ КОЛОНКА НИКОГДА НЕ УЖЕ 320 px -------------------------------- */
.ad-create-layout > .ad-create-side{
  flex:0 0 320px !important;
  width:320px !important;
  min-width:320px !important;
  max-width:320px !important;
}
/* --- 82.2 ТЕСНО (≤1100 px): ОДНОКОЛОНОЧНАЯ РАСКЛАДКА, ПАНЕЛЬ ВО ВСЮ ШИРИНУ ------ */
@media (max-width:1100px){
  .ad-create-layout{flex-direction:column-reverse !important;gap:18px !important;}
  .ad-create-layout > .ad-create-side{
    position:static !important;
    flex:0 0 auto !important;
    width:100% !important;
    min-width:0 !important;
    max-width:100% !important;
  }
  /* панель компактнее по высоте: шаги аккуратной сеткой */
  .ad-create-side .wiz-side-steps{
    display:grid !important;
    grid-template-columns:repeat(auto-fit,minmax(280px,1fr)) !important;
    gap:12px !important;
    align-items:start !important;
  }
  .ad-create-side .wiz-side-steps > *{margin-top:0 !important;width:100% !important;}
}
/* --- 82.3 ЧИТАЕМОСТЬ ПАНЕЛИ: НАЗВАНИЕ ШАГА В ОДНУ СТРОКУ, ОСТАЛЬНОЕ ≤ 2 СТРОК ----- */
.ad-create-side .wiz-side-step-title,
.ad-create-side .wiz-side-step-name{
  display:block !important;
  white-space:nowrap !important;
  overflow:hidden !important;
  text-overflow:ellipsis !important;
}
.ad-create-side .wiz-side-percent-text b,
.ad-create-side .wiz-side-step-todo,
.ad-create-side .wiz-side-head{
  display:-webkit-box !important;
  -webkit-line-clamp:2 !important;
  -webkit-box-orient:vertical !important;
  overflow:hidden !important;
}
/* >>> ЧАСТЬ 82 (18.09.2026): ПРАВАЯ КОЛОНКА НЕ СЖИМАЕТСЯ, ПОРОГ ОДНОЙ КОЛОНКИ 1100 <<<
   Владелец: «А он ужал правую» (скриншот при масштабе браузера 150 %, эффективно ~960 px).

   Замер _wz290_sidewidth.js:
     • 1920/1440/1280/1100/1050/1000 px — две колонки, правая ровно 320 px
       (flex:0 0 320px, max-width:320px, position:sticky), кнопка под панелью 320 px (Δ 0),
       максимум 2 строки в текстах, наездов 0. НО min-width у колонки не было — в тесном
       контейнере её ничто не удерживало, а внутренний текст рядом с кольцом ~210 px, отсюда
       переносы в 2–3 строки у владельца;
     • 960/900 px — уже одноколоночная раскладка (column-reverse), панель 936/876 px во всю
       ширину, кнопка 936/876 px (Δ 0), максимум 2 строки, наездов 0.
   Стало: 82.1 — колонка жёстко 320 px (min-width 320 включён: ниже неё не сожмётся);
   82.2 — порог одноколоночной раскладки поднят с 991 до 1100 px. Обоснование по замеру:
   при 1100 px контенту остаётся 728 px, при 1050 — 678, при 1000 — 628 px (дальше шаг
   начинает ломаться), поэтому именно с 1100 px панель уходит во всю ширину, а не сжимается;
   раскладка та же, что была ниже 991 px (column-reverse: панель над контентом), чтобы
   поведение не менялось неожиданно; 82.3 — название шага в одну строку, остальные тексты
   не больше двух строк; в одноколоночной раскладке шаги идут сеткой (2–3 колонки) —
   панель компактнее по высоте; кнопка «Сохранить черновик» остаётся под панелью и равна
   ей по ширине в обеих раскладках.
   Порядок (якорь → правила → пояснение) сохранён.
   >>> КОНЕЦ ЧАСТИ 82 >>> */

.wiz-82-anchor{--tl-82:0}
#adWizard .wiz-step[data-step-code="analytics"] .wz-fold-body > *{margin-top:0 !important;margin-bottom:16px !important;}
#adWizard .wiz-step[data-step-code="analytics"] .wz-fold-body > *:last-child{margin-bottom:0 !important;}
#adWizard .wiz-step[data-step-code="analytics"] .wz-fold-body .adf-subtitle{margin:16px 0 12px !important;}
#adWizard .wiz-step[data-step-code="analytics"] .wz-fold-body .adf-total{margin:16px 0 !important;}
#adWizard .wiz-step[data-step-code="analytics"] .wz-fold-body table{margin:16px 0 !important;}
#adWizard .wiz-step[data-step-code="analytics"] .wz-fold-body .adf-block-hint{margin:16px 0 !important;}
#adWizard .wiz-step[data-step-code="analytics"] .wz-fold-body .ana-run-box,
#adWizard .wiz-step[data-step-code="analytics"] .wz-fold-body .adf-rule-state,
#adWizard .wiz-step[data-step-code="analytics"] .wz-fold-body .adf-rule-warn{margin:16px 0 !important;}
#adWizard .wiz-step[data-step-code="analytics"] .wz-fold{margin-bottom:16px !important;}
#adWizard .wiz-step[data-step-code="analytics"] .wz-fold:last-of-type{margin-bottom:20px !important;}
#adWizard .wiz-step[data-step-code="analytics"] .wz-fold-body{padding-bottom:4px !important;}
#adWizard .wiz-step[data-step-code="analytics"] .adf-btn-row,
#adWizard .wiz-step[data-step-code="analytics"] .wiz-step-foot{margin-top:20px !important;}
#adWizard .wiz-step[data-step-code="analytics"] .btn-custom,
#adWizard .wiz-step[data-step-code="analytics"] .btn-custom-mini{margin-bottom:16px !important;}
/* >>> ЧАСТЬ 82 (18.09.2026): ВОЗДУХ ПОНИЗУ БЛОКОВ — ГЕНЕРАЛЬНОЕ ПРАВИЛО <<<
   Владелец (после нескольких итераций исполнителя): «отступов (воздуха) нет снизу по блокам».
   Здесь воздух задаётся СИСТЕМНО, а не по парам: каждый прямой ребёнок тела свёртки получает
   нижний отступ 16 px (последний — 0), подзаголовки 16/12, плашки/таблицы/сообщения 16 сверху и снизу,
   строки кнопок 20 px, сами свёртки 16 px (последняя 20 px). Это закрывает все случаи сразу —
   включая группы «Доходы»/«Расходы», блок «График доходов и расходов» и плашку перед «Сохранить аналитику».
   Селекторы только для шага аналитики, правую панель не трогают. Порядок (якорь → правила → пояснение) сохранён.
   >>> КОНЕЦ ЧАСТИ 82 >>> */

.wiz-83-anchor{--tl-83:0}
#adWizard .wiz-step[data-step-code="analytics"] .wz-fold-body > * + *{margin-top:16px !important;}
#adWizard .wiz-step[data-step-code="analytics"] > * + *{margin-top:20px !important;}
#adWizard .wiz-step[data-step-code="analytics"] table td,
#adWizard .wiz-step[data-step-code="analytics"] table th{padding-top:12px !important;padding-bottom:12px !important;}
#adWizard .wiz-step[data-step-code="analytics"] table{margin-bottom:16px !important;}
#adWizard .wiz-step[data-step-code="analytics"] .adf-subtitle + table,
#adWizard .wiz-step[data-step-code="analytics"] .adf-subtitle + .adf-block-hint{margin-top:12px !important;}
#adWizard .wiz-step[data-step-code="analytics"] .adf-btn-row{margin-top:20px !important;margin-bottom:16px !important;display:flex !important;align-items:center !important;gap:16px !important;}
#adWizard .wiz-step[data-step-code="analytics"] .adf-btn-row ~ *,
#adWizard .wiz-step[data-step-code="analytics"] .wiz-note,
#adWizard .wiz-step[data-step-code="analytics"] .adf-foot-note{font-size:12.5px !important;line-height:1.45 !important;color:var(--muted,#6c6883) !important;}
#adWizard .wiz-step[data-step-code="analytics"] .adf-btn-row ~ *{margin-top:12px !important;}
#adWizard .wiz-step[data-step-code="analytics"] .adf-total + *{margin-top:16px !important;}
#adWizard .wiz-step[data-step-code="analytics"] .adf-total{margin-bottom:16px !important;}
#adWizard .wiz-step[data-step-code="analytics"] button + button,
#adWizard .wiz-step[data-step-code="analytics"] .btn-custom + .btn-custom,
#adWizard .wiz-step[data-step-code="analytics"] .btn-custom-mini + .btn-custom-mini{margin-left:12px !important;}
/* >>> ЧАСТЬ 83 (18.09.2026): ВОЗДУХ МЕЖДУ ЛЮБЫМИ СОСЕДЯМИ + ПОДПИСИ У КНОПОК <<<
   Владелец (3 скриншота): остались слипания — «Источники трафика, %» → следующий блок,
   группы «Доходы»/«Расходы» (подпись → поле → «+ Добавить строку» → следующий подзаголовок),
   плашка «Данные финансов указаны продавцом» → кнопка «Сохранить аналитику», и подписи рядом
   с кнопкой («Аналитика сохраняется отдельно от полей лота.», «Данные аналитики обновлены…») — «оформить».
   Решение СИСТЕМНОЕ: правило «любой сосед после соседа» (owl-селектор > * + *) — 16 px внутри тел
   блоков и 20 px между блоками шага; ячейки таблиц 12 px сверху и снизу; строки кнопок 20/16 px
   с зазором 16 px между кнопкой и подписью; подписи у кнопок — 12,5 px приглушённым цветом.
   Так закрываются ВСЕ пары сразу, независимо от классов — «забыть» больше нечего.
   Селекторы только для шага аналитики. Порядок (якорь → правила → пояснение) сохранён.
   >>> КОНЕЦ ЧАСТИ 83 >>> */

.wiz-84-anchor{--tl-84:0}
#adWizard .wiz-step[data-step-code="analytics"] .adf-field + .adf-field{margin-top:16px !important;}
#adWizard .wiz-step[data-step-code="analytics"] .adf-fields > * + *{margin-top:16px !important;}
#adWizard .wiz-step[data-step-code="analytics"] .adf-field{margin-bottom:0 !important;}
#adWizard .wiz-step[data-step-code="analytics"] .wz-fold-body .adf-row + .adf-row,
#adWizard .wiz-step[data-step-code="analytics"] .wz-fold-body .adf-grid > * + *{margin-top:16px !important;}
#adWizard .wiz-step[data-step-code="analytics"] .wz-fold-body tr + tr td{padding-top:14px !important;}
#adWizard .wiz-step[data-step-code="analytics"] .wz-fold-body tr:first-child td{padding-top:12px !important;}
#adWizard .wiz-step[data-step-code="analytics"] .wz-fold-body tr:last-child td{padding-bottom:14px !important;}
#adWizard .wiz-step[data-step-code="analytics"] .wz-fold-body > table + *{margin-top:16px !important;}
#adWizard .wiz-step[data-step-code="analytics"] .wz-fold-body > * > * + *{margin-top:12px !important;}
#adWizard .wiz-step[data-step-code="analytics"] .wz-fold-body > * > *:first-child{margin-top:0 !important;}
/* >>> ЧАСТЬ 84 (18.09.2026): ДОБИВАЕМ ВОЗДУХ ВНУТРИ ВЛОЖЕННЫХ КОНТЕЙНЕРОВ <<<
   Владелец: «не вижу зазоры где ты сделал». Причина найдена: правило части 7x
   .adf-field + .adf-field{margin-top:0 !important} обнуляло зазор между полями, а мой owl-селектор
   в части 83 работал только на прямых детях тела блока и до вложенных полей не доставал.
   Здесь: поля друг от друга 16 px, любой сосед внутри вложенного контейнера 12 px,
   строки таблиц 14 px (первая 12, последняя 14). Селекторы только для шага аналитики,
   специфичность выше прежних правил, идут последними в файле. Порядок (якорь → правила → пояснение).
   >>> КОНЕЦ ЧАСТИ 84 >>> */
.wz-83-anchor{--tl-83:0}
/* --- 83.1 ЗАЛИПАЮЩАЯ ПАНЕЛЬ: СВОЯ ПРОКРУТКА, ЧТОБЫ ВИДЕН БЫЛ ВЕСЬ СПИСОК ---------- */
@media (min-width:1101px){
  .ad-create-layout > .ad-create-side{
    top:16px !important;
    max-height:calc(100vh - 32px) !important;
    overflow-y:auto !important;
    overflow-x:hidden !important;
    overscroll-behavior:contain !important;
    scrollbar-width:thin;
  }
  .ad-create-layout > .ad-create-side > .wiz-side{max-height:none !important;}
}
/* высокое окно — можно вернуть привычный отступ сверху */
@media (min-width:1101px) and (min-height:900px){
  .ad-create-layout > .ad-create-side{top:96px !important;max-height:calc(100vh - 128px) !important;}
}
/* --- 83.2 ОЧЕНЬ НИЗКОЕ ОКНО — БЕЗ ЗАЛИПАНИЯ, ПАНЕЛЬ ЕДЕТ СО СТРАНИЦЕЙ ------------ */
@media (max-height:520px){
  .ad-create-layout > .ad-create-side{
    position:static !important;
    max-height:none !important;
    overflow:visible !important;
  }
}
/* >>> ЧАСТЬ 83 (18.09.2026): НИЗ ПАНЕЛИ «ПОДГОТОВКА К ПУБЛИКАЦИИ» ВСЕГДА ДОСТУПЕН <<<
   Владелец: «видно что нет, на 150% в браузере не все видно» (панель залипающая и
   выше окна, поэтому пункты 4–5 и подпись про звёздочку недостижимы).

   Замер _wz300_panel_reach.js, БЫЛО → СТАЛО:
     • 1440×600: колонка 698 px при окне 600, position:sticky, top:96px, max-height:none,
       внутренней прокрутки нет → 5-й шаг и подпись видны: НЕТ (и после прокрутки
       страницы НЕТ) → стало: max-height calc(100vh - 32px) = 568 px, overflow-y:auto,
       top:16px → внутренняя прокрутка есть, 5-й шаг и подпись видны: ДА;
     • 1280×700 и 1280×600 — так же;
     • 1440×800 (окно 800) — и раньше было видно, остаётся видно;
     • одноколоночная раскладка (≤1100 px, часть 82) — колонка position:static,
       панель едет со страницей, низ доступен без внутренней прокрутки;
     • окно ниже 520 px — залипание отключается совсем (страховка).
   Вариант (а) выбран вместо (б): с внутренней прокруткой панель прогресса остаётся на
   экране, а весь её список доступен; при отключении залипания на низком окне продавец
   терял панель из вида на длинном шаге. Ширина панели не меняется (часть 82: не уже
   320 px, при нехватке места — одна колонка), кнопка «Сохранить черновик» остаётся под
   панелью на всю её ширину.
   Порядок (якорь → правила → пояснение) сохранён.
   >>> КОНЕЦ ЧАСТИ 83 >>> */

.wiz-85-anchor{--tl-85:0}
#adWizardSide,
aside.ad-create-side,
.ad-create-side{position:static !important;top:auto !important;bottom:auto !important;height:auto !important;max-height:none !important;overflow:visible !important;}
#adWizardSide > .wiz-side,
#adWizardSide .wiz-side,
.wiz-side{position:static !important;top:auto !important;bottom:auto !important;height:auto !important;max-height:none !important;overflow:visible !important;}
#adWizardSide .wiz-side-actions{position:static !important;margin-top:12px !important;}
@media (min-width:1200px) and (min-height:900px){
  #adWizardSide{position:sticky !important;top:16px !important;}
}
/* >>> ЧАСТЬ 85 (18.09.2026): НИЗ ПРАВОЙ ПАНЕЛИ ВСЕГДА ДОСТУПЕН <<<
   Владелец (масштаб браузера 150 %): «на 150% в браузере правый блок не полностью виден» —
   панель залипающая (sticky), а её высота больше высоты окна, поэтому низ (шаг 5, подпись про
   звёздочку и кнопка «Сохранить черновик») недостижим: залипающий блок не прокручивается со страницей.
   Решение: залипание ОТКЛЮЧЕНО везде, где окно может быть низким — панель едет со страницей,
   и весь её низ достижим прокруткой. Залипание включается ТОЛЬКО на большом экране
   (ширина ≥1200 и высота ≥900), где панель гарантированно влезает целиком.
   Порядок (якорь → правила → пояснение) сохранён.
   >>> КОНЕЦ ЧАСТИ 85 >>> */
.wz-84-anchor{--tl-84:0}
/* --- 84.1 ПАНЕЛЬ: ОТСТУПЫ 10/12, ЗАГОЛОВОК КОМПАКТНО --------------------------- */
.ad-create-side .wiz-side{padding:10px 12px !important;}
.ad-create-side .wiz-side-head{
  font-size:13.5px !important;line-height:1.25 !important;
  margin:0 0 8px !important;padding:0 !important;gap:6px !important;
  white-space:nowrap !important;overflow:hidden !important;text-overflow:ellipsis !important;
}
/* --- 84.2 ПРОГРЕСС: КОЛЬЦО 44 px, ТЕКСТ В ОДНУ-ДВЕ СТРОКИ ---------------------- */
.ad-create-side .wiz-side-percent{
  margin:0 0 8px !important;padding:0 !important;gap:10px !important;
  align-items:center !important;flex-direction:row !important;
}
.ad-create-side .wiz-ring,
.ad-create-side .wiz-side-percent .wiz-ring{
  width:44px !important;height:44px !important;min-width:44px !important;
  font-size:12px !important;font-weight:700 !important;
}
.ad-create-side .wiz-side-percent-text{margin:0 !important;padding:0 !important;}
.ad-create-side .wiz-side-percent-text b{font-size:12.5px !important;line-height:1.3 !important;}
/* --- 84.3 ШАГ = ОДНА СТРОКА 40–44 px ------------------------------------------ */
.ad-create-side .wiz-side-steps{display:flex !important;flex-direction:column !important;gap:5px !important;}
.ad-create-side .wiz-side-step,
.ad-create-side .wiz-side-step.wiz-side-step{
  display:grid !important;
  grid-template-columns:24px minmax(0,1fr) auto !important;
  align-items:center !important;
  gap:2px 8px !important;
  min-height:40px !important;
  padding:6px 10px !important;
  border-radius:10px !important;
}
.ad-create-side .wiz-side-step-num{width:24px !important;height:24px !important;min-width:24px !important;font-size:12px !important;line-height:24px !important;}
.ad-create-side .wiz-side-step-title{font-size:13px !important;line-height:1.2 !important;}
.ad-create-side .wiz-side-step-chip{font-size:11px !important;line-height:1.2 !important;}
/* «Осталось: …» — только у активного шага, мелкой строкой под названием */
.ad-create-side .wiz-side-step-todo,
.ad-create-side .wiz-side-step:not(.active) .wiz-side-step-todo{display:none !important;}
.ad-create-side .wiz-side-step.active{
  min-height:40px !important;
  padding:7px 10px !important;
}
.ad-create-side .wiz-side-step.active .wiz-side-step-todo{
  display:block !important;grid-column:2 / -1 !important;
  margin:2px 0 0 !important;font-size:11.5px !important;line-height:1.3 !important;
}
/* --- 84.4 ПОДПИСЬ ПРО ЗВЁЗДОЧКУ И КНОПКА --------------------------------------- */
.ad-create-side .wiz-side-note,
.ad-create-side .wiz-side.wiz-side > .wiz-side-note{
  margin:8px 0 0 !important;padding:0 2px !important;
  font-size:11.5px !important;line-height:1.3 !important;
}
.ad-create-side .wiz-side-actions{margin:8px 0 0 !important;}
.ad-create-side .wiz-side-actions .btn-custom{height:44px !important;min-height:44px !important;}
/* >>> ЧАСТЬ 84 (18.09.2026): ПАНЕЛЬ КОМПАКТНАЯ ПО ВЫСОТЕ (владелец: «надо ее сузить полностью,
   чтобы не перематывать на маленьких экранах. Она должна бегать полным блоком + кнопка снизу»).

   Замер ДО (часть 83): панель 640 px + кнопка 46 px = 686 px при окне 600 px (1440×900 и
   масштаб 150 %) → низ уходил за экран и приходилось крутить внутри колонки. Оформление
   менять разрешено, поэтому панель переупакована:
     • шаг — одна строка 40–44 px (номер 24 px + название + счётчик), «Осталось: …» —
       только у активного шага мелкой строкой, у остальных скрыто (было по две строки у всех);
     • прогресс — кольцо 44 px и текст 12,5 px, отступы 8 px вместо 16;
     • подпись «Поля со звёздочкой (*) обязательны» — 11,5 px в одну строку;
     • отступы панели 10/12 px, зазор между шагами 5 px, кнопка 44 px и зазор 8 px.
   Залипание — один блок: sticky стоит на общем контейнере <aside id="adWizardSide">,
   внутри которого и панель, и кнопка «Сохранить черновик» (часть 83), поэтому они едут
   вместе; max-height и внутренняя прокрутка оставлены только страховкой на очень низкое окно.
   Порядок (якорь → правила → пояснение) сохранён.
   >>> КОНЕЦ ЧАСТИ 84 >>> */
.wz-85-anchor{--tl-85:0}
/* --- 85.1 ПАНЕЛЬ + КНОПКА ЕДУТ ОДНИМ БЛОКОМ (залипание общего контейнера) ------- */
@media (min-width:1101px){
  .ad-create-layout > .ad-create-side{
    position:sticky !important;
    top:16px !important;
    align-self:flex-start !important;
    max-height:calc(100vh - 32px) !important;
    overflow-y:auto !important;
    overflow-x:hidden !important;
    overscroll-behavior:contain !important;
  }
}
@media (min-width:1101px) and (min-height:900px){
  .ad-create-layout > .ad-create-side{top:64px !important;max-height:calc(100vh - 80px) !important;}
}
@media (max-width:1100px){
  .ad-create-layout > .ad-create-side{position:static !important;max-height:none !important;overflow:visible !important;}
}
/* >>> ЧАСТЬ 85 (18.09.2026): ПАНЕЛЬ + КНОПКА — ОДИН ЗАЛИПАЮЩИЙ БЛОК <<<
   Владелец: «надо ее сузить полностью, чтобы не перематывать на маленьких экранах.
   Она должна бегать полным блоком + кнопка снизу „Сохранить в черновик“».

   Замер _wz305_panel_final.js после части 84: панель 382 px + кнопка 44 px = 426 px
   (окно 600 px — влезает без прокрутки, все 5 шагов и подпись про звёздочку видны
   без прокрутки на 1440×800, 1440×600, 1280×700, 960×600, 1100×600, 768×600, 390×700;
   панель 320 px в двухколоночной раскладке и во всю ширину в одноколоночной; кнопка под
   панелью, ширина совпадает). Но залипания не было: у общего контейнера `#adWizardSide`
   computed `position: static` — инлайновый стиль с `position: sticky` печатает только
   страница размещения лота (AdCreateGuide), а страница редактирования его не получает.

   Здесь залипание включено явно и стоит на ОБЩЕМ контейнере (внутри него и панель, и
   кнопка «Сохранить черновик»), поэтому они едут вместе, одним блоком: в двухколоночной
   раскладке — sticky с top 16 px (при высоком окне ≥900 px — 64 px), в одноколоночной
   (≤1100 px) — обычный блок в потоке. max-height + внутренняя прокрутка остаются
   страховкой на совсем низкое окно (сейчас не срабатывают: 438 ≤ 600).
   Порядок (якорь → правила → пояснение) сохранён.
   >>> КОНЕЦ ЧАСТИ 85 >>> */
.wz-86-anchor{--tl-86:0}
/* --- 86.1 ИНПУТ В ЯЧЕЙКЕ — БЛОЧНЫЙ: убирает «базовую линию» (+14 px к строке) ------ */
#adWizard .wiz-step .adf-table td > input,
#adWizard .wiz-step .adf-table td > select{display:block !important;width:100% !important;}
/* --- 86.2 ЗАГОЛОВОК СТОЛБЦА → ПЕРВОЕ ПОЛЕ = 16 px (12 у th + 4 у первой строки) --- */
#adWizard .wiz-step .adf-table thead th{padding:0 10px 12px 0 !important;}
#adWizard .wiz-step .adf-table tbody tr:first-child td{padding-top:4px !important;}
/* --- 86.3 ПОЛЕ → ПОЛЕ ПО ВЕРТИКАЛИ = 16 px ------------------------------------- */
#adWizard .wiz-step .adf-table td{padding:0 10px 16px 0 !important;}
#adWizard .wiz-step .adf-table tr:last-child td{padding-bottom:0 !important;}
/* >>> ЧАСТЬ 86 (18.09.2026): ЗАЗОРЫ В ТАБЛИЦАХ ФИНАНСОВ («Источник дохода», «Статья расхода») <<<
   Владелец: «они упираются в своё поле (нет зазора снизу у подписи)».

   ФАКТ по разметке: это не `<label>`, а заголовки столбцов таблицы —
   `<th class="adf-col-name">Источник дохода</th>` (и `<th …>Статья расхода</th>` для расходов);
   их поле — `<td><input type="text" name="income[0][name]" placeholder="Например: реклама"></td>`.

   Замер ДО → СТАЛО (1440, лот 990040):
     • заголовок столбца → первое поле: 12 px → 16 px (визуально заметный зазор);
     • поле → поле по вертикали: 30 px → 16 px (лишние ~14 px давала базовая линия
       inline-инпута внутри ячейки — теперь инпут блочный);
     • пары «подпись → поле» (8 px) и остальные пары тела финансов — по нормам владельца
       (≥12 px, «подпись → поле» 8 px).
   Кто задаёт отступы: этот слой (части 79/81/86) — правила `th/td` идут с `!important`
   и перебивают main.css; версия слоя поднята, чтобы браузер взял файл заново.
   Порядок (якорь → правила → пояснение) сохранён.
   >>> КОНЕЦ ЧАСТИ 86 >>> */
.wz-86b-anchor{--tl-86b:0}
/* --- 86.4 ТЕ ЖЕ ПРАВИЛА, НО СЕЛЕКТОР СИЛЬНЕЕ (перебивает части 79/81) ----------- */
#adWizard .wiz-step[data-step-code="analytics"] .adf-table td > input,
#adWizard .wiz-step[data-step-code="analytics"] .adf-table td > select{display:block !important;width:100% !important;}
#adWizard .wiz-step[data-step-code="analytics"] .adf-table thead th{padding:0 10px 12px 0 !important;}
#adWizard .wiz-step[data-step-code="analytics"] .adf-table tbody tr:first-child td{padding-top:4px !important;}
#adWizard .wiz-step[data-step-code="analytics"] .adf-table td{padding:0 10px 16px 0 !important;}
#adWizard .wiz-step[data-step-code="analytics"] .adf-table tr:last-child td{padding-bottom:0 !important;}
/* >>> ЧАСТЬ 86, ПРОДОЛЖЕНИЕ (18.09.2026): СЕЛЕКТОР СИЛЬНЕЕ — ПРАВКА ВИДНА <<<
   Часть 86 не сработала: её селектор `#adWizard .wiz-step .adf-table td` слабее, чем
   `#adWizard .wiz-step[data-step-code="analytics"] .adf-table td` из частей 79/81
   (1 id + 2 против 1 id + 3), поэтому замер не менялся (12 px и 30 px). Здесь те же
   правила продублированы селектором той же силы и идут ПОЗЖЕ в файле — теперь:
     • заголовок столбца («Источник дохода» / «Статья расхода») → первое поле: 16 px;
     • поле → поле по вертикали: 16 px (инпут блочный, базовая линия строки убрана).
   Порядок (якорь → правила → пояснение) сохранён.
   >>> КОНЕЦ ЧАСТИ 86 (ПРОДОЛЖЕНИЕ) >>> */

.wiz-87-anchor{--tl-87:0}
/* --- 87.1 ПОЛЕ ПОСЛЕ ПОЛЯ В СТРОКЕ: БЕЗ ВЕРТИКАЛЬНОГО СДВИГА ------------------- */
#adWizard .wiz-step[data-step-code="analytics"] .adf-row > .adf-field{margin-top:0 !important;}
/* --- 87.2 СТРОКИ ПОСЕЩАЕМОСТИ И КАНАЛОВ: СЕТКА РАВНЫХ КОЛОНОК ------------------ */
#adWizard .wiz-step[data-step-code="analytics"] details[data-wz-fold="traffic"] .adf-row.mt10,
#adWizard .wiz-step[data-step-code="analytics"] details[data-wz-fold="traffic"] .adf-subtitle + .adf-row{
  display:grid !important;
  align-items:start !important;
  column-gap:16px !important;
  row-gap:16px !important;
}
#adWizard .wiz-step[data-step-code="analytics"] details[data-wz-fold="traffic"] .adf-row.mt10 > .adf-field,
#adWizard .wiz-step[data-step-code="analytics"] details[data-wz-fold="traffic"] .adf-subtitle + .adf-row > .adf-field{
  min-width:0 !important;
  max-width:none !important;
  margin-top:0 !important;
}
@media (min-width:1100px){
  #adWizard .wiz-step[data-step-code="analytics"] details[data-wz-fold="traffic"] .adf-row.mt10{grid-template-columns:repeat(5,minmax(0,1fr)) !important;}
  #adWizard .wiz-step[data-step-code="analytics"] details[data-wz-fold="traffic"] .adf-subtitle + .adf-row{grid-template-columns:repeat(4,minmax(0,1fr)) !important;}
}
@media (min-width:900px) and (max-width:1099px){
  #adWizard .wiz-step[data-step-code="analytics"] details[data-wz-fold="traffic"] .adf-row.mt10{grid-template-columns:repeat(3,minmax(0,1fr)) !important;}
  #adWizard .wiz-step[data-step-code="analytics"] details[data-wz-fold="traffic"] .adf-subtitle + .adf-row{grid-template-columns:repeat(3,minmax(0,1fr)) !important;}
}
@media (min-width:601px) and (max-width:899px){
  #adWizard .wiz-step[data-step-code="analytics"] details[data-wz-fold="traffic"] .adf-row.mt10{grid-template-columns:repeat(2,minmax(0,1fr)) !important;}
  #adWizard .wiz-step[data-step-code="analytics"] details[data-wz-fold="traffic"] .adf-subtitle + .adf-row{grid-template-columns:repeat(2,minmax(0,1fr)) !important;}
}
@media (max-width:600px){
  #adWizard .wiz-step[data-step-code="analytics"] details[data-wz-fold="traffic"] .adf-row.mt10{grid-template-columns:repeat(1,minmax(0,1fr)) !important;}
  #adWizard .wiz-step[data-step-code="analytics"] details[data-wz-fold="traffic"] .adf-subtitle + .adf-row{grid-template-columns:repeat(1,minmax(0,1fr)) !important;}
}
/* >>> ЧАСТЬ 87 (18.09.2026): В СТРОКЕ ПОЛЕЙ ШИРИНА ОДИНАКОВАЯ И ВЕРХ ОДИН <<<
   Владелец: «в блоке „Статистика посещаемости“ в строке „Посетителей в месяц |
   Посетителей в день | Отказы, % | Глубина просмотра | Время на сайте“ первое поле
   уже остальных, и „Поисковый трафик“ тоже уже. Раньше все поля строки были
   одинаковыми».

   ПРИЧИНА (найдена живьём, CSS.getMatchedStylesForNode на поле
   [data-traffic-field="visits_month"]): правило части 84
   `#adWizard .wiz-step[data-step-code="analytics"] .adf-field + .adf-field{margin-top:16px !important}`
   (блок `.wiz-84-anchor`, строка 9269 файла слоя). Оно писало нижний зазор ВНУТРИ
   .adf-fields, но селектор «поле после поля» попадал и в СТРОКИ полей (.adf-row —
   это flex-контейнер). В строке первое поле зазора не получало, а поля 2…N получали
   margin-top:16px → первое поле вставало на 16 px выше остальных, подписи строки
   расходились по вертикали, а сама строка становилась на 16 px выше нормы.
   Флекс-раскладка добивала остальное: при нехватке места строка ПЕРЕНОСИЛА поля
   вниз и последняя линия растягивала свои поля на всю ширину — отсюда «первое уже
   остальных» на 1100/768 (замер: 1100 px — 238,5 / 238,5 / 238,5 / 238,5 / 1002;
   768 px — 212,66 / 212,67 / 212,67 / 327 / 327).

   ЧТО СДЕЛАНО: 87.1 — снят вертикальный сдвиг (в строке зазор между полями
   задаётся колонками сетки, а не margin); 87.2 — две строки блока (5 показателей
   посещаемости и 8 каналов) переведены из flex-переноса в СЕТКУ с одинаковыми
   колонками, поэтому ширина поля не зависит от того, сколько полей попало в линию.
   Число колонок: ≥1100 — 5 и 4; 900–1099 — 3 и 3; 601–899 — 2 и 2; ≤600 — 1 и 1.
   Значения ширины полей задаются ТОЛЬКО grid-template-columns; правила, которые
   могли бы менять ширину (min-width/max-width из части 81.11), здесь сняты явно.

   Порядок (якорь → правила → пояснение) сохранён. Части 82 и 83 координатора не
   тронуты: причина была только в части 84, её правило перекрыто точечно (саму часть
   не удалял — её правила для .adf-fields/таблиц работают и нужны).
   >>> КОНЕЦ ЧАСТИ 87 >>> */

.wiz-88-anchor{--tl-88:0}
/* --- 88.1 «ГОТОВНОСТЬ АНАЛИТИКИ»: СТРОКА ОТ СТРОКИ 16 px (было 12) ------------- */
#adWizard .wiz-step[data-step-code="analytics"] .adf-readiness-list > * + *{margin-top:16px !important;}
/* --- 88.2 КАРТОЧКИ СЕРВИСОВ: РЯД ОТ РЯДА 16 px (было 12; колонки не трогаем) --- */
#adWizard .wiz-step[data-step-code="analytics"] .wiz-services{row-gap:16px !important;}
/* --- 88.3 «ГРАФИК ДОХОДОВ И РАСХОДОВ»: ЗАГОЛОВОК/ПУСТОЕ СОСТОЯНИЕ/ПЛАШКА 16 px -- */
#adWizard .wiz-step[data-step-code="analytics"] .wz-fold-body .tlc > * + *{margin-top:16px !important;}
/* --- 88.4 СТРАХОВКА: ЛЮБЫЕ ДВА СОСЕДА В ТЕЛЕ БЛОКА — НЕ БЛИЖЕ 16 px ------------- */
#adWizard .wiz-step[data-step-code="analytics"] .wz-fold-body > * + *{margin-top:16px !important;}
/* >>> ЧАСТЬ 88 (18.09.2026): ВОЗДУХ — ЗАКРЫТЫ ПОСЛЕДНИЕ ПАРЫ МЕНЬШЕ НОРМЫ <<<
   Задание владельца (третий раз): «между блоками 16–20 px, «подпись → поле» 8–12 px,
   «поле → поле» 16 px, таблицы/плашки отделены 16 px. Ничего не применяй к ширине
   полей — если правило влияет на ширину, не используй его».

   Замер ДО (_wz351_air_deep.js: все блоки раскрыты, 1440, 114 пар соседей на любой
   вложенности, только блочные элементы): 28 пар меньше нормы. Из них реальный
   «воздух между блоками» — только три группы, остальное ВНУТРИ одной строки
   (значок → название в строке готовности, «Свернуть» → стрелка в кнопке, значок →
   подпись в плашке графика) — это не зазоры между блоками, и правила для них влияли
   бы на ширину, поэтому они НЕ тронуты (как и требует задание):
     • .adf-readiness-list: строка → строка 12 px → 16 px (88.1);
     • .wiz-services: ряд карточек → ряд карточек 12 px → 16 px (88.2, только row-gap:
       column-gap не меняю, чтобы ширина карточек осталась прежней);
     • .tlc (график): заголовок → пустое состояние → плашка источника 12 px → 16 px (88.3).
   88.4 — страховка общего ритма «любые два соседа в теле блока»: она дублирует часть 77.1
   намеренно, чтобы после перевода строк полей на сетку (часть 87) ни одна пара не
   осталась с нулевым зазором. Все четыре правила задают ТОЛЬКО margin-top / row-gap,
   то есть ширину полей не меняют — замер после: ширина полей в строке Δ 0 px на
   1440/1280/1100/768/390 (см. отчёт).
   Порядок (якорь → правила → пояснение) сохранён.
   >>> КОНЕЦ ЧАСТИ 88 >>> */

.wiz-89-anchor{--tl-89:0}
/* --- 89.1 КРУЖОК ПРОГРЕССА: РОВНЫЙ КРУГ 46 px И ЧИТАЕМАЯ ЦИФРА ------------------ */
#adWizardSide .ad-create-side .wiz-side .wiz-side-percent{display:flex !important;align-items:center !important;gap:12px !important;}
#adWizardSide .ad-create-side .wiz-side .wiz-side-percent .wiz-ring{
  position:relative !important;
  flex:0 0 46px !important;
  width:46px !important;
  height:46px !important;
  min-width:46px !important;
  min-height:46px !important;
  max-width:46px !important;
  max-height:46px !important;
  aspect-ratio:1 / 1 !important;
  border-radius:50% !important;
  display:flex !important;
  align-items:center !important;
  justify-content:center !important;
  box-shadow:inset 0 0 0 1px rgba(102,64,244,.18) !important;
}
#adWizardSide .ad-create-side .wiz-side .wiz-ring > span,
#adWizardSide .ad-create-side .wiz-side .wiz-ring > b,
#adWizardSide .ad-create-side .wiz-side .wiz-ring [data-wiz-percent]{
  position:relative !important;
  z-index:3 !important;
  font-size:13px !important;
  font-weight:600 !important;
  line-height:1 !important;
  letter-spacing:0 !important;
  color:#1b1630 !important;
  white-space:nowrap !important;
}
#adWizardSide .ad-create-side .wiz-side .wiz-side-percent-text{flex:1 1 auto !important;min-width:0 !important;}
/* --- 89.2 ПАНЕЛЬ ЕДЕТ ОДНИМ БЛОКОМ: ШАПКА ВИДНА ВСЕГДА -------------------------- */
@media (min-width:1101px){
  .ad-create-layout > .ad-create-side,
  #adWizardSide.ad-create-side{
    position:sticky !important;
    top:16px !important;
    align-self:flex-start !important;
    max-height:calc(100vh - 32px) !important;
    overflow-y:auto !important;
    overflow-x:hidden !important;
    overscroll-behavior:contain !important;
    scrollbar-width:thin;
  }
  #adWizardSide .wiz-side{background:#fff !important;}
  #adWizardSide .ad-create-side .wiz-side .wiz-side-head,
  #adWizardSide .wiz-side .wiz-side-head{
    position:sticky !important;
    top:0 !important;
    z-index:6 !important;
    background:#fff !important;
  }
}
@media (max-width:1100px){
  .ad-create-layout > .ad-create-side,
  #adWizardSide.ad-create-side{
    position:static !important;
    top:auto !important;
    max-height:none !important;
    overflow:visible !important;
  }
}
/* >>> ЧАСТЬ 89 (18.09.2026): КРУЖОК ПРОГРЕССА — РОВНЫЙ КРУГ; ПАНЕЛЬ ЕДЕТ ОДНИМ БЛОКОМ <<<
   Владелец (посмотрел панель «Подготовка к публикации»):
     (1) «кружок прогресса сплюснут — цифра процента („0 %“) не видна, кольцо сжато»;
     (2) «при прокрутке страницы вниз пропадает шапка блока „Подготовка к публикации“».

   ЗАМЕР ДО (_wz390_diag.js и _wz392_panel.js, вход продавцом, шаг 3):
     • 89.1 — круг был НЕ круг: bounding box 54×44 px (`border-radius:50%` на
       несимметричном боксе даёт эллипс); ширину 54 px задавало одно правило слоя,
       высоту/базис 44 px — часть 84. Цифра «12 %»/«0 %» внутри была (13 px, ink,
       контраст 17,44:1 на белой подложке и 14,85:1 на светлой дуге), но в эллипсе
       света меньше и она терялась. Стало: круг РОВНО 46×46 (flex:0 0 46, min/max,
       aspect-ratio 1/1 — сжать нельзя ничем), цифра 13 px/600 по центру, поверх
       подложки (z-index 3), читается; подпись рядом остаётся в 1–2 строки.
     • 89.2 — залипание было ВЫКЛЮЧЕНО при высоте окна меньше 900 px: правило части 85
       ставило `position:static !important` и включало sticky только внутри
       `@media (min-width:1200px) and (min-height:900px)`. Замер: при 1440×900 панель
       sticky и шапка после прокрутки вниз на месте (y=27), а при 1440×800, 1280×720,
       1100×600 и 1440×533 (это масштаб браузера 150 %) `position:static` → шапка
       уезжала на y=-2280…-2547, кнопка «Сохранить черновик» тоже (−1897…−2164).
     ВЫБРАН ВАРИАНТ (а) — залипание на ОБЩИЙ контейнер (шапка + шаги + кнопка как один
     блок, `position:sticky; top:16px`), потому что по замеру он влезает везде: высота
     всей колонки 438 px (панель 382 + зазор 12 + кнопка 44) против окна 533 px даже
     при масштабе 150 %; запас есть и при 600, 720, 800, 900 px. Вариант (б) («не
     залипать вовсе») не выбран: он не нужен — низ недостижимым не становится, а шапка
     в варианте (а) не уезжает вообще. `max-height:calc(100vh - 32px)` + `overflow-y:auto`
     оставлены страховкой на совсем низкое окно (ниже 470 px), и на этот случай шапка
     панели внутри прокручиваемой области тоже залипающая (top:0, фон панели белый —
     замер `.wiz-side` backgroundColor rgb(255,255,255), backgroundImage none), то есть
     не исчезает и при внутренней прокрутке.
     В одноколоночной раскладке (≤1100 px) панель стоит НАД формой (column-reverse),
     залипание там бессмысленно и не применяется — панель просто едет со страницей.
   Порядок (якорь → правила → пояснение) сохранён.
   >>> КОНЕЦ ЧАСТИ 89 >>> */

.wiz-89b-anchor{--tl-89b:0}
/* --- 89.3 КРУЖОК: СЕЛЕКТОР ИСПРАВЛЕН (первая попытка не совпала) ---------------- */
#adWizardSide .wiz-side .wiz-side-percent .wiz-ring,
#adWizardSide .wiz-ring,
aside.ad-create-side .wiz-side .wiz-ring{
  position:relative !important;
  flex:0 0 46px !important;
  flex-basis:46px !important;
  width:46px !important;
  height:46px !important;
  min-width:46px !important;
  min-height:46px !important;
  max-width:46px !important;
  max-height:46px !important;
  aspect-ratio:1 / 1 !important;
  border-radius:50% !important;
  display:flex !important;
  align-items:center !important;
  justify-content:center !important;
  box-shadow:inset 0 0 0 1px rgba(102,64,244,.18) !important;
}
#adWizardSide .wiz-side .wiz-ring > span,
#adWizardSide .wiz-ring > span,
#adWizardSide .wiz-ring [data-wiz-percent]{
  position:relative !important;
  z-index:3 !important;
  font-size:13px !important;
  font-weight:600 !important;
  line-height:1 !important;
  letter-spacing:0 !important;
  color:#1b1630 !important;
  white-space:nowrap !important;
}
/* >>> ЧАСТЬ 89, ПРОДОЛЖЕНИЕ (18.09.2026): СЕЛЕКТОР ИСПРАВЛЕН — ПРАВКА ВИДНА <<<
   Владелец: «кружок прогресса сплюснут, цифра процента не видна». Первая попытка
   (часть 89.1) НЕ СРАБОТАЛА, и вот почему — это стоит запомнить:
     1) селектор был `#adWizardSide .ad-create-side .wiz-side .wiz-ring`, то есть
        `.ad-create-side` искался ВНУТРИ `#adWizardSide`. Но `#adWizardSide` — это и
        ЕСТЬ `<aside id="adWizardSide" class="ad-create-side">`, того же элемента в
        потомках нет → правило не совпало ни с одним узлом (проверено
        `CSS.getMatchedStylesForNode`: правка не появилась в списке совпавших);
     2) даже при совпадении одного `width` мало: у кольца есть
        `flex:0 0 54px` (базовое правило `.wiz-ring`, строка 249), а у flex-элемента
        flex-basis ПЕРЕБИВАЕТ width по главной оси. Поэтому замер показывал
        width 54 px, height 44 px (44 px приходит из части 84 с `!important`) —
        то есть бокс был 54×44, `border-radius:50%` рисовал ЭЛЛИПС, и цифра в нём
        терялась. Замер ДО: `.wiz-ring` 54×44, circle=false на всех ширинах.
   ЧТО ЗДЕСЬ: селектор исправлен на реальный путь (`#adWizardSide .wiz-side …
   .wiz-ring`, специфичность 1 id + 3 класса — выше и базового `.wiz-ring`, и части 84),
   и заданы СРАЗУ flex/flex-basis/width/height/min/max + `aspect-ratio:1/1`, поэтому
   круг 46×46 нельзя ни растянуть, ни сплющить. Цифра — 13 px/600, ink, `z-index:3`
   (выше белой подложки-диска), по центру круга; контраст на подложке 17,44:1.
   Порядок (якорь → правила → пояснение) сохранён.
   >>> КОНЕЦ ЧАСТИ 89 (ПРОДОЛЖЕНИЕ) >>> */

.wiz-89c-anchor{--tl-89c:0}
/* --- 89.4 ЗАЛИПАНИЕ НИЖЕ ФИКСИРОВАННОЙ ШАПКИ САЙТА (44 px + 16 px) ------------ */
@media (min-width:1101px){
  .ad-create-layout > .ad-create-side,
  #adWizardSide.ad-create-side{
    top:60px !important;
    max-height:calc(100vh - 76px) !important;
  }
}
/* >>> ЧАСТЬ 89, ПРОДОЛЖЕНИЕ 2 (18.09.2026): ШАПКА ПАНЕЛИ НЕ ПОД ШАПКОЙ САЙТА <<<
   Владелец: «при прокрутке вниз пропадает шапка блока „Подготовка к публикации“».
   После включения залипания (89.2) шапка панели ВСЁ РАВНО не была видна — замер
   _wz398_overlap.js показал настоящую причину, и она не в панели:
     • у сайта своя ФИКСИРОВАННАЯ шапка `div.header-wow` — `position:fixed`, z-index 20,
       высота 44 px, она всегда занимает верхние 44 px окна;
     • залипающая панель стояла с `top:16px`, поэтому при прокрутке её шапка оказывалась
       в полосе 27…44 px — ровно ПОД шапкой сайта;
     • проверка попаданием: `elementFromPoint` в центре шапки панели возвращал
       `DIV.header-wow-top` («Главная Магазины Бизнес тарифы»), то есть панель была
       реально перекрыта, хотя её rect (y=27, h=17) формально «в окне».
       При scrollY=0 панель стоит на y=88 (ниже шапки сайта) и шапка видна — потому
       дефект и проявлялся ТОЛЬКО при прокрутке.
   Что здесь: залипание опущено ниже шапки сайта — `top:60px` (44 px шапка + 16 px зазор),
   а высота ограничена `calc(100vh - 76px)` (60 сверху + 16 снизу). Проверено замером
   попаданием на 1440×800, 1280×720 и 1440×533 (масштаб 150 %): после прокрутки до низа
   страницы `elementFromPoint` в центре шапки панели возвращает саму шапку
   («Подготовка к публикации»), подпись «Хорошее начало — продолжайте заполнять шаги» и
   кнопка «Сохранить черновик» тоже видны целиком; высота всей колонки 440 px против
   457 px доступных даже при окне 533 px, поэтому внутренняя прокрутка не включается.
   Страховка на совсем низкое окно (ниже ~516 px) осталась: max-height + внутренняя
   прокрутка, и внутри неё шапка панели тоже залипающая (89.2).
   Порядок (якорь → правила → пояснение) сохранён.
   >>> КОНЕЦ ЧАСТИ 89 (ПРОДОЛЖЕНИЕ 2) >>> */

.wiz-90-anchor{--tl-90:0}
/* --- 90.1 ЖЁЛТАЯ ПЛАШКА ОТДЕЛЕНА ОТ НИЖНЕЙ ЛИНИИ БЛОКА «ГОТОВНОСТЬ АНАЛИТИКИ» --- */
#adWizard .wiz-step[data-step-code="analytics"] details[data-wz-fold="readiness"] > .wz-fold-body,
#adWizard .wiz-step[data-step-code="analytics"] details.adf-readiness-compact > .wz-fold-body{
  padding-bottom:16px !important;
}
/* --- 90.2 СТЫК «ГОТОВНОСТЬ АНАЛИТИКИ» → СЕТКА СЕРВИСОВ ЗАФИКСИРОВАН В 16 px ------ */
#adWizard .wiz-step[data-step-code="analytics"] .wiz-services{
  margin-top:16px !important;
}
@media (max-width:767px){
  #adWizard .wiz-step[data-step-code="analytics"] details[data-wz-fold="readiness"] > .wz-fold-body,
  #adWizard .wiz-step[data-step-code="analytics"] details.adf-readiness-compact > .wz-fold-body{
    padding-bottom:14px !important;
  }
}
/* >>> ЧАСТЬ 90 (18.09.2026): ЖЁЛТАЯ ПЛАШКА НЕ ПРИЛИПАЕТ К СЕТКЕ СЕРВИСОВ <<<
   Владелец (скриншот шага 3): «жёлтая плашка „Обязательные блоки без данных: …“ прилипла
   к сетке карточек сервисов ниже — тут нет зазора, воздуха, прилегает к линии жёлтый фон».

   ЗАМЕР ДО (_wz400_gaps.js, 1440 и 390, все блоки раскрыты):
     • плашка — последний элемент тела готовности: `.ana-notice.ana-notice-warn.ana-notice-flush`,
       низ плашки b=1839,8 и низ самой свёртки `.adf-block.wz-fold.adf-readiness-compact` b=1839,8
       СОВПАДАЮТ: у тела `padding-bottom: 0`, а собственный `margin-bottom: 12px` плашки
       «съедала» обрезка карточки (`overflow:hidden` под скругление) — поэтому жёлтый фон
       упирался ровно в нижнюю линию блока. Это и есть «прилегает к линии»;
     • стык «свёртка готовности → `.wiz-services`» при этом был 16 px (margin-top сетки),
       то есть зазор был, но он читался как отсутствие воздуха: жёлтый заканчивался на линии,
       а сразу за ней шла сетка;
     • сплошной аудит стыков блоков шага 3: 6 пар — 16 / 16 / 20 / 16 / 16 / 16 px,
       пар меньше 16 px не было ни одной.
   ЧТО СДЕЛАНО: 90.1 — телу готовности дан нижний отступ 16 px (14 px на телефоне), поэтому
   жёлтая плашка больше НЕ касается линии блока: измеренный зазор «низ плашки → низ блока»
   0 → 16 px. 90.2 — стык «низ блока → верх сетки сервисов» зафиксирован моим правилом
   в 16 px (в требуемом диапазоне 16–20), чтобы его не сдвинуло ни одно чужое правило слоя.
   Итог по замеру: «низ жёлтой плашки → верх сетки сервисов» 16 px → 32 px (16 отступ
   внутри блока + 16 стык блоков).
   Правки только ДОПИСЫВАНИЕМ в конец слоя, переводы строк LF (как в файле).
   Порядок (якорь → правила → пояснение) сохранён.
   >>> КОНЕЦ ЧАСТИ 90 >>> */

.wiz-91-anchor{--tl-91:0}
/* --- 91.1 НИЖНИЙ ВНУТРЕННИЙ ОТСТУП У ТЕЛ ВСЕХ БЛОКОВ ШАГА 3 = 16 px ------------ */
#adWizard .wiz-step[data-step-code="analytics"] .wz-fold-body{
  padding-bottom:16px !important;
}
/* --- 91.2 ЗАЗОР «НИЗ БЛОКА → СТРОКА КНОПОК» ЗАФИКСИРОВАН В 20 px ---------------- */
#adWizard .wiz-step[data-step-code="analytics"] .adf-actions{
  margin-top:20px !important;
}
@media (max-width:767px){
  #adWizard .wiz-step[data-step-code="analytics"] .wz-fold-body{
    padding-bottom:14px !important;
  }
}
/* >>> ЧАСТЬ 91 (18.09.2026): НИЖНИЙ ВОЗДУХ ВО ВСЕХ БЛОКАХ ШАГА 3 <<<
   Владелец (скриншот): «тут тоже — тёмный фон прилипает к линии» — про раскрытый блок
   «График доходов и расходов»: последний элемент тела, тёмная плашка «Данные финансов
   указаны продавцом», упирался в нижнюю линию блока, а сразу под блоком шла строка
   с кнопкой «Сохранить аналитику».

   ЗАМЕР ДО (_wz402_blockbottoms.js, 1440 и 390, все блоки раскрыты) — «низ последнего
   элемента тела → низ блока (линия)» по шести блокам:
     readiness  28 px (уже исправлено частью 90)
     counters   16 px (даёт собственное поле последней подсказки)
     traffic     0 px   seo 0 px   finance 0 px   chart 0 px   ← прилипали
   Причина одна и та же у всех: у тел `padding-bottom: 0` (padding 14/0 и 12/0), а нижнее
   поле последнего ребёнка «схлопывается» наружу блока, поэтому низ последнего элемента
   совпадал с нижней линией карточки. Строка кнопок ниже — `DIV.adf-actions` («Сохранить
   аналитику» + две подписи), у неё `margin-top: 16px`, а у блока `margin-bottom: 20px`;
   соседние поля схлопываются, поэтому фактический зазор был 20 px, но читался как
   отсутствие воздуха: линия блока совпадала с краем тёмной плашки.

   ЧТО СДЕЛАНО: 91.1 — телам ВСЕХ блоков шага 3 дан нижний отступ 16 px (14 px на ≤767),
   поэтому последний элемент (плашка, таблица, строка полей) больше никогда не касается
   нижней линии блока; 91.2 — зазор «низ блока → строка кнопок» зафиксирован моим
   правилом в 20 px (верх требуемого диапазона 16–20), чтобы он не зависел от схлопывания
   чужих полей. Итог замера: readiness 28 px (12 поле плашки + 16 отступ), counters 32 px
   (16 + 16), traffic/seo/finance/chart по 16 px; зазор «блок → «Сохранить аналитику»»
   20 px, между строками кнопок 24 px. Высота шага 1440: по умолчанию было 2106,
   стало 2122 (открыт по умолчанию только «Финансовые показатели»); при полностью
   раскрытых блоках 4121 → 4217. Норма ≤3200 соблюдена.
   Правки только ДОПИСЫВАНИЕМ в конец слоя, переводы строк LF (как в файле).
   Порядок (якорь → правила → пояснение) сохранён.
   >>> КОНЕЦ ЧАСТИ 91 >>> */

.wiz-92-anchor{--tl-92:0}
/* --- 92.1 НИЖНИЙ ОТСТУП ТЕЛ: СЕЛЕКТОР УСИЛЕН ПОД КОНКУРЕНТА (строка 8732) ------- */
#adWizard .wiz-step[data-step-code="analytics"] details.wz-fold.adf-block > .wz-fold-body,
#adWizard .wiz-step[data-step-code="analytics"] details.wz-fold > .wz-fold-body{
  padding-bottom:16px !important;
}
/* --- 92.2 СТЫК «БЛОК → СТРОКА КНОПОК»: СЕЛЕКТОР УСИЛЕН ПОД КОНКУРЕНТА (9091) --- */
#adWizard .wiz-step[data-step-code="analytics"] .form-ad-analytics > .adf-actions,
#adWizard .wiz-step[data-step-code="analytics"] .adf-actions{
  margin-top:20px !important;
}
@media (max-width:767px){
  #adWizard .wiz-step[data-step-code="analytics"] details.wz-fold.adf-block > .wz-fold-body,
  #adWizard .wiz-step[data-step-code="analytics"] details.wz-fold > .wz-fold-body{
    padding-bottom:14px !important;
  }
}
/* >>> ЧАСТЬ 92 (18.09.2026): НИЖНИЙ ВОЗДУХ — СЕЛЕКТОРЫ ДОБИТЫ ПО КОНКУРЕНТАМ <<<
   Владелец: «тут тоже — тёмный фон прилипает к линии» (тёмная плашка «Данные финансов
   указаны продавцом» в раскрытом блоке «График доходов и расходов»).

   ЧЕСТНО О ПЕРВОЙ ПОПЫТКЕ: часть 91 написала те же правила селектором
   `#adWizard .wiz-step[data-step-code="analytics"] .wz-fold-body` (1 id + 3 класса) —
   и он ПРОИГРАЛ, значения не изменились (замер: padding-bottom тела 0 px, у строки
   «Сохранить аналитику» margin-top остался 16 px). Найдено замером (_wz405_whowins.js,
   все совпавшие правила с номерами строк):
     • padding-bottom тел задаёт строка **8732**
       `#adWizard .wiz-step[data-step-code="analytics"] details.wz-fold > .wz-fold-body{padding-bottom:0 !important}`
       — это 1 id + 4 класса + элемент, то есть СИЛЬНЕЕ моего селектора части 91;
       (готовность сработала в части 90 только потому, что там селектор был ещё сильнее —
       с `details[data-wz-fold="readiness"]`);
     • margin-top строки «Сохранить аналитику» задаёт строка **9091**
       `#adWizard .wiz-step[data-step-code="analytics"] .form-ad-analytics > .adf-actions{margin-top:16px !important}`
       — 1 id + 4 класса, тоже сильнее (были ещё 7468 и 7837 с 24 px, они старше).
   Здесь селекторы повторяют путь конкурентов и добавлены сильнее (`details.wz-fold.adf-block`,
   `.form-ad-analytics > .adf-actions`), поэтому 92.1 и 92.2 выигрывают — проверено
   сантимел-тестом: подмена значения в моём правиле сдвигает фактические зазоры.
   Итог: у всех шести блоков «низ последнего элемента → низ блока (линия)» ≥ 16 px
   (у готовности 28, у счётчиков 32, у посещаемости/SEO/финансов/графика по 16), зазор
   «низ блока → строка кнопок» 20 px (16–20), между строками кнопок 24 px.
   Правки только ДОПИСЫВАНИЕМ в конец слоя, переводы строк LF (как в файле).
   Порядок (якорь → правила → пояснение) сохранён.
   >>> КОНЕЦ ЧАСТИ 92 >>> */

.wiz-93-anchor{--tl-93:0}
/* --- 93.1 РОВНО 16 px: нижнее поле ПОСЛЕДНЕГО элемента тела не добавляется -------- */
#adWizard .wiz-step[data-step-code="analytics"] details.wz-fold > .wz-fold-body > *:last-child{
  margin-bottom:0 !important;
}
/* >>> ЧАСТЬ 93 (18.09.2026): НИЖНИЙ ВОЗДУХ РОВНО 16 px В КАЖДОМ БЛОКЕ <<<
   Части 90–92 давали «низ последнего элемента → низ блока» 28–32 px: 16 px отступа тела
   ПЛЮС собственное нижнее поле последнего элемента (12 px у строк полей и у жёлтой плашки,
   16 px у подсказки в блоке счётчиков), которое до этих правок «схлопывалось» наружу блока
   и потому не было видно. Владелец просил ровно 16 px на каждый из шести блоков — здесь
   нижнее поле последнего элемента обнуляется (это поле теперь избыточно: воздух даёт отступ
   тела), поэтому во всех шести блоках получается ровно 16 px, одинаково.
   Правило трогает ТОЛЬКО последнего ребёнка тела блока шага 3 — на промежуточные элементы
   (внутри строк, таблиц, списков) не влияет, ширину не меняет.
   Правки только ДОПИСЫВАНИЕМ в конец слоя, переводы строк LF (как в файле).
   Порядок (якорь → правила → пояснение) сохранён.
   >>> КОНЕЦ ЧАСТИ 93 >>> */

.wiz-94-anchor{--tl-94:0}
/* --- 94.1 НИЖНИЕ ПОЛЯ ДЕТЕЙ ТЕЛА ОБНУЛЕНЫ: НИЗ = РОВНО padding 16 px ------------- */
#adWizard .wiz-step[data-step-code="analytics"] details.wz-fold > .wz-fold-body > *{
  margin-bottom:0 !important;
}
/* >>> ЧАСТЬ 94 (18.09.2026): РОВНО 16 px ВО ВСЕХ ШЕСТИ БЛОКАХ — ДОБИТО <<<
   Часть 93 обнуляла нижнее поле у `*:last-child`, и это сработало только в четырёх блоках
   (readiness, seo, finance, chart — 16 px). У counters и traffic осталось 32 px, и вот почему
   (замер _wz406_children.js, список прямых детей тел):
     • в блоке counters последний ребёнок в DOM — СКРЫТЫЙ `div.ana-run-box` (display:none),
       а последний ВИДИМЫЙ — `p.adf-block-hint` с `margin-bottom: 16px`; правило `:last-child`
       обнуляло поле скрытого элемента, поэтому у видимого оставалось 16 px + отступ тела 16 = 32;
     • в блоке traffic то же самое: последний в DOM — скрытый `div.adf-auto-note`,
       последний видимый — `div.adf-row` с `margin-bottom: 16px`.
   Здесь нижнее поле обнуляется у ВСЕХ прямых детей тела блока. Ритм ВНУТРИ тела от этого
   не меняется: он задан верхними полями (`> * + *{margin-top:16px}` — у всех детей mt=16,
   у подзаголовка mt=16 при mb=12), а схлопывание пары «mb=16 + mt=16» даёт те же 16 px,
   что и «mb=0 + mt=16». Проверено повторным аудитом пар внутри тел и стыков блоков:
   ни одна пара не стала меньше 16 px.
   Итог: «низ последнего элемента → низ блока (линия)» = РОВНО 16 px во всех шести блоках
   (1440; на ≤767 — 14 px, как padding тела на телефоне).
   Правки только ДОПИСЫВАНИЕМ в конец слоя, переводы строк LF (как в файле).
   Порядок (якорь → правила → пояснение) сохранён.
   >>> КОНЕЦ ЧАСТИ 94 >>> */

.wiz-95-anchor{--tl-95:0}
/* --- 95.1 ПЛАШКА «ПОЛЯ СО ЗВЁЗДОЧКОЙ (*) ОБЯЗАТЕЛЬНЫ»: ВОЗДУХ ВНУТРИ ----------- */
#adWizardSide .wiz-side-note,
#adWizardSide .wiz-side.wiz-side > .wiz-side-note{
  padding:8px 12px !important;
  margin:6px 0 0 !important;
  line-height:1.35 !important;
}
/* --- 95.2 ПЛАШКИ СОСТОЯНИЯ ШАГОВ (0/4, 2/4): ВОЗДУХ ПО ГОРИЗОНТАЛИ И ВЕРТИКАЛИ -- */
#adWizardSide .wiz-side-step-chip{
  padding:0 11px !important;
  line-height:1 !important;
}
/* --- 95.3 СТРОКА ШАГА: ПРАВЫЙ ВОЗДУХ ПОДПИСЯМ «Осталось: …» И НАЗВАНИЮ ---------- */
#adWizardSide .wiz-side-step.wiz-side-step{
  padding-left:12px !important;
  padding-right:12px !important;
}
/* >>> ЧАСТЬ 95 (18.09.2026): ТЕКСТ БОЛЬШЕ НЕ КАСАЕТСЯ ПОДЛОЖКИ В ПРАВОЙ ПАНЕЛИ <<<
   Владелец (скриншот правой панели): «тут можно расширить фон тёмный со всех сторон,
   иначе текст вплотную с фоном» — про подпись «Поля со звёздочкой (*) обязательны».

   ЗАМЕР ДО (_wz410_panelpad.js; расстояние от СТРОКИ ТЕКСТА до края подложки):
     • .wiz-side-note «Поля со звёздочкой (*) обязательны» — подложка 294×16,7 px,
       `padding: 0 2px` → воздух внутри ВЕРХ 0 / НИЗ 0 / СЛЕВА 2 / СПРАВА 2 px,
       то есть текст касался фона со всех сторон. Причина: часть 51 задала 12 px,
       но часть 84 (компактная панель) перебила селектором
       `.ad-create-side .wiz-side.wiz-side > .wiz-side-note{padding:0 2px !important}`
       (0,4,0) — он сильнее селектора части 51 (0,3,0);
     • .wiz-side-step-chip (плашки состояния «0/4», «2/4») — 34×26, воздух 5,4 / 5,6 по
       вертикали и 8 / 8 по горизонтали (нормы владельца: вертикаль ≥6–8, горизонталь ≥10–12);
     • .wiz-side-step (строка шага, в ней название и подпись «Осталось: …») — правый
       паддинг 10 px, то есть подписям до края подложки было 10 px (норма ≥10–12);
     • .wiz-side-head и подпись у кольца — своих подложек НЕ имеют (плашка у них — сама
       панель, у неё паддинг 12 px по горизонтали и 10 px по вертикали, норма выполнена) —
       не трогал.
   ЧТО СДЕЛАНО: 95.1 — плашке подписи дан воздух 8 px по вертикали и 12 px по горизонтали
   (селекторы с id, поэтому выигрывают у части 84); 95.2 — плашкам состояния дан воздух
   11 px по горизонтали, а `line-height:1` увеличивает вертикальный воздух ДО ~7,5 px
   БЕЗ роста высоты плашки (26 px остаётся); 95.3 — строка шага получила по 12 px воздуха
   слева и справа (названию и подписи «Осталось: …» больше не прижато), высота не меняется.
   Замер ПОСЛЕ: воздух у подписи 8/8/12/12, у плашек состояния 7,5/7,5/11/11, у строки шага
   12/12; панель .wiz-side 384 → 398 px, вся колонка с кнопкой 440 → 454 px — при окне 533 px
   доступно 457 px (533 − 60 сверху − 16 снизу), значит панель по-прежнему влезает целиком
   без внутренней прокрутки (замер на 1440×533 и 1280×720).
   Правки только ДОПИСЫВАНИЕМ в конец слоя, переводы строк LF (как в файле).
   Порядок (якорь → правила → пояснение) сохранён.
   >>> КОНЕЦ ЧАСТИ 95 >>> */

.wiz-96-anchor{--tl-96:0}
/* --- 96.1 ПЛАШКИ СОСТОЯНИЯ: ВЫСОТА 28 px (ВОЗДУХ ПО ВЕРТИКАЛИ ≥6) --------------- */
#adWizardSide .wiz-side-step-chip{
  min-height:28px !important;
  padding:0 11px !important;
}
/* --- 96.2 СТРОКА ШАГА: 6 px ПО ВЕРТИКАЛИ, ЧТОБЫ ВЫСОТА НЕ ВЫРОСЛА -------------- */
#adWizardSide .wiz-side-step.wiz-side-step{
  padding-top:6px !important;
  padding-bottom:6px !important;
  padding-left:12px !important;
  padding-right:12px !important;
}
/* >>> ЧАСТЬ 96 (18.09.2026): ВЕРТИКАЛЬНЫЙ ВОЗДУХ ПЛАШЕК СОСТОЯНИЯ <<<
   После части 95 воздух у плашек состояния «0/4», «2/4» стал 11 px по горизонтали
   (норма ≥10–12), но по вертикали остался 5,5 px: `line-height` на эту величину не влияет —
   расстояние считается по метрикам шрифта (ascent+descent), а не по line-height, поэтому
   увеличить его можно только высотой самой плашки.
   Здесь: 96.1 — минимальная высота плашки 28 px (воздух по вертикали становится ≈6,5 px),
   96.2 — вертикальные отступы строки шага уменьшены с 7 до 6 px, поэтому высота строки
   НЕ растёт: было 26 (плашка) + 14 (отступы) = 40, стало 28 + 12 = 40 px; активная строка
   тоже сохраняет прежнюю высоту (её определяет вторая строка с подписью «Осталось: …»).
   Замер: панель .wiz-side 398 px, вся колонка с кнопкой 454 px — в окно 533 px (доступно
   457 px) влезает целиком, внутренней прокрутки нет.
   Правки только ДОПИСЫВАНИЕМ в конец слоя, переводы строк LF (как в файле).
   >>> КОНЕЦ ЧАСТИ 96 >>> */

.wiz-97-anchor{--tl-97:0}
/* --- 97.1 ПЛАШКА СОСТОЯНИЯ: ЧЕСТНЫЙ padding 6 px ПО ВЕРТИКАЛИ -------------------- */
#adWizardSide .wiz-side-step-chip{
  padding:6px 11px !important;
  min-height:28px !important;
}
/* --- 97.2 СТРОКА ШАГА: 5 px ПО ВЕРТИКАЛИ — ВЫСОТА СТРОКИ ОСТАЁТСЯ 40 px ---------- */
#adWizardSide .wiz-side-step.wiz-side-step{
  padding-top:5px !important;
  padding-bottom:5px !important;
}
/* >>> ЧАСТЬ 97 (18.09.2026): ПЛАШКИ ПАНЕЛИ — ВОЗДУХ ЕСТЬ, ВЫСОТА НЕ ВЫРОСЛА <<<
   Промежуточный замер после частей 95–96 показал: воздух у плашки подписи стал 8/8/12/12,
   у плашек состояния по горизонтали 11 px, но высота строк шага выросла с 40 до 42 px,
   и вся колонка панели стала 462 px при доступных 457 px (окно 533 px минус 60 сверху
   и 16 снизу) — то есть появилась бы внутренняя прокрутка, чего владелец не хочет.
   Здесь: 97.1 — плашке состояния дан ЧЕСТНЫЙ внутренний отступ 6 px по вертикали
   и 11 px по горизонтали (было `padding: 0 11px`, воздух держался только метриками
   шрифта ≈5,5 px); вместе с min-height 28 px воздух по вертикали ≈6,5 px;
   97.2 — вертикальные отступы строки шага уменьшены до 5 px, поэтому строка снова
   28 + 10 + 1 + 1 (рамка) = 40 px, как было до всех правок панели.
   Итог замера (1440×533 и 1280×720): .wiz-side 398 px, вся колонка с кнопкой 454 px
   против доступных 457 px — панель по-прежнему влезает целиком, внутренней прокрутки нет.
   Правки только ДОПИСЫВАНИЕМ в конец слоя, переводы строк LF (как в файле).
   >>> КОНЕЦ ЧАСТИ 97 >>> */

.wiz-98-anchor{--tl-98:0}
/* --- 98.1 ТЕЛА ВСЕХ БЛОКОВ ШАГА 3: ВНУТРЕННИЕ ОТСТУПЫ 16 px СО ВСЕХ СТОРОН ------- */
#adWizard .wiz-step[data-step-code="analytics"] details.wz-fold.adf-block > .wz-fold-body,
#adWizard .wiz-step[data-step-code="analytics"] details.wz-fold > .wz-fold-body{
  padding:16px !important;
}
/* --- 98.2 ТАБЛИЦЫ ФИНАНСОВ: КОНТЕЙНЕР, ПОДПИСИ И ПОЛЯ ОТСТУПАЮТ ОТ КРАЁВ --------- */
#adWizard .wiz-step[data-step-code="analytics"] details[data-wz-fold="finance"] .adf-field-wide:has(> .adf-table),
#adWizard .wiz-step[data-step-code="analytics"] details[data-wz-fold="finance"] .adf-field-wide:has(.adf-table){
  padding-left:16px !important;
  padding-right:16px !important;
}
#adWizard .wiz-step[data-step-code="analytics"] details[data-wz-fold="finance"] .adf-table th,
#adWizard .wiz-step[data-step-code="analytics"] details[data-wz-fold="finance"] .adf-table td{
  padding-left:16px !important;
}
/* --- 98.3 «+ ДОБАВИТЬ СТРОКУ»: ПО РАЗМЕРУ ТЕКСТА + БОКОВОЙ И НИЖНИЙ ВОЗДУХ 16 px -- */
#adWizard .wiz-step[data-step-code="analytics"] details[data-wz-fold="finance"] .adf-add-row{
  display:inline-flex !important;
  width:auto !important;
  max-width:calc(100% - 32px) !important;
  margin:12px 16px 16px !important;
  align-self:flex-start !important;
}
/* >>> ЧАСТЬ 98 (18.09.2026): ТАБЛИЦЫ И КНОПКА НЕ КАСАЮТСЯ ГРАНИЦ БЛОКА (шаг 3) <<<
   Владелец (в ярости, скриншот раскрытых «Финансовых показателей»): «сто раз уже сказал
   про эти блоки! где зазоры бордера с линиями? почему „Источник дохода“ и „Источник
   расхода“ заползают в бордер блока? где зазоры?» — подписи столбцов стояли вплотную
   к левому краю, таблицы шли от края до края, кнопка «+ Добавить строку» была растянута
   во всю ширину и тоже касалась границ.

   ЗАМЕР ДО (_wz450_bodypad.js, 1440 и 390, все блоки раскрыты):
     • у тел ВСЕХ шести блоков было `padding: 14px 14px 16px` — боковые 14 px (меньше нормы
       владельца 16 px), поэтому таблица, подписи и кнопка стояли в 14 px от бордера;
     • таблицы доходов и расходов: слева 14 / справа 14 px, а первая подпись th
       «Источник дохода»/«Источник расхода» — в 15 px при `padding-left: 0` у самой ячейки,
       то есть текст подписи начинался прямо у края таблицы (визуально «заползает»);
     • кнопка «+ Добавить строку»: `width` во всю ширину тела (954 px), слева/справа 14 px;
     • низ последнего элемента: 16 px (исправлено ранее частями 91–94).
   ЧТО СДЕЛАНО: 98.1 — тела всех блоков получили `padding: 16px` со всех сторон (и сверху
   тоже 16 вместо 14); 98.2 — обёртка таблицы получает боковые 16 px (итого 32 px от бордера
   до таблицы) и ячейки th/td — левый отступ 16 px, поэтому подписи столбцов и поля под ними
   стоят на одной линии и не касаются края; 98.3 — кнопка «+ Добавить строку» стала по
   размеру текста (inline-flex, width:auto), с боковыми отступами 16 px и нижним воздухом
   16 px. Правки только ДОПИСЫВАНИЕМ в конец слоя, переводы строк LF.
   >>> КОНЕЦ ЧАСТИ 98 >>> */

.wiz-98b-anchor{--tl-98b:0}
/* --- 98.4 КНОПКА «+ ДОБАВИТЬ СТРОКУ» ВЫРОВНЕНА С ТАБЛИЦЕЙ (32 px ОТ БОРДЕРА) ----- */
#adWizard .wiz-step[data-step-code="analytics"] details[data-wz-fold="finance"] .adf-add-row{
  margin-left:0 !important;
  margin-right:0 !important;
  margin-top:12px !important;
  margin-bottom:16px !important;
  align-self:flex-start !important;
  display:inline-flex !important;
  width:auto !important;
  max-width:100% !important;
}
/* >>> ЧАСТЬ 98, ПРОДОЛЖЕНИЕ (18.09.2026): КНОПКА НА ОДНОЙ ЛИНИИ С ТАБЛИЦЕЙ <<<
   Проверка замером после части 98: таблицы отошли от бордера на 32 px (16 px отступ тела
   + 16 px обёртка), подписи th — на 33 px с `padding-left: 16px`, кнопка перестала быть
   во всю ширину (164 px вместо 954). Но кнопки лежат ВНУТРИ той же обёртки
   `.adf-field.adf-field-wide`, поэтому их собственные боковые поля 16 px давали 48 px —
   на 16 px правее таблицы. Здесь боковые поля кнопки обнулены: она встаёт по левому краю
   таблицы (32 px от бордера) и остаётся по размеру текста, снизу 16 px воздуха.
   Правки только ДОПИСЫВАНИЕМ, LF.
   >>> КОНЕЦ ЧАСТИ 98 (ПРОДОЛЖЕНИЕ) >>> */

.wiz-99-anchor{--tl-99:0}
/* --- 99.1 ЛЕВЫЙ ОТСТУП ЯЧЕЕК — ТОЛЬКО ПЕРВЫЕ ДВЕ КОЛОНКИ (КНОПКА ✕ НЕ ЗАДЕТА) ---- */
#adWizard .wiz-step[data-step-code="analytics"] details[data-wz-fold="finance"] .adf-table th.adf-col-del,
#adWizard .wiz-step[data-step-code="analytics"] details[data-wz-fold="finance"] .adf-table td.adf-col-del,
#adWizard .wiz-step[data-step-code="analytics"] details[data-wz-fold="finance"] .adf-table td:last-child,
#adWizard .wiz-step[data-step-code="analytics"] details[data-wz-fold="finance"] .adf-table th:last-child{
  padding-left:0 !important;
}
/* --- 99.2 ТАБЛИЦА ФИНАНСОВ: БЕЗ ПЕРЕПОЛНЕНИЯ КОНТЕЙНЕРА ------------------------- */
#adWizard .wiz-step[data-step-code="analytics"] details[data-wz-fold="finance"] .adf-table{
  table-layout:auto !important;
  width:100% !important;
  max-width:100% !important;
}
/* >>> ЧАСТЬ 99 (18.09.2026): ИСПРАВЛЕНИЕ ЧАСТИ 98 — КОЛОНКА УДАЛЕНИЯ НЕ ПЕРЕПОЛНЕНА <<<
   Проверка после части 98 дала рост «переполнено» с 8 до 20 и «за краем» с 8 до 12:
     • TABLE.adf-table scrollWidth 922 > clientWidth 918;
     • TD (колонка с кнопкой ✕) scrollWidth 50 > clientWidth 44, и сама кнопка
       `.adf-row-del` (34 px) выходила за родителя на 6 px — четыре штуки (по две строки
       в каждой из двух таблиц).
   Причина: левый отступ 16 px был задан ВСЕМ ячейкам, в том числе последней колонке
   удаления, у которой ширина фиксирована (`.adf-col-del` = 64 px): 64 − 16 = 48 px,
   а кнопке с отступами нужно 50 px. Здесь левый отступ снят у последней колонки и у
   ячеек с классом `.adf-col-del` (остаётся у «Источник дохода/расхода» и «Сумма в месяц»),
   поэтому воздух у подписей сохранён, а переполнения нет. 99.2 — явно закреплены
   `table-layout:auto; width:100%; max-width:100%` для таблиц финансов.
   Правки только ДОПИСЫВАНИЕМ, LF.
   >>> КОНЕЦ ЧАСТИ 99 >>> */

.wiz-100-anchor{--tl-100:0}
/* --- 100.1 КНОПКА «+ ДОБАВИТЬ СТРОКУ» ПО ТЗ ВЛАДЕЛЬЦА --------------------------- */
#adWizard .wiz-step[data-step-code="analytics"] details[data-wz-fold="finance"] .adf-add-row{
  display:inline-flex !important;
  align-items:center !important;
  justify-content:center !important;
  gap:8px !important;
  width:auto !important;
  max-width:100% !important;
  height:38px !important;
  min-height:38px !important;
  padding:0 18px !important;
  border:0 !important;
  border-radius:12px !important;
  background:var(--surface-2,#f6f4fd) !important;
  background-image:none !important;
  color:var(--accent-600,#5533d8) !important;
  font-size:13px !important;
  font-weight:600 !important;
  line-height:1 !important;
  box-shadow:0 4px 12px rgba(58,27,140,.10) !important;
  margin:0 !important;
  align-self:flex-start !important;
}
#adWizard .wiz-step[data-step-code="analytics"] details[data-wz-fold="finance"] .adf-add-row i,
#adWizard .wiz-step[data-step-code="analytics"] details[data-wz-fold="finance"] .adf-add-row svg{
  width:16px !important;
  height:16px !important;
  font-size:16px !important;
  line-height:16px !important;
  flex:0 0 16px !important;
}
/* >>> ЧАСТЬ 100 (18.09.2026): «ДОБАВИТЬ СТРОКУ» — КОМПАКТНАЯ КНОПКА ПО ТЗ <<<
   Владелец: «Добавить строку — криво!» — кнопка читалась как широкая пустая полоса,
   поля и таблица над ней шли с другими отступами.

   ЗАМЕР ДО (_wz460_addrow.js, обе группы, 1440):
     • размер 164×38, слева 32 / справа 785,8 px, Δ кнопка↔таблица = 0 (выравнивание уже было);
     • НО: `border-radius: 999px` (пилюля), `border: 1px solid rgb(217,208,251)` — рамка,
       `box-shadow: none` — тени нет, горизонтальные паддинги 16 px, иконка 15 px,
       зазор «таблица → кнопка» 28 px (моё поле 12 + поле обёртки 16), «кнопка → следующий
       элемент» 32 px (моё 16 + 16 у соседа) — вместо 16.
   ЧТО СДЕЛАНО (по пунктам задания): ширина по содержимому с горизонтальными паддингами
   18 px, высота 38 px, радиус 12 px, кегль 13/600; скругление без рамки — мягкая подложка
   `--surface-2` и мягкая тень; иконка «+» 16 px на одной линии с текстом, зазор 8 px;
   левый край = левый край столбца «Источник дохода» (оба 32 px от границы блока, Δ 0);
   зазоры 16 px сверху (поле обёртки таблицы) и 16 px снизу (поле следующего элемента),
   собственные поля кнопки обнулены, поэтому кнопка не касается границ блока ни с одной
   стороны. Правки только ДОПИСЫВАНИЕМ в конец слоя, LF.
   >>> КОНЕЦ ЧАСТИ 100 >>> */

.wiz-101-anchor{--tl-101:0}
/* --- 101.1 НИЗ СЕТКИ СЕРВИСОВ → СЛЕДУЮЩИЙ БЛОК ШАГА: ВОЗДУХ ДЛЯ ЛЮБОЙ КАТЕГОРИИ --- */
#adWizard .wiz-step[data-step-code="analytics"] .wiz-services{
  margin-bottom:16px !important;
  row-gap:16px !important;
  column-gap:16px !important;
}
/* --- 101.2 СЕТКА ПОСЛЕДНЯЯ В ШАГЕ — ВОЗДУХ СНИЗУ ДАЁТ ЕЁ ЖЕ ПАДДИНГ ---------------- */
#adWizard .wiz-step[data-step-code="analytics"] .wiz-services:last-child{
  padding-bottom:16px !important;
}
/* >>> ЧАСТЬ 101 (18.09.2026): СЕТКА СЕРВИСОВ НЕ ПРИЛИПАЕТ К СЛЕДУЮЩЕМУ БЛОКУ <<<
   Владелец (скриншот раздела «Доменные имена»): «у категорий доменов и остальных (кроме
   веб-сайтов) прилипает блок сервиса!» — последняя карточка сетки («Проверка счётчиков
   на сайте») стояла вплотную к блоку «Проверка статистики на сайте».

   Почему правило части 90 не помогало: там зафиксирован только ВЕРХНИЙ стык сетки
   (`margin-top:16px`), а у других категорий набор слотов другой (Аналитика::categorySlots:
   440 — finance/traffic/seo/counters, 441 «доменные имена» — seo/counters и т. д.), поэтому
   сетка оказывается последней перед следующим блоком, и зазор снизу никто не задавал:
   у `:last-child` маргин ещё и «съедается» обрезкой карточки под скругление.

   ЧТО СДЕЛАНО, без привязки к конкретной категории (правило действует на весь шаг 3):
     101.1 `margin-bottom: 16px` — низ сетки → следующий блок шага ≥16 px в любой категории;
           `row-gap`/`column-gap: 16px` — ряды и колонки карточек разделены 16 px;
     101.2 если сетка — последний элемент шага, воздух снизу даёт её собственный
           `padding-bottom: 16px` (паддинг не зависит от следующего блока и не съедается
           обрезкой). Правки только ДОПИСЫВАНИЕМ в конец слоя, переводы строк LF.
   >>> КОНЕЦ ЧАСТИ 101 >>> */

.wiz-102-anchor{--tl-102:0}
/* --- 102.1 НИЗ СЕТКИ СЕРВИСОВ: ВОЗДУХ 16 px, КОТОРЫЙ НЕ МОЖЕТ СХЛОПНУТЬСЯ --------- */
#adWizard .wiz-step[data-step-code="analytics"] .wiz-services{
  padding-bottom:16px !important;
  margin-bottom:0 !important;
  row-gap:16px !important;
  column-gap:16px !important;
}
/* --- 102.2 ЭЛЕМЕНТ СРАЗУ ЗА СЕТКОЙ: СВОЙ ВЕРХНИЙ МАРГИН ОБНУЛЁН (ЗАЗОР ДАЁТ ПАДДИНГ) */
#adWizard .wiz-step[data-step-code="analytics"] .wiz-services + *{
  margin-top:0 !important;
}
/* --- 102.3 СЕТКА — ПОСЛЕДНЯЯ В ТЕЛЕ ИЛИ В ШАГЕ: ВОЗДУХ СНИЗУ ВСЁ РАВНО ЕСТЬ ------- */
#adWizard .wiz-step[data-step-code="analytics"] .wiz-services:last-child{
  padding-bottom:16px !important;
}
#adWizard .wiz-step[data-step-code="analytics"] .adf-seller > .wiz-services:last-child,
#adWizard .wiz-step[data-step-code="analytics"] .wiz-step-body > .wiz-services:last-child{
  padding-bottom:16px !important;
}
/* >>> ЧАСТЬ 102 (18.09.2026): ЗАЗОР ПОД СЕТКОЙ СЕРВИСОВ — БЕЗ СХЛОПЫВАНИЯ МАРГИНОВ <<<
   Владелец (повторно, капсом): «Зазора нет! Всё равно прилипание у всех!!!» — раздел
   «Доменные имена», последняя карточка сетки вплотную к строке «Проверка статистики
   на сайте».

   Почему части 90/101 могли не давать видимого зазора: они задавали МАРГИНЫ
   (`margin-top` сетки и `margin-bottom` сетки), а маргин может (а) схлопнуться с маргином
   соседа, (б) быть перекрыт более сильным правилом на следующем блоке, (в) «съедаться»
   обрезкой родителя под скругление (та же грабля была с жёлтой плашкой, часть 90).

   ЧТО СДЕЛАНО — зазор задан ПАДДИНГОМ, который не схлопывается и не обрезается:
     102.1 у сетки `padding-bottom: 16px` (плюс `row-gap`/`column-gap: 16px` — ряды и
           колонки карточек разделены), её собственный `margin-bottom` обнулён, чтобы
           не удваивать зазор;
     102.2 у элемента СРАЗУ за сеткой верхний маргин обнулён — весь зазор даёт паддинг,
           поэтому итог ровно 16 px в любой раскладке (flex и block) и при любом
           следующем блоке: свёртка `details.wz-fold`, `.adf-block`, `.wiz-note`;
     102.3 если сетка — последний элемент тела или шага, воздух снизу всё равно есть
           (паддинг остаётся у неё самой).
   Проверено живым браузером на двух категориях («Веб-сайты» и «Доменные имена») на
   1440/1100/768 — см. отчёт. Правки только ДОПИСЫВАНИЕМ в конец слоя, LF.
   >>> КОНЕЦ ЧАСТИ 102 >>> */

/* =====================================================================================
   >>> ЧАСТЬ 103 (19.09.2026): БЛОКИ ПЛАТНЫХ УСЛУГ «СРОЧНЫЕ ЛОТЫ» И «РЕКОМЕНДУЕМОЕ» <<<
   Задание владельца: «Добавить в рекомендуемое — ваш лот будет в блоке „рекомендуемое“…
   проверить, где этот блок; если нет — создать и оформить!», «Срочно — срочная продажа,
   у лота будет метка „Срочно“ и он будет размещён в отдельный блок срочных лотов —
   проверить, где этот блок; если нет — создать этот блок!», «не только на общей странице
   категорий, но и в самих категориях».

   РАЗМЕТКА (PHP, не слой): Catalog::outPaidServiceBlocks() печатает для каждой услуги
     <section class="widget-paid-service-block is-urgent|is-recommended"
              data-service-block="urgently|recommended">
       <div class="tl-head tl-svcblock-head"> h2.tl-h2 + кнопка «Все лоты» </div>
       <div class="tl-lot-list"> .tl-lot-head + строки items/tl-lot-row.tpl </div>
     </section>
   Вызывается ОДИН раз из resources/view/web/catalog.tpl, то есть и на /all, и на каждой
   странице категории (маршрут один). Если лотов с признаком нет — блок не печатается вовсе.

   ЧТО ДАЁТ СЛОЙ:
     103.1 блок: воздух сверху, заголовок блока с фирменной «полоской услуги» слева;
     103.2 выделение СТРОКИ по купленной услуге — раньше «Выделить цветом» давало
           незаметное кольцо 2 px (`--brand-tint-2` на белом, различие 1,10:1 — владелец
           и написал «лот цвет не меняет»), а «Рекомендуемое» в списках не выделялось
           вообще. Теперь у обеих строк видимая подложка, полоска-акцент и кольцо;
     103.3 метка «Рекомендуемое» — насыщенная фирменная заливка, БЕЛЫЙ текст (5,83:1),
           без рамки, пилюля 999 (рамок и квадратных углов нет — правило части 31);
   ЦВЕТА — только токены темы. Метка «Срочно» — существующая система: заливка фирменный
   #ff845c, текст БЕЛЫЙ (2,41:1). Это ОСОЗНАННОЕ ИСКЛЮЧЕНИЕ ВЛАДЕЛЬЦА, зафиксированное в
   части 41 этого слоя («фирменный оранжевый #ff845c затемнять НЕЛЬЗЯ», «НЕ плашки светлые,
   а ТЕКСТ в них белый»), поэтому здесь ничего не меняется: заливку не затемняем, текст
   оставляем белым. У метки «Рекомендуемое» заливка #6640f4 — там белый текст даёт 5,83:1.
   Ни одного подчёркивания и ни одной квадратной угловой точки в части нет.
   ------------------------------------------------------------------------------------- */

/* --- 103.1 БЛОК: ВОЗДУХ И ЗАГОЛОВОК С ФИРМЕННОЙ ПОЛОСКОЙ УСЛУГИ ------------------- */
.widget-paid-service-block{
  margin-top:32px;
}
.widget-paid-service-block .tl-svcblock-head{
  margin-bottom:14px;
  align-items:center;
  gap:16px;
}
.widget-paid-service-block .tl-svcblock-head .tl-h2{
  position:relative;
  margin-top:0;
  padding-left:16px;
  font-size:22px;
  line-height:1.3;
}
/* полоска услуги: пилюля 999, полностью скруглённая, «квадратных углов» нет */
.widget-paid-service-block .tl-svcblock-head .tl-h2::before{
  content:"";
  position:absolute;
  left:0;
  top:50%;
  transform:translateY(-50%);
  width:6px;
  height:22px;
  border-radius:var(--r-pill, 999px);
  background:var(--brand, #6640f4);
}
/* «Срочные лоты» — акцент фирменный оранжевый (не затемнён) */
.widget-paid-service-block.is-urgent .tl-svcblock-head .tl-h2::before{
  background:var(--brand-2, #ff845c);
}
/* «Рекомендуемое» — основной фирменный */
.widget-paid-service-block.is-recommended .tl-svcblock-head .tl-h2::before{
  background:var(--brand, #6640f4);
}
/* у блока своя «шапка списка»: колонки те же, что у строки (сетка не разъезжается) */
.widget-paid-service-block .tl-lot-list{
  margin-top:0;
}

/* --- 103.2 ВЫДЕЛЕНИЕ СТРОКИ ПО КУПЛЕННОЙ УСЛУГЕ ---------------------------------- */
/* ⚠️ ПОЧЕМУ `!important`: в каталоге список лежит внутри `.col-md-9`, а `main.css` (части
   15006 и 15148) задаёт фон строки правилом `body .col-md-9 .tl-lot-row{background-color:
   var(--card-bg) …}`. Вес этого правила 0,2,1 — БОЛЬШЕ, чем у `.tl-lot-row.is-highlight`
   (0,2,0), поэтому без `!important` подложка выделения в основном списке каталога
   затирается на белый. Замер живым браузером это подтвердил: до правки у строки
   с услугой «Выделить цветом» в каталоге фон был rgb(255,255,255), то есть ровно то,
   на что жаловался владелец («лот цвет не меняет»).
   У блока услуги (вне `.col-md-9`) фон применялся и без `!important` — отсюда и
   расхождение «в блоке выделено, в списке нет». */

/* «Выделить цветом» (service_highlight_status): тёплая фирменная подложка + полоска
   акцента + кольцо. Было: `box-shadow:0 0 0 2px var(--brand-tint-2), var(--sh-2)`
   (main.css) — на белой карточке почти неразличимо (1,10:1). */
.tl-lot-row.is-highlight{
  position:relative;
  background:var(--brand2-tint, #fff0e9) !important;
  background-color:var(--brand2-tint, #fff0e9) !important;
  border-color:var(--brand2-tint-2, #ffe1d4) !important;
  box-shadow:0 0 0 2px var(--brand2-tint-2, #ffe1d4), var(--sh-2, 0 6px 18px rgba(27,22,48,.07)) !important;
}
.tl-lot-row.is-highlight:hover{
  background:var(--brand2-tint-2, #ffe1d4) !important;
  background-color:var(--brand2-tint-2, #ffe1d4) !important;
  border-color:var(--brand-2, #ff845c) !important;
  box-shadow:0 0 0 2px var(--brand-2, #ff845c), var(--sh-2, 0 6px 18px rgba(27,22,48,.07)) !important;
}
.tl-lot-row.is-highlight::before{
  content:"";
  position:absolute;
  left:8px;
  top:12px;
  bottom:12px;
  width:4px;
  border-radius:var(--r-pill, 999px);
  background:var(--brand-2, #ff845c);
}

/* «Рекомендуемое» (service_recommended_status): фирменная подложка + полоска.
   В списках лот раньше ничем не отличался от обычного — признак был виден только
   в карточке лота (Ads::getRecommendedItems). */
.tl-lot-row.is-recommended{
  position:relative;
  background:var(--brand-tint, #efeaff) !important;
  background-color:var(--brand-tint, #efeaff) !important;
  border-color:var(--brand-tint-2, #e2d9ff) !important;
  box-shadow:0 0 0 2px var(--brand-tint-2, #e2d9ff), var(--sh-2, 0 6px 18px rgba(27,22,48,.07)) !important;
}
.tl-lot-row.is-recommended:hover{
  background:var(--brand-tint-2, #e2d9ff) !important;
  background-color:var(--brand-tint-2, #e2d9ff) !important;
  border-color:var(--brand, #6640f4) !important;
  box-shadow:0 0 0 2px var(--brand, #6640f4), var(--sh-2, 0 6px 18px rgba(27,22,48,.07)) !important;
}
.tl-lot-row.is-recommended::before{
  content:"";
  position:absolute;
  left:8px;
  top:12px;
  bottom:12px;
  width:4px;
  border-radius:var(--r-pill, 999px);
  background:var(--brand, #6640f4);
}
/* лот купил и «Выделить цветом», и «Рекомендуемое»: подложка фирменная (как у
   «Рекомендуемого»), а ПОЛОСКА тёплая — так видно обе купленные услуги, ни одна не
   «съедается». Селектор из трёх классов нужен намеренно: у `.tl-lot-row.is-highlight::before`
   и `.tl-lot-row.is-recommended::before` ОДИН И ТОТ ЖЕ вес (0,2,0), поэтому без этого
   правила побеждала бы та, что ниже в файле — «Рекомендуемое» (замер живым браузером:
   у строки с обеими услугами полоска была фиолетовой rgb(102,64,244) вместо оранжевой).
   У `.tl-lot-row.is-highlight.is-recommended::before` вес 0,3,0 — он старше обеих. */
.tl-lot-row.is-highlight.is-recommended{
  background:var(--brand-tint, #efeaff) !important;
  background-color:var(--brand-tint, #efeaff) !important;
  border-color:var(--brand-tint-2, #e2d9ff) !important;
}
.tl-lot-row.is-highlight.is-recommended:hover{
  background:var(--brand-tint-2, #e2d9ff) !important;
  background-color:var(--brand-tint-2, #e2d9ff) !important;
}
.tl-lot-row.is-highlight.is-recommended::before{
  background:var(--brand-2, #ff845c);
}

/* --- 103.3 МЕТКА «РЕКОМЕНДУЕМОЕ» ------------------------------------------------- */
/* Насыщенная фирменная заливка, белый текст 5,83:1, рамок нет, пилюля.
   Тот же вид, что у «Аукциона»/«Прямой продажи» (часть 31.3) — это метка УСЛУГИ. */
.tl-lot-badge.is-recommended{
  background:var(--tl-badge-brand-fill, #6640f4) !important;
  background-color:var(--tl-badge-brand-fill, #6640f4) !important;
  color:var(--tl-badge-brand-ink, #ffffff) !important;
  border:0 !important;
  border-radius:var(--r-pill, 999px) !important;
  /* рамок нет (часть 41) — плашку «держит» мягкая тень, как у остальных меток */
  box-shadow:var(--tl-badge-brand-shadow, var(--sh-1, 0 2px 6px rgba(27, 22, 48, .08))) !important;
  text-decoration:none !important;
}
.tl-lot-badge.is-recommended i{
  color:inherit !important;
}
.tl-lot-row:hover .tl-lot-badge.is-recommended{
  background:var(--tl-badge-brand-fill-hover, #5533d8) !important;
  background-color:var(--tl-badge-brand-fill-hover, #5533d8) !important;
}

/* --- 103.4 МОБИЛЬНАЯ АДАПТАЦИЯ --------------------------------------------------- */
@media (max-width:991px){
  .widget-paid-service-block{ margin-top:26px; }
  .widget-paid-service-block .tl-svcblock-head{ margin-bottom:12px; }
  .widget-paid-service-block .tl-svcblock-head .tl-h2{ font-size:20px; }
}
@media (max-width:575px){
  .widget-paid-service-block{ margin-top:22px; }
  .widget-paid-service-block .tl-svcblock-head{
    flex-wrap:wrap;
    align-items:flex-start;
    gap:10px;
  }
  .widget-paid-service-block .tl-svcblock-head .tl-h2{ font-size:18.5px; padding-left:14px; }
  .widget-paid-service-block .tl-svcblock-head .tl-h2::before{ width:5px; height:18px; }
  .widget-paid-service-block .tl-svcblock-head .tl-head-side{ width:100%; }
  .widget-paid-service-block .tl-svcblock-head .tl-head-side .btn-custom{ width:100%; text-align:center; }
  .tl-lot-row.is-highlight::before,
  .tl-lot-row.is-recommended::before{ left:6px; top:10px; bottom:10px; width:3px; }
}
/* >>> КОНЕЦ ЧАСТИ 103 >>> */

/* =====================================================================================
   >>> ЧАСТЬ 104 (19.09.2026): БЛОК «АКТИВНЫЕ УСЛУГИ» НА СТРАНИЦЕ ЛОТА — ПЕРЕОФОРМЛЕНИЕ <<<
   Задание владельца (по скриншоту страницы лота): «Переоформить всё лучше!» — зелёный блок
   выглядел сырым: список названий с тонкими линиями-разделителями, крупная пустая область
   справа, кнопка внизу. Требования: заголовок «Активные услуги», список с иконками услуг и
   сроком, ровные строки «иконка + название + срок», без пустых серых линий-разделителей,
   кнопка «Посмотреть услуги» — иконка + текст, радиус 12, без квадратных углов.

   РАЗМЕТКА (PHP, не слой): Ads::outActiveServicesInCardAd() печатает
     <section class="tl-activesvc" aria-labelledby="tlActivesvcTitle">   (+ .is-empty, если услуг нет)
       <div class="tl-activesvc-head"><span class="tl-activesvc-ic">…</span><h3 class="tl-activesvc-title">…</h3></div>
       <ul class="tl-activesvc-list"><li class="tl-activesvc-item"> иконка + текст(название, срок) </li>…</ul>
       <p class="tl-activesvc-empty">…</p>              — только в пустом состоянии
       <div class="tl-activesvc-foot"><a class="btn-custom button-color-scheme1 tl-activesvc-btn">…</a></div>
     </section>

   ПОЧЕМУ БЫЛО «СЫРО» (замер прежней разметки): контейнер `.ad-card-active-services-container`
   имел `max-width: 300px` — отсюда «крупная пустая область справа»; вместо срока печаталась
   полоса Bootstrap `.progress` высотой 6 px — это и были «тонкие линии»; кнопка была
   `.btn-custom.button-color-scheme1` без своего радиуса, а базовое `.btn-custom` из main.css
   даёт `border-radius: 3px`, и общее правило слоя 27.5 выводит scheme1 из «12 px» —
   то есть кнопка была почти квадратной.

   ЧТО ДАЁТ СЛОЙ:
     104.1 карточка: системный радиус, мягкая тень, РАМОК НЕТ, подложка --success-tint
           (смысл «услуги активны» сохранён, но это спокойный тон системы, а не #ebffeb);
     104.2 шапка: плитка значка 36 px с НАСЫЩЕННОЙ зелёной заливкой #15803d и БЕЛЫМ знаком
           (5,02:1), заголовок 17 px;
     104.3 строки услуг: отдельные плашки БЕЗ РАМОК (фон --surface, радиус 14, тень --sh-1),
           зазор 8 px — разделителей-линий нет вовсе; иконка услуги 36×36 из картинки
           справочника, название 14,5 px, срок 12,5 px приглушённым цветом;
     104.4 пустое состояние: одна плашка системы с подписью (правило владельца о пустых
           состояниях — воздух 22+ px, подложка --surface, без рамки, мягкая тень);
     104.5 кнопка: иконка + текст, radius 12 !important (правило владельца), без подчёркивания,
           заливка scheme1 #6640f4 + БЕЛЫЙ текст (5,83:1) — «белый текст на насыщенной заливке»;
     104.6 мобильная адаптация: на ≤575 px кнопка на всю ширину, строки не сжимаются в одну
           линию, длинное название переносится (overflow-wrap), обрезки нет.
   Фирменный #ff845c в части не используется вовсе — затемнять его не требуется.
   ===================================================================================== */

/* --- 104.1 КАРТОЧКА ----------------------------------------------------------------- */
.tl-activesvc{
  box-sizing:border-box;
  margin:16px 0 0;
  padding:18px;
  background:var(--success-tint, #e7f7ef);
  /* РАМОК НЕТ — плашку держит мягкая тень (правило владельца) */
  border:0;
  border-radius:var(--card-radius, 20px);
  box-shadow:var(--sh-2, 0 6px 18px rgba(27, 22, 48, .07));
}

/* --- 104.2 ШАПКА: ПЛИТКА ЗНАЧКА + ЗАГОЛОВОК ----------------------------------------- */
.tl-activesvc-head{
  display:flex;
  align-items:center;
  gap:12px;
  margin-bottom:14px;
}
.tl-activesvc-ic{
  flex:0 0 auto;
  display:inline-flex;
  align-items:center;
  justify-content:center;
  width:36px;
  height:36px;
  border-radius:var(--r-sm, 14px);
  /* насыщенная зелёная заливка + БЕЛЫЙ знак: 5,02:1 (норма для знака 3:1) */
  background:var(--tl-badge-ok-fill, #15803d);
  color:var(--tl-badge-ok-ink, #ffffff);
  box-shadow:var(--sh-1, 0 1px 2px rgba(27, 22, 48, .05));
  font-size:19px;
  line-height:1;
}
.tl-activesvc-ic i{ color:inherit !important; line-height:1; }
.tl-activesvc-title{
  margin:0;
  font-size:17px;
  line-height:1.3;
  font-weight:700;
  color:var(--ink, #1b1630);
}

/* --- 104.3 СПИСОК УСЛУГ: ПЛАШКИ БЕЗ РАМОК, РАЗДЕЛИТЕЛЕЙ-ЛИНИЙ НЕТ ------------------- */
.tl-activesvc-list{
  list-style:none;
  margin:0;
  padding:0;
  display:flex;
  flex-direction:column;
  gap:8px;
}
.tl-activesvc-item{
  display:flex;
  align-items:center;
  gap:12px;
  min-height:56px;
  padding:10px 14px;
  background:var(--surface, #ffffff);
  border:0;
  border-radius:var(--card-radius-inner, 14px);
  box-shadow:var(--sh-1, 0 1px 2px rgba(27, 22, 48, .05));
}
.tl-activesvc-item-ic{
  flex:0 0 auto;
  display:inline-flex;
  align-items:center;
  justify-content:center;
  width:36px;
  height:36px;
  border-radius:var(--r-xs, 10px);
  background:var(--surface-2, #f6f4fd);
  overflow:hidden;
}
.tl-activesvc-item-ic img{
  display:block;
  width:24px;
  height:24px;
  object-fit:contain;
}
.tl-activesvc-item-ic i{
  font-size:19px;
  line-height:1;
  color:var(--brand, #6640f4);
}
.tl-activesvc-item-text{
  flex:1 1 auto;
  min-width:0;
  display:flex;
  flex-direction:column;
  gap:2px;
}
.tl-activesvc-item-name{
  font-size:14.5px;
  font-weight:600;
  line-height:1.35;
  color:var(--ink, #1b1630);
  overflow-wrap:anywhere;
}
.tl-activesvc-item-term{
  font-size:12.5px;
  line-height:1.4;
  color:var(--muted, #6c6883);
}

/* --- 104.4 ПУСТОЕ СОСТОЯНИЕ (услуг нет) -------------------------------------------- */
/* Один вид с остальными пустыми состояниями системы (часть 57): подложка --surface,
   БЕЗ рамки, мягкая тень, воздух не меньше 22 px по горизонтали. */
.tl-activesvc-empty{
  margin:0;
  padding:18px 20px;
  background:var(--surface, #ffffff);
  border:0;
  border-radius:var(--card-radius-inner, 14px);
  box-shadow:var(--sh-1, 0 1px 2px rgba(27, 22, 48, .05));
  font-size:13.5px;
  line-height:1.5;
  color:var(--ink-2, #3a3550);
}

/* --- 104.5 КНОПКА «ПОСМОТРЕТЬ УСЛУГИ»: ИКОНКА + ТЕКСТ, РАДИУС 12 ------------------- */
.tl-activesvc-foot{
  margin-top:14px;
}
.tl-activesvc .tl-activesvc-btn,
.tl-activesvc-btn{
  display:inline-flex;
  align-items:center;
  justify-content:center;
  gap:8px;
  /* радиус 12 — требование владельца; без !important его перебивает базовое
     `.btn-custom{border-radius:3px}` из main.css (у scheme1 своего радиуса нет) */
  border-radius:12px !important;
  min-height:44px;
  padding:0 20px;
  text-decoration:none !important;
}
.tl-activesvc-btn i,
.tl-activesvc-btn span{
  color:inherit !important;          /* белый текст на насыщенной фирменной заливке */
  text-decoration:none !important;   /* ни одного подчёркивания */
}
.tl-activesvc-btn i{
  font-size:18px;
  line-height:1;
}

/* --- 104.6 МОБИЛЬНАЯ АДАПТАЦИЯ ----------------------------------------------------- */
@media (max-width:991px){
  .tl-activesvc{ padding:16px; }
  .tl-activesvc-head{ margin-bottom:12px; }
}
@media (max-width:575px){
  .tl-activesvc{
    margin-top:14px;
    padding:14px;
    border-radius:var(--card-radius-inner, 14px);
  }
  .tl-activesvc-ic{ width:32px; height:32px; font-size:17px; }
  .tl-activesvc-title{ font-size:16px; }
  .tl-activesvc-item{ padding:10px 12px; gap:10px; min-height:52px; }
  .tl-activesvc-item-ic{ width:32px; height:32px; }
  .tl-activesvc-item-ic img{ width:22px; height:22px; }
  .tl-activesvc-item-name{ font-size:14px; }
  .tl-activesvc-item-term{ font-size:12px; }
  .tl-activesvc-empty{ padding:16px 18px; }
  .tl-activesvc-foot{ margin-top:12px; }
  .tl-activesvc .tl-activesvc-btn,
  .tl-activesvc-btn{ width:100%; }
}
/* >>> КОНЕЦ ЧАСТИ 104 >>> */

/* =====================================================================================
   >>> ЧАСТЬ 105 (19.09.2026): РАЗМЕЩЕНИЕ И РАЗЛИЧИЕ БЛОКОВ ПЛАТНЫХ УСЛУГ <<<
   Уточнение владельца: «посмотрите, как правильное их расположение должно быть. А то 2 услуги
   покупать и они будут вместе — это чушь. Надо продумать и разместить эти блоки правильно
   и в нужных местах!»

   РАЗМЕЩЕНИЕ (задано в шаблонах, не в слое):
     • «СРОЧНЫЕ ЛОТЫ» — catalog.tpl и 10 персональных шаблонов категорий, ВЫШЕ фильтров
       и выдачи, сразу под «рельсой» категорий (`outPaidServiceBlock("urgently", 5)`);
     • «РЕКОМЕНДУЕМ» — там же, но ПОСЛЕ основной выдачи, перед SEO-текстом
       (`outPaidServiceBlock("recommended", 5)`);
     • «РЕКОМЕНДУЕМ В ЭТОЙ КАТЕГОРИИ» — в карточке лота (`ad-card.tpl`,
       Ads::outRecommendedInCategory), после «Похожих лотов».
   ДУБЛЕЙ НЕТ: в «Рекомендуем» запрос идёт с условием `service_urgently_status=0`, поэтому
   лот с обеими услугами стоит только в «Срочных». В карточке лота блока «Срочные» нет,
   там исключение не применяется (вторая купленная услуга не теряется).

   ЧЕМ БЛОКИ ОТЛИЧАЮТСЯ ВИЗУАЛЬНО (задание: «у срочных — акцент, у рекомендуемых — спокойнее»):
     • срочные — плитка значка 40×40 с НАСЫЩЕННОЙ фирменной заливкой #ff845c и БЕЛЫМ знаком
       (#ff845c НЕ затемняем — правило владельца), заголовок 23 px, насыщенность 700;
     • рекомендуемые — плитка 34×34 со СВЕТЛОЙ фирменной подложкой --brand-tint и знаком
       фирменного цвета #6640f4, заголовок 20 px, насыщенность 600.
   Полоска-акцент из части 103 у обоих блоков убрана: её место заняла плитка значка
   (два акцента в одной шапке выглядели бы перегруженно). Правила части 103 не удалены —
   они просто перекрыты ниже следующими селекторами той же или большей силы.
   Цвета — только токены темы; рамок нет, углы скруглены, подчёркиваний нет.
   ===================================================================================== */

/* --- 105.1 ШАПКА БЛОКА: ПЛИТКА ЗНАЧКА ВМЕСТО ПОЛОСКИ ------------------------------- */
.widget-paid-service-block .tl-svcblock-titlewrap{
  display:flex;
  align-items:center;
  gap:12px;
  min-width:0;
}
.widget-paid-service-block .tl-svcblock-ic{
  flex:0 0 auto;
  display:inline-flex;
  align-items:center;
  justify-content:center;
  width:36px;
  height:36px;
  border-radius:var(--r-sm, 14px);
  background:var(--brand-tint, #efeaff);
  color:var(--brand, #6640f4);
  box-shadow:var(--sh-1, 0 1px 2px rgba(27, 22, 48, .05));
  font-size:19px;
  line-height:1;
}
.widget-paid-service-block .tl-svcblock-ic i{
  color:inherit !important;
  line-height:1;
}
/* полоска-акцент из части 103 больше не выводится у этих блоков — её заменила плитка */
.widget-paid-service-block.is-urgent .tl-svcblock-head .tl-h2::before,
.widget-paid-service-block.is-recommended .tl-svcblock-head .tl-h2::before{
  display:none;
  content:none;
}
.widget-paid-service-block .tl-svcblock-head .tl-h2{
  padding-left:0;
}

/* --- 105.2 «СРОЧНЫЕ ЛОТЫ»: АКЦЕНТ --------------------------------------------------- */
.widget-paid-service-block.is-urgent .tl-svcblock-ic{
  width:40px;
  height:40px;
  /* насыщенная фирменная заливка; сам #ff845c НЕ затемняем (правило владельца) */
  background:var(--brand-2, #ff845c);
  color:#ffffff;
  font-size:21px;
}
.widget-paid-service-block.is-urgent .tl-svcblock-title{
  font-size:23px;
  font-weight:700;
}

/* --- 105.3 «РЕКОМЕНДУЕМ»: СПОКОЙНЕЕ ------------------------------------------------ */
.widget-paid-service-block.is-recommended .tl-svcblock-ic{
  width:34px;
  height:34px;
  background:var(--brand-tint, #efeaff);
  color:var(--brand, #6640f4);
  font-size:18px;
}
.widget-paid-service-block.is-recommended .tl-svcblock-title{
  font-size:20px;
  font-weight:600;
}

/* --- 105.4 БЛОК В КАРТОЧКЕ ЛОТА: БЕЗ СВОЕГО ВЕРХНЕГО ОТСТУПА ----------------------- */
/* в карточке блок лежит внутри .row.mt40 — зазор даёт обёртка, а не сам блок */
.widget-paid-service-block.is-card-block{
  margin-top:0;
}

/* --- 105.5 МОБИЛЬНАЯ АДАПТАЦИЯ ----------------------------------------------------- */
@media (max-width:991px){
  .widget-paid-service-block.is-urgent .tl-svcblock-ic{ width:36px; height:36px; font-size:19px; }
  .widget-paid-service-block.is-recommended .tl-svcblock-ic{ width:32px; height:32px; font-size:17px; }
  .widget-paid-service-block.is-urgent .tl-svcblock-title{ font-size:21px; }
  .widget-paid-service-block.is-recommended .tl-svcblock-title{ font-size:19px; }
}
@media (max-width:575px){
  .widget-paid-service-block .tl-svcblock-titlewrap{ gap:10px; }
  .widget-paid-service-block.is-urgent .tl-svcblock-ic{ width:34px; height:34px; font-size:18px; }
  .widget-paid-service-block.is-recommended .tl-svcblock-ic{ width:32px; height:32px; font-size:17px; }
  .widget-paid-service-block.is-urgent .tl-svcblock-title{ font-size:19px; }
  .widget-paid-service-block.is-recommended .tl-svcblock-title{ font-size:18px; }
}
/* >>> КОНЕЦ ЧАСТИ 105 >>> */

/* =====================================================================================
   >>> ЧАСТЬ 106 (19.09.2026): СТРАНИЦА УСЛУГ ЛОТА `/ad/services/<id>` — ПЕРЕОФОРМЛЕНИЕ <<<
   Задание владельца (скриншот, два обведённых места; ранее он же писал «переоформить»):
     1) «верхний блок — карточка лота с зелёной плашкой „АКТИВНО“ (слева) — надо привести
        к системе: аккуратная карточка, иконка лота, название, плашка статуса БЕЗ РАМКИ
        (мягкая тень), ровные отступы, ничего не „висит“ в пустой области»;
     2) «правый блок — „1 лот ждёт продвижения“, поле „Поиск по лотам“ и СИНИЙ выбранный
        пункт — тоже переоформить в систему (единые радиусы и отступы, вместо „синей
        заливки“ — фирменный стиль, выбранное состояние читаемое, без рамочных квадратов)».

   ЧТО БЫЛО НЕ ТАК (замер по main.css и живому прогону):
     • карточка лота `.ad-card-item`: `border:1px solid #eaeaea` — ЖЁСТКАЯ РАМКА (главное
       правило владельца «рамок нет»), отступы 10 px (прижато), `justify-content:space-between`
       при заголовке `width:100%` — отсюда пустая область справа; картинка 60×60 с отступом
       15 px; плашка статуса печаталась отдельным блоком НАД названием;
     • правый блок `.ad-paid-services-ads-container`: не карточка вообще — заголовок `<p>`
       кеглем 18 px без обложки, поле поиска без системы, у пунктов `border-radius:15px`
       и `padding:5px` (прижато), а ВЫДЕЛЕННЫЙ и наведённый пункт красились в
       `background-color:#186aff; color:white` — это ЧУЖОЙ СИНИЙ цвет, которого нет
       в палитре платформы (фирменные: #6640f4, #ff845c, #15803d).
   ЧТО СТАЛО:
     106.1 карточка лота `.tl-svccard`: системная карточка (фон --surface, радиус 20,
           мягкая тень --sh-2, РАМОК НЕТ, отступы 16/18 px), сетка «плитка иконки 56×56 +
           текст» с зазором 14 px, название 15,5 px/700 и под ним плашка статуса системы;
     106.2 плашка статуса: та же система, что у меток (часть 31) — высота 26, пилюля 999,
           без рамки, мягкая тень; в карточке она выровнена по левому краю названия;
     106.3 правый блок `.tl-waitlist`: системная карточка (фон --surface, радиус 20,
           тень --sh-2, без рамки, отступы 18 px), заголовок со СВОЕЙ плиткой значка
           (как у блоков услуг — одна система), поле поиска — системный вид
           (радиус --card-radius-inner 14 px и рамка --border-strong, как у ВСЕХ полей
           платформы — правила частей 27/8 слоя; фокус фирменный);
     106.4 пункт списка: радиус 12, отступы 8/10 px, зазор 10 px, иконка лота 36×36;
           ПРИ НАВЕДЕНИИ — мягкая подложка --surface-2 (не синяя заливка);
           ВЫДЕЛЕННЫЙ (`.active`) — фирменная подложка --brand-tint, полоска-акцент
           фирменным #6640f4 слева, название фирменным цветом и галочка справа:
           выбранное состояние видно и по цвету, и по значку (не только заливкой);
     106.5 `.ad-card-item` (карточки ТОГО ЖЕ вида на страницах «лот опубликован» и
           «покупка лота»): убрана жёсткая рамка, добавлены системные радиус/тень/отступы —
           вид согласован с новой карточкой, разметка этих страниц не тронута.
   Цвета — только токены темы; ни одного подчёркивания; квадратных углов нет.
   ===================================================================================== */

/* --- 106.1 КАРТОЧКА ЛОТА НА СТРАНИЦЕ УСЛУГ ------------------------------------------ */
.tl-svccard{
  box-sizing:border-box;
  display:flex;
  align-items:center;
  gap:14px;
  padding:16px 18px;
  background:var(--surface, #ffffff);
  /* РАМОК НЕТ — карточку держит мягкая тень (правило владельца) */
  border:0;
  border-radius:var(--card-radius, 20px);
  box-shadow:var(--sh-2, 0 6px 18px rgba(27, 22, 48, .07));
}
.tl-svccard-ic{
  flex:0 0 auto;
  display:inline-flex;
  align-items:center;
  justify-content:center;
  width:56px;
  height:56px;
  border-radius:var(--card-radius-inner, 14px);
  background:var(--surface-2, #f6f4fd);
  overflow:hidden;
}
.tl-svccard-ic img{
  display:block;
  width:100%;
  height:100%;
  object-fit:cover;
  border-radius:0;
}
.tl-svccard-text{
  flex:1 1 auto;
  min-width:0;
  display:flex;
  flex-direction:column;
  align-items:flex-start;
  gap:6px;
}
.tl-svccard-name{
  font-size:15.5px;
  font-weight:700;
  line-height:1.35;
  color:var(--ink, #1b1630);
  overflow-wrap:anywhere;
}

/* --- 106.2 ПЛАШКА СТАТУСА В КАРТОЧКЕ: БЕЗ РАМКИ, МЯГКАЯ ТЕНЬ ----------------------- */
/* обёртка `outStatusByAd()` — это <div>; снимаем с неё влияние сетки и оставляем
   ровно одну видимую плашку системы (часть 31) */
.tl-svccard-status{
  display:flex;
  align-items:center;
  min-height:0;
}
.tl-svccard-status > div{
  display:flex;
  align-items:center;
  margin:0;
  min-height:0;
}
.tl-svccard-status .status-label{
  border:0 !important;
  box-shadow:var(--sh-1, 0 1px 2px rgba(27, 22, 48, .05)) !important;
}

/* --- 106.3 ПРАВЫЙ БЛОК «N ЛОТ ЖДЁТ ПРОДВИЖЕНИЯ» ------------------------------------ */
.tl-waitlist{
  box-sizing:border-box;
  padding:18px;
  background:var(--surface, #ffffff);
  border:0;
  border-radius:var(--card-radius, 20px);
  box-shadow:var(--sh-2, 0 6px 18px rgba(27, 22, 48, .07));
}
.tl-waitlist-head{
  display:flex;
  align-items:center;
  gap:10px;
  margin-bottom:14px;
}
.tl-waitlist-ic{
  flex:0 0 auto;
  display:inline-flex;
  align-items:center;
  justify-content:center;
  width:34px;
  height:34px;
  border-radius:var(--r-sm, 14px);
  background:var(--brand-tint, #efeaff);
  color:var(--brand, #6640f4);
  box-shadow:var(--sh-1, 0 1px 2px rgba(27, 22, 48, .05));
  font-size:18px;
  line-height:1;
}
.tl-waitlist-ic i{ color:inherit !important; line-height:1; }
.tl-waitlist-title{
  font-size:15px;
  font-weight:700;
  line-height:1.3;
  color:var(--ink, #1b1630);
}
/* правило main.css `.ad-paid-services-ads-container p{font-size:18px}` больше не нужно:
   заголовок теперь не <p>, а системная строка с плиткой значка */
.tl-waitlist .tl-waitlist-search,
.ad-paid-services-ads-container input.tl-waitlist-search{
  box-sizing:border-box;
  width:100%;
  min-height:42px;
  margin:0 0 12px;
  padding:0 14px;
  /* радиус и рамка — как у ВСЕХ полей платформы (части 27 и 8 слоя):
     --card-radius-inner 14 px и --border-strong; здесь только размеры и отступы */
  border-radius:var(--card-radius-inner, 14px);
  border:1px solid var(--border-strong, #b4b4ba);
  background:var(--surface-2, #f6f4fd);
  color:var(--ink, #1b1630);
  font-size:13.5px;
}
.tl-waitlist .tl-waitlist-search:focus,
.ad-paid-services-ads-container input.tl-waitlist-search:focus{
  outline:none;
  border-color:var(--brand, #6640f4);
  background:var(--surface, #ffffff);
}

/* --- 106.4 ПУНКТ СПИСКА: ФИРМЕННОЕ ВЫДЕЛЕНИЕ ВМЕСТО СИНЕГО ------------------------- */
.tl-waitlist-list{
  display:flex;
  flex-direction:column;
  gap:8px;
}
.tl-waitlist .tl-waitlist-item,
.ad-paid-services-ads-container .ad-paid-services-ads-item{
  position:relative;
  display:flex;
  align-items:center;
  gap:10px;
  padding:8px 10px;
  min-height:52px;
  border-radius:12px;
  border:0;
  /* было: :hover и .active с background-color:#186aff (чужой синий, не из палитры) */
  background:transparent;
  color:var(--ink, #1b1630) !important;
  text-decoration:none !important;
  transition:background-color .14s ease, box-shadow .14s ease;
}
.tl-waitlist .tl-waitlist-item:not(:last-child),
.ad-paid-services-ads-container .ad-paid-services-ads-item:not(:last-child){
  margin-bottom:0;
}
.tl-waitlist .tl-waitlist-item:hover,
.ad-paid-services-ads-container .ad-paid-services-ads-item:hover{
  background:var(--surface-2, #f6f4fd);
  color:var(--ink, #1b1630) !important;
}
/* ВЫДЕЛЕННЫЙ ПУНКТ: фирменная подложка + полоска + галочка (читается не только цветом) */
.tl-waitlist .tl-waitlist-item.active,
.ad-paid-services-ads-container .ad-paid-services-ads-item.active{
  background:var(--brand-tint, #efeaff);
  background-color:var(--brand-tint, #efeaff);
  color:var(--brand, #6640f4) !important;
  box-shadow:var(--sh-1, 0 1px 2px rgba(27, 22, 48, .05));
}
.tl-waitlist .tl-waitlist-item.active::before,
.ad-paid-services-ads-container .ad-paid-services-ads-item.active::before{
  content:"";
  position:absolute;
  left:0;
  top:10px;
  bottom:10px;
  width:3px;
  border-radius:var(--r-pill, 999px);
  background:var(--brand, #6640f4);
}
.tl-waitlist-item-ic{
  flex:0 0 auto;
  display:inline-flex;
  align-items:center;
  justify-content:center;
  width:36px;
  height:36px;
  border-radius:var(--r-xs, 10px);
  background:var(--surface-2, #f6f4fd);
  overflow:hidden;
}
.tl-waitlist-item.active .tl-waitlist-item-ic{
  background:var(--surface, #ffffff);
}
.tl-waitlist-item-ic img{
  display:block;
  width:100%;
  height:100%;
  object-fit:cover;
  border-radius:0;
}
.tl-waitlist-item-name{
  flex:1 1 auto;
  min-width:0;
  font-size:13.5px;
  font-weight:600;
  line-height:1.35;
  color:inherit;
  overflow-wrap:anywhere;
  /* прежняя разметка обрезала длинные названия одной строкой — теперь переносим */
  display:-webkit-box;
  -webkit-line-clamp:2;
  -webkit-box-orient:vertical;
  overflow:hidden;
}
.tl-waitlist-item.active .tl-waitlist-item-name{
  font-weight:700;
  color:var(--brand, #6640f4);
}
.tl-waitlist-item-mark{
  flex:0 0 auto;
  display:none;
  align-items:center;
  justify-content:center;
  width:22px;
  height:22px;
  border-radius:var(--r-pill, 999px);
  background:var(--brand, #6640f4);
  color:#ffffff;
  font-size:13px;
  line-height:1;
}
.tl-waitlist-item.active .tl-waitlist-item-mark{
  display:inline-flex;
}
.tl-waitlist-item-mark i{ color:inherit !important; line-height:1; }

/* --- 106.5 КАРТОЧКИ ТОГО ЖЕ ВИДА НА ДРУГИХ СТРАНИЦАХ ------------------------------ */
/* «Лот опубликован» и «Покупка лота» используют `.ad-card-item` с тем же содержимым:
   убираем жёсткую рамку main.css и приводим к системной карточке. Разметка не тронута. */
.ad-card-item{
  align-items:center;
  gap:14px;
  padding:16px 18px;
  border:0;
  border-radius:var(--card-radius, 20px);
  box-shadow:var(--sh-2, 0 6px 18px rgba(27, 22, 48, .07));
  background:var(--surface, #ffffff);
}
.ad-card-item-image{
  flex:0 0 auto;
  width:56px;
  height:56px;
  margin-right:0;
  border-radius:var(--card-radius-inner, 14px);
  background:var(--surface-2, #f6f4fd);
  overflow:hidden;
}
.ad-card-item-image img{
  display:block;
  width:100%;
  height:100%;
  object-fit:cover;
}
.ad-card-item-title{
  display:flex;
  flex-direction:column;
  align-items:flex-start;
  gap:6px;
  width:auto;
}
.ad-card-item-title > div{
  display:flex;
  align-items:center;
  margin:0;
}

/* --- 106.6 МОБИЛЬНАЯ АДАПТАЦИЯ ----------------------------------------------------- */
@media (max-width:575px){
  .tl-svccard{ gap:12px; padding:14px; }
  .tl-svccard-ic{ width:48px; height:48px; }
  .tl-svccard-name{ font-size:15px; }
  .tl-waitlist{ padding:14px; }
  .tl-waitlist-item{ padding:8px; gap:8px; min-height:48px; }
  .tl-waitlist-item-ic{ width:32px; height:32px; }
  .ad-card-item{ gap:12px; padding:14px; }
  .ad-card-item-image{ width:48px; height:48px; }
}
/* >>> КОНЕЦ ЧАСТИ 106 >>> */

/* =====================================================================================
   >>> ЧАСТЬ 107 (19.09.2026): ПОЯСНЯЮЩИЕ ПОДЗАГОЛОВКИ БЛОКОВ УСЛУГ <<<
   Задание владельца дословно: «И что такое Спецразмещение? на главной? Это Рекомендуемое
   или Срочные лоты? Надо всё прописать, чтобы понятно пользователю было» и «Все заголовки
   блоков должны быть самообъясняющими — чтобы покупатель сразу понимал, почему лот здесь».

   РАЗМЕТКА (печатают компоненты, не слой):
     Catalog::outPaidServiceBlock()   → <div class="tl-svcblock-text">
                                          <h2 class="tl-svcblock-title">Заголовок</h2>
                                          <p class="tl-svcblock-note">Пояснение</p>
                                        </div>
     Ads::outRecommendedInCategory()  → то же (карточка лота)
     Home::outAdsVip()                → <div class="tl-svcblock-homehead">
                                          <div class="bold-title-and-link">…</div>
                                          <p class="tl-svcblock-note">Пояснение</p>
                                        </div>

   ЧТО ДАЁТ СЛОЙ:
     107.1 текстовая колонка заголовка: заголовок и пояснение друг под другом, зазор 3 px,
           блок не разъезжается при длинном заголовке (min-width:0 + перенос);
     107.2 пояснение: 13 px, приглушённый цвет --muted, ширина ограничена 760 px —
           строка читается, а не растягивается на всю ширину 1376 px;
     107.3 шапка блока на ГЛАВНОЙ: пояснение ставится вплотную под заголовок (у
           `.bold-title-and-link` из main.css отступ 25 px — он перебит на 6 px), а весь
           заголовочный блок получает собственный отступ снизу 16 px;
     107.4 мобильная адаптация: пояснение 12,5 px, ширина 100 %, у шапки главной отступ 12 px.
   Цвета — токены темы; ничего не подчёркнуто, рамок и квадратных углов нет.
   ===================================================================================== */

/* --- 107.1 ЗАГОЛОВОК + ПОЯСНЕНИЕ В ОДНОЙ КОЛОНКЕ ----------------------------------- */
.widget-paid-service-block .tl-svcblock-text{
  display:flex;
  flex-direction:column;
  gap:3px;
  min-width:0;
}
.widget-paid-service-block .tl-svcblock-text .tl-svcblock-title{
  margin:0;
}

/* --- 107.2 ПОЯСНЕНИЕ ПОД ЗАГОЛОВКОМ ------------------------------------------------ */
.tl-svcblock-note{
  margin:0;
  max-width:760px;
  font-size:13px;
  line-height:1.45;
  font-weight:400;
  color:var(--muted, #6c6883);
}
/* в блоках каталога и категорий пояснение живёт внутри .tl-svcblock-text */
.widget-paid-service-block .tl-svcblock-note{
  max-width:760px;
}

/* --- 107.3 ШАПКА БЛОКА НА ГЛАВНОЙ (Home::outAdsVip) -------------------------------- */
.tl-svcblock-homehead{
  display:block;
  margin-bottom:16px;
}
/* у `.bold-title-and-link` из main.css отступ 25 px — пояснение должно стоять под самым
   заголовком, поэтому здесь отступ уменьшен, а весь блок сохраняет воздух снизу */
.tl-svcblock-homehead .bold-title-and-link{
  margin-bottom:6px;
}
.tl-svcblock-homehead .tl-svcblock-note{
  margin:0;
}

/* --- 107.4 МОБИЛЬНАЯ АДАПТАЦИЯ ----------------------------------------------------- */
@media (max-width:575px){
  .tl-svcblock-note{ font-size:12.5px; max-width:100%; }
  .tl-svcblock-homehead{ margin-bottom:12px; }
}
/* >>> КОНЕЦ ЧАСТИ 107 >>> */

/* =====================================================================================
   >>> ЧАСТЬ 108 (19.09.2026): БЛОК «АКТИВНЫЕ УСЛУГИ» — СЕТКА РАВНЫХ КАРТОЧЕК + ЗАЗОР СНИЗУ <<<
   Задание владельца дословно: «Переоформите, например, 4 ровных блока, а не списком вниз
   на всю длину. Ужас. 4 ровных блока!» и «Прилипло снизу» — блок упирался в карусель
   категорий, нужен зазор 16–20 px.

   ЧТО БЫЛО НЕ ТАК (замер прежней разметки): список был вертикальным
   (`.tl-activesvc-list{display:flex; flex-direction:column}`), строки — во всю ширину
   карточки (1340 px при 1440), справа пустая область; снизу блок упирался в карусель
   категорий (отступа не было вовсе).

   ЧТО СТАЛО:
     108.1 СПИСОК — СЕТКА РАВНЫХ КАРТОЧЕК: 4 в ряд на ≥1200 px (при ширине 1440 карточка
           333 px — влезает читаемо), 2×2 на 992–1199, 2 на 768–991, 1 на ≤575 px.
           Ряды и колонки разделены зазором 14 px (норма владельца 12–16).
     108.2 КАРТОЧКА УСЛУГИ: одинаковая высота (сетка растягивает элементы ряда:
           `align-items:stretch` + `height:100%`), внутренние отступы 14 px (норма 12–16),
           подложка --surface, радиус 14, БЕЗ РАМКИ, мягкая тень --sh-1; внутри —
           иконка услуги 36×36 сверху, название (до 2 строк) и срок, прижатый к низу
           (`margin-top:auto`), поэтому у всех карточек одна высота даже при разной длине
           названия. Разделителей-линий нет: карточки разделены зазором.
     108.3 ЗАЗОР СНИЗУ 18 px (норма владельца 16–20) — задан ПАДДИНГОМ обёртки
           `.tl-activesvc-wrap`, а не маргином: паддинг не схлопывается и не «съедается»
           обрезкой родителя (тот же приём, что в части 102 слоя).
     108.4 ПУСТОЕ СОСТОЯНИЕ не меняется: одна плашка системы с подписью и кнопка.
   ===================================================================================== */

/* --- 108.1 СПИСОК: СЕТКА РАВНЫХ КАРТОЧЕК ------------------------------------------- */
.tl-activesvc-list{
  list-style:none;
  margin:0;
  padding:0;
  display:grid;
  grid-template-columns:repeat(2, minmax(0, 1fr));
  gap:14px;
  align-items:stretch;
}
/* 4 в ряд — когда по ширине читаемо (норма владельца: «4 в ряд, если влезает») */
@media (min-width:1200px){
  .tl-activesvc-list{ grid-template-columns:repeat(4, minmax(0, 1fr)); }
}
/* телефон — по одной карточке */
@media (max-width:575px){
  .tl-activesvc-list{ grid-template-columns:minmax(0, 1fr); gap:12px; }
}

/* --- 108.2 КАРТОЧКА УСЛУГИ: ОДНА ВЫСОТА, ВОЗДУХ 12–16 px, БЕЗ РАМОК ----------------- */
.tl-activesvc-item{
  box-sizing:border-box;
  display:flex;
  flex-direction:column;
  align-items:flex-start;
  gap:10px;
  height:100%;
  min-height:104px;
  padding:14px;
  background:var(--surface, #ffffff);
  border:0;
  border-radius:var(--card-radius-inner, 14px);
  box-shadow:var(--sh-1, 0 1px 2px rgba(27, 22, 48, .05));
}
.tl-activesvc-item-ic{
  flex:0 0 auto;
  display:inline-flex;
  align-items:center;
  justify-content:center;
  width:36px;
  height:36px;
  border-radius:var(--r-xs, 10px);
  background:var(--surface-2, #f6f4fd);
  overflow:hidden;
}
.tl-activesvc-item-ic img{
  display:block;
  width:24px;
  height:24px;
  object-fit:contain;
}
.tl-activesvc-item-ic i{
  font-size:19px;
  line-height:1;
  color:var(--brand, #6640f4);
}
/* текстовая часть тянется на всю высоту карточки, срок прижат к низу —
   поэтому у всех карточек ряда одинаковая высота */
.tl-activesvc-item-text{
  flex:1 1 auto;
  min-width:0;
  width:100%;
  display:flex;
  flex-direction:column;
  align-items:flex-start;
  gap:2px;
}
.tl-activesvc-item-name{
  font-size:14.5px;
  font-weight:600;
  line-height:1.35;
  color:var(--ink, #1b1630);
  overflow-wrap:anywhere;
  /* название — не больше двух строк: высота карточек в ряду не разъезжается */
  display:-webkit-box;
  -webkit-line-clamp:2;
  -webkit-box-orient:vertical;
  overflow:hidden;
}
.tl-activesvc-item-term{
  margin-top:auto;
  font-size:12.5px;
  line-height:1.4;
  color:var(--muted, #6c6883);
}

/* --- 108.3 ЗАЗОР СНИЗУ (паддингом, чтобы не схлопывался) ---------------------------- */
.tl-activesvc-wrap{
  box-sizing:border-box;
  padding-bottom:18px;
}

/* --- 108.4 МОБИЛЬНАЯ АДАПТАЦИЯ ----------------------------------------------------- */
@media (max-width:991px){
  .tl-activesvc-wrap{ padding-bottom:16px; }
}
@media (max-width:575px){
  .tl-activesvc-item{ padding:12px; min-height:96px; gap:8px; }
  .tl-activesvc-item-ic{ width:32px; height:32px; }
  .tl-activesvc-item-ic img{ width:22px; height:22px; }
  .tl-activesvc-item-name{ font-size:14px; }
  .tl-activesvc-item-term{ font-size:12px; }
}
/* >>> КОНЕЦ ЧАСТИ 108 >>> */

/* =====================================================================================
   >>> ЧАСТЬ 109 (19.09.2026): СТРАНИЦА УСЛУГ `/ad/services/<id>` — КАРТОЧКИ ВМЕСТО ПРОСТЫНИ <<<
   Задание владельца: «Эту тоже полностью переоформить страницу, чтобы не в длину было».

   РАЗМЕТКА (PHP, не слой): AdPaidServices::outServices() печатает карточки
     <div class="ad-paid-services-list-item tl-svctile [added]" [data-id]>
       [лента «Рекомендуем»]
       <div class="tl-svctile-top">  иконка 44×44  +  цена (now/old)  </div>
       <div class="ad-paid-services-list-item-content tl-svctile-body">
          [плашка «Подключено»]  h5 (название)  p.tl-svctile-desc (2 строки, полный текст в title)
          <div class="tl-svctile-foot">  срок  ИЛИ  счётчик + кнопка «Подключить»  </div>
       </div>
     </div>

   ЧТО БЫЛО НЕ ТАК (замер 1440 px): каждая карточка — ВО ВСЮ ШИРИНУ колонки
   (`1026×164…189 px`), внутри bootstrap-сетка `.row/.col-md-2/.col-md-8/.col-md-2`:
   описание и цена стояли в разных концах широкой полосы, справа пустые поля,
   высоты карточек разъезжались (Δ высот 24 px), список занимал 728 px по высоте.
   Страница: 1816 / 1831 / 2038 px (1440 / 1280 / 1100).

   ЧТО ДАЁТ СЛОЙ:
     109.1 СПИСОК — СЕТКА РАВНЫХ КАРТОЧЕК: 2×2 на ≥768 px, 1 в столбик на ≤767 px;
           зазор 16 px (норма владельца 12–16);
     109.2 КАРТОЧКА: одинаковая высота (сетка тянет элементы: `align-items:stretch`
           + `height:100%`), внутренние отступы 16 px (норма 12–16), подложка --surface,
           радиус 16, РАМОК НЕТ, мягкая тень --sh-1; верх — иконка 44×44 и цена справа,
           низ прижат (`margin-top:auto`) — поэтому Δ высот в ряду 0;
     109.3 ОПИСАНИЕ — 13 px в ДВЕ строки (`-webkit-line-clamp:2`), полный текст в подсказке
           `title` (владелец: «короткое описание (в одну-две строки, длинное — в подсказку)»);
     109.4 КНОПКА «Подключить» В КАЖДОЙ КАРТОЧКЕ: радиус 12, заливка scheme1 #6640f4,
           белый текст (5,83:1), по ширине карточки. ⚠️ `display:flex !important` нужен
           намеренно: JS страницы (`ad_paid_services.js`) при клике по карточке скрывает
           блоки оплаты у ВСЕХ карточек (`.ad-paid-services-action-payment{display:none}`
           инлайном) и показывает только у выбранной — с сеткой карточек это лишало бы
           кнопок остальные карточки. Правило слоя сильнее инлайна, поэтому кнопка остаётся
           у каждой карточки, а выбор услуги и открытие оплаты работают как раньше
           (кнопка лежит ВНУТРИ карточки, клик по ней выставляет service_id этой услуги);
     109.5 ПЛАШКА «Подключено» — та же система, что у меток (часть 31): высота 26, пилюля 999,
           без рамки, мягкая тень, насыщенная зелёная заливка #15803d с белым текстом (5,02:1);
     109.6 ЗАЗОРЫ МЕЖДУ БЛОКАМИ 16–24 px ПАДДИНГОМ (не маргином — не схлопывается):
           `.ad-paid-services-list` — паддинг снизу 20 px, карточка лота `.tl-svccard` —
           паддинг снизу 0 (зазор даёт список), правый блок `.tl-waitlist` — без изменений.
   ===================================================================================== */

/* --- 109.1 СПИСОК УСЛУГ: СЕТКА РАВНЫХ КАРТОЧЕК ------------------------------------- */
/* ⚠️ СЕТКА — НА САМОЙ ФОРМЕ, а не на внешнем `.ad-paid-services-list`: разметку печатает
   `AdPaidServices::outServices()` ВНУТРЬ `<form class="ad-paid-services-form">`
   (см. resources/view/web/ad-paid-services.tpl), поэтому карточки — дети ФОРМЫ.
   Замер ошибки: с сеткой на внешнем контейнере карточки остались в одну колонку и
   растянулись до 937 px каждая (страница 4061 px вместо 1816). Скрытые input'ы
   (`input[type=hidden]`) в сетке не участвуют — браузер их не рисует.
   Внешний список оставлен обычным блоком и даёт ЗАЗОРЫ паддингом сверху и снизу. */
.ad-paid-services-list{
  margin-top:0;
  padding:20px 0;
  display:block;
}
.ad-paid-services-form{
  display:grid;
  grid-template-columns:repeat(2, minmax(0, 1fr));
  gap:16px;
  align-items:stretch;
}
@media (max-width:767px){
  .ad-paid-services-form{ grid-template-columns:minmax(0, 1fr); gap:12px; }
}

/* --- 109.2 КАРТОЧКА УСЛУГИ --------------------------------------------------------- */
.ad-paid-services-list-item.tl-svctile{
  box-sizing:border-box;
  position:relative;
  display:flex;
  flex-direction:column;
  gap:12px;
  height:100%;
  padding:16px;
  background:var(--surface, #ffffff);
  /* РАМОК НЕТ — карточку держит мягкая тень (правило владельца) */
  border:0;
  border-radius:var(--r-md, 18px);
  box-shadow:var(--sh-1, 0 1px 2px rgba(27, 22, 48, .05));
  cursor:pointer;
  overflow:hidden;
  transition:box-shadow .14s ease, background-color .14s ease;
}
.ad-paid-services-list-item.tl-svctile:hover{
  box-shadow:var(--sh-2, 0 6px 18px rgba(27, 22, 48, .07));
}
.ad-paid-services-list-item.tl-svctile.active{
  box-shadow:0 0 0 2px var(--brand-tint-2, #e2d9ff), var(--sh-2, 0 6px 18px rgba(27, 22, 48, .07));
}
.ad-paid-services-list-item.tl-svctile.added{
  cursor:default;
}

/* лента «Рекомендуем» — плашка системы без рамки */
.tl-svctile-ribbon{
  position:absolute;
  top:14px;
  right:14px;
  display:inline-flex;
  align-items:center;
  height:24px;
  padding:0 10px;
  border-radius:var(--r-pill, 999px);
  background:var(--brand-tint, #efeaff);
  color:var(--brand, #6640f4);
  font-size:11.5px;
  font-weight:700;
}

/* верх карточки: иконка + цена */
.tl-svctile-top{
  display:flex;
  align-items:flex-start;
  justify-content:space-between;
  gap:12px;
}
.ad-paid-services-list-item-image.tl-svctile-ic{
  flex:0 0 auto;
  display:inline-flex;
  align-items:center;
  justify-content:center;
  width:44px;
  height:44px;
  border-radius:var(--r-sm, 14px);
  background:var(--surface-2, #f6f4fd);
  overflow:hidden;
  text-align:left;
}
.tl-svctile-ic img{
  display:block;
  width:28px;
  height:28px;
  object-fit:contain;
}
.ad-paid-services-list-item-price.tl-svctile-price{
  display:flex;
  flex-direction:column;
  align-items:flex-end;
  gap:2px;
  margin-left:auto;
  padding-top:2px;
}
.ad-paid-services-list-item-price-now{
  font-size:15px;
  font-weight:700;
  line-height:1.2;
  color:var(--ink, #1b1630);
}
.ad-paid-services-list-item-price-old{
  font-size:12.5px;
  line-height:1.2;
  color:var(--muted, #6c6883);
  text-decoration:line-through;
}

/* тело карточки */
.ad-paid-services-list-item-content.tl-svctile-body{
  flex:1 1 auto;
  min-width:0;
  display:flex;
  flex-direction:column;
  align-items:flex-start;
  gap:6px;
}
.tl-svctile-body h5{
  margin:0;
  font-size:15.5px;
  font-weight:700;
  line-height:1.3;
  color:var(--ink, #1b1630);
  overflow-wrap:anywhere;
}
/* --- 109.3 ОПИСАНИЕ В ДВЕ СТРОКИ, ПОЛНЫЙ ТЕКСТ — В ПОДСКАЗКЕ ---------------------- */
.tl-svctile-desc{
  margin:0;
  width:100%;
  font-size:13px;
  line-height:1.45;
  color:var(--muted, #6c6883);
  display:-webkit-box;
  -webkit-line-clamp:2;
  -webkit-box-orient:vertical;
  overflow:hidden;
}
/* низ карточки прижат — все карточки ряда одной высоты */
.tl-svctile-foot{
  margin-top:auto;
  padding-top:10px;
  width:100%;
  display:flex;
  align-items:center;
  justify-content:space-between;
  gap:10px;
  flex-wrap:wrap;
}
.tl-svctile-term strong{
  font-size:13px;
  font-weight:600;
  color:var(--ink-2, #3a3550);
}

/* --- 109.4 КНОПКА «ПОДКЛЮЧИТЬ» В КАЖДОЙ КАРТОЧКЕ ----------------------------------- */
.ad-paid-services-action-payment{
  display:flex !important;
  margin:0;
  width:100%;
}
.ad-paid-services-action-payment .initOptionsPaymentServices{
  width:100%;
  border-radius:12px !important;
  min-height:40px;
  font-size:13.5px;
  text-decoration:none !important;
}

/* --- 109.5 ПЛАШКА «ПОДКЛЮЧЕНО» ----------------------------------------------------- */
.tl-svctile-plate.ad-paid-services-list-item-added{
  display:inline-flex;
  align-items:center;
  min-height:26px;
  padding:0 12px;
  border-radius:var(--r-pill, 999px);
  border:0;
  background:var(--tl-badge-ok-fill, #15803d);
  box-shadow:var(--sh-1, 0 1px 2px rgba(27, 22, 48, .05));
}
.tl-svctile-plate.ad-paid-services-list-item-added > span,
.tl-svctile-plate.ad-paid-services-list-item-added span{
  font-size:12.5px;
  font-weight:600;
  line-height:1.2;
  color:var(--tl-badge-ok-ink, #ffffff);
}

/* счётчик количества — компактный, в строку с кнопкой */
.tl-svctile-foot .quantity_inner{
  display:inline-flex;
  align-items:center;
  gap:6px;
}
.tl-svctile-foot .quantity_inner .quantity{
  min-width:20px;
  text-align:center;
  font-size:13.5px;
  font-weight:600;
  color:var(--ink, #1b1630);
}
.tl-svctile-foot .quantity_inner button{
  width:28px;
  height:28px;
  border-radius:var(--r-xs, 10px);
  border:0;
  background:var(--surface-2, #f6f4fd);
  color:var(--ink, #1b1630);
  cursor:pointer;
  display:inline-flex;
  align-items:center;
  justify-content:center;
}
.tl-svctile-foot .quantity_inner button svg{ width:14px; height:14px; stroke:currentColor; stroke-width:2; }

/* --- 109.6 ЗАЗОРЫ МЕЖДУ БЛОКАМИ ПАДДИНГОМ (не схлопываются) ------------------------ */
/* карточка лота → список услуг и список услуг → подвал: зазоры даёт ПАДДИНГ списка
   (20 px сверху и снизу, задан в 109.1), карточка лота сохраняет свои внутренние отступы */
.tl-svccard + .ad-paid-services-list{ margin-top:0; }
/* пояснение «Поля со звёздочкой…» и прочие пустые вложенные блоки формы не добавляют пустот */
.ad-paid-services-form > div:empty{ display:none; }
/* на странице услуг правый блок прижат к верху колонки */
.tl-waitlist + *{ margin-top:16px; }

/* --- 109.7 МОБИЛЬНАЯ АДАПТАЦИЯ ----------------------------------------------------- */
@media (max-width:575px){
  .ad-paid-services-list-item.tl-svctile{ padding:14px; gap:10px; }
  .tl-svctile-ic{ width:40px; height:40px; }
  .tl-svctile-ic img{ width:26px; height:26px; }
  .tl-svctile-body h5{ font-size:15px; }
  .tl-svctile-ribbon{ top:12px; right:12px; }
}
/* >>> КОНЕЦ ЧАСТИ 109 >>> */

/* =====================================================================================
   >>> ЧАСТЬ 110 (19.09.2026): СТРАНИЦА УСЛУГ — ДОВОДКА ПО ЗАМЕРУ <<<
   Замер после части 109 (страница 1816→1591 / 1831→1583 / 2038→1766 / 2051→1779 /
   3011→2649 px, список услуг 728→543,7 px) нашёл ТРИ остатка, все исправлены здесь.

   110.1 ОПИСАНИЕ ДЕРЖИТ РОВНО ДВЕ СТРОКИ. Было: у карточки с коротким описанием
         (`«…» 19 px / 1 строка`) высота 218,3 px против 237,2 px у соседей — Δ высот
         18,9 px на телефоне (390 px), где карточки стоят В СТОЛБИК и сетка не может
         выровнять их по ряду. Владелец требует Δ 0. Стало: у описания `min-height`
         в две строки (2 × 1,45 = 2,9em), поэтому короткий текст всё равно занимает
         две строки, и все карточки одной высоты на ЛЮБОЙ ширине, включая 390 px.
         Обрезки нет: текст остаётся в две строки (`-webkit-line-clamp:2`), полный —
         в подсказке `title` (проверено: подсказки 47–105 символов).

   110.2 ЛЕНТА «РЕКОМЕНДУЕМ» ПЕРЕВЕДЕНА ИЗ АБСОЛЮТА В ПОТОК. Была `position:absolute;
         top:14px; right:14px` — ровно там же стоит ЦЕНА (`.tl-svctile-price`,
         `margin-left:auto` в верхней строке), то есть при появлении услуги с признаком
         `recommended=1` лента наехала бы на цену. Теперь лента — обычный элемент
         карточки-флекс-колонки между верхом (иконка + цена) и телом (название), по левому
         краю; порядок задан `order` (верх 1 → лента 2 → тело 3), потому что в разметке
         PHP лента печатается ПЕРЕД верхом. Наезд невозможен ни на одной ширине.

   110.3 МОБИЛЬНАЯ КНОПКА ТЕМЫ НЕ ПРИЛИПАЕТ. Зонд `_svcblk_gapzone.js` показал, что между
         карточкой лота и списком услуг на 768/390 px стоит кнопка темы
         `<div class="d-block d-lg-none">` («найти лоты продавца», 48/44 px) и держалась
         с НУЛЕВЫМИ зазорами — прилипала и к карточке сверху, и к списку снизу. Стало:
         паддинг 16 px сверху и снизу (норма владельца 16–24 px), правило привязано
         к соседству `.tl-svccard +`, поэтому на других страницах темы ничего не меняется.
         На ≥992 px кнопка скрыта темой (`d-lg-none`), там карточка и список смыкаются
         боксами, а зазор 20 px даёт паддинг списка (110.4).

   110.4 ЗАЗОРЫ ПАДДИНГОМ — ПОДТВЕРЖДЕНО ЗАМЕРОМ: «карточка лота → первая карточка
         услуги» 20 px, «первая → вторая карточка» 16 px (и по X, и по Y),
         «последняя карточка → низ списка» 20 px. Маргинов нет вовсе
         (`margin 0px/0px` у списка), схлопываться нечему.
   ===================================================================================== */

/* --- 110.1 ОПИСАНИЕ ВСЕГДА В ДВЕ СТРОКИ (Δ высот 0 и на телефоне) ------------------ */
.tl-svctile-desc{
  min-height:2.9em;   /* 2 строки × line-height 1.45 */
}

/* --- 110.2 ЛЕНТА «РЕКОМЕНДУЕМ» — В ПОТОКЕ, НЕ НА ЦЕНЕ ------------------------------ */
.ad-paid-services-list-item.tl-svctile > .tl-svctile-top{ order:1; }
.ad-paid-services-list-item.tl-svctile > .tl-svctile-ribbon{
  order:2;
  position:static;
  top:auto;
  right:auto;
  align-self:flex-start;
  margin:0;
}
.ad-paid-services-list-item.tl-svctile > .tl-svctile-body{ order:3; }

/* --- 110.3 МОБИЛЬНАЯ КНОПКА ТЕМЫ МЕЖДУ КАРТОЧКОЙ ЛОТА И СПИСКОМ УСЛУГ -------------- */
.tl-svccard + .d-block.d-lg-none{
  padding:16px 0;
}

/* >>> КОНЕЦ ЧАСТИ 110 >>> */

/* =====================================================================================
   >>> ЧАСТЬ 111 (19.09.2026): СТРАНИЦА УСЛУГ — НИЗ КАРТОЧКИ В ОДНУ СТРОКУ, Δ ВЫСОТ 0 <<<
   Второй замер по тому же заданию владельца («Эту тоже полностью переоформить страницу,
   чтобы не в длину было») — на состоянии «ничего не подключено» (`_svcblk_card_fixture.php
   empty`) и на смешанном состоянии нашлись два остатка:

   111.1 НИЗ КАРТОЧКИ БЫЛ В ДВЕ СТРОКИ И РАЗЪЕЗЖАЛСЯ ПО ВЫСОТЕ. Замер 390 px: у услуг
         со счётчиком количества низ 96 px (счётчик и кнопка вставали в две строки,
         `flex-wrap:wrap` + кнопка во всю ширину), у услуг без счётчика — 50 px;
         Δ высот карточек 46 px, потому что в столбик сетка не выравнивает их по ряду.
         На 768 px у одной карточки ряда низ 96 px, у соседней 50 px — внутри ряда это
         тоже читается как разнобой, хотя высоты карточек сетка выравнивала.
         Стало: низ карточки ВСЕГДА В ОДНУ СТРОКУ — `flex-wrap:nowrap`, счётчик
         `flex:0 0 auto`, блок оплаты `flex:1 1 auto` (кнопка занимает остаток строки),
         поэтому «счётчик + кнопка» и «только кнопка» дают одинаковый низ 50 px
         и карточка стала ниже.

   111.2 ОДИНАКОВАЯ ВЫСОТА НИЗА В ЛЮБОМ СОСТОЯНИИ. У подключённой услуги в низу только
         срок («Завершится через N дней») — 34 px против 50 px у неподключённой.
         При смешанном состоянии (одна услуга куплена, три нет) это давало Δ 16 px
         в столбик на телефоне. Стало: `.tl-svctile-foot{ min-height:50px;
         align-items:center }` — низ одинаков в состоянии «Подключено», «Подключить»
         и «счётчик + Подключить».

   111.3 КНОПКА ТЕМЫ НА ТЕЛЕФОНЕ — РОВНО 16 И 20 px. Паддинг 16 px сверху и снизу
         (часть 110.3) давал пару «кнопка → первая карточка услуги» 36 px (16 своих
         плюс 20 паддинга списка) и общий разрыв 100 px. Стало: паддинг только сверху
         16 px, снизу зазор даёт паддинг списка 20 px — обе пары в норме владельца
         16–24 px («карточка лота → кнопка» 16, «кнопка → первая карточка» 20).
   ===================================================================================== */

/* --- 111.1 НИЗ КАРТОЧКИ В ОДНУ СТРОКУ --------------------------------------------- */
.ad-paid-services-list-item.tl-svctile .tl-svctile-foot{
  flex-wrap:nowrap;
  align-items:center;
  min-height:50px;   /* 111.2: одинаково для «Подключено» и «Подключить» */
}
.ad-paid-services-list-item.tl-svctile .tl-svctile-foot .quantity_inner{
  flex:0 0 auto;
}
.tl-svctile-foot .ad-paid-services-action-payment{
  flex:1 1 auto;
  width:auto;
  min-width:0;
}
.tl-svctile-foot .ad-paid-services-action-payment .initOptionsPaymentServices{
  width:100%;
}

/* --- 111.3 КНОПКА ТЕМЫ: 16 px СВЕРХУ, 20 px СНИЗУ (паддинг списка) ---------------- */
.tl-svccard + .d-block.d-lg-none{
  padding:16px 0 0;
}

/* >>> КОНЕЦ ЧАСТИ 111 >>> */

/* =====================================================================================
   >>> ЧАСТЬ 112 (19.09.2026): ВСЕ ЧЕТЫРЕ КАРТОЧКИ УСЛУГ — ОДНОЙ ВЫСОТЫ <<<
   Третий замер (состояние «одна услуга подключена, три к покупке» — самое частое у
   продавца) показал Δ высот 37 px: сетка выравнивает карточки ТОЛЬКО ВНУТРИ ряда, а ряд
   с подключённой услугой выше — у неё в теле есть плашка «Подключено» (26 px + зазор),
   которой нет у остальных. Замер 1440 px: ряд 1 (карточки 1–2) 259,8 px, ряд 2
   (карточки 3–4) 222,8 px — разница ровно 37 px; на телефоне то же самое (253,2 против
   216,2 px в столбик).
   Стало: `grid-auto-rows:1fr` — все ряды сетки одной высоты по самой высокой карточке,
   поэтому Δ высот 0 px В ЛЮБОМ состоянии (все подключены / ни одной / смешанное) и на
   ЛЮБОЙ ширине. Воздух в более низких карточках уходит вверх: низ карточки прижат
   (`margin-top:auto` у `.tl-svctile-foot`), кнопка и срок остаются на одной линии.
   Проверено на 1440/1280/1100/768/390: Δ высот 0, Δ ширин 0, наездов 0, обрезанных
   описаний 0, переполнения по X 0, исключений JS 0.
   ===================================================================================== */

.ad-paid-services-form{
  grid-auto-rows:1fr;
}

/* >>> КОНЕЦ ЧАСТИ 112 >>> */

/* =====================================================================================
   >>> ЧАСТЬ 113 (19.09.2026): ПЛАШКА «ВЛАДЕНИЕ ПОДТВЕРЖДЕНО» В КАРТОЧКЕ ЛОТА <<<
   Задание владельца: «И значок подтверждения (владение подтверждено) где-нибудь в карточке
   лота тоже сделайте, чтобы покупатели видели, что проект продавца!»

   РАЗМЕТКА (не слой): resources/view/web/ad-card.tpl — сразу под плашкой адреса сайта
   (`.ad-url-chip`), только внутри условия «владение подтверждено»:
       <div class="tl-ownok-row"><span class="tl-ownok-plate" title="…">
       <i class="ti ti-discount-check"></i><span>Владение подтверждено</span></span></div>

   ИСТОЧНИК ПРАВДЫ — AdOwnership::confirmed(): тот же компонент, что у шага мастера
   «Подтверждение прав» и у значка в списках. true ТОЛЬКО при `uni_ads_ownership.status = 1`
   (актив подтверждён этим же продавцом). У неподтверждённых лотов — и у всех старых,
   и у лотов-примеров — плашки НЕТ ВООБЩЕ (не «не подтверждено», а ничего).

   ЧТО ДАЁТ СЛОЙ:
     113.1 строка плашки: зазор от плашки адреса 8 px, выравнивание по левому краю колонки
           (тот же левый край, что у адреса — замер: Δ 0 px);
     113.2 плашка: высота 30, пилюля 999, РАМОК НЕТ (мягкая тень --sh-1), насыщенная зелёная
           заливка --tl-badge-ok-fill #15803d с БЕЛЫМ текстом (5,02:1 ≥ 4,5:1), галочка
           ti-discount-check 17 px, кегль 13,5/600, подчёркиваний нет (правило системы);
     113.3 мобильная адаптация ≤575 px: высота 28, кегль 12,5, паддинг 0 12, зазор 6 px.
   ===================================================================================== */

/* --- 113.1 СТРОКА ---------------------------------------------------------------- */
.tl-ownok-row{
  display:flex;
  align-items:center;
  gap:10px;
  margin:8px 0 0;
}

/* --- 113.2 ПЛАШКА --------------------------------------------------------------- */
.tl-ownok-plate{
  display:inline-flex;
  align-items:center;
  gap:8px;
  min-height:30px;
  padding:0 14px;
  border:0;
  border-radius:var(--r-pill, 999px);
  background:var(--tl-badge-ok-fill, #15803d);
  box-shadow:var(--sh-1, 0 1px 2px rgba(27, 22, 48, .05));
  color:#ffffff;
  font-size:13.5px;
  font-weight:600;
  line-height:1.2;
  text-decoration:none;
  white-space:nowrap;
}
.tl-ownok-plate i{
  font-size:17px;
  line-height:1;
  color:#ffffff;
}

/* --- 113.3 МОБИЛЬНАЯ АДАПТАЦИЯ ---------------------------------------------------- */
@media (max-width:575px){
  .tl-ownok-row{ margin-top:6px; }
  .tl-ownok-plate{ min-height:28px; padding:0 12px; font-size:12.5px; gap:6px; }
  .tl-ownok-plate i{ font-size:15px; }
}

/* >>> КОНЕЦ ЧАСТИ 113 >>> */

/* =====================================================================================
   >>> ЧАСТЬ 114 (19.09.2026): ЦВЕТ ТЕКСТА ПЛАШКИ «ВЛАДЕНИЕ ПОДТВЕРЖДЕНО» <<<
   Замер части 113 (`_own_cardshot.js`, карточка лота 1541) нашёл граблю: текст плашки
   выходил `rgb(58, 53, 80)` (--ink-2) на зелёной заливке #15803d — контраст **2,32:1**,
   требование владельца «≥4,5:1» не выполнялось, хотя в слое стоит `color:#ffffff`.

   Причина (замер `_own_colorprobe.js` — перебор реально применённых правил): в теме
   `main.css` есть правило
     `.col-md-9 p, .col-md-9 div, .col-md-9 span, .col-md-9 li, .col-md-9 label, .col-md-9 small { color: var(--ink-2); }`
   Его специфичность (0,1,1) выше, чем у `.tl-ownok-plate` (0,1,0), а плашка — это `<span>`,
   поэтому тема перебивала слой. Значок `i` под это правило не попадал и оставался белым.

   Стало: цвет задан селектором по строке плашки (специфичность 0,2,0 / 0,2,1) и с
   `!important` — так же, как слой уже делает в других местах, где правила темы сильнее
   (например `.ad-paid-services-action-payment{display:flex !important}`), чтобы значок
   читался одинаково на любой странице и не зависел от порядка подключения файлов.
   Проверено замером после правки: контраст **5,02:1** (норма ≥4,5:1).
   ===================================================================================== */

.tl-ownok-row .tl-ownok-plate,
.tl-ownok-row .tl-ownok-plate span,
.tl-ownok-row .tl-ownok-plate i{
  color:#ffffff !important;
}

/* >>> КОНЕЦ ЧАСТИ 114 >>> */

/* =====================================================================================
   >>> ЧАСТЬ 115 (19.09.2026): СТРАНИЦА УСЛУГ — КАРТИНКИ УБРАНЫ, КАРТОЧКИ КОМПАКТНЕЕ <<<
   Третье задание владельца по этой странице (скриншот): «Она не оформлена! Оформите
   по-новому, картинки убрать, переоформить… Заново, чтобы красиво было и меньше места
   занимало!» + пометки «Убрать картинку» в верхней карточке лота и в правом блоке
   «1 лот ждёт продвижения».

   РАЗМЕТКА (PHP, не слой): AdPaidServices::outServices() переписан —
     было: `<span class="tl-svctile-top"><img …></span>` (растровая иконка услуги 44×44)
           + описание в две строки + цена отдельным блоком справа вверху;
     стало: `<div class="tl-svctile-head"><span class="tl-svctile-ic"><i class="ti ti-bolt">`
            + название + (цена только у купленной)`, описание в ОДНУ строку (полный текст
            в подсказке title), кнопка «Подключить» С ЦЕНОЙ внутри (`tl-svctile-btnprice`),
            срок — мелкой подписью `tl-svctile-term`.
   КАРТИНКИ УБРАНЫ ПОЛНОСТЬЮ: ни одного `<img>` ни в карточках услуг, ни в верхней карточке
   лота (ad-paid-services.tpl — плитка `ti-box`), ни в пунктах правого блока
   (outItemsWaitingList() — плитка `ti-box`). Растровых иконок и эмодзи нет.

   ЧТО ДАЁТ СЛОЙ:
     115.1 карточка: воздух 14 px (12 на телефоне), между карточками 16 px (12 на ≤767),
           ряд одинаковой высоты (сетка + `grid-auto-rows:1fr` из части 112);
     115.2 шапка карточки: иконка-плитка 28×28 (фон --brand-tint, знак #6640f4 16 px),
           название 15 px/600 (14 на ≤575), цена справа 14 px/700;
     115.3 описание — РОВНО ОДНА строка (`-webkit-line-clamp:1`, 12,5 px), полный текст
           в подсказке; `min-height` из части 110 снят: двух строк больше нет;
     115.4 низ: плашка «Подключено» (та же система, что в списках) ИЛИ счётчик + кнопка
           «Подключить» с ценой; срок — мелкая подпись 12 px под низом;
     115.5 плитки вместо картинок: `.tl-svccard-ic` и `.tl-waitlist-item-ic` — плитки
           системы со знаком Tabler (без растра, без рамок).
   ===================================================================================== */

/* --- 115.1 КАРТОЧКА ---------------------------------------------------------------- */
.ad-paid-services-list-item.tl-svctile{
  gap:10px;
  padding:14px;
}
@media (max-width:575px){
  .ad-paid-services-list-item.tl-svctile{ padding:12px; gap:8px; }
}

/* --- 115.2 ШАПКА: ИКОНКА-ПЛИТКА + НАЗВАНИЕ + ЦЕНА --------------------------------- */
.tl-svctile-head{
  display:flex;
  align-items:center;
  gap:10px;
  width:100%;
  min-width:0;
}
.tl-svctile-ic{
  flex:0 0 auto;
  display:inline-flex;
  align-items:center;
  justify-content:center;
  width:28px;
  height:28px;
  border-radius:var(--r-xs, 10px);
  background:var(--brand-tint, #efeaff);
  color:var(--brand, #6640f4);
}
.tl-svctile-ic i{
  font-size:16px;
  line-height:1;
  color:var(--brand, #6640f4) !important;   /* тема перебивает цвет внутри .col-md-9 (см. часть 114) */
}
.tl-svctile-name{
  flex:1 1 auto;
  min-width:0;
  font-size:15px;
  font-weight:600;
  line-height:1.25;
  color:var(--ink, #1b1630) !important;
  overflow:hidden;
  text-overflow:ellipsis;
  white-space:nowrap;
}
.ad-paid-services-list-item.tl-svctile .tl-svctile-price{
  flex:0 0 auto;
  display:inline-flex;
  align-items:baseline;
  gap:6px;
  margin-left:auto;
  padding:0;
}
.ad-paid-services-list-item.tl-svctile .tl-svctile-price .ad-paid-services-list-item-price-now{
  font-size:14px;
  font-weight:700;
  line-height:1.2;
  color:var(--ink, #1b1630);
}
.ad-paid-services-list-item.tl-svctile .tl-svctile-price .ad-paid-services-list-item-price-old{
  font-size:12px;
  line-height:1.2;
  color:var(--muted, #6c6883);
  text-decoration:line-through;
}
.tl-svctile-head .tl-svctile-ribbon{
  flex:0 0 auto;
  order:0;
  position:static;
  top:auto;
  right:auto;
  height:20px;
  padding:0 8px;
  font-size:11px;
}

/* --- 115.3 ОПИСАНИЕ: РОВНО ОДНА СТРОКА -------------------------------------------- */
.tl-svctile-body{ gap:6px; }
.ad-paid-services-list-item.tl-svctile .tl-svctile-desc{
  min-height:0;
  width:100%;
  font-size:12.5px;
  line-height:1.35;
  color:var(--muted, #6c6883) !important;
  display:-webkit-box;
  -webkit-line-clamp:1;
  -webkit-box-orient:vertical;
  overflow:hidden;
  text-overflow:ellipsis;
}

/* --- 115.4 НИЗ: ПЛАШКА ИЛИ СЧЁТЧИК + КНОПКА С ЦЕНОЙ, СРОК ПОДПИСЬЮ ----------------- */
.ad-paid-services-list-item.tl-svctile .tl-svctile-foot{
  flex-wrap:nowrap;
  align-items:center;
  min-height:0;
  padding-top:8px;
  gap:10px;
}
.tl-svctile-plate-wrap{ display:inline-flex; }
.ad-paid-services-list-item.tl-svctile .tl-svctile-plate{
  min-height:24px;
  padding:0 10px;
}
.ad-paid-services-list-item.tl-svctile .tl-svctile-plate span{ font-size:12px; }
.tl-svctile-btnprice{
  margin-left:8px;
  font-weight:700;
  opacity:.95;
}
.ad-paid-services-list-item.tl-svctile .tl-svctile-term{
  display:block;
  margin:0;
  font-size:12px;
  line-height:1.3;
  color:var(--muted, #6c6883) !important;
}

/* --- 115.5 ПЛИТКИ ВМЕСТО КАРТИНОК (лот в шапке страницы и в правом блоке) ---------- */
.tl-svccard-ic{
  display:inline-flex;
  align-items:center;
  justify-content:center;
  background:var(--brand-tint, #efeaff);
  color:var(--brand, #6640f4);
}
.tl-svccard-ic i{
  font-size:26px;
  line-height:1;
  color:var(--brand, #6640f4) !important;
}
.tl-waitlist-item-ic{
  display:inline-flex;
  align-items:center;
  justify-content:center;
  background:var(--surface-2, #f6f4fd);
  color:var(--brand, #6640f4);
}
.tl-waitlist-item-ic i{
  font-size:18px;
  line-height:1;
  color:var(--brand, #6640f4) !important;
}

/* >>> КОНЕЦ ЧАСТИ 115 >>> */

/* =====================================================================================
   >>> ЧАСТЬ 116 (19.09.2026): ПЛАШКА «ПОЛЬЗОВАТЕЛЬ ВЕРИФИЦИРОВАН» В КАРТОЧКЕ ЛОТА <<<
   Задание владельца: «плашка „Пользователь верифицирован" в карточке лота — сейчас это
   серый текст „Документы проверены" без оформления; просто текст — это не красиво!»

   РАЗМЕТКА (не слой): resources/view/web/ad-card.tpl — первый слайд контейнера
   `.ad-card-content-info-box-container`: плитка `.tl-vrf` = значок в плитке + заголовок
   15 px/700 + подпись 13 px. Условие печати ПРЕЖНЕЕ — `$data->user->verification_status`:
   у НЕверифицированного продавца блока НЕТ ВООБЩЕ (не «не верифицирован», а ничего).

   ЧТО ДАЁТ СЛОЙ:
     116.1 ОДИНОЧНАЯ плитка занимает ВСЮ ширину колонки контента, поэтому её левый край
           совпадает с блоком «Описание» (Δ 0) — замер на 1440/1280/1100/768/390.
           Когда плашек несколько (бронирование, онлайн-показ, доставка) — прежняя
           карусель Swiper (`slidesPerView:auto`), плитка остаётся слайдом 370 px.
     116.2 ПЛИТКА: насыщенная зелёная заливка #0f6b33, РАМОК НЕТ, радиус 15,
           отступы 13 px по вертикали и 24 px по горизонтали (по горизонтали 24, а не
           12–14: тогда значок и заголовок встают в ОДНУ вертикаль с текстом «Описание»,
           который стоит на 24 px внутри блока), мягкая тень.
     116.3 ЗНАЧОК: белая плитка 44×44 (радиус 13) со знаком `ti-shield-check` 24 px
           цветом #0f6b33 — контраст знака к плитке 6,62:1.
     116.4 ТЕКСТ: заголовок 15 px / 700 белый — 6,62:1; подпись 13 px приглушённая
           #cfe9d8 — 5,06:1 (норма владельца ≥4,5:1). Тон заливки взят ГЛУБЖЕ метки
           --tl-badge-ok-fill (#15803d) намеренно: на ней приглушённая подпись до нормы
           не дотягивает (максимум 4,61:1 при практически белом тексте), а #0f6b33 —
           уже существующий тон системы (--tl-badge-ok-fill-hover) и даёт запас.
           Цвета с `!important` — как в части 114: тема main.css
           (`.col-md-9 p, .col-md-9 span { color: var(--ink-2) }`, специфичность 0,1,1)
           перебивает слабые селекторы слоя.
     116.5 ≤575 px компактнее: отступы 11/16, плитка значка 38×38, заголовок 14 px,
           подпись 12,5 px, радиус 14.
   ===================================================================================== */

/* --- 116.1 ОДИНОЧНАЯ ПЛИТКА — ВО ВСЮ ШИРИНУ КОЛОНКИ КОНТЕНТА ----------------------- */
.content-info-box-swiper .swiper-slide.tl-vrf:only-child{
  width:100% !important;
  max-width:none !important;
  margin-right:0 !important;
}

/* --- 116.2 ПЛИТКА ------------------------------------------------------------------ */
.ad-card-content-info-box.tl-vrf{
  display:flex;
  align-items:center;
  gap:14px;
  width:100%;
  min-width:0;
  min-height:0;
  padding:13px 24px;
  border:0 !important;
  border-radius:15px;
  background:#0f6b33 !important;
  background-color:#0f6b33 !important;
  box-shadow:0 6px 18px rgba(15, 107, 51, .22);
}

/* --- 116.3 ЗНАЧОК В ПЛИТКЕ --------------------------------------------------------- */
.ad-card-content-info-box.tl-vrf .tl-vrf-ic{
  flex:0 0 auto;
  display:inline-flex;
  align-items:center;
  justify-content:center;
  width:44px;
  height:44px;
  border-radius:13px;
  background:#ffffff;
}
.ad-card-content-info-box.tl-vrf .tl-vrf-ic i{
  font-size:24px;
  line-height:1;
  color:#0f6b33 !important;
}

/* --- 116.4 ТЕКСТ ПЛИТКИ ------------------------------------------------------------ */
.ad-card-content-info-box.tl-vrf .tl-vrf-text{
  display:block;
  flex:1 1 auto;
  min-width:0;
}
.ad-card-content-info-box.tl-vrf .tl-vrf-title{
  display:block;
  margin:0;
  font-size:15px;
  font-weight:700;
  line-height:1.25;
  color:#ffffff !important;
}
.ad-card-content-info-box.tl-vrf .tl-vrf-sub{
  display:block;
  margin:3px 0 0;
  font-size:13px;
  font-weight:400;
  line-height:1.35;
  color:#cfe9d8 !important;
}

/* --- 116.5 МОБИЛЬНАЯ АДАПТАЦИЯ ≤575 px -------------------------------------------- */
@media (max-width:575px){
  .ad-card-content-info-box.tl-vrf{ gap:12px; padding:11px 16px; border-radius:14px; }
  .ad-card-content-info-box.tl-vrf .tl-vrf-ic{ width:38px; height:38px; border-radius:11px; }
  .ad-card-content-info-box.tl-vrf .tl-vrf-ic i{ font-size:21px; }
  .ad-card-content-info-box.tl-vrf .tl-vrf-title{ font-size:14px; }
  .ad-card-content-info-box.tl-vrf .tl-vrf-sub{ margin-top:2px; font-size:12.5px; }
}

/* >>> КОНЕЦ ЧАСТИ 116 >>> */
/* ЧАСТЬ 117 (19.09.2026): СТРОКА «ДАННЫЕ СЕРВИСОВ» В МАСТЕРЕ — ссылка не съезжает.
   У «Доменных имён» сервисов пять: строка переносится, и ссылка «Подключить или
   обновить доступы» вставала криво. Фиксируем ритм строки. */
#adWizard .create-guide-auto{display:flex !important;flex-wrap:wrap !important;align-items:center !important;gap:10px 14px !important;}
#adWizard .create-guide-auto .create-guide-chips{display:flex !important;flex-wrap:wrap !important;align-items:center !important;gap:8px !important;}
#adWizard .create-guide-auto .create-guide-auto-link{margin-left:auto !important;align-self:center !important;white-space:nowrap !important;line-height:1.35 !important;}

/* ЧАСТЬ 121 (19.09.2026): ПЛАШКА ВЕРИФИКАЦИИ — подстраховка к инлайн-стилям разметки. */
html body .col-md-9 .ad-card-content-info-box-container .ad-card-content-info-box.tl-vrf,
html body .col-md-9 .content-info-box-swiper .swiper-slide.tl-vrf,
html body .col-md-9 .content-info-box-swiper .swiper-slide.tl-vrf:only-child,
html body .col-md-9 .ad-card-content-info-box.tl-vrf{display:inline-flex !important;width:auto !important;min-width:0 !important;max-width:100% !important;flex:0 0 auto !important;align-self:flex-start !important;background:#eaf7ef !important;background-image:none !important;box-shadow:0 2px 10px rgba(21,128,61,.12) !important;}
html body .col-md-9 .ad-card-content-info-box.tl-vrf .tl-vrf-ic{background:#15803d !important;color:#ffffff !important;}
html body .col-md-9 .ad-card-content-info-box.tl-vrf .tl-vrf-ic i{color:#ffffff !important;}
html body .col-md-9 .ad-card-content-info-box.tl-vrf .tl-vrf-title{color:#0f172a !important;font-weight:700 !important;}
html body .col-md-9 .ad-card-content-info-box.tl-vrf .tl-vrf-sub{color:#4b5563 !important;opacity:1 !important;}

/* ЧАСТЬ 124 (19.09.2026): ПОДПИСИ В БЛОКАХ УСЛУГ — над своими значениями.
   Подписи выровнены по правому краю, поэтому padding их не двигал: сдвигаем
   саму подпись трансформом (Осталось +170, Ставок +35, Цена +85). */
html body .widget-paid-service-block .tl-lot-head span:nth-child(2){transform:translateX(170px) !important;}
html body .widget-paid-service-block .tl-lot-head span:nth-child(3){transform:translateX(125px) !important;}
html body .widget-paid-service-block .tl-lot-head span:nth-child(4){transform:translateX(240px) !important;}

/* ЧАСТЬ 125 (19.09.2026): СТРАНИЦА УСЛУГ — КРУПНЫЕ ИКОНКИ И КНОПКИ ОДНОЙ ЗАЛИВКОЙ.
   Владелец: иконки услуг маленькие, у статуса и кнопки разный вид — просил единый
   сплошной фон. Иконка услуги — 56 px в плитке, статус и кнопка цены — одна
   насыщенная заливка с белым текстом, без рамок. */
.ad-paid-services-list-item.tl-svctile .tl-svctile-ic{width:56px !important;height:56px !important;border-radius:14px !important;display:inline-flex !important;align-items:center !important;justify-content:center !important;}
.ad-paid-services-list-item.tl-svctile .tl-svctile-ic i{font-size:27px !important;line-height:1 !important;}
.ad-paid-services-list-item.tl-svctile .tl-svctile-name{font-size:15.5px !important;font-weight:700 !important;}
.ad-paid-services-list-item.tl-svctile .tl-svctile-plate{background:#15803d !important;background-image:none !important;color:#ffffff !important;border:0 !important;border-radius:999px !important;padding:4px 12px !important;}
.ad-paid-services-list-item.tl-svctile .tl-svctile-plate span{color:#ffffff !important;font-weight:600 !important;}
.ad-paid-services-list-item.tl-svctile .tl-svctile-btnprice{background:#6640f4 !important;background-image:none !important;color:#ffffff !important;border:0 !important;border-radius:12px !important;}
.ad-paid-services-list-item.tl-svctile .tl-svctile-btnprice *{color:#ffffff !important;}

/* ЧАСТЬ 126 (19.09.2026): ПОДПИСЬ БЛОКА УСЛУГ — В ОДНУ СТРОКУ С ЗАГОЛОВКОМ.
   Владелец: текст должен стоять в одну линию рядом с иконкой. На широких экранах
   запрещаем перенос подписи; на узких — переносится как раньше. */
@media (min-width:992px){
  .widget-paid-service-block .tl-svcblock-text .tl-svcblock-note,
  .tl-svcblock-homehead .tl-svcblock-note{white-space:nowrap !important;}
  .widget-paid-service-block .tl-svcblock-text,
  .tl-svcblock-homehead .bold-title-and-link{flex-wrap:nowrap !important;}
}

/* ЧАСТЬ 127 (19.09.2026): СТРАНИЦА «УСЛУГИ ПРОДВИЖЕНИЯ» — ФИНАЛЬНОЕ ОФОРМЛЕНИЕ.
   Плитки-кубики убраны (задание владельца). Приводим карточки и панель к системе:
   мягкие тени без рамок, единые радиусы и воздух, аккуратный ховер. */
html body .ad-paid-services .tl-svccard,
html body .tl-svccard{border:0 !important;border-radius:18px !important;box-shadow:0 6px 20px rgba(27,22,48,.08) !important;padding:16px 20px !important;background:var(--surface,#ffffff) !important;}
html body .tl-svccard .tl-svccard-name{font-size:16px !important;font-weight:700 !important;color:#171528 !important;}
html body .tl-svccard .tl-svccard-status{margin-top:6px !important;}
html body .ad-paid-services-list-item.tl-svctile{border:0 !important;border-radius:16px !important;box-shadow:0 4px 16px rgba(27,22,48,.07) !important;padding:16px !important;background:#ffffff !important;transition:box-shadow .18s ease, transform .18s ease !important;}
html body .ad-paid-services-list-item.tl-svctile:hover{box-shadow:0 10px 26px rgba(27,22,48,.12) !important;transform:translateY(-1px) !important;}
html body .ad-paid-services-list-item.tl-svctile .tl-svctile-ic{width:44px !important;height:44px !important;min-width:44px !important;border-radius:13px !important;background:#f3efff !important;color:#6640f4 !important;display:inline-flex !important;align-items:center !important;justify-content:center !important;}
html body .ad-paid-services-list-item.tl-svctile .tl-svctile-ic i{font-size:22px !important;color:#6640f4 !important;}
html body .ad-paid-services-list-item.tl-svctile .tl-svctile-name{font-size:15px !important;font-weight:700 !important;color:#171528 !important;}
html body .ad-paid-services-list-item.tl-svctile .tl-svctile-price{font-size:15px !important;font-weight:700 !important;color:#171528 !important;}
html body .ad-paid-services-list-item.tl-svctile .tl-svctile-desc{font-size:13px !important;color:#6b6880 !important;line-height:1.4 !important;}
html body .ad-paid-services-list-item.tl-svctile .tl-svctile-term{font-size:12.5px !important;color:#6b6880 !important;}
html body .tl-waitlist{border:0 !important;border-radius:18px !important;box-shadow:0 6px 20px rgba(27,22,48,.08) !important;padding:16px !important;background:#ffffff !important;}
html body .tl-waitlist .tl-waitlist-item{border:0 !important;border-radius:12px !important;padding:10px 12px !important;transition:background .15s ease !important;}
html body .tl-waitlist .tl-waitlist-item:hover{background:#f6f4fd !important;}
html body .tl-waitlist .tl-waitlist-item.is-active{background:#efeaff !important;}
html body .tl-waitlist .tl-waitlist-search{border-radius:14px !important;}
/* ЧАСТЬ 128 (19.09.2026): ПЛАШКА «ПОДКЛЮЧЕНО» — ОДНА СПЛОШНАЯ ЗАЛИВКА.
   Владелец: у плашки оставались тёмная обводка и подложка от темы, из-за чего
   заливка выглядела не сплошной. Снимаем рамки/тени/фоны у обёртки и внутренних
   элементов, оставляя один насыщенный зелёный фон с белым текстом. */
html body .ad-paid-services-list-item.tl-svctile .tl-svctile-plate-wrap,
html body .ad-paid-services-list-item.tl-svctile .tl-svctile-plate-wrap *,
html body .tl-svctile-plate-wrap,
html body .tl-svctile-plate-wrap *{border:0 !important;box-shadow:none !important;outline:0 !important;background-image:none !important;background-color:transparent !important;}
html body .ad-paid-services-list-item.tl-svctile .tl-svctile-plate,
html body .ad-paid-services-list-item.tl-svctile .tl-svctile-plate-wrap > .tl-svctile-plate,
html body .tl-svctile-plate{background-color:#15803d !important;border:0 !important;box-shadow:none !important;outline:0 !important;border-radius:999px !important;padding:6px 14px !important;display:inline-flex !important;align-items:center !important;gap:6px !important;}
html body .ad-paid-services-list-item.tl-svctile .tl-svctile-plate span,
html body .ad-paid-services-list-item.tl-svctile .tl-svctile-plate i,
html body .tl-svctile-plate span,
html body .tl-svctile-plate i{color:#ffffff !important;background-color:transparent !important;border:0 !important;box-shadow:none !important;font-weight:700 !important;}
/* ЧАСТЬ 129 (19.09.2026): КАРТОЧКИ УСЛУГ — КОМПАКТНЕЕ ПО ВЫСОТЕ (просьба владельца).
   Уменьшены вертикальные отступы и высота строк внутри карточки услуги. */
html body .ad-paid-services-list-item.tl-svctile{padding:13px 15px !important;}
html body .ad-paid-services-list-item.tl-svctile .tl-svctile-head{gap:10px !important;align-items:center !important;min-height:38px !important;}
html body .ad-paid-services-list-item.tl-svctile .tl-svctile-desc{margin:6px 0 8px !important;line-height:1.35 !important;}
html body .ad-paid-services-list-item.tl-svctile .tl-svctile-term{margin-top:6px !important;}
html body .ad-paid-services-list-item.tl-svctile .tl-svctile-body{gap:0 !important;}
/* ЧАСТЬ 130 (19.09.2026): ФОН БЛОКОВ НА СТРАНИЦЕ УСЛУГ — ЗАМЕТНЫЙ (просьба владельца).
   Фон задаём и в разметке, и здесь с !important: тема могла перебивать инлайн-стили. */
html body .ad-paid-services-list-item.tl-svctile,
html body .tl-svccard,
html body .tl-waitlist,
html body .ad-paid-services-ads-container.tl-waitlist{background:linear-gradient(180deg,#eee9ff 0%,#f7f5ff 55%,#ffffff 100%) !important;background-image:linear-gradient(180deg,#eee9ff 0%,#f7f5ff 55%,#ffffff 100%) !important;border:0 !important;box-shadow:0 12px 28px rgba(58,27,140,.14) !important;}
html body .tl-waitlist .tl-waitlist-item-ic{background:linear-gradient(160deg,#6640f4 0%,#8a6bff 100%) !important;color:#ffffff !important;}
html body .tl-waitlist .tl-waitlist-item-ic i{color:#ffffff !important;}
html body .tl-waitlist .tl-waitlist-item-name{font-size:14px !important;font-weight:600 !important;color:#171528 !important;}
/* ЧАСТЬ 131 (19.09.2026): ВАРИАНТ B — фон карточки услуги под её цвет.
   Часть 130 задавала общий фон с !important, поэтому здесь он снимается: у каждой
   карточки свой градиент (задан в разметке, тоже с !important). */
html body .ad-paid-services-list-item.tl-svctile{background:transparent !important;background-image:none !important;}
html body .tl-svccard,
html body .tl-waitlist,
html body .ad-paid-services-ads-container.tl-waitlist{background:linear-gradient(180deg,#f3f0ff 0%,#ffffff 70%) !important;background-image:linear-gradient(180deg,#f3f0ff 0%,#ffffff 70%) !important;}
/* ЧАСТЬ 132 (19.09.2026): КАРТОЧКА УСЛУГИ — ОПИСАНИЕ ЦЕЛИКОМ, СРОК ПЛАШКОЙ СПРАВА.
   Владелец: у «Срочно» текст обрезался многоточием; срок просил перенести в правый
   угол и оформить фоном. */
html body .ad-paid-services-list-item.tl-svctile .tl-svctile-desc{display:block !important;overflow:visible !important;-webkit-line-clamp:unset !important;white-space:normal !important;}
html body .ad-paid-services-list-item.tl-svctile .tl-svctile-term{display:block !important;width:fit-content !important;margin:6px 0 0 auto !important;font-size:12px !important;color:#6640f4 !important;background:#f3efff !important;background-image:none !important;border:0 !important;border-radius:999px !important;padding:3px 10px !important;}
html body .ad-paid-services-list-item.tl-svctile .tl-svctile-body::after{content:"" !important;display:block !important;clear:both !important;}
/* ЧАСТЬ 133 (19.09.2026): ОПИСАНИЕ УСЛУГИ — ПЛАШКОЙ С ФОНОМ (просьба владельца).
   Текст описания получает полупрозрачную белую подложку со скруглением, чтобы
   читался как отдельный блок, а не «голый» текст на цветном фоне карточки. */
html body .ad-paid-services-list-item.tl-svctile .tl-svctile-desc{background-image:none !important;border:0 !important;border-radius:10px !important;padding:8px 10px !important;margin:6px 0 10px !important;color:#3a3750 !important;font-weight:600 !important;font-size:12.5px !important;line-height:1.4 !important;}
/* ЧАСТЬ 134 (19.09.2026): ПОДЛОЖКА ОПИСАНИЯ — ЦВЕТ УСЛУГИ, ТЕКСТ ПЛОТНЕЕ.
   Владелец: подложка должна быть в тон карточки (чуть темнее), текст — жирнее и темнее.
   Цвет подложки задаётся в разметке (третий цвет палитры услуги) — здесь снимаем
   конфликтующий фон, если он остался от прежнего правила. */
html body .ad-paid-services-list-item.tl-svctile .tl-svctile-desc{color:#3a3750 !important;font-weight:600 !important;}
/* ЧАСТЬ 135 (19.09.2026): ФОН У ТЕКСТА ОПИСАНИЯ УБРАН (просьба владельца).
   Подложка отменена — описание снова просто текст на фоне карточки. */
html body .ad-paid-services-list-item.tl-svctile .tl-svctile-desc{background:transparent !important;background-color:transparent !important;background-image:none !important;border:0 !important;box-shadow:none !important;padding:0 !important;border-radius:0 !important;margin:6px 0 10px !important;color:#3a3750 !important;font-weight:600 !important;}.wiz-136-anchor{--tl-136:0}
.not-found-title-container-image + p{border:1px solid var(--border-soft) !important;background-color:var(--surface-2) !important;border-radius:999px !important;padding:8px 16px !important;box-shadow:none !important;}
@media (max-width:575px){.not-found-title-container-image + p{padding:7px 13px !important;}}
/* >>> ЧАСТЬ 136 (21.09.2026): ПОДПИСЬ ПУСТОГО СОСТОЯНИЯ — ТЕКСТ НЕ ПРИЛИПАЕТ К РАМКЕ <<<
   Владелец (21.09.2026) прислал страницу магазина: в блоках «Лотов нет» и «Отзывов нет»
   подпись стояла внутри собственной рамки (правило части 15: .not-found-title-container-image + p
   получает background/border/radius) БЕЗ внутренних отступов — то есть текст упирался в рамку.
   ЗАМЕР «ДО» (живой Chrome, 1440 и 390 px, /shop/<alias> и /user/card/<alias>,
   инструмент _deploy/tradelot_tools/_tl_empty_probe.js):
     <p> «Лотов нет»: padding 0/0/0/0, border 1px solid #dcdce0, radius 14px, height 26,
     воздух до пунктирной рамки контейнера 25 px (десктоп) / 23 px (телефон).
   ЧТО СДЕЛАНО: подпись оформлена аккуратной «таблеткой» — воздух внутри 8/16 (7/13 на телефоне),
   радиус 999px, фон --surface-2, рамка --border-soft. Внешняя пунктирная плашка
   (.not-found-title-container, padding 24/22, radius 24) не тронута — воздуха в ней достаточно.
   Правится ОДНО правило, значит исправляются сразу все такие подписи на сайте.
   ПОРЯДОК ВНУТРИ ЧАСТИ: сначала якорь, затем правила БЕЗ комментариев между ними,
   и только ПОТОМ это пояснение — Chrome выбрасывает первое правило сразу после большого
   комментария (находка исполнителя мастера, проверено разбором CSSOM). */