/* UMKO — общая шапка покупательских витрин (mp/ads/odr.um-ko.ru).
   31.08.2026: раньше эти 3 файла держали ТРИ КОПИИ одной и той же разметки/CSS — правка цвета
   или отступа требовала находить и чинить в трёх местах, что уже приводило к рассинхрону.
   Теперь один файл, подключается везде. Разное между доменами (набор пунктов nav/иконок,
   есть ли поиск/переключатель Покупаю-Продаю) — остаётся в разметке каждой страницы,
   но ссылается на ЭТИ классы, стиль меняется здесь одним разом на все три домена.
   Требует токенов страницы: --card/--line/--bg/--navy/--muted/--teal (уже объявлены в
   локальном :root каждой из трёх страниц, см. MIGRATION). */
.uab{display:none!important}
.uh{position:sticky;top:0;z-index:9500;background:var(--umko-teal-d,#7B9100);border-bottom:1px solid rgba(255,255,255,.14)}
.uh-in{max-width:1320px;margin:0 auto;padding:0 32px;height:64px;display:flex;align-items:center;gap:20px}
.uh-logo{width:110px;height:23px;flex:none;display:block;background:#fff;border-radius:var(--umko-radius-2sm, 10px);box-sizing:content-box;padding:7px 12px}
.uh-logo::before{content:'';display:block;width:100%;height:100%;background:linear-gradient(135deg,var(--umko-teal-br,#6500B2) 6%,var(--umko-teal,#5F7000) 44%,var(--umko-gold,#6500B2) 97%);-webkit-mask:url(/logo.png?v=4) left center/contain no-repeat;mask:url(/logo.png?v=4) left center/contain no-repeat}
/* 01.09.2026: color:#fff!important на этих 3 правилах (плюс .u-sub a ниже) — не косметика,
   а фикс реального бага: a:not(.btn){color:var(--accent)} из umko-theme-light.css имеет ТУ ЖЕ
   специфичность (0,1,1/0,1,0 vs их 0,1,1), что и голые классы на <a> здесь — при равенстве
   выигрывает более поздний по подключению файл. На /katalog (первая страница, где рядом
   загружен umko-theme-light.css) это делало текст кнопок шапки цвета фона — невидимым.
   .uh-cab уже имел !important (видимо, кто-то уже ловил этот же класс бага раньше) — остальные
   пропустили. Тот же паттерн, тот же файл — используется везде (mp/ads/odr), фикс не меняет
   значение цвета, только гарантирует его победу. */
.u-apps{flex:none;display:flex;align-items:center;gap:7px;background:rgba(255,255,255,.16);border:1px solid rgba(255,255,255,.3);border-radius:var(--umko-radius-pill, 999px);padding:9px 16px;font-size:13px;font-weight:700;color:#fff!important;cursor:pointer;font-family:inherit;text-decoration:none}
.u-apps:hover{background:rgba(255,255,255,.26)}
.hnav{display:none}
.uh-hsearch,.hsearch{flex:1;max-width:440px;min-width:0;display:flex;align-items:center;background:var(--card);border:1.5px solid var(--line);border-radius:var(--umko-radius-pill, 999px);padding:0 0 0 14px;overflow:hidden}
.uh-hsearch input,.hsearch input{border:none;background:none;outline:none;font-size:16px;color:var(--navy,var(--ink));width:100%;font-family:inherit;padding:9px 0}
.uh-hsearch .ico,.hsearch .ico{color:var(--muted);flex:none}
.uh-hsearch button,.hsearch button{border:0;background:var(--umko-teal-br);color:#fff;padding:9px 20px;border-radius:0;font-weight:700;cursor:pointer;font-size:13px;align-self:stretch;flex:none}
.uh-hsearch button:hover,.hsearch button:hover{background:var(--umko-gold-d)}
.uh-right{display:flex;align-items:center;gap:18px;margin-left:auto;flex:none}
.hmode{display:flex;background:#fff;border:1px solid rgba(255,255,255,.5);border-radius:999px;padding:3px;width:180px;flex:none}
.hmode a{flex:1;text-align:center;padding:7px 6px;border-radius:999px;font-size:12px;font-weight:700;text-decoration:none;color:var(--muted);display:flex;align-items:center;justify-content:center;gap:4px}
.hmode a .ico{width:12px;height:12px}
.hmode a.on{background:var(--umko-teal);color:#fff}
.uh-icons{display:flex;align-items:center;gap:16px;flex:none}
/* #фикс 10.10.2026 (аудит P1-сайт, продолжение — тач-таргет <32px) — этот файл грузится ПОСЛЕДНИМ
   (см. шапку файла про каскад) и побеждает одноимённое правило в инлайн <style> страниц — на mp/ads/
   odr реальный тач-таргет .uh-ibtn был меньше 32px (живой замер на mp.um-ko.ru: ~22.6px у подписи
   "GPT", 19px у голой иконки без подписи на планшетных ширинах, см. @media ниже). min-width/
   min-height не меняют вид — контент остаётся центрированным тем же align-items:center — только
   гарантируют минимальную зону тапа на всех трёх доменах, использующих этот общий файл. */
.uh-ibtn{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;color:#fff!important;opacity:.92;text-decoration:none;position:relative;font-size:12px;font-weight:600;min-width:32px;min-height:32px}
.uh-ibtn:hover{opacity:1}
.uh-ibtn .ico{width:19px;height:19px;stroke:currentColor;stroke-width:1.7;fill:none;stroke-linecap:round;stroke-linejoin:round}
.uh-cab{background:var(--umko-teal-br);color:#fff!important;text-decoration:none;font-weight:800;font-size:13.5px;padding:10px 16px;border-radius:var(--umko-radius-2sm,10px);white-space:nowrap;flex:none}
.uh-cab:hover{background:var(--umko-gold-d)}
.ai-pulse{animation:umkoBotPulse 2.6s ease-in-out infinite}
@keyframes umkoBotPulse{0%{box-shadow:0 0 0 0 rgba(101,0,178,.35)}70%{box-shadow:0 0 0 7px rgba(101,0,178,0)}100%{box-shadow:0 0 0 0 rgba(101,0,178,0)}}
@media (max-width:1180px){.uh-ibtn span{display:none}}
@media (max-width:1024px){.uh-in{gap:16px;padding:0 20px}.uh-hsearch,.hsearch{max-width:220px}}
/* #фикс 07.10.2026 (аудит, промежуточные ширины 768-1050px) — живая находка на mp.um-ko.ru
   (этот файл общий для mp/ads/odr, см. шапку файла, поэтому баг был на всех трёх): в диапазоне
   примерно 650-950px .hsearch (flex:1;min-width:0) зажимался соседними flex:none элементами
   (лого 134px + кнопка "Сервисы" ~114px + .hmode 180px + до 7 иконок с gap:16 ~229px) почти до
   нуля (17px на 768px на mp — виден только значок лупы, поле ввода и кнопка "Найти" не видны
   и недоступны). .hsearch{max-width:220px} из правила выше не защищает от сжатия, это верхний
   предел. Освобождаем место у НЕ-поисковых элементов в том же диапазоне (тот же приём
   .u-apps span{display:none}, что уже используется в мобильном брейкпоинте ниже, плюс сужение
   hmode и зазоров) — .hsearch не трогаем, у него уже есть нужные правила. */
@media (max-width:1024px){.u-apps span{display:none}.u-apps{padding:9px 10px}.hmode{width:140px}.uh-right{gap:10px}.uh-icons{gap:8px}.uh-in{gap:10px}}
@media (max-width:640px){.uh-in{height:auto;flex-wrap:wrap;gap:9px;padding:9px 13px}.uh-hsearch,.hsearch{order:3;flex:1 1 100%;max-width:none}.uh-right{order:2;margin-left:0}.hnav{display:none}.u-apps span{display:none}
  /* 02.09.2026 (владелец: "иконок не видно" — Telegram/YouTube/GPT обрезались за краем узкой
     .uh-icons на мобильном) — этот файл грузится ПОСЛЕДНИМ (см. комментарий выше про каскад),
     поэтому такое же правило в <style> самой страницы не побеждало. Плитки-дубли есть в панели
     «Сервисы» (там места хватает). */
  .uh-social{display:none}}
/* подкатегорийная/дела-лента — бренд-полоса под шапкой, одна на десктоп и мобайл */
.u-sub{background:var(--umko-teal);border-bottom:1px solid rgba(255,255,255,.1)}
.u-sub-in{max-width:1320px;margin:0 auto;padding:0 32px;height:44px;display:flex;align-items:center;gap:24px;overflow-x:auto;scrollbar-width:none}
.u-sub-in::-webkit-scrollbar{display:none}
.u-sub a{flex:none;color:#fff!important;opacity:.88;text-decoration:none;font-size:13px;font-weight:600;white-space:nowrap;background:none;border:0;font-family:inherit;cursor:pointer}
.u-sub a:hover,.u-sub a.on{opacity:1;text-decoration:underline}
@media(max-width:640px){.u-sub-in{padding:0 14px;gap:18px;height:40px}.u-sub a{font-size:12.5px}}
/* мобильная компакт-шапка */
.mtb{display:none;position:sticky;top:0;z-index:9500;background:var(--umko-teal-d,#7B9100);border-bottom:1px solid rgba(255,255,255,.14);padding:10px 14px 8px;flex-direction:column;gap:9px}
.mtb-row{display:flex;align-items:center;justify-content:space-between;gap:8px}
.mtb-logo{width:100px;height:21px;display:block;background:#fff;border-radius:var(--umko-radius-2sm, 9px);box-sizing:content-box;padding:6px 10px;flex:none}
.mtb-logo::before{content:'';display:block;width:100%;height:100%;background:linear-gradient(135deg,var(--umko-teal-br,#6500B2) 6%,var(--umko-teal,#5F7000) 44%,var(--umko-gold,#6500B2) 97%);-webkit-mask:url(/logo.png?v=4) left center/contain no-repeat;mask:url(/logo.png?v=4) left center/contain no-repeat}
/* #фикс 06.09.2026 (владелец: "чтобы всё отображалось нормально и не ехало" — на узких
   экранах 5-7 круглых иконок (Справка/Избранное/Заказы/Корзина/Telegram/GPT/Войти) не
   помещались в .mtb-row и раздвигали ВСЮ страницу вбок — живой замер подтвердил 62px
   горизонтального скролла на 390px). min-width:0 разрешает этому flex-элементу сжаться
   меньше суммы иконок (без этого браузер по умолчанию не даёт flex-элементу быть уже
   контента, и overflow вместо контейнера утекал на body); overflow-x:auto контейнирует
   прокрутку внутри самой строки иконок — если что-то не влезло, докрутить можно свайпом
   ЗДЕСЬ, а не вся страница едет вбок. Скроллбар спрятан — визуально это просто ряд иконок. */
.mtb-icons{display:flex;align-items:center;gap:10px;min-width:0;overflow-x:auto;-webkit-overflow-scrolling:touch;scrollbar-width:none}
.mtb-icons::-webkit-scrollbar{display:none}
.mtb-ibtn{width:30px;height:30px;border-radius:50%;background:rgba(255,255,255,.16);display:flex;align-items:center;justify-content:center;color:#fff!important;position:relative;text-decoration:none;flex:none}
.mtb-ibtn .ico{width:15px;height:15px}
.mtb-search{display:flex;align-items:center;gap:8px;background:var(--bg);border:1px solid var(--line);border-radius:12px;padding:9px 12px}
.mtb-search input{border:none;background:none;outline:none;font-size:14px;color:var(--navy,var(--ink));width:100%;font-family:inherit}
.mtb-search .ico{color:var(--muted);flex:none}
.mtb-mode{display:flex;background:#fff;border:1px solid rgba(255,255,255,.5);border-radius:12px;padding:3px}
.mtb-mode a{flex:1;text-align:center;padding:9px 6px;border-radius:var(--umko-radius-2sm, 9px);font-size:13px;font-weight:700;text-decoration:none;color:var(--muted);display:flex;align-items:center;justify-content:center;gap:5px}
.mtb-mode a .ico{width:14px;height:14px}
.mtb-mode a.on{background:var(--umko-teal);color:#fff}
@media(max-width:640px){.uh{display:none}.mtb{display:flex}}
/* 01.09.2026: панель "Сервисы" (umkoSvcPanel() в buyer_header.php) — та же централизация, что и
   у самой шапки выше. Раньше был скопирован в 4 страницы отдельно, отсюда рассинхрон порядка
   тайлов между копиями. */
.svc-sec{position:fixed;z-index:9600;background:var(--card);border:1px solid var(--line);border-radius:var(--umko-radius-2lg, 16px);box-shadow:0 24px 60px rgba(0,0,0,.18);padding:20px 22px;max-width:640px;width:min(640px,calc(100% - 32px));box-sizing:border-box;display:none}
.svc-sec.open{display:block}
.svc-backdrop{display:none;position:fixed;inset:0;z-index:9550;background:rgba(10,20,15,.25)}
.svc-backdrop.open{display:block}
.svc-h{font-size:12px;text-transform:uppercase;letter-spacing:.07em;color:var(--muted);font-weight:700;margin:0 0 16px}
.svc-group-h{font-size:11px;text-transform:uppercase;letter-spacing:.05em;color:var(--muted);font-weight:700;margin:16px 0 8px}
.svc-group-h:first-of-type{margin-top:0}
.svc-grid{display:grid;grid-template-columns:repeat(6,1fr);gap:12px}
@media (max-width:900px){.svc-grid{grid-template-columns:repeat(4,1fr)}}
@media (max-width:600px){.svc-grid{grid-template-columns:repeat(3,1fr)}}
.svc-tile{display:flex;flex-direction:column;align-items:center;gap:9px;text-decoration:none;color:var(--ink);background:var(--card);border:1px solid var(--line);border-radius:var(--umko-radius-md, 12px);padding:16px 8px;text-align:center;transition:.15s;position:relative;min-width:0}
.svc-tile:hover{border-color:var(--teal);transform:translateY(-2px);box-shadow:0 6px 18px rgba(0,51,85,.08)}
.svc-tile.soon{opacity:.55;pointer-events:none}
.svc-ic{width:42px;height:42px;border-radius:12px;background:color-mix(in srgb,var(--teal) 12%,var(--card));color:var(--teal);display:flex;align-items:center;justify-content:center;margin:0 auto;flex-shrink:0}
.svc-ic .ico{width:20px;height:20px;stroke:currentColor;stroke-width:1.7;fill:none;stroke-linecap:round;stroke-linejoin:round}
/* #фикс (аудит S2): подписи длиннее 1 слова ("Почта (документооборот)", "Правовая защита")
   визуально наезжали на соседнюю плитку на узких экранах — ни .svc-tile (grid/flex-item), ни сам
   span не ограничивали ширину текста (min-width:auto по умолчанию не даёт сжаться у flex/grid-
   контейнера с неразрывным контентом). Жёсткий clamp в 2 строки + принудительный перенос слов —
   тот же приём, что предложен в аудите ("2 строки с min-height"), без переименования самих подписей. */
.svc-tile span{font-size:12px;font-weight:600;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;line-height:1.3;min-height:2.6em;width:100%;overflow-wrap:break-word;word-break:break-word}
.svc-soon-badge{position:absolute;top:6px;right:6px;background:var(--umko-warn-bg,#fef3c7);color:#92400e;font-size:9px;font-weight:700;padding:2px 6px;border-radius:8px}
