/* База знаний (/help) — вся собственная разметка страниц: шапка (гостевая
   переиспользуется как есть из header.html/footer.html, без второго
   состояния — см. ниже, у полосы поиска), сетка разделов, документ
   статьи, блоки «где/кому доступно», подсказки, оглавление, экран-обёртка.

   Классы экранов продукта (.app, .tbl, .bd, .wiz, .prod, .ph, .sit…) сюда
   НЕ входят — они целиком в help-screens.css (копия wave1/screens/_screens.css,
   не редактируется). Здесь — обёртка вокруг них (.hlp-ui-*).

   Все селекторы с префиксом hlp- — сознательно: landing.css и tsekh360.css
   уже занимают короткие имена вроде .nav, .hero, .crumbs, .steps, .badge,
   .chip, .toc, .lead, .app (общий сброс страницы это тихо не поймает, см.
   правило «занятые имена в дизайн-системе» в CLAUDE.md) — префикс исключает
   коллизию, а не полагается на порядок подключения файлов.

   Экраны продукта (_screens.css/_screens2.css) этим приёмом не защищены —
   их классы не редактируются и переименовать нельзя. Волна 2 столкнула
   .cc-btn (карточка клиента, help-screens2.css) с .cc-btn лендинга —
   это КНОПКА СОГЛАСИЯ НА COOKIE («Принять cookies», #cc .cc-btn.cc-yes в
   layout.html, есть на КАЖДОЙ странице сайта, не только /help). Обе
   декларации — голый класс, специфичность (0,1,0), выигрывает та, что
   подключена позже — help-screens2.css грузится после landing.css в
   каждом <head> /help. Правки исходника нет и не может быть; исправление —
   ниже, отдельным блоком с явной специфичностью (1,1,0) через #cc, а не
   переименование. */

.p-help{
  --hlp-hint:#9A9A9A;
  --hlp-text:#2F2F2F;
  --hlp-line-soft:var(--border-subtle);
  --hlp-doc:17px;--hlp-doc-lh:1.68;
  --hlp-col-nav:220px;--hlp-col-toc:190px;--hlp-gap:48px;
  --hlp-text-w:760px;

  /* help-screens.css = копия wave1/screens/_screens.css (не редактируется,
     см. шапку build-help.js) — она ссылается на переменные прототипа
     (--ink/--line/--muted/…), которых нет ни в одном другом файле сайта.
     Объявлены здесь, а не в самом _screens.css, и сознательно только под
     .p-help, а не в глобальном :root — иначе имена вроде --line рисковали
     бы однажды столкнуться с токеном, который появится в дизайн-системе. */
  --ink:var(--text-primary);
  --muted:var(--text-secondary);
  --hint:var(--hlp-hint);
  --line:var(--border);
  --line-soft:var(--hlp-line-soft);
  --page:var(--surface-2);
  --bad:var(--error);
  /* --ok — волна 4 (_screens4.css): та же прототипная роль «успех/готово»,
     что и --bad для «ошибка/просрочено» — один токен и на текст (.s-oc-fr
     .s-ok, .s-tm-act, .s-green, .s-pu-t .s-ok), и на заливку полосы
     прогресса (.s-oc-prg s), зеркалит --bad:var(--error) построчно выше.
     Без этой строки сборка падает на assertCustomPropsDefined() —
     var(--ok) не резолвился нигде на сайте (проверено `node build.js`). */
  --ok:var(--success);
  --accent-bg:var(--accent-soft);
  --accent-dark:var(--accent-hover);
}

/* ───── кнопка согласия на cookie — восстановление после коллизии имени ─────
   help-screens2.css (волна 2, карточка клиента) несёт свой .cc-btn, голым
   классом, специфичность (0,1,0) — ровно как у .cc-btn/.cc-yes в landing.css,
   которые задают КНОПКУ СОГЛАСИЯ НА COOKIE (#cc, есть на каждой странице
   сайта). help-screens2.css в /help грузится позже landing.css, и при
   равной специфичности позже подключённое правило выигрывает по свойствам,
   которые объявляют оба: font-size/padding/border-radius/border у обеих,
   background/color — у .cc-btn волны 2 и у .cc-yes лендинга. Экран
   редактировать нельзя, поэтому чиним здесь — тем же приёмом, что и
   недостающие переменные выше: явная специфичность (1,1,0) через #cc,
   а не переименование. Значения — дословно то, что уже в landing.css. */
#cc .cc-btn{font-family:inherit;font-size:13.5px;font-weight:var(--fw-medium);line-height:1;padding:10px 16px;border-radius:var(--radius-sm);border:1px solid transparent;cursor:pointer;white-space:nowrap;transition:background-color .2s var(--ease)}
#cc .cc-yes{background:var(--accent);color:#fff}
#cc .cc-yes:hover{background:var(--accent-hover)}
@media(max-width:560px){
  #cc .cc-btn{width:100%;text-align:center}
}

/* ───── поле формы-заглушки «Мастер настройки — шаг 3» — восстановление
   после коллизии имени ─────
   Задача landing/help-polish, п.2б: «Сумма договора» и «Клиент» в
   onboarding-order.html — единственные два поля с классом-модификатором
   .s-fld.s-ph («placeholder», незаполненное поле — используется ТОЛЬКО в
   этом экране). Тот же .s-ph отдельным, ГОЛЫМ классом несёт совсем другой
   смысл в help-screens.css — корневая обёртка экрана телефона рабочего
   (worker-phone.html, «.s-ph» = «телефон», не «placeholder»):
   .s-ph{max-width:360px;margin:0 auto;padding:14px 12px;font:13px/1.45…}.
   Специфичность (0,1,0) у телефонного .s-ph ниже, чем (0,3,0) у
   .s-wiz-form .s-fld.s-ph{color:…} — но специфичность сравнивается ПО
   СВОЙСТВУ, а не по правилу целиком: .s-wiz-form .s-fld.s-ph трогает только
   color, max-width и margin остаются целиком за телефонным .s-ph. Отсюда и
   баг: у обоих полей max-width:360px и margin-left/right:auto — те самые
   «узкие поля посередине», не задуманная вёрстка, а бесплатное наследие
   чужого экрана. Замерено (1440px, /help/getting-started/pervyy-zapusk,
   ДО правки): max-width 360px, margin-left 50.15px, margin-right 50.16px.
   Экран не редактируется — чиним тем же приёмом, что и .cc-btn/.p-help
   section выше: своё правило с заведомо более высокой специфичностью,
   а не переименование. */
.s-wiz-form .s-fld.s-ph{max-width:none;margin:0 0 9px}

/* ───── поиск в сайдбаре (задача landing/nav-and-search) ─────
   Было: отдельная полоса-плашка под шапкой на каждой статье/категории —
   «второй этаж» (жалоба задания). Убрана целиком: .hlp-side-search теперь
   живёт ВНУТРИ левой колонки .hlp-page, над .hlp-side-nav — там же, где
   макет nav-search-preview.html её показывает (оформление — своё, дизайн-
   система сайта, не макет: там только структура и поведение).

   .hlp-side (обёртка над .hlp-side-search + .hlp-side-nav) — sticky САМА,
   но БЕЗ overflow — тот же приём, что снимает .hlp-hero::-hidden ниже.
   Прокрутка длинного списка разделов остаётся на .hlp-side-nav (как и
   была до этой задачи), НЕ переезжает на общую обёртку: переехав, она бы
   обрезала выпадающий список подсказок поиска ровно тем же способом, что
   табу задание просит починить (п.4) — .hlp-sres лежит внутри
   .hlp-side-search, а тот, будь у .hlp-side overflow, оказался бы её
   потомком. .hlp-side-nav ниже — сосед .hlp-side-search, не родитель:
   его собственный overflow-y:auto не задевает поле поиска вообще.
   top:87px — .nav 71px (высота+граница, тот же расчёт, что был у снятой
   полосы) + 16px (--space-4) зазора, чтобы поиск не облипал шапку при
   скролле встык. */
.hlp-side{position:sticky;top:87px}
.hlp-side-search{position:relative;margin-bottom:var(--space-6, 24px)}
.hlp-side-search-form{display:flex;align-items:center;gap:8px;border:1px solid var(--border);
  border-radius:10px;padding:9px 11px;background:#fff;transition:border-color .15s var(--ease),box-shadow .15s var(--ease)}
.hlp-side-search-form:focus-within{border-color:var(--accent-border);box-shadow:0 0 0 3px var(--accent-soft)}
.hlp-side-search-form svg{flex:none;stroke:var(--hlp-hint);pointer-events:none}
.hlp-side-search-form input{font:14.5px/1 var(--font-sans);border:0;outline:0;width:100%;
  background:transparent;color:var(--text-primary)}
.hlp-side-search-form input::placeholder{color:var(--hlp-hint)}

/* ───── результаты поиска (dropdown) — общий вид у большого/сайдбарного/
   строчного полей ───── */
.hlp-sres{position:absolute;left:0;right:0;top:calc(100% + 6px);background:#fff;border:1px solid var(--border);
  border-radius:12px;box-shadow:0 14px 38px rgba(0,0,0,.12);padding:6px;text-align:left;display:none;z-index:120;
  max-height:440px;overflow:auto}
.hlp-sres.hlp-open{display:block}
.hlp-sres a{display:block;padding:9px 12px;border-radius:8px;text-decoration:none}
.hlp-sres a:hover{background:var(--surface-2)}
.hlp-sres .hlp-sres-t{font-size:14px;font-weight:600;color:var(--text-primary);display:block;margin-bottom:2px}
.hlp-sres .hlp-sres-m{font-size:12px;color:var(--hlp-hint);display:block}
.hlp-sres .hlp-sres-m b{color:var(--text-secondary);font-weight:500}
.hlp-sres mark{background:#FFF1CC;color:inherit;border-radius:2px}
.hlp-sres .hlp-sres-none{padding:16px 12px;font-size:13.5px;color:var(--text-secondary)}
/* Сайдбарное поле — 220px (--hlp-col-nav), список подсказок шире самого
   поля (задача, баг «подсказки обрезаются» — п.4): width:100% на 220px
   был бы нечитаем — три слова заголовка уже не помещаются в строку.
   max(100%,340px) — не уже поля (растягивался бы, будь контент шире), и
   не уже 340px минимум, тот же приём, что в макете. На мобильном (одна
   колонка ≥660px контента) 100% уже даёт комфортную ширину — отдельный
   override не нужен: max(100%,340px) на content-box ~660+ даёт 100% САМ,
   не 340px. Своя прокрутка — min(60vh,380px): без нижнего предела длинный
   список подсказок на низком окне ушёл бы за нижний край экрана — ни у
   ОДНОГО родителя (.hlp-side — overflow-y:auto, но .hlp-sres — потомок
   .hlp-side-search, НЕ .hlp-side-nav, где живёт этот overflow) нет
   overflow:hidden, который бы это дополнительно обрезал. */
.hlp-side-search .hlp-sres{width:max(100%,340px);max-height:min(60vh,380px)}
.hlp-bigsearch{position:relative}

/* ───── главная ───── */
/* Тот же класс коллизии, что описан в шапке файла про .cc-btn — только
   через голый тег, не через класс. landing.css несёт сайтовое
   section{padding:var(--space-24) 0} (96px), без области действия: оно
   применяется к ЛЮБОМУ <section> на сайте, а /help грузит landing.css
   ради общей шапки и подвала (см. header.html/footer.html), не только
   ради них. .hlp-hero и .hlp-sect ни разу не объявляли свой padding —
   нечему было перебить сайтовое правило, и оно молча добавляло 96px
   сверху и снизу к каждой секции, поверх её собственного намеренного
   отступа (у .hlp-hero-in — 68/72px, у .hlp-sect — margin:48px). Отсюда
   и был «разрыв в пол-экрана» между «Разделы» и «Быстрый старт»: не одна
   правка ритма, а сложенные вместе намеренный отступ и случайный чужой.
   Специфичность (0,1,1) у .p-help section, выше голого (0,0,1) у section
   в landing.css — побеждает при любом порядке подключения файлов, как и
   у .cc-btn выше. Дальше отступы — только своим margin/padding ниже. */
.p-help section{padding:0}
/* overflow:hidden — БЫЛО, снято задачей landing/nav-and-search (баг «подсказки
   обрезаются», п.4: «скорее всего overflow у hero» — им и оказался). Держал
   градиентное свечение .hlp-hero::before, которое не выходило за пределы
   секции — тот псевдоэлемент убран другой задачей (landing/help-polish,
   п.1а, «убрать градиент совсем»), и с тех пор overflow:hidden ничего не
   стриг, кроме как раз .hlp-sres — выпадающий список подсказок под большим
   полем поиска, ниже 100% высоты секции, обрезался ровно этим правилом.
   Ничего внутри .hlp-hero больше не требует обрезки. */
.hlp-hero{background:#fff;border-bottom:1px solid var(--border);position:relative}
.hlp-hero-in{padding:68px 40px 72px;text-align:center;position:relative}
.hlp-hero-lab{font-size:11.5px;font-weight:600;letter-spacing:1.2px;text-transform:uppercase;color:var(--accent-hover);margin-bottom:14px}
.hlp-hero h1{margin:0 0 10px;font-size:38px;line-height:1.15;color:var(--text-primary);letter-spacing:-.8px}
.hlp-hero-in>p{margin:0 auto 30px;color:var(--text-secondary);font-size:17px;line-height:1.55;max-width:600px}
.hlp-bigsearch{max-width:660px;margin:0 auto}
.hlp-bigsearch form{position:relative}
.hlp-bigsearch input{width:100%;height:56px;border:1px solid var(--border);border-radius:13px;background:#fff;
  padding:0 16px 0 48px;font:16px var(--font-sans);color:var(--text-primary);outline:none;box-shadow:0 2px 10px rgba(26,26,26,.05)}
.hlp-bigsearch input:focus{border-color:var(--accent);box-shadow:0 0 0 4px var(--accent-soft),0 2px 10px rgba(252,64,0,.10)}
.hlp-bigsearch svg{position:absolute;left:18px;top:19px;stroke:var(--hlp-hint);pointer-events:none}
/* Пины — не ссылки на статьи, а кнопки: клик вставляет ярлык в поле поиска
   и запускает тот же живой поиск, что и набор руками (задача
   landing/help-polish, см. wireSearchBox()/initHeroChips() в help.js). Раньше
   это были <a href> прямо на статью — смена тега на <button> ввозит все
   умолчания кнопки, которых не было у ссылки (см. правило в CLAUDE.md
   «смена тега импортирует все умолчания»): appearance, произвольный
   font-family вместо унаследованного, cursor:default, UA-отступ. Гасим их
   явно, а не оставляем на волю браузера. */
.hlp-chips{max-width:660px;margin:14px auto 0;display:flex;flex-wrap:wrap;gap:7px;justify-content:center}
.hlp-chips button{appearance:none;-webkit-appearance:none;background:var(--surface-2);border:1px solid var(--border);
  border-radius:20px;padding:5px 13px;margin:0;font:13px/1.3 var(--font-sans);color:var(--text-primary);cursor:pointer}
.hlp-chips button:hover{border-color:var(--accent-border);color:var(--accent-active);background:#fff}
.hlp-chips button:focus-visible{outline:2px solid var(--accent-border);outline-offset:2px}

.hlp-sect{margin:48px 0 0}
.hlp-sect:last-child{margin-bottom:60px}
.hlp-sect-h{display:flex;align-items:baseline;gap:10px;margin:0 0 18px}
.hlp-sect-h h2{margin:0;font-size:20px;color:var(--text-primary);letter-spacing:-.3px}
.hlp-sect-h span{font-size:13px;color:var(--hlp-hint)}

.hlp-cats{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:16px}
.hlp-cat{background:#fff;border:1px solid var(--border);border-radius:14px;padding:18px 18px 14px;text-decoration:none;display:block}
.hlp-cat:hover{border-color:var(--accent-border)}
.hlp-cat-ic{width:30px;height:30px;border-radius:8px;background:var(--surface-2);display:grid;place-items:center;margin-bottom:11px}
.hlp-cat-ic svg{stroke:var(--text-primary);fill:none;stroke-width:1.6;stroke-linecap:round;stroke-linejoin:round}
.hlp-cat h3{margin:0 0 4px;font-size:15px;color:var(--text-primary)}
.hlp-cat p{margin:0 0 12px;font-size:12.5px;color:var(--text-secondary);line-height:1.45;min-height:36px}
/* Раньше одна строка с text-overflow:ellipsis обрывала заголовок
   посреди слова («Завести маршрут изделия: опера…») — по такому огрызку
   не понять тему статьи. Две строки, обрезаются только если не влезли
   и в них (задача landing/help-polish, п.3): -webkit-line-clamp сам
   рисует многоточие на границе слова, а не строки посимвольно, и не
   требует text-overflow/white-space — тот приём для однострочного
   overflow, здесь другой механизм. */
.hlp-cat-li{font-size:13px;color:var(--hlp-text);padding:5px 0;border-top:1px solid var(--hlp-line-soft);
  line-height:1.4;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.hlp-cat-more{font-size:12px;color:var(--hlp-hint);padding-top:6px}

.hlp-start{background:#fff;border:1px solid var(--border);border-radius:14px;padding:20px 22px}
.hlp-start-h{display:flex;align-items:center;gap:12px;margin-bottom:14px}
.hlp-start-h b{font-size:16px;color:var(--text-primary)}
.hlp-start-h span{font-size:13px;color:var(--text-secondary)}
.hlp-start-l{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:0 26px}
.hlp-start-l a{display:flex;align-items:center;gap:12px;padding:10px 0;text-decoration:none;border-top:1px solid var(--hlp-line-soft)}
.hlp-start-l a:hover .hlp-start-t{color:var(--accent-hover)}
.hlp-start-n{width:23px;height:23px;border-radius:50%;background:var(--accent-soft);color:var(--accent-hover);
  font-size:12px;font-weight:600;display:grid;place-items:center;flex:0 0 auto}
.hlp-start-t{font-size:14px;font-weight:500;color:var(--text-primary)}

.hlp-support{background:#fff;border:1px solid var(--border);border-radius:14px;padding:22px 24px;
  display:flex;align-items:center;gap:18px;flex-wrap:wrap}
.hlp-support div{flex:1;min-width:240px}
.hlp-support b{display:block;font-size:15px;color:var(--text-primary);margin-bottom:3px}
.hlp-support p{margin:0;font-size:13.5px;color:var(--text-secondary)}
.hlp-btn{display:inline-flex;align-items:center;gap:7px;height:38px;padding:0 17px;border-radius:9px;background:var(--accent);
  color:#fff;text-decoration:none;font-size:14px;font-weight:600;border:0;white-space:nowrap}
.hlp-btn:hover{background:var(--accent-hover)}

/* ───── сетка внутренних страниц (категория, статья) ───── */
.hlp-page{display:grid;grid-template-columns:var(--hlp-col-nav) minmax(0,1fr) var(--hlp-col-toc);gap:var(--hlp-gap);
  padding:28px 0 72px;align-items:start}
.hlp-page--no-toc{grid-template-columns:var(--hlp-col-nav) minmax(0,1fr)}

/* Своя прокрутка — как и до задачи landing/nav-and-search, только высота
   теперь считается от .hlp-side-search над этим блоком, не от шапки
   напрямую: 87px (top обёртки .hlp-side) + высота поля поиска с отступом
   (~56px, замерено) + собственный запас снизу 20px. sticky здесь больше
   НЕТ — она на .hlp-side (см. комментарий там); свой overflow-y здесь
   ОСТАЁТСЯ — он не трогает .hlp-side-search, они соседи, не родитель и
   потомок. */
.hlp-side-nav{font-size:13.5px;max-height:calc(100vh - 163px);overflow-y:auto;padding-bottom:20px}
.hlp-nav-g{margin-bottom:3px}
.hlp-nav-c{display:flex;align-items:center;gap:6px;padding:6px 8px;border-radius:7px;color:var(--hlp-text);
  text-decoration:none;font-weight:500}
.hlp-nav-c:hover{background:#fff}
.hlp-nav-c.hlp-on{color:var(--text-primary);font-weight:600}
/* Раскрывающийся список рабочий — клик по всей строке переключает группу
   (initSideNav() в help.js), проверено: закрытая группа открывается,
   открытая ранее закрывается. Стрелка при этом рисовалась 10px тусклым
   --hlp-hint — на глаз неотличима от опечатки в вёрстке (жалоба задачи
   landing/help-polish, п.8). Раз список рабочий, стрелку не убираем —
   делаем её похожей на элемент управления: крупнее и темнее, не переносим
   логику. */
.hlp-nav-c .hlp-ar{margin-left:auto;color:var(--hlp-text);font-size:13px;transition:transform .15s}
.hlp-nav-g.hlp-open .hlp-nav-c .hlp-ar{transform:rotate(90deg)}
.hlp-nav-l{display:none;margin:2px 0 8px;padding-left:9px;border-left:1px solid var(--border)}
.hlp-nav-g.hlp-open .hlp-nav-l{display:block}
.hlp-nav-l a{display:block;padding:5px 8px;border-radius:6px;color:var(--text-secondary);text-decoration:none;font-size:13px;line-height:1.35}
.hlp-nav-l a:hover{color:var(--text-primary);background:#fff}
.hlp-nav-l a.hlp-on{color:var(--accent-hover);font-weight:600;background:var(--accent-soft)}
.hlp-nav-l .hlp-soon{font-style:normal;font-size:10.5px;color:var(--hlp-hint)}

/* ───── документ ───── */
.hlp-doc{min-width:0}
.hlp-crumbs{font-size:12.5px;color:var(--hlp-hint);margin-bottom:12px}
.hlp-crumbs a{color:var(--text-secondary);text-decoration:none}
.hlp-crumbs a:hover{color:var(--accent-hover)}
.hlp-crumbs i{font-style:normal;padding:0 6px}

.hlp-badge{display:inline-flex;align-items:center;gap:6px;font-size:11.5px;font-weight:600;letter-spacing:.3px;
  text-transform:uppercase;padding:3px 9px;border-radius:5px;background:var(--accent-soft);color:var(--accent-hover)}
.hlp-badge.hlp-badge--trouble{background:var(--error-soft);color:#B3261E}
.hlp-badge.hlp-badge--concept{background:#EEF2FF;color:#3538CD}
.hlp-badge.hlp-badge--gs{background:var(--success-soft);color:var(--success-text)}
.hlp-meta{display:flex;align-items:center;gap:12px;margin-bottom:14px}
.hlp-meta .hlp-rd{font-size:12.5px;color:var(--hlp-hint)}

.hlp-doc h1{font-size:30px;line-height:1.22;margin:0 0 14px;color:var(--text-primary);letter-spacing:-.5px;max-width:var(--hlp-text-w)}
.hlp-lead{font-size:18px;line-height:1.58;color:var(--text-secondary);margin:0 0 24px;max-width:var(--hlp-text-w)}
.hlp-doc h2{font-size:23px;line-height:1.3;margin:38px 0 12px;color:var(--text-primary);letter-spacing:-.3px;max-width:var(--hlp-text-w);scroll-margin-top:130px}
.hlp-doc h3{font-size:18px;margin:26px 0 8px;color:var(--text-primary);max-width:var(--hlp-text-w)}
.hlp-doc p{font-size:var(--hlp-doc);line-height:var(--hlp-doc-lh);margin:0 0 15px;max-width:var(--hlp-text-w)}
.hlp-doc ul,.hlp-doc ol{font-size:var(--hlp-doc);line-height:var(--hlp-doc-lh);max-width:var(--hlp-text-w);padding-left:22px;margin:0 0 17px}
.hlp-doc li{margin-bottom:7px}
.hlp-doc li::marker{color:var(--hlp-hint)}
.hlp-doc strong{color:var(--text-primary);font-weight:600}
/* Ссылка внутри текста статьи. Первая появилась в tarify-i-limity — до неё
   ни одна ссылка нигде не жила ВНУТРИ рендеренного markdown, и без правила
   она тонула бы в сайтовом сбросе a{color:inherit;text-decoration:none}
   (landing.css).

   СКОУП — .hlp-body, НЕ .hlp-doc. Внутри .hlp-doc кроме текста статьи лежат
   .hlp-crumbs, .hlp-toc-m, .hlp-rel, .hlp-ask — у каждого свои ссылки со
   своим стилем, и `.hlp-doc a` их бы перебило: с .hlp-crumbs a та же
   специфичность (0,1,1), победа была бы по порядку объявления (у нас ниже —
   значит выигрывает, ломает цвет и декорацию крошек); с .hlp-lnk (0,1,0)
   проиграл бы уже не порядок, а сама специфичность (0,1,1 всегда выше),
   и кнопка «Написать в поддержку» получила бы подчёркивание. .hlp-body —
   обёртка только вокруг рендеренного markdown статьи (article.html в
   build-help.js), ничего из перечисленного внутрь не попадает. */
.hlp-body a{color:var(--accent-active);text-decoration:underline;text-underline-offset:2px;transition:color .2s var(--ease)}
.hlp-body a:hover{color:var(--accent-hover)}

.hlp-cat-h{margin-bottom:24px}
.hlp-cat-h h1{font-size:28px;margin:0 0 8px;color:var(--text-primary);letter-spacing:-.4px}
.hlp-cat-h p{font-size:16px;color:var(--text-secondary);margin:0;max-width:640px}
.hlp-grp{margin-bottom:26px}
.hlp-grp-t{font-size:12px;letter-spacing:.5px;text-transform:uppercase;color:var(--hlp-hint);font-weight:600;margin-bottom:9px}
.hlp-art{display:flex;align-items:center;gap:12px;background:#fff;border:1px solid var(--border);border-radius:11px;
  padding:13px 16px;text-decoration:none;margin-bottom:8px;max-width:860px}
.hlp-art:hover{border-color:var(--accent-border)}
.hlp-art-t{display:block;font-size:15px;font-weight:600;color:var(--text-primary)}
.hlp-art-d{display:block;font-size:12.5px;color:var(--hlp-hint);margin-top:2px}
.hlp-art-go{margin-left:auto;color:var(--hlp-hint)}
.hlp-soon{font-style:normal;font-size:11px;font-weight:600;color:var(--hlp-hint);text-transform:none;letter-spacing:0}

/* «где находится» и «кому доступно» */
.hlp-where{display:flex;flex-wrap:wrap;gap:8px 22px;margin:0 0 26px;padding:12px 16px;background:#fff;
  border:1px solid var(--border);border-radius:10px;max-width:var(--hlp-text-w);font-size:13.5px}
.hlp-where div{display:flex;align-items:center;gap:8px}
.hlp-where b{font-size:11px;letter-spacing:.5px;text-transform:uppercase;color:var(--hlp-hint);font-weight:600}
.hlp-where span{color:var(--text-primary);font-weight:500}
.hlp-where-path{display:inline-flex;align-items:center;gap:6px;background:var(--surface-2);border:1px solid var(--border);
  border-radius:6px;padding:3px 9px;font-size:13px}

.hlp-note{border-radius:11px;padding:15px 18px;margin:22px 0;font-size:15.5px;line-height:1.6;max-width:var(--hlp-text-w);border:1px solid}
.hlp-note b{display:block;font-size:12px;letter-spacing:.5px;text-transform:uppercase;margin-bottom:5px}
.hlp-note--warn{background:#FFF8E6;border-color:#F3E3B8}.hlp-note--warn b{color:#9A6700}
.hlp-note--tip{background:var(--success-soft);border-color:var(--success-border)}.hlp-note--tip b{color:var(--success-text)}

/* Общий стиль нумерованных шагов: и обычный markdown "1. …", и сырой
   <ol class="steps"> из исходников статей — оба в итоге просто <ol> внутри
   .hlp-doc, поэтому одно правило покрывает обе формы. */
.hlp-doc ol{counter-reset:hlps;list-style:none;padding:0;margin:0 0 20px;max-width:var(--hlp-text-w)}
.hlp-doc ol>li{counter-increment:hlps;position:relative;padding-left:38px;margin-bottom:14px;font-size:var(--hlp-doc);line-height:1.62}
.hlp-doc ol>li::before{content:counter(hlps);position:absolute;left:0;top:0;width:25px;height:25px;border-radius:50%;
  background:var(--text-primary);color:#fff;font-size:13px;font-weight:600;display:grid;place-items:center}

/* ───── блок интерфейса (обёртка над экранами из help-screens.css) ───── */
.hlp-ui{margin:24px 0 8px;width:calc(100% + 24px * 2);margin-left:-24px}
.hlp-ui.hlp-ui--narrow{width:100%;margin-left:0}
.hlp-ui-top{display:flex;align-items:center;gap:9px;margin-bottom:7px;padding:0 2px}
.hlp-ui-lab{font-size:11.5px;font-weight:600;letter-spacing:.4px;text-transform:uppercase;color:var(--hlp-hint)}
.hlp-ui-lab i{font-style:normal;color:var(--accent-hover)}
.hlp-sp{flex:1}
.hlp-ui-exp{display:inline-flex;align-items:center;gap:6px;font-size:12.5px;color:var(--text-secondary);background:#fff;
  border:1px solid var(--border);border-radius:7px;padding:4px 10px;cursor:pointer;font-family:inherit}
.hlp-ui-exp:hover{border-color:var(--accent-border);color:var(--accent-hover)}
.hlp-ui-wrap{position:relative}
.hlp-ui-body{position:relative;background:#fff;border:1px solid var(--border);border-radius:12px;overflow:hidden}
.hlp-ui-cap{font-size:12.5px;color:var(--hlp-hint);margin:8px 2px 24px;max-width:var(--hlp-text-w)}
.hlp-ui-swipe{display:none;font-size:12px;color:var(--hlp-hint);margin:7px 2px 0}
.hlp-ui.hlp-scrollable .hlp-ui-swipe{display:block}
.hlp-ui.hlp-scrollable .hlp-ui-wrap::after{content:"";position:absolute;right:1px;top:1px;bottom:1px;width:44px;border-radius:0 11px 11px 0;
  background:linear-gradient(to right,rgba(255,255,255,0),rgba(255,255,255,.96));pointer-events:none}

.hlp-hl{position:absolute;border:2px solid var(--accent);border-radius:8px;pointer-events:none;z-index:5;
  box-shadow:0 0 0 9999px rgba(26,26,26,.42)}
.hlp-hl.hlp-hl--plain{box-shadow:none}
.hlp-hl .hlp-hl-n{position:absolute;left:-13px;top:-13px;width:25px;height:25px;border-radius:50%;background:var(--accent);
  color:#fff;font-size:13px;font-weight:700;display:grid;place-items:center;box-shadow:0 2px 6px rgba(0,0,0,.25)}
.hlp-hl .hlp-hl-tip{position:absolute;left:0;top:calc(100% + 9px);background:var(--text-primary);color:#fff;font-size:12.5px;
  line-height:1.45;padding:7px 11px;border-radius:8px;width:max-content;max-width:250px;white-space:normal}
.hlp-hl .hlp-hl-tip.hlp-up{top:auto;bottom:calc(100% + 9px)}
.hlp-hl .hlp-hl-tip::before{content:"";position:absolute;left:14px;top:-4px;width:8px;height:8px;background:var(--text-primary);transform:rotate(45deg)}
.hlp-hl .hlp-hl-tip.hlp-up::before{top:auto;bottom:-4px}
.hlp-hl .hlp-hl-tip.hlp-r::before{left:auto;right:14px}

/* Высота модалки — по содержимому, окно центрируется по вертикали (задача
   landing/help-polish, п.2а). Было: .hlp-modal-b{flex:1} — растягивало белый
   блок на ВСЁ, что осталось от вертикали после шапки, всегда, независимо от
   реальной высоты экрана внутри: у невысоких экранов снизу оставалось пустое
   белое поле.

   Правка держится на двух вещах разом, обе обязательны:
   — .hlp-modal.hlp-open{justify-content:center} центрирует ГРУППУ (шапка +
     тело) по вертикали, когда группе не нужна вся высота контейнера;
   — .hlp-modal-b{flex:0 1 auto;min-height:0} — flex-basis:auto берёт высоту
     СОДЕРЖИМОГО (а не «всё, что осталось»), flex-shrink:1 позволяет сжаться,
     когда места не хватает, а min-height:0 снимает умолчание браузера
     min-height:auto у flex-элементов — без него блок не сжимается НИЖЕ
     высоты своего содержимого, и версия с overflow:auto для внутренней
     прокрутки не работает вовсе (проверено: без min-height:0 модалка вместо
     скролла внутри толкала прокрутку всей страницы).
   Результат для высокого экрана: занимает всю высоту контейнера минус шапка
   (align к контейнеру — flex-shrink исчерпал свободное место), своя
   прокрутка внутри .hlp-modal-b (overflow:auto уже был). Для невысокого:
   группа меньше высоты контейнера — flex-shrink не нужен, .hlp-modal-b
   встаёт на высоту контента, и justify-content:center кладёт всю группу по
   центру. Один и тот же CSS покрывает оба случая без медиазапроса и без JS. */
.hlp-modal{position:fixed;inset:0;background:rgba(26,26,26,.6);z-index:200;display:none;padding:30px}
.hlp-modal.hlp-open{display:flex;flex-direction:column;justify-content:center}
.hlp-modal-h{display:flex;align-items:center;gap:12px;color:#fff;font-size:14px;margin-bottom:12px;flex:0 0 auto}
.hlp-modal-h b{font-weight:600}
.hlp-modal-h span{opacity:.6;font-size:12.5px}
.hlp-modal-x{margin-left:auto;background:rgba(255,255,255,.14);border:0;color:#fff;width:32px;height:32px;
  border-radius:8px;cursor:pointer;font-size:17px;line-height:1}
.hlp-modal-b{flex:0 1 auto;min-height:0;background:#fff;border-radius:12px;overflow:auto;position:relative}

.hlp-toc{position:sticky;top:126px;font-size:12.5px;padding-left:14px;border-left:1px solid var(--border)}
.hlp-toc b{display:block;font-size:11px;letter-spacing:.6px;text-transform:uppercase;color:#B0ACA7;margin-bottom:10px;font-weight:600}
.hlp-toc a{display:block;padding:5px 0;color:#8E8A85;text-decoration:none;line-height:1.4}
.hlp-toc a:hover{color:var(--text-primary)}
.hlp-toc a.hlp-on{color:var(--accent-hover);font-weight:600}
.hlp-toc-m{display:none}

.hlp-rel{margin:38px 0 0;padding:18px 20px;background:#fff;border:1px solid var(--border);border-radius:12px;max-width:var(--hlp-text-w)}
.hlp-rel b{display:block;font-size:11.5px;letter-spacing:.5px;text-transform:uppercase;color:var(--hlp-hint);margin-bottom:9px}
.hlp-rel a{display:block;padding:5px 0;color:var(--hlp-text);text-decoration:none;font-size:14.5px}
.hlp-rel a:hover{color:var(--accent-hover)}
.hlp-feed{margin:20px 0 0;padding:14px 20px;background:#fff;border:1px solid var(--border);border-radius:12px;
  display:flex;align-items:center;gap:10px;max-width:var(--hlp-text-w);font-size:14px;flex-wrap:wrap}
.hlp-feed-b{border:1px solid var(--border);border-radius:7px;padding:4px 14px;cursor:pointer;font-size:13.5px}
.hlp-feed-b:hover{border-color:var(--accent);color:var(--accent-hover)}
.hlp-feed-b.hlp-picked{border-color:var(--accent);color:var(--accent-hover);background:var(--accent-soft)}
.hlp-ask{margin:10px 0 0;padding:15px 20px;background:#fff;border:1px solid var(--border);border-radius:12px;
  display:flex;align-items:center;gap:14px;max-width:var(--hlp-text-w);flex-wrap:wrap}
.hlp-ask div{flex:1;min-width:200px}
.hlp-ask b{display:block;font-size:14.5px;color:var(--text-primary)}
.hlp-ask p{margin:2px 0 0;font-size:13px;color:var(--text-secondary)}
.hlp-lnk{display:inline-flex;align-items:center;height:34px;padding:0 14px;border-radius:8px;background:#fff;
  border:1px solid var(--border);color:var(--text-primary);text-decoration:none;font-size:13.5px;font-weight:500}
.hlp-lnk:hover{border-color:var(--accent-border);color:var(--accent-active)}
/* .hlp-doc p{font-size:var(--hlp-doc)} — (0,1,1) — перебивает голый .hlp-upd
   (0,1,0) при равном каскаде, тот же класс коллизии, что .s-ph. Тот же кегль
   и цвет, что у «N мин» в шапке статьи (.hlp-rd) — значения не подбирались
   заново, взяты те же 12.5px/var(--hlp-hint); ломалась только специфичность,
   не значения. Приём — как у .hlp-ask p чуть выше: скоуп через родителя. */
.hlp-doc .hlp-upd{font-size:12.5px;color:var(--hlp-hint);margin:14px 0 0}

/* ───── страница поиска ───── */
.hlp-search-page{padding:36px 0 72px;max-width:760px}
.hlp-search-page h1{font-size:26px;margin:0 0 6px;color:var(--text-primary)}
.hlp-search-q{font-size:14px;color:var(--text-secondary);margin:0 0 22px}
.hlp-search-results a{display:block;padding:13px 16px;background:#fff;border:1px solid var(--border);border-radius:11px;
  text-decoration:none;margin-bottom:8px}
.hlp-search-results a:hover{border-color:var(--accent-border)}
.hlp-search-results .hlp-sres-t{font-size:15px;font-weight:600;color:var(--text-primary);display:block;margin-bottom:2px}
.hlp-search-results .hlp-sres-m{font-size:12.5px;color:var(--hlp-hint)}
.hlp-search-empty{padding:16px;font-size:14px;color:var(--text-secondary)}

/* ───── адаптив ───── */
@media (max-width:1180px){
  .hlp-page,.hlp-page--no-toc{grid-template-columns:minmax(0,1fr);gap:0}
  .hlp-side-nav{display:none}
  /* Задача landing/nav-and-search: «Разделы» (.hlp-side-nav) на боевом
     прячутся ЦЕЛИКОМ на этой ширине, не сворачиваются в аккордеон — не
     наша правка, так было и до задачи. Поиск здесь именно ПОЭТОМУ не
     внутри .hlp-side-nav — .hlp-side-search рядом, своя видимость, не
     спрятана вместе с разделами (см. комментарий у .hlp-side выше).
     .hlp-side сама — сброс sticky: в одну колонку она встаёт ПЕРВЫМ блоком
     над статьёй (порядок в разметке), и залипающий, только что был в
     сайдбаре десктопа, контейнер тут ни к чему — то же демо макета в
     mobile-режиме держит поиск в обычном потоке, не sticky. */
  .hlp-side{position:static;margin-bottom:22px}
  .hlp-side-search{max-width:860px;margin:0 auto var(--space-6,24px)}
  .hlp-toc{display:none}
  .hlp-doc{width:100%;max-width:860px;margin:0 auto}
  .hlp-toc-m{display:block;margin:0 0 22px;background:#fff;border:1px solid var(--border);border-radius:11px;padding:12px 16px;max-width:var(--hlp-text-w)}
  .hlp-toc-m summary{cursor:pointer;font-size:13.5px;font-weight:600;color:var(--text-primary)}
  .hlp-toc-m a{display:block;padding:6px 0;font-size:14px;color:var(--text-secondary);text-decoration:none}
  .hlp-ui{width:100%;margin-left:0}
}
@media (max-width:860px){
  .hlp-cats{grid-template-columns:repeat(2,minmax(0,1fr))}
  .hlp-start-l{grid-template-columns:minmax(0,1fr)}
  .hlp-ui-body{overflow-x:auto;-webkit-overflow-scrolling:touch}
  /* Экран продукта — не адаптивная страница, а снимок настоящего интерфейса:
     на узком экране он не переверстывается в колонку, а остаётся в своих
     desktop-пропорциях и скроллится целиком (для этого и .hlp-ui-swipe-
     подсказка рядом). Без минимальной ширины сетки внутри экрана (.tiles,
     .bd-cols и т.п.) вместо горизонтальной прокрутки контейнера сжимались
     сами колонки — цифры и подписи наезжали друг на друга внутри плитки,
     хотя у страницы прокрутки не было вовсе (см. правило «проверка ищет не
     переполнение, а содержимое, до которого не добраться» в CLAUDE.md).
     .ph (телефон рабочего) — исключение: этот экран и задуман узким.

     ЧИСЛО 660, НЕ 700 (правка задачи landing/help-base-2, «волна 4», пакет
     wave4.zip, п.1). Источник — правка автора пакета для СВОЕЙ вёрстки
     экрана (help-v3.tpl.html), где старое правило было списком имён классов
     (.app,.bd-cols) и молча перестало совпадать после переименования этих
     же классов на префикс s- (волна 3) — экраны интерфейса на телефоне
     сжимались до 375px вместо прокрутки, и это не было видно, потому что
     проверка у автора шла по тому же устаревшему списку имён. Моя версия
     правила и тогда была БЕЗ списка имён — `>*:not(.ph)`, произвольный
     прямой потомок, а не .app/.bd-cols — и поэтому переименование на s- её
     не задело; проверил отдельно (см. отчёт задачи). Но число 660 взял то
     же, что у автора: оно подобрано под те же самые экраны (общие для
     обеих реализаций), отдельно перемерять нет причины.

     ИСКЛЮЧЕНИЕ ДЛЯ crop-row — ДОБАВЛЕНО, ЭТОГО НЕ БЫЛО ВООБЩЕ. У экрана в
     режиме data-crop="row row-N" (zakupki, zakaz-vstal,
     zapustit-v-proizvodstvo) сайдбар, шапка и вкладки скрыты, показана
     одна строка таблицы — минимальная ширина 660/700px была не нужна там
     никогда, простаивала пустым полем, а не защищала от сжатия. Не баг
     переименования (эту ветку код не проходил через рефакторинг s-), а
     пробел: правило написали для полноразмерного экрана и не подумали про
     урезанный. Нашёл, применяя правку автора к своей реализации — у него
     то же исключение уже было. */
  .hlp-ui-body>*:not(.ph){min-width:660px}
  .hlp-ui-body[class*="crop-row"]>*{min-width:0}

  /* То же самое — для модалки (задача landing/help-polish). Найдено
     расширенным чекером tools/checks/help-modal-expand.js, не заданием:
     правило выше защищает .hlp-ui-body от сжатия на узком экране, но
     .hlp-modal-b (openModal() в help.js кладёт туда клон того же
     содержимого) этой защиты не имело вовсе — её и не могло быть, она
     ограничена селектором .hlp-ui-body. На 375/390px, где заявлена
     мобильная полноэкранная модалка, полноразмерный экран продукта
     сжимался в ~340px модалки вместо прокрутки — плитки «Сегодня» и
     подписи наезжали друг на друга (то же разрушение, что правило выше
     не пускает в свёрнутом виде). Проверено живьём на
     /help/getting-started/chto-takoe-ceh360, экран nav-sidebar,
     375px — до правки цифры и подписи плиток читались слитно
     («операцирейбу», «завершесегодня»). */
  .hlp-modal-b>*:not(.ph){min-width:660px}
  .hlp-modal-b[class*="crop-row"]>*{min-width:0}
}
@media (max-width:660px){
  .hlp-cats{grid-template-columns:minmax(0,1fr)}
  .hlp-hero-in{padding:44px 20px 46px}
  .hlp-hero h1{font-size:28px}.hlp-hero-in>p{font-size:15.5px}
  .hlp-doc h1{font-size:25px}.hlp-lead{font-size:16.5px}
  .hlp-doc{--hlp-doc:16.5px}
  /* Пины — «в один-два ряда» (задача landing/help-polish, п.1б). На 390px
     контейнер .hlp-chips — 326px, а пять ярлыков с десктопным паддингом
     5px 13px укладываются только по 2 в ряд (3 ряда: 2+2+1) — даже три
     самых коротких («Заказ встал»+«PIN рабочего»+«Первый заказ» = 331px
     содержимого + 14px зазоров = 345px) шире контейнера на 19px. Меньший
     паддинг и кегль убирают ровно этот излишек — замерено ниже. */
  .hlp-chips button{padding:5px 8px;font-size:12.5px}
}
