
/* ═══════════════ Заявка владельца 05.10.2026, партия 2 ═══════════════ */

/* (5) ИНТРО: значки сертификатов (Нац. система аккредитации, Минпромторг, ГОСТ/ISO 9001).
   Было: у ISO-значка своя высота и он стоял ниже/выше соседей, ряд рвался на 320–375,
   на 1024 значки оставались 42px при сжатом логотипе. Теперь: единая высота значка по
   брейкпоинтам, все элементы по центру строки, ряд переносится целиком, а не по одному. */
.cert-row{display:flex;align-items:center;gap:32px;flex-wrap:wrap;row-gap:16px}
.cert-item{display:flex;align-items:center;gap:10px;flex:0 0 auto}
.cert-item img{height:42px;width:auto;flex:0 0 auto;display:block}
.cert-item span{font-size:8px;line-height:10px;color:#5a6e7c;font-weight:400}
@media(min-width:1280px){
  .cert-item img{height:50px}
  .cert-item span{font-size:9px;line-height:11px}
}
@media(max-width:767px){
  .cert-row{gap:20px}
  .cert-item img{height:28px}
  .cert-item span{font-size:7.9px;line-height:10.26px}
}

/* (6) ФОРМА: подписи согласий. Было align-items:center — при переносе текста на 2–3 строки
   чекбокс «висел» посередине абзаца и выглядел оторванным; на планшете/телефоне строки
   разъезжались по высоте. Теперь: чекбокс по первой строке, ровный межстрочный, аккуратный
   перенос и одинаковые отступы между согласиями на всех разрешениях. */
.checks{display:flex;flex-direction:column;gap:12px}
.checks label{display:flex;align-items:flex-start;gap:10px;font-size:13px;line-height:1.4}
.checks label input[type="checkbox"]{margin-top:1px;flex:0 0 auto}
@media(max-width:1023px){
  .checks label{font-size:12.5px;line-height:1.42}
}
@media(max-width:767px){
  .checks{gap:10px}
  .checks label{font-size:12px;line-height:1.4}
}

/* (10) НАШИ ЛАБОРАТОРИИ: вместо превью-миниатюр под основной фотографией — точки на самой
   фотографии (сколько всего кадров + активный). Клик по точке открывает просмотрщик на
   этом кадре, клик по фото — как раньше, с первого кадра. */
.labs-tabs__img{position:relative}
.labs-dots{position:absolute;left:0;right:0;bottom:14px;display:flex;justify-content:center;gap:8px;z-index:2}
.labs-dots__dot{width:10px;height:10px;border-radius:50%;border:0;padding:0;cursor:pointer;
  background:rgba(255,255,255,.6);box-shadow:0 0 0 1px rgba(39,45,49,.18) inset;transition:background .2s,transform .2s}
.labs-dots__dot:hover{background:#fff}
.labs-dots__dot.is-active{background:#fff;transform:scale(1.15)}
@media(max-width:767px){.labs-dots{bottom:10px}.labs-dots__dot{width:8px;height:8px}}
/* превью-миниатюры убраны из разметки виджета; если старая разметка осталась в кэше — скрываем */
.labs-tabs__thumbs{display:none!important}

/* (11) ЭТАПЫ СОТРУДНИЧЕСТВА: на всех разрешениях ≤1279 — слайдер (как на 1280+), а не
   вертикальный столбец с кнопкой «+». Карточки: 1 в кадре на телефоне, 2 на планшете,
   3 на 1024–1279. Точки-пагинатор под слайдером. */
.steps .steps-pager{display:flex;justify-content:center;gap:8px;margin-top:18px}
.steps .steps-pager__dot{width:8px;height:8px;border-radius:50%;border:0;padding:0;cursor:pointer;
  background:#ccf2ea;transition:background .2s,transform .2s}
.steps .steps-pager__dot.is-active{background:#85baaf;transform:scale(1.15)}
.steps .steps-stack,.steps .steps-expand{display:none!important}
@media(max-width:767px){
  .steps .step-card{flex:0 0 86%;width:86%}
}
@media(min-width:768px) and (max-width:1023px){
  .steps .step-card{flex:0 0 calc(50% - 6px);width:calc(50% - 6px);min-height:230px}
}
@media(min-width:1024px) and (max-width:1279px){
  .steps .step-card{flex:0 0 calc((100% - 24px)/3);width:calc((100% - 24px)/3)}
}

/* (13) ФОРМА «Стать частью команды» (/career/): блок «Загрузите резюме» должен заканчиваться
   на одном уровне с колонкой полей. Канон карьеры (4 поля: 4*56+3*8 = 248; textarea 130 +
   8 + upload 110 = 248) уже задан в audit-fixes.css через :has(4 поля в колонке) — селектор
   там специфичнее, поэтому отдельное правило здесь не нужно.
   ВАЖНО (06.10.2026): раньше тут стояло безусловное `#apply .upload{min-height:132px}`, и оно
   задевало ГЛАВНУЮ, где канон иной (6 полей слева: 6*56+5*8 = 376; textarea 248 + 8 + upload
   120 = 376 из base.css). Из-за лишних 12px правая колонка на главной уезжала вниз.
   Не возвращать без привязки к странице (:has / body-класс). */

/* (14-правка) ИНТРО, ряд сертификатов: подпись «Сертифицированы / ГОСТ Р ИСО 9001-2015 /
   (ISO 9001:2015)» должна укладываться в 3 строки и не выходить за колонку (канон Frame 794:
   89x31 при значке 42). Замеры 05.10: подпись 89px давала 4 строки и ряд упирался в 487px
   колонки (правый край 953 при границе 952). Теперь: подпись 92px (строка «ГОСТ Р ИСО
   9001-2015» ~86px), разрешён перенос всего ряда вместо выезда, зазор 28px на планшете. */
.main-intro .cert-row{gap:26px!important;flex-wrap:wrap!important;align-items:center;max-width:100%}
.main-intro .cert-item{gap:14px!important;min-width:0;max-width:100%}
.main-intro .cert-item img{height:42px!important;flex:0 0 auto}
.main-intro .cert-item span{width:89px;max-width:100%;font-size:8.6px!important;line-height:9.9px!important;
  white-space:normal;overflow-wrap:break-word;word-break:normal;hyphens:none}
@media(min-width:1280px){
  .main-intro .cert-row{gap:34px!important}
  .main-intro .cert-item img{height:50px!important}
  .main-intro .cert-item span{width:110px;font-size:10.7px!important;line-height:12.2px!important}
}

@media(max-width:767px){
  .main-intro .cert-row{gap:14px!important}
  .main-intro .cert-item{gap:8px!important}
  .main-intro .cert-item img{height:28px!important}
  .main-intro .cert-item span{width:72px;font-size:8px!important;line-height:9.2px!important}
}

/* (15) «ФАРМОБОРОНА в цифрах», ряд 2 — по канону фигмы.
   Ряд: горизонтальный, зазор 32, align-items:center. Карточка «15 лет» по центру ряда,
   внутри зазор 24, содержимое сверху: значение (42 px), текст 16/18, кнопка 252x56
   (18/20, border 1px #85BAAF, r100) — кнопка ВНУТРИ карточки, не ниже её.
   Канон 1280 «Frame 922»: ряд 1137, фото 753x364, карточка 352x200 (значение 60/42, текст 3 строки).
   Канон 1024: ряд 880, фото 592x364, карточка 256x275 (значение 50/35, текст 4 строки).
   Канон 1440–1920: ряд 1328, фото 883, карточка 413x264 (значение 60/42). */
@media(min-width:1024px){
  .stats-panel .stats-grid>.stat.stat-media{justify-self:start;height:364px!important;min-height:364px}
  .stats-panel .stats-grid>.stat.stat-year{justify-self:start;align-self:center!important;
    padding:0!important;gap:24px!important;display:flex;flex-direction:column;justify-content:flex-start;
    background:transparent;border-radius:32px}
  .stats-panel .stats-grid>.stat.stat-year .stat-value{font-weight:500;color:#85BAAF}
  .stats-panel .stats-grid>.stat.stat-year .stat-text{font-size:16px!important;line-height:18px!important;color:#85BAAF}
  .stats-panel .stats-grid>.stat.stat-year .btn{margin-top:0!important;align-self:flex-start;flex:0 0 auto;
    width:252px;height:56px;min-height:56px;padding:18px 24px;border:1px solid #85BAAF;border-radius:100px;
    font-size:18px;line-height:20px;font-weight:500;color:#85BAAF}
}
@media(min-width:1280px) and (max-width:1439px){
  .stats-panel .stats-grid>.stat.stat-media{width:753px!important;justify-self:start}
  .stats-panel .stats-grid>.stat.stat-year{justify-self:end!important}
  .stats-panel .stats-grid>.stat.stat-year{width:352px!important;height:200px!important;min-height:200px}
  .stats-panel .stats-grid>.stat.stat-year .stat-value{font-size:60px!important;line-height:42px!important}
}
@media(min-width:1440px){
  .stats-panel .stats-grid>.stat.stat-media{width:calc(100% - 24px)!important}
  .stats-panel .stats-grid>.stat.stat-year{width:428px!important;height:264px!important;min-height:264px;
    padding:40px 0 24px!important}
  .stats-panel .stats-grid>.stat.stat-year .stat-value{font-size:60px!important;line-height:42px!important}
}
@media(min-width:1024px) and (max-width:1279px){
  .stats-panel .stats-grid>.stat.stat-media{width:592px!important}
  .stats-panel .stats-grid>.stat.stat-year{width:256px!important;height:275px!important;min-height:275px;padding:40px 0 24px!important}
  .stats-panel .stats-grid>.stat.stat-year .stat-value{font-size:50px!important;line-height:35px!important}
}
@media(max-width:1023px){
  .stats-panel .stats-grid>.stat.stat-year{height:auto!important;min-height:0;padding:24px!important;gap:16px!important}
  .stats-panel .stats-grid>.stat.stat-year .stat-value{font-size:40px!important;line-height:42px!important}
  .stats-panel .stats-grid>.stat.stat-year .btn{margin-top:16px;align-self:flex-start}
  .stats-panel .stats-grid>.stat.stat-media{height:240px!important;min-height:240px}
}

/* (16) Страница /awards/: описание награды с официального источника под текстом карточки */
.news-card--award .news-card__desc{font-size:13px;line-height:17px;color:#4a5457;margin:8px 0 0}
.news-card--award .news-card__src{display:inline-block;margin-top:8px;font-size:12px;line-height:14px;
  color:#009294;text-decoration:underline;overflow-wrap:anywhere}
.news-card--award .news-card__src:hover{opacity:.75}
@media(max-width:767px){
  .news-card--award .news-card__desc{font-size:12px;line-height:15px}
  .news-card--award .news-card__src{font-size:11px}
}

/* (18) КАТАЛОГ: «Цена по запросу» — бирюзовым, как акцентные шрифты (заявка стр.34:
   «Проверить цвет. Должен быть как бирюзовый шрифт»). Канон Tools/Services 1280: рядом
   с заголовком услуги цвет акцента #009294, серый #809CAF был ошибкой. */
.catalogue-item .price-private{color:var(--teal,#009294)}

/* (19) ПОП-АП ПРИБОРА (заявка стр.38): ползунок скроллбара выходил за рамку окна —
   прокрутка была на .fb-modal__in (рамка), Chrome рисовал ползунок до края окна.
   Прокрутку переносим на внутренний .fb-modal__body, рамка без overflow — ползунок
   всегда внутри скругления 24px.
   06.10.2026 (t_d0f7eba6): в флекс-колонке float:right у крестика игнорируется —
   крестик уезжал в ЛЕВЫЙ угол всех окон. Крестик теперь absolute top-right
   (рамка position:relative из audit-fixes), он вне скролл-контейнера и висит
   поверх padding-right:48px заголовков — геометрия как при float. */
.fb-modal__in{overflow:visible;display:flex;flex-direction:column}
.fb-modal__body{overflow:auto;flex:1 1 auto;min-height:0}
.fb-modal__in::-webkit-scrollbar{display:none}
.fb-modal__close{position:absolute;top:14px;right:14px;float:none;margin:0}

/* (23) ОКНО ЗАЯВКИ НА ТЕЛЕФОНЕ (заявка 05.10 стр.22): контент формы выше окна
   (замер 375×740: контент 775px при окне 636px) — кнопка «Отправить» и чекбокс
   согласия уходили за нижний край и были недостижимы. Окно прижимаем к верху
   (margin:0 auto) и растягиваем до 92vh, внутренняя прокрутка — на .fb-modal__body
   (см. (19)). Так форма открывается целиком в первом экране, хвост прокручивается
   внутри окна. Десктоп не трогаем: там контент помещается в 86vh. */
@media(max-width:767px){
  .fb-modal{max-height:min(92vh,100%);height:fit-content;margin:0 auto}
  .fb-modal__in{max-height:92vh}
  .fb-req__lead{margin-bottom:14px}
  .fb-req__grid{gap:10px;margin-bottom:10px}
  .fb-req .fb-req__form .field{padding-top:10px;padding-bottom:10px}
  .fb-req textarea.field{min-height:96px}
  .fb-req__checks{margin:10px 0 12px}
  .fb-req__actions{margin-bottom:0}
  .fb-modal__body{padding:20px 16px}
}

/* (20) ФОРМА ЗАПРОСА ПО ОБОРУДОВАНИЮ (заявка стр.38): pop-up прямо в окне прибора,
   разметка из catalogue.js (.equip-req). Поля в одну колонку, подпись сверху, инпуты
   как у #apply (r12, border #d3e3e6), readonly-поля с серым фоном. */
.equip-req{display:grid;gap:14px;margin-top:14px}
.equip-req__field{display:grid;gap:6px;min-width:0}
.equip-req__field>span{font-size:13px;line-height:15px;color:#516977;font-weight:500}
.equip-req__field input,.equip-req__field textarea{width:100%;box-sizing:border-box;
  border:1px solid #d3e3e6;border-radius:12px;background:#fff;padding:12px 14px;
  font:inherit;font-size:15px;line-height:18px;color:#272d31;resize:vertical}
.equip-req__field input:focus,.equip-req__field textarea:focus{outline:2px solid #009294;outline-offset:1px;border-color:#009294}
.equip-req__field input[readonly]{background:#f4f8f9;color:#516977}
.equip-req__out{margin:0;min-height:18px;font-size:14px;line-height:18px;color:#b42318}

/* (21) КНОПКА «ВВЕРХ» В РАЗДЕЛАХ КАТАЛОГА (заявка стр.35): должна возвращать к началу
   текущего раздела (заголовок каталога), а не к первому экрану. Логика — в FB2.ScrollTop.tpl,
   здесь только страховка: на страницах каталога раздел начинается сразу после хиро,
   сам якорь #catalog существует в разметке обеих страниц. */

/* ── Форма «Отправить обращение» (#apply): вложения — реальная загрузка (06.10.2026) ──
   Клик по всей области .upload (вкл. круглый «+» .upload-badge) открывает выбор файла,
   drag&drop с подсветкой .is-dragover, список выбранных .upload-files с удалением.
   Правила изолированы под #apply, чтобы не задеть другие страницы. */
#apply .upload{position:relative}
#apply .upload.has-files{cursor:default}
#apply .upload.is-dragover{border-color:var(--teal,#009294);background:rgba(0,154,155,.06);box-shadow:0 0 0 2px rgba(0,154,155,.12)}
#apply .upload-files{margin-top:12px;display:grid;gap:8px}
#apply .upload-files__row{display:flex;align-items:center;gap:12px;border:1px solid #d3e3e6;border-radius:10px;background:#f4fafb;padding:8px 12px}
#apply .upload-files__name{flex:1 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:14px;line-height:16px;color:#272d31}
#apply .upload-files__size{flex:0 0 auto;font-size:12px;line-height:14px;color:#809caf}
#apply .upload-files__remove{flex:0 0 32px;width:32px;height:32px;border:0;border-radius:50%;background:transparent;color:#809caf;font-size:20px;line-height:1;cursor:pointer;display:grid;place-items:center}
#apply .upload-files__remove:hover{background:rgba(180,35,24,.08);color:#b42318}
#apply .upload input[type=file]{cursor:pointer}

/* (17) ЛАЙТБОКС (.fb-viewer, просмотрщик фото наград/лабораторий) — заявка 05.10 стр.5, 28.
   Было: подпись лежала на тёмной полупрозрачной плашке ПОВЕРХ фото (base.css: absolute,
   bottom:18px, фон rgba(16,37,46,.72)) — нечитаемо, грамота перекрыта. Теперь: плашки нет,
   подпись — в белой панели справа, под заголовком: цвет как у заголовка (#334b56),
   обычное (не жирное) начертание, кегль чуть крупнее прежней плашки (14px), без фона.
   Порядок в DOM менять не нужно: meta, title, caption уже идут друг за другом в .fb-viewer__info,
   подпись визуально встаёт под заголовком. Счётчик «N / M» остаётся прижатым к низу панели. */
.fb-viewer .fb-viewer__caption{position:static;transform:none;max-width:none;
  background:transparent;padding:0;border-radius:0;text-align:left;color:#334b56;
  font-size:14px;font-weight:400;line-height:1.55;white-space:pre-line;margin:0 0 10px}
.fb-viewer .fb-viewer__title{margin:10px 0 10px}
@media(max-width:767px){
  .fb-viewer .fb-viewer__caption{font-size:12.5px}
}

/* (22) /clients/ ПЕРВЫЙ ЭКРАН ПО КАНОНУ ФИГМЫ (заявка 05.10 стр.21, Бессонова:
   «отступы, строка поиска, кнопка с лупой и т.д.»). Канон — файл z51MVZ2MBMlTUIZd8SjVUo:
   Clients 1280 = 1077:13163, Clients _1024 = 1242:18112, Clients_375 = 1255:18634.
   Было (замер живого 05.10): подпись 20/22 вместо 24/26, поле 360×54 вместо 430×54,
   паддинг поля L24/R9 вместо L16/R10, зазор подпись→поле 0 (margin-bottom:0!important
   из fb-canon), кнопка — текстовый глиф «⌕» вместо белой SVG-лупы 16px, left копирайта 49
   вместо 48; на 375: поле 260×54 #f3f7fa вместо 312×36 #dae7f0, кнопка 36 вместо 23,
   подпись 14/400 вместо 16/500, зазор подпись→поле 0 вместо 8.
   Десктоп-часть — только ≥1024 (канон 1024/1280; 768–1023 каноном не покрыт — там
   бокс 500px и контент с новыми зазорами не помещается). Специфичность: заголовочную
   правку даём с !important, т.к. fb-canon держит body .hero-copy p{...!important} ≤767
   и .hero-copy p{margin-bottom:0!important} глобально. Селекторы под .clients-page-hero —
   другие страницы не затрагиваются.
   --- 06.10: сверка с кадром 1077:13165 (Main screen 1201×618, он же первый экран Clients 1280)
   замерами живого /clients/ на 1280 и 1440. Совпало: left 48, низ копирайта 48, зазор
   заголовок→подзаголовок 16, подпись 24/26 500 белая, зазоры 60 (Frame 1002) и 24 (Frame 987),
   поле 430×54 r100 #F3F7FA, левый паддинг поля 16, правый 10, круг 36 #009294, плейсхолдер 18px.
   Доправлено: паддинг поля 8/10/8/16 (было 0/10/0/16), зазор внутри 4 + бирюзовая линия 1×20
   (Line 15) — раньше их не было вовсе, зазор до кнопки 24 (было 0 → инпут 368 вместо 344),
   лупа 16×16 (было 18), плейсхолдер #A7B4BC (было #A8B4BD).
   Верх колонки на живом 142 при 150 в кадре: подзаголовок в браузере 66px (3×22), в Figma
   бокс 58px (артефакт метрик экспорта) — низ и внутренние зазоры по кадру, эту разницу не «лечим».
   Мобильный кадр — 1255:18636 (343×400; 1255:18585 из заявки в файле отсутствует). */
@media(min-width:1024px){
  .clients-page-hero .hero-copy{left:48px}   /* канон: 18436-18388=48 */
  section.hero.clients-page-hero .hero-copy p.hero-search-title{
    font-size:24px;line-height:26px;font-weight:500;
    margin:60px 0 24px !important;           /* канон: Frame 1002 gap 60, Frame 987 gap 24 */
  }
  .clients-page-hero .hero-copy .hero-search{
    width:430px;
    padding:8px 10px 8px 16px;             /* канон Search: 430×54, pad 8/10/8/16, r100 */
    gap:4px;                               /* канон Frame 966: линия → плейсхолдер = 4 */
  }
  .clients-page-hero .hero-copy .hero-search button{margin-left:20px} /* 4(gap)+20 = 24: Frame 966 → Icons */
}
/* Канон Line 15 (Frame 966): бирюзовая вертикальная линия 1×20 сразу за левым паддингом поля. */
.clients-page-hero .hero-copy .hero-search::before{
  content:"";display:block;flex:0 0 auto;width:1px;height:20px;background:#009294;
}
.clients-page-hero .hero-copy .hero-search button{
  font-size:0;line-height:0;                 /* глиф «⌕» прячем, рисуем SVG-лупу */
  background-color:#009294;
  background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none'><circle cx='10.5' cy='10.5' r='7.5' stroke='white' stroke-width='2.4'/><line x1='16.2' y1='16.2' x2='21.5' y2='21.5' stroke='white' stroke-width='2.4' stroke-linecap='round'/></svg>");
  background-repeat:no-repeat;background-position:center;background-size:16px 16px; /* канон: лупa 16×16 в круге 36 */
}
@media(max-width:767px){
  /* Канон 1255:18634 (Main screen 343×400, отступы 16): подпись 16/18/500,
     зазоры p→подпись 24, подпись→поле 8, поле 312×36 #dae7f0 (pad 8/6/8/16,
     внутри линия 1×20 + плейсхолдер 14/20 400, gap 4),
     кнопка 23×23 с лупой ~10px, низ копирайта 24. */
  .clients-page-hero .hero-copy{bottom:24px}
  section.hero.clients-page-hero .hero-copy p.hero-search-title{
    font-size:16px !important;line-height:18px !important;font-weight:500 !important;
    margin:24px 0 8px !important;
  }
  .clients-page-hero .hero-copy .hero-search{
    width:min(312px,100%);height:36px;background:#dae7f0;
    padding:8px 6px 8px 16px;gap:4px;
  }
  .clients-page-hero .hero-copy .hero-search input{font-size:14px}
  .clients-page-hero .hero-copy .hero-search input::placeholder{color:#a7b4bc;font-size:14px}
  .clients-page-hero .hero-copy .hero-search button{
    width:23px;height:23px;border-radius:50%;
    background-size:11px 11px;   /* видимый глиф ≈10px, канон 1255:18634 */
  }
}
/* Цвет плейсхолдера по канону (Frame 966 / Search: #A7B4BC) на всех ширинах. */
/* Канон Frame 966: внутри поля сначала линия (16+1), зазор 4, затем текст 339 —
   поэтому у инпута убираем левый паддинг UA (2px), иначе текст уезжает вправо и
   обрезается последнее слово. */
.clients-page-hero .hero-copy .hero-search input{padding-left:0}
.clients-page-hero .hero-copy .hero-search input::placeholder{color:#a7b4bc}

/* ==== Part "About" of owner request 05.10 (pages 12-19) ==== */

/* (24) /about/ mission: word wrapping + quote icon (p.12).
   Long words were broken by letters (hyphens inside words on the live screenshot):
   fb-canon-20260914.css:316 keeps hyphens:auto for p. Canon About 1280 (975:12852):
   no hyphenation at all, text 24/26 inside 545px. Icon: canon Group 14 is
   54.0x46.0 (#009294), live SVG serves 54x47 - the "distortion" is the glyph
   slant; restore canonical proportions. */
.mission .lead,
.mission .muted{-webkit-hyphens:manual !important;hyphens:manual !important;overflow-wrap:break-word;word-break:normal}
.mission img.quote-mark{display:block;width:54px;max-width:54px;height:46px;transform:none}

/* (25) /about/ stats "15 let" cell (p.13): caption under the value must be WHITE
   (canon 975:12877: #FFFFFF, 16/18) - the live grey .stat-text is unreadable
   on the light gradient bottom. Word wrapping there too. The "15 let" value
   itself is already white; only the caption color changes (no !important:
   fb-canon has none for this selector). */
.stats-panel--dark .stat-year .stat-text{color:#ffffff !important;-webkit-hyphens:manual;hyphens:manual;overflow-wrap:break-word}
/* same wrapping policy for the regular number cards (p.13 "word wrapping"): the
   owner request targets the whole stats block; hyphens:auto from fb-canon was
   breaking words with dashes ("prove-deno") inside the white cards */
.stats-panel--dark .stat .stat-text{-webkit-hyphens:manual !important;hyphens:manual !important;overflow-wrap:break-word}

/* (28) /about/ history hidden (p.15): owner asked to hide the History block
   for now (including the dropdown item - done in DB markup via
   tools/about-owner-fixes-20261006.php which adds section--hidden +
   data-owner-hidden). Re-enabling = remove the class from the resource. */
.section--hidden{display:none !important}

/* (26) /about/ stats media cell (p.13): "video like the first screen" - canon
   (975:12871/12873) is a photo block 753x364; live markup is
   <div class="stat stat-media"><img ...>. The video part waits for the source
   file (C0193.mp4 on the file server is not reachable); content swap lives in
   tools/about-owner-fixes-20261006.php. This rule prepares the cell for <video>:
   radius and object-fit like the hero video. */
/* cell is a flex container (from .stat base) - percentage height on a flex item
   does not resolve; anchor the video absolutely inside the cell instead */
.stat.stat-media{position:relative}
.stat.stat-media video{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;border-radius:24px;display:block}

/* (27) /about/ mercury (p.17): canon has a photo in place of the placeholder
   (_23A7680.jpg, owner must publish it; currently unreachable). Rule activates
   once tools/about-owner-fixes-20261006.php swaps <img> in. */
.mercury-grid .mercury-photo{flex:1 1 436px;width:auto;height:340px;border-radius:24px;overflow:hidden}
.mercury-grid .mercury-photo img{width:100%;height:100%;object-fit:cover;display:block}
@media(max-width:1023px){
  .mercury-grid .mercury-photo{width:100%;flex:0 0 auto;height:240px}
}

/* (22) ХИРО /services/ И /tools/ (заявка стр.33): «Убрать фотографии. Взять из Фигмы
   одну картинку» + «Заголовок, подзаголовок и кнопка должны быть выровнены по
   середине относительно изображения» + «Перенос» (дефисного переноса нет).
   Канон Figma 1035:13095 / 1105:14840: Main screen 1201x618 r24 fill #DDE1E9,
   фото-слой прижат к правому краю (1052x660, обрезка 87 справа), Frame 788 текст
   688x304 @x=48 — центр текста = центр бокса (157+152=309=618/2), т.е. блок
   центрирован по вертикали. Заголовок 50/52/700 #009294, подзаголовок 24/26/500
   #809CAF (перенос по словам: hyphens:none + overflow-wrap:break-word), кнопка
   246x56 r100 fill #009294.
   Реализация: hero-photo (одна картинка, ассет собран из wmremove-transformed —
   отзеркален по X и обрезан до 1800x926, свет слева/капсулы справа как в каноне)
   object-fit:cover на весь бокс; слайдер/точки из разметки убраны. Боксу держим
   фон #DDE1E9 (канон fill) — фото его полностью закрывает, стыка нет. */
.hero--products .hero-photo{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;object-position:60% 50%;z-index:1;border:0;margin:0;padding:0}
/* Панель под текст (Rectangle 3975904, 731/1201 = 60.9% ширины) — как в каноне:
   плотная до ~61%, дальше растворяется. Фото правой частью выходит из-под панели,
   капсулы читаются. */
.hero--products .hero-box{background:#DDE1E9}
/* Центрирование текста по вертикали: Frame 788 688x304 в боксе 618 — центр 309.
   Базовое .hero-copy{top:110px} из base.css давало верх текста 110 при каноне 157
   (157+304+157=618). Абсолютное центрирование translateY(-50%) повторяет канон
   и устойчиво к высоте строк. fb-canon держит hyphens:auto на p — глушим на месте:
   дефисных переносов в кадре нет. */
.hero--products .hero-copy{top:50%;bottom:auto;transform:translateY(-50%);left:48px;max-width:688px;position:absolute;z-index:3}
.hero--products .hero-copy h1{hyphens:manual;-webkit-hyphens:manual;overflow-wrap:break-word}
.hero--products .hero-copy p{hyphens:manual;-webkit-hyphens:manual;overflow-wrap:break-word}
@media(max-width:767px){
  /* Мобильный канон Services_375/Tools_375: бокс 400, текст от верха (top 144/149) —
     центрирование не канонично на телефоне, держим прежнюю привязку top из
     responsive.css (top:46px). object-position держит капсулы в узком поле. */
  .hero--products .hero-copy{top:46px;transform:none}
  .hero--products .hero-photo{object-position:75% 50%}
}

/* ==== Part "Career" of owner request 05.10 (pages 40-45) ==== */

/* (42)/(44) /career/: «Должны везде быть переносы по словам». На живом скриншоте
   fb-canon-20260914.css:316 `body{hyphens:auto}` рвёт слова дефисом
   («зар-платы», «жизнен-ные», «регламен-тированный», «диспет-черской», «повы-шают»).
   Канон переносов — по словам: hyphens:manual + overflow-wrap:break-word (как на /about/). */
.career-benefits h3,
.career-benefits .benefit-detail,
.career-ladder > p,
.career-ladder h2,
.career-ladder .calc-question,
.career-ladder .calc-option,
.career-ladder .calc-answers__row,
.career-message h2,
.mentor-copy h2,
.mentor-copy p,
.gallery h2{-webkit-hyphens:manual !important;hyphens:manual !important;overflow-wrap:break-word;word-break:normal}

/* (44) финальный шаг анкеты — ФИО/Телефон/Почта + согласия (стр.44: «в конце нужно добавить
   в форму поля ФИО, Телефон, Почта»). Форма живёт внутри .calc-step, разметка — в ресурсе 5
   (tools/career-owner-fixes-20261006.php), поведение — site.js (сохранение ответов). */
.calc-form{margin-top:20px}
.calc-form .form-grid{grid-template-columns:1fr 1.4fr}
.calc-form .form-grid>.form-stack:first-child{width:auto}
.calc-form textarea.field{height:184px;min-height:184px}
.calc-form .form-actions .btn{width:auto;min-width:200px;padding:0 28px}
.calc-answers{grid-column:1/-1;display:grid;gap:6px;margin-top:16px;text-align:left}
.calc-answers:empty{display:none}
.calc-answers__title{font-weight:500;color:var(--teal)}
.calc-answers__row{display:flex;justify-content:space-between;gap:16px;font-size:14px;line-height:20px;border-bottom:1px solid rgba(0,146,148,.15);padding-bottom:4px}
.calc-answers__row b{font-weight:500;color:#262c31}
@media(max-width:767px){
  .calc-form .form-grid{grid-template-columns:1fr}
  .calc-form textarea.field{height:140px;min-height:140px}
  .calc-form .form-actions .btn{width:100%}
}
/* (27) /about/, блок «Решаем комплексные и нестандартные задачи» — заявка Бессоновой 05.10, стр.14:
   фото заменено на видео (C0193.mp4 -> about-tasks.mp4|webm, мобильная пара). Видео лежит поверх
   фото в той же ячейке .services-block__photo; фото остаётся постером до загрузки и заглушкой
   при reduced-motion / saveData. Запуск — в site.js по селектору [data-services-video]. */
.services-block__video{position:relative}
.services-block__video>img,
.services-block__video>video{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;border-radius:24px}
.services-block__video>video{opacity:0;transition:opacity .4s ease;z-index:1}
.services-block__video.video-ready>video{opacity:1}

/* (28) /about/, блок «Золотой Меркурий» — стр.17: в пустую ячейку добавлено фото _23A7680.jpg
   (mercury-photo.webp). Ячейка уже задана в audit-fixes.css (436x340 / 100%x240 на мобиле),
   здесь только вписываем картинку по размеру ячейки. */
.mercury-placeholder{overflow:hidden}
.mercury-placeholder img{width:100%;height:100%;object-fit:cover;border-radius:24px;display:block}
/* (29) Блок «Награды» — правка владельца 06.10 (стр.4 заявки Бессоновой):
   «Навигация должна двигаться» + «Убрать [номера слайдов]».
   - полоса фильтров теперь скроллится колесом/перетаскиванием (обработчики в widgets.js):
     курсор-«рука», выделение текста при протяжке отключено;
   - счётчик «1 / 33» в карточке награды удалён из разметки (виджет его больше не создаёт);
     на всякий случай глушим и сам элемент, если он остался от кэша. */
.awards-filters{cursor:grab;-webkit-user-select:none;user-select:none;touch-action:pan-x;scroll-behavior:smooth}
.awards-filters.is-dragging{cursor:grabbing;scroll-behavior:auto}
.awards-filter{cursor:pointer}
.awards-count{display:none!important}
/* (30) ПЕРЕНОСЫ ПО СЛОВАМ НА ВСЁМ САЙТЕ — правка владельца 06.10.2026
   («Должны везде быть переносы по словам по всему сайту проверь»).

   Причина: два ранних слоя включали автоперенос по слогам —
     fb-canon-20260914.css:315-316  body / p,li,td,th,dd → hyphens:auto
     figma-final.css:1426-1430      .content-section, p, .contact-card,
                                    .benefit-card, .service-card, .vacancy-card
     editorial.css                  .editorial-hero h1 → hyphens:auto
   В результате браузер дописывал дефис ВНУТРИ слова («лекар-ственных»,
   «оборудова-ния») — на скриншотах владельца это и отмечено.

   Канон переносов проекта (уже применён на /about/ и в карточках услуг):
     hyphens:manual + overflow-wrap:break-word + word-break:normal
   То есть текст переносится по словам, а длинное неразрывное слово
   (почта, артикул, длинная ссылка) всё равно не выедет за блок.

   Правило одно и последнее по порядку подключения — гасит оба ранних слоя,
   поэтому !important здесь оправдан: без него специфичность .content-section p
   из figma-final.css перебила бы body. */
html,body,body *,body *::before,body *::after{
  -webkit-hyphens:manual !important;
  -ms-hyphens:manual !important;
  hyphens:manual !important;
  word-break:normal !important;
}
body,p,li,td,th,dd,dt,blockquote,figcaption,
h1,h2,h3,h4,h5,h6,.btn,.nav,.site-header,.hero-copy,
.editorial-hero h1,.content-section,.content-section p,
.contact-card,.benefit-card,.service-card,.vacancy-card,
.mission .muted,.stats-panel--dark .stat .stat-text,.gallery h2{
  overflow-wrap:break-word !important;
  word-wrap:break-word !important;
}
/* Явные исключения: неразрывные токены (код ОФС, артикулы, e-mail, ссылки на файлы)
   должны ломаться, а не выезжать за строку. Обычные ссылки-слова сюда НЕ входят —
   у них перенос по словам, как и у всего остального. */
code,kbd,samp,.code,.term-badge,.email,[href^="mailto:"],[href$=".pdf"],[href$=".doc"],[href$=".docx"]{
  overflow-wrap:anywhere !important;
}


/* ==== Заявка владельца 06.10.2026: /about/ блок «Наша миссия» ==========================
   Эталон — кадры Figma: About 1280 (узел 975:12852) и About_1024 (1239:19132).
   Замер живого ДО правки (CDP-замер на farmoborona.com/about/, 06.10.2026):
     1440 → блок 1201x514, фото 394x394, колонка 545, pad 60/101, gap 60 — канону 1280 соответствует;
     1024 → блок 929x540, колонка 273 (канон 1024: рамка 944x534, фото 394, колонка 454, gap 32, pad 100/32/40);
     980  → колонка 277 (телефон владельца в режиме «версия для ПК» считает вёрстку ≈980px);
     768  → колонка 65px, лид 1066px высотой — слова рвались по буквам.
   Причина: правило `.mission` (audit-fixes.css:3220) не ограничено медиазапросом и держит
   pad 101 / gap 60 на всех ширинах ≥768, поэтому на 768–1279 колонку текста сжимало. */

/* (а) ПОРТРЕТ. Канон 975:12852 задаёт кадр заливки прямоугольника (imageTransform
   u 0.0854..0.8541, v 0.1483..0.6608 исходника 1800x2700 = область x154..1538 y400..1784).
   Живой `object-fit:cover` + `object-position:50% 12%` показывал ВСЮ ширину исходника
   (1800px): кадр выходил на 30% шире канона, лицо мельче — сверка с PNG-экспортом узла
   дала mean abs diff 52.7, у канонного кропа 1.9. Кадр вырезан в сам ассет
   `assets/img/farmoborona-0088.webp` (1384x1384), поэтому object-fit больше ничего не сдвигает:
   квадрат в квадрате 394x394 на всех ширинах. Исходное фото — в ~/fb-backups/t_e1b86d89-.../.

/* (б) ИКОНКА КАВЫЧЕК (Group 14, 54x46, #009294). Правило `#mission img{border-radius:24px;
   aspect-ratio:1/1;object-fit:cover}` (audit-fixes.css:2355) применялось и к иконке, и
   скругление срезало крайние точки глифа: замер в одном браузере — 1437 → 1242 залитых
   пикселя, bbox 53x45 → 51x44. Возвращаем иконке форму канонного SVG (paths совпадают
   с Figma байт-в-байт). */
#mission img.quote-mark{border-radius:0;object-fit:contain;aspect-ratio:auto}

/* (в) 1024–1279 — канон About_1024 (1239:19132): pad 100/32/40, gap 32, фото 394 фикс,
   колонка 1fr (на 1024 ровно 454: 944 − 2*32 − 394 − 32). */
@media(min-width:1024px) and (max-width:1279px){
  .mission{gap:32px;padding:100px 32px 40px}
}

/* (г) 768–1023 — отдельного кадра в Figma нет (карточка t_00a5c7fc, 07.10.2026). Собираем
   ПЛАНШЕТНУЮ раскладку по пропорциям канона About_1024 (1239:19132) и узла 975:12852,
   который владелец прислал как эталон: фото 394 фикс + текст 1fr, gap 32, pad 100/32/40
   (на 1024 те же 394 + 1fr + 32 дают канонную колонку 439). Раньше диапазон собирался как
   мобильный — одна колонка, портрет 394 по центру (`margin:32px auto 0`) при тексте во всю
   ширину; фото и текст жили в разных горизонтальных границах, блок разъезжался (замер 980:
   фото x≈286 при тексте x≈40). Это ровно тот диапазон (≈980 = «версия для ПК» на телефоне
   владельца), где владелец и увидел дефект.
   Порядок и типографика — базовые (audit-fixes.css:3237-3244): заголовок → кавычка → цитата →
   подпись, 32/34 500, 24/26 500, 18/22 400, зазор заголовок→кавычка 16, подпись отделена 24.
   ЗАЧЕМ flex-start: в кадре 975:12852 фото 394 ≈ колонка текста 391, поэтому верх и низ колонок
   совпадают. На 768–1023 текст в узкой колонке выше фото, и при flex-end (как в кадре) портрет
   уезжает вниз, оставляя пустоту сверху; flex-start ставит портрет и заголовок на одну линию.
   Раскладка безразрывна к 1024 (обе двухколоночные, pad 32, gap 32) — скачка высоты нет. */
@media(min-width:768px) and (max-width:1023px){
  #mission{grid-template-columns:394px minmax(0,1fr);gap:32px;padding:100px 32px 40px;align-items:flex-start}
  #mission>div{display:flex;flex-direction:column;min-width:0}
  #mission>img{order:0;width:394px;max-width:394px;height:394px;aspect-ratio:1/1;margin:0;object-fit:cover;border-radius:24px}
}

/* ==== (22b) /clients/ первый экран 375 — переносы заголовка и подзаголовка по кадру ==========
   Карточка t_fc36acb9. Канон — Clients_375, кадр «Main screen» 1255:18636 (343×400, отступы 16):
     • заголовок 24/26 500 белый, рамка 312×78 = РОВНО 3 строки; в кадре переносы жёсткие:
       «Мы рады предложить» / «вам услуги НИЦ» / ««ФАРМОБОРОНА»»;
     • подзаголовок 14/16 400 белый, рамка 312×64 = 4 строки; текст кадра — тот же, но
       БЕЗ конечной точки («…со всей России и зарубежья»);
     • зазор заголовок→подзаголовок 4 (в живом 16: fb-canon держит .hero-copy h1{margin-bottom:16px!important});
     • столбец текста ровно 312 (в кадре он один и тот же и у заголовка, и у поля поиска).
   Замер живого ДО правки (375, CDP): h1 311×130 (5 строк), подзаголовок 311×80 (5 строк),
   верх копирайта 46 при каноне 126; низ 24, поле 312×36, подпись 16/18 — уже по канону.
   Полный текст «Научно-испытательного Центра» в 3 строки 24px не влезает (сумма слов 942 px
   против 933 доступных), поэтому на 375 — форма из кадра («услуги НИЦ»).
   Ветки текста живут в одном h1 (span.hero-h1-wide / span.hero-h1-narrow): классы уникальные,
   правила тумблера не скоуплены — так разметка не ломается, если её отдадут без класса
   .clients-page-hero (сид). Зазор 4 и столбец 312 — только у /clients/. */
.hero-copy h1 .hero-h1-narrow{display:none}
@media(max-width:767px){
  .hero-copy h1 .hero-h1-wide{display:none}
  .hero-copy h1 .hero-h1-narrow{display:inline}
  section.hero.clients-page-hero .hero-copy h1{margin-bottom:4px!important}
}
/* Столбец текста = 312 из кадра (в живом было «hero − 32»: 311 на 375 и 296 на 360).
   Подзаголовок физически требует 309 px на последнюю строку («дистрибьюторов со всей России
   и зарубежья»), поэтому на 360 четыре строки кадра из флюидного столбца недостижимы.
   Фиксируем 312 там, где hero (viewport − 32) её вмещает: 344…375. На 375 это ровно кадр
   (16 слева / 15 справа), поле поиска и так min(312px,100%) — столбцы совпадают с кадром. */
@media(min-width:344px) and (max-width:375px){
  .clients-page-hero .hero-copy{left:16px;right:auto;width:312px}
}

/* ==== (22c) /clients/ плейсхолдер поиска 375 — обрез последней буквы (карточка t_b423be2d) ======
   Кадр 1255:18636 (Search 312×36) не сходится сам с собой: 16+4+265+23+6 = 314 при 312, текст узла
   265 px заходит под кнопку на 2 px (рендер узла 1255:18647 — то же). Живому на текст остаётся
   256 px (кадровая линия 0 → живая 1, UA-padding-right инпута 2, зазор «текст → кнопка» 4 против
   −2 наложения в кадре), а плейсхолдер при 14 px = 266 px → обрез 10 px (срезана последняя «а»).
   Условие приёмки «текст виден целиком И геометрия по кадру (312×36, 8/6/8/16, линия 1×20,
   кнопка 23×23)» выполняет только кегль: 13,5 px даёт 259 (обрез 3 — не хватает), 13,3 px — 252
   при 256 доступных (запас 4). Паддинг/зазор не трогаем: 1+2 дают ровно 266 при 266 (нулевой
   запас) и уводят геометрию от кадра; текст кадровый не меняем. Кегль меняем ТОЛЬКО у плейсхолдера,
   введённый текст остаётся 14 px (кадровая типографика поля). Десктоп (min-width:1024, 18 px) не
   тронут: там тот же обрез 3 px, но это отдельное решение владельца о типошкале. */
@media(max-width:767px){
  .clients-page-hero .hero-copy .hero-search input::placeholder{font-size:13.3px!important}
}
