/* ============================================================
   Moscow Holod — дизайн-система (theme.css)
   Извлечено из утверждённого макета главной (main-page-v10.html).
   Источник истины по токенам, контейнерам, шапке, футеру, кнопкам
   и компонентам главной. Шрифт Inter подключается в functions.php.
   ============================================================ */

/* ─── CASCADE LAYERS (фундамент под переверстку товара, t-030 шаг 1) ─────────
   Порядок слоёв объявлен ЗДЕСЬ, один раз, в самом начале нашего CSS:
   слой, объявленный позже, СИЛЬНЕЕ. То есть theme > vendor при равной (и даже
   более низкой) специфичности — можно бить вендор без !important.

   ВАЖНО про каскад слоёв: неслойный (unlayered) CSS сильнее ЛЮБОГО слоя.
   Вендорные woo-стили WordPress подключает обычными <link> — они неслойные,
   поэтому голое `@layer theme { ... }` их бы НЕ перебило.
   Механизм, чтобы theme реально побеждал оставшийся вендор (general/neve-woo):
     - на шаге 1 мы dequeue'ем главный конфликт (layout/smallscreen);
     - оставшийся вендор таргетит ЧУЖИЕ селекторы (.woocommerce, div.product,
       .button, form.cart) — с нашими .mhf-single-* он в основном не пересекается;
     - если на шаге 3 всплывёт реальная коллизия — вносим конкретный вендорный
       файл в слой vendor через @import с layer() (пример ниже, закомментирован),
       и тогда наши правила из @layer theme его перебивают без !important.

   Шаг 3 (CSS карточки) пишем ВНУТРИ `@layer theme { ... }`. Токены/reset/общие
   стили ниже пока оставляем неслойными — трогать их сейчас не требуется.

   Пример адресного втягивания вендора в нижний слой (включать по факту коллизии):
     @import url("...neve/assets/css/woocommerce.min.css") layer(vendor);
   ------------------------------------------------------------------------- */
@layer vendor, theme;

/* ─── RESET ──────────────────────────────────────────────────────────────── */
*, *::before, *::after { box-sizing: border-box; }
html { scroll-behavior: smooth; }
body {
  margin: 0;
  background: var(--bg);
  color: var(--text);
  font-family: 'Inter', sans-serif;
  font-size: 14px;               /* [REF] body 14px/500/1.43/-1px */
  font-weight: 500;
  line-height: 1.43;
  letter-spacing: -1px;
}
h1, h2, h3, h4 {
  font-family: 'Inter', sans-serif;
  margin: 0;
  font-weight: 700;
  line-height: 1.33;
  letter-spacing: -1px;          /* [REF] letter-spacing -1px доминирует */
}
p { margin: 0; }
a { color: inherit; text-decoration: none; }
ul { list-style: none; margin: 0; padding: 0; }
img { display: block; max-width: 100%; }

/* ─── TOKENS — палитра один-в-один с референсом ──────────────────────────── */
:root {
  --accent:   #5D60F9;   /* [REF] #5d60f9 — 20 вхождений в CSS референса */
  --accent-2: #EBEBFF;   /* [REF] фон иконок доверия */
  --text:     #262834;   /* [REF] основной текст */
  --muted:    #919191;   /* [REF] серый */
  --bg:       #FFFFFF;
  --bg-soft:  #F3F3F7;   /* [REF] карточки/топбар/бордеры */
  --rule:     #F3F3F7;
  --btn-dark: #1B1B22;   /* [REF] тёмная кнопка/корзина */
  --icon-bg:  #EBEBFF;   /* [REF] #ebebff */
  --alert:    #E3F4FE;   /* [REF] инфо-чип */

  /* Статусная палитра WooCommerce-плашек (утверждена владельцем, t-067) */
  --err-soft:  #FDD4D4;  /* ошибка: фон */
  --err:       #F42829;  /* ошибка: текст + акцент/бордер/иконка */
  --warn-soft: #FFE2CC;  /* предупреждение: фон */
  --warn:      #FF6E01;  /* предупреждение: текст + акцент/бордер/иконка */
  --ok-soft:   #E4F7F2;  /* успех: фон (светлый тинт #18BA92) */
  --ok:        #18BA92;  /* успех: акцент/бордер/иконка (был #1B9E5A) */
}

/* ─── LAYOUT ─────────────────────────────────────────────────────────────── */
/* [REF] У референса ДВА контейнера разной ширины — это ключ к совпадению:
   1) .global_mainWidth__4UlyN  → width:1760px; padding:0 2vw  (ШИРОКИЙ, 2vw края)
      используют: топбар, шапка И сетка товаров (грид вынесен в Tailwind .container=96vw,
      что совпадает с 2vw-краями mainWidth).
   2) .global_mainWidthSm__5gcfk → width:calc(1400px+4vw); padding:0 4vw (УЗКИЙ, 4vw)
      используют: hero, слайдер, доверие, ЗАГОЛОВОК секции товаров, услуги, форма, футер.
   → Карточки товаров ШИРЕ, чем заголовок «Популярные товары» над ними и остальной
     контент. Именно этого не хватало (товары держали в узком контейнере). */
.container {
  width: calc(1400px + 4vw);   /* [REF] mainWidthSm — узкий, 4vw края */
  max-width: 100%;
  margin: 0 auto;
  padding: 0 4vw;
}
.container-wide {
  width: 1760px;               /* [REF] mainWidth — широкий, 2vw края */
  max-width: 100%;
  margin: 0 auto;
  padding: 0 2vw;
}

/* ─── TOPBAR ─────────────────────────────────────────────────────────────── */
.topbar {
  background: var(--bg-soft);    /* [REF] #F3F3F7 */
  padding: 12px 0;
}
.topbar-inner {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 16px;
}
.topbar-item {
  font-size: 14px;               /* [REF] 14px/600 */
  font-weight: 600;
  color: var(--text);
  white-space: nowrap;
  display: flex;
  align-items: center;
  gap: 6px;
}
.topbar-center { flex: 1; text-align: center; justify-content: center; }
.topbar-right { display: flex; align-items: center; gap: 6px; }
.topbar-right a {
  font-size: 14px;
  font-weight: 600;
  color: var(--text);
  transition: color 0.3s ease;
}
.topbar-right a:hover { color: var(--accent); }

/* ─── HEADER ─────────────────────────────────────────────────────────────── */
.site-header {
  position: sticky;
  top: 0;
  z-index: 100;
  background: var(--bg);
  border-bottom: 1px solid var(--rule);
  transition: box-shadow 0.18s ease;
}
.site-header.scrolled { box-shadow: 0 1px 12px rgba(0,0,0,.08); }

.header-inner {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 32px 0;               /* [REF] основной хедер padding 32px 0 */
  gap: 24px;
}

.logo {
  font-size: 22px;
  font-weight: 700;
  color: var(--text);
  white-space: nowrap;
  letter-spacing: -1px;
  flex-shrink: 0;
}
.logo span { color: var(--accent); }

/* [REF] nav gap 4px, item padding 16px 20px, radius 12px, 18px/600/-1px */
.header-nav {
  display: flex;
  align-items: center;
  gap: 4px;
  flex: 1;
  justify-content: center;
}
.header-nav a {
  font-size: 18px;
  font-weight: 600;
  letter-spacing: -1px;
  color: var(--btn-dark);
  padding: 16px 20px;
  border-radius: 12px;
  white-space: nowrap;
  background: transparent;
  transition: background-color 0.3s ease-in-out;
}
.header-nav a:hover { background-color: var(--bg-soft); color: var(--btn-dark); }

.header-right {
  display: flex;
  align-items: center;
  gap: 16px;
  flex-shrink: 0;
}
.header-phone-block {
  display: flex;
  flex-direction: column;
  align-items: flex-end;
  gap: 1px;
}
/* [REF] телефон 22px/700/-1px, hover весь блок → accent */
.header-phone {
  font-size: 22px;
  font-weight: 700;
  color: var(--text);
  white-space: nowrap;
  letter-spacing: -1px;
  transition: color 0.3s ease;
  display: inline-block;
}
.header-phone-block:hover .header-phone,
.header-phone:hover { color: var(--accent); }
.header-phone-sub {
  font-size: 11px;
  font-weight: 500;
  color: var(--muted);
  white-space: nowrap;
  letter-spacing: -0.5px;
}

/* [REF] корзина 56×56, btn-dark, radius 18px, hover → accent */
.header-cart {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 56px;
  height: 56px;
  background: var(--btn-dark);
  border-radius: 18px;
  color: #fff;
  cursor: pointer;
  flex-shrink: 0;
  transition: background 0.3s ease;
  position: relative;
}
.header-cart:hover { background: var(--accent); }
.header-cart svg { width: 22px; height: 22px; stroke: #fff; fill: none; stroke-width: 2; stroke-linecap: round; stroke-linejoin: round; }
.header-cart-badge {
  position: absolute;
  top: -6px;
  right: -6px;
  width: 24px;
  height: 24px;
  background: #EF3B3B;
  color: #fff;
  border-radius: 50%;
  font-size: 12px;
  font-weight: 700;
  display: flex;
  align-items: center;
  justify-content: center;
  letter-spacing: 0;
}

/* ─── HERO ───────────────────────────────────────────────────────────────── */
.hero {
  background: var(--bg);
  margin-top: 64px;              /* [REF] margin-top 64px, margin-bottom 50px */
  margin-bottom: 50px;
}
.hero-inner {
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  gap: 40px;
}
.hero-text { flex: 1; min-width: 0; }

.hero h1 {
  font-size: 44px;              /* [REF] H1 44px/700/1.09/-1px */
  font-weight: 700;
  letter-spacing: -1px;
  color: var(--text);
  line-height: 1.09;
}
.hero h1 .accent { color: var(--accent); }

.hero-sub {
  font-size: 14px;             /* [REF] subtitle 14px/500/-1px */
  font-weight: 500;
  letter-spacing: -1px;
  color: var(--text);
  line-height: 1.43;
  margin-top: 20px;
  max-width: 560px;
}

.hero-cta-block {
  flex-shrink: 0;
  display: flex;
  align-items: flex-start;
  padding-top: 4px;
  max-width: 840px;            /* [REF] правая область max-width 840px */
}

/* [REF] outline: border 3px solid #262834, radius 18px, padding 20px 24px, 18px/700/-1px */
.btn-hero {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  font-size: 18px;
  font-weight: 700;
  letter-spacing: -1px;
  color: var(--text);
  background: transparent;
  border: 3px solid var(--text);
  border-radius: 18px;
  padding: 20px 24px;
  cursor: pointer;
  white-space: nowrap;
  transition: color 0.18s ease, border-color 0.18s ease;
}
.btn-hero:hover { color: var(--accent); border-color: var(--accent); }

/* ─── SLIDER / CAROUSEL ─────────────────────────────────────────────────── */
/* Механика: горизонтальный flex-трек внутри overflow:hidden обёртки.
   Активный слайд сдвигается translateX(-N*100%). Соседние слайды физически
   уезжают за границу .slider-wrap (overflow:hidden) → одновременно виден
   только ОДИН слайд. Никакого протекания overflow. */
.slider-section {
  padding: 0 0 40px;
  background: var(--bg);
}
.slider-wrap {
  position: relative;
  overflow: hidden;             /* режет соседние слайды — виден только активный */
  border-radius: 32px;          /* [REF] баннер radius 32px */
  height: 500px;
}
.slides-track {
  display: flex;
  height: 100%;
  transition: transform 0.45s ease;
}
/* Каждый слайд занимает ровно 100% ширины обёртки и не сжимается */
.slide {
  width: 100%;
  flex-shrink: 0;
  height: 100%;
  position: relative;
  overflow: hidden;             /* фон-скругление держится внутри слайда */
  border-radius: 32px;
  /* Внутренняя раскладка: слева текст (макс. 58%), справа стекло-панели.
     padding 48px держит контент внутри скруглённых углов — текст НЕ обрезается. */
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 32px;
  padding: 48px;
}
/* Фон слайда — на весь слайд, под контентом */
.slide-bg {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  object-fit: cover;
  border-radius: 32px;
  z-index: 0;
}
.slide-1-bg { background: linear-gradient(135deg, #2b3a67 0%, #1a2547 100%); }
.slide-2-bg { background: linear-gradient(135deg, #3a2b67 0%, #241a47 100%); }
.slide-3-bg { background: linear-gradient(135deg, #1a3a5c 0%, #0d2035 100%); }
/* [REF] overlay градиент linear-gradient(180deg, rgba(0,0,0,.12), rgba(0,0,0,.35)) */
.slide-overlay {
  position: absolute;
  inset: 0;
  background: linear-gradient(180deg, rgba(0,0,0,.12), rgba(0,0,0,.35));
  border-radius: 32px;
  z-index: 1;
}
/* Левый блок: заголовок + подзаголовок + кнопка. Ограничен по ширине,
   заголовок переносится и не вылезает за скруглённые углы. */
.slide-content {
  position: relative;
  z-index: 2;
  max-width: 58%;
  min-width: 0;                 /* позволяет переносу работать во flex */
}
.slide-content h2 {
  font-size: 44px;
  font-weight: 700;
  letter-spacing: -1px;
  color: #fff;
  line-height: 1.09;
  margin-bottom: 16px;
  white-space: normal;          /* перенос разрешён */
  overflow-wrap: break-word;    /* длинные слова ломаются, не вылезают */
}
.slide-content h2 .accent { color: var(--accent); }
.slide-sub {
  font-size: 16px;
  color: rgba(255,255,255,.82);
  line-height: 1.43;
  letter-spacing: -0.5px;
  margin-bottom: 28px;
  font-weight: 500;
  max-width: 480px;
}
.btn-slide {
  display: inline-flex;
  align-items: center;
  font-size: 18px;
  font-weight: 600;
  letter-spacing: -1px;
  color: #fff;
  background: var(--accent);
  border: none;
  border-radius: 18px;          /* [REF] кнопка md radius 18px */
  padding: 16px 24px;
  cursor: pointer;
  white-space: nowrap;
  transition: background 0.18s ease;
}
.btn-slide:hover { background: var(--btn-dark); }

/* Правый блок: стеклянные панели-статистика. Фиксированная колонка справа,
   вертикальный стек. Не налезает на заголовок (у .slide-content max-width 58%,
   между ними gap 32px) и панели не налезают друг на друга (gap 16px). */
.slide-features {
  position: relative;
  z-index: 2;
  flex-shrink: 0;
  display: flex;
  flex-direction: column;
  gap: 16px;
  width: 34%;
  max-width: 320px;
}
.slide-feature {
  padding: 24px 32px;
  border-radius: 24px;
  display: flex;
  flex-direction: column;
  gap: 4px;
  background: linear-gradient(180deg, rgba(255,255,255,.15), rgba(255,255,255,.08));
  backdrop-filter: blur(8px);
  -webkit-backdrop-filter: blur(8px);
  border: 1px solid rgba(255,255,255,.14);
}
.slide-feature strong {
  font-size: 40px;
  font-weight: 900;
  color: #fff;
  line-height: 1;
  letter-spacing: -1px;
}
.slide-feature span {
  font-size: 14px;
  font-weight: 500;
  color: rgba(255,255,255,.82);
  letter-spacing: -0.5px;
}

/* Стрелки: [REF] скругление 32px 0 0 32px (prev) / 0 32px 32px 0 (next), opacity 0.4 → 1 */
.slider-arrow {
  position: absolute;
  top: 0;
  height: 100%;
  width: 56px;
  background: rgba(0,0,0,.10);
  border: none;
  cursor: pointer;
  opacity: 0.4;
  transition: opacity 0.2s ease, background 0.2s ease;
  z-index: 10;
  display: flex;
  align-items: center;
  justify-content: center;
}
.slider-arrow:hover { opacity: 1; background: rgba(0,0,0,.22); }
.slider-arrow-prev { left: 0; border-radius: 32px 0 0 32px; }
.slider-arrow-next { right: 0; border-radius: 0 32px 32px 0; }
.slider-arrow svg { width: 26px; height: 26px; }

/* Точки: [REF] 8×8 круг, белые, opacity 0.3 → 1, margin 0 8px */
.slider-dots {
  position: absolute;
  bottom: 24px;
  left: 50%;
  transform: translateX(-50%);
  display: flex;
  z-index: 10;
}
.slider-dot {
  width: 8px;
  height: 8px;
  border-radius: 50%;
  background: #fff;
  opacity: 0.3;
  border: none;
  cursor: pointer;
  padding: 0;
  margin: 0 8px;
  transition: opacity 0.2s ease;
}
.slider-dot.active { opacity: 1; }

/* ─── FEATURES / TRUST ──────────────────────────────────────────────────── */
.features { background: var(--bg); }
/* [REF] grid repeat(4, calc(25% - 6px)), gap 8px, pb 40px */
.features-grid {
  display: grid;
  grid-template-columns: repeat(4, calc(25% - 6px));
  gap: 8px;
  padding-bottom: 40px;
}
/* Плитки доверия БЕЗ фона (по правке заказчика): background/border-radius убраны.
   Горизонтальный padding = 0 → текст выравнивается по границам сетки; вертикальный
   padding оставлен, чтобы плитки не слипались по вертикали. Иконка сохраняет свой фон. */
.feature-item {
  padding: 40px 0;
  display: flex;
  flex-direction: column;
  gap: 20px;
}
/* [REF] иконка 56×56, bg #EBEBFF, radius 18px, центр SVG */
.feature-icon {
  width: 56px;
  height: 56px;
  display: flex;
  align-items: center;
  justify-content: center;
  background: var(--icon-bg);
  border-radius: 18px;
  flex-shrink: 0;
}
.feature-icon svg {
  width: 28px;
  height: 28px;
  stroke: var(--accent);
  fill: none;
  stroke-width: 2;
  stroke-linecap: round;
  stroke-linejoin: round;
}
/* [REF] heading 18px/700/-1px/1.33, text 14px/500/-1px/1.43 muted */
.feature-heading {
  font-size: 18px;
  font-weight: 700;
  letter-spacing: -1px;
  line-height: 1.33;
  color: var(--text);
}
.feature-text {
  font-size: 14px;
  font-weight: 500;
  letter-spacing: -1px;
  line-height: 1.43;
  color: var(--muted);
}

/* ─── SECTION HEADERS ────────────────────────────────────────────────────── */
.section-row-header {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 16px;
  margin-bottom: 32px;          /* [REF] H2 margin-bottom 32px */
}
.section-row-header h2 {
  font-size: 44px;              /* [REF] H2 44px/700/1.33/-1px */
  font-weight: 700;
  color: var(--text);
  letter-spacing: -1px;
  line-height: 1.33;
}
.btn-section-more {
  display: inline-flex;
  align-items: center;
  gap: 5px;
  font-size: 14px;
  font-weight: 600;
  letter-spacing: -1px;
  color: var(--muted);
  background: transparent;
  border: 1px solid var(--rule);
  border-radius: 12px;          /* [REF] кнопка xs radius 12px */
  padding: 8px 16px;
  cursor: pointer;
  white-space: nowrap;
  transition: all 0.18s ease;
  flex-shrink: 0;
}
.btn-section-more:hover { border-color: var(--accent); color: var(--accent); }

/* ─── POPULAR PRODUCTS ───────────────────────────────────────────────────── */
.products { background: var(--bg); padding: 60px 0 56px; }
/* [REF] grid у референса: repeat(4, calc(25% - 6px)) + column-gap 4px (ряд = 100% − 12px),
   но грид у него вынесен из контейнера с padding 4vw. У нас грид в том же
   .container (padding 4vw), что и заголовок → чтобы края карточек ТОЧНО совпали
   с заголовком «Популярные товары» / кнопкой «Смотреть каталог» и границами
   соседних секций, используем repeat(4, 1fr) + gap: 4 колонки 1fr + 3 gap ровно
   заполняют 100% контейнера. Размер gap (4px) — как у референса. */
.products-grid {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: 4px;
  margin-top: 64px;
}
/* [REF] карточка padding 32px, gap 8px, bg-soft, radius 32px, flex-column */
.product-card {
  display: flex;
  flex-direction: column;
  gap: 8px;
  padding: 32px;
  border-radius: 32px;
  background: var(--bg-soft);
  transition: box-shadow 0.18s ease;
  cursor: pointer;
}
.product-card:hover { box-shadow: 0 4px 24px rgba(93,96,249,.14); }
/* [REF] контейнер картинки padding-top 100% (квадрат), contain, mix-blend multiply */
.product-card-img-wrap {
  position: relative;
  width: 100%;
  padding-top: 100%;
  overflow: hidden;
}
.product-card-img-placeholder {
  position: absolute;
  inset: 0;
  display: flex;
  align-items: center;
  justify-content: center;
  mix-blend-mode: multiply;
}
.product-card-img-placeholder svg { width: 78%; height: 78%; opacity: 0.9; }

.product-badges {
  position: absolute;
  top: 0;
  left: 0;
  display: flex;
  flex-wrap: wrap;
  gap: 4px;
  z-index: 2;
}
/* [REF] чип: padding 4px 8px, bg #E3F4FE, 12px/500, radius 6px */
.product-badge {
  display: inline-block;
  font-size: 12px;
  font-weight: 500;
  padding: 4px 8px;
  border-radius: 6px;
  line-height: 1.2;
  letter-spacing: -0.3px;
  background: var(--alert);
  color: var(--text);
}
.product-badge-type { background: #EBEBFF; color: var(--accent); }

.product-card-body {
  display: flex;
  flex-direction: column;
  flex: 1;
  gap: 8px;
}
.product-category {
  font-size: 12px;
  font-weight: 500;
  color: var(--muted);
  letter-spacing: -0.3px;
}
/* [REF] название 18px/700/-1px/1.3, flex-grow 1 */
.product-name {
  font-size: 18px;
  font-weight: 700;
  color: var(--text);
  line-height: 1.3;
  letter-spacing: -1px;
  flex-grow: 1;
}
/* [REF] цена 22px/700/-1px */
.product-price {
  font-size: 22px;
  font-weight: 700;
  color: var(--text);
  letter-spacing: -1px;
  line-height: 1.09;
}
/* [REF] низ карточки: цена слева + кнопка справа, space-between, align center */
.product-card-foot {
  display: flex;
  justify-content: space-between;
  align-items: center;
  gap: 8px;
}
/* [REF] кнопка в карточке = styles_btnSm + styles_btnBlack:
   фон #1B1B22, radius 16px, padding 11px 18px 13px, gap 12px,
   текст 16px/700/1.5/-1px, hover фон → #5D60F9. Компактная, НЕ на всю ширину. */
.btn-cart {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 12px;
  padding: 11px 18px 13px;
  background: var(--btn-dark);
  color: #fff;
  border: none;
  border-radius: 16px;
  font-family: 'Inter', sans-serif;
  font-size: 16px;
  line-height: 1.5;
  font-weight: 700;
  letter-spacing: -1px;
  cursor: pointer;
  transition: background-color 0.3s ease-in-out;
  white-space: nowrap;
  flex-shrink: 0;
}
.btn-cart:hover { background: var(--accent); }
.btn-cart svg { width: 20px; height: 20px; stroke: #fff; fill: none; stroke-width: 2; stroke-linecap: round; stroke-linejoin: round; flex-shrink: 0; }

/* ─── SERVICES ───────────────────────────────────────────────────────────── */
.services {
  background: var(--bg);
  padding: 56px 0 60px;
}
.services-list { margin-top: 32px; }
/* [REF] строка: hover фон, горизонтальный padding 16px, radius 12px, margin 0 -16px */
.service-row {
  display: flex;
  flex-direction: row;
  justify-content: space-between;
  align-items: flex-start;
  padding: 24px 16px;
  border-radius: 12px;
  margin: 0 -16px;
  border-bottom: 1px solid var(--rule);
  transition: background 0.18s ease;
}
.service-row:first-child { border-top: 1px solid var(--rule); }
.service-row:hover { background: var(--bg-soft); }
.service-left {
  flex: 1;
  padding-right: 24px;
  display: flex;
  flex-direction: column;
  gap: 6px;
}
.service-left h3 {
  font-size: 18px;
  font-weight: 700;
  color: var(--text);
  line-height: 1.33;
  letter-spacing: -1px;
}
.service-desc {
  font-size: 14px;
  font-weight: 500;
  color: var(--muted);
  line-height: 1.43;
  letter-spacing: -0.5px;
}
.service-right {
  display: flex;
  flex-direction: column;
  align-items: flex-end;
  gap: 6px;
  min-width: 160px;
  flex-shrink: 0;
}
.service-price {
  font-size: 22px;
  font-weight: 700;
  color: var(--text);
  letter-spacing: -1px;
  line-height: 1.09;
}
.service-link {
  font-size: 14px;
  color: var(--accent);
  font-weight: 600;
  letter-spacing: -0.5px;
  transition: color 0.18s ease;
}
.service-link:hover { color: var(--btn-dark); }

/* ─── ХАБ УСЛУГ (блок mhf/services-hub): сетка карточек по категориям ────────
   Секция переиспользует .services (фон/базу выше) + канон .section-head (ниже).
   Новые классы ЗАСКОУПЛЕНЫ через родителя .services, чтобы .service-card /
   .services-grid / .services-cat-* не поехали по прочим блокам/Woo-каталогу.
   Значения — строго из :root-токенов v10 (эталон page-uslugi.html). */
/* группа-категория: акцентный лейбл + линия-разделитель + счётчик */
.services .services-cat { margin-top: 40px; }
.services .services-cat:first-of-type { margin-top: 8px; }
.services .services-cat-head { display: flex; align-items: center; gap: 16px; margin-bottom: 20px; }
.services .services-cat-label { display: inline-flex; align-items: center; gap: 10px; font-size: 20px; font-weight: 700; color: var(--text); letter-spacing: -1px; line-height: 1.2; white-space: nowrap; flex-shrink: 0; }
.services .services-cat-label svg { width: 22px; height: 22px; stroke: var(--accent); fill: none; stroke-width: 2; stroke-linecap: round; stroke-linejoin: round; flex-shrink: 0; }
.services .services-cat-rule { flex: 1; height: 1px; background: var(--rule); }
.services .services-cat-count { font-size: 13px; font-weight: 600; color: var(--muted); letter-spacing: -0.5px; white-space: nowrap; flex-shrink: 0; }
/* сетка карточек услуг: 4 колонки на десктопе */
.services .services-grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 8px; }
/* карточка услуги — паттерн .included-card, но кликабельна целиком + CTA-ссылка снизу */
.services .service-card { background: var(--bg-soft); border-radius: 24px; padding: 28px; display: flex; flex-direction: column; gap: 14px; transition: box-shadow 0.18s ease, transform 0.18s ease; }
.services .service-card:hover { box-shadow: 0 4px 24px rgba(93,96,249,.12); transform: translateY(-2px); }
.services .service-card-icon { width: 56px; height: 56px; display: flex; align-items: center; justify-content: center; background: var(--icon-bg); border-radius: 18px; flex-shrink: 0; }
.services .service-card-icon svg { width: 28px; height: 28px; stroke: var(--accent); fill: none; stroke-width: 2; stroke-linecap: round; stroke-linejoin: round; }
.services .service-card h3 { font-size: 18px; font-weight: 700; color: var(--text); letter-spacing: -1px; line-height: 1.33; }
.services .service-card p { font-size: 14px; font-weight: 500; color: var(--muted); letter-spacing: -0.5px; line-height: 1.43; flex: 1; }
.services .service-card-link { display: inline-flex; align-items: center; gap: 6px; font-size: 14px; font-weight: 600; color: var(--accent); letter-spacing: -0.5px; margin-top: 4px; transition: gap 0.18s ease, color 0.18s ease; }
.services .service-card:hover .service-card-link { gap: 10px; }

/* ─── BRANDS (дистрибьюторы) ─────────────────────────────────────────────── */
.brands { background: var(--bg); padding: 48px 0 56px; }
.brands-section-header { margin-bottom: 32px; }
/* [REF] сетка 6 брендов */
.brands-grid {
  display: grid;
  grid-template-columns: repeat(6, 1fr);
  gap: 8px;
}
/* [REF] карточка бренда: bg-soft, radius 32px, padding 32px 16px, flex-column, center, gap 12px */
.brand-card {
  background: var(--bg-soft);
  border-radius: 32px;
  padding: 32px 16px;
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 12px;
  transition: box-shadow 0.18s ease;
}
.brand-card:hover { box-shadow: 0 4px 20px rgba(93,96,249,.12); }
.brand-logo {
  width: 96px;
  height: 48px;
  display: flex;
  align-items: center;
  justify-content: center;
}
.brand-logo svg { width: 96px; height: 48px; }
.brand-name {
  font-size: 14px;
  font-weight: 700;
  letter-spacing: -1px;
  color: var(--muted);
}

/* ─── CTA FORM ───────────────────────────────────────────────────────────── */
/* [REF] форма: фон bg-soft (светлый). H2 #262834, subtext muted, submit accent → #1B1B22 */
.cta-form { background: var(--bg-soft); padding: 72px 0; }
.cta-form-grid {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 64px;
  align-items: center;
}
.cta-form-text h2 {
  font-size: 44px;
  font-weight: 700;
  color: var(--text);
  letter-spacing: -1px;
  margin-bottom: 16px;
  line-height: 1.09;
}
.cta-form-text p {
  font-size: 16px;
  font-weight: 500;
  color: var(--muted);
  line-height: 1.43;
  letter-spacing: -0.5px;
}
.cta-form-phone-block { margin-top: 28px; }
.cta-form-phone {
  font-size: 22px;
  font-weight: 700;
  color: var(--accent);
  letter-spacing: -1px;
  display: block;
  margin-bottom: 4px;
  transition: color 0.18s ease;
}
.cta-form-phone:hover { color: var(--btn-dark); }
.cta-form-phone-sub {
  font-size: 14px;
  font-weight: 500;
  color: var(--muted);
  letter-spacing: -0.5px;
}
.cta-form-card {
  background: #fff;
  border-radius: 24px;
  padding: 32px;
}
.cta-form-field { margin-bottom: 16px; }
.cta-form-label {
  display: block;
  font-size: 14px;
  font-weight: 600;
  color: var(--text);
  margin-bottom: 6px;
  letter-spacing: -0.5px;
}
/* [REF] инпуты: border 1.6px solid #F3F3F7, radius 12px, min-height 48px */
.cta-form-input {
  width: 100%;
  min-height: 48px;
  padding: 12px 16px;
  background: #fff;
  border: 1.6px solid var(--bg-soft);
  border-radius: 12px;
  font-family: 'Inter', sans-serif;
  font-size: 15px;
  color: var(--text);
  outline: none;
  transition: border-color 0.18s ease;
}
.cta-form-input:focus { border-color: var(--accent); }
.cta-form-field-last { margin-bottom: 16px; }
/* [REF] submit: accent, белый, radius 18px, hover → #1B1B22 */
.btn-submit {
  display: block;
  width: 100%;
  min-height: 48px;
  padding: 14px 20px;
  background: var(--accent);
  color: #fff;
  border: none;
  border-radius: 18px;
  font-family: 'Inter', sans-serif;
  font-size: 16px;
  font-weight: 600;
  letter-spacing: -0.5px;
  cursor: pointer;
  transition: background 0.18s ease;
}
.btn-submit:hover { background: var(--btn-dark); }
.cta-form-policy {
  font-size: 12px;
  font-weight: 500;
  color: var(--muted);
  text-align: center;
  margin-top: 12px;
  line-height: 1.5;
  letter-spacing: -0.3px;
}
.cta-form-policy a { color: var(--muted); text-decoration: underline; }

/* ─── FOOTER (без изменений структуры, палитра приведена) ─────────────────── */
.site-footer {
  background: var(--bg-soft);
  border-top: 1px solid var(--rule);
  padding: 48px 0 0;
}
.footer-grid {
  display: grid;
  grid-template-columns: 2fr 1.2fr 1.4fr 1.4fr;
  gap: 40px;
  padding-bottom: 40px;
  border-bottom: 1px solid var(--rule);
}
.footer-logo {
  font-size: 22px;
  font-weight: 700;
  color: var(--text);
  letter-spacing: -1px;
  margin-bottom: 8px;
}
.footer-logo span { color: var(--accent); }
.footer-desc {
  font-size: 14px;
  font-weight: 500;
  color: var(--muted);
  line-height: 1.43;
  letter-spacing: -0.5px;
  max-width: 240px;
}
.footer-col-label {
  font-size: 12px;
  font-weight: 700;
  letter-spacing: 0.06em;
  text-transform: uppercase;
  color: var(--text);
  margin-bottom: 14px;
}
.footer-links { display: flex; flex-direction: column; gap: 8px; }
.footer-links a {
  font-size: 14px;
  font-weight: 500;
  color: var(--muted);
  letter-spacing: -0.5px;
  transition: color 0.18s ease;
}
.footer-links a:hover { color: var(--text); }
.footer-phone-big {
  font-size: 22px;
  font-weight: 700;
  color: var(--accent);
  letter-spacing: -1px;
  display: block;
  margin-bottom: 6px;
  transition: color 0.18s ease;
}
.footer-phone-big:hover { color: var(--btn-dark); }
.footer-schedule {
  font-size: 14px;
  font-weight: 500;
  color: var(--muted);
  letter-spacing: -0.5px;
  margin-bottom: 10px;
}
.footer-email { font-size: 14px; font-weight: 500; color: var(--accent); letter-spacing: -0.5px; }
.footer-address {
  font-size: 14px;
  font-weight: 500;
  color: var(--muted);
  line-height: 1.6;
  letter-spacing: -0.5px;
}
.footer-bottom {
  padding: 18px 0;
  display: flex;
  align-items: center;
  justify-content: space-between;
  flex-wrap: wrap;
  gap: 8px;
}
.footer-bottom-copy { font-size: 12px; font-weight: 500; color: var(--muted); letter-spacing: -0.3px; }
.footer-bottom-policy {
  font-size: 12px;
  font-weight: 500;
  color: var(--muted);
  letter-spacing: -0.3px;
  transition: color 0.18s ease;
}
.footer-bottom-policy:hover { color: var(--text); }

/* ─── RESPONSIVE ─────────────────────────────────────────────────────────── */
/* [REF] 1240px: товары 3 колонки */
@media (max-width: 1240px) {
  .products-grid { grid-template-columns: repeat(3, 1fr); }
  .brands-grid { grid-template-columns: repeat(3, 1fr); }
  .hero h1 { font-size: 40px; }
  .slide-content h2 { font-size: 38px; }
  .section-row-header h2, .cta-form-text h2 { font-size: 38px; }
  .services .services-grid { grid-template-columns: repeat(3, 1fr); }
}
/* [REF] 1024px: features 2×2 */
@media (max-width: 1024px) {
  .header-nav a { font-size: 15px; padding: 12px 14px; }
  .features-grid { grid-template-columns: repeat(2, calc(50% - 4px)); }
  .services .services-grid { grid-template-columns: repeat(2, 1fr); }
  .footer-grid { grid-template-columns: 1fr 1fr; gap: 32px; }
  .slide { padding: 36px; gap: 24px; }
  .slide-content { max-width: 60%; }
  .slide-content h2 { font-size: 32px; }
  .slide-features { width: 36%; }
  .slide-feature { padding: 18px 22px; }
  .slide-feature strong { font-size: 32px; }
}
/* [REF] 960px: товары 2 колонки */
@media (max-width: 960px) {
  .products-grid { grid-template-columns: repeat(2, 1fr); }
}
/* [REF] 768px: топбар скрыть, hero в колонку, слайд height auto, паддинги 24px */
@media (max-width: 768px) {
  .topbar { display: none; }
  .header-nav { display: none; }
  .header-inner { padding: 20px 0; }
  .header-phone-sub { display: none; }
  .header-phone { font-size: 20px; }

  .hero { margin-top: 40px; margin-bottom: 36px; }
  .hero-inner { flex-direction: column; gap: 24px; }
  .hero-cta-block { padding-top: 0; }
  .hero h1 { font-size: 30px; }
  .hero-sub { max-width: 100%; }

  .slider-wrap { height: 360px; border-radius: 24px; }
  .slide {
    display: block;
    padding: 32px 28px;
  }
  .slide-content {
    max-width: 100%;
    display: flex;
    flex-direction: column;
    justify-content: center;
    height: 100%;
  }
  .slide-content h2 { font-size: 26px; }
  .slide-sub { font-size: 14px; }
  .slide-features { display: none; }
  .slider-arrow { width: 44px; }

  .products { padding: 44px 0 40px; }
  .products-grid { margin-top: 40px; }

  /* Единый вертикальный ритм секций (моб): каждая секция 44px 0 (шаг 4px, база 44) */
  .features { padding: 44px 0; }
  .feature-item { padding: 0; }              /* десктопный 40px 0 → ритм несёт grid gap */
  .features-grid { padding-bottom: 0; gap: 24px; }

  .services { padding: 44px 0; }             /* было 40px 0 44px → симметрия 44px 0 */
  .service-row { flex-direction: column; gap: 12px; padding: 20px 12px; margin: 0 -12px; }
  .service-right { align-items: flex-start; flex-direction: row; gap: 16px; align-items: center; }
  .services .services-cat-count { display: none; }

  .brands-grid { grid-template-columns: repeat(3, 1fr); }

  .cta-form { padding: 44px 0; }             /* добавлено: был десктопный 72px 0 — главный разрыв ритма */
  .cta-form-grid { grid-template-columns: 1fr; gap: 32px; }
  .cta-form-text h2 { font-size: 30px; }

  .footer-grid { grid-template-columns: 1fr 1fr; gap: 28px; }

  .section-row-header h2 { font-size: 28px; }
}
/* [REF] 568px: features 1 колонка, товары 1 колонка, карточки radius 24px */
@media (max-width: 568px) {
  .header-phone { display: none; }
  .header-cart { width: 44px; height: 44px; border-radius: 16px; }  /* [REF] корзина моб radius 16px */

  .hero h1 { font-size: 26px; }
  .btn-hero { width: 100%; justify-content: center; }

  .features { padding: 36px 0; }           /* ритм секций @568 = 36px 0 */
  .features-grid { grid-template-columns: 1fr; gap: 20px; }
  .feature-icon { border-radius: 12px; }  /* [REF] иконки моб 425px radius 12px */

  .product-card { border-radius: 24px; padding: 24px; }  /* [REF] карточки моб radius 24px, padding 24px */
  /* РЕГРЕССИЯ-ФИКС (моб): Woo `li.product{padding:0}` (0,3,2) бьёт .product-card моб
     (0,1,0) — на <li class="product-card product"> восстанавливаем моб padding тем же
     каталог-скоупом (0,4,3 > Woo). Значение = .product-card моб (стр. выше), не новое. */
  body.woocommerce-page .catalog-grid ul.products li.product,
  body.woocommerce .catalog-grid ul.products li.product { padding: 24px; }
  .products-grid { grid-template-columns: 1fr; }

  .section-row-header h2 { font-size: 24px; }
  .btn-section-more { font-size: 13px; padding: 7px 12px; }

  .brands-grid { grid-template-columns: repeat(2, 1fr); }
  .brand-card { border-radius: 24px; }

  .services { padding: 36px 0; }           /* ритм секций @568 = 36px 0 */
  .services .services-grid { grid-template-columns: 1fr; }
  .services .services-cat-label { font-size: 18px; }
  .services .service-card { border-radius: 20px; }

  .footer-grid { grid-template-columns: 1fr; gap: 24px; }
  .footer-bottom { flex-direction: column; align-items: center; text-align: center; gap: 4px; }

  .cta-form { padding: 36px 0; }           /* было 48px 0 → ритм 36px 0 */
}

/* ── Интеграция WordPress: меню (wp_nav_menu) и логотип-картинка ──────────── */
.logo img { display: block; height: 34px; width: auto; }
.header-nav .header-nav-list { display: flex; align-items: center; gap: 4px; list-style: none; margin: 0; padding: 0; }
.header-nav .header-nav-list li { display: flex; }
.footer-links .footer-menu-list { display: flex; flex-direction: column; gap: 8px; list-style: none; margin: 0; padding: 0; }

/* ── Выпадающие подменю в шапке (wp_nav_menu sub-menu) ───────────────────── */
.header-nav .header-nav-list { flex-wrap: nowrap; }
.header-nav .header-nav-list > li { position: relative; }
/* индикатор «есть подменю» */
.header-nav .header-nav-list > li.menu-item-has-children > a::after {
  content: "";
  display: inline-block;
  width: 7px; height: 7px;
  margin-left: 7px;
  border-right: 2px solid currentColor;
  border-bottom: 2px solid currentColor;
  transform: translateY(-2px) rotate(45deg);
  opacity: .5;
}
.header-nav .header-nav-list .sub-menu {
  position: absolute;
  top: 100%;
  left: 0;
  min-width: 260px;
  background: #fff;
  border: 1px solid var(--rule);
  border-radius: 14px;
  box-shadow: 0 10px 30px rgba(0,0,0,.10);
  padding: 8px;
  margin: 0;
  list-style: none;
  display: flex;
  flex-direction: column;
  gap: 2px;
  opacity: 0;
  visibility: hidden;
  transform: translateY(6px);
  transition: opacity .18s ease, transform .18s ease, visibility .18s ease;
  z-index: 200;
}
.header-nav .header-nav-list > li:hover > .sub-menu,
.header-nav .header-nav-list > li:focus-within > .sub-menu {
  opacity: 1;
  visibility: visible;
  transform: translateY(0);
}
.header-nav .header-nav-list .sub-menu li { display: block; }
.header-nav .header-nav-list .sub-menu a {
  display: block;
  padding: 10px 14px;
  font-size: 15px;
  font-weight: 500;
  border-radius: 8px;
  white-space: normal;
  line-height: 1.35;
}

/* ── Мобильное меню (бургер + выезжающая панель) ─────────────────────────── */
.mh-burger { display: none; flex-direction: column; justify-content: center; gap: 5px; width: 44px; height: 44px; padding: 0 10px; background: var(--bg-soft); border: none; border-radius: 12px; cursor: pointer; flex-shrink: 0; }
.mh-burger span { display: block; height: 2px; width: 100%; background: var(--text); border-radius: 2px; transition: transform .22s ease, opacity .22s ease; }
.mh-burger.is-open span:nth-child(1) { transform: translateY(7px) rotate(45deg); }
.mh-burger.is-open span:nth-child(2) { opacity: 0; }
.mh-burger.is-open span:nth-child(3) { transform: translateY(-7px) rotate(-45deg); }

.mh-mobile-overlay { position: fixed; inset: 0; background: rgba(0,0,0,.4); opacity: 0; visibility: hidden; transition: opacity .28s ease, visibility .28s ease; z-index: 299; }
.mh-mobile-overlay.is-open { opacity: 1; visibility: visible; }

.mh-mobile-menu { position: fixed; top: 0; right: 0; bottom: 0; width: 340px; max-width: 88vw; background: #fff; box-shadow: -8px 0 40px rgba(0,0,0,.16); transform: translateX(100%); transition: transform .28s ease; z-index: 300; overflow-y: auto; display: flex; flex-direction: column; }
.mh-mobile-menu.is-open { transform: translateX(0); }
.mh-mobile-head { display: flex; align-items: center; justify-content: space-between; padding: 20px; border-bottom: 1px solid var(--rule); }
.mh-mobile-title { font-size: 18px; font-weight: 700; letter-spacing: -1px; color: var(--text); }
.mh-mobile-close { display: inline-flex; align-items: center; justify-content: center; width: 40px; height: 40px; border: none; background: var(--bg-soft); border-radius: 12px; cursor: pointer; }
.mh-mobile-close svg { width: 20px; height: 20px; }

.mh-mobile-nav { padding: 12px; }
.mh-mobile-list, .mh-mobile-list .sub-menu { list-style: none; margin: 0; padding: 0; }
.mh-mobile-list a { display: block; padding: 12px 14px; font-size: 16px; font-weight: 600; letter-spacing: -.5px; color: var(--text); border-radius: 10px; }
.mh-mobile-list a:hover { background: var(--bg-soft); }
.mh-mobile-list .sub-menu a { font-size: 15px; font-weight: 500; padding-left: 28px; color: var(--muted); }
.mh-mobile-list > li { border-bottom: 1px solid var(--rule); }
.mh-mobile-list > li:last-child { border-bottom: none; }

.mh-mobile-contact { margin-top: auto; padding: 20px; border-top: 1px solid var(--rule); display: flex; flex-direction: column; gap: 6px; }
.mh-mobile-phone { font-size: 20px; font-weight: 700; letter-spacing: -1px; color: var(--text); }
.mh-mobile-hours { font-size: 13px; color: var(--muted); }
.mh-mobile-account { margin-top: 8px; font-size: 15px; font-weight: 600; color: var(--accent); }

body.mh-menu-open { overflow: hidden; }

@media (max-width: 993px) {
  .mh-burger { display: flex; }
}

/* Надзаголовок hero (mhf/hero badge) — сдержанная метка, без дэш-eyebrow */
.hero-badge { display: inline-block; font-size: 13px; font-weight: 600; letter-spacing: -0.3px; color: var(--muted); margin-bottom: 14px; }

/* ── Поля CF7 внутри карточки формы (.cta-form-card) под дизайн v10 ──────── */
.cta-form-card .wpcf7-form p { margin: 0 0 16px; }
.cta-form-card .wpcf7-form p:last-child { margin-bottom: 0; }
.cta-form-card .wpcf7-form-control-wrap { display: block; }
.cta-form-card input.wpcf7-form-control:not([type=submit]),
.cta-form-card textarea.wpcf7-form-control,
.cta-form-card select.wpcf7-form-control {
  width: 100%; min-height: 48px; padding: 12px 14px;
  border: 1.6px solid var(--bg-soft); border-radius: 12px;
  font-family: 'Inter', sans-serif; font-size: 15px; color: var(--text);
  background: #fff; outline: none; transition: border-color .18s ease;
}
.cta-form-card input.wpcf7-form-control:focus,
.cta-form-card textarea.wpcf7-form-control:focus,
.cta-form-card select.wpcf7-form-control:focus { border-color: var(--accent); }
.cta-form-card input.wpcf7-submit {
  width: 100%; min-height: 52px; margin-top: 0; padding: 14px 24px;
  background: var(--accent); color: #fff; border: none; border-radius: 18px;
  font-family: 'Inter', sans-serif; font-size: 16px; font-weight: 700; letter-spacing: -.5px;
  cursor: pointer; transition: background-color .3s ease;
}
.cta-form-card input.wpcf7-submit:hover { background: var(--btn-dark); }

/* ── Секции страниц услуг/инфо: блоки steps/why(included)/faq/seo-text/infobox ── */
.btn-primary { display: inline-flex; align-items: center; gap: 6px; font-size: 18px; font-weight: 700; letter-spacing: -1px; color: #fff; background: var(--accent); border: none; border-radius: 18px; padding: 20px 28px; cursor: pointer; white-space: nowrap; transition: background 0.18s ease; }
.btn-primary:hover { background: var(--btn-dark); }

.section-head { margin-bottom: 32px; }
.section-head h2 { font-size: 44px; font-weight: 700; color: var(--text); letter-spacing: -1px; line-height: 1.33; }
.section-head p { font-size: 16px; font-weight: 500; color: var(--muted); letter-spacing: -0.5px; margin-top: 12px; max-width: 640px; line-height: 1.43; }

.included { background: var(--bg); padding: 48px 0; }
.included-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 8px; }
.included-card { background: var(--bg-soft); border-radius: 32px; padding: 32px; display: flex; flex-direction: column; gap: 16px; transition: box-shadow 0.18s ease; }
.included-card:hover { box-shadow: 0 4px 24px rgba(93,96,249,.12); }
.included-icon { width: 56px; height: 56px; display: flex; align-items: center; justify-content: center; background: var(--icon-bg); border-radius: 18px; flex-shrink: 0; }
.included-icon svg { width: 28px; height: 28px; stroke: var(--accent); fill: none; stroke-width: 2; stroke-linecap: round; stroke-linejoin: round; }
.included-card h3 { font-size: 18px; font-weight: 700; color: var(--text); letter-spacing: -1px; line-height: 1.33; }
.included-card p { font-size: 14px; font-weight: 500; color: var(--muted); letter-spacing: -0.5px; line-height: 1.43; }

/* ── Цены (блок mhf/pricing): секция .pricing, эталон page-service.html «Цены».
   Классы pricing-* уникальны (grep theme.css=0, во всём wp-content — только render.php),
   не пересекаются с Neve/Woo → скоуп родителем не требуется, следуем конвенции файла
   (.included/.steps/.info-alert — те же bare-unique-классы). Заголовок — общий .section-head. ── */
.pricing { background: var(--bg); padding: 48px 0; }
.pricing-table { border-top: 1px solid var(--rule); }
.pricing-row { display: flex; justify-content: space-between; align-items: center; gap: 24px; padding: 22px 16px; border-bottom: 1px solid var(--rule); border-radius: 12px; margin: 0 -16px; transition: background 0.18s ease; }
.pricing-row:hover { background: var(--bg-soft); }
.pricing-name { font-size: 16px; font-weight: 600; color: var(--text); letter-spacing: -0.5px; line-height: 1.4; }
.pricing-name small { display: block; font-size: 13px; font-weight: 500; color: var(--muted); margin-top: 2px; }
.pricing-price { font-size: 22px; font-weight: 700; color: var(--text); letter-spacing: -1px; white-space: nowrap; flex-shrink: 0; }
.pricing-note { display: flex; align-items: center; gap: 12px; margin-top: 24px; background: var(--alert); border-radius: 16px; padding: 18px 24px; font-size: 14px; font-weight: 500; color: var(--text); letter-spacing: -0.5px; line-height: 1.43; }
.pricing-note svg { width: 22px; height: 22px; stroke: var(--accent); fill: none; stroke-width: 2; stroke-linecap: round; stroke-linejoin: round; flex-shrink: 0; }

.steps { background: var(--bg-soft); padding: 64px 0; }
.steps-grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 8px; }
.step-card { background: var(--bg); border-radius: 32px; padding: 32px; display: flex; flex-direction: column; gap: 16px; height: 100%; }
.step-num { width: 48px; height: 48px; display: flex; align-items: center; justify-content: center; background: var(--accent); color: #fff; border-radius: 16px; font-size: 22px; font-weight: 700; letter-spacing: -1px; flex-shrink: 0; }
.step-card h3 { font-size: 18px; font-weight: 700; color: var(--text); letter-spacing: -1px; line-height: 1.33; }
.step-card p { font-size: 14px; font-weight: 500; color: var(--muted); letter-spacing: -0.5px; line-height: 1.43; }

.page-content { max-width: 820px; padding: 8px 0 64px; }
.page-section { margin-top: 40px; }
.page-section-title { font-size: 24px; font-weight: 700; color: var(--text); letter-spacing: -1px; line-height: 1.25; margin-bottom: 14px; }
.page-section h3 { font-size: 18px; font-weight: 700; color: var(--text); letter-spacing: -1px; line-height: 1.33; margin: 22px 0 10px; }
.page-section-body { font-size: 15px; font-weight: 500; color: var(--text); line-height: 1.6; letter-spacing: -0.5px; }
.page-section-body p { margin-bottom: 14px; }
.page-section-body p:last-child { margin-bottom: 0; }
.page-section-body a { color: var(--accent); text-decoration: underline; text-underline-offset: 2px; }
.page-section-body a:hover { color: var(--btn-dark); }
.page-section-body strong { font-weight: 700; color: var(--text); }

.info-alert { display: flex; gap: 14px; align-items: flex-start; background: var(--alert); border-radius: 18px; padding: 20px 24px; margin: 28px 0; }
.info-alert-icon { flex-shrink: 0; width: 24px; height: 24px; color: var(--accent); }
.info-alert-icon svg { width: 24px; height: 24px; display: block; }
.info-alert-body { font-size: 15px; font-weight: 500; color: var(--text); line-height: 1.6; letter-spacing: -0.5px; }
.info-alert-body strong { font-weight: 700; }

@media (max-width: 960px) {
  .steps-grid { grid-template-columns: repeat(2, 1fr); }
}
@media (max-width: 768px) {
  .section-head { margin-bottom: 24px; }   /* было 32px → единый ритм заголовков секций (моб) */
  .section-head h2 { font-size: 34px; }
  .included { padding: 44px 0; }            /* было 36px 0 → ритм 44px 0 */
  .steps { padding: 44px 0; }               /* уже 44px 0 — ритм */
  .pricing { padding: 44px 0; }             /* эталон 36px 0 → приведён к общему ритму секций @768 */
  .pricing-row { padding: 18px 12px; margin: 0 -12px; gap: 16px; }
  .pricing-price { font-size: 20px; }

  /* .included-grid: на мобиле grid → горизонтальный скролл-ряд (edge-to-edge, snap).
     На flex inline grid-template-columns из render.php игнорируется — !important не нужен.
     Единый брейкпоинт @768 (карточек 4, «2 в ряд» не требуется). Десктоп grid не трогаем. */
  .included-grid {
    display: flex;
    flex-wrap: nowrap;
    overflow-x: auto;
    overflow-y: hidden;
    scroll-snap-type: x mandatory;
    -webkit-overflow-scrolling: touch;
    gap: 12px;
    margin-left: -4vw;
    margin-right: -4vw;
    padding: 4px 4vw;
    scroll-padding-left: 4vw;
    scrollbar-width: none;
    -ms-overflow-style: none;
  }
  .included-grid::-webkit-scrollbar { display: none; }
  .included-grid:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; }
  .included-card {
    flex: 0 0 75%;      /* ~75vw из-за edge-to-edge margin -4vw → справа торчит след. карточка */
    max-width: 300px;
    scroll-snap-align: start;
  }
}
@media (max-width: 568px) {
  .included { padding: 36px 0; }            /* ритм секций @568 = 36px 0 */
  .steps { padding: 36px 0; }               /* ритм секций @568 = 36px 0 */
  .pricing { padding: 36px 0; }             /* ритм секций @568 = 36px 0 */
  .steps-grid { grid-template-columns: 1fr; }
  .included-card, .step-card { border-radius: 24px; }
  .pricing-row { flex-direction: column; align-items: flex-start; gap: 6px; }
}

/* ── FAQ (блок mhf/faq): базовая вёрстка. Аккордеон-механику ([open]) несёт scoped-стиль render.php ── */
.faq { background: var(--bg); padding: 64px 0; }
.faq-list { max-width: 900px; }
.faq-item { border-bottom: 1px solid var(--rule); }
.faq-item:first-child { border-top: 1px solid var(--rule); }
.faq-question { width: 100%; display: flex; justify-content: space-between; align-items: center; gap: 24px; background: transparent; border: none; padding: 24px 0; cursor: pointer; text-align: left; font-family: 'Inter', sans-serif; font-size: 18px; font-weight: 700; color: var(--text); letter-spacing: -1px; line-height: 1.33; }
.faq-question:hover { color: var(--accent); }
.faq-icon { width: 32px; height: 32px; flex-shrink: 0; display: flex; align-items: center; justify-content: center; background: var(--bg-soft); border-radius: 10px; transition: background 0.18s ease, transform 0.25s ease; }
.faq-icon svg { width: 16px; height: 16px; stroke: var(--text); fill: none; stroke-width: 2.4; stroke-linecap: round; stroke-linejoin: round; }
.faq-answer { overflow: hidden; }
.faq-answer-inner { padding: 0 56px 24px 0; font-size: 15px; font-weight: 500; color: var(--muted); letter-spacing: -0.5px; line-height: 1.55; }
@media (max-width: 768px) {
  .faq { padding: 44px 0; }
  .faq-question { font-size: 16px; }
  .faq-answer-inner { padding-right: 0; }
}
@media (max-width: 568px) {
  .faq { padding: 36px 0; }                 /* ритм секций @568 = 36px 0 */
}

/* ═══ КАТАЛОГ (archive-product) ═══════════════════════════════════════════ */
.breadcrumbs { padding: 28px 0 0; }
.breadcrumbs-list { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; font-size: 14px; font-weight: 500; letter-spacing: -0.5px; }
.breadcrumbs-list a { color: var(--muted); transition: color 0.18s ease; }
.breadcrumbs-list a:hover { color: var(--accent); }
.breadcrumbs-sep { color: var(--muted); opacity: .6; margin: 0 2px; }
.breadcrumbs-list .breadcrumbs-current, .breadcrumbs-list > span:last-child { color: var(--text); }
.catalog-head { padding: 20px 0 8px; }
/* Шапка каталога: текст слева / сортировка справа, по центру вертикали (по запросу владельца). */
.catalog-head-inner { display: flex; align-items: center; justify-content: space-between; gap: 24px; flex-wrap: wrap; }
.catalog-head-text { flex: 1 1 420px; min-width: 0; }
.catalog-head .sort-wrap { flex: 0 0 auto; }
.catalog-head h1 { font-size: 44px; font-weight: 700; letter-spacing: -1px; color: var(--text); line-height: 1.09; }
.catalog-head h1 .accent { color: var(--accent); }
.catalog-count { margin-top: 12px; font-size: 14px; font-weight: 500; color: var(--muted); letter-spacing: -0.5px; }
.catalog-intro { margin-top: 14px; max-width: 720px; font-size: 14px; font-weight: 500; color: var(--muted); line-height: 1.5; letter-spacing: -0.5px; }
.catalog { padding: 24px 0 64px; }
.catalog-layout { display: grid; grid-template-columns: 300px 1fr; gap: 32px; align-items: start; }
.filter-overlay { display: none; }
.filter-toggle { display: none; align-items: center; gap: 8px; font-size: 14px; font-weight: 600; letter-spacing: -0.5px; color: var(--text); background: var(--bg-soft); border: 1px solid var(--rule); border-radius: 12px; padding: 12px 16px; cursor: pointer; margin-bottom: 16px; }
.filter-toggle svg { width: 18px; height: 18px; stroke: var(--text); fill: none; stroke-width: 2; stroke-linecap: round; stroke-linejoin: round; }
.filter-aside { position: sticky; top: 96px; align-self: start; background: var(--bg-soft); border-radius: 32px; padding: 28px; }
.filter-aside-head { display: flex; align-items: center; justify-content: space-between; margin-bottom: 20px; }
.filter-aside-head h2 { font-size: 22px; font-weight: 700; letter-spacing: -1px; color: var(--text); line-height: 1.1; }
.filter-reset { font-size: 13px; font-weight: 600; color: var(--muted); letter-spacing: -0.5px; background: none; border: none; cursor: pointer; padding: 0; transition: color 0.18s ease; }
.filter-reset:hover { color: var(--accent); }
.filter-group { padding: 18px 0; border-top: 1px solid #E7E7EE; }
.filter-group:first-of-type { border-top: none; padding-top: 0; }
.filter-group-title { font-size: 15px; font-weight: 700; letter-spacing: -0.5px; color: var(--text); margin-bottom: 14px; }
.filter-options { display: flex; flex-direction: column; gap: 4px; }
.filter-opt { display: flex; align-items: center; gap: 10px; cursor: pointer; padding: 6px 8px; margin: 0 -8px; border-radius: 10px; transition: background 0.18s ease; }
.filter-opt:hover { background: #fff; }
.filter-opt input { position: absolute; opacity: 0; width: 0; height: 0; }
.filter-box { width: 20px; height: 20px; flex-shrink: 0; border: 1.6px solid #D5D5DE; border-radius: 6px; background: #fff; display: inline-flex; align-items: center; justify-content: center; transition: background 0.18s ease, border-color 0.18s ease; }
.filter-box svg { width: 12px; height: 12px; stroke: #fff; fill: none; stroke-width: 3; stroke-linecap: round; stroke-linejoin: round; opacity: 0; transition: opacity 0.18s ease; }
.filter-opt input:checked + .filter-box { background: var(--accent); border-color: var(--accent); }
.filter-opt input:checked + .filter-box svg { opacity: 1; }
.filter-opt-label { font-size: 14px; font-weight: 500; letter-spacing: -0.5px; color: var(--text); flex: 1; }
.filter-opt-count { font-size: 12px; font-weight: 500; color: var(--muted); letter-spacing: -0.3px; }
.filter-chips { display: flex; flex-wrap: wrap; gap: 8px; }
.filter-chip { font-size: 13px; font-weight: 600; letter-spacing: -0.5px; color: var(--text); background: #fff; border: 1.6px solid transparent; border-radius: 12px; padding: 8px 14px; cursor: pointer; transition: border-color 0.18s ease, color 0.18s ease, background 0.18s ease; }
.filter-chip:hover { border-color: var(--accent); color: var(--accent); }
.filter-chip.active { background: var(--accent); color: #fff; }
.filter-price { display: flex; align-items: center; gap: 10px; }
.filter-price-input { width: 100%; min-height: 44px; padding: 10px 12px; background: #fff; border: 1.6px solid transparent; border-radius: 12px; font-family: 'Inter', sans-serif; font-size: 14px; font-weight: 500; color: var(--text); outline: none; letter-spacing: -0.5px; transition: border-color 0.18s ease; }
.filter-price-input:focus { border-color: var(--accent); }
.filter-price-dash { color: var(--muted); flex-shrink: 0; }
.filter-apply { width: 100%; margin-top: 22px; min-height: 48px; padding: 14px 20px; background: var(--btn-dark); color: #fff; border: none; border-radius: 18px; font-family: 'Inter', sans-serif; font-size: 15px; font-weight: 600; letter-spacing: -0.5px; cursor: pointer; transition: background 0.18s ease; }
.filter-apply:hover { background: var(--accent); }
.filter-close { display: none; align-items: center; justify-content: center; width: 32px; height: 32px; border-radius: 10px; background: #fff; border: none; cursor: pointer; }
.filter-close svg { width: 16px; height: 16px; stroke: var(--text); fill: none; stroke-width: 2.4; stroke-linecap: round; }
.catalog-main { min-width: 0; }
.catalog-toolbar { display: flex; align-items: center; justify-content: space-between; gap: 16px; flex-wrap: wrap; margin-bottom: 24px; }
/* Toolbar теперь содержит только .active-filters (sort-wrap уехал в шапку).
   Пока фильтров нет — .active-filters:empty скрыт, обнуляем отступ пустого toolbar. */
.catalog-toolbar:not(:has(.active-filters:not(:empty))) { margin-bottom: 0; }
.active-filters { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; }
.active-chip { display: inline-flex; align-items: center; gap: 6px; font-size: 13px; font-weight: 500; letter-spacing: -0.5px; background: var(--alert); color: var(--text); border-radius: 8px; padding: 6px 10px; }
.sort-wrap { display: flex; align-items: center; gap: 8px; flex-shrink: 0; }
.sort-label { font-size: 13px; font-weight: 500; color: var(--muted); letter-spacing: -0.5px; white-space: nowrap; }
.sort-wrap .woocommerce-ordering { margin: 0; }
.sort-wrap select.orderby { min-height: 44px; padding: 8px 34px 8px 14px; background: var(--bg-soft) url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 24 24' fill='none' stroke='%23262834' stroke-width='2.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'/%3E%3C/svg%3E") no-repeat right 12px center; border: 1px solid var(--rule); border-radius: 12px; font-family: 'Inter', sans-serif; font-size: 14px; font-weight: 600; letter-spacing: -0.5px; color: var(--text); outline: none; cursor: pointer; appearance: none; -webkit-appearance: none; }
.sort-wrap select.orderby:focus { border-color: var(--accent); }
.catalog-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 4px; }
.product-card-img-link { position: absolute; inset: 0; display: block; }
.catalog-empty { padding: 48px 0; text-align: center; }
.pagination { display: flex; align-items: center; justify-content: center; gap: 8px; margin-top: 48px; flex-wrap: wrap; }
.pagination .page-numbers { min-width: 44px; height: 44px; padding: 0 12px; display: inline-flex; align-items: center; justify-content: center; background: var(--bg-soft); border: 1px solid transparent; border-radius: 12px; font-family: 'Inter', sans-serif; font-size: 15px; font-weight: 600; letter-spacing: -0.5px; color: var(--text); cursor: pointer; transition: all 0.18s ease; }
.pagination a.page-numbers:hover { border-color: var(--accent); color: var(--accent); }
.pagination .page-numbers.current { background: var(--btn-dark); color: #fff; }
.pagination .page-numbers.dots { background: none; color: var(--muted); min-width: auto; padding: 0 4px; }
.catalog-cta { margin-top: 56px; }
.catalog-cta-inner { background: var(--alert); border-radius: 32px; padding: 44px 48px; display: flex; align-items: center; justify-content: space-between; gap: 32px; flex-wrap: wrap; }
.catalog-cta-text h2 { font-size: 28px; font-weight: 700; letter-spacing: -1px; color: var(--text); line-height: 1.15; }
.catalog-cta-text p { margin-top: 10px; font-size: 15px; font-weight: 500; color: #4A6472; letter-spacing: -0.5px; line-height: 1.45; max-width: 560px; }
.btn-cta-form { display: inline-flex; align-items: center; gap: 8px; flex-shrink: 0; font-size: 17px; font-weight: 700; letter-spacing: -1px; color: #fff; background: var(--accent); border: none; border-radius: 18px; padding: 18px 28px; cursor: pointer; white-space: nowrap; transition: background 0.18s ease; }
.catalog-cta-inner .btn-cta-form:hover { background: var(--btn-dark); color: #fff; }
@media (max-width: 1240px) {
  .catalog-layout { grid-template-columns: 260px 1fr; gap: 24px; }
  .catalog-grid { grid-template-columns: repeat(2, 1fr); }
  .catalog-head h1 { font-size: 40px; }
}
@media (max-width: 960px) {
  .catalog-layout { grid-template-columns: 1fr; }
  .filter-toggle { display: inline-flex; }
  .filter-aside { position: fixed; top: 0; left: 0; bottom: 0; z-index: 200; width: 320px; max-width: 88vw; border-radius: 0 24px 24px 0; overflow-y: auto; transform: translateX(-100%); transition: transform 0.28s ease; box-shadow: 0 0 40px rgba(0,0,0,.18); }
  .filter-aside.open { transform: translateX(0); }
  .filter-overlay { display: block; position: fixed; inset: 0; background: rgba(0,0,0,.4); z-index: 199; opacity: 0; visibility: hidden; transition: opacity 0.28s ease, visibility 0.28s ease; }
  .filter-overlay.open { opacity: 1; visibility: visible; }
  .filter-close { display: inline-flex; }
  .catalog-grid { grid-template-columns: repeat(2, 1fr); }
}
@media (max-width: 768px) {
  .catalog-head h1 { font-size: 30px; }
  /* Тесно для строки — сортировка переносится под заголовочный блок, выравнивание влево. */
  .catalog-head-inner { flex-direction: column; align-items: stretch; gap: 16px; }
  /* В column flex flex-basis:420px стал бы ВЫСОТОЙ блока (дыра под подзаголовком) — сбрасываем. */
  .catalog-head-text { flex: 0 0 auto; }
  .catalog-head .sort-wrap { justify-content: flex-start; }
  .catalog-cta-inner { padding: 32px 28px; }
  .catalog-cta-text h2 { font-size: 24px; }
}
@media (max-width: 568px) {
  .catalog-head h1 { font-size: 26px; }
  .catalog-grid { grid-template-columns: 1fr; }
  .catalog-toolbar { flex-direction: column; align-items: stretch; }
  /* Моб: сортировка на всю ширину, label слева + dropdown растянут; тап-цель ≥44px. */
  .catalog-head .sort-wrap { justify-content: space-between; }
  .catalog-head .sort-wrap .woocommerce-ordering,
  .catalog-head .sort-wrap select.orderby { flex: 1 1 auto; width: 100%; }
  .btn-cta-form { width: 100%; justify-content: center; }
}

/* WooCommerce loop вставляет ul.products внутрь .catalog-grid — «растворяем» ul,
   чтобы карточки стали прямыми элементами нашей сетки (3 кол. на десктопе) */
.catalog-grid > ul.products { display: contents; }
.catalog-grid ul.products { margin: 0; padding: 0; list-style: none; }
/* РЕГРЕССИЯ-ФИКС: корень карточки стал <li class="product-card product"> (wc_product_class).
   Из-за этого woocommerce-layout.css ловит наши карточки правилом
   `.woocommerce ul.products.columns-3 li.product{float:left;width:30.75%;margin:0 3.8% 2.992em 0}`
   → width/float на grid-элементе перебивают трек 1fr → карточки узкие/сжатые.
   Возвращаем управление grid-треку: гасим навязанные Woo float/width/margin строго
   в скоупе нашего каталога. Специфичность добираем body.woocommerce-page (как у Woo)
   + .catalog-grid, чтобы перебить без !important. single-product related не задет:
   там ul.products-grid без класса `products`, это правило его не ловит. */
body.woocommerce-page .catalog-grid ul.products li.product,
body.woocommerce .catalog-grid ul.products li.product {
  float: none;
  width: auto;
  margin: 0;
  /* РЕГРЕССИЯ-ФИКС: Woo `ul.products li.product{padding:0}` (спец. 0,3,2) обнуляет
     наш .product-card{padding:32px} (стр.566, спец. 0,1,0), т.к. корень карточки —
     <li class="product-card product">. Восстанавливаем десктопный padding тем же
     скоупом (спец. 0,4,3 > Woo), без !important. Значение = .product-card стр.566. */
  padding: 32px;
}
/* Клирфикс Woo `.woocommerce ul.products::before/::after{content:" ";display:table}`
   при display:contents на ul даёт пустые псевдо-слоты в grid каталога — гасим в скоупе. */
body.woocommerce-page .catalog-grid ul.products::before,
body.woocommerce-page .catalog-grid ul.products::after,
body.woocommerce .catalog-grid ul.products::before,
body.woocommerce .catalog-grid ul.products::after {
  content: none;
  display: none;
}

/* /shop/ (t-032): наш бессайдбарный .col внутри Neve .shop-container ловит Neve-правило .neve-main>.container .col{max-width:70%} (схема контент+сайдбар). Снимаем кап — колонка каталога на всю ширину. */
.neve-main > .shop-container > .row > .col { max-width: 100%; }

/* ═══ /shop/ сверка с макетом v10 (t-032) ═══════════════════════════════ */
/* Ширина контентной части каталога = как .container-wide (width:1760, max-width:100%),
   а не узкий .container(calc 1400+4vw) — иначе контент уже шапки и не совпадает по краям.
   Скоуп строго на .shop-container: топбар/шапка(.container-wide)/футер НЕ затронуты. Без медиа. */
.shop-container.container,
.shop-container .container { width: 1760px; max-width: 100%; }
/* PDP-фикс: на карточке товара наш КОНТЕНТНЫЙ .container вложен внутрь Neve
   .container.shop-container, поэтому descendant-правило выше (.shop-container
   .container → width:1760) протекает и на него — колонка PDP становится «резиновой»
   (~1606px @1920 вместо эталонных ~1325px). Возвращаем эталонную ширину именно
   контентному контейнеру карточки (эталон .container: calc(1400px+4vw), 4vw края).
   Скоуп СТРОГО PDP: .product-page есть только на single-product; child-комбинатор
   бьёт только нашу обёртку. Специфичность (0,3,1) > (0,2,0) каталожного правила —
   без !important. /shop/ каталог (внешний .shop-container.container) НЕ затронут. */
.shop-container .product-page > .container { width: calc(1400px + 4vw); max-width: 100%; }
/* PDP @1440: ДВОЙНОЙ 4vw. Обёртка каталога .container.shop-container несёт
   собственный padding:0 4vw (строка 84), из-за чего .product-page ужимается до
   content-box обёртки (1440−2·57.6=1324.8 @1440), а наш контентный .container
   добавляет ЕЩЁ 4vw поверх → grid=1209.6 вместо эталонных 1325 (−115px).
   Эталон: .product-page = полный вьюпорт (padding 0), 4vw применяется ОДИН раз.
   Фикс: снять горизонтальный padding у обёртки ТОЛЬКО на карточке — тогда
   .product-page = вьюпорт, единственный 4vw нашего .container даёт эталон.
   Скоуп :has(.product-page): .product-page есть ЛИШЬ на single-product; каталог
   /shop его не содержит → :has не матчит, каталожная ширина 1760 не затронута.
   Специфичность (0,3,0) > .container(0,1,0) — без !important. @1920 не задет:
   там calc(1476.8) < 1440-родителя не капается, grid уже эталонный (probe). */
.shop-container.container:has(.product-page) { padding-left: 0; padding-right: 0; }
/* P1: обнулить бутстрап-жёлоб Neve вокруг каталога — края сетки по контейнеру */
.neve-main > .shop-container > .row { margin-left: 0; margin-right: 0; }
.neve-main > .shop-container > .row > .col { padding-left: 0; padding-right: 0; max-width: 100%; flex: 0 0 100%; }
/* P1: снять лишний margin-top:64px, унаследованный от .products-grid главной */
.catalog-main .products-grid { margin-top: 0; }
/* P2: центрирование и contain реальных фото товара в квадратной зоне */
.product-card-img-link { position: absolute; inset: 0; display: flex; align-items: center; justify-content: center; }
.product-card-img-link img { max-width: 100%; max-height: 100%; width: auto; height: auto; object-fit: contain; }
/* P2: скрыть пустой контейнер активных фильтров */
.active-filters:empty { display: none; }
/* P3: размеры svg-стрелок пагинации WooCommerce */
.pagination .page-numbers svg { width: 18px; height: 18px; stroke: currentColor; fill: none; stroke-width: 2.2; stroke-linecap: round; stroke-linejoin: round; }

/* ═══ КАРТОЧКА ТОВАРА (single-product) ═══════════════════════════════════════
   ПЕРЕПИСАНО С НУЛЯ ПО ЭТАЛОНУ docs/mockups/page-product.html (t-030 шаг 3).
   Скоуп СТРОГО карточка: .product-page (=.mhf-single) / .product-side / .gallery.
   Разметка — из шага 2 (content-single-product.php): .product-grid > .gallery +
   .product-side; секции .section-block/.section-title; характеристики .spec-*.

   Обёрнуто в @layer theme (объявлен в шапке файла: `@layer vendor, theme;`),
   чтобы бить вендор, ВТЯНУТЫЙ в слой vendor через @import layer(). Оставшийся
   НЕслойный вендор (woocommerce-general/neve-woocommerce) неслойный CSS сильнее
   любого слоя — но он таргетит ЧУЖИЕ селекторы (.price/.button/form.cart/input.qty),
   которые мы перебиваем СКОУПОМ+СПЕЦИФИЧНОСТЬЮ (родитель .product-page добавляет
   класс, наши селекторы (0,3,x) ≥ вендорных). !important здесь НЕ нужен:
   вендорный float/48% layout снят на шаге 1 dequeue на is_product() — заплатки-
   нейтрализаторы (width/float/clearfix) больше не требуются и удалены.

   A11y: текст/цена var(--text) на белом ~14.6:1 ✓ AA; белый на var(--accent)
   4.66:1 ✓ AA; бейдж var(--text) на var(--accent-2) ~13:1 ✓ AA; наличие
   #1B9E5A на белом ~3.6:1 — это НЕ текстовый контент-текст низкого размера,
   а статус-подпись 14px/600 (граница AA large 3:1) + дублируется точкой-иконкой.
   Видимый фокус — блок :focus-visible ниже. */
@layer theme {

  /* Корневая обёртка страницы (эталон .product-page: padding 40px 0 72px). */
  .product-page { padding: 40px 0 72px; }

  /* ── H1 названия ─────────────────────────────────────────────────────────
     Эталон .product-h1 (36/700/-1px), НО таргетим Woo-класс .product_title
     (по указанию шага 3), заголовок — прямой потомок .container ПЕРЕД сеткой.
     Специфичность (0,2,0) < вендорного `.woocommerce div.product .product_title`
     (0,3,1) — но тот вендорный layout снят на is_product(); оставшийся general
     .product_title не форсит размер. Добираем скоупом .product-page + классом. */
  .product-page .product_title,
  .product-page h1.product_title {
    font-size: 36px;
    font-weight: 700;
    line-height: 1.17;
    letter-spacing: -1px;
    color: var(--text);
    margin: 0 0 32px;
    max-width: 1000px;
  }

  /* ── Хлебные крошки (эталон .breadcrumbs) ────────────────────────────────
     woocommerce_breadcrumb() рендерит наш wrap <nav class="breadcrumbs">. */
  .product-page .breadcrumbs {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 8px;
    margin-bottom: 28px;
    font-size: 14px;
    font-weight: 500;
    color: var(--muted);
    letter-spacing: -0.5px;
  }
  .product-page .breadcrumbs a { color: var(--muted); transition: color 0.18s ease; }
  .product-page .breadcrumbs a:hover { color: var(--accent); }
  .product-page .breadcrumbs .sep { color: var(--muted); opacity: 0.6; }

  /* ── СЕТКА: галерея + product-side (эталон .product-grid 580px 1fr, gap 64) ── */
  .product-page .product-grid {
    display: grid;
    grid-template-columns: 580px 1fr;
    gap: 64px;
    align-items: start;
  }

  /* ── ГАЛЕРЕЯ (левая колонка) ──────────────────────────────────────────────
     ШАГ 3: только раскладка колонки + базовый контейнер (эталон .gallery:
     flex column, center, gap 24). Детальная стилизация flexslider (главное фото
     580×580/radius 32/фон/contain, миниатюры, переключение) — ШАГ 4, здесь НЕ
     трогаем. min-width:0 — чтобы grid-колонка не распирала фиксированную ширину. */
  .product-page .gallery {
    min-width: 0;
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 24px;
    position: relative;
  }
  /* Бейджи поверх галереи (эталон .gallery-badges/.gallery-badge). */
  .product-page .gallery-badges {
    position: absolute;
    top: 20px;
    left: 20px;
    display: flex;
    flex-wrap: wrap;
    gap: 6px;
    z-index: 2;
  }
  .product-page .gallery-badge {
    display: inline-block;
    font-size: 12px;
    font-weight: 500;
    padding: 5px 10px;
    border-radius: 6px;
    line-height: 1.2;
    letter-spacing: -0.3px;
    background: var(--accent-2);
    color: var(--text);
  }
  /* Акцентный бейдж (эталон .gallery-badge-accent, стр. 177): «Инвертор». */
  .product-page .gallery-badge-accent {
    background: #EBEBFF;
    color: var(--accent);
  }

  /* ── ГАЛЕРЕЯ WOO (flexslider) под вид эталона ─────────────────────────────
     ШАГ 4. Реальная разметка: .woocommerce-product-gallery > __wrapper (трек) >
     __image (слайды) > a > img; миниатюры .flex-control-thumbs > li > img; зум —
     .woocommerce-product-gallery__trigger. Стилизуем ЭТУ разметку под эталон
     (.gallery-main = квадрат/фон/radius, фото contain по центру; миниатюры —
     квадраты 88/72 с рамкой).

     Механика flexslider (НЕ ломаем): трек __wrapper выстраивает слайды __image
     горизонтально и переключает их сменой left/transform + инлайн-width. Поэтому:
       • НЕ вешаем display:flex/padding на сам слайд __image (иначе не-первый слайд
         схлопывается в 0 — урок сессии);
       • высоту каждому слайду задаём СВОЮ через aspect-ratio:1/1 (а не заимствуем
         от viewport первого слайда);
       • центрирование — через object-fit:contain внутри квадратного бокса;
       • инлайн-width на __image/img от flexslider перебиваем в скоупе (width:100%),
         НЕ трогая display/position трека. */

  /* Контейнер галереи Woo = эталонный «.gallery-main»-бокс: во всю ширину
     колонки, но не форсим тут квадрат (квадрат — на каждом слайде). */
  .product-page .gallery .woocommerce-product-gallery {
    width: 100%;
    max-width: 580px;
    margin: 0;
    position: relative;
    /* --gallery-square = высота КВАДРАТА главного превью (.flex-viewport, первый
       прямой ребёнок галереи; height = ширине контейнера, т.к. слайд aspect-ratio:1/1).
       Якорь бейджа .onsale (ПРАВКА B) отсчитывает низ квадрата от ЭТОЙ величины.
       ВАЖНО: ширина контейнера = ширине КОЛОНКИ галереи (.product-grid), а она
       меняется по брейкам (580 → 480 → 340 → адаптив). Поэтому переменную
       ПЕРЕОПРЕДЕЛЯЕМ на каждом брейке синхронно с колонкой (см. @media 1240/1024/768/
       568 ниже) — иначе бейдж уедет ниже квадрата. Базовое (>1240): колонка = 580px. */
    --gallery-square: 580px;
    /* Woo инлайнит opacity:0 до инициализации flexslider; на no-js noscript
       возвращает opacity:1. Здесь не форсим — уважаем родную механику показа. */
  }

  /* Трек flexslider — механику (display/overflow) НЕ трогаем; только сбрасываем
     внешние отступы. (Бейдж .onsale ЗДЕСЬ НЕ якорится: он вынесен в СОСЕДА галереи,
     см. ПРАВКА B — якорь на внешнем .woocommerce-product-gallery, чтобы не резаться
     .flex-viewport{overflow:hidden} и height:0 треком __wrapper.) */
  .product-page .gallery .woocommerce-product-gallery__wrapper {
    margin: 0;
    padding: 0;
    position: relative;
  }

  /* Каждый слайд = квадратный бокс с фоном и radius (эталон .gallery-main).
     СВОЯ высота через aspect-ratio; width:100% перебивает инлайн flexslider.
     БЕЗ display:flex/padding на слайде.
     position:relative — контекст для АБСОЛЮТНОГО <a> (см. ниже, ЦЕНТРОВКА): даёт
     квадрату definite-высоту-контейнер, к которой <a inset:0> прилипает на 100%. */
  .product-page .gallery .woocommerce-product-gallery__image {
    position: relative;
    width: 100%;
    aspect-ratio: 1 / 1;
    background: var(--bg-soft);
    border-radius: 32px;
    overflow: hidden;
  }

  /* Ссылка внутри слайда — flex-центр фото по ОБЕИМ осям внутри квадрата.
     Padding на <a>, НЕ на слайде (слайд остаётся чистым боксом для механики flexslider).

     ЦЕНТРОВКА ПО ВЕРТИКАЛИ (корень бага): раньше <a> имел height:100%. Но height:100%
     резолвится от РОДИТЕЛЯ только при его definite-height; высота слайда задаётся через
     aspect-ratio, а flexslider инлайнит слайду float:left + width в px — в этой цепочке
     %-высота <a> ненадёжна, <a> схлопывался по высоте фото и flex-центрировать было нечего
     (фото прибивалось к верху). ФИКС: <a> абсолютный, inset:0 → он ЖЁСТКО занимает весь
     квадрат-слайд (position:relative на .__image) независимо от definite-height цепочки.
     Теперь align-items:center реально центрирует широкое/низкое фото по вертикали.

     БЕЗОПАСНОСТЬ FLEXSLIDER: высоту слайду даёт aspect-ratio самого слайда, НЕ контент;
     поэтому absolute-<a> (вынут из потока) высоту слайда НЕ обнуляет. <a> — не элемент
     трека flexslider (запрет flex/absolute из урока касается слайда __image), переключение
     слайдов идёт по __image, не по <a> → механика не тронута. */
  .product-page .gallery .woocommerce-product-gallery__image a {
    position: absolute;
    inset: 0;
    /* ЦЕНТРОВКА (корень бага, probe 10093): наш display:flex перебивался вендором.
       WooCommerce (single-product.css) объявляет `.woocommerce div.product ...
       .woocommerce-product-gallery__image a{display:block}` — селектор специфичнее
       нашего (.product-page .gallery .__image a), поэтому <a> вычислялся display:block,
       flex не работал, align-items/justify-content игнорировались → фото прибивалось
       к верх-лево padding-бокса (probe: img y=482 при центре бокса y=697, слайд/<a> оба
       ровно 580×580). Точечный !important на display (принятый в этом файле приём для
       перебивания вендора вне @layer) возвращает flex → align/justify центрируют фото
       по ОБЕИМ осям. Механику flexslider не трогает: <a> и так absolute, слайд остаётся
       квадратом через aspect-ratio. */
    display: flex !important;
    align-items: center;
    justify-content: center;
    padding: 13%; /* ~74% полезной площади внутри квадрата (эталон .ac-illustration 74%) */
    box-sizing: border-box;
  }

  /* MHF-GALLERY-VCENTER-t063 — маркер доставки CSS (grep на проде подтверждает,
     что новая версия theme.css доехала до пользователя).
     Фото — вписано в внутренний бокс, contain → по центру без искажений (товар НЕ
     обрезаем). width/height:auto + max-*:100% → фото сохраняет пропорции и не выходит
     за padding-бокс <a>; flex-центр <a> (inset:0 → полный квадрат) ставит его по центру
     и по ВЕРТИКАЛИ, и по горизонтали. max-width:100% перебивает инлайн-width flexslider,
     не растягивая узкое фото искусственно. */
  .product-page .gallery .woocommerce-product-gallery__image img {
    width: auto;
    height: auto;
    max-width: 100%;
    max-height: 100%;
    object-fit: contain;
    object-position: center;
    margin: 0;
    display: block;
  }

  /* Кнопка зума/лупа — top-right квадратного бокса; не наезжает на бейджи
     (те слева-сверху). */
  .product-page .gallery .woocommerce-product-gallery__trigger {
    position: absolute;
    top: 20px;
    right: 20px;
    z-index: 3;
    width: 44px;
    height: 44px;
    margin: 0;
    display: flex;
    align-items: center;
    justify-content: center;
    background: var(--bg);
    border-radius: 14px;
    box-shadow: 0 2px 10px rgba(38, 40, 52, 0.08);
    font-size: 18px;
    color: var(--text);
    transition: background 0.18s ease, color 0.18s ease;
  }
  .product-page .gallery .woocommerce-product-gallery__trigger:hover {
    background: var(--accent);
    color: #fff;
  }
  .product-page .gallery .woocommerce-product-gallery__trigger img {
    width: 20px;
    height: 20px;
  }

  /* Миниатюры (.flex-control-thumbs) — фикс-квадраты с рамкой (эталон
     .gallery-thumbs/.gallery-thumb): active/hover — accent.
     ГОРИЗОНТАЛЬНЫЙ СЛАЙДЕР (шаг 2 «Галерея PDP», доработка t-063): одна строка,
     БЕЗ переноса вниз. flex-wrap:nowrap + overflow-x:auto → при >6 превью уходят в
     горизонтальный скролл, а не в новый ряд. justify-content:flex-start (не center):
     при nowrap+overflow центрирование прятало бы начало ряда за левым краем скролла.
     padding-top/bottom 4px — чтобы 2px-рамка active-миниатюры не срезалась overflow'ом
     по вертикали. scroll-snap-type — приятное листание по превью.

     ДОСТУП К СКРЫТЫМ ПРЕВЬЮ: на десктопе тонкий scrollbar не ухватить, колесо по X не
     крутит, свайпа нет → скрытые миниатюры были недостижимы (баг). Теперь листание —
     кнопками ‹ › (JS §6 в functions.php оборачивает полосу в .mhf-thumbs-nav и скроллит
     scrollBy). Нативный scrollbar скрыт (scrollbar-width:none + ::-webkit-scrollbar
     display:none), чтобы не спорить со стрелками; сам overflow-скролл сохранён — на
     мобиле остаётся тач-свайп. flexslider JS ставит инлайн-стили на <img>/активный
     слайд и слушает клик по li — обёртка/overflow эти хендлеры не трогают. */
  .product-page .gallery .flex-control-thumbs {
    display: flex;
    flex-wrap: nowrap;
    justify-content: flex-start;
    gap: 12px;
    margin: 24px 0 0;
    padding: 4px 0;
    list-style: none;
    width: 100%;
    max-width: 580px;
    overflow-x: auto;
    overflow-y: hidden;
    scroll-snap-type: x proximity;
    -webkit-overflow-scrolling: touch;
    scrollbar-width: none;         /* Firefox: скрыть — листаем стрелками */
  }
  /* WebKit/Blink: скрыть системный scrollbar (заменён стрелками ‹ ›). Скролл-функция
     контейнера сохраняется (свайп на тач-устройствах работает). */
  .product-page .gallery .flex-control-thumbs::-webkit-scrollbar {
    display: none;
  }

  /* ── Обёртка полосы миниатюр + стрелки-слайдер (JS §6 functions.php) ──
     .mhf-thumbs-nav оборачивает <ol.flex-control-thumbs>; position:relative —
     якорь для абсолютных стрелок по краям. Стрелки видны ТОЛЬКО когда есть
     overflow (JS вешает класс .is-scrollable по scrollWidth>clientWidth), чтобы
     не мешали, если все превью влезли. Скоуп строго .product-page .gallery —
     не задевает «Похожие товары» и каталог. */
  .product-page .gallery .mhf-thumbs-nav {
    position: relative;
    max-width: 580px;
  }
  .product-page .gallery .mhf-thumbs-arrow {
    display: none;                 /* показывается только при .is-scrollable */
    position: absolute;
    top: calc(4px + 44px);         /* центр по вертикали полосы: padding-top 4px + 88/2 */
    transform: translateY(-50%);
    width: 40px;
    height: 40px;
    padding: 0;
    align-items: center;
    justify-content: center;
    background: var(--bg);
    border: 1px solid var(--rule);
    border-radius: 50%;
    box-shadow: 0 2px 10px rgba(38, 40, 52, 0.12);
    color: var(--text);
    cursor: pointer;
    z-index: 3;
    transition: background 0.18s ease, color 0.18s ease, opacity 0.18s ease;
  }
  .product-page .gallery .mhf-thumbs-nav.is-scrollable .mhf-thumbs-arrow {
    display: flex;
  }
  .product-page .gallery .mhf-thumbs-arrow--prev { left: -8px; }
  .product-page .gallery .mhf-thumbs-arrow--next { right: -8px; }
  .product-page .gallery .mhf-thumbs-arrow svg {
    width: 20px;
    height: 20px;
    fill: none;
    stroke: currentColor;
    stroke-width: 2.4;
    stroke-linecap: round;
    stroke-linejoin: round;
  }
  .product-page .gallery .mhf-thumbs-arrow:hover:not(:disabled) {
    background: var(--accent);
    color: #fff;
    border-color: var(--accent);
  }
  .product-page .gallery .mhf-thumbs-arrow:focus-visible {
    outline: 2px solid var(--accent);
    outline-offset: 2px;
  }
  .product-page .gallery .mhf-thumbs-arrow:disabled {
    opacity: 0;
    pointer-events: none;
  }
  /* li: не сжимать и не переносить — flex:0 0 auto держит 88×88 (размеры фиксируются
     неслойным !important-блоком ниже, стр. ~2708). scroll-snap-align:start — превью
     «прилипает» к началу при листании. */
  .product-page .gallery .flex-control-thumbs li {
    flex: 0 0 auto;
    width: 88px;
    height: 88px;
    margin: 0;
    list-style: none;
    scroll-snap-align: start;
  }
  /* Миниатюра-квадрат: фон, radius, border, contain. width:100% перебивает
     инлайн-width flexslider на <img>. */
  .product-page .gallery .flex-control-thumbs li img {
    width: 100%;
    height: 100%;
    object-fit: contain;
    padding: 8px;
    box-sizing: border-box;
    background: var(--bg-soft);
    border-radius: 18px;
    border: 2px solid transparent;
    cursor: pointer;
    opacity: 1;
    transition: border-color 0.18s ease;
  }
  .product-page .gallery .flex-control-thumbs li img:hover,
  .product-page .gallery .flex-control-thumbs li img.flex-active {
    border-color: var(--accent);
    opacity: 1;
  }

  /* ── PRODUCT SIDE (правая колонка, эталон .product-side: flex column gap 40) ── */
  .product-page .product-side {
    min-width: 0;
    display: flex;
    flex-direction: column;
    gap: 40px;
    margin: 0;
    padding: 0;
  }

  /* Короткий оффер (эталон .product-short-desc 16/500/1.5). */
  .product-page .product-short-desc {
    font-weight: 500;
    font-size: 16px;
    line-height: 1.5;
    letter-spacing: -1px;
    color: var(--text);
  }
  .product-page .product-short-desc p { margin: 0 0 8px; }
  .product-page .product-short-desc p:last-child { margin-bottom: 0; }

  /* ── Цена (эталон .product-price-block/.product-price*) ───────────────────
     Внутри .product-price-block — родной вывод Woo `.price` (span/ins/del).
     Стилизуем Woo-цену под эталонную .product-price (36/700), старую (del) —
     под .product-price-old (22/muted/line-through). */
  .product-page .product-price-block {
    display: flex;
    align-items: baseline;
    flex-wrap: wrap;
    gap: 8px;
  }
  .product-page .product-price-block .price {
    display: flex;
    align-items: baseline;
    flex-wrap: wrap;
    gap: 8px;
    margin: 0;
    font-weight: 700;
    font-size: 36px;
    line-height: 1.22;
    letter-spacing: -1px;
    color: var(--text);
  }
  .product-page .product-price-block .price ins {
    text-decoration: none;
    background: transparent;
    color: var(--text);
    font-weight: 700;
  }
  /* Старая цена (del) — эталон .product-price-old: 22/600/muted/зачёркнута. */
  .product-page .product-price-block .price del {
    font-size: 22px;
    font-weight: 600;
    color: var(--muted);
    text-decoration: line-through;
    letter-spacing: -1px;
    opacity: 1;
  }
  .product-page .product-price-block .price del .woocommerce-Price-amount { color: var(--muted); }
  /* Суффикс «/ шт» (эталон .product-price-unit) — если Woo отдаёт .woocommerce-price-suffix. */
  .product-page .product-price-block .price .woocommerce-price-suffix {
    font-size: 18px;
    font-weight: 600;
    color: var(--muted);
    letter-spacing: -0.5px;
  }
  /* ── Порядок цен при скидке (эталон стр. 725-729: акционная → «/ шт» → старая) ──
     Woo рендерит sale-цену как <del>(regular)→<span.sr-text>→<ins>(sale): старая цена
     идёт ПЕРВОЙ, обратно эталону (см. wc_format_sale_price). .price уже display:flex →
     правим ВИЗУАЛЬНЫЙ порядок через `order`, не трогая DOM и a11y-текст. Товар без
     скидки — одиночный .woocommerce-Price-amount без ins/del, order по умолчанию 0,
     не задет. sr-text (position:absolute/clipped) переупорядочивание не ломает. */
  .product-page .product-price-block .price ins { order: 1; }
  .product-page .product-price-block .price .woocommerce-price-suffix { order: 2; }
  .product-page .product-price-block .price del { order: 3; }

  /* ── Наличие (эталон .product-instock, зелёный чип + точка) ───────────────── */
  /* .product-price-block, .product-instock теперь ВНУТРИ .product-buy (flex column,
     gap 16 — эталон стр. 724-730). Эталон .product-instock margin-top 4px = зазор
     цена→наличие. С flex-gap 16 суммарный зазор price→instock ~20px, как в эталоне. */
  .product-page .product-instock {
    display: flex;
    align-items: center;
    gap: 8px;
    font-size: 14px;
    font-weight: 600;
    color: #1B9E5A;
    letter-spacing: -0.5px;
    margin-top: 4px;
  }
  .product-page .product-instock .dot {
    width: 8px;
    height: 8px;
    border-radius: 50%;
    background: #1B9E5A;
    flex-shrink: 0;
  }
  /* Нет в наличии — приглушаем в muted (иначе зелёный вводит в заблуждение). */
  .product-page .product-outofstock { color: var(--muted); }
  .product-page .product-outofstock .dot { background: var(--muted); }

  /* ── ПОКУПКА (эталон .product-buy: flex column, gap 16) ───────────────────
     Разметка шага 2: .product-buy содержит Woo form.cart (qty + add-to-cart) и
     ссылку .mhf-single-oneclick. Эталон кладёт qty и кнопку в одну строку
     (.buy-row: quantity + btn-primary). Woo form.cart несёт .quantity(input.qty)
     и .single_add_to_cart_button — раскладываем их flex-строкой под тот же вид. */
  .product-page .product-buy {
    display: flex;
    flex-direction: column;
    gap: 16px;
  }

  /* Woo form.cart = эталонная .buy-row: qty-степпер слева (flex-shrink 0), кнопка
     «Добавить в корзину» тянется (flex 1). Горизонтальная строка на десктопе. */
  .product-page .product-buy form.cart {
    display: flex;
    align-items: stretch;
    gap: 12px;
    margin: 0;
  }

  /* Кастомный степпер: нативный .quantity Woo (label.screen-reader-text + input.qty)
     JS дополняет .quantity-label + .quantity-input(−/value/+), а сам input.qty
     визуально скрывает (остаётся в DOM и синхронизируется). Эталон .quantity стр.
     231-243. Woo-класс .quantity общий, но скоуп .product-page .product-buy — только
     карточка товара (корзина/loop не затронуты). */
  .product-page .product-buy .quantity {
    flex-shrink: 0;
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 16px;
    border: 1px solid var(--bg-soft);
    border-radius: 18px;
    padding: 7px 7px 7px 16px;
  }
  .product-page .product-buy .quantity-label {
    font-weight: 500;
    font-size: 16px;
    line-height: 1.5;
    letter-spacing: -1px;
    color: var(--muted);
    white-space: nowrap;
  }
  .product-page .product-buy .quantity-input {
    display: flex;
    align-items: center;
    gap: 8px;
    height: 48px;
  }
  .product-page .product-buy .qty-btn {
    width: 48px;
    height: 48px;
    border: none;
    background: var(--bg-soft);
    border-radius: 14px;
    color: var(--text);
    font-size: 22px;
    font-weight: 600;
    line-height: 1;
    cursor: pointer;
    display: flex;
    align-items: center;
    justify-content: center;
    transition: background 0.18s ease, color 0.18s ease;
  }
  .product-page .product-buy .qty-btn:hover { background: var(--accent); color: #fff; }
  .product-page .product-buy .qty-value {
    min-width: 40px;
    text-align: center;
    font-size: 18px;
    font-weight: 700;
    color: var(--text);
    letter-spacing: -1px;
  }
  /* Нативный input.qty скрыт визуально, но остаётся в DOM (доступен для отправки
     формы и AJAX Woo). НЕ display:none — иначе часть браузеров не шлёт значение. */
  .product-page .product-buy .quantity input.qty {
    position: absolute;
    width: 1px;
    height: 1px;
    padding: 0;
    margin: -1px;
    overflow: hidden;
    clip: rect(0 0 0 0);
    white-space: nowrap;
    border: 0;
  }

  /* Кнопка «Добавить в корзину» → эталон .btn-md.btn-primary (accent → hover
     btn-dark), тянется на всю оставшуюся ширину строки. */
  .product-page .product-buy .single_add_to_cart_button {
    flex: 1 1 auto;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: 12px;
    padding: 20px 24px;
    background: var(--accent);
    color: #fff;
    border: none;
    border-radius: 18px;
    font-family: 'Inter', sans-serif;
    font-weight: 600;
    font-size: 18px;
    line-height: 1.3;
    letter-spacing: -1px;
    cursor: pointer;
    white-space: nowrap;
    transition: background-color 0.3s ease-in-out;
  }
  .product-page .product-buy .single_add_to_cart_button:hover { background: var(--btn-dark); }
  .product-page .product-buy .single_add_to_cart_button svg {
    width: 22px;
    height: 22px;
    stroke: #fff;
    fill: none;
    stroke-width: 2;
    stroke-linecap: round;
    stroke-linejoin: round;
    flex-shrink: 0;
  }

  /* Secondary CTA «Заказать в 1 клик» — отдельной строкой ПОД buy-row (эталон
     .btn-oneclick): мягкая заливка --accent-2 (#EBEBFF) на accent-тексте, hover →
     инверсия в accent. ТОЛЬКО вёрстка, без обработчика (t-066). */
  .product-page .product-buy .mhf-single-oneclick {
    display: block;
    width: 100%;
    box-sizing: border-box;
    margin-top: 12px;
    padding: 20px 24px;
    background: var(--accent-2);
    color: var(--accent);
    border: 1px solid var(--accent-2);
    border-radius: 18px;
    font-family: 'Inter', sans-serif;
    font-size: 18px;
    font-weight: 600;
    letter-spacing: -1px;
    line-height: 1.3;
    text-align: center;
    cursor: pointer;
    transition: background-color 0.18s ease, color 0.18s ease, border-color 0.18s ease;
  }
  .product-page .product-buy .mhf-single-oneclick:hover {
    background: var(--accent);
    color: #fff;
    border-color: var(--accent);
  }

  /* ── Подсказка про монтаж (эталон .install-hint, стр. 296-306) ────────────
     Последний элемент .product-buy: info-чип оффера установки под ключ.
     Токены --alert / --accent из :root (совпадают с эталоном). */
  .product-page .install-hint {
    display: flex;
    align-items: flex-start;
    gap: 12px;
    background: var(--alert);
    border-radius: 18px;
    padding: 18px 20px;
  }
  .product-page .install-hint svg {
    width: 22px;
    height: 22px;
    stroke: var(--accent);
    fill: none;
    stroke-width: 2;
    stroke-linecap: round;
    stroke-linejoin: round;
    flex-shrink: 0;
    margin-top: 1px;
  }
  .product-page .install-hint-text {
    font-size: 14px;
    font-weight: 500;
    color: var(--text);
    line-height: 1.43;
    letter-spacing: -0.5px;
  }
  .product-page .install-hint-text strong { font-weight: 700; }

  /* ── Краткая таблица характеристик в правой колонке (эталон .attributes-table,
     стр. 308-340). Первые 4 атрибута товара + ссылка «Все характеристики ↓» на
     #specs. Скоуп .product-page — только карточка. Токены --rule/--accent :root. */
  .product-page .attributes-table { width: 100%; border-collapse: collapse; margin-top: 28px; }
  /* Бордер строк вынесен в НЕслойный override [14] (на td) — Neve красит td
     базовым неслойным `td{border-bottom:2px…}`, который слоем не перебить. */
  .product-page .attr-label {
    width: 200px;
    padding: 10px 0;
    vertical-align: top;
    font-size: 16px;
    font-weight: 700;
    line-height: 1.5;
    letter-spacing: -1px;
    color: var(--text);
  }
  .product-page .attr-value {
    padding: 10px 0;
    font-size: 16px;
    font-weight: 500;
    line-height: 1.5;
    letter-spacing: -1px;
    color: var(--text);
  }
  .product-page .attrs-more {
    display: inline-block;
    margin-top: 14px;
    font-size: 14px;
    font-weight: 600;
    letter-spacing: -0.5px;
    color: var(--accent);
    transition: opacity 0.18s ease;
  }
  .product-page .attrs-more:hover { opacity: 0.7; }

  /* ── Артикул · Бренд · Наличие (эталон .product-sku 14/muted, ОДНА строка) ── */
  /* Прямой потомок .container под H1, во всю ширину; сегменты «·» в одну строку
     (эталон стр. 131-138). Кастомный вывод в content-single-product.php —
     без Woo .sku_wrapper/.posted_in/.tagged_as (те раскладывались в 3 блока). */
  .product-page .product-sku {
    font-size: 14px;
    font-weight: 500;
    color: var(--muted);
    letter-spacing: -0.5px;
    margin-bottom: 40px;
  }
  .product-page .product-sku strong { color: var(--text); font-weight: 600; }

  /* ── СЕКЦИИ полной ширины (эталон .section-block/.section-title) ──────────── */
  .product-page .section-block { margin-top: 64px; }
  .product-page .section-title {
    font-size: 32px;
    font-weight: 700;
    line-height: 1.22;
    letter-spacing: -1px;
    color: var(--text);
    margin: 0 0 24px;
  }

  /* Описание (эталон .description-text: колонка ~800px, буллеты с галочкой). */
  .product-page .description-text { max-width: 800px; }
  .product-page .description-text > *:first-child { margin-top: 0; }
  .product-page .description-text > *:last-child { margin-bottom: 0; }
  .product-page .description-text p {
    font-size: 16px;
    font-weight: 500;
    line-height: 1.6;
    letter-spacing: -0.5px;
    color: var(--text);
    margin: 0 0 16px;
  }
  .product-page .description-text ul {
    display: flex;
    flex-direction: column;
    gap: 10px;
    margin: 8px 0 16px;
    padding: 0;
    list-style: none;
  }
  .product-page .description-text ol { margin: 8px 0 16px; padding-left: 22px; }
  .product-page .description-text li {
    position: relative;
    padding-left: 28px;
    font-size: 16px;
    font-weight: 500;
    line-height: 1.5;
    letter-spacing: -0.5px;
    color: var(--text);
  }
  .product-page .description-text ul li::before {
    content: "";
    position: absolute;
    left: 0;
    top: 3px;
    width: 18px;
    height: 18px;
    border-radius: 50%;
    background: var(--accent-2);
  }
  .product-page .description-text ul li::after {
    content: "";
    position: absolute;
    left: 5px;
    top: 8px;
    width: 8px;
    height: 5px;
    border-left: 2px solid var(--accent);
    border-bottom: 2px solid var(--accent);
    transform: rotate(-45deg);
  }
  .product-page .description-text a { color: var(--accent); text-decoration: underline; }

  /* ── ХАРАКТЕРИСТИКИ (эталон .spec-grid/.spec-row/.spec-name/.spec-val) ─────
     Разметка шага 2 — семантичный <dl class="spec-grid"> с парами
     <div class="spec-row"><dt.spec-name><dd.spec-val>. Эталон: 2 колонки пар,
     column-gap 64, строка — flex space-between с нижним бордером. */
  .product-page .spec-grid {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 0 64px;
    max-width: 1100px;
    margin: 0;
  }
  .product-page .spec-row {
    display: flex;
    justify-content: space-between;
    gap: 16px;
    padding: 14px 0;
    border-bottom: 1px solid var(--rule);
  }
  .product-page .spec-name {
    margin: 0;
    font-size: 15px;
    font-weight: 500;
    color: var(--muted);
    letter-spacing: -0.5px;
  }
  .product-page .spec-val {
    margin: 0;
    font-size: 15px;
    font-weight: 600;
    color: var(--text);
    letter-spacing: -0.5px;
    text-align: right;
  }

  /* ── INFO-ALERT «Заказываете с монтажом?» (эталон .info-alert, стр. 412-424) ─
     Секция-оффер ПОСЛЕ характеристик. Скоуп СТРОГО .product-page — глобальный
     .info-alert (theme.css ~1246, mhf/infobox) имеет ДРУГУЮ геометрию (gap 14,
     radius 18, padding 20/24, иконка через .info-alert-icon); здесь эталон PDP
     (gap 16, radius 24, padding 28/32, svg прямой потомок, h3+p в body). Скоуп
     не даёт нашим правилам протечь на infobox и наоборот. */
  .product-page .info-alert {
    display: flex;
    align-items: flex-start;
    gap: 16px;
    background: var(--alert);
    border-radius: 24px;
    padding: 28px 32px;
    max-width: 900px;
  }
  .product-page .info-alert svg {
    width: 28px;
    height: 28px;
    stroke: var(--accent);
    fill: none;
    stroke-width: 2;
    stroke-linecap: round;
    stroke-linejoin: round;
    flex-shrink: 0;
    margin-top: 2px;
  }
  .product-page .info-alert-body h3 {
    font-size: 18px;
    font-weight: 700;
    letter-spacing: -1px;
    color: var(--text);
    margin-bottom: 6px;
  }
  .product-page .info-alert-body p {
    font-size: 15px;
    font-weight: 500;
    color: var(--text);
    line-height: 1.5;
    letter-spacing: -0.5px;
  }

  /* ── ФАЙЛЫ И ДОКУМЕНТЫ (секция .files-list; эталон page-product.html
     стр. 426–465). Статические заглушки (2 .file-item). Классы file-item/
     files-list/file-download уникальны для карточки — коллизий в теме нет
     (grep t-058), но всё равно скоупим под .product-page. ────────────────── */
  .product-page .files-list {
    display: flex;
    flex-direction: column;
    gap: 12px;
    max-width: 620px;
  }
  .product-page .file-item {
    display: flex;
    align-items: center;
    gap: 16px;
    padding: 20px 24px;
    background: var(--bg-soft);
    border-radius: 18px;
    transition: box-shadow 0.18s ease, background 0.18s ease;
  }
  .product-page .file-item:hover { box-shadow: 0 4px 20px rgba(93,96,249,.12); }
  .product-page .file-icon {
    width: 48px;
    height: 48px;
    border-radius: 14px;
    background: #fff;
    display: flex;
    align-items: center;
    justify-content: center;
    flex-shrink: 0;
  }
  .product-page .file-icon svg {
    width: 24px;
    height: 24px;
    stroke: var(--accent);
    fill: none;
    stroke-width: 2;
    stroke-linecap: round;
    stroke-linejoin: round;
  }
  .product-page .file-info { flex: 1; min-width: 0; }
  .product-page .file-name {
    font-size: 16px;
    font-weight: 700;
    color: var(--text);
    letter-spacing: -1px;
    line-height: 1.3;
  }
  .product-page .file-meta {
    font-size: 13px;
    font-weight: 500;
    color: var(--muted);
    letter-spacing: -0.3px;
    margin-top: 2px;
  }
  .product-page .file-download {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 44px;
    height: 44px;
    border-radius: 12px;
    background: #fff;
    flex-shrink: 0;
    transition: background 0.18s ease;
  }
  .product-page .file-download svg {
    width: 20px;
    height: 20px;
    stroke: var(--btn-dark);
    fill: none;
    stroke-width: 2;
    stroke-linecap: round;
    stroke-linejoin: round;
    transition: stroke 0.18s ease;
  }
  .product-page .file-download:hover { background: var(--accent); }
  .product-page .file-download:hover svg { stroke: #fff; }

  /* ── ОТЗЫВЫ (нативные Woo reviews под эталон) ──────────────────────────────
     Механизм: comments_template() → наш override woocommerce/single-product-
     reviews.php. DOM — РОДНОЙ Woo (#reviews / #comments / #review_form /
     .comment-form / .comment-form-rating / p.stars / #respond .submit). Здесь
     накладываем на него вид эталона (page-product.html стр. 467-534, 864-910):
     карточка .review-form-card, пустое состояние .reviews-empty, инпуты radius 12,
     кнопка accent, звёзды-рейтинг.

     СКОУП строго .product-page: Woo-классы (#respond, .comment-form, p.stars)
     общие и встречаются на любых comment-формах сайта (посты/страницы), поэтому
     каждый селектор идёт от .product-page — на другие comment-формы НЕ протекает. */

  /* Служебный заголовок Woo внутри секции («N отзывов») — секцию уже венчает
     наш <h2 class="section-title">Отзывы</h2>, поэтому внутренний делаем скромным
     подзаголовком (или прячем, если пусто — при пустом состоянии его нет вовсе). */
  .product-page .mhf-reviews-title {
    font-size: 18px;
    font-weight: 700;
    letter-spacing: -0.5px;
    color: var(--text);
    margin: 0 0 20px;
  }

  /* Пустое состояние (эталон .reviews-empty, стр. 468-480) */
  .product-page .reviews-empty {
    display: flex;
    flex-direction: column;
    align-items: flex-start;
    gap: 8px;
    padding: 32px;
    background: var(--bg-soft);
    border-radius: 24px;
    margin-bottom: 32px;
    max-width: 900px;
  }
  .product-page .reviews-empty-title {
    font-size: 18px;
    font-weight: 700;
    color: var(--text);
    letter-spacing: -1px;
  }
  .product-page .reviews-empty-sub {
    font-size: 15px;
    font-weight: 500;
    color: var(--muted);
    letter-spacing: -0.5px;
  }

  /* Список существующих отзывов (Woo ol.commentlist) — базовая читаемость. */
  .product-page #reviews .commentlist {
    list-style: none;
    margin: 0 0 32px;
    padding: 0;
    max-width: 900px;
  }
  .product-page #reviews .commentlist li.review {
    padding: 24px;
    background: var(--bg-soft);
    border-radius: 18px;
    margin-bottom: 16px;
  }
  .product-page #reviews .commentlist .comment-text { margin: 0; }
  .product-page #reviews .commentlist .meta {
    font-size: 14px;
    font-weight: 600;
    color: var(--text);
    margin-bottom: 6px;
  }
  .product-page #reviews .commentlist .meta .verified {
    color: var(--accent);
    font-weight: 600;
  }
  .product-page #reviews .commentlist .description {
    font-size: 15px;
    font-weight: 500;
    color: var(--muted);
    line-height: 1.55;
    letter-spacing: -0.3px;
  }
  /* Звёзды прочитанного отзыва (Woo .star-rating) — акцентим золотом эталона. */
  .product-page #reviews .commentlist .star-rating span::before,
  .product-page #reviews .commentlist p.stars a.active::before,
  .product-page #reviews .commentlist p.stars a:hover::before { color: #FFB020; }

  /* ── Форма отзыва: реальный Woo #review_form → вид эталона .review-form-card ──
     (эталон стр. 482-534 + 874-908). */
  .product-page #review_form_wrapper #review_form.review-form-card {
    background: var(--bg-soft);
    border-radius: 24px;
    padding: 32px;
    max-width: 720px;
  }
  .product-page #review_form #respond { margin: 0; }
  /* Заголовок формы («Оставьте первый отзыв» / «Добавить отзыв»). */
  .product-page #review_form .mhf-review-form-title,
  .product-page #review_form .comment-reply-title {
    display: block;
    font-size: 20px;
    font-weight: 700;
    letter-spacing: -0.5px;
    color: var(--text);
    margin: 0 0 20px;
  }

  /* Поля имя/email в ряд (эталон .review-form-row: 2 колонки). */
  .product-page #review_form .comment-form {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 16px;
  }
  /* Поля во всю ширину формы (рейтинг, textarea, submit, политика). */
  .product-page #review_form .comment-form-author,
  .product-page #review_form .comment-form-email { grid-column: auto; margin: 0; }
  .product-page #review_form .comment-form-rating,
  .product-page #review_form .comment-form-comment,
  .product-page #review_form .form-submit,
  .product-page #review_form .review-form-policy,
  .product-page #review_form .must-log-in,
  .product-page #review_form .comment-notes { grid-column: 1 / -1; margin: 0; }

  /* Метки полей (эталон .review-form-label). */
  .product-page #review_form .comment-form label,
  .product-page #review_form .comment-form-rating label {
    display: block;
    font-size: 14px;
    font-weight: 600;
    color: var(--text);
    margin-bottom: 6px;
    letter-spacing: -0.5px;
  }
  .product-page #review_form .required { color: #E0504E; }

  /* Инпуты/textarea/select (эталон .review-form-input: border 1.6px, radius 12,
     min-height 48). Таргетим фактические Woo-поля #author/#email/#comment/#rating. */
  .product-page #review_form input#author,
  .product-page #review_form input#email,
  .product-page #review_form select#rating,
  .product-page #review_form textarea#comment {
    width: 100%;
    min-height: 48px;
    padding: 12px 16px;
    background: var(--bg);
    border: 1.6px solid var(--rule);
    border-radius: 12px;
    font-family: 'Inter', sans-serif;
    font-size: 15px;
    color: var(--text);
    outline: none;
    transition: border-color 0.18s ease;
    box-sizing: border-box;
  }
  .product-page #review_form input#author:focus,
  .product-page #review_form input#email:focus,
  .product-page #review_form select#rating:focus,
  .product-page #review_form textarea#comment:focus { border-color: var(--accent); }
  .product-page #review_form textarea#comment {
    min-height: 120px;
    resize: vertical;
    line-height: 1.5;
  }

  /* Звёзды-оценка формы. Woo рисует p.stars (a-звёзды) поверх скрытого select#rating
     через свой JS. Подводим p.stars a под золотые звёзды эталона (32px). */
  .product-page #review_form .comment-form-rating select#rating {
    /* select — фолбэк, если Woo-JS не подменил его на p.stars (без JS форма
       остаётся рабочей: нативный <select> с оценками). */
    min-height: 48px;
  }
  .product-page #review_form p.stars {
    display: inline-flex;
    gap: 4px;
    margin: 0 0 4px;
    line-height: 1;
  }
  .product-page #review_form p.stars a {
    font-size: 0;
    position: relative;
    width: 32px;
    height: 32px;
  }
  .product-page #review_form p.stars a::before {
    font-size: 30px;
    line-height: 1;
    color: var(--muted);
    opacity: 0.4;
    transition: color 0.15s ease, opacity 0.15s ease;
  }
  .product-page #review_form p.stars:hover a::before,
  .product-page #review_form p.stars a.active::before,
  .product-page #review_form p.stars a.active ~ a::before { color: var(--muted); opacity: 0.4; }
  .product-page #review_form p.stars a:hover::before,
  .product-page #review_form p.stars a:hover ~ a::before { opacity: 0.4; }
  /* Подсветка выбранных/наведённых звёзд слева-направо (Woo помечает .active). */
  .product-page #review_form p.stars a.active::before,
  .product-page #review_form p.stars a.active ~ a.active::before { color: #FFB020; opacity: 1; }
  .product-page #review_form p.stars:hover a::before { color: #FFB020; opacity: 1; }
  .product-page #review_form p.stars:hover a:hover ~ a::before { color: var(--muted); opacity: 0.4; }

  /* Кнопка «Отправить отзыв» (эталон .review-form-submit: accent, radius 18). */
  .product-page #review_form .form-submit input#submit,
  .product-page #review_form input.submit {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    min-height: 48px;
    padding: 14px 28px;
    background: var(--accent);
    color: #fff;
    border: none;
    border-radius: 18px;
    font-family: 'Inter', sans-serif;
    font-size: 16px;
    font-weight: 600;
    letter-spacing: -0.5px;
    cursor: pointer;
    transition: background 0.18s ease;
    margin-top: 8px;
  }
  .product-page #review_form .form-submit input#submit:hover,
  .product-page #review_form input.submit:hover { background: var(--btn-dark); }

  /* Политика/примечания (эталон .review-form-policy). */
  .product-page #review_form .review-form-policy,
  .product-page #review_form .comment-notes {
    font-size: 12px;
    font-weight: 500;
    color: var(--muted);
    margin-top: 12px;
    line-height: 1.5;
    letter-spacing: -0.3px;
  }
  .product-page #review_form .review-form-policy a,
  .product-page #review_form .must-log-in a { color: var(--muted); text-decoration: underline; }

  /* Плашка «только покупатели» / «войдите» — приглушённая карточка. */
  .product-page .woocommerce-verification-required {
    padding: 20px 24px;
    background: var(--bg-soft);
    border-radius: 18px;
    font-size: 15px;
    font-weight: 500;
    color: var(--muted);
    max-width: 720px;
  }

  /* ── ПОХОЖИЕ ТОВАРЫ (related.php: .mhf-single-related, live через хук
     woocommerce_output_related_products) ────────────────────────────────────
     Детальную переверстку блока даёт ШАГ 5; здесь СОХРАНЯЕМ базовый скоуп секции
     (отступ сверху + заголовок как .section-title), чтобы блок не остался без
     стилей на живой карточке. Карточки — каталожные .product-card в .products-grid
     (сетка из основного CSS каталога, не дублируем). Защитный нейтрализатор
     clearfix Woo (`.woocommerce .products ul::before/after`) — на случай, если
     хук вернёт класс `products` на секцию (дефинитивный фикс — снятие класса в
     related.php); клекфикс родом из woocommerce-general (НЕ снятого layout),
     поэтому оставляем как belt-and-suspenders. */
  .product-page .mhf-single-related { margin-top: 64px; }
  .product-page .mhf-single-related-title {
    font-size: 32px;
    font-weight: 700;
    line-height: 1.22;
    letter-spacing: -1px;
    color: var(--text);
    margin: 0 0 24px;
  }
  .product-page .mhf-single-related-grid { margin-top: 0; list-style: none; padding: 0; }
  .product-page .mhf-single-related ul.mhf-single-related-grid::before,
  .product-page .mhf-single-related ul.mhf-single-related-grid::after { content: none !important; display: none !important; }

  /* ── A11y: видимый фокус клавиатуры на интерактиве скоупа карточки ────────── */
  .product-page .single_add_to_cart_button:focus-visible,
  .product-page .product-buy .mhf-single-oneclick:focus-visible,
  .product-page .product-buy .qty-btn:focus-visible,
  .product-page .quantity input.qty:focus-visible,
  .product-page .mhf-single-related .product-card a:focus-visible,
  .product-page .file-download:focus-visible,
  .product-page #review_form .form-submit input#submit:focus-visible,
  .product-page #review_form input.submit:focus-visible,
  .product-page #review_form p.stars a:focus-visible,
  .product-page .breadcrumbs a:focus-visible {
    outline: 2px solid var(--accent);
    outline-offset: 2px;
  }

  /* ── RESPONSIVE (эталонные брейки 1240 / 1024 / 768) ─────────────────────── */
  @media (max-width: 1240px) {
    .product-page .product-grid { grid-template-columns: 480px 1fr; gap: 48px; }
    /* Колонка галереи 480px → квадрат 480; синхроним якорь бейджа .onsale (ПРАВКА B). */
    .product-page .gallery .woocommerce-product-gallery { --gallery-square: 480px; }
    .product-page .product_title { font-size: 32px; }
    .product-page .section-title { font-size: 28px; }
  }
  @media (max-width: 1024px) {
    .product-page .product-grid { grid-template-columns: 340px 1fr; gap: 24px; }
    /* Колонка галереи 340px → квадрат 340; синхроним якорь бейджа .onsale (ПРАВКА B). */
    .product-page .gallery .woocommerce-product-gallery { --gallery-square: 340px; }
  }
  @media (max-width: 768px) {
    .product-page { padding: 24px 0 48px; }
    .product-page .product_title { font-size: 26px; }
    .product-page .product-grid { grid-template-columns: 1fr; gap: 32px; }
    /* Галерея на одну колонку: центрируем бокс, ограничиваем ширину (эталон 520).
       Квадрат = 520 (при вьюпорте шире 520); синхроним якорь .onsale (ПРАВКА B).
       На вьюпортах уже 520 квадрат сам сжимается — доводим переменную ниже в @media 568. */
    .product-page .gallery .woocommerce-product-gallery { max-width: 520px; margin: 0 auto; --gallery-square: 520px; }
    .product-page .gallery .flex-control-thumbs { max-width: 520px; }
    .product-page .gallery .mhf-thumbs-nav { max-width: 520px; }
    /* Мобильный: листаем нативным тач-свайпом, стрелки прячем (перекрывали бы
       узкую полосу и на тач-экране не нужны). */
    .product-page .gallery .mhf-thumbs-nav.is-scrollable .mhf-thumbs-arrow { display: none; }
    /* buy-row (Woo form.cart) на мобильном — в столбик: степпер над кнопкой (эталон
       стр. 582). Наличие держим эталонным margin-top 4px (базовое значение годится). */
    .product-page .product-buy form.cart { flex-direction: column; align-items: stretch; }
    .product-page .product-buy form.cart .quantity { justify-content: space-between; }
    .product-page .product-buy .single_add_to_cart_button { width: 100%; }
    .product-page .spec-grid { grid-template-columns: 1fr; gap: 0; }
    .product-page .section-block { margin-top: 48px; }
    .product-page .section-title { font-size: 24px; }
    .product-page .mhf-single-related { margin-top: 48px; }
    .product-page .mhf-single-related-title { font-size: 24px; margin-bottom: 16px; }
    /* Форма отзыва в одну колонку на мобильном (имя/email друг под другом). */
    .product-page #review_form .comment-form { grid-template-columns: 1fr; }
    .product-page #review_form_wrapper #review_form.review-form-card { padding: 24px; }
    .product-page .reviews-empty { padding: 24px; }
  }
  @media (max-width: 568px) {
    .product-page .product_title { font-size: 22px; }
    .product-page .product-buy .single_add_to_cart_button { min-height: 56px; }
    /* Строки характеристик на мобильном — 14px (эталон стр. 596-597). Ширину
       label сужаем до 120 (эталон), чтобы длинные значения не жались. */
    .product-page .attributes-table .attr-label { width: 120px; font-size: 14px; }
    .product-page .attributes-table .attr-value { font-size: 14px; }
    /* Миниатюры на мобильном — 72px (эталон .gallery-thumb моб). Сам размер li
       на мобильном переопределяется НЕслойным !important-блоком [6-моб] ниже
       (после @layer theme): базовый [6] закрепил li 88px !important, а !important
       в @layer НЕ перебивает !important вне слоя — потому моб-72 вынесен из слоя. */
    .product-page .gallery .flex-control-thumbs li img { border-radius: 16px; }
  }

} /* /@layer theme — карточка товара */

/* ─────────────────────────────────────────────────────────────────────────────
   PDP: обнуление лишних отступов, приходящих от НЕслойных вендорных/общих правил.
   Наши правила в @layer theme проигрывают по каскаду ЛЮБОМУ неслойному правилу
   (порядок слоёв важнее специфичности), поэтому обнуляем ЗДЕСЬ — вне @layer,
   со скоупом .product-page (есть только на single-product; /shop и др. не задеты).
   ────────────────────────────────────────────────────────────────────────────*/

/* [1] spec-grid margin. Neve style-main-new.min.css содержит НЕслойное
   `dl{margin:20px 0}` → на <dl class="spec-grid"> приходит 20px сверху/снизу
   (эталон 0). Слойное `.product-page .spec-grid{margin:0}` (@layer theme) это
   правило НЕ бьёт (неслойное > слойного). Перебиваем неслойно: селектор
   `.product-page dl.spec-grid` спец. (0,2,1) > Neve `dl` (0,0,1) — без !important. */
.product-page dl.spec-grid { margin: 0; }

/* [2] Хлебные крошки padding. НЕслойное общее `.breadcrumbs{padding:28px 0 0}`
   (стр.1284, общее для каталога/архива — НЕ трогаем) даёт лишние 28px сверху на
   карточке (эталон 0). Слойное `.product-page .breadcrumbs` (@layer theme) этот
   padding не обнуляет и слоем его не перебивает. Обнуляем неслойно, только на
   карточке: `.product-page .breadcrumbs` спец. (0,2,0) > `.breadcrumbs` (0,1,0). */
.product-page .breadcrumbs { padding: 0; }

/* [3] t-053 Размер цены. НЕслойное вендорное Woo (woocommerce.css):
   `.woocommerce:where(...) div.product p.price{font-size:1.25em}` (≈22px от
   bodyfontsize ~18px) сидит на самом `p.price`; amount-узлы наследуют → цена 22px
   вместо эталонных 36px. Наше слойное `.product-price-block .price{font-size:36px}`
   (@layer theme) проигрывает слоем (слой < неслойного, независимо от спец.).
   Перебиваем НЕслойно, задавая 36/700 ПРЯМО на amount-узлах НОВОЙ цены (ins) и
   на amount при товаре без скидки (.price > amount). Прямое правило на узле бьёт
   унаследованный 1.25em. СТАРУЮ цену (del amount) НЕ трогаем — остаётся мелкой
   (22px, эталон .product-price-old). Скоуп .product-page — только карточка. */
.product-page .product-price-block .price ins .woocommerce-Price-amount,
.product-page .product-price-block .price > .woocommerce-Price-amount {
  font-size: 36px;
  font-weight: 700;
}

/* [4] t-054 Галерея — space-between по высоте. НЕслойное Neve
   (style-main-new.min.css) `.gallery{display:flex;flex-wrap:wrap;justify-content:
   space-between}` (общее для WP-галерей) ловит наш блок `.gallery`. Наш слойный
   `.product-page .gallery{flex-direction:column}` (@layer theme) задаёт колонку,
   но justify-content не переопределяет → приходит вендорный space-between, и по
   вертикальной main-оси миниатюры отрываются от фото к низу колонки (эталон:
   сразу под фото на gap 24). Слоем это правило не бьётся. Перебиваем неслойно:
   justify-content:flex-start. Высоту НЕ фиксируем; grid-родитель .product-grid уже
   `align-items:start` (стр.1536) — колонка не растягивается, доп. align-self не
   нужен. Скоуп .product-page — только карточка. */
.product-page .gallery { justify-content: flex-start; }

/* [5] t-063 H1 карточки. НЕслойное Neve (style-main-new) `h1{font-size:var(
   --h1fontsize);line-height:var(--h1lineheight)}` (спец. (0,0,1)) → на нашем
   <h1 class="product_title entry-title"> приходит 40px / line-height 1.33 (≥960px:
   --h1fontsize:40px). Наше слойное `.product-page h1.product_title{font-size:36px}`
   (@layer theme) проигрывает КАСКАДОМ (слой < неслойного, независимо от спец.) —
   потому probe прод показывал 40px, а не эталонные 36. Перебиваем НЕслойно:
   `.product-page h1.product_title` спец. (0,3,0) > Neve `h1` (0,0,1) — без !important.
   Эталон .product-h1: 36 / 700 / line-height 1.17 / margin-bottom 8 (letter-spacing
   -1px уже приходит и оставлен). Скоуп .product-page (=<main> single-product) —
   /shop/ и прочие H1 НЕ затронуты (там нет .product-page). */
.product-page h1.product_title {
  font-size: 36px;
  font-weight: 700;
  line-height: 1.17;
  margin-bottom: 8px;
}

/* [6] t-063 Миниатюры галереи карточки — эталон 88×88. Крайний случай css-scope:
   ВОЙНА СПЕЦИФИЧНОСТИ С ВЕНДОРОМ, потому scoped-!important на размеры (обоснование ниже).

   ВЕНДОР (woocommerce.css, минифицирован, НЕслойный), проверено curl'ом:
     `.woocommerce div.product div.images .flex-control-thumbs li{width:25%;float:left;margin:0;list-style:none}`
     Спец. = 4 класса (.woocommerce .images .flex-control-thumbs + .product)
           + 3 тега (div div li) = (0,4,3). Задаёт li width:25% → на проде li≈145px.
     img-правило вендора `...flex-control-thumbs li img{cursor:pointer;opacity:.5;margin:0}`
     — ШИРИНУ/ВЫСОТУ img НЕ задаёт; img держал интринсик-аспект → 135×78.

   РЕГРЕСС (t-063 live-probe после 969103c): деплоился override
     `.product-page.mhf-single .gallery .flex-control-thumbs li` = 4 класса + 1 тег = (0,4,1).
     Против вендора (0,4,3): классы равны (4=4), вендор берёт числом тегов (3>1) →
     ПРОИГРЫШ по width. Наш height:88 применялся (у вендора height нет), img height:100%
     сидит в @layer theme и стоит НИЖЕ неслойного вендора по каскаду слоёв → img остался 78.
     Итог на проде: li 145×88, img 135×78 — та самая несимметрия из probe.

   ФИКС: (а) селектор поднят до реальной DOM-цепочки карточки (проверено curl'ом p=9931):
     <main class="product-page mhf-single"> → <div id=product-9931 class="... product ...">
     → <div class="woocommerce-product-gallery ... images"> → ul.flex-control-thumbs > li
     (li/img инжектит flexslider в рантайме). Селектор
     `.product-page.mhf-single .product div.images .flex-control-thumbs li` =
     5 классов + 2 тега = (0,5,2) — уже строго > вендора (0,4,3) по классам (5>4).
   (б) НО чистый тайбрейк «на один класс» против НЕслойного вендора уже дал регресс
     из-за просчёта, а img-height к тому же тонет в @layer theme. Поэтому размеры
     (li width/height, img width/height) закреплены scoped-!important — это выводит
     их из тайбрейка И из слоёвого порядка, делая 88×88 гарантированным. Косметика
     (radius/border/fon/opacity) остаётся в @layer theme — тут НЕ дублируется.
   СКОУП: `.product-page.mhf-single` — только галерея single-product. Каталог, где
     карточки идут как .product-card в архиве (нет .product-page/.mhf-single/.flex-control-thumbs),
     этими правилами НЕ затрагивается. */
.product-page.mhf-single .product div.images .flex-control-thumbs li {
  width: 88px !important;
  height: 88px !important;
}
.product-page.mhf-single .product div.images .flex-control-thumbs li img {
  width: 100% !important;
  height: 100% !important;
}
/* [6-моб] Мобильные миниатюры — 72×72 (эталон .gallery-thumb моб). Вынесено ИЗ
   @layer theme: базовый [6] держит li 88px scoped-!important (неслойно); !important
   внутри @layer НЕ перебивает !important вне слоя, поэтому моб-переопределение
   тоже неслойное, тот же скоуп/спец. (0,5,2), идёт ПОЗЖЕ [6] → на ≤568 берёт 72. */
@media (max-width: 568px) {
  .product-page.mhf-single .product div.images .flex-control-thumbs li {
    width: 72px !important;
    height: 72px !important;
  }
}

/* [7] t-063 Кнопка «В корзину». НЕслойное Woo (woocommerce.css)
   `.woocommerce button.button.alt` (спец. (0,3,1)) задаёт кнопке дефолт:
   border-radius 3px, padding 13/15, font 16/700, без letter-spacing. Класс
   реальной кнопки — `.single_add_to_cart_button button alt`. Наше слойное
   `.product-page .product-buy .single_add_to_cart_button` (@layer theme) даёт
   эталонную геометрию, но проигрывает КАСКАДОМ неслойному вендору (слой <
   неслойного) → probe прод показывал 3px/16px/13-15/без spacing. Перебиваем
   НЕслойно: `.product-page.mhf-single .product-buy button.single_add_to_cart_button`
   спец. (0,4,1) > вендорного (0,3,1) — эталон .btn-primary/.btn-md без !important.
   Эталон: radius 18, 18px/600, padding 20/24, letter-spacing -1px, bg accent,
   hover #1B1B22 (var --btn-dark), текст #fff. Скоуп .product-page.mhf-single
   (=<main> single-product) — кнопки каталога/корзины/loop (.add_to_cart_button,
   .button на /shop, /cart) НЕ имеют этого предка и НЕ затронуты. */
.product-page.mhf-single .product-buy button.single_add_to_cart_button {
  border-radius: 18px;
  padding: 20px 24px;
  font-size: 18px;
  font-weight: 600;
  letter-spacing: -1px;
  background: var(--accent);
  color: #fff;
}
.product-page.mhf-single .product-buy button.single_add_to_cart_button:hover {
  background: var(--btn-dark);
}

/* [8] t-063 Info-alert «Заказываете с монтажом?» (крупный блок-оффер ПОСЛЕ
   характеристик, НЕ маленький .install-hint в колонке покупки). Наше слойное
   `.product-page .info-alert` (@layer theme, эталон radius 24 / padding 28-32 /
   gap 16) проигрывало КАСКАДОМ неслойному общему `.info-alert` (theme.css ~1246,
   mhf/infobox: gap 14 / radius 18 / padding 20-24, неслойное) — probe прод давал
   18/20-24/14. Перебиваем НЕслойно со скоупом: `.product-page .info-alert`
   спец. (0,2,0) > общего `.info-alert` (0,1,0) — эталон без !important. max-width
   900 уже приходит из @layer theme и здесь не дублируется. Маленький .install-hint
   (pad 18/20, radius 18, gap 12) — ДРУГОЙ селектор, НЕ затронут. Скоуп
   .product-page — глобальный infobox mhf/* на других страницах НЕ затронут. */
.product-page .info-alert {
  border-radius: 24px;
  padding: 28px 32px;
  gap: 16px;
}

/* [9] t-063 Характеристики — вес левого столбца .spec-name. Разметка —
   <dl class="spec-grid"> с парами <dt class="spec-name">/<dd class="spec-val">
   (content-single-product.php). НЕслойное Neve (style-main-new.min.css)
   `dl dt{font-weight:600}` (спец. (0,0,2)) бьёт по нашему <dt> → probe прод давал
   font-weight 600, эталон .spec-name = 500. Наше слойное
   `.product-page .spec-name{font-weight:500}` (@layer theme) проигрывает КАСКАДОМ
   (слой < неслойного, независимо от спец.). Перебиваем НЕслойно с тег-квалификатором:
   `.product-page dt.spec-name` спец. (0,2,1) > Neve `dl dt` (0,0,2) — без !important.
   font-size 15 / color #919191 (var --muted) уже приходят из @layer theme и совпадают
   с эталоном — тут НЕ дублируются. Скоуп .product-page — только карточка; /shop,
   /cart и прочие dt на сайте НЕ затронуты. */
.product-page dt.spec-name { font-weight: 500; }

/* [10] t-063 Заголовки секций .section-title (Описание/Характеристики/Файлы/
   Отзывы — все <h2 class="section-title"> в content-single-product.php).
   НЕслойное Neve (style-main-new.min.css) `h2{line-height:var(--h2lineheight)}`
   (спец. (0,0,1)); --h2lineheight резолвится в 1.33 → probe прод давал 42.56px
   (32×1.33), эталон .section-title line-height 1.22. Наше слойное
   `.product-page .section-title{line-height:1.22}` (@layer theme) проигрывает
   КАСКАДОМ неслойному h2 (слой < неслойного). Перебиваем НЕслойно с тег-квалификатором:
   `.product-page h2.section-title` спец. (0,2,1) > Neve `h2` (0,0,1) — без !important.
   Ловит ВСЕ 4 заголовка секций (один класс). font-size 32/700, letter-spacing -1px,
   margin-bottom 24 уже приходят из @layer theme и совпадают — тут НЕ дублируются.
   «Похожие товары» — ДРУГОЙ класс .mhf-single-related-title (НЕ .section-title),
   этим правилом НЕ затрагивается (его line-height — зона шага 5). Скоуп .product-page
   — h2 на /shop, /cart и прочих страницах НЕ затронуты. */
.product-page h2.section-title { line-height: 1.22; }

/* [11] t-064 Заголовок «Похожие товары» .mhf-single-related-title
   (<h2 class="mhf-single-related-title"> в related.php). Тот же неслойный Neve
   `h2{line-height:var(--h2lineheight)}` (1.33) перебивает наше слойное
   `.product-page .mhf-single-related-title{line-height:1.22}` (@layer theme) —
   probe давал 42.56px (32×1.33), эталон 1.22. Перебиваем НЕслойно тем же
   паттерном, что [10]: `.product-page h2.mhf-single-related-title` спец. (0,2,1)
   > Neve `h2` (0,0,1) — без !important. font-size 32/700 приходят из @layer theme,
   тут не дублируются. Скоуп .product-page — каталог/другие страницы не затронуты. */
.product-page h2.mhf-single-related-title { line-height: 1.22; }

/* [12] t-065 buy-row: кастомный степпер количества + secondary CTA «Заказать в 1
   клик» — защита от НЕслойных стилей кнопок (Neve reset `button{...}`, вендорный
   Woo `.woocommerce button`). Наши слойные правила (@layer theme) проигрывают
   КАСКАДОМ любому неслойному правилу независимо от специфичности, поэтому
   геометрию/цвет кастомных кнопок закрепляем НЕслойно. Скоуп
   .product-page.mhf-single .product-buy — только колонка покупки карточки; кнопки
   каталога/корзины/loop НЕ имеют этого предка. Без !important: тег-квалификатор
   button.<class> даёт спец. (0,3,1) > неслойного Neve `button`(0,0,1)/вендора. */
.product-page.mhf-single .product-buy button.qty-btn {
  background: var(--bg-soft);
  color: var(--text);
  border: none;
  border-radius: 14px;
  padding: 0;
}
.product-page.mhf-single .product-buy button.qty-btn:hover {
  background: var(--accent);
  color: #fff;
}
.product-page.mhf-single .product-buy button.mhf-single-oneclick {
  background: var(--accent-2);
  color: var(--accent);
  border: 1px solid var(--accent-2);
  border-radius: 18px;
  padding: 20px 24px;
  font-size: 18px;
  font-weight: 600;
  letter-spacing: -1px;
}
.product-page.mhf-single .product-buy button.mhf-single-oneclick:hover {
  background: var(--accent);
  color: #fff;
  border-color: var(--accent);
}

/* [13] t-065 (PDP-iter2) Ссылка «Все характеристики ↓» .attrs-more — цвет к эталону
   var(--accent). НЕслойное Neve (style-main-new.min.css) `a{color:var(--nv-primary-
   accent)}` (спец. (0,0,1)) красит ВСЕ ссылки; наше слойное `.product-page .attrs-more
   {color:var(--accent)}` (@layer theme) проигрывает КАСКАДОМ (слой < неслойного,
   независимо от спец.) → на проде ссылка шла Neve-акцентом, не нашим токеном. Плюс
   Neve `a:hover{opacity:.9;color:var(--nv-secondary-accent)}` подменял цвет на ховере
   вместо эталонного простого затухания. Перебиваем НЕслойно: `.product-page a.attrs-more`
   спец. (0,2,1) > Neve `a` (0,0,1) — без !important. Эталон .attrs-more (стр. 331-340):
   color var(--accent), hover — только opacity 0.7 (цвет НЕ меняем). font-size 14 /
   font-weight 600 / letter-spacing -0.5px приходят из @layer theme и совпадают с
   эталоном — тут НЕ дублируются. Скоуп .product-page — только карточка. */
.product-page a.attrs-more { color: var(--accent); }
.product-page a.attrs-more:hover { color: var(--accent); opacity: 0.7; }

/* [14] t-065 (PDP-iter2) Строки .attributes-table к эталону. НЕслойное Neve
   (style-main-new.min.css) БАЗОВОЕ `td{font-size:.9em;border-bottom:2px solid
   var(--nv-text-color)}` (спец. (0,0,1)) бьёт наши слойные `.product-page .attr-value`
   /`.attr-label` (@layer theme) КАСКАДОМ (слой < неслойного, независимо от спец.) →
   на проде: (а) размер шрифта .9em вместо эталонных 16px, (б) бордер 2px тёмный
   (--nv-text-color) на самом td вместо эталонного 1px var(--rule), (в) бордер сидит
   на td, а не на tr → у последней строки НЕ обнуляется. Перебиваем НЕслойно:
   `.product-page td.attr-label`/`td.attr-value` спец. (0,2,1) > Neve `td` (0,0,1) —
   без !important. Эталон .attr-* (стр. 308-329): 16px, line-height 1.5, letter-spacing
   -1px, color var(--text); label 700, value 500; padding 10px 0; border-bottom 1px
   solid var(--rule), у последней строки none. Бордер задаём НА td (там сидит вендорный),
   с :last-child tr → td без бордера. width label 200 приходит из @layer и совпадает.
   Скоуп .product-page — только карточка; td на /shop, /cart и др. НЕ затронуты. */
.product-page td.attr-label,
.product-page td.attr-value {
  font-size: 16px;
  line-height: 1.5;
  letter-spacing: -1px;
  color: var(--text);
  padding: 10px 0;
  border-bottom: 1px solid var(--rule);
  border-top: 0;
}
.product-page td.attr-label { font-weight: 700; vertical-align: top; }
.product-page td.attr-value { font-weight: 500; }
.product-page .attributes-table tr:last-child td { border-bottom: none; }
@media (max-width: 568px) {
  .product-page td.attr-label,
  .product-page td.attr-value { font-size: 14px; }
}

/* ══════════════════════════════════════════════════════════════════════════
   СИСТЕМНЫЕ УВЕДОМЛЕНИЯ WooCommerce — дизайн-канон «чип» (t-067)
   Эталон формы: .info-alert (~1246) / .install-hint (~1969) — светлый фон +
   тёмный текст var(--text), НЕ neve-паттерн «сплошная заливка + белый текст».

   ЧТО РИСУЕТ ВЕНДОР (проверено на проде grep'ом, июль-2026):
   • Woo core (woocommerce.css): базовый серый чип, border-top 3px цветной,
     иконка ::before шрифтом WooCommerce (\e015 msg / \e028 info / \e016 err),
     .button{float:right}. Специфичность (0,1,0)/(0,1,1).
   • Neve (woocommerce.min.css) — АГРЕССИВНЕЕ, это главный оппонент:
       .woocommerce .woocommerce-message  → background:var(--nv-c-1);border:0;
            color:#fff;border-radius:3px             (0,2,0), БЕЗ !important
       .woocommerce .woocommerce-info     → background:var(--nv-primary-accent)
       .woocommerce .woocommerce-error    → background:var(--nv-c-2)
       база .woocommerce-message → display:flex; flex-direction:row-reverse;
            align-items:center; padding-left:60px
       ::before → color:#fff; position:absolute; top:0; height:100%
       a/.button → order:-1; margin-left:auto!important; полн. btn через
            CSS-переменные --primarybtn*; width:auto
   → У Neve НЕТ !important на цвете/фоне/бордере, а theme.css грузится ПОСЛЕ
     Neve (functions.php: mh-theme dep [neve-parent], prio 20). Значит скоуп
     `.woocommerce .woocommerce-message` (0,2,0) = вес Neve, но позже в каскаде
     → выигрываем БЕЗ !important. Пишем ВНЕ @layer (@layer theme проиграл бы
     неслойным правилам Neve). Единственный !important Neve — margin-left:auto
     на кнопке — безвреден (success держит кнопку справа через space-between).

   ИКОНКА: Woo/Neve рисуют глиф иконочным шрифтом в ::before. Скрываем глиф
     (font-family:inherit + content вне юникод-глифа) и подставляем СВОЙ 22×22
     SVG data-uri фоном в тот же ::before — цвет stroke под тип. Так надёжнее
     перекраски глифа: убирает и абсолютное позиционирование Neve, и белый цвет.

   ПАЛИТРА: статусные токены (--err/--warn/--ok + *-soft) заведены в :root,
   утверждены владельцем (t-067). Внедрены success (обновлён под --ok), info,
   error, warning. Warning — на НАШЕМ модификаторе (Woo не даёт нативного класса,
   см. блок WARNING ниже). Текст error/warning — ЦВЕТНОЙ (var(--err)/var(--warn))
   по требованию владельца, success — var(--text) на светлом тинте --ok-soft.
   ══════════════════════════════════════════════════════════════════════════ */

/* ── Общая форма чипа (success + info; error ждёт токенов) ─────────────────── */
.woocommerce .woocommerce-message,
.woocommerce .woocommerce-info {
  display: flex;
  flex-direction: row;          /* сбрасываем neve row-reverse */
  align-items: flex-start;      /* сбрасываем neve align-items:center */
  gap: 12px;
  border-radius: 18px;
  padding: 18px 20px;
  padding-left: 20px;           /* сбрасываем neve padding-left:60px */
  margin: 20px 0;
  border: 1px solid transparent;/* убираем neve border:0 и Woo border-top 3px */
  font-family: 'Inter', sans-serif;
  font-size: 14px;
  font-weight: 500;
  color: var(--text);           /* явно — иначе унаследуется neve #fff */
  line-height: 1.43;
  letter-spacing: -0.5px;
}
.woocommerce .woocommerce-message strong,
.woocommerce .woocommerce-info strong {
  font-weight: 700;
  color: var(--text);
}

/* Иконка: гасим вендорный глиф, подставляем SVG-фон 22×22 в тот же ::before.
   position:static сбрасывает neve absolute/top/height; content:"" убирает глиф. */
.woocommerce .woocommerce-message::before,
.woocommerce .woocommerce-info::before {
  content: "";
  position: static;
  display: block;
  width: 22px;
  height: 22px;
  min-width: 22px;
  margin: 1px 0 0 0;            /* margin-top:1px как у .install-hint */
  padding: 0;
  top: auto;
  left: auto;
  font-family: inherit;        /* глушим иконочный шрифт WooCommerce */
  background-repeat: no-repeat;
  background-position: center;
  background-size: 22px 22px;
  flex-shrink: 0;
}

/* Встроенная кнопка «Просмотр корзины» a.button.wc-forward → наша .btn,
   компактный вторичный вид. Neve тянет полный btn через CSS-vars — перебиваем
   явными свойствами; order:-1 у neve оставляем (кнопка справа, см. space-between). */
.woocommerce .woocommerce-message a.button,
.woocommerce .woocommerce-info a.button,
.woocommerce .woocommerce-message a.wc-forward,
.woocommerce .woocommerce-info a.wc-forward {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  width: auto;
  margin-top: 0;
  padding: 10px 18px;
  border-radius: 14px;
  font-family: 'Inter', sans-serif;
  font-size: 14px;
  font-weight: 600;
  letter-spacing: -0.5px;
  line-height: 1.2;
  white-space: nowrap;
  transition: background-color .18s ease, color .18s ease, border-color .18s ease;
}

/* ── SUCCESS / MESSAGE (.woocommerce-message) — приоритет, видимая плашка ──── */
/* Палитра владельца задаёт для success ОДИН цвет --ok #18BA92 и на фон, и на текст.
   #18BA92 на #18BA92 = невидимый текст → фон беру светлым тинтом --ok-soft #E4F7F2,
   текст остаётся var(--text) (см. общий чип). Акцент/бордер/иконка = --ok. Уходит
   на подтверждение владельцу. */
.woocommerce .woocommerce-message {
  background: var(--ok-soft);
  border-color: var(--ok);
  justify-content: space-between;
  align-items: center;
}
/* check-circle, stroke var(--ok) #18BA92, 22×22 */
.woocommerce .woocommerce-message::before {
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='22' height='22' viewBox='0 0 24 24' fill='none' stroke='%2318BA92' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M22 11.08V12a10 10 0 1 1-5.93-9.14'/%3E%3Cpolyline points='22 4 12 14.01 9 11.01'/%3E%3C/svg%3E");
}
.woocommerce .woocommerce-message a.button,
.woocommerce .woocommerce-message a.wc-forward {
  background: #fff;
  color: var(--ok);
  border: 1px solid var(--ok);
}
.woocommerce .woocommerce-message a.button:hover,
.woocommerce .woocommerce-message a.wc-forward:hover {
  background: var(--ok);
  color: #fff;
}

/* ── INFO (.woocommerce-info) — клон .info-alert ──────────────────────────── */
.woocommerce .woocommerce-info {
  background: var(--alert);
  border-color: var(--accent);
}
/* info-circle, stroke var(--accent) #5D60F9, 22×22 */
.woocommerce .woocommerce-info::before {
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='22' height='22' viewBox='0 0 24 24' fill='none' stroke='%235D60F9' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'/%3E%3Cline x1='12' y1='16' x2='12' y2='12'/%3E%3Cline x1='12' y1='8' x2='12.01' y2='8'/%3E%3C/svg%3E");
}
/* info-кнопка — паттерн .mhf-single-oneclick (accent-2 фон / accent текст) */
.woocommerce .woocommerce-info a.button,
.woocommerce .woocommerce-info a.wc-forward,
.woocommerce .woocommerce-info a.wc-backward {
  background: var(--accent-2);
  color: var(--accent);
  border: 1px solid var(--accent-2);
}
.woocommerce .woocommerce-info a.button:hover,
.woocommerce .woocommerce-info a.wc-forward:hover,
.woocommerce .woocommerce-info a.wc-backward:hover {
  background: var(--accent);
  color: #fff;
  border-color: var(--accent);
}

/* Store notice (если появится) наследует success-чип — та же .woocommerce-message
   часто; отдельного правила не заводим, пока разметка не подтверждена живьём. */

/* ── Адаптив ≤768px: компактнее паддинг чипа ──────────────────────────────── */
@media (max-width: 768px) {
  .woocommerce .woocommerce-message,
  .woocommerce .woocommerce-info {
    padding: 16px 18px;
    padding-left: 18px;
  }
  .woocommerce .woocommerce-info a.button,
  .woocommerce .woocommerce-info a.wc-forward,
  .woocommerce .woocommerce-info a.wc-backward {
    padding: 12px 18px;
  }
}
/* ≤560px: success переносит кнопку на всю ширину под текст */
@media (max-width: 560px) {
  .woocommerce .woocommerce-message {
    flex-wrap: wrap;
  }
  .woocommerce .woocommerce-message a.button,
  .woocommerce .woocommerce-message a.wc-forward {
    margin-top: 12px;
    width: 100%;
    justify-content: center;
    padding: 12px 18px;
  }
}

/* ── ERROR (.woocommerce-error) — палитра утверждена (t-067) ─────────────────
   Токены --err #F42829 / --err-soft #FDD4D4 заведены в :root. Владелец задал для
   ошибки ЦВЕТНОЙ текст var(--err) (НЕ var(--text)) на светлом фоне var(--err-soft).
   .woocommerce-error — это <ul>, поэтому list-style:none + отступы li вместо чипа
   с одним ::before-текстом. A11y-риск контраста см. в отчёте. */
.woocommerce .woocommerce-error {
  display: flex;
  flex-direction: row;
  align-items: flex-start;
  gap: 12px;
  border-radius: 18px;
  padding: 18px 20px;
  padding-left: 20px;
  margin: 20px 0;
  border: 1px solid var(--err);
  background: var(--err-soft);
  font-family: 'Inter', sans-serif;
  font-size: 14px;
  font-weight: 500;
  color: var(--err);                  /* владелец: цветной текст, НЕ var(--text) */
  line-height: 1.43;
  letter-spacing: -0.5px;
  list-style: none;
}
.woocommerce .woocommerce-error strong { color: var(--err); font-weight: 700; }
.woocommerce .woocommerce-error li {
  list-style: none;
  margin: 0 0 6px 0;
  padding: 0;
  font-size: 14px;
  color: var(--err);
}
.woocommerce .woocommerce-error li:last-child { margin-bottom: 0; }
.woocommerce .woocommerce-error::before {
  content: "";
  position: static;
  display: block;
  width: 22px; height: 22px; min-width: 22px;
  margin: 1px 0 0 0; padding: 0; top: auto; left: auto;
  font-family: inherit;
  background-repeat: no-repeat; background-position: center; background-size: 22px 22px;
  flex-shrink: 0;
  /* alert-circle, stroke var(--err) #F42829 */
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='22' height='22' viewBox='0 0 24 24' fill='none' stroke='%23F42829' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'/%3E%3Cline x1='12' y1='8' x2='12' y2='12'/%3E%3Cline x1='12' y1='16' x2='12.01' y2='16'/%3E%3C/svg%3E");
}
.woocommerce .woocommerce-error a.button {
  display: inline-flex; align-items: center; gap: 6px; width: auto; margin-top: 0;
  padding: 10px 18px; border-radius: 14px;
  font-family: 'Inter', sans-serif; font-size: 14px; font-weight: 600; letter-spacing: -0.5px;
  background: #fff; color: var(--err); border: 1px solid var(--err);
  transition: background-color .18s ease, color .18s ease, border-color .18s ease;
}
.woocommerce .woocommerce-error a.button:hover { background: var(--err); color: #fff; }

/* ── WARNING — модификатор (t-067) ──────────────────────────────────────────
   ВАЖНО: Woo core НЕ имеет типа/класса «warning». Проверено на проде (июль-2026):
   wc-notice-functions.php → woocommerce_notice_types = ['error','success','notice'];
   notice.php рендерит тип «notice» как .woocommerce-info. Стабильного вендорного
   класса под warning НЕТ. Поэтому warning — на НАШЕМ модификаторе, который надо
   поставить самим (напр. wc_add_notice($msg,'notice',['notice-class'=>'is-warning'])
   или классом на разметке). Обычный .woocommerce-info НЕ трогаем — не сводим info
   к warning силой. Правило готово; чтобы оно сработало, модификатор должен
   появиться в разметке. Покрываю несколько форм записи модификатора. */
.woocommerce .woocommerce-message--warning,
.woocommerce .woocommerce-info--warning,
.woocommerce .woocommerce-info.is-warning,
.woocommerce .woocommerce-message.is-warning {
  display: flex;
  flex-direction: row;
  align-items: flex-start;
  gap: 12px;
  border-radius: 18px;
  padding: 18px 20px;
  padding-left: 20px;
  margin: 20px 0;
  border: 1px solid var(--warn);
  background: var(--warn-soft);
  font-family: 'Inter', sans-serif;
  font-size: 14px;
  font-weight: 500;
  color: var(--warn);                 /* владелец: цветной текст */
  line-height: 1.43;
  letter-spacing: -0.5px;
}
.woocommerce .woocommerce-message--warning strong,
.woocommerce .woocommerce-info--warning strong,
.woocommerce .woocommerce-info.is-warning strong,
.woocommerce .woocommerce-message.is-warning strong { color: var(--warn); font-weight: 700; }
/* alert-triangle, stroke var(--warn) #FF6E01 — перебиваем success/info ::before */
.woocommerce .woocommerce-message--warning::before,
.woocommerce .woocommerce-info--warning::before,
.woocommerce .woocommerce-info.is-warning::before,
.woocommerce .woocommerce-message.is-warning::before {
  content: "";
  position: static;
  display: block;
  width: 22px; height: 22px; min-width: 22px;
  margin: 1px 0 0 0; padding: 0; top: auto; left: auto;
  font-family: inherit;
  background-repeat: no-repeat; background-position: center; background-size: 22px 22px;
  flex-shrink: 0;
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='22' height='22' viewBox='0 0 24 24' fill='none' stroke='%23FF6E01' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M10.29 3.86 1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z'/%3E%3Cline x1='12' y1='9' x2='12' y2='13'/%3E%3Cline x1='12' y1='17' x2='12.01' y2='17'/%3E%3C/svg%3E");
}
.woocommerce .woocommerce-message--warning a.button,
.woocommerce .woocommerce-info--warning a.button,
.woocommerce .woocommerce-info.is-warning a.button,
.woocommerce .woocommerce-message.is-warning a.button,
.woocommerce .woocommerce-message--warning a.wc-forward,
.woocommerce .woocommerce-info--warning a.wc-forward,
.woocommerce .woocommerce-info.is-warning a.wc-forward,
.woocommerce .woocommerce-message.is-warning a.wc-forward {
  display: inline-flex; align-items: center; gap: 6px; width: auto; margin-top: 0;
  padding: 10px 18px; border-radius: 14px;
  font-family: 'Inter', sans-serif; font-size: 14px; font-weight: 600; letter-spacing: -0.5px;
  background: #fff; color: var(--warn); border: 1px solid var(--warn);
  transition: background-color .18s ease, color .18s ease, border-color .18s ease;
}
.woocommerce .woocommerce-message--warning a.button:hover,
.woocommerce .woocommerce-info--warning a.button:hover,
.woocommerce .woocommerce-info.is-warning a.button:hover,
.woocommerce .woocommerce-message.is-warning a.button:hover,
.woocommerce .woocommerce-message--warning a.wc-forward:hover,
.woocommerce .woocommerce-info--warning a.wc-forward:hover,
.woocommerce .woocommerce-info.is-warning a.wc-forward:hover,
.woocommerce .woocommerce-message.is-warning a.wc-forward:hover {
  background: var(--warn); color: #fff; border-color: var(--warn);
}

/* ─────────────────────────────────────────────────────────────────────────────
   ПРАВКА B — бейдж «Распродажа!» (Woo .onsale) на квадратном превью PDP.
   Спека дизайнера (08): бейдж лежит поверх КВАДРАТНОГО слайда галереи, bottom-left.

   DOM (после оверрайда product-image.php, стр. 92-99): .onsale — ПРЯМОЙ потомок
   .woocommerce-product-gallery (СНАРУЖИ __wrapper, после его закрытия), т.е. СОСЕД
   .flex-viewport (квадрат) и .flex-control-thumbs (миниатюры). Раньше sale-flash
   печатался внутри __wrapper — но flexslider оборачивает __wrapper в
   .flex-viewport{overflow:hidden} и делает __wrapper height:0 треком → бейдж резался
   и уезжал при свайпе (см. шапку product-image.php). Теперь якорь = внешний
   .woocommerce-product-gallery{position:relative}, overflow:visible.

   ПОЗИЦИЯ = НИЗ КВАДРАТА, не всей галереи: под квадратом (.flex-viewport) идут
   миниатюры (.flex-control-thumbs), к ним бейдж уезжать НЕ должен. Высота квадрата =
   ширине колонки галереи = --gallery-square (определена на .woocommerce-product-gallery,
   переопределяется по брейкам синхронно с колонкой .product-grid: 580/480/340/520).
   top:calc(var(--gallery-square) - 20px) + translateY(-100%) → нижняя грань бейджа
   на 20px выше нижней грани КВАДРАТА, независимо от числа миниатюр под ним.

   СКОУП (не течёт), почему безопасно:
     • .product-page — только single-product (<main>); каталог/архив его не имеют,
       там карточки .product-card без gallery-классов → правило их не ловит;
     • анкер .woocommerce-product-gallery > .onsale есть ТОЛЬКО в главной галерее
       single-product. Блок «Похожие товары» (.mhf-single-related .product-card)
       рендерится своим content-product.php и НЕ содержит .woocommerce-product-gallery
       → related-бейджи НЕ затронуты. (Grep/curl-проверка при деплое.)
     • > (direct child): .onsale — прямой ребёнок галереи; внутри слайдов его нет.

   ВНЕ @layer theme: слойные правила проигрывают КАСКАДОМ любому неслойному вендору
   Woo/Neve (.onsale часто с !important). Здесь неслойно + точечный !important на
   свойствах, которые вендор форсит (position/top/left/border-radius/background/
   margin/transform/min-*), как в образце неслойных перебивок выше. */
.product-page .gallery .woocommerce-product-gallery > .onsale,
.product-page .gallery .woocommerce-product-gallery > .woocommerce-sale-flash {
  position: absolute !important;
  top: calc(var(--gallery-square) - 20px) !important;
  left: 20px !important;
  bottom: auto !important;
  right: auto !important;
  transform: translateY(-100%) !important;  /* низ бейджа = (низ квадрата − 20px) */
  margin: 0 !important;
  z-index: 2;
  /* обнуляем нативные размеры круга/пилюли Woo/Neve */
  min-width: auto !important;
  min-height: auto !important;
  width: auto;
  height: auto;
  /* внешний вид по спеке */
  background: var(--accent) !important;   /* #5D60F9 */
  color: #fff;
  font-size: 12px;
  font-weight: 600;
  line-height: 1.2;
  letter-spacing: -0.3px;
  padding: 5px 10px;
  border-radius: 6px !important;          /* перебиваем Woo/Neve 100%/круг */
}
@media (max-width: 568px) {
  /* Ниже 520px вьюпорта квадрат сам сжимается до ширины галереи (контейнер width:100%,
     max-width:520 не действует). min(520, 100vw - 40) держит --gallery-square близко
     к фактической высоте квадрата (40px ≈ боковые поля контейнера Neve; деградация
     мягкая — бейдж остаётся у нижней грани, а не улетает к миниатюрам). */
  .product-page .gallery .woocommerce-product-gallery { --gallery-square: min(520px, 100vw - 40px); }
  .product-page .gallery .woocommerce-product-gallery > .onsale,
  .product-page .gallery .woocommerce-product-gallery > .woocommerce-sale-flash {
    top: calc(var(--gallery-square) - 12px) !important;
    left: 12px !important;
  }
}

/* ══════════════════════════════════════════════════════════════════════════════
   КОРЗИНА (/cart/) — переверстка магазина, t-065 шаг 1.
   Эталон: docs/mockups/page-cart.html. Шаблон: woocommerce/cart/cart.php (override).

   КАСКАД (почему без !important и без @layer):
   На is_cart() в functions.php dequeue'нуты woocommerce-layout + woocommerce-
   smallscreen (см. блок 1a). Остаётся НЕслойный woocommerce-general (woocommerce.css:
   .woocommerce table.shop_table{border,border-collapse,border-radius,td{border-top}},
   .button, .quantity) + neve-woocommerce. Наши правила НЕслойные и скоуплены на
   body.woocommerce-cart → специфичность (0,2..3,x) перебивает вендорные (0,0..1,x)
   штатно. @layer тут НЕ используем: @layer всегда слабее НЕслойного вендора —
   ровно на этом сломалась откаченная f17de40 (CSS-only в @layer theme).

   СКОУП: каждый селектор начинается с .woocommerce-cart. Голых .shop_table/.cart_item/
   .quantity/.button/td НЕТ — чтобы не задеть /shop, single, /checkout.
   ══════════════════════════════════════════════════════════════════════════════ */

/* ── Двухколоночная раскладка: список слева, sticky-итог справа ─────────────────
   .mhf-cart-grid введён в override-шаблоне cart.php как обёртка формы + коллатералов. */
.woocommerce-cart .mhf-cart-grid {
  display: grid;
  grid-template-columns: 1fr 400px;
  gap: 48px;
  align-items: start;
}
/* .mhf-cart-main — левая колонка-обёртка (счётчик + список + cross-sell/continue).
   Прозрачная: карточку рисует .woocommerce-cart-form внутри. */
.woocommerce-cart .mhf-cart-main { min-width: 0; }

/* ── СЧЁТЧИК «N товара» (эталон .cart-count, P2-1) ─────────────────────────────
   Выводится в cart.php над списком; JS (functions.php) переносит его ВНУТРЬ
   .nv-page-title после <h1> и вешает .mhf-has-count → инлайн справа от заголовка
   по базовой линии (эталон .cart-head: display:flex; align-items:baseline; gap:16px).
   Без JS — остаётся строкой над списком (деградация без потери данных). */
.woocommerce-cart .mhf-cart-count {
  font-size: 16px;
  font-weight: 600;
  color: var(--muted);
  letter-spacing: -0.5px;
  margin: 0 0 16px 4px;
}
/* Инлайн-режим у заголовка Neve после переноса JS'ом */
.woocommerce-cart .nv-page-title.mhf-has-count {
  display: flex;
  align-items: baseline;
  flex-wrap: wrap;
  gap: 16px;
}
.woocommerce-cart .nv-page-title.mhf-has-count .mhf-cart-count {
  margin: 0;
}
/* Отступ «Корзина» + счётчик → список товаров (эталон .cart-head margin-bottom:40px,
   docs/mockups/page-cart.html стр.121). Neve рисует заголовок в .nv-page-title и НЕ
   даёт зазора до .nv-content-wrap со списком → на живом сайте H1 наезжал на панель.
   Скоуп .woocommerce-cart .nv-page-title — только страница корзины, другие nv-page-title
   (архивы/страницы) не затронуты. Моб-значение 28px ниже (эталон @768 стр.459). */
.woocommerce-cart .nv-page-title { margin-bottom: 40px; }
/* Крошки — отдельной строкой НАД «H1 + счётчик» (эталон .cart-head: крошки сверху,
   ниже заголовок со счётчиком). При flex-wrap на .mhf-has-count даём крошкам
   flex-basis:100% → занимают всю первую строку, H1+счётчик переносятся на вторую.
   Класс берётся из реального DOM снапшота: <small class="nv--yoast-breadcrumb
   neve-breadcrumbs-wrapper">. */
.woocommerce-cart .nv-page-title.mhf-has-count .neve-breadcrumbs-wrapper {
  flex-basis: 100%;
  margin-bottom: 8px;
}

/* ── ПАНЕЛЬ СПИСКА: div-grid .mhf-cart-list (P2-3) + карточка bg-soft ─────────────
   Таблица заменена на <div> в cart.php: .mhf-cart-list > .cart_item > .product-*.
   Панель-фон на .mhf-cart-list (эталон .cart-list), НЕ на всей форме — иначе служебный
   .actions (скрытый update_cart) добавлял бы пустой хвост к капсуле. */
.woocommerce-cart .woocommerce-cart-form { margin: 0; }
.woocommerce-cart .mhf-cart-list {
  background: var(--bg-soft);
  border-radius: 32px;
  padding: 8px 32px;
}
/* Строка товара: миниатюра | инфо | цена/шт | степпер | сумма | удалить */
.woocommerce-cart .mhf-cart-list .cart_item {
  display: grid;
  grid-template-columns: 96px minmax(0, 1fr) auto auto auto 44px;
  align-items: center;
  gap: 24px;
  padding: 28px 0;
  border-bottom: 1px solid var(--rule);
  background: transparent;
}
.woocommerce-cart .mhf-cart-list .cart_item:last-of-type { border-bottom: none; }
/* Все ячейки — блочные, без вендорных паддингов/выравнивания */
.woocommerce-cart .mhf-cart-list .cart_item > div {
  padding: 0;
  border: 0;
  text-align: left;
  background: transparent;
}

/* Миниатюра-подложка (эталон .cart-item-thumb): белый квадрат 96×96, radius 18,
   фото по центру. Ячейка centrируется flex'ом, фото contain внутри с внутренним
   отступом — чтобы широкое товарное фото (напр. 300×147) НЕ распластывалось до
   краёв (тогда белой подложки не видно и фото вплотную к тайтлу — расхождения
   п.1/п.2). padding 10px даёт видимую белую рамку со всех сторон. */
.woocommerce-cart .mhf-cart-list .cart_item .product-thumbnail {
  width: 96px;
  height: 96px;
  border-radius: 18px;
  background: #fff;
  overflow: hidden;
  flex-shrink: 0;
  display: flex;
  align-items: center;
  justify-content: center;
}
.woocommerce-cart .cart_item .product-thumbnail a {
  display: flex;
  align-items: center;
  justify-content: center;
  width: 96px;
  height: 96px;
}
.woocommerce-cart .cart_item .product-thumbnail img {
  display: block;
  width: 96px;
  height: 96px;
  /* Боковые внутренние отступы миниатюры (эталон .cart-item-thumb: графика 74% →
     ~13% белого поля с боков). Широкое товарное фото при object-fit:contain
     распластывалось по ширине 96px-подложки и прижималось к краям — 16px по
     горизонтали дают видимую белую рамку с боков; 12px сверху/снизу центрируют. */
  padding: 12px 16px;
  box-sizing: border-box;
  object-fit: contain;
  border-radius: 18px;
}

/* Имя (16/700) + артикул (13 --muted) */
.woocommerce-cart .cart_item .product-name {
  min-width: 0;
  font-size: 16px;
  font-weight: 700;
  line-height: 1.3;
  letter-spacing: -1px;
  color: var(--text);
}
.woocommerce-cart .cart_item .product-name > a {
  color: var(--text);
  transition: color 0.18s ease;
}
.woocommerce-cart .cart_item .product-name > a:hover { color: var(--accent); }
.woocommerce-cart .cart_item .product-name .mhf-cart-item-sku {
  font-size: 13px;
  font-weight: 500;
  color: var(--muted);
  letter-spacing: -0.3px;
  margin-top: 4px;
  line-height: 1.3;
}
.woocommerce-cart .cart_item .product-name .mhf-cart-item-sku strong {
  color: var(--text);
  font-weight: 600;
}

/* Цена за штуку — 15px --muted, right. Внутри: .mhf-cart-item-unit-val (текущая),
   опц. .mhf-cart-item-unit-old (зачёркнутая regular, ВТОРОЙ строкой — решение владельца t-065). */
.woocommerce-cart .cart_item .product-price {
  text-align: right;
  min-width: 110px;
  white-space: nowrap;
}
.woocommerce-cart .cart_item .product-price .mhf-cart-item-unit-val {
  display: block;
  font-size: 15px;
  font-weight: 600;
  color: var(--muted);
  letter-spacing: -0.5px;
  white-space: nowrap;
}
/* Цена от Woo может прийти как .woocommerce-Price-amount с тёмным цветом — приводим
   к muted, чтобы «59 900 ₽ / шт» читалось единым серым (эталон .cart-item-unit-val). */
.woocommerce-cart .cart_item .product-price .mhf-cart-item-unit-val .woocommerce-Price-amount,
.woocommerce-cart .cart_item .product-price .mhf-cart-item-unit-suffix {
  color: var(--muted);
  font-weight: 600;
}
/* Старая цена — второй строкой: зачёркнута, muted, 13px */
.woocommerce-cart .cart_item .product-price .mhf-cart-item-unit-old {
  display: block;
  margin-top: 2px;
  font-size: 13px;
  font-weight: 500;
  color: var(--muted);
  letter-spacing: -0.3px;
  text-decoration: line-through;
}
.woocommerce-cart .cart_item .product-price .mhf-cart-item-unit-old .woocommerce-Price-amount {
  color: var(--muted);
}

/* Степпер количества — эталон [−] N [+] (docs/mockups/page-cart.html стр. 186–212).
   Custom-JS строит внутри нативного .quantity кнопки .qty-btn + .qty-value вокруг
   нативного input.qty (см. functions.php, блок «Степпер количества в корзине»).
   Нативный input.qty ОСТАЁТСЯ в DOM (visually-hidden) как источник значения для
   POST update_cart → серверный пересчёт Woo не ломается.
   Скоуп: .woocommerce-cart td.product-quantity — НЕ трогает .product-page .product-buy
   (там свой степпер) и не течёт по сайту (Woo-класс .quantity общий, но связан
   контекстом-родителем). */
.woocommerce-cart .cart_item .product-quantity .quantity {
  display: inline-flex;
  align-items: center;
  border: 1px solid var(--rule);
  border-radius: 14px;
  padding: 4px;
  background: #fff;
  margin: 0;
}
/* Кнопки −/+ (40×40, эталон .qty-btn) */
.woocommerce-cart .cart_item .product-quantity .qty-btn {
  width: 40px;
  height: 40px;
  border: none;
  background: var(--bg-soft);
  border-radius: 11px;
  color: var(--text);
  font-family: 'Inter', sans-serif;
  font-size: 20px;
  font-weight: 600;
  line-height: 1;
  cursor: pointer;
  display: flex;
  align-items: center;
  justify-content: center;
  transition: background 0.18s ease, color 0.18s ease;
}
.woocommerce-cart .cart_item .product-quantity .qty-btn:hover { background: var(--accent); color: #fff; }
.woocommerce-cart .cart_item .product-quantity .qty-btn[disabled] { opacity: .4; cursor: default; }
.woocommerce-cart .cart_item .product-quantity .qty-btn[disabled]:hover { background: var(--bg-soft); color: var(--text); }
/* Значение количества (эталон .qty-value, 40px/центр/16px/700) */
.woocommerce-cart .cart_item .product-quantity .qty-value {
  min-width: 40px;
  text-align: center;
  font-size: 16px;
  font-weight: 700;
  color: var(--text);
  letter-spacing: -1px;
}
/* Нативный input.qty скрыт визуально, но остаётся в DOM (источник значения для
   POST update_cart). Не display:none — чтобы значение уходило в форму. */
.woocommerce-cart .cart_item .product-quantity input.qty {
  position: absolute;
  width: 1px;
  height: 1px;
  padding: 0;
  margin: -1px;
  border: 0;
  overflow: hidden;
  clip: rect(0 0 0 0);
  white-space: nowrap;
}
/* Микро-состояние «идёт пересчёт»: приглушаем степпер до перезагрузки */
.woocommerce-cart .cart_item .product-quantity .quantity.mhf-qty-busy { opacity: .55; pointer-events: none; }
/* A11y: видимый фокус клавиатуры (uslugi.css сбрасывает outline → возвращаем явно) */
.woocommerce-cart .cart_item .product-quantity .qty-btn:focus-visible,
.woocommerce-cart .cart_item .product-remove a.remove:focus-visible,
.woocommerce-cart .cart_item .product-name > a:focus-visible {
  outline: 2px solid var(--accent);
  outline-offset: 2px;
  border-radius: 4px;
}

/* Сумма строки — 18/700 --text, right */
.woocommerce-cart .cart_item .product-subtotal {
  text-align: right;
  min-width: 130px;
  font-size: 18px;
  font-weight: 700;
  color: var(--text);
  letter-spacing: -1px;
  white-space: nowrap;
}

/* Кнопка-крестик «удалить» a.remove → 44×44, крестик глушим (используем свой) */
.woocommerce-cart .cart_item .product-remove {
  width: 44px;
  text-align: center;
  flex-shrink: 0;
}
.woocommerce-cart .cart_item .product-remove a.remove {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 44px;
  height: 44px;
  border-radius: 12px;
  background: #fff;
  color: transparent;               /* прячем нативный × */
  font-size: 0;
  line-height: 0;
  position: relative;
  transition: background 0.18s ease;
}
.woocommerce-cart .cart_item .product-remove a.remove:hover {
  background: #EF3B3B;
  color: transparent;
}
/* Свой крестик через SVG-маску (stroke --muted → белый на hover) */
.woocommerce-cart .cart_item .product-remove a.remove::before {
  content: "";
  width: 20px;
  height: 20px;
  background-color: var(--muted);
  transition: background-color 0.18s ease;
  -webkit-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cline x1='18' y1='6' x2='6' y2='18'/%3E%3Cline x1='6' y1='6' x2='18' y2='18'/%3E%3C/svg%3E") center / contain no-repeat;
          mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cline x1='18' y1='6' x2='6' y2='18'/%3E%3Cline x1='6' y1='6' x2='18' y2='18'/%3E%3C/svg%3E") center / contain no-repeat;
}
.woocommerce-cart .cart_item .product-remove a.remove:hover::before { background-color: #fff; }

/* ── Служебный блок действий (.mhf-cart-form-actions) ───────────────────────────
   Купон-форма ПЕРЕЕХАЛА в сайдбар (.mhf-summary-promo в cart-totals.php); в блоке
   остаётся только скрытая кнопка «Обновить корзину» (P1-2) — по эталону под списком
   её нет, но она ОСТАЁТСЯ в DOM: степпер количества (functions.php) кликает её, чтобы
   отправить нативный POST update_cart → серверный пересчёт Woo. Убрать из DOM =
   сломать пересчёт при смене количества. Скрываем — не удаляем. Сам блок схлопываем
   (нет видимого UI): нулевая высота, чтобы не давал отступ между списком и cross-sell. */
.woocommerce-cart .mhf-cart-form-actions {
  padding: 0;
  border: 0;
  margin: 0;
}
/* Скрытый submit update_cart — вне потока, доступен JS-степперу для отправки формы */
.woocommerce-cart .mhf-visually-hidden {
  position: absolute !important;
  width: 1px; height: 1px;
  padding: 0; margin: -1px;
  border: 0; overflow: hidden;
  clip: rect(0 0 0 0);
  white-space: nowrap;
}

/* ── ПОД СПИСКОМ: cross-sell «монтаж» + «Продолжить покупки» (эталон .cart-below) ──
   Разметка в cart.php: .mhf-cart-below > .mhf-cart-crosssell (чекбокс+label на --alert)
   + a.mhf-cart-continue. Скоуп .woocommerce-cart. */
.woocommerce-cart .mhf-cart-below {
  margin-top: 20px;
  display: flex;
  flex-direction: column;
  gap: 16px;
}
.woocommerce-cart .mhf-cart-crosssell {
  display: flex;
  align-items: center;
  gap: 14px;
  background: var(--alert);
  border-radius: 18px;
  padding: 18px 22px;
}
.woocommerce-cart .mhf-cart-crosssell input[type="checkbox"] {
  appearance: none;
  -webkit-appearance: none;
  width: 24px;
  height: 24px;
  margin: 0;
  border: 2px solid var(--accent);
  border-radius: 7px;
  background: #fff;
  cursor: pointer;
  flex-shrink: 0;
  position: relative;
  transition: background 0.18s ease;
}
.woocommerce-cart .mhf-cart-crosssell input[type="checkbox"]:checked { background: var(--accent); }
.woocommerce-cart .mhf-cart-crosssell input[type="checkbox"]:checked::after {
  content: "";
  position: absolute;
  left: 7px;
  top: 3px;
  width: 6px;
  height: 11px;
  border-right: 2.5px solid #fff;
  border-bottom: 2.5px solid #fff;
  transform: rotate(45deg);
}
.woocommerce-cart .mhf-cart-crosssell input[type="checkbox"]:focus-visible {
  outline: 2px solid var(--accent);
  outline-offset: 2px;
}
.woocommerce-cart .mhf-cart-crosssell label {
  flex: 1;
  font-size: 15px;
  font-weight: 500;
  color: var(--text);
  letter-spacing: -0.5px;
  line-height: 1.4;
  cursor: pointer;
  margin: 0;
}
.woocommerce-cart .mhf-cart-crosssell label strong { font-weight: 700; }
.woocommerce-cart a.mhf-cart-continue {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  align-self: flex-start;
  font-size: 15px;
  font-weight: 600;
  color: var(--accent);
  letter-spacing: -0.5px;
  transition: color 0.18s ease;
}
.woocommerce-cart a.mhf-cart-continue:hover { color: var(--btn-dark); }
/* A11y: видимый фокус на ссылке «Продолжить покупки» */
.woocommerce-cart a.mhf-cart-continue:focus-visible {
  outline: 2px solid var(--accent);
  outline-offset: 2px;
  border-radius: 4px;
}

/* ── ПРАВАЯ КОЛОНКА: карточка итога (.cart-collaterals > .cart_totals), sticky ──
   Вендорный .cart-collaterals{width:100%} и .cart_totals{float:right;width:48%} —
   из layout.css (dequeue'нут на cart). Подстрахуемся сбросом float/width. */
.woocommerce-cart .cart-collaterals {
  width: auto;
  float: none;
  position: sticky;
  top: 120px;
  /* Грид-элемент правой колонки .mhf-cart-grid. По умолчанию грид-элемент имеет
     min-width:auto → НЕ сжимается ниже min-content своего .cart_totals (блочная
     таблица + промо-форма дают ~419px). На узком вьюпорте (≤960 грид свёрнут в 1fr,
     theme.css @960) это раздувало колонку за экран → горизонтальный скролл на iPhone.
     min-width:0 разрешает колонке сжаться до ширины трека 1fr. На десктопе трек
     правой колонки фиксирован 400px и контент в него влезает → раскладка не меняется. */
  min-width: 0;
}
.woocommerce-cart .cart-collaterals::before,
.woocommerce-cart .cart-collaterals::after { content: none; }  /* глушим клирфикс-табличку */
.woocommerce-cart .cart_totals {
  width: auto;
  float: none;
  background: var(--bg-soft);
  border-radius: 32px;
  padding: 32px;
  /* Подстраховка к min-width:0 на .cart-collaterals: сама карточка тоже грид/флекс-
     контента не тянет за трек. min-width:0 снимает авто-минимум по min-content
     промо-формы/таблицы; ширина берётся от родителя-колонки, а не от контента. */
  min-width: 0;
}
.woocommerce-cart .cart_totals > h2 {
  font-size: 22px;
  font-weight: 700;
  letter-spacing: -1px;
  color: var(--text);
  margin: 0 0 24px;
  line-height: 1.2;
  /* «Ваш заказ» в одну строку (эталон .summary-title). На живом заголовок ломался
     на 2 строки: наследованный от Neve крупный h2 + letter-spacing давали ширину
     больше колонки. nowrap фиксирует одну строку (п.4). */
  white-space: nowrap;
}
/* Таблица итогов → блочная модель, строки flex space-between с разделителем */
.woocommerce-cart .cart_totals table.shop_table {
  display: block;
  width: 100%;
  border: 0;
  border-collapse: collapse;
  border-radius: 0;
  margin: 0;
  background: transparent;
}
.woocommerce-cart .cart_totals table.shop_table tbody { display: block; }
.woocommerce-cart .cart_totals table.shop_table tr {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  gap: 16px;
  padding: 12px 0;
  border-bottom: 1px solid var(--rule);
}
.woocommerce-cart .cart_totals table.shop_table tr th,
.woocommerce-cart .cart_totals table.shop_table tr td {
  display: block;
  /* Neve: `.woocommerce .cart_totals td,th { padding:20px 15px!important;
     background:0!important; border-bottom:2px!important }` (спецификость 0,2,1, с
     !important). Наш reset (0,4,1) перебивает по спецификости, но вендорный
     !important бьёт любую спецификость без !important — поэтому здесь
     обоснованный !important на нашем скоуп-правиле (правила css-scope: вендор с
     !important → допустим !important на скоупе). Вертикальный ритм задаёт только
     tr (padding:12px 0); ячейки без своих отступов, без двойных линий/фона. */
  padding: 0 !important;
  border: 0 !important;
  background: transparent !important;
  font-weight: 500;
}
.woocommerce-cart .cart_totals table.shop_table tr th {
  font-size: 15px;
  font-weight: 500;
  color: var(--muted);
  letter-spacing: -0.5px;
  text-align: left;
  /* Flex-элемент по умолчанию min-width:auto → НЕ ужимается ниже min-content своего
     текста. В паре с nowrap-значением (td) это раздувало строку шире панели, и
     nowrap-сумма «59 900 ₽» уезжала за правый край (клип на мобиле). min-width:0
     разрешает ЛЕЙБЛУ ужаться/перенестись первым (эталон .summary-row-label —
     без nowrap, переносится), сумма остаётся в панели. */
  min-width: 0;
}
.woocommerce-cart .cart_totals table.shop_table tr td {
  font-size: 15px;
  font-weight: 600;
  color: var(--text);
  letter-spacing: -0.5px;
  /* Значение (nowrap, эталон .summary-row-val) не должно сжиматься — иначе flex
     попытался бы урезать его и nowrap-текст всё равно вылез бы за край. Отдаём
     сжатие лейблу выше, значение держим целым у правого края панели. */
  flex-shrink: 0;
  text-align: right;
  white-space: nowrap;
}
/* Итог крупно (эталон .summary-total): вынесен из таблицы, стоит ПОСЛЕ промокода
   (cart-totals.php, .mhf-summary-total). label 18/700, значение 30/700, ритм
   padding 20px 0 24px (эталон), без разделителя. */
.woocommerce-cart .cart_totals .mhf-summary-total {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  gap: 16px;
  padding: 20px 0 24px;
}
.woocommerce-cart .cart_totals .mhf-summary-total-label {
  font-size: 18px;
  font-weight: 700;
  color: var(--text);
  letter-spacing: -1px;
  /* «Итого» ужимается первым — крупное значение 30px nowrap остаётся в панели (см. th выше). */
  min-width: 0;
}
.woocommerce-cart .cart_totals .mhf-summary-total-val {
  font-size: 30px;
  font-weight: 700;
  color: var(--text);
  letter-spacing: -1px;
  white-space: nowrap;
  text-align: right;
  flex-shrink: 0;
}
.woocommerce-cart .cart_totals .mhf-summary-total-val .amount,
.woocommerce-cart .cart_totals .mhf-summary-total-val strong { font-weight: 700; }

/* Строка «Доставка» — muted, значение переносится (эталон .summary-row .muted) */
.woocommerce-cart .cart_totals table.shop_table tr.mhf-summary-delivery td {
  font-size: 14px;
  font-weight: 500;
  color: var(--muted);
  white-space: normal;
  text-align: right;
  max-width: 200px;
  line-height: 1.4;
}

/* ── ПРОМОКОД в сайдбаре (эталон .summary-promo) — между строками и «Итого» ────
   Отдельная форма .mhf-summary-promo (cart-totals.php). Инпут + кнопка-контур. */
.woocommerce-cart .cart_totals .mhf-summary-promo {
  display: flex;
  gap: 8px;
  margin: 20px 0;
}
.woocommerce-cart .cart_totals .mhf-summary-promo input {
  flex: 1;
  min-width: 0;
  min-height: 48px;
  padding: 12px 16px;
  background: #fff;
  border: 1.6px solid #fff;
  border-radius: 12px;
  font-family: 'Inter', sans-serif;
  font-size: 15px;
  color: var(--text);
  outline: none;
  transition: border-color 0.18s ease;
}
.woocommerce-cart .cart_totals .mhf-summary-promo input:focus { border-color: var(--accent); }
/* A11y: клавиатурный фокус на инпуте промокода — видимое кольцо поверх border-акцента
   (тема/вендор могут гасить outline; возвращаем явно) */
.woocommerce-cart .cart_totals .mhf-summary-promo input:focus-visible {
  outline: 2px solid var(--accent);
  outline-offset: 2px;
}
.woocommerce-cart .cart_totals .mhf-summary-promo button {
  flex-shrink: 0;
  min-height: 48px;
  padding: 0 20px;
  border: 3px solid var(--text);
  background: transparent;
  color: var(--text);
  border-radius: 12px;
  font-family: 'Inter', sans-serif;
  font-size: 15px;
  font-weight: 700;
  letter-spacing: -0.5px;
  cursor: pointer;
  transition: color 0.18s ease, border-color 0.18s ease;
}
.woocommerce-cart .cart_totals .mhf-summary-promo button:hover {
  color: var(--accent);
  border-color: var(--accent);
}
.woocommerce-cart .cart_totals .mhf-summary-promo button:focus-visible {
  outline: 2px solid var(--accent);
  outline-offset: 2px;
}

/* ── СПОЙЛЕР ПРОМОКОДА (t-065, шаг 3) — <details.mhf-promo-details open> ────────
   Рендерится open по умолчанию (см. cart-totals.php). ДЕСКТОП-БАЗА: ярлык-summary
   скрыт → форма видна как раньше, ката нет. На @640 (ниже, в блоке корзины) summary
   показывается кликабельным ярлыком, а JS снимает open → стартует свёрнуто.
   .mhf-promo-details без своих отступов — margin несёт сама форма (.mhf-summary-promo). */
.woocommerce-cart .cart_totals .mhf-promo-details { margin: 0; }
.woocommerce-cart .cart_totals .mhf-promo-summary { display: none; }

/* Подпись под кнопкой оформления (эталон .summary-pay-note) */
.woocommerce-cart .cart_totals .mhf-summary-pay-note {
  margin: 14px 0 0;
  font-size: 13px;
  font-weight: 500;
  color: var(--muted);
  letter-spacing: -0.3px;
  line-height: 1.5;
  text-align: center;
}

/* Кнопка «Оформить заказ» (.wc-proceed-to-checkout > a.checkout-button) → btn-primary во всю ширину */
.woocommerce-cart .cart_totals .wc-proceed-to-checkout { margin-top: 20px; padding: 0; }
.woocommerce-cart .cart_totals a.checkout-button,
.woocommerce-cart .cart_totals a.checkout-button.button {
  display: flex;
  align-items: center;
  justify-content: center;
  width: 100%;
  min-height: 60px;
  padding: 20px 24px;
  background: var(--accent);
  color: #fff;
  border: none;
  border-radius: 18px;
  font-family: 'Inter', sans-serif;
  font-size: 18px;
  font-weight: 600;
  line-height: 1.3;
  letter-spacing: -1px;
  text-align: center;
  transition: background-color 0.3s ease;
}
.woocommerce-cart .cart_totals a.checkout-button:hover { background: var(--btn-dark); color: #fff; }
/* A11y: видимый клавиатурный фокус на главной CTA (кольцо светлым --accent-2 на
   фиолетовом фоне для контраста) */
.woocommerce-cart .cart_totals a.checkout-button:focus-visible {
  outline: 3px solid var(--accent-2);
  outline-offset: 2px;
}

/* ── ПУСТАЯ КОРЗИНА: панель .mhf-cart-empty из cart-empty.php ─────────────────
   Состояние выбирает PHP (cart-empty.php рендерится только при is_empty).
   Классы шаблона (BEM): .mhf-cart-empty > .mhf-cart-empty__icon(svg) +
   .wc-empty-cart-message (хук woocommerce_cart_is_empty) + .mhf-cart-empty__cta.
   Панель по эталону docs/mockups/page-cart.html (.cart-empty): bg-soft, radius 32,
   центрирование колонкой. Скоуп строго .woocommerce-cart. */
.woocommerce-cart .mhf-cart-empty {
  display: flex;
  flex-direction: column;
  align-items: center;
  text-align: center;
  gap: 20px;
  max-width: 640px;
  margin: 0 auto;
  padding: 72px 32px;
  background: var(--bg-soft);
  border-radius: 32px;
}
/* Иконка: в эталоне SVG 44px в белой плашке 96px. Здесь плашки в разметке нет —
   ограничиваем сам SVG (без ограничения он раздувался на весь экран). */
.woocommerce-cart .mhf-cart-empty__icon svg {
  display: block;
  width: 80px;
  height: 80px;
  color: var(--accent);   /* stroke=currentColor в шаблоне */
}
/* Заголовок «Корзина пуста» — вывод wc_empty_cart_message (.wc-empty-cart-message).
   Сбрасываем возможный notices-вид (плашка .woocommerce-info), приводим к тексту. */
.woocommerce-cart .mhf-cart-empty .wc-empty-cart-message {
  margin: 0;
  padding: 0;
  background: transparent;
  border: 0;
  font-size: 26px;
  font-weight: 700;
  letter-spacing: -1px;
  line-height: 1.2;
  color: var(--text);
}
.woocommerce-cart .mhf-cart-empty .wc-empty-cart-message::before { content: none; }  /* убираем иконку-плашку notices */
/* CTA «Перейти в каталог» → основная кнопка (значения из .checkout-button выше). */
.woocommerce-cart .mhf-cart-empty__cta {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-height: 60px;
  padding: 20px 32px;
  background: var(--accent);
  color: #fff;
  border: none;
  border-radius: 18px;
  font-family: 'Inter', sans-serif;
  font-size: 18px;
  font-weight: 600;
  letter-spacing: -1px;
  transition: background-color 0.3s ease;
}
.woocommerce-cart .mhf-cart-empty__cta:hover { background: var(--btn-dark); color: #fff; }

/* ── АДАПТИВ ────────────────────────────────────────────────────────────────── */
/* ≤1024: скрываем «цена за шт», строка в 5 колонок */
@media (max-width: 1024px) {
  /* Скоуп .mhf-cart-list .cart_item (3 класса) — под специфичность БАЗОВОГО правила
     grid-template строки (.woocommerce-cart .mhf-cart-list .cart_item, стр. 3573).
     Без .mhf-cart-list селектор .woocommerce-cart .cart_item (2 класса) проигрывал
     базе по специфичности → grid-template-columns строки НЕ переключался на узких
     экранах (десктопные 6 колонок оставались, имя сжато, remove в лишней колонке). */
  .woocommerce-cart .mhf-cart-list .cart_item {
    grid-template-columns: 88px minmax(0, 1fr) auto auto 44px;
    gap: 18px;
  }
  .woocommerce-cart .cart_item .product-price { display: none; }
  .woocommerce-cart .cart_item .product-thumbnail,
  .woocommerce-cart .cart_item .product-thumbnail a,
  .woocommerce-cart .cart_item .product-thumbnail img { width: 88px; height: 88px; }
  /* Боковой отступ фото — пропорционально уменьшенной 88px-подложке */
  .woocommerce-cart .cart_item .product-thumbnail img { padding: 11px 14px; }
}
/* ≤960: итог уходит вниз (одна колонка), summary static */
@media (max-width: 960px) {
  .woocommerce-cart .mhf-cart-grid { grid-template-columns: 1fr; gap: 28px; }
  .woocommerce-cart .cart-collaterals { position: static; }
  .woocommerce-cart .cart_totals { max-width: 480px; }
}
/* ≤640: строка в 3 колонки с переносом — thumb+инфо+remove сверху, цена/степпер/сумма во 2-й ряд */
@media (max-width: 640px) {
  /* Отступ заголовок→список на мобиле (эталон @768 .cart-head margin-bottom:28px) */
  .woocommerce-cart .nv-page-title { margin-bottom: 28px; }
  .woocommerce-cart .mhf-cart-list { padding: 4px 20px; }
  /* Скоуп .mhf-cart-list .cart_item — под специфичность базовой строки (стр. 3573),
     иначе мобильные колонки не перебивают десктопные 6 (см. коммент @1024).
     МОБИЛА БЕЗ ФОТО (решение владельца — осознанное отклонение от эталона
     page-cart.html): миниатюра скрыта, колонка фото убрана. 2 колонки:
     имя | ×  (ряд 1); цена/шт (ряд 2) и степпер (ряд 3) слева, сумма справа. */
  .woocommerce-cart .mhf-cart-list .cart_item {
    /* minmax(0,1fr) вместо 1fr: 1fr === minmax(auto,1fr) → auto-минимум трека равен
       min-content ячейки .product-name. Длинное неразрывное слово в имени (артикул/
       модель без пробелов) раздувало бы этот трек за вьюпорт даже при min-width:0
       на самой ячейке (min-width ячейки не влияет на auto-минимум трека). minmax(0,…)
       обнуляет минимум трека → колонка сжимается до вьюпорта, имя переносится. */
    grid-template-columns: minmax(0, 1fr) auto;
    row-gap: 16px;
    column-gap: 14px;
    padding: 22px 0;
  }
  /* Гарантируем перенос длинного слова в имени (иначе даже при minmax(0,1fr)
     единичное длинное слово переполнит ячейку и вылезет за трек). */
  .woocommerce-cart .mhf-cart-list .cart_item .product-name { overflow-wrap: anywhere; }
  /* Фото скрыто на мобиле — колонки в grid под него больше нет.
     .mhf-cart-list в селекторе обязателен: базовое правило (стр. 3596) имеет 4 класса
     и display:flex — без .mhf-cart-list скрытие (3 класса) проигрывает по специфичности
     и фото рисуется на телефоне. */
  .woocommerce-cart .mhf-cart-list .cart_item .product-thumbnail { display: none; }
  .woocommerce-cart .cart_item .product-name   { grid-column: 1; grid-row: 1; }
  .woocommerce-cart .cart_item .product-remove { grid-column: 2; grid-row: 1; align-self: start; }
  /* Вернуть цену/шт слева во 2-м ряду */
  .woocommerce-cart .cart_item .product-price {
    display: block; grid-column: 1; grid-row: 2; text-align: left; min-width: 0; align-self: center;
  }
  .woocommerce-cart .cart_item .product-quantity { grid-column: 1; grid-row: 3; }
  /* Степпер НЕ растягивается на всю ячейку-грид: width max-content (эталон стр. 487).
     Иначе .quantity занял бы всю колонку и кнопки −/+ разъехались бы по краям. */
  .woocommerce-cart .cart_item .product-quantity .quantity { width: max-content; }
  .woocommerce-cart .cart_item .product-subtotal {
    grid-column: 2; grid-row: 2 / 4; text-align: right; min-width: 0; align-self: center;
  }
  /* Плашка cross-sell — компактнее на узком экране (эталон стр. 489) */
  .woocommerce-cart .mhf-cart-crosssell { padding: 16px 18px; }
  /* Сайдбар «Ваш заказ» — на всю ширину под списком (эталон .summary-card @640) */
  .woocommerce-cart .cart_totals { max-width: 100%; padding: 24px; }
  .woocommerce-cart .cart_totals .mhf-summary-total-val { font-size: 26px; }

  /* ── Спойлер промокода на мобиле (t-065, шаг 3) ─────────────────────────────
     Форма скрыта под ярлыком: JS снял open → нативный <details> прячет форму.
     Возвращаем summary кликабельным ярлыком в тоне сайдбара (радиусы/шрифт как
     .mhf-summary-promo input, 48px тач-таргет). Убираем дефолтный disclosure-
     triangle, рисуем свою стрелку-шеврон ::after, поворот при [open]. */
  .woocommerce-cart .cart_totals .mhf-promo-summary {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 8px;
    min-height: 48px;
    margin: 20px 0 0;
    padding: 12px 16px;
    background: #fff;
    border-radius: 12px;
    font-family: 'Inter', sans-serif;
    font-size: 15px;
    font-weight: 700;
    letter-spacing: -0.5px;
    color: var(--text);
    list-style: none;   /* убрать нативный маркер (Firefox/стандарт) */
    cursor: pointer;
  }
  /* Убрать нативный треугольник в WebKit/Blink */
  .woocommerce-cart .cart_totals .mhf-promo-summary::-webkit-details-marker { display: none; }
  /* Свой маркер-шеврон справа; поворот вверх когда details открыт */
  .woocommerce-cart .cart_totals .mhf-promo-summary::after {
    content: "";
    flex-shrink: 0;
    width: 10px;
    height: 10px;
    border-right: 2px solid var(--text);
    border-bottom: 2px solid var(--text);
    transform: rotate(45deg);
    transition: transform 0.2s ease;
  }
  .woocommerce-cart .cart_totals .mhf-promo-details[open] .mhf-promo-summary::after {
    transform: rotate(-135deg);
  }
  /* A11y: видимый клавиатурный фокус на ярлыке (как у input/button промо) */
  .woocommerce-cart .cart_totals .mhf-promo-summary:focus-visible {
    outline: 2px solid var(--accent);
    outline-offset: 2px;
  }
  /* Форма под ярлыком — верхний margin меньше (ярлык уже дал отступ сверху) */
  .woocommerce-cart .cart_totals .mhf-promo-details[open] .mhf-summary-promo {
    margin: 12px 0 0;
  }
}

/* ══════════════════════════════════════════════════════════════════════════════
   ОФОРМЛЕНИЕ ЗАКАЗА (/checkout/) — переверстка магазина, t-065.
   Эталон: docs/mockups/page-checkout.html. Шаблоны:
   woocommerce/checkout/form-checkout.php (обёртка .checkout-grid / .checkout-forms /
   .checkout-summary) + woocommerce/checkout/review-order.php (таблица итога).

   ВНИМАНИЕ (реальная разметка ≠ эталон): эталон рисует кастомный HTML
   (.co-section / .co-choice / .summary-item). НАШИ шаблоны выводят СТАНДАРТНЫЙ
   WooCommerce через хуки (woocommerce_checkout_billing/_shipping/_order_review),
   т.е. .woocommerce-billing-fields, p.form-row, #payment ul.payment_methods,
   table.woocommerce-checkout-review-order-table, #place_order. Здесь мы стилизуем
   ЭТУ реальную разметку в визуальном языке эталона (карточки bg-soft, поля radius
   12 / min-height 48 / focus accent, радио-плитки, распластанная таблица итога).
   Кастомные классы эталона (.co-section-num, .summary-thumb, .co-reveal и пр.)
   в реальной разметке ОТСУТСТВУЮТ — под них НЕ пишем (см. отчёт).

   КАСКАД (почему без !important и без @layer):
   На is_checkout() (кроме order-received) в functions.php dequeue'нуты
   woocommerce-layout (.col2-set .col-1/.col-2{float;width:47%}) + woocommerce-
   smallscreen (td{display:block;text-align:right!important}+td::before). Остаётся
   НЕслойный woocommerce-general (.shop_table border/radius, .button, #payment,
   .form-row, .input-text) + neve-woocommerce. Наши правила НЕслойные и скоуплены
   на .woocommerce-checkout → специфичность (0,2..3,x) перебивает вендор (0,0..1,x)
   штатно. @layer НЕ используем (слой всегда слабее неслойного вендора — на этом
   уронило откат f17de40).

   СКОУП: КАЖДЫЙ селектор начинается с .woocommerce-checkout. Голых .col2-set/
   .form-row/#payment/.button/.shop_table НЕТ — чтобы не задеть /cart, /shop, single.
   ══════════════════════════════════════════════════════════════════════════════ */

/* ── Заголовок «Ваш заказ» над колонками (в form-checkout.php внутри .checkout-summary) ── */
.woocommerce-checkout #order_review_heading {
  font-size: 20px;
  font-weight: 700;
  letter-spacing: -1px;
  color: var(--text);
  margin: 0 0 20px;
  padding: 0;
}

/* ── СБРОС вендорного грида на самой форме ─────────────────────────────────────
   Neve/вендор навешивает form.woocommerce-checkout { display:grid } с треком
   ~758px+506px. Из-за этого наш .checkout-grid попадает в узкий 758px-трек и
   левая колонка .checkout-forms ужимается до ~270px (probe 21.07: form=grid,
   grid-template-columns: 758.875px 505.922px; .checkout-forms=270.875px).
   Возвращаем форме block-поток, чтобы .checkout-grid занял 100% ширины. Скоуп
   .woocommerce-checkout form.checkout (0,2,0 + тег) перебивает вендор без !important. */
.woocommerce-checkout form.checkout {
  display: block;
}

/* ── NOTICE-плашка чекаута → info-чип (не зелёный success) ──────────────────────
   Woo сверху чекаута рисует .woocommerce-message (зелёная, «товар добавлен» +
   ссылка). Зелёного нет в палитре → приводим к info-фону дизайн-системы (как
   купон-тоггл). Скоуп .woocommerce-checkout .woocommerce-message (0,2,0) идёт
   позже общего .woocommerce .woocommerce-message (0,2,0) → перебивает по каскаду.
   /cart и /shop не задеты (нет .woocommerce-checkout). Без !important. */
.woocommerce-checkout .woocommerce-message {
  background: var(--alert);
  color: var(--text);
  border: 0;
  border-radius: 14px;
}
.woocommerce-checkout .woocommerce-message::before { content: none; }

/* ── ДВУХКОЛОНОЧНАЯ СЕТКА: формы слева, sticky-карточка справа ────────────────── */
.woocommerce-checkout .checkout-grid {
  display: grid;
  grid-template-columns: minmax(0, 1fr) 440px;
  gap: 48px;
  align-items: start;
}
.woocommerce-checkout .checkout-forms {
  display: flex;
  flex-direction: column;
  gap: 20px;
  min-width: 0;
  counter-reset: co-section; /* нумерация плашек-шапок секций (см. ниже) */
}

/* ── #customer_details: billing / shipping идут в столбик (НЕ float — layout снят) ──
   .col2-set/.col-1/.col-2 без вендорного woocommerce-layout не флоатятся; фиксируем блок. */
.woocommerce-checkout #customer_details.col2-set {
  display: flex;
  flex-direction: column;
  gap: 20px;
  width: 100%;
  float: none;
}
.woocommerce-checkout #customer_details .col-1,
.woocommerce-checkout #customer_details .col-2 {
  width: 100%;
  float: none;
  padding: 0;
  margin: 0;
}
/* Пустая .col-2 (нет shipping-полей) не должна давать лишний зазор */
.woocommerce-checkout #customer_details .col-2:empty { display: none; }

/* ── СЕКЦИИ-КАРТОЧКИ (billing / shipping / additional / #order_review внутренние) ──
   Оборачиваем нативные блоки WooCommerce в карточки bg-soft radius 32 (визуал .co-section). */
.woocommerce-checkout .woocommerce-billing-fields,
.woocommerce-checkout .woocommerce-shipping-fields,
.woocommerce-checkout .woocommerce-additional-fields,
.woocommerce-checkout .woocommerce-account-fields {
  background: var(--bg-soft);
  border-radius: 32px;
  padding: 32px;
}
/* Заголовки секций (h3 «Контактные данные», shipping-toggle, «Детали» и т.п.).
   Нумерованная плашка .co-section-num эталона: в нативном DOM её НЕТ, рисуем
   CSS-COUNTER'ом. Счётчик заведён на .checkout-forms (counter-reset выше), тут
   каждый h3-секции инкрементит его и печатает через ::before — при отсутствии
   секции (напр. shipping-адрес скрыт до чекбокса) нумерация не «дырявится»
   статикой, а идёт по факту наличия шапки. margin-right плашки = 14 (эталон). */
.woocommerce-checkout .woocommerce-billing-fields > h3,
.woocommerce-checkout .woocommerce-shipping-fields > h3,
.woocommerce-checkout .woocommerce-additional-fields > h3 {
  display: flex;
  align-items: center;
  font-size: 20px;
  font-weight: 700;
  letter-spacing: -1px;
  color: var(--text);
  line-height: 1.2;
  margin: 0 0 24px;
  padding: 0;
  counter-increment: co-section;
}
.woocommerce-checkout .woocommerce-billing-fields > h3::before,
.woocommerce-checkout .woocommerce-shipping-fields > h3::before,
.woocommerce-checkout .woocommerce-additional-fields > h3::before {
  content: counter(co-section);
  display: inline-flex;
  align-items: center;
  justify-content: center;
  flex-shrink: 0;
  width: 34px;
  height: 34px;
  margin-right: 14px;
  background: #fff;
  border-radius: 12px;
  color: var(--accent);
  font-size: 16px;
  font-weight: 700;
  line-height: 1;
  letter-spacing: 0;
}

/* ── ПОЛЯ ФОРМЫ (p.form-row / label / input / select / textarea) ──────────────── */
/* Раскладка полей внутри секции: 2 колонки, wide на всю ширину. */
.woocommerce-checkout .woocommerce-billing-fields__field-wrapper,
.woocommerce-checkout .woocommerce-additional-fields__field-wrapper,
.woocommerce-checkout .shipping_address .woocommerce-shipping-fields__field-wrapper {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 16px;
}
.woocommerce-checkout p.form-row {
  display: flex;
  flex-direction: column;
  margin: 0;
  padding: 0;
}
.woocommerce-checkout p.form-row-wide,
.woocommerce-checkout p.form-row.notes,
.woocommerce-checkout p.form-row.create-account,
.woocommerce-checkout p.form-row.validate-required.woocommerce-invalid { grid-column: 1 / -1; }
.woocommerce-checkout p.form-row-first { grid-column: 1 / 2; }
.woocommerce-checkout p.form-row-last  { grid-column: 2 / 3; }

.woocommerce-checkout p.form-row label {
  font-size: 14px;
  font-weight: 600;
  color: var(--text);
  margin-bottom: 6px;
  letter-spacing: -0.5px;
  line-height: 1.3;
}
.woocommerce-checkout p.form-row label .required,
.woocommerce-checkout p.form-row label abbr.required {
  color: var(--accent);
  border: none;
  text-decoration: none;
}
/* Инпуты/селекты/textarea: radius 12, border 1.6px rule, min-height 48, focus accent.
   outline НЕ убиваем полностью — заменяем на видимый focus-ring через box-shadow. */
.woocommerce-checkout p.form-row .input-text,
.woocommerce-checkout p.form-row input.input-text,
.woocommerce-checkout p.form-row select,
.woocommerce-checkout p.form-row textarea,
.woocommerce-checkout .select2-container .select2-selection--single {
  width: 100%;
  min-height: 48px;
  padding: 12px 16px;
  background: #fff;
  border: 1.6px solid var(--rule);
  border-radius: 12px;
  font-family: 'Inter', sans-serif;
  font-size: 15px;
  font-weight: 500;
  color: var(--text);
  letter-spacing: -0.5px;
  line-height: 1.4;
  transition: border-color 0.18s ease, box-shadow 0.18s ease;
  box-sizing: border-box;
}
.woocommerce-checkout p.form-row textarea {
  min-height: 110px;
  resize: vertical;
  line-height: 1.5;
  padding-top: 14px;
}
.woocommerce-checkout p.form-row input.input-text::placeholder,
.woocommerce-checkout p.form-row textarea::placeholder { color: var(--muted); }
.woocommerce-checkout p.form-row input.input-text:focus,
.woocommerce-checkout p.form-row select:focus,
.woocommerce-checkout p.form-row textarea:focus {
  border-color: var(--accent);
  box-shadow: 0 0 0 3px var(--accent-2);
  outline: none;
}
/* Ошибки валидации WooCommerce */
.woocommerce-checkout p.form-row.woocommerce-invalid input.input-text,
.woocommerce-checkout p.form-row.woocommerce-invalid select,
.woocommerce-checkout p.form-row.woocommerce-invalid .select2-container .select2-selection--single {
  border-color: #EF3B3B;
}

/* select2 (страна/область) — подгоняем высоту стрелки/текста под наш инпут */
.woocommerce-checkout .select2-container .select2-selection--single {
  display: flex;
  align-items: center;
}
.woocommerce-checkout .select2-container--default .select2-selection--single .select2-selection__rendered {
  padding: 0;
  color: var(--text);
  line-height: 1.4;
}
.woocommerce-checkout .select2-container--default .select2-selection--single .select2-selection__arrow {
  height: 100%;
  top: 0;
  right: 10px;
}

/* ── SHIP TO DIFFERENT ADDRESS (чекбокс-заголовок shipping) ───────────────────── */
.woocommerce-checkout .woocommerce-shipping-fields h3#ship-to-different-address {
  display: flex;
  align-items: center;
  gap: 10px;
  margin: 0;
}
.woocommerce-checkout .woocommerce-shipping-fields h3 label {
  display: inline-flex;
  align-items: center;
  gap: 10px;
  font-size: 20px;
  font-weight: 700;
  letter-spacing: -1px;
  color: var(--text);
  margin: 0;
  cursor: pointer;
}
.woocommerce-checkout .woocommerce-shipping-fields h3 input.woocommerce-form__input-checkbox {
  width: 20px;
  height: 20px;
  accent-color: var(--accent);
  margin: 0;
  cursor: pointer;
}
.woocommerce-checkout .shipping_address { margin-top: 24px; }

/* ── ПРАВАЯ КОЛОНКА: sticky-карточка «Ваш заказ» ──────────────────────────────── */
.woocommerce-checkout .checkout-summary {
  position: sticky;
  top: 108px;
}
.woocommerce-checkout .woocommerce-checkout-review-order {
  background: var(--bg-soft);
  border-radius: 24px;
  padding: 28px;
}

/* ── ОБЗОР ЗАКАЗА: распластываем таблицу в карточку строк (как в корзине) ──────── */
.woocommerce-checkout table.woocommerce-checkout-review-order-table {
  display: block;
  width: 100%;
  border: 0;
  border-collapse: collapse;
  border-radius: 0;
  margin: 0;
  background: transparent;
}
.woocommerce-checkout table.woocommerce-checkout-review-order-table thead { display: none; }
.woocommerce-checkout table.woocommerce-checkout-review-order-table tbody,
.woocommerce-checkout table.woocommerce-checkout-review-order-table tfoot { display: block; width: 100%; }

/* Строки товаров (tbody tr): название/кол-во слева, сумма справа */
.woocommerce-checkout table.woocommerce-checkout-review-order-table tbody tr.cart_item {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  gap: 14px;
  padding: 14px 0;
  border-bottom: 1px solid #e4e4ee;
  background: transparent;
}
.woocommerce-checkout table.woocommerce-checkout-review-order-table tbody tr.cart_item:first-child { padding-top: 0; }
.woocommerce-checkout table.woocommerce-checkout-review-order-table tbody tr.cart_item td {
  display: block;
  padding: 0;
  border: 0;
  background: transparent;
  vertical-align: baseline;
}
/* На случай неснятого smallscreen (страховка): гасим псевдо-подписи ячеек */
.woocommerce-checkout table.woocommerce-checkout-review-order-table td::before { content: none; }
.woocommerce-checkout table.woocommerce-checkout-review-order-table tbody tr.cart_item td.product-name {
  font-size: 14px;
  font-weight: 600;
  color: var(--text);
  letter-spacing: -0.5px;
  line-height: 1.35;
  min-width: 0;
  text-align: left;
}
.woocommerce-checkout table.woocommerce-checkout-review-order-table tbody tr.cart_item td.product-name .product-quantity {
  color: var(--muted);
  font-weight: 500;
}
.woocommerce-checkout table.woocommerce-checkout-review-order-table tbody tr.cart_item td.product-total {
  font-size: 15px;
  font-weight: 700;
  color: var(--text);
  letter-spacing: -0.5px;
  white-space: nowrap;
  text-align: right;
  flex-shrink: 0;
}

/* Строки итога (tfoot: subtotal / shipping / fee / tax / total) */
.woocommerce-checkout table.woocommerce-checkout-review-order-table tfoot tr {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  gap: 12px;
  padding: 10px 0;
  background: transparent;
  border: 0;
}
.woocommerce-checkout table.woocommerce-checkout-review-order-table tfoot tr.cart-subtotal { padding-top: 18px; }
.woocommerce-checkout table.woocommerce-checkout-review-order-table tfoot tr th,
.woocommerce-checkout table.woocommerce-checkout-review-order-table tfoot tr td {
  display: block;
  padding: 0;
  border: 0;
  background: transparent;
  font-weight: 500;
}
.woocommerce-checkout table.woocommerce-checkout-review-order-table tfoot tr th {
  font-size: 14px;
  font-weight: 500;
  color: var(--muted);
  letter-spacing: -0.5px;
  text-align: left;
}
.woocommerce-checkout table.woocommerce-checkout-review-order-table tfoot tr td {
  font-size: 15px;
  font-weight: 600;
  color: var(--text);
  letter-spacing: -0.5px;
  white-space: nowrap;
  text-align: right;
}
/* Способ доставки внутри review (radio + label вендора) — компактно, без буллетов */
.woocommerce-checkout table.woocommerce-checkout-review-order-table tfoot tr.woocommerce-shipping-totals td ul#shipping_method {
  margin: 0;
  padding: 0;
  list-style: none;
  text-align: right;
}
.woocommerce-checkout table.woocommerce-checkout-review-order-table tfoot tr.woocommerce-shipping-totals td ul#shipping_method li {
  margin: 0 0 4px;
  font-weight: 600;
  color: var(--text);
}
/* ИТОГО крупно, с разделителем сверху */
.woocommerce-checkout table.woocommerce-checkout-review-order-table tfoot tr.order-total {
  margin-top: 8px;
  padding-top: 18px;
  border-top: 1px solid #e4e4ee;
  align-items: baseline;
}
.woocommerce-checkout table.woocommerce-checkout-review-order-table tfoot tr.order-total th {
  font-size: 18px;
  font-weight: 700;
  color: var(--text);
  letter-spacing: -1px;
}
.woocommerce-checkout table.woocommerce-checkout-review-order-table tfoot tr.order-total td {
  font-size: 28px;
  font-weight: 700;
  color: var(--text);
  letter-spacing: -1px;
}
.woocommerce-checkout table.woocommerce-checkout-review-order-table tfoot tr.order-total td .amount { font-weight: 700; }

/* ── СПОСОБЫ ОПЛАТЫ (#payment) — плитки, как .co-choice в эталоне ──────────────── */
.woocommerce-checkout #payment {
  background: transparent;
  border-radius: 0;
  margin-top: 22px;
}
.woocommerce-checkout #payment ul.payment_methods {
  list-style: none;
  margin: 0;
  padding: 0;
  border: 0;
  display: flex;
  flex-direction: column;
  gap: 12px;
}
.woocommerce-checkout #payment ul.payment_methods li.wc_payment_method {
  background: #fff;
  border: 1.6px solid var(--rule);
  border-radius: 16px;
  padding: 18px 20px;
  margin: 0;
  transition: border-color 0.18s ease, box-shadow 0.18s ease;
  /* radio + label в одну строку, payment_box переносится под них (см. flex-basis:100% ниже).
     Нативная разметка Woo: input[type=radio] и label — прямые siblings li (не вложены). */
  display: flex;
  align-items: center;
  flex-wrap: wrap;
  gap: 14px;
}
/* hover-подсветка рамки — как у .co-choice в эталоне */
.woocommerce-checkout #payment ul.payment_methods li.wc_payment_method:hover {
  border-color: #d9d9e6;
}
.woocommerce-checkout #payment ul.payment_methods li.wc_payment_method:has(input:checked):hover {
  border-color: var(--accent);
}
/* Плитка активна при выбранном radio внутри неё */
.woocommerce-checkout #payment ul.payment_methods li.wc_payment_method:has(input:checked) {
  border-color: var(--accent);
  box-shadow: 0 0 0 1px var(--accent);
}
.woocommerce-checkout #payment ul.payment_methods li.wc_payment_method > label {
  flex: 1 1 auto;
  min-width: 0;
  display: flex;
  align-items: center;
  gap: 14px;
  font-size: 15px;
  font-weight: 700;
  color: var(--text);
  letter-spacing: -0.5px;
  cursor: pointer;
  margin: 0;
}
.woocommerce-checkout #payment ul.payment_methods li.wc_payment_method > input[type="radio"] {
  width: 20px;
  height: 20px;
  accent-color: var(--accent);
  margin: 0;
  flex-shrink: 0;
  cursor: pointer;
}
.woocommerce-checkout #payment ul.payment_methods li.wc_payment_method > label img {
  display: inline-block;
  max-height: 28px;
  width: auto;
  margin-left: auto;
}
/* Описание метода (раскрывается под label) — на всю ширину плитки, ниже radio+label */
.woocommerce-checkout #payment div.payment_box {
  flex-basis: 100%;
  background: var(--bg-soft);
  border-radius: 12px;
  margin: 12px 0 0;
  padding: 14px 16px;
  font-size: 13px;
  font-weight: 500;
  color: var(--text);
  line-height: 1.5;
  letter-spacing: -0.3px;
}
.woocommerce-checkout #payment div.payment_box::before { content: none; }  /* гасим вендорную стрелку-треугольник */
.woocommerce-checkout #payment div.payment_box p { margin: 0; }

/* ── СОГЛАСИЕ (terms) ─────────────────────────────────────────────────────────── */
.woocommerce-checkout #payment .woocommerce-terms-and-conditions-wrapper { margin-top: 16px; }
.woocommerce-checkout p.form-row.validate-required.terms,
.woocommerce-checkout .woocommerce-terms-and-conditions-checkbox-text {
  font-size: 12px;
  font-weight: 500;
  color: var(--muted);
  line-height: 1.5;
  letter-spacing: -0.3px;
}
.woocommerce-checkout p.woocommerce-form-login__submit,
.woocommerce-checkout p.validate-required label.woocommerce-form__label-for-checkbox {
  display: flex;
  align-items: flex-start;
  gap: 10px;
  margin: 0;
}
.woocommerce-checkout input#terms,
.woocommerce-checkout .woocommerce-form__input-checkbox {
  width: 20px;
  height: 20px;
  accent-color: var(--accent);
  margin: 1px 0 0;
  flex-shrink: 0;
  cursor: pointer;
}
.woocommerce-checkout .woocommerce-terms-and-conditions-checkbox-text a {
  color: var(--muted);
  text-decoration: underline;
}
.woocommerce-checkout .woocommerce-terms-and-conditions-checkbox-text a:hover { color: var(--accent); }

/* ── ФИНАЛЬНЫЙ CTA #place_order (full-width, btnMd primary) ────────────────────── */
.woocommerce-checkout #payment .place-order,
.woocommerce-checkout #payment .form-row.place-order { margin-top: 20px; padding: 0; }
.woocommerce-checkout #place_order,
.woocommerce-checkout button#place_order {
  display: flex;
  align-items: center;
  justify-content: center;
  width: 100%;
  min-height: 60px;
  padding: 20px 24px;
  background: var(--accent);
  color: #fff;
  border: none;
  border-radius: 18px;
  font-family: 'Inter', sans-serif;
  font-size: 18px;
  font-weight: 600;
  line-height: 1.3;
  letter-spacing: -1px;
  cursor: pointer;
  transition: background-color 0.3s ease;
}
.woocommerce-checkout #place_order:hover,
.woocommerce-checkout button#place_order:hover { background: var(--btn-dark); color: #fff; }
.woocommerce-checkout #place_order:focus-visible {
  outline: 3px solid var(--accent-2);
  outline-offset: 2px;
}

/* ── Строка-реассуранс под кнопкой «Оформить» ─────────────────────────────────
   Есть в эталоне docs/mockups/page-checkout.html (.summary-reassure). Выводится
   PHP-хуком woocommerce_review_order_after_submit (functions.php). Стиль перенесён
   из эталона 1:1, скоуп .woocommerce-checkout. */
.woocommerce-checkout .summary-reassure {
  display: flex;
  align-items: center;
  gap: 8px;
  margin-top: 14px;
  font-size: 12px;
  font-weight: 600;
  color: var(--accent);
  letter-spacing: -0.3px;
}
.woocommerce-checkout .summary-reassure svg {
  width: 15px;
  height: 15px;
  stroke: var(--accent);
  fill: none;
  stroke-width: 2;
  stroke-linecap: round;
  stroke-linejoin: round;
  flex-shrink: 0;
}

/* Спиннер AJAX-блокировки WooCommerce (.blockUI overlay) не ломаем — оставляем вендору. */

/* ── АДАПТИВ ────────────────────────────────────────────────────────────────── */
/* ≤1240: сузить правую колонку */
@media (max-width: 1240px) {
  .woocommerce-checkout .checkout-grid { grid-template-columns: minmax(0, 1fr) 400px; gap: 32px; }
}
@media (max-width: 1024px) {
  .woocommerce-checkout .checkout-grid { grid-template-columns: minmax(0, 1fr) 360px; gap: 24px; }
}
/* ≤960: карточка заказа уходит вниз, sticky снять */
@media (max-width: 960px) {
  .woocommerce-checkout .checkout-grid { grid-template-columns: 1fr; gap: 24px; }
  .woocommerce-checkout .checkout-summary { position: static; top: auto; max-width: 560px; }
}
/* ≤640: поля в одну колонку; кнопка остаётся full-width */
@media (max-width: 640px) {
  .woocommerce-checkout .woocommerce-billing-fields__field-wrapper,
  .woocommerce-checkout .woocommerce-additional-fields__field-wrapper,
  .woocommerce-checkout .shipping_address .woocommerce-shipping-fields__field-wrapper {
    grid-template-columns: 1fr;
  }
  .woocommerce-checkout p.form-row-first,
  .woocommerce-checkout p.form-row-last { grid-column: 1 / -1; }
  .woocommerce-checkout .woocommerce-billing-fields,
  .woocommerce-checkout .woocommerce-shipping-fields,
  .woocommerce-checkout .woocommerce-additional-fields { padding: 24px; border-radius: 24px; }
  .woocommerce-checkout .checkout-summary { max-width: 100%; }
  .woocommerce-checkout .woocommerce-checkout-review-order { padding: 24px; }
  .woocommerce-checkout table.woocommerce-checkout-review-order-table tfoot tr.order-total td { font-size: 24px; }
}

/* ── КУПОН на чекауте (woocommerce_before_checkout_form → .woocommerce-form-coupon-toggle) ──
   Нативный тоггл «Есть купон?» рендерит вендорную ссылку внутри .woocommerce-info.
   На этом сайте .woocommerce-info глобально стилизован как info-чип (клон .info-alert,
   ~стр.3243: фон --alert, бордер --accent, ::before-иконка). Для купона снимаем алерт-вид
   и подаём как ненавязчивый тоггл + аккуратную форму в языке чекаута.
   СКОУП: .woocommerce-checkout .woocommerce-form-coupon-toggle … (0,3,x) перебивает
   глобальный .woocommerce .woocommerce-info (0,2,0) штатно, БЕЗ !important; /cart и /shop
   не задеты (там нет .woocommerce-checkout и своего .woocommerce-info тоггла). */
.woocommerce-checkout .woocommerce-form-coupon-toggle .woocommerce-info {
  background: transparent;
  border: 0;
  border-left: 0;
  border-radius: 0;
  padding: 0;
  margin: 0 0 20px;
  color: var(--muted);
  font-size: 14px;
  font-weight: 500;
  letter-spacing: -0.5px;
  line-height: 1.4;
}
/* Убираем вендорную/нашу инфо-иконку ::before */
.woocommerce-checkout .woocommerce-form-coupon-toggle .woocommerce-info::before {
  content: none;
  display: none;
}
/* Ссылка-тоггл «Есть купон? …» — аккуратная accent-ссылка */
.woocommerce-checkout .woocommerce-form-coupon-toggle .woocommerce-info a.showcoupon {
  color: var(--accent);
  font-size: 14px;
  font-weight: 600;
  letter-spacing: -0.5px;
  text-decoration: none;
}
.woocommerce-checkout .woocommerce-form-coupon-toggle .woocommerce-info a.showcoupon:hover {
  text-decoration: underline;
}

/* ── Форма ввода купона (form.checkout_coupon, раскрывается под тогглом) ──────────── */
.woocommerce-checkout form.checkout_coupon {
  display: flex;
  gap: 12px;
  align-items: flex-start;
  flex-wrap: wrap;
  margin: 0 0 24px;
  padding: 0;
  border: 0;
}
/* Поле кода — те же токены, что у инпутов чекаута (radius 12 / border 1.6 rule / min-height 48) */
.woocommerce-checkout form.checkout_coupon .form-row,
.woocommerce-checkout form.checkout_coupon p.form-row {
  margin: 0;
  padding: 0;
  flex: 1 1 200px;
  min-width: 0;
}
.woocommerce-checkout form.checkout_coupon input#coupon_code,
.woocommerce-checkout form.checkout_coupon input.input-text {
  width: 100%;
  min-height: 48px;
  padding: 12px 16px;
  background: #fff;
  border: 1.6px solid var(--rule);
  border-radius: 12px;
  font-family: 'Inter', sans-serif;
  font-size: 15px;
  font-weight: 500;
  color: var(--text);
  letter-spacing: -0.5px;
  line-height: 1.4;
  box-sizing: border-box;
  transition: border-color 0.18s ease, box-shadow 0.18s ease;
}
.woocommerce-checkout form.checkout_coupon input#coupon_code::placeholder { color: var(--muted); }
.woocommerce-checkout form.checkout_coupon input#coupon_code:focus,
.woocommerce-checkout form.checkout_coupon input.input-text:focus {
  border-color: var(--accent);
  box-shadow: 0 0 0 3px var(--accent-2);
  outline: none;
}
/* Кнопка «Применить» — ВТОРИЧНЫЙ стиль (не главный CTA): контур, тёмный текст */
.woocommerce-checkout form.checkout_coupon button[name="apply_coupon"],
.woocommerce-checkout form.checkout_coupon button.button {
  flex: 0 0 auto;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-height: 48px;
  padding: 12px 24px;
  background: #fff;
  color: var(--btn-dark);
  border: 1.6px solid var(--rule);
  border-radius: 12px;
  font-family: 'Inter', sans-serif;
  font-size: 15px;
  font-weight: 600;
  letter-spacing: -0.5px;
  line-height: 1.3;
  cursor: pointer;
  transition: border-color 0.18s ease, background-color 0.18s ease, color 0.18s ease;
}
.woocommerce-checkout form.checkout_coupon button[name="apply_coupon"]:hover,
.woocommerce-checkout form.checkout_coupon button.button:hover {
  border-color: var(--btn-dark);
  background: var(--btn-dark);
  color: #fff;
}
.woocommerce-checkout form.checkout_coupon button[name="apply_coupon"]:focus-visible,
.woocommerce-checkout form.checkout_coupon button.button:focus-visible {
  outline: 3px solid var(--accent-2);
  outline-offset: 2px;
}
/* ≤640: поле и кнопка в столбик, кнопка на всю ширину раскрытой формы */
@media (max-width: 640px) {
  .woocommerce-checkout form.checkout_coupon { flex-direction: column; }
  .woocommerce-checkout form.checkout_coupon .form-row,
  .woocommerce-checkout form.checkout_coupon p.form-row,
  .woocommerce-checkout form.checkout_coupon button[name="apply_coupon"],
  .woocommerce-checkout form.checkout_coupon button.button { width: 100%; flex-basis: auto; }
}
