/* =====================================================================
   АКС (aks-43.ru) - unify.css v3.0 (10.10.2026)
   Единый слой: подключать ПОСЛЕДНИМ, после bootstrap.min.css → tokens.css → site.css.
   Только токены из tokens.css (гайд v2.2 → v3.0). Ничего не меняет в URL и разметке.
   Часть A - выравнивание всех 65 legacy-страниц (.page-legacy) с новыми шаблонами.
   Часть B - компоненты новых шаблонов v3: кейс портфолио, хаб цен, статья,
             страница ошибки 404/410, адаптивное видео.
   Проверено подстановкой на 75 адресах dev × 4 ширины (390/768/1280/1440).
   ===================================================================== */

/* ---------- A0. Переменные ритма (дополняют tokens.css) ---------- */
:root{
  --head-gap:var(--s-4);          /* заголовок → его контент: 16 */
  --block-gap:var(--s-5);         /* абзац / список / таблица → следующий блок: 24 */
  --h2-before:var(--s-7);         /* перед H2 внутри текста: 48 */
  --h3-before:var(--s-6);         /* перед H3 внутри текста: 32 */
  --page-head-top:var(--s-5);     /* шапка → крошки: 24 на всех страницах */
  --crumbs-gap:var(--s-4);        /* крошки → H1: 16 на всех страницах */
  --measure:60ch;                 /* длина строки: 60ch ≈ 70–80 символов кириллицы Inter (ch = ширина «0») */
}

/* ---------- A1. Шапка: «Расчёт стоимости» всегда в одну строку (D25) ---------- */
.hdr-actions .btn{white-space:nowrap;flex:none}
.brands img{width:auto;max-width:150px;height:auto}

/* ---------- A2. Верх страницы: шапка → крошки 24, крошки → H1 16 (D28) ----------
   Одинаково для legacy (.section > .wrap.page-legacy) и новых (.page-head). */
main > .section:first-child:has(> .wrap > .crumbs),
main .page-head{padding-top:var(--page-head-top)}
main .crumbs{padding-top:0;margin:0 0 var(--crumbs-gap)}
main .crumbs.crumbs > ol,
.page-legacy .crumbs > ol{margin:0}
main :is(h1,h1.title){margin:0 0 var(--head-gap);text-wrap:balance}
main :is(header,.page-head) > h1{margin-top:0}
.page-legacy h1.title{margin:0 0 var(--head-gap)}   /* legacy h1.title имел mb 26,4 */

/* ---------- A3. Иерархия заголовков - как в новых шаблонах (D29) ----------
   Только для legacy-контента: в новых шаблонах заголовки уже по токенам, а заголовки карточек
   (.card-svc h3 18 px, .adv h3, .feat h3) остаются своими.
   h2.h3 / h2.h4 (семантика H2, вид H3/H4) - как в Bootstrap: класс задаёт вид. */
.page-legacy :is(h2,.h2):not(.h3,.h4){font-size:var(--fs-h2);line-height:var(--lh-heading);font-weight:var(--fw-black);letter-spacing:var(--ls-heading);color:var(--c-ink);text-wrap:balance}

.page-legacy :is(h3,.h3):not(.card *){font-size:var(--fs-h3);line-height:var(--lh-heading);font-weight:var(--fw-bold);letter-spacing:var(--ls-heading);color:var(--c-ink);text-wrap:balance}

.page-legacy :is(h4,.h4):not(.lead){font-size:var(--fs-h4);line-height:var(--lh-heading);font-weight:var(--fw-bold);color:var(--c-ink)}
.page-legacy :is(h2,.h2):not(.card *){margin:var(--h2-before) 0 var(--head-gap)}
.page-legacy :is(h3,.h3):not(.card *){margin:var(--h3-before) 0 var(--s-3)}
.page-legacy :is(h4,.h4):not(.lead,.card *){margin:var(--s-5) 0 var(--s-2)}
.page-legacy :is(h2,h3,h4,.h2,.h3,.h4):first-child,
.page-legacy header > :is(h2,h3,h4){margin-top:0}
.page-legacy section > header:first-child > :is(h2,h3){margin-top:var(--h2-before)}
.page-legacy section section > header:first-child > :is(h2,h3){margin-top:var(--h3-before)}

/* ---------- A4. Текст legacy: ритм 24 px, строка ≤ 72 символов (D30, D31) ---------- */
.page-legacy :is(p,ul,ol,dl,.table-responsive,figure):not(.card *, .crumbs *){margin:0 0 var(--block-gap)}
.page-legacy li > :is(p,ul,ol){margin-bottom:var(--s-2)}
.page-legacy :is(p,li):not(.card *){line-height:var(--lh-body)}
.page-legacy :is(p,li,.lead,dd,blockquote){max-width:var(--measure)}
.page-legacy p{text-wrap:pretty}
.page-legacy :is(.lead,.h4.lead,p.h4,div.h4):not(.card *){font-size:var(--fs-lead);line-height:1.5;font-weight:var(--fw-regular);color:var(--c-ink-2);margin:0 0 var(--block-gap)}
.page-legacy br + br{display:none}

/* ---------- A5. Фото и иконки legacy (D33) ---------- */
.page-legacy img{border-radius:var(--r-md);max-width:100%;height:auto}
.page-legacy img.block-advantage-item-img{width:64px;height:64px;object-fit:contain;border-radius:0}  /* до замены PNG → SVG (T-задача) */
@media (max-width:767px){
  .page-legacy img[style*="float"],.page-legacy img.img-left{float:none!important;display:block;width:100%!important;max-width:100%;margin:0 0 var(--block-gap)!important}
}

/* ---------- A6. Инлайновые стили старой вёрстки - нейтрализуем до чистки шаблонов ---------- */
.page-legacy [style*="color: red"],.page-legacy [style*="color:red"],.page-legacy [style*="color: #ff0000"],.page-legacy [style*="color:#ff0000"]{color:inherit!important}
.page-legacy [style*="font-size"]{font-size:inherit!important}

/* ---------- A7. Таблицы цен (D27, D31) ----------
   Bootstrap .table > tbody > tr > td даёт 8/8 и nowrap - перебиваем той же цепочкой. */
.table.price-table>:is(thead,tbody)>tr>:is(th,td){padding:var(--s-3) var(--s-4);vertical-align:middle;border-top:0}
@media (max-width:767px){
  .table-responsive{border:0;margin-bottom:var(--block-gap)}
  .table-responsive>.table.price-table>:is(thead,tbody)>tr>:is(th,td){white-space:normal;overflow-wrap:anywhere;hyphens:auto}
  .table.price-table>tbody>tr>td{padding:10px var(--s-4)}
}

/* ---------- A8. Портфолио: категория и работа - сетка вместо колонок Bootstrap (D32) ---------- */
.site-portfolio .row{display:grid;grid-template-columns:repeat(auto-fill,minmax(min(100%,300px),1fr));gap:var(--s-4);margin:0 0 var(--s-6)}
.site-portfolio .row::before,.site-portfolio .row::after{display:none}
.site-portfolio .row > div:not(.gallery-item){display:contents}
.site-portfolio .gallery-item{width:auto!important;float:none;padding:0;display:block;min-width:0}
.site-portfolio .gallery-item img{width:100%;height:auto;aspect-ratio:3/2;object-fit:cover;border-radius:var(--r-md)}
.site-portfolio .gallery-item-caption{margin-top:var(--s-2);font-weight:var(--fw-semibold);line-height:var(--lh-heading)}

/* ---------- A9. Видео в тексте (D26) ---------- */
.page-legacy :is(video,iframe),.prose :is(video,iframe){display:block;max-width:100%;height:auto;border-radius:var(--r-md);background:#000}
.page-legacy iframe{aspect-ratio:16/9;width:100%}

/* ---------- A10. Последний блок перед футером - один отступ (D31) ---------- */
main > :last-child{padding-bottom:var(--section-y)}
main > :last-child > .wrap > :last-child{margin-bottom:0}

/* =====================================================================
   Часть B. Компоненты шаблонов v3
   ===================================================================== */

/* ---------- B1. Карточка «от» (хаб /prices) ---------- */
.price-from{display:flex;flex-direction:column;gap:var(--s-2);text-decoration:none;color:var(--c-ink);transition:border-color var(--t-fast),box-shadow var(--t-fast),transform var(--t-fast)}
.price-from:hover{border-color:var(--c-ink);box-shadow:var(--sh-md);transform:translateY(-2px);color:var(--c-ink)}
.price-from h2,.price-from h3{font-size:var(--fs-h4);margin:0}
.price-from .from{font-size:28px;line-height:1.15;font-weight:var(--fw-black);letter-spacing:var(--ls-heading);font-variant-numeric:tabular-nums}
.price-from .from small{font-size:var(--fs-small);font-weight:var(--fw-regular);color:var(--c-ink-2);letter-spacing:0}
.price-from .basis{font-size:var(--fs-small);color:var(--c-muted);margin:0}
.price-from .more{margin-top:auto;padding-top:var(--s-3);font-weight:var(--fw-semibold);color:var(--c-brand-dark);display:inline-flex;align-items:center;gap:6px}
.grid.g-auto{grid-template-columns:repeat(auto-fill,minmax(min(100%,210px),1fr))}

/* ---------- B2. Кейс портфолио ---------- */
.case-layout{display:grid;grid-template-columns:minmax(0,1fr) 320px;gap:var(--s-7);align-items:start}
.case-gallery{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--s-3);margin:0;padding:0;list-style:none}
.case-gallery.n2 > :first-child{grid-column:auto}
.case-gallery > :first-child{grid-column:1 / -1}
.case-gallery a{display:block;min-width:0;border-radius:var(--r-md);overflow:hidden;background:var(--c-bg-alt)}
.case-gallery img{display:block;width:100%;height:auto;aspect-ratio:3/2;object-fit:cover;transition:transform .3s}
.case-gallery a:hover img{transform:scale(1.02)}
.case-gallery.n1{grid-template-columns:1fr}
.case-aside{position:sticky;top:calc(var(--header-h) + var(--s-4));display:grid;gap:var(--s-4)}
.case-facts{margin:0;display:grid;gap:var(--s-3)}
.case-facts div{display:grid;gap:2px}
.case-facts dt{font-size:var(--fs-caption);font-weight:var(--fw-bold);letter-spacing:var(--ls-caps);text-transform:uppercase;color:var(--c-muted)}
.case-facts dd{margin:0;font-weight:var(--fw-semibold)}
.case-desc{max-width:var(--measure);margin:var(--s-6) 0 0}
.case-desc p{color:var(--c-ink-2);margin:0 0 var(--s-3)}
.case-back{display:inline-flex;align-items:center;gap:6px;margin-top:var(--s-6)}
.case-video{margin-top:var(--s-6)}
@media (max-width:991px){.case-layout{grid-template-columns:1fr;gap:var(--s-6)}.case-aside{position:static}}
@media (max-width:767px){.case-gallery{grid-template-columns:1fr}}

/* ---------- B3. Статья ---------- */
.article-layout{display:grid;grid-template-columns:minmax(0,var(--measure)) 260px;gap:var(--s-8);align-items:start}
.article-meta{display:flex;flex-wrap:wrap;gap:var(--s-2) var(--s-5);color:var(--c-muted);font-size:var(--fs-small);margin:0 0 var(--s-6)}
.article-body{font-size:var(--fs-body)}
.article-body > :first-child{margin-top:0}
.article-body h2{font-size:var(--fs-h2);margin:var(--h2-before) 0 var(--head-gap)}
.article-body h3{font-size:var(--fs-h3);margin:var(--h3-before) 0 var(--s-3)}
.article-body :is(p,ul,ol,figure,.table-responsive){margin:0 0 var(--block-gap)}
.article-body :is(p,li){line-height:var(--lh-body);text-wrap:pretty}
.article-body figure img{display:block;width:100%;height:auto;border-radius:var(--r-md)}
.article-body figcaption{margin-top:var(--s-2);font-size:var(--fs-small);color:var(--c-muted)}
.article-toc{position:sticky;top:calc(var(--header-h) + var(--s-4));border-left:2px solid var(--c-line);padding-left:var(--s-4)}
.article-toc b{display:block;font-size:var(--fs-caption);letter-spacing:var(--ls-caps);text-transform:uppercase;color:var(--c-muted);margin-bottom:var(--s-2)}
.article-toc ol{list-style:none;margin:0;padding:0;display:grid;gap:var(--s-2)}
.article-toc a{color:var(--c-ink-2);text-decoration:none;font-size:var(--fs-small);line-height:1.4}
.article-toc a:hover{color:var(--c-brand-dark);text-decoration:underline}
.article-end{margin-top:var(--s-7)}
@media (max-width:991px){.article-layout{grid-template-columns:1fr;gap:0}.article-toc{display:none}}

/* ---------- B4. Полоса CTA внутри страницы (кейс, статья) ---------- */
.cta-band{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:var(--s-5);background:var(--c-dark);color:#fff;border-radius:var(--r-lg);padding:var(--s-6)}
.cta-band strong{display:block;font-size:var(--fs-h3);line-height:var(--lh-heading)}
.cta-band p{margin:var(--s-1) 0 0;color:var(--c-on-dark-2)}
.cta-band .acts{display:flex;flex-wrap:wrap;gap:var(--s-3)}
@media (max-width:767px){.cta-band{padding:var(--s-5)}.cta-band .acts,.cta-band .btn{width:100%}}

/* ---------- B5. Страница ошибки 404 / 410 ---------- */
.err-page .code{display:inline-block;font-size:var(--fs-caption);font-weight:var(--fw-bold);letter-spacing:var(--ls-caps);text-transform:uppercase;color:var(--c-brand);margin-bottom:var(--s-2)}
.err-page .lead{max-width:60ch}
.err-actions{display:flex;flex-wrap:wrap;gap:var(--s-3);margin:var(--s-5) 0 var(--s-7)}
.err-page h2{font-size:var(--fs-h3);margin:0 0 var(--s-4)}

/* ---------- B6. Адаптивное видео ---------- */
.video{margin:0 0 var(--block-gap);max-width:960px}
.video[data-w="640"][data-h="360"]{--video-ratio:640/360}
.video[data-w="480"][data-h="360"]{--video-ratio:480/360}
.video[data-w="240"][data-h="320"]{--video-ratio:240/320}
.video video,.video iframe{display:block;width:100%;height:auto;aspect-ratio:var(--video-ratio,16/9);border-radius:var(--r-md);background:#000}
.video figcaption{margin-top:var(--s-2);font-size:var(--fs-small);color:var(--c-muted)}

/* ---------- B7. Иконки Lucide в legacy-блоках «Преимущества» (вместо PNG) ---------- */
.adv-legacy .ico-box{width:48px;height:48px;border-radius:var(--r-md);display:grid;place-items:center;background:#fdecef;color:var(--c-brand);margin-bottom:var(--s-4)}
.feat-row{display:grid;grid-template-columns:48px minmax(0,1fr);gap:var(--s-4);align-items:start;margin:0 0 var(--s-5);max-width:calc(var(--measure) + 64px)}
.feat-row .ico-box{width:48px;height:48px;border-radius:var(--r-md);display:grid;place-items:center;background:#fdecef;color:var(--c-brand)}
.page-legacy .feat-row h3{margin:0 0 var(--s-2)}
.page-legacy .feat-row p{margin:0}
.price-scroll{margin:0 0 var(--block-gap)}
.case-gallery.even > :last-child{grid-column:1 / -1}
