/* ============================================================
   Catalogue (Services / Tools) — Figma canon
   Источник чисел: файл z51MVZ2MBMlTUIZd8SjVUo, канвас «👌 Ready»
   (решение владельца 24.09.2026 — канон именно этот файл):
     Services 1280 1035:13095 → сайдбар Frame 1066 1035:13146 = 353,
                                результаты Frame 1074 1035:13153 = 840 (контейнер 1201);
     Tools 1280    1105:14840 → 353 / 840 (Frame 1066 1105:14891 / Frame 1074 1105:14914);
     Services _1024 1263:21470 → 353 / 583 (Frame 1066 1263:21500 / Frame 1074 1263:21507, контейнер 944);
     Services_375  1263:25059 → фильтры 343@16 полной шириной, контент 311@32.
   Заголовочный блок Frame 987 = 122px (26 + 40 + 56):
     Frame 1091 1263:18439 (Services) / 1263:18455 (Tools) — переключатель ТЕКСТОМ 497×26,
       gap 24, 24/26 500: активный #009294, соседний #A8B4BD (на /tools/ — наоборот).
       На 375 (1263:25071) тот же блок столбиком: «Предоставляемые услуги» 300×26 над
       «Оборудование» 173×26, gap 16, до тулбара 40.
     Frame 1062 1035:13137 — тулбар, ОДНА строка 1201×56: вкладки 354×56 (Frame 1065)
       + gap 8 + поиск 839. Кнопки-переключателя в тулбаре в каноне НЕТ.
   Разметка страницы и подключение файла — ОДИНАКОВЫ в обоих деревьях
   (/home/adm-02/farmoborona/modx и /home/adm-02/hapersky.ru): файлы должны
   совпадать побайтно, иначе выкат из зеркала откатывает живой слой.
   ============================================================ */

/* --- Заголовочный блок: Frame 1091 (текстовый переключатель) + 40px до тулбара ---
   Ширина строки = 300 + 24 + 173 = 497 (max-content), высота 26. */
.catalogue-head{display:flex;align-items:center;gap:24px;width:max-content;max-width:100%;margin:0 0 40px}
.catalogue-title{color:var(--teal);font-size:24px;line-height:26px;font-weight:500;margin:0}
.catalogue-switch{color:#A8B4BD;font-size:24px;line-height:26px;font-weight:500;text-decoration:none;white-space:nowrap}
.catalogue-switch:hover{color:var(--teal)}
.catalogue-switch:focus-visible{color:var(--teal);outline:2px solid var(--teal);outline-offset:2px;border-radius:4px}

/* --- Toolbar: одна строка 56px: вкладки 354 | gap 8 | поиск (тянется до конца контейнера) ---
   Живой слой (audit-fixes.css ~2660) держит .catalogue-toolbar флексом с переносом — это
   мобильная укладка; канон ≥1024 задан через [data-catalog] (специфичность 0,2,0 > 0,1,0),
   поэтому на ≤1023 раскладка живой слоёвки не меняется. */
@media(min-width:1024px){
  [data-catalog] .catalogue-toolbar{display:grid;grid-template-columns:minmax(354px,auto) minmax(0,1fr);gap:8px;align-items:center;margin:0 0 24px;min-height:56px}
  [data-catalog] .catalogue-toolbar .mode-tabs{grid-column:auto;grid-row:auto;height:56px;gap:12px;padding:8px 10px;border:1px solid #B3DFDF;border-radius:16px;background:#fff;box-sizing:border-box;overflow:visible}
  [data-catalog] .catalogue-toolbar .search-line{grid-column:auto;grid-row:auto;height:56px;padding:12px 8px 12px 16px;gap:24px;border:1px solid #B3DFDF;border-radius:16px;background:#F3F7FA;box-sizing:border-box;min-width:0}
  [data-catalog] .catalogue-toolbar .search-line input{font-size:18px;line-height:22px;color:#272D31}
  [data-catalog] .catalogue-toolbar .search-line button{width:40px;height:40px;flex:0 0 40px}
}

/* Segmented tabs: 354x56 white card r16 border #B3DFDF; text 16/18/500 #809CAF; active teal bg, white */
.mode-tabs{height:56px;display:flex;align-items:center;gap:12px;padding:8px 10px;border:1px solid #B3DFDF;background:#fff;border-radius:16px;box-sizing:border-box;overflow:hidden}
.mode-tabs button{border:0;background:transparent;padding:10px 12px;color:#809CAF;font-size:16px;line-height:18px;font-weight:500;cursor:pointer;transition:.2s;white-space:nowrap;border-radius:8px;font-family:inherit}
.mode-tabs button:hover{color:var(--teal)}
.mode-tabs button.active{background:var(--teal);color:#fff}

/* Search line: 839x56 flex-1, bg #F3F7FA r16 border #B3DFDF; placeholder 18/22 #A8B4BD; teal circle 40 */
.search-line{height:56px;display:flex;align-items:center;justify-content:space-between;gap:24px;padding:12px 8px 12px 16px;border:1px solid #B3DFDF;background:#F3F7FA;border-radius:16px;box-sizing:border-box;min-width:0}
.search-line input{flex:1;border:0;outline:0;background:transparent;color:#272D31;font-size:18px;line-height:22px;font-weight:400;min-width:0;font-family:inherit}
.search-line input::placeholder{color:#A8B4BD}
.search-line button{width:40px;height:40px;border-radius:50%;border:0;background:var(--teal);color:#fff;cursor:pointer;display:grid;place-items:center;flex:0 0 40px;padding:0}
.search-line button .icon{width:20px;height:20px}

/* --- Catalogue grid: sidebar 353 | results, gap 8 (канон 1024: услуги 353/583 — кадр
   Services _1024 1263:21470, Frame 1066 1263:21500; оборудование 321/615 — кадр
   Tools _1024 1263:21518, правило ниже) --- */
.catalogue{display:grid;grid-template-columns:353px minmax(0,1fr);gap:8px;align-items:start}

/* --- Оборудование @1024 (кадр Tools _1024 1263:21518): своя колонка категорий ---
   Frame 1077 944 = Frame 1066 321×1400 (пункт Text Field 321×56, gap 8, pad 16, r12) +
   gap 8 + Frame 1074 615 (944 − 321 − 8). У услуг в том же кадре 353/583
   (Services _1024 1263:21470) — это и есть живое, поэтому правило висит на
   data-kind="equipment" (/tools/), а не на общем .catalogue.
   Диапазон 1024–1279 — тот же шаг, что и у канона строки («353/583 на 1024–1279,
   353/840 от 1280»): с 1280 действует кадр Tools 1280 1105:14840 = 353/840.
   375 не задет: у оборудования там своя раскладка (Tools_375 1264:27230, .cat-select,
   колонка 343), правило начинается с 1024.
   Специфичность (0,3,0) перебивает и базовое .catalogue (0,1,0), и
   fb-canon-20260914.css @media(min-width:1025px) (0,1,0), где бы файл ни подключался. */
@media(min-width:1024px) and (max-width:1279px){
  [data-catalog][data-kind="equipment"] .catalogue{grid-template-columns:321px minmax(0,1fr)}
}

/* Sidebar category rows: 56h, r12, bg #F3F7FA, text 16/18/400 #5A6E7C, step 64 (gap 8) */
.category-list{display:grid;gap:8px;align-self:start}
.category-list button{min-height:56px;border:0;background:#F3F7FA;border-radius:12px;padding:0 16px;text-align:left;color:#5A6E7C;font-size:16px;line-height:18px;font-weight:400;cursor:pointer;transition:.2s;box-sizing:border-box;font-family:inherit}
.category-list button small{color:#809CAF;font-size:14px;line-height:16px;font-weight:400}
.category-list button:hover{background:#E8F0F4}
.category-list button.active{background:var(--teal);color:#fff}
.category-list button.active small{color:#CCF2EA}

/* Results shell: bg #F3F7FA r24 pad-x 16 */
.catalogue-list{background:#F3F7FA;border-radius:24px;padding:16px;box-sizing:border-box}

/* Result row: title 20/22/500 teal; meta 14/16/400 #809CAF; code badge 22h r4 #85BAAF 10/12/500 */
.catalogue-item{padding:20px 16px;border-bottom:1px solid #C7DCDF;display:grid;grid-template-columns:minmax(0,1fr) auto;gap:16px;box-sizing:border-box}
.catalogue-item:last-child{border-bottom:0}
.catalogue-item .code{display:inline-flex;align-items:center;min-height:22px;background:#85BAAF;color:#fff;border-radius:4px;padding:0 10px;font-size:10px;line-height:12px;font-weight:500;margin-bottom:10px;box-sizing:border-box}
.catalogue-item h3{font-size:20px;line-height:22px;color:var(--teal);font-weight:500;margin:0 0 6px}
.catalogue-item .service-name{font-size:20px;line-height:22px;color:var(--teal);font-weight:500}
.catalogue-item p{font-size:14px;line-height:16px;color:#809CAF;margin:0 0 4px}
.catalogue-item .service-method,.catalogue-item .service-indicator{font-size:14px;line-height:16px;color:#809CAF}

/* Right column: term badge, price, action button 44h outline pill */
.catalogue-side{border-left:1px solid var(--teal);padding-left:16px;min-width:170px;color:#5A6E7C;font-size:14px;line-height:16px;display:grid;align-content:center;gap:10px}
.catalogue-side>span{display:flex;align-items:center;gap:5px}
.catalogue-side .icon{width:15px;height:15px}
/* Строка срока в правой колонке строки /services/ (иконка часов 24×24 #809CAF + пилюля
   «до N дней») — десктопный канон 1280/1024; включается блоком ≥768 ниже по файлу.
   По умолчанию скрыта: на ≤767 срок стоит бейджем в ряду бейджей строки (Frame 1106).
   Селектор с родителем обязателен: базовое `.catalogue-side>span{display:flex}` (0,1,1)
   перебивает одиночный класс (0,1,0), и без него строка протекала на 375 в правую колонку. */
.catalogue-side .term-row{display:none}

/* ============================================================
   Канон строки результата /services/ на 1280 и 1024 (карточка t_a3f0d542).
   Кадры Figma z51MVZ2MBMlTUIZd8SjVUo: Services 1280 1035:13095 (Table Cell 1035:13154)
   и Services _1024 1263:21470 (Table Cell 1263:21508), узел заголовка 1263:21508.

   Строка = Table Cell [VERTICAL, gap 8]: линия Line 21 1px #B3DFDF СВЕРХУ → зазор 8 →
   рамка Frame 1072 (внутри HORIZONTAL gap 24).
     • рамка 808×150 pad 24/24/24/16 (1280); 551×167 pad 16/8/16/16 (1024);
     • слева Frame 1067 [VERTICAL gap 16]: бейдж Bage 79×22 (r4, pad 0/10, текст
       10/12 w500 #FFFFFF) → 16 → заголовок 20/22 w500 #009294 (на 1024 — 18/20, узел
       1263:21508) → 12 → «Метод: …» 14/16 w400 #809CAF;
     • выделенная строка (Frame 1072): fill #DAEFEC + обводка 1px #009294, r24.

   Как это воспроизведено: линия — border-top строки, зазор 8 — gap сетки .catalogue-list,
   поэтому computed-паддинг рамки остаётся ровно канонным (24/24/24/16), а не 32. Высота
   строки = содержимое + 48 (1280): жёсткой высоты в кадре нет, там рамки 136/150/158 —
   тянутся по содержимому (у длинного «Метода» строка выше).
   СКОУП — только /services/: у /tools/ строка своя (Frame 1072 pad 24/16/24/16, линия между
   строками: в кадре она у одной строки Line 20 снизу, у другой Line 21 сверху — переключатель
   автолейаута, визуально одно и то же) — её правит карточка t_0ff8b1f8 (блок ≥768 в конце файла).
   Ширина правой колонки (170) и её содержимое —
   карточка t_64f59af7; в кадре у рамки горизонтальный gap 24 против живых 16 — оставлен 16,
   чтобы не порождать два конкурирующих правила на правую колонку.
   ≤767 не задет: там свой канон Services_375 (см. блок 375 ниже по файлу). */
@media(min-width:768px){
  /* Контейнер строк — Frame 1074 (1035:13153 @1280, 1263:21507 @1024), карточка t_5e7579f2:
     вертикального паддинга у контейнера в кадре нет (pT0/pB0 @1280, pB8 @1024) — строки идут
     от верха оболочки, паддинг 16/16 из base.css снимается; горизонтальный 16 остаётся.
     Первая линия-разделитель HIDDEN (Line 21) — у первой строки border-top снят ниже. */
  [data-catalog][data-kind="services"] .catalogue-list{display:grid;gap:8px;padding:0 16px}
  /* Ряд бейджей строки — Frame 1067 [VERTICAL gap 16]: бейдж 22 → 16 → блок заголовка.
     На ≥768 внутри виден только бейдж кода (срок и чип «i» скрыты правилом ниже), но ряд
     держим тем же флексом с gap 8, что и в 375-каноне (Frame 1106): тогда высота ряда ровно
     22 и зазор 16 до заголовка задаёт margin, а не строка блока (иначе лишние 2 px). */
  [data-catalog][data-kind="services"] .catalogue-item .svc-badges{display:flex;align-items:center;gap:8px;margin-bottom:16px}
  [data-catalog][data-kind="services"] .catalogue-item .svc-badges .code{margin-bottom:0}
  [data-catalog][data-kind="services"] .catalogue-item{padding:24px 24px 24px 16px;border-top:1px solid #B3DFDF;border-bottom:0}
  [data-catalog][data-kind="services"] .catalogue-item .code{margin-bottom:16px}
  [data-catalog][data-kind="services"] .catalogue-item h3,
  [data-catalog][data-kind="services"] .catalogue-item .service-name{margin:0 0 12px}
  [data-catalog][data-kind="services"] .catalogue-item.in-cart{background:#DAEFEC;box-shadow:inset 0 0 0 1px #009294;border-radius:24px}
}
@media(min-width:768px) and (max-width:1024px){
  /* 1024: кадр 1263:21507 держит pB8 — снизу оболочки полоса 8 (зазор после последней строки). */
  [data-catalog][data-kind="services"] .catalogue-list{padding:0 16px 8px}
  [data-catalog][data-kind="services"] .catalogue-item{padding:16px 8px 16px 16px}
  [data-catalog][data-kind="services"] .catalogue-item h3,
  [data-catalog][data-kind="services"] .catalogue-item .service-name{font-size:18px;line-height:20px}
}

/* ============================================================
   Правая колонка строки /services/ и инфо-чип — канон 1280/1024 (карточка t_64f59af7).
   Кадры Figma z51MVZ2MBMlTUIZd8SjVUo: Services 1280 1035:13095 (Table Cell 1035:13154)
   и Services _1024 1263:21470 (Table Cell 1263:21508).

   1280: Frame 1078 196×102, pad-left 24, gap 24 до стека — внутри линия Line 18 1px #009294
   (высота = высоте контента строки) + стек Frame 1071 148×88 gap 16: строка Frame 1070 148×28
   gap 4 = иконка 24×24 #809CAF + пилюля Frame 1076 82×28 #E4ECF3 r4 pad 0/7 (14/16/400
   #809CAF) → кнопка «Добавить» 123×44 outline r100 16/20/500.
   1024: Frame 1078 181×135, pad-left 16, gap 16, стек 149×88 — те же элементы.
   Числа — `references/services-tools-canon-1024-1280.md`, узлы сверены 24.09.2026.

   Где стоит линия в реализации: это `border-left` колонки, а `padding-left` 24/16 — расстояние
   до стека (кадровый gap). В кадре линия сама отстоит от левого края рамки на 24 и ещё 24 до
   стека; у нас линия на краю колонки — разницу ±8 px относительно кадра даёт горизонтальный
   gap строки (живое 16 против кадровых 24, его держит карточка t_a3f0d542). Второе правило на
   правую колонку не заводил — договорённость из шапки блока строки.

   В кадре в стеке только срок и кнопка; «Цена по запросу» оставлена (цены скрыты решением
   владельца 14.09.2026), поэтому стек на 44 выше кадрового — осознанное расхождение.
   Строка срока приходит из разметки (.term-row, catalogue.js); на ≤767 её нет —
   там срок стоит бейджем в ряду бейджей (Frame 1106).
   СКОУП — только /services/: у /tools/ своя правая колонка. */
@media(min-width:768px){
  [data-catalog][data-kind="services"] .catalogue-item .catalogue-side{
    min-width:196px;padding-left:24px;gap:16px;align-content:start}
  [data-catalog][data-kind="services"] .catalogue-item .catalogue-side .term-row{
    display:flex;align-items:center;gap:4px;width:100%}
  [data-catalog][data-kind="services"] .catalogue-item .catalogue-side .term-row .icon{
    width:24px;height:24px;flex:0 0 24px;color:#809CAF}
  [data-catalog][data-kind="services"] .catalogue-item .catalogue-side .term-row .term-badge{
    display:inline-flex;align-items:center;min-height:28px;max-width:100%;padding:0 7px;
    box-sizing:border-box;background:#E4ECF3;color:#809CAF;border-radius:4px;
    font-size:14px;line-height:16px;font-weight:400;overflow-wrap:anywhere}
  /* Кнопка в кадре 123×44 (HUG), а не растянута по колонке (живое 153 при колонке 170) */
  [data-catalog][data-kind="services"] .catalogue-item .catalogue-side .add-btn{justify-self:start}
  /* Инфо-чип — Frame 1068 24×24 (обводка 1px #009294, «i» 16/22 #009294) в правом верхнем
     углу левой колонки, вровень с бейджем кода. Блок текста в кадре 532 из 572, поэтому
     справа освобождаем 40 (24 чип + 16 зазор): заголовок и «Метод:» переносятся до чипа,
     как в кадре, а не заезжают под него. */
  [data-catalog][data-kind="services"] .catalogue-item>.svc-main{position:relative;padding-right:40px}
  [data-catalog][data-kind="services"] .catalogue-item>.svc-main .info-chip{
    position:absolute;top:0;right:0;display:grid;place-items:center;width:24px;height:24px;
    margin:0;padding:0;border:1px solid #009294;border-radius:50%;background:#fff;color:#009294;
    font-family:inherit;font-size:16px;line-height:22px;font-weight:400;font-style:normal;cursor:pointer}
  [data-catalog][data-kind="services"] .catalogue-item>.svc-main .info-chip:hover{background:#E6F5F5}
}
@media(min-width:768px) and (max-width:1024px){
  [data-catalog][data-kind="services"] .catalogue-item .catalogue-side{min-width:181px;padding-left:16px}
}
.add-btn{height:44px;min-height:44px;border:1px solid var(--teal);border-radius:999px;background:#fff;color:var(--teal);padding:0 24px;font-size:16px;line-height:20px;font-weight:500;cursor:pointer;transition:.2s;font-family:inherit;box-sizing:border-box}
.add-btn:hover{background:#E6F5F5}
.add-btn.added{background:var(--teal);color:#fff}
.info-chip{width:24px;height:24px;display:grid;place-items:center;border:1px solid #85BAAF;border-radius:50%;color:var(--teal);font-size:14px;font-style:normal}

/* Prices (gated by JS: guests see lock hint) */
.catalogue-price{color:var(--teal);font-weight:500;font-size:16px;line-height:18px}
.catalogue-price small{display:block;color:#809CAF;font-weight:400;font-size:14px;line-height:16px;margin-top:2px}
.price-private{display:inline-flex;align-items:center;gap:6px;color:#809CAF;font-size:14px;line-height:16px}
.login-hint{color:#809CAF;font-size:14px;line-height:16px;cursor:pointer}
.login-hint:hover{color:var(--teal)}

/* Detectors (equipment) */
.detectors{margin-top:10px}
.detectors summary{cursor:pointer;color:var(--teal);font-size:14px;line-height:16px;display:flex;align-items:center;gap:6px;list-style:none}
.detectors summary::-webkit-details-marker{display:none}
.detectors ul{list-style:none;margin:8px 0 0;padding:0 0 0 16px;display:grid;gap:6px;color:#5A6E7C;font-size:14px;line-height:16px}

/* Status / empty / pagination / more */
.catalogue-status{background:transparent;padding:0;margin:0 0 12px;color:#809CAF;font-size:14px;line-height:16px}
.catalogue-item.is-loading{opacity:.55}
.catalogue-empty{padding:44px 20px;text-align:center;color:#809CAF;font-size:14px}
.catalogue-pagination{display:flex;justify-content:center;gap:8px;margin-top:18px}
.catalogue-pagination button{border:1px solid #B3DFDF;background:#fff;color:var(--teal);border-radius:999px;padding:9px 14px}
/* «Показать ещё» — в колонке РЕЗУЛЬТАТОВ, а не под колонкой категорий.
   Сетка каталога двухколоночная от 768: 230/1fr на 768–1023 (responsive.css ≤1023),
   канон 353/583 на 1024–1279 и 353/840 от 1280. Прежнее правило жило в @media(max-width:1024px)
   и на самом 1024 ставило блок в колонку 1 — под список категорий (замер 24.09.2026:
   `.catalogue-more` 353×80 @x=40 против `.catalogue-list` 583 @x=401; та же ошибка на 768–1023).
   Правило одноколоночного случая — ниже, в @media(max-width:767px): именно там сетка
   становится 1fr (responsive.css), поэтому порог совпадает с порогом сетки, а не с 1024. */
.catalogue-more{grid-column:2;display:flex;justify-content:center;padding:18px 0 6px}
.catalogue-more[hidden]{display:none}
/* Обводка — как у прочих outline-кнопок сайта (1px #009294, r100): base.css её задаёт,
   но audit-fixes.css ниже по каскаду гасит `border:none`. Высота 56 остаётся: обводка
   лежит внутри (box-sizing:border-box), иначе кнопка выросла бы до 58 (было 18+24 padding). */
.catalogue-more .btn{min-width:220px;height:56px;min-height:56px;padding:0 24px;box-sizing:border-box;border:1px solid var(--teal)}
.catalogue-more .btn:disabled{opacity:.55;cursor:wait}
@media(max-width:767px){
  .catalogue-more{grid-column:1}
}

/* Sub-filter tags inside categories */
.cat-filter{display:flex;gap:4px;flex-wrap:wrap;margin-top:4px}
.cat-filter button{border:1px solid #C7DCDF;background:#fff;border-radius:999px;padding:4px 10px;font-size:14px;color:#809CAF;cursor:pointer;transition:.2s;white-space:nowrap;font-family:inherit}
.cat-filter button:hover{border-color:var(--teal);color:var(--teal)}
.cat-filter button.active{background:var(--teal);color:#fff;border-color:var(--teal)}

/* --- Responsive ---
   ≤1024: сайдбар остаётся колонкой 353 (канон Services _1024 1263:21470), плашки категорий
   переносят название по ширине колонки — по решению владельца 21.09.2026 горизонтальной
   ленты категорий нет. Тот же блок лежит в fb-canon-20260914.css; здесь он повторён, чтобы
   итог не зависел от порядка подключения файлов (fb-canon идёт последним, audit-fixes — после catalogue.css).
   <1024: одна колонка (сайдбар над результатами) — канон даёт только 1024/1280/375.
   ≤768: полная укладка — тулбар в столбик, строка результата без правой колонки. */
@media(max-width:1024px){
  .category-list{display:grid;grid-template-columns:1fr;gap:8px;overflow-x:visible;align-items:stretch}
  .category-list button{white-space:normal;max-width:100%;width:100%;text-align:left;box-sizing:border-box}
}
@media(max-width:1023px){
  .catalogue-toolbar{grid-template-columns:minmax(0,1fr) auto;min-height:0}
  .mode-tabs{grid-column:1/-1;overflow-x:auto;max-width:100%}
  .catalogue{grid-template-columns:minmax(0,1fr)}
}
@media(max-width:768px){
  .catalogue-toolbar{grid-template-columns:minmax(0,1fr)}
  .search-line{min-width:0}
  .catalogue-item{grid-template-columns:minmax(0,1fr);gap:10px}
  .catalogue-side{border-left:0;border-top:1px solid var(--teal);padding:12px 0 0;min-width:0}
  .catalogue-more{padding-top:14px}
  .catalogue-more .btn{width:100%;min-width:0}
}
/* 375 (канон 1263:25071): переключатель в заголовке столбиком, gap 16 */
@media(max-width:767px){
  .catalogue-head{flex-direction:column;align-items:flex-start;gap:16px}
}

/* ============================================================
   375 — канон Services_375 (Figma z51MVZ2MBMlTUIZd8SjVUo, кадр 1263:25059)
   Яндекс-карточка t_287facf5, 24.09.2026. Числа сняты с узлов /nodes и подтверждены
   пиксельным сканом экспорта фрейма (find-lines.py по 1263-25081.png).

   СКОУП — только /services/: у /tools/ свой кадр Tools_375 1264:27230 (там фильтр
   один — «Выбрать оборудование» — и поля поиска нет вовсе), поэтому все правила
   строк/тулбара висят на [data-catalog][data-kind="services"] и /tools/ не задевают.
   Хиро правится без скоупа: .hero--products встречается ТОЛЬКО на /services/ и /tools/
   (проверено curl'ом по всем разделам), и обоим кадрам нужны те же 400.

   Канон: Main screen 343×400 r16; Txt 311×227 @16 (h1 24/26 + p 14/16 + кнопка 246×56);
   Frame 1065 343×246 = Frame 1104 343×166 (три поля 343×50, gap 8, border 1px #009294,
   r12, подпись 16/18/400 #5A6E7C, у НЕактивного поля справа залитый треугольник ▶
   6×10 #232222 в боксе 24×24 @right 8 — у активного его нет) + 24 + Search 343×56;
   Frame 1074 343×1629 pad 0/16/8/16 — строки 311 @x=32 (16 наружу + 16 внутрь),
   pad 8/8/16/8, между строками 8, разделитель 1px #B3DFDF (в кадре линии 311 по ширине
   строки, а не 343: скан 1263-25081.png даёт figma-x 16..327), высота по содержимому,
   заголовок строки 18/20/500, подпись метода 14/16/400, бейдж кода 22h r4 10/12/500.
   Ряд бейджей строки (1263:25083, Frame 1106 295×22, gap 8) — код + бейдж срока
   («До 5 дней» 72×22 #E4ECF3 r4 pad 0/7, текст 12/14/400 #809CAF) + инфо-чип 24×24
   (stroke 1px #009294, r100, «i» 16/22 #009294) справа; «Добавить» 123×44 (stroke
   1px #009294, r100, 16/20/500) — под текстом, слева, без линии над кнопкой.

   ЕЩЁ НЕ СДЕЛАНО (нужно решение владельца, карточка t_f4355327): лента категорий
   (.category-list, живое 343×918) и строка «Показано: N из M» в кадре отсутствуют, из-за
   них зазор тулбар→результаты 50 вместо кадровых 24 (плюс сама лента — 918). Пока не
   выбрано, остаются как есть. */
@media(max-width:767px){
  /* Хиро: было 350 / r14 (responsive.css, подключён после catalogue.css) — канон 400 / r16.
     .hero--products встречается ТОЛЬКО на /services/ и /tools/, кадры 1263:25059 и 1264:27230
     дают одну и ту же геометрию, поэтому правило общее, без скоупа по data-kind.
     Раскладку копирайта (top/bottom, ширина 311 @x=16) держит блок /tools/ ниже по файлу:
     у него селектор (0,3,2) и он прижат к низу на 24 — для /services/ это даёт Txt top ≈144
     против кадровых 149 (в самом кадре сумма детей 232 при боксе Txt 227, те же 5px), поэтому
     свой top здесь НЕ дублирую: два конкурирующих правила на один блок = ловушка двойных правил. */
  section.hero.hero--products .hero-box{height:400px;border-radius:16px}
}

/* /services/ — поле-список «Выбрать оборудование» (.cat-select) не показываем ни на одной ширине.
   Его собирает catalogue.js (блок 375-канона Tools_375) без проверки kind, поэтому на /services/
   в тулбаре появлялся неоформленный нативный select на своём языке («Выбрать оборудование»),
   а прячет его живой слой только для [data-kind="equipment"]. Правило снимается, как только
   в catalogue.js появится guard по data-kind — сообщено карточке t_f314c1ae комментарием. */
[data-catalog][data-kind="services"] .cat-select{display:none}

/* Бейдж срока и инфо-чип строки /services/: в кадре 375 оба стоят в ряду бейджей
   (1263:25083, Frame 1106), на ≥768 — по канону 1280/1024: срок у иконки часов в правой
   колонке (.term-row, блок ≥768 выше по файлу), чип 24×24 в правой части левой колонки
   (Frame 1068). Скрывать оба элемента целиком, как было до карточки t_64f59af7, больше
   нельзя — на ≥768 они показываются своими правилами. Гасим только мобильную копию
   бейджа, чтобы на десктопе срок не показывался дважды (копия нужна ≤767 — канон Frame 1106). */
@media(min-width:768px){
  [data-catalog][data-kind="services"] .catalogue-item .svc-badges .term-badge{display:none}
}

@media(max-width:767px){
  /* Тулбар: колонка [Frame 1104] → 24 → Search.
     .search-line внутри колонки обязан иметь flex-basis:auto: живой слой держит
     @media(max-width:900px){.catalogue-toolbar .search-line{flex-basis:100%}} — в строке
     это была ширина, а в колонке flex-basis становится высотой и перебивает height:56px. */
  [data-catalog][data-kind="services"] .catalogue-toolbar{
    display:flex;flex-direction:column;align-items:stretch;flex-wrap:nowrap;gap:24px}
  [data-catalog][data-kind="services"] .catalogue-toolbar .mode-tabs{
    display:flex;flex-direction:column;align-items:stretch;gap:8px;
    height:auto!important;min-height:0;max-width:none;padding:0!important;
    border:0!important;border-radius:0!important;background:transparent!important;overflow:visible}
  [data-catalog][data-kind="services"] .catalogue-toolbar .mode-tabs button{
    width:100%;height:50px;min-height:50px;box-sizing:border-box;margin:0;
    display:flex;align-items:center;justify-content:flex-start;text-align:left;
    border:1px solid #009294!important;border-radius:12px!important;
    padding:8px 40px 8px 16px!important;
    font-size:16px!important;line-height:18px!important;font-weight:400!important;color:#5A6E7C!important;
    background-color:#fff!important;
    background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none'%3E%3Cpath d='M9 7.6 L14.8 12 L9 16.4 Z' fill='%23232222' stroke='%23232222' stroke-width='1.2' stroke-linejoin='round'/%3E%3C/svg%3E")!important;
    background-repeat:no-repeat!important;background-position:right 8px center!important;background-size:24px 24px!important}
  [data-catalog][data-kind="services"] .catalogue-toolbar .mode-tabs button.active{
    background-color:#fff!important;background-image:none!important;color:#5A6E7C!important;
    border-radius:12px!important;padding:8px 16px!important}
  [data-catalog][data-kind="services"] .catalogue-toolbar .search-line{
    height:56px;flex:0 0 auto;flex-basis:auto;padding:12px 8px 12px 16px}
  [data-catalog][data-kind="services"] .catalogue-toolbar .search-line input{font-size:14px;line-height:16px;color:#5A6E7C}
  [data-catalog][data-kind="services"] .catalogue-toolbar .search-line button{width:40px;height:40px;flex:0 0 40px}
  /* Результаты: Frame 1074 — pad 0/16/8/16, строки 311 @x=32, pad 8/8/16/8 */
  [data-catalog][data-kind="services"] .catalogue-list{padding:0 16px 8px}
  [data-catalog][data-kind="services"] .catalogue-item{
    grid-template-columns:minmax(0,1fr);gap:16px;padding:8px 8px 16px;margin-bottom:8px;
    border-bottom:1px solid #B3DFDF;border-radius:0}
  [data-catalog][data-kind="services"] .catalogue-item:last-child{margin-bottom:0;border-bottom:0}
  [data-catalog][data-kind="services"] .catalogue-item .code{
    height:22px;min-height:22px;padding:0 10px;margin-bottom:16px;
    font-size:10px;line-height:12px;font-weight:500;border-radius:4px}
  /* Ряд бейджей строки — кадр 1263:25083 (Table Cell 311×227, Frame 1106 295×22, gap 8):
     бейдж кода + бейдж срока + инфо-чип 24×24, прижатый вправо. Отступ 16 до заголовка
     держит ряд (Frame 1067 gap 16), поэтому у бейджа кода внутри ряда margin снят. */
  [data-catalog][data-kind="services"] .catalogue-item .svc-badges{
    display:flex;align-items:center;gap:8px;min-height:24px;margin-bottom:16px}
  [data-catalog][data-kind="services"] .catalogue-item .svc-badges .code{margin-bottom:0}
  [data-catalog][data-kind="services"] .catalogue-item .term-badge{
    display:inline-flex;align-items:center;max-width:100%;padding:4px 7px;box-sizing:border-box;
    background:#E4ECF3;color:#809CAF;border-radius:4px;
    font-size:12px;line-height:14px;font-weight:400;overflow-wrap:anywhere}
  [data-catalog][data-kind="services"] .catalogue-item .info-chip{
    display:grid;place-items:center;flex:0 0 24px;width:24px;height:24px;margin-left:auto;padding:0;
    border:1px solid #009294;border-radius:50%;background:#fff;color:#009294;cursor:pointer;
    font-family:inherit;font-size:16px;line-height:22px;font-weight:400;font-style:normal}
  [data-catalog][data-kind="services"] .catalogue-item .info-chip:hover{background:#E6F5F5}
  /* Frame 1076 gap 12: заголовок 18/20 → подпись «Метод: …» 14/16 */
  [data-catalog][data-kind="services"] .catalogue-item .service-name{
    font-size:18px;line-height:20px;margin:0 0 12px}
  [data-catalog][data-kind="services"] .catalogue-item .service-method,
  [data-catalog][data-kind="services"] .catalogue-item .service-indicator{
    font-size:14px;line-height:16px;margin:0 0 4px}
  /* Правая колонка. Живой слой (responsive.css ≤767) рисует у неё полосу сверху и жмёт кнопку
     вправо; в кадре линии нет, а «Добавить» 123×44 стоит сразу под текстом слева. Линия снята,
     кнопка выровнена по левому краю. «Цена по запросу» оставлена: цены скрыты решением
     владельца 14.09.2026, и это единственное место строки, где про стоимость сказано. */
  [data-catalog][data-kind="services"] .catalogue-item .catalogue-side{
    display:flex;flex-direction:column;align-items:flex-start;gap:10px;
    border-top:0;padding:0;min-width:0;justify-self:start}
  [data-catalog][data-kind="services"] .catalogue-item .catalogue-side .add-btn{align-self:flex-start}
  /* Окно «i» по услуге — тот же .fb-modal, что у приборов (диалог висит на body, без скоупа) */
  .svc-modal__list{display:grid;grid-template-columns:auto minmax(0,1fr);gap:6px 12px;margin:10px 0 0;font-size:15px;line-height:20px}
  .svc-modal__list dt{color:#7B92A0}
  .svc-modal__list dd{margin:0;color:#35505D}
}

/* ============================================================
   375 — канон Tools_375 (Figma z51MVZ2MBMlTUIZd8SjVUo, кадр 1264:27230, карточка t_f314c1ae).
   СКОУП — только /tools/ ([data-catalog][data-kind="equipment"]): у /services/ свой кадр
   1263:25059 и свои правила выше, а файл общий, поэтому вся геометрия /tools/ висит на
   атрибуте kind. Хиро (.hero--products) правят без скоупа — кадр один и тот же.

   Числа сняты через /nodes?ids=1264:27230 (и подтверждены экспортом узла в PNG):
     Main screen 1264:27232 343×400 r16, картинка + градиент 298; Txt 311 @16 → копирайт
       прижат к низу на 24 (h1 24/26, p 14/16, кнопка 246×56 r100);
     Frame 987 1264:27242 = 206: Frame 1091 1264:27243 (300×68, gap 16) + 24 до тулбара;
     Frame 1105 1264:27246 = 114 = поле 1264:27247 343×50 (r12, border 1px #009294,
       pL16 pR8, подпись 16/18/400 #5A6E7C, справа ▶ 6×10 #232222 в боксе 24×24 @right 8)
       + 8 + поле 1264:27248 343×56 (залито #009294 r12, текст 16/18 #FFFFFF, справа белый ×
       16×16 в боксе 24 — состояние «в поле есть значение»);
     Frame 1074 1264:27249 343×1764 r24 #F3F7FA БЕЗ паддинга: строки 343 полной ширины,
       внутри 16 → контент 311; между строками 8 + волосяная 1px #B3DFDF (Line 20),
       у первой строки верхней линии нет (Line 21 hidden);
       строка = бейдж 22 (10/12/500) → 16 → заголовок 20/22/500 #009294 → 12 →
       производитель 14/16/400 #809CAF → 16 → поле 311×40 (r12, border #009294, текст
       16/18/400 #5A6E7C, ▶ 24×24 @right 8); кнопка «i» 24×24 (@right 16) стоит в строке
       бейджа, а не отдельным блоком под карточкой;
     раскрытый чек-лист детекторов 1264:27253: панель 343 (pL16 pR16), пункты 16/18/400
       #5A6E7C с отступом 16 (текст @x=32 от края строки), gap 12, БЕЗ маркеров списка.
       Подсветка выбранного пункта (плашка #B3DFDF r8) не реализована: в живом каталоге
       нет состояния «выбран детектор» (выбор приборов убран 18.09.2026), рисовать её не из чего.
   ============================================================ */
/* Канонный вектор стрелки: залитый треугольник «▶» (инстанс Icons 1263:24573 в тулбаре и
   ровно тот же 1105:14372 в строке) — НЕ спрайтовый #chevron (там обводка 16×16 стрелкой вниз).
   viewBox 96 = 24×4, fill #232222. */
[data-catalog]{
  --fb-caret:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 96 96' fill='none'%3E%3Cpath d='M54.1001 52.9166L46.4972 59.2524L46.4972 59.2524C43.1486 62.0428 41.4743 63.4381 40.0603 63.4594C38.8311 63.4779 37.6616 62.9302 36.8889 61.974C36 60.874 36 58.6946 36 54.3357L36 41.6643C36 37.3054 36 35.126 36.8889 34.0261C37.6616 33.0699 38.8311 32.5221 40.0603 32.5406C41.4743 32.5619 43.1486 33.9572 46.4971 36.7476L46.4972 36.7476L54.1001 43.0834L54.1001 43.0834C56.1262 44.7718 57.1393 45.6161 57.5087 46.6268C57.8328 47.5136 57.8328 48.4864 57.5087 49.3732C57.1393 50.3839 56.1262 51.2282 54.1001 52.9166Z' fill='%23232222'/%3E%3C/svg%3E")
}
/* Поле-селект существует только на телефоне: на ≥768 тулбар по канону — одна строка
   (вкладки + поиск), третий ребёнок ломает сетку 354/839. */
[data-catalog][data-kind="equipment"] .cat-select{display:none}

@media(max-width:767px){
  /* Хиро 400 и зазор 40 до каталога. Специфичность (0,2,2) — выше, чем
     `.hero--products .hero-box{height:350px}` в responsive.css: там то же (0,2,0), но
     responsive.css подключён ПОСЛЕ catalogue.css, из-за чего канон 400 молча проигрывал
     и на живом оставалось 350 (замер 24.09). */
  section.hero.hero--products{padding-bottom:28px}
  section.hero.hero--products .hero-box{height:400px;border-radius:16px}
  /* Txt 311 @16 внизу на 24: у /tools/ подзаголовок длиннее кадрового, поэтому прижимаем
     блок к низу (как SPACE_BETWEEN в кадре), а не по top:149 — иначе кнопка налезала на точки. */
  section.hero.hero--products .hero-copy{top:auto;bottom:24px;left:16px;right:16px;max-width:none}
}
@media(max-width:767px){
  [data-catalog][data-kind="equipment"] .catalogue-head{margin-bottom:24px}
  [data-catalog][data-kind="equipment"] .catalogue-toolbar{
    display:flex;flex-direction:column;align-items:stretch;flex-wrap:nowrap;gap:8px;margin:0}
  /* В кадре 375 вкладок режимов нет (у /tools/ они и не работают: mode уходит в API только
     для услуг), а лента категорий заменена выпадающим списком на 50px. */
  [data-catalog][data-kind="equipment"] .catalogue-toolbar .mode-tabs{display:none}
  [data-catalog][data-kind="equipment"] .category-list{display:none}
  /* Строка статуса в кадре не нарисована — держим её полосой внутри канонных 24 до списка. */
  [data-catalog][data-kind="equipment"] .catalogue-status{margin:4px 0}
  /* Поле 1: 343×50, r12, border 1px #009294, подпись/значение 16/18 #5A6E7C, ▶ 24×24 @right 8 */
  [data-catalog][data-kind="equipment"] .cat-select{display:block;position:relative}
  [data-catalog][data-kind="equipment"] .cat-select select{
    -webkit-appearance:none;appearance:none;display:block;width:100%;height:50px;box-sizing:border-box;
    margin:0;padding:8px 40px 8px 16px;border:1px solid #009294;border-radius:12px;background:#fff;
    font-family:inherit;font-size:16px;line-height:18px;font-weight:400;color:#5A6E7C;
    background-image:var(--fb-caret);background-repeat:no-repeat;
    background-position:right 8px center;background-size:24px 24px;cursor:pointer}
  [data-catalog][data-kind="equipment"] .cat-select select:focus-visible{outline:2px solid #009294;outline-offset:2px}
  /* Поле 2 (поиск) — 343×56: пустое как в кадре Services_375, с введённым значением
     залито #009294 с белым × (кадр Tools_375 1264:27248). */
  [data-catalog][data-kind="equipment"] .catalogue-toolbar .search-line{
    height:56px;min-height:56px;box-sizing:border-box;padding:0 8px 0 16px;min-width:0}
  [data-catalog][data-kind="equipment"] .catalogue-toolbar .search-line input{font-size:14px;line-height:16px;min-height:0;color:#5A6E7C}
  [data-catalog][data-kind="equipment"] .catalogue-toolbar .search-line.is-filled{
    background:#009294!important;border-color:#009294!important;border-radius:12px!important}
  [data-catalog][data-kind="equipment"] .catalogue-toolbar .search-line.is-filled input{font-size:16px;line-height:18px;color:#fff}
  [data-catalog][data-kind="equipment"] .catalogue-toolbar .search-line.is-filled input::placeholder{color:rgba(255,255,255,.75)}
  [data-catalog][data-kind="equipment"] .catalogue-toolbar .search-line.is-filled button{background:transparent;width:24px;height:24px;flex:0 0 24px}
  [data-catalog][data-kind="equipment"] .catalogue-toolbar .search-line.is-filled button .icon{width:16px;height:16px;color:#fff}
  /* Результаты: Frame 1074 без паддинга — строки 343 полной шириной, внутрь 16 → 311 */
  [data-catalog][data-kind="equipment"] .catalogue-list{padding:0}
  [data-catalog][data-kind="equipment"] .catalogue-item{
    display:flex;flex-direction:column;gap:0;position:relative;box-sizing:border-box;
    padding:16px 16px 8px;margin:0 0 8px;border-bottom:1px solid #B3DFDF;border-radius:0;min-width:0}
  [data-catalog][data-kind="equipment"] .catalogue-item:last-child{margin-bottom:0;border-bottom:0}
  [data-catalog][data-kind="equipment"] .catalogue-item>.equip-body{display:block;min-width:0}
  /* badge 22 (в кадре строка бейджа 24: бейдж 22 по центру → 1 сверху) → 16 → заголовок */
  [data-catalog][data-kind="equipment"] .catalogue-item .code{
    margin:1px 0 16px;height:22px;min-height:22px;padding:0 10px;border-radius:4px;
    font-size:10px;line-height:12px;font-weight:500}
  [data-catalog][data-kind="equipment"] .catalogue-item h3{font-size:20px;line-height:22px;font-weight:500;margin:0 0 12px}
  [data-catalog][data-kind="equipment"] .catalogue-item>.equip-body>p{font-size:14px;line-height:16px;margin:0}
  /* Поле «Варианты…» 311×40: border #009294, текст 16/18/400 #5A6E7C, ▶ 24×24 @right 8 */
  [data-catalog][data-kind="equipment"] .catalogue-item .equip-dd{
    margin:16px 0 0;border:1px solid #009294;border-radius:12px;background:transparent;overflow:visible}
  [data-catalog][data-kind="equipment"] .catalogue-item .equip-dd>summary{
    min-height:38px;box-sizing:border-box;padding:0 8px 0 16px;gap:10px;
    font-size:16px;line-height:18px;font-weight:400;color:#5A6E7C}
  [data-catalog][data-kind="equipment"] .catalogue-item .equip-dd>summary .icon{display:none}
  [data-catalog][data-kind="equipment"] .catalogue-item .equip-dd>summary::after{
    content:'';flex:0 0 24px;width:24px;height:24px;background:var(--fb-caret) center/24px 24px no-repeat;
    transition:transform .2s ease}
  [data-catalog][data-kind="equipment"] .catalogue-item .equip-dd[open]>summary{border-bottom:0;background:transparent}
  /* В раскрытом виде рамка остаётся ТОЛЬКО у поля-заголовка, список идёт без рамки во всю ширину
     строки (кадр 1264:27253: панель 343 без stroke; поле 311×40 со stroke). */
  [data-catalog][data-kind="equipment"] .catalogue-item .equip-dd[open]{border:0}
  [data-catalog][data-kind="equipment"] .catalogue-item .equip-dd[open]>summary{
    border:1px solid #009294;border-radius:12px;min-height:40px}
  [data-catalog][data-kind="equipment"] .catalogue-item .equip-dd[open]>summary::after{transform:rotate(90deg)}
  /* Чек-лист 1264:27253 во всю ширину строки (343), пункты с отступом 16 → текст @x=32.
     margin −16 = ровно на габарит строки: в раскрытом виде рамки у <details> уже нет. */
  [data-catalog][data-kind="equipment"] .catalogue-item .equip-dd__list{
    margin:0 -16px;padding:2px 16px 8px;display:grid;gap:12px;
    font-size:16px;line-height:18px;font-weight:400;color:#5A6E7C;list-style:none}
  [data-catalog][data-kind="equipment"] .catalogue-item .equip-dd__list li{margin:0;padding-left:16px}
  [data-catalog][data-kind="equipment"] .catalogue-item .equip-dd__term{font-size:14px;line-height:16px}
  [data-catalog][data-kind="equipment"] .catalogue-item .equip-dd__more{
    margin:0;padding-left:16px;font-size:14px;line-height:16px;font-style:normal;color:#809CAF}
  /* Кнопка «i» — в строке бейджа справа 16, а не отдельным блоком под карточкой */
  [data-catalog][data-kind="equipment"] .catalogue-item .catalogue-side{
    position:absolute;top:16px;right:16px;left:auto;bottom:auto;margin:0;padding:0;
    border:0;min-width:0;display:block}
  [data-catalog][data-kind="equipment"] .catalogue-item .catalogue-side .info-btn{
    justify-self:auto;display:grid;place-items:center;width:24px;height:24px;padding:0;
    border:1px solid #009294;border-radius:50%;background:transparent;color:#009294;
    font-size:16px;line-height:22px;font-weight:400;font-family:inherit;cursor:pointer}
}

/* ============================================================
   КАНОН СТРОКИ ПРИБОРА /tools/ на 1280 и 1024 (карточка t_0ff8b1f8, 24.09.2026).
   Кадры Figma z51MVZ2MBMlTUIZd8SjVUo: Tools 1280 1105:14840 (Table Cell 1105:14915,
   808×214) и Tools _1024 1263:21518 (Table Cell 1263:21572, 583×214). Числа — из
   /nodes?ids= (сырьё: audit-20260924/docs/audit/data-canon/figma-tools1280.json):
     • Table Cell [VERTICAL gap 8]: линия 1px #B3DFDF → зазор 8 → Frame 1072
       (HORIZONTAL gap 24, pad 24/16/24/16) — на 1024 те же паддинги, ширина 583;
     • Frame 1072 → Frame 1069 (HORIZONTAL gap 16) = Frame 1067 (VERTICAL gap 16:
       бейдж Bage 49×22 r4 #85BAAF pad 0/10 текст 10/12 w500 #FFFFFF → 16 → Name
       20/22 w500 #009294 → 12 → «Производитель…» 14/16 w400 #809CAF → 16 →
       Text Field 232×40) + Frame 1068 — инфо-иконка 24×24 (круг r100, обводка 1px
       #009294, «i» 16/22 #009294) ВНУТРИ текстовой группы; полосы-разделителя
       у колонки в кадре нет;
     • Text Field 232×40: r12, обводка 1px #009294, pad 8/8/8/16, HORIZONTAL gap 16,
       текст 16/18 w400 #5A6E7C, шеврон 24×24 (канонный вектор ▶, в открытом ▼);
     • раскрытый список — Frame 1082 (708×248, pad-left 16, VERTICAL gap 12): пункты
       16/18 w400 #5A6E7C с отступом 16 (текст на 32 от края строки); плашка выбранного
       (Frame 1081 479×38 #B3DFDF r8) не реализуется — состояния «выбран детектор»
       в каталоге нет с 18.09.2026;
     • оболочка результатов Frame 1074: 840×…, r24, #F3F7FA, pad 0/16/0/16 — строки
       идут от самого верха оболочки, VERTICAL gap 8 между строками.
   Линия между строками реализована как border-top СЛЕДУЮЩЕЙ строки, зазор 8 — gap
   сетки: computed-паддинг рамки остаётся ровно канонным (24/16/24/16). У первой
   строки линии сверху нет (в кадре Line 21 HIDDEN), у последней — снизу (Line 20
   HIDDEN). Высота строки тянется по содержимому: в кадре это одна строка
   «Производитель: … / Страна: …» (две строки текста) и один Text Field, в живом
   каталоге производитель печатается одной строкой, а полей два — детекторы и
   «Испытания на приборе» (кадр второго поля не рисует) — этой разницей строка
   выше/ниже кадровых 214 (замер и разбор — в отчёте карточки).
   СКОУП — только /tools/: у /services/ строка своя (карточка t_a3f0d542), у каталога
   на ≤767 — свой канон Tools_375 (блок выше, карточка t_f314c1ae).
   ============================================================ */
@media(min-width:768px){
  [data-catalog][data-kind="equipment"] .catalogue-list{display:grid;gap:8px;padding:0 16px}
  [data-catalog][data-kind="equipment"] .catalogue-item{
    position:relative;display:block;box-sizing:border-box;border-radius:0;margin:0;
    padding:24px 16px;border-top:1px solid #B3DFDF;border-bottom:0}
  [data-catalog][data-kind="equipment"] .catalogue-item:first-child{border-top:0}
  /* Резерв под инфо-иконку: 24 иконка + 16 зазор = колонка текста 736, как в кадре. */
  [data-catalog][data-kind="equipment"] .catalogue-item>.equip-body{
    display:block;min-width:0;position:relative;padding-right:40px}
  [data-catalog][data-kind="equipment"] .catalogue-item .code{display:flex;width:max-content;margin:0 0 16px}
  [data-catalog][data-kind="equipment"] .catalogue-item h3{margin:0 0 12px}
  [data-catalog][data-kind="equipment"] .catalogue-item>.equip-body>p{margin:0}
  /* Кнопка «i»: 24×24 в строке бейджа (top строки + 24, right 16), без линии у колонки. */
  [data-catalog][data-kind="equipment"] .catalogue-item .catalogue-side{
    position:absolute;top:24px;right:16px;left:auto;bottom:auto;margin:0;padding:0;
    border:0;min-width:0;display:block}
  [data-catalog][data-kind="equipment"] .catalogue-item .catalogue-side .info-btn{
    display:grid;place-items:center;width:24px;height:24px;padding:0;margin:0;
    border:1px solid #009294;border-radius:50%;background:transparent;color:#009294;
    font-family:inherit;font-size:16px;line-height:22px;font-weight:400;cursor:pointer}
  /* Поле списка: 232×40 по содержимому, обводка #009294 r12, текст 16/18/400 #5A6E7C. */
  [data-catalog][data-kind="equipment"] .catalogue-item .equip-dd{
    display:block;width:auto;margin:16px 0 0;border:0;border-radius:0;background:transparent;overflow:visible}
  [data-catalog][data-kind="equipment"] .catalogue-item .equip-dd>summary{
    display:inline-flex;align-items:center;justify-content:flex-start;gap:16px;
    height:40px;min-height:40px;box-sizing:border-box;padding:8px 8px 8px 16px;
    border:1px solid #009294;border-radius:12px;background:transparent;white-space:nowrap;
    font-size:16px;line-height:18px;font-weight:400;color:#5A6E7C;
    cursor:pointer;list-style:none}
  [data-catalog][data-kind="equipment"] .catalogue-item .equip-dd>summary .icon{display:none}
  [data-catalog][data-kind="equipment"] .catalogue-item .equip-dd>summary::after{
    content:'';flex:0 0 24px;width:24px;height:24px;
    background:var(--fb-caret) center/24px 24px no-repeat;transition:transform .2s ease}
  [data-catalog][data-kind="equipment"] .catalogue-item .equip-dd[open]>summary{
    border:1px solid #009294;background:transparent}
  [data-catalog][data-kind="equipment"] .catalogue-item .equip-dd[open]>summary::after{transform:rotate(90deg)}
  /* Список — под строкой: от края строки 16, пункты на 32, шаг 30 (18 + gap 12). */
  [data-catalog][data-kind="equipment"] .catalogue-item .equip-dd__list{
    margin:16px 0 0;padding:0 0 0 16px;display:grid;gap:12px;list-style:none;
    font-size:16px;line-height:18px;font-weight:400;color:#5A6E7C}
  [data-catalog][data-kind="equipment"] .catalogue-item .equip-dd__list li{margin:0;padding-left:16px}
  [data-catalog][data-kind="equipment"] .catalogue-item .equip-dd__term{font-size:14px;line-height:16px;color:#809CAF}
  [data-catalog][data-kind="equipment"] .catalogue-item .equip-dd__more{
    margin:0;padding-left:16px;font-style:normal;font-size:14px;line-height:16px;color:#809CAF}
}
