/* =====================================================================
   AUTOPAPYRUS — дизайн-система (canon)
   Утверждена 2026-05-25. Источник: guides/index.html (Drive2-like).
   Принципы: один акцент (амбер), типографика держит иерархию, плотные
   карточки, тёмная шапка, светлый body. Без синего вообще.
   ===================================================================== */

/* Шрифты лежат у нас, а не на fonts.googleapis.com: сторонний домен в
   критическом пути, в РФ это лотерея, плюс два лишних подключения
   (аудит 10.09). Файлы вариативные, по одному на подмножество —
   браузер тянет только нужное (кириллица+латиница ≈ 38 КБ). */
@font-face{font-family:'JetBrains Mono';font-style:normal;font-weight:500 600;font-display:swap;src:url(fonts/jetbrains-mono-cyrillic.woff2) format('woff2');unicode-range:U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116}
@font-face{font-family:'JetBrains Mono';font-style:normal;font-weight:500 600;font-display:swap;src:url(fonts/jetbrains-mono-cyrillic-ext.woff2) format('woff2');unicode-range:U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F}
@font-face{font-family:'JetBrains Mono';font-style:normal;font-weight:500 600;font-display:swap;src:url(fonts/jetbrains-mono-latin.woff2) format('woff2');unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD}
@font-face{font-family:'JetBrains Mono';font-style:normal;font-weight:500 600;font-display:swap;src:url(fonts/jetbrains-mono-latin-ext.woff2) format('woff2');unicode-range:U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF}
@font-face{font-family:'Manrope';font-style:normal;font-weight:400 800;font-display:swap;src:url(fonts/manrope-cyrillic.woff2) format('woff2');unicode-range:U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116}
@font-face{font-family:'Manrope';font-style:normal;font-weight:400 800;font-display:swap;src:url(fonts/manrope-cyrillic-ext.woff2) format('woff2');unicode-range:U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F}
@font-face{font-family:'Manrope';font-style:normal;font-weight:400 800;font-display:swap;src:url(fonts/manrope-latin.woff2) format('woff2');unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD}
@font-face{font-family:'Manrope';font-style:normal;font-weight:400 800;font-display:swap;src:url(fonts/manrope-latin-ext.woff2) format('woff2');unicode-range:U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF}

:root{
  /* нейтрали */
  --nav:#141414; --nav-2:#222;
  /* Кнопки: чёрные (Ян 20.09: «сделай вообще кубик для всех кнопок чёрный,
     чтобы и при наведении тоже был чёрный»). Светлее — графит #2e2a35 —
     пробовали в тот же вечер, Ян вернул чёрный. --btn-h — наведение. */
  --btn:#141414; --btn-h:#222;
  --bg:#efeeec; --surface:#ffffff; --paper:#f6f4ef;
  --ink:#141414; --ink-2:#4a4a4a; --muted:#6b6558;
  --line:#dcd9d1; --line-2:#c8c4b8; --rule:#1a1a1a;
  /* единственный акцент */
  --accent:#ea580c; --accent-d:#c2480a; --accent-dd:#a33d08; --accent-soft:#fff1e6;
  /* Ян 10.09: «оранжевый цвет везде верни какой он был раньше».
     Токен оставлен как точка правки, но указывает на основной акцент. */
  --accent-t:var(--accent);
  /* состояние «в корзине» — единый зелёный на всём сайте */
  --incart:#0d9847; --incart-d:#0a7a37;
  /* единая ширина контента на всём сайте (= navbar/subbar) */
  --page-max:1280px;
  /* шрифты */
  --sans:'Manrope',system-ui,sans-serif;
  --mono:'JetBrains Mono',ui-monospace,monospace;
}

/* ========= BASE ========= */
*{box-sizing:border-box;margin:0;padding:0}
/* Sticky footer: body — flex-колонка минимум на всю высоту вьюпорта,
   footer прижимается к низу через margin-top:auto (см. FOOTER).
   Работает на любой странице каркаса без доп. обёрток. */
html{height:100%}
body{font-family:var(--sans);font-size:14.5px;color:var(--ink);background:var(--bg);line-height:1.5;-webkit-font-smoothing:antialiased;min-height:100vh;display:flex;flex-direction:column}
a{color:inherit;text-decoration:none;transition:color .12s}
a:hover{color:var(--accent-t);text-decoration:underline;text-decoration-thickness:1px;text-underline-offset:3px}
img{max-width:100%;display:block}
button{font:inherit;cursor:pointer}

/* ========= NAVBAR ========= */
.navbar{background:var(--nav);color:#fff;border-bottom:3px solid var(--accent);position:relative}
/* Шапка: [лого+тэглайн] [CTA по центру свободного места] [действия справа]. */
.navbar-inner{max-width:var(--page-max);margin:0 auto;padding:0 20px;height:54px;display:flex;align-items:center;gap:18px}
.nav-left{display:flex;align-items:center;gap:14px;min-width:0;flex:none}
.nav-left .tagline{overflow:hidden;white-space:nowrap;text-overflow:ellipsis;min-width:0}
.brand{display:flex;align-items:center;text-decoration:none;flex:none}
.brand:hover{text-decoration:none;opacity:.85}
.brand img{height:22px;width:auto;display:block}
.tagline{color:#a0a0a0;font-size:12px;border-left:1px solid #404040;padding-left:14px;margin-left:2px}

.nav-search{flex:1;max-width:620px;margin-left:auto;background:#fff;border:1px solid #fff;border-radius:8px;padding:0 0 0 14px;display:flex;align-items:center;gap:10px;height:38px;transition:box-shadow .15s,border-color .15s}
.nav-search:focus-within{border-color:var(--accent);box-shadow:0 0 0 3px rgba(234,88,12,.25)}
.nav-search svg{width:16px;height:16px;color:var(--ink-2);flex:none}
.nav-search input{flex:1;background:transparent;border:0;outline:0;color:var(--ink);font-family:inherit;font-size:14px;font-weight:500;height:100%}
.nav-search input::placeholder{color:var(--muted);font-weight:400}
.nav-search button{background:var(--accent);border:0;color:#fff;font-weight:700;font-size:13px;padding:0 18px;height:100%;border-radius:0 4px 4px 0;letter-spacing:.02em}
.nav-search button:hover{background:var(--accent-d)}
.nav-search .kbd{font-family:var(--mono);font-size:10.5px;color:var(--muted);border:1px solid var(--line);border-radius:4px;padding:2px 5px;background:var(--paper)}

.nav-actions{display:flex;gap:8px;align-items:center}
/* Корзина в шапке — видна только когда в ней что-то есть (её включает
   book-card.js по ответу basket-list). Появилась 13.09: до этого попасть в
   корзину можно было лишь с карточки товара, и человек, ушедший читать
   руководство, терял её. */
.nav-cart{display:inline-flex;align-items:center;gap:6px;color:#cfcfcf;
  padding:7px 10px;border-radius:4px;text-decoration:none;position:relative}
/* Пока корзина пуста, ссылка помечена hidden — но собственный display её
   перебивает, и на главной висел пустой значок (Ян 13.09). */
.nav-cart[hidden]{display:none}
.nav-cart:hover{background:#252525;color:#fff}
.nav-cart svg{width:19px;height:19px;flex:0 0 auto}
.nav-cart-n{min-width:17px;height:17px;padding:0 5px;box-sizing:border-box;
  display:inline-flex;align-items:center;justify-content:center;
  background:var(--accent);color:#fff;border-radius:8px;
  font-size:11px;font-weight:800;line-height:1}
@media(max-width:760px){
  /* На узкой шапке место дорогое: оставляем значок с числом, без подписи. */
  .nav-cart{padding:7px 8px}
}
.nav-actions a{color:#cfcfcf;font-size:13px;padding:7px 12px;border-radius:4px;text-decoration:none}
.nav-actions a:hover{background:#252525;color:#fff;text-decoration:none}
.nav-actions .reg{color:#fff;font-weight:600;border:1px solid #4a4a4a}
/* Вход в панель управления — виден только администратору (навбар подставляет
   ссылку по ответу account-me). В шапке это маленькая иконка-шестерёнка в цвет
   остальных пунктов (просьба Яна 05.09: раньше была оранжевая кнопка с
   рамкой и длинной надписью). В мобильной панели — обычный пункт с подписью. */
.nav-actions .nav-admin{display:inline-flex;align-items:center;justify-content:center;
  padding:6px;border:0;font-weight:400}
.nav-actions .nav-admin svg{width:18px;height:18px;display:block}
.nav-actions .nav-admin span{display:none}
.nav-menu .nav-admin svg{width:16px;height:16px;margin-right:8px;vertical-align:-3px;display:inline-block}
.nav-actions .reg:hover{background:transparent;border-color:var(--accent);color:var(--accent-t)}

/* Гамбургер + мобильная панель (разметка — partials/navbar.html).
   На десктопе обоих нет: навигация — сайдбар и .nav-actions. */
.nav-burger{display:none;background:none;border:0;padding:10px;align-items:center;justify-content:center}
.nav-burger-box{display:block;width:20px;height:14px;position:relative}
.nav-burger-box span{position:absolute;left:0;width:100%;height:2px;background:#fff;border-radius:4px;transition:transform .18s,opacity .12s,top .18s}
.nav-burger-box span:nth-child(1){top:0}
.nav-burger-box span:nth-child(2){top:6px}
.nav-burger-box span:nth-child(3){top:12px}
.nav-burger.open .nav-burger-box span:nth-child(1){top:6px;transform:rotate(45deg)}
.nav-burger.open .nav-burger-box span:nth-child(2){opacity:0}
.nav-burger.open .nav-burger-box span:nth-child(3){top:6px;transform:rotate(-45deg)}
.nav-menu{display:none}

/* ========= SUB-BAR (амбер) ========= */
.subbar{background:var(--accent);color:#fff;font-size:13px}
.subbar-inner{max-width:var(--page-max);margin:0 auto;padding:7px 20px 7px 30px;display:flex;align-items:center;gap:16px}
.subbar a{color:#fff;font-weight:600;text-decoration:underline}
.subbar .crumbs{color:#fff;opacity:.92;font-size:12.5px}
.subbar .crumbs a{font-weight:400;text-decoration:none;opacity:.9}
.subbar .crumbs a:hover{text-decoration:underline}

/* ========= SHELL (sidebar | content) ========= */
.shell{max-width:var(--page-max);margin:0 auto;padding:20px;display:grid;grid-template-columns:200px 1fr;gap:24px;align-items:start}
.shell.solo{grid-template-columns:1fr;max-width:1080px}

.side{position:sticky;top:14px;display:flex;flex-direction:column}
.side a{display:block;padding:7px 12px;color:var(--ink);font-weight:600;text-decoration:none;font-size:14px;border-left:2px solid transparent;margin-left:-2px;transition:.12s}
.side a:hover{background:var(--surface);border-left-color:var(--accent);color:var(--ink);text-decoration:none}
.side a.cur{background:var(--surface);border-left-color:var(--accent);color:var(--ink);cursor:default}
.side hr{border:0;border-top:1px solid var(--line);margin:10px 0}
.side .label{font-size:10.5px;color:var(--muted);letter-spacing:.08em;text-transform:uppercase;padding:4px 12px;margin-top:6px;font-weight:700}

/* ========= MAIN ========= */
.main h1{font-size:28px;font-weight:800;letter-spacing:-.015em;margin-bottom:6px}
.main .sub{color:var(--ink-2);font-size:14.5px;margin-bottom:18px;max-width:760px}

/* ========= FEATURED CARD ========= */
.featured{background:var(--surface);border:1px solid var(--line);border-radius:8px;overflow:hidden;display:grid;grid-template-columns:300px 1fr;gap:0;margin-bottom:22px}
.featured .ph{aspect-ratio:4/3;background:#222;overflow:hidden}
.featured .ph img{width:100%;height:100%;object-fit:cover}
.featured-cover{
  position:relative;overflow:hidden;
  background:linear-gradient(135deg,#1f1d1a 0%,#2a2724 50%,#181614 100%);
  display:flex;align-items:flex-end;padding:18px 20px;
  text-decoration:none;color:#fff;
}
.featured-cover::before{
  content:'';position:absolute;inset:0;
  background:repeating-linear-gradient(45deg,rgba(234,88,12,.06) 0 18px,transparent 18px 36px);
  pointer-events:none;
}
.featured-cover-label{
  font-family:var(--mono);font-size:13px;color:#e8d4b8;letter-spacing:.02em;
  position:relative;z-index:1;line-height:1.4;
  border-left:3px solid var(--accent);padding-left:10px;
}
.featured .body{padding:18px 22px}
.featured .cat{display:inline-block;background:var(--accent);color:#fff;font-size:11px;font-weight:700;padding:3px 8px;border-radius:4px;text-transform:uppercase;letter-spacing:.04em;margin-bottom:10px}
.featured h2{font-size:24px;font-weight:800;letter-spacing:-.015em;line-height:1.18;margin-bottom:10px}
.featured h2 a{color:var(--ink);text-decoration:none}
.featured h2 a:hover{color:var(--accent-t);text-decoration:none}
.featured .lede{color:var(--ink-2);font-size:14.5px;margin-bottom:14px}
.featured .meta{font-size:12px;color:var(--muted);margin-bottom:12px}
.featured .meta b{color:var(--ink-2)}
.featured .open{color:var(--ink);font-weight:700;font-size:14px;border-bottom:2px solid var(--accent);padding-bottom:2px;display:inline-block}
.featured .open:hover{color:var(--accent-t);text-decoration:none}

/* ========= BLOCK (заголовок-секция с амбер-тиком) ========= */
/* Один отступ между всеми блоками: было 22 у геро и формы против 18 у
   остальных, и лента шла рывками (Ян 06.09). */
.block{background:var(--surface);border:1px solid var(--line);border-radius:8px;padding:16px 18px 18px;margin-bottom:22px}
.block .head{display:flex;align-items:baseline;justify-content:space-between;margin-bottom:12px;border-bottom:2px solid var(--rule);padding-bottom:10px;gap:14px}
/* Кубик .block обычно несёт h3, но на странице каталога он стоит ВЫШЕ «Книг»
   (h2), и порядок получался H1 → H3 → H2 — пропуск уровня (замер 20.09).
   Поэтому вид один и для h2, и для h3: уровень выбирает страница. */
.block h3,.block .head h2{font-size:17px;font-weight:800;letter-spacing:-.005em;display:flex;align-items:center;gap:9px;margin:0}
.block h3::before,.block .head h2::before{content:"";display:inline-block;width:7px;height:18px;background:var(--accent);border-radius:4px}
.block .all{font-size:12.5px;color:var(--ink);font-weight:700;text-transform:uppercase;letter-spacing:.04em}
.block .all:hover{color:var(--accent-t);text-decoration:none}
.block .head .badge{font-family:var(--mono);font-size:11px;color:var(--muted);font-weight:600;background:var(--paper);border:1px solid var(--line);padding:2px 7px;border-radius:4px}

/* ========= FEED (двухколоночный список карточек) ========= */
.feed{display:grid;grid-template-columns:repeat(2,1fr);gap:14px 22px}
.feed.cols-1{grid-template-columns:1fr}
.item{display:grid;grid-template-columns:120px 1fr;gap:12px;padding:8px 0;border-bottom:1px solid var(--line)}
.item:nth-last-child(-n+2){border-bottom:0;padding-bottom:0}
.item .ph{aspect-ratio:4/3;background:#222;border-radius:4px;overflow:hidden}
.item .ph img{width:100%;height:100%;object-fit:cover}
.item h4{font-size:15px;font-weight:700;line-height:1.25;letter-spacing:-.005em;margin-bottom:5px}
.item h4 a{color:var(--ink);text-decoration:none}
.item h4 a:hover{color:var(--accent-t);text-decoration:none}
.item .m{font-size:12px;color:var(--muted)}
.item .m .cat{color:var(--ink);font-weight:700;text-transform:uppercase;font-size:11px;letter-spacing:.04em;border-bottom:1.5px solid var(--accent);padding-bottom:1px}

/* ========= DEMAND LIST («что чинят сейчас») ========= */
.demand{list-style:none;display:grid;grid-template-columns:1fr 1fr;gap:0 28px}
.demand li{padding:9px 0;border-bottom:1px dotted var(--line-2);font-size:14px;display:flex;align-items:baseline;gap:12px}
.demand li:nth-last-child(-n+2){border-bottom:0}
.demand .n{font-family:var(--mono);font-size:11px;color:var(--muted);font-weight:600;width:20px;text-align:right}
.demand a{color:var(--ink);text-decoration:none;flex:1;font-weight:500}
.demand a:hover{color:var(--accent-t);text-decoration:none}
.demand .v{font-family:var(--mono);font-size:11px;color:var(--muted);font-weight:600;background:var(--paper);padding:2px 6px;border-radius:4px;border:1px solid var(--line)}

/* ========= BOOKS STRIP (полка) ========= */
.books{display:grid;grid-template-columns:repeat(5,1fr);gap:12px}
.books.cols-3{grid-template-columns:repeat(3,1fr)}
.books.cols-4{grid-template-columns:repeat(4,1fr)}
.bk{background:var(--surface);border:1px solid var(--line);border-radius:8px;padding:10px;text-decoration:none;color:var(--ink);transition:.15s;position:relative;display:block}
.bk:hover{border-color:var(--rule);transform:translateY(-1px);text-decoration:none;box-shadow:0 3px 0 var(--accent)}
.bk .cv{aspect-ratio:3/4;border-radius:4px;background:#1a1a1a;margin-bottom:9px;padding:10px;display:flex;flex-direction:column;justify-content:space-between;color:#f3f0e8;position:relative;overflow:hidden;border-left:3px solid var(--accent)}
.bk .cv::before{content:"";position:absolute;inset:0;background:linear-gradient(135deg,rgba(255,255,255,.04) 0%,transparent 40%);pointer-events:none}
.bk .cv.v2{background:#2b1d10;border-left-color:#c2480a}
.bk .cv.v3{background:#0f1e1c;border-left-color:#d97706}
.bk .cv.dig{background:linear-gradient(155deg,#1a3b30,#0f5b4a);border-left-color:#fff;color:#e8f5ef}
.bk .cv .t{font-weight:800;font-size:12px;line-height:1.18;letter-spacing:-.01em}
.bk .cv .p{font-size:9px;opacity:.6;letter-spacing:.06em;text-transform:uppercase}
.bk .cv .mk{font-size:9px;color:var(--accent-t);font-weight:700;letter-spacing:.08em;text-transform:uppercase;border-top:1px solid rgba(255,255,255,.12);padding-top:6px;margin-top:6px}
.bk .cv.dig .mk{color:#7ddca3;border-top-color:rgba(255,255,255,.18)}
.bk h5{font-size:12.5px;font-weight:600;line-height:1.25;min-height:48px;color:var(--ink)}
.bk .price{font-weight:800;font-size:15px;margin-top:6px}
.bk .price .cur{color:var(--muted);font-weight:600;font-size:12px;margin-left:2px}

/* ========= AI BASELINE ANSWER (для search-live) ========= */
.ai-card{background:var(--surface);border:1px solid var(--line);border-radius:8px;padding:18px 22px;margin-bottom:18px;position:relative;border-left:3px solid var(--accent)}
.ai-card .lab{font-family:var(--mono);font-size:10.5px;color:var(--accent-t);font-weight:700;letter-spacing:.1em;text-transform:uppercase;margin-bottom:6px}
.ai-card h2{font-size:20px;font-weight:800;letter-spacing:-.01em;line-height:1.22;margin-bottom:10px}
.ai-card .body{color:var(--ink-2);font-size:14.5px;line-height:1.55}
.ai-card .body p{margin-bottom:8px}
.ai-card .body p:last-child{margin-bottom:0}
.ai-card .body ul{margin:6px 0 10px 18px}
.ai-card .body code{font-family:var(--mono);font-size:12.5px;background:var(--paper);padding:1px 5px;border-radius:4px;border:1px solid var(--line);color:var(--ink)}
.ai-card .foot{display:flex;align-items:center;gap:14px;margin-top:14px;padding-top:12px;border-top:1px dotted var(--line-2);font-size:12px;color:var(--muted)}
.ai-card .foot .pro{color:var(--ink-2);font-weight:600}

/* ========= GENERATING STATE («собирается») ========= */
.gen{background:var(--surface);border:1px solid var(--line);border-radius:8px;padding:22px 24px;margin-bottom:18px;border-left:3px solid var(--accent);position:relative}
.gen .lab{font-family:var(--mono);font-size:10.5px;color:var(--accent-t);font-weight:700;letter-spacing:.1em;text-transform:uppercase;margin-bottom:8px;display:flex;align-items:center;gap:8px}
.gen .lab::after{content:"";width:8px;height:8px;background:var(--accent);border-radius:50%;animation:pulse 1.2s ease-in-out infinite}
@keyframes pulse{0%,100%{opacity:.35}50%{opacity:1}}
.gen h2{font-size:18px;font-weight:800;letter-spacing:-.005em;margin-bottom:14px}
.gen .steps{list-style:none;display:flex;flex-direction:column;gap:6px;margin-bottom:14px}
.gen .steps li{font-size:13.5px;color:var(--ink-2);padding-left:22px;position:relative}
.gen .steps li::before{content:"○";position:absolute;left:0;top:0;color:var(--muted);font-size:14px}
.gen .steps li.done{color:var(--muted)}
.gen .steps li.done::before{content:"●";color:var(--accent-t)}
.gen .steps li.active{color:var(--ink);font-weight:600}
.gen .steps li.active::before{content:"◐";color:var(--accent-t);animation:spin 1.4s linear infinite}
@keyframes spin{to{transform:rotate(360deg)}}
.gen .email{display:flex;gap:8px;align-items:center;background:var(--paper);border:1px solid var(--line);border-radius:8px;padding:10px 12px;margin-top:6px}
.gen .email input{flex:1;background:transparent;border:0;outline:0;font:inherit;font-size:13.5px;color:var(--ink)}
.gen .email input::placeholder{color:var(--muted)}
.gen .email button{background:var(--accent);border:0;color:#fff;font-weight:700;font-size:12.5px;padding:7px 14px;border-radius:4px}
.gen .email button:hover{background:var(--accent-d)}

/* ========= EMPTY STATE ========= */
.empty{background:var(--surface);border:1px dashed var(--line-2);border-radius:8px;padding:22px 24px;color:var(--muted);font-size:13.5px;text-align:center}
.empty h4{font-size:14px;color:var(--ink-2);font-weight:700;margin-bottom:5px}
.empty a{color:var(--ink);font-weight:600;border-bottom:1.5px solid var(--accent);padding-bottom:1px}

/* ========= QUERY ECHO (повторение запроса) ========= */
.q-echo{display:flex;align-items:baseline;gap:10px;margin-bottom:18px;padding-bottom:14px;border-bottom:1px solid var(--line)}
.q-echo .lab{font-family:var(--mono);font-size:11px;color:var(--muted);font-weight:600;text-transform:uppercase;letter-spacing:.08em}
.q-echo .q{font-size:22px;font-weight:800;color:var(--ink);letter-spacing:-.01em}

/* ========= GUIDE META (полоса бейджей: сложность, время, шаги) ========= */
.guide-meta{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:18px}
.guide-meta .m{font-family:var(--mono);font-size:11px;font-weight:600;color:var(--ink-2);background:var(--paper);border:1px solid var(--line);padding:5px 10px;border-radius:4px;display:inline-flex;align-items:center;gap:6px}
.guide-meta .m b{color:var(--ink);font-weight:700}
.guide-meta .m.accent{border-color:var(--accent);color:var(--accent-t);background:var(--accent-soft)}

/* ========= PROVENANCE PILL (источник: ИИ/владельцы/редакция) ========= */
.prov{display:inline-flex;align-items:center;gap:7px;font-family:var(--mono);font-size:11px;font-weight:600;color:var(--accent-t);background:var(--accent-soft);border:1px solid var(--accent);padding:5px 10px;border-radius:4px;margin-bottom:14px;text-transform:uppercase;letter-spacing:.04em}
.prov.owner{color:#075d3a;background:#e6f5ec;border-color:#0f5b4a}
.prov.editorial{color:#0f4570;background:#e7f0fa;border-color:#1a4675}

.steps-list{counter-reset:s;list-style:none;display:flex;flex-direction:column}
.steps-list li{counter-increment:s;position:relative;padding:14px 0 14px 48px;border-top:1px solid var(--line);color:var(--ink-2);line-height:1.55}
.steps-list li:first-child{border-top:0;padding-top:6px}
.steps-list li::before{content:counter(s);position:absolute;left:0;top:14px;width:30px;height:30px;border-radius:50%;background:var(--accent);color:#fff;font-weight:800;font-size:13px;font-family:var(--mono);display:grid;place-items:center}
.steps-list li:first-child::before{top:6px}
.steps-list li .tc{display:inline-flex;align-items:center;gap:5px;margin-top:6px;font-family:var(--mono);font-size:11px;color:var(--muted);background:var(--paper);padding:3px 8px;border-radius:4px;border:1px solid var(--line)}
.steps-list li b{color:var(--ink);font-weight:700}
.steps-list li code{font-family:var(--mono);font-size:12.5px;background:var(--paper);padding:1px 5px;border-radius:4px;border:1px solid var(--line);color:var(--ink)}

/* ========= PARTS (запчасти) ========= */
.parts{display:flex;flex-direction:column;gap:10px}
.part{display:grid;grid-template-columns:48px 1fr auto;gap:14px;align-items:center;background:var(--paper);border:1px solid var(--line);border-left:3px solid var(--accent);border-radius:4px;padding:12px 14px}
.part .ico{width:38px;height:38px;background:var(--ink);color:#fff;border-radius:4px;display:grid;place-items:center;font-size:16px}
.part .nm{font-weight:700;font-size:15px;color:var(--ink);letter-spacing:-.005em;margin-bottom:3px}
.part .oe{font-family:var(--mono);font-size:12px;color:var(--ink-2);font-weight:600;display:inline-flex;align-items:center;gap:6px}
.part .oe .lbl{color:var(--muted);font-weight:500;text-transform:uppercase;letter-spacing:.04em;font-size:10.5px}
.part .ft{font-size:12px;color:var(--ink-2);margin-top:4px}
.part .ft::before{content:"✓ ";color:#0f5b4a;font-weight:700}
.part .buy{background:var(--accent);color:#fff;font-weight:700;font-size:13px;padding:8px 14px;border-radius:4px;text-decoration:none;white-space:nowrap}
.part .buy:hover{background:var(--accent-d);color:#fff;text-decoration:none}

/* ========= PITFALLS («частые ошибки») ========= */
.pitfalls{list-style:none;display:flex;flex-direction:column;gap:8px}
.pitfalls li{font-size:14px;color:var(--ink-2);padding:8px 0 8px 30px;position:relative;line-height:1.5;border-bottom:1px dotted var(--line-2)}
.pitfalls li:last-child{border-bottom:0}
.pitfalls li::before{content:"!";position:absolute;left:0;top:8px;width:20px;height:20px;border-radius:50%;background:var(--accent);color:#fff;font-family:var(--mono);font-weight:800;font-size:12px;display:grid;place-items:center}

/* ========= SOURCES (YouTube/книги/официальные) ========= */
.sources{list-style:none;display:flex;flex-direction:column}
.sources li{display:flex;gap:12px;align-items:center;padding:10px 0;border-top:1px solid var(--line)}
.sources li:first-child{border-top:0;padding-top:2px}
.sources .yt{width:32px;height:22px;background:#ff0000;color:#fff;border-radius:4px;display:grid;place-items:center;flex:none;font-size:11px}
.sources .bk{width:32px;height:22px;background:var(--ink);color:#fff;border-radius:4px;display:grid;place-items:center;flex:none;font-size:11px;font-weight:700}
.sources a{font-size:14px;font-weight:600;color:var(--ink);flex:1;line-height:1.35}
.sources a:hover{color:var(--accent-t)}
.sources .src-meta{font-size:11.5px;color:var(--muted);font-family:var(--mono)}

/* ========= SIDE CARD (правая колонка контента) ========= */
.side-card{background:var(--surface);border:1px solid var(--line);border-radius:8px;padding:14px 16px;margin-bottom:14px}
.side-card h4{font-size:14px;font-weight:800;letter-spacing:-.005em;margin-bottom:6px;display:flex;align-items:center;gap:8px}
.side-card h4::before{content:"";display:inline-block;width:5px;height:14px;background:var(--accent);border-radius:4px}
.side-card p{font-size:13px;color:var(--ink-2);line-height:1.5;margin-bottom:10px}
.side-card .capture{display:flex;gap:6px;background:var(--paper);border:1px solid var(--line);border-radius:4px;padding:6px}
.side-card .capture input{flex:1;background:transparent;border:0;outline:0;font:inherit;font-size:13px;padding:4px 6px;color:var(--ink)}
.side-card .capture input::placeholder{color:var(--muted)}
.side-card .capture button{background:var(--accent);color:#fff;border:0;font-weight:700;font-size:12px;padding:6px 12px;border-radius:4px}
.side-card .btn-ghost{display:block;text-align:center;background:transparent;border:1px solid var(--line-2);color:var(--ink);font-weight:700;font-size:13px;padding:9px 12px;border-radius:4px;text-decoration:none}
.side-card .btn-ghost:hover{border-color:var(--accent);color:var(--accent-t);text-decoration:none}

/* ========= GUIDE LAYOUT (sidebar | main | aside) ========= */
.shell.guide{grid-template-columns:200px 1fr 280px}
@media(max-width:1100px){.shell.guide{grid-template-columns:200px 1fr}.guide-aside{grid-column:1/-1}}
/* minmax(0,1fr), а не 1fr: у `1fr` минимум — auto, то есть min-content
   содержимого, и колонка раздувалась до самого широкого нерасжимаемого
   элемента. На мобиле это строка-кнопка .guide-worksbar (nowrap-название
   машины + «· все работы»): min-content 426px при 350px доступных, страница
   ехала вправо на 56px. Кейс 24.09.2026, Mercedes A-class W177. */
@media(max-width:900px){.shell.guide{grid-template-columns:minmax(0,1fr)}}

/* ========= FOOTER ========= */
/* Тёмный футер на ОСИ САЙТА (var(--page-max) — Ян 09.09: «подвал должен
   быть согласован с официальным размером страницы»). Оранжевая линия
   сверху зеркалит линию шапки. Четыре колонки — правая треть больше не
   пустует (боль от 08.09). Прижат к низу вьюпорта каркасом BASE. */
footer.ftr{background:var(--nav);color:#b8b3ab;font-size:14px;margin-top:auto;
  padding:0;text-align:left;border-top:3px solid var(--accent)}
/* Паддинг 20px = как у .navbar-inner: логотип подвала стоит ровно под
   логотипом шапки (Ян 09.09 — финальное решение по левому краю). */
.ftr-in{max-width:var(--page-max);margin:0 auto;padding:0 20px}
.ftr-grid{display:grid;grid-template-columns:1.6fr 1fr 1fr 1fr;gap:40px;
  padding:46px 0 40px}
.ftr-logo{margin-bottom:14px}
.ftr-logo img{height:21px;width:auto;display:block}
.ftr-brand p{margin:0 0 6px;line-height:1.6;max-width:300px}
.ftr-since{font-size:13px;color:#8d8880;margin:0 0 16px}
.ftr-mail{display:inline-block;color:#e8e4dd;text-decoration:none;
  border-bottom:1px solid #4a463f;padding-bottom:1px}
.ftr-mail:hover{color:#fff;border-bottom-color:var(--accent);text-decoration:none}
.ftr-soc{display:flex;gap:10px;margin-top:16px}
.ftr-soc a{width:36px;height:36px;border:1px solid #4a463f;border-radius:8px;
  display:flex;align-items:center;justify-content:center;color:#cfcbc4}
.ftr-soc a svg{width:19px;height:19px;display:block}
.ftr-soc a:hover{border-color:var(--accent);color:#ffb27a}
.ftr-soc a.is-soon{opacity:.45;pointer-events:none}
.ftr-col{display:flex;flex-direction:column}
.ftr-t{color:#8d8880;font-weight:700;margin-bottom:12px;font-size:11px;
  text-transform:uppercase;letter-spacing:.09em}
.ftr-col a{color:#cfcbc4;text-decoration:none;line-height:2.05;font-size:14px}
.ftr-col a:hover{color:#ffb27a;text-decoration:none}
.ftr-spin{margin-top:14px;font-size:12.5px;color:#8d8880;line-height:1.6}
.ftr-spin a{color:#e8e4dd;line-height:1.6}
.ftr-spin a:hover{color:#ffb27a;text-decoration:none}
.ftr-legal{border-top:1px solid #2e2b27;background:rgba(0,0,0,.25)}
.ftr-legal-in{display:flex;justify-content:space-between;gap:10px;flex-wrap:wrap;
  padding-top:15px;padding-bottom:15px;font-size:12.5px;color:#8d8880}
.ftr-legal a{color:#8d8880;text-decoration:none}
.ftr-legal a:hover{color:#fff;text-decoration:none}
/* Мобила: НЕ столбик-простыня (скрин Яна 09.09) — бренд на всю ширину,
   колонки ссылок остаются парами: подвал вдвое короче. */
@media(max-width:900px){
  .ftr-grid{grid-template-columns:1fr 1fr;gap:24px 26px;padding:28px 0 20px}
  .ftr-brand{grid-column:1 / -1}
  .ftr-brand p{max-width:none}
  .ftr-logo img{height:19px}
  .ftr-col a{line-height:1.9;font-size:13.5px}
  .ftr-t{margin-bottom:8px}
  /* «Компания» — на всю ширину: без пустой правой ячейки, спин одной строкой */
  .ftr-grid > .ftr-col:last-child{grid-column:1 / -1}
  .ftr-spin{margin-top:10px}
  .ftr-spin br{display:none}
}
@media(max-width:560px){
  .ftr-legal-in{flex-direction:column;gap:6px}
}

/* ========= UTILITY ========= */
.mono{font-family:var(--mono)}
.muted{color:var(--muted)}

/* ========= HERO-SECTION (h1+sub+форма на главной) ========= */
.hero-section{background:linear-gradient(180deg,#fff 0%,var(--paper) 100%);
  border:1px solid var(--line);border-radius:8px;padding:28px 28px 22px;
  margin-bottom:22px;box-shadow:0 1px 4px rgba(0,0,0,.04)}
.hero-section h1{margin-bottom:8px}
.hero-section .sub{margin-bottom:20px;color:var(--ink-2);font-size:15px;line-height:1.55;max-width:780px}

/* «Как это работает» — onboarding-стрип между hero и формой поиска.
   Карточки шагов уже стоят на .paper-фоне — head делаем компактнее. */
.how-block{margin-bottom:14px}
.how-block .head{margin-bottom:10px}

/* Disambiguation — карточки выбора варианта на /neo/, когда задача
   допускает несколько разных процедур («передние/задние колодки»).
   Структура как у .ai-wait — живёт внутри .block.search-block,
   собственного фона/рамки не имеет. */
.disambig{display:flex;flex-direction:column;gap:14px}
.disambig-h1{
  font-size:17px;font-weight:800;color:var(--ink);line-height:1.25;
  letter-spacing:-.005em;display:flex;align-items:center;gap:9px;
  padding-bottom:10px;border-bottom:2px solid var(--rule);margin-bottom:2px;
}
.disambig-h1::before{
  content:"";display:inline-block;width:7px;height:18px;
  background:var(--accent);border-radius:4px;
}
.disambig-car{font-size:14px;color:var(--ink-2);font-weight:600}
.disambig-sub{font-size:14px;color:var(--ink-2);line-height:1.5;
  padding:8px 12px;background:var(--accent-soft);border-radius:4px}
.disambig-cards{
  display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));
  gap:10px;margin-top:4px;
}
.disambig-card{
  display:flex;flex-direction:column;gap:6px;text-align:left;
  padding:18px 18px 16px;background:#fff;
  border:1px solid var(--line-2);border-radius:8px;
  cursor:pointer;transition:.15s;font-family:var(--sans);
}
.disambig-card:hover{
  border-color:var(--accent);box-shadow:0 4px 14px rgba(0,0,0,.07);
  transform:translateY(-1px);
}
.disambig-card-label{
  font-size:15px;font-weight:800;color:var(--ink);letter-spacing:-.005em;
}
.disambig-card-hint{
  font-size:12.5px;color:var(--ink-2);line-height:1.45;
}
@media (max-width:520px){
  .disambig-cards{grid-template-columns:1fr}
}

/* Хлебные крошки на /neo/ — компактный navigation hint над поиском */
.neo-crumbs{font-size:13px;color:var(--muted);margin-bottom:10px}
.neo-crumbs a{color:var(--ink-2);text-decoration:none}
.neo-crumbs a:hover{color:var(--accent-t);text-decoration:underline}

/* Форма поиска в составе обычного .block-контейнера: убираем у формы
   собственный фон/рамку/padding, чтобы не было «карточка в карточке».
   Дубль-лейбл «Что нужно починить?» внутри формы скрываем — он уже
   вынесен в .block .head как h3. */
.search-block #search-form .cs-form{background:transparent;border:0;box-shadow:none;padding:0;margin:0}
.search-block #search-form .cs-form-label{display:none}
.search-block #results:empty{display:none}
.search-block #results:not(:empty){margin-top:8px}

/* ========= NAVBAR SCROLL-CTA (заменяет navbar-search на главной) ========= */
/* CTA центрируется в промежутке между лого-блоком и действиями (margin auto). */
.nav-scroll-cta{margin:0 auto;flex:0 0 auto;width:420px;max-width:100%;background:#1f1f1f;border:1px solid #3a3a3a;border-radius:8px;padding:0 16px;display:flex;align-items:center;gap:10px;height:38px;color:#cfcfcf;text-decoration:none;transition:border-color .12s,color .12s}
.nav-scroll-cta:hover{border-color:var(--accent);color:#fff;text-decoration:none}
.nav-scroll-cta svg{width:16px;height:16px;flex:none;color:var(--accent-t)}
.nav-scroll-cta span{font-size:13px;font-weight:600;letter-spacing:.01em}

/* ========= CAR-SELECTOR ФОРМА (на главной и в search-live.html) ========= */
.cs-form{background:var(--surface);border:1px solid var(--line);border-radius:8px;padding:22px 24px;margin-bottom:18px}
.cs-form.hero{background:linear-gradient(180deg,#fff 0%,#faf7f2 100%);border-color:var(--line-2);box-shadow:0 1px 3px rgba(0,0,0,.04)}
.cs-form-label{font-size:11px;color:var(--muted);text-transform:uppercase;letter-spacing:.05em;font-weight:700;margin-bottom:14px}
.cs-row{display:grid;gap:10px;margin-bottom:12px}
.cs-row-3{grid-template-columns:1.2fr 1.4fr 1.4fr}
.cs-row-2{grid-template-columns:1fr 2fr}
.cs-row-2-eq{grid-template-columns:1fr 1fr}
.cs-field{display:flex;flex-direction:column;gap:5px}
/* Подпись поля — всегда ОДНА строка: длинная подсказка (например «4 поколения ·
   выберите или укажите год» у ПОКОЛЕНИЯ) обрезается многоточием, а не переносит
   label на 2 строки и не сдвигает селект ниже соседей по ряду. */
.cs-field>span{font-size:11px;color:var(--muted);font-weight:600;text-transform:uppercase;letter-spacing:.04em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.cs-field>span small{font-weight:400;color:var(--line-2);text-transform:none;letter-spacing:0;margin-left:6px}
.cs-field>select,.cs-field>input{padding:10px 12px;border:1px solid var(--line);border-radius:4px;font:inherit;font-size:14px;background:var(--surface);color:var(--ink);height:42px;box-sizing:border-box;font-family:var(--sans)}
.cs-field>select:focus,.cs-field>input:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 3px rgba(234,88,12,.15)}
.cs-field>select:disabled,.cs-field>input:disabled{background:var(--paper);color:var(--muted);cursor:not-allowed}
.cs-task-input{padding:11px 14px !important;font-size:15px !important;height:46px !important}
.cs-chips{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:14px;align-items:center}
.cs-chips-label{font-size:11px;color:var(--muted);font-weight:600;margin-right:4px}
.cs-actions{display:flex;justify-content:space-between;align-items:center;gap:12px}
/* ─── КУБИК .apbtn — единая оранжевая кнопка действия (Ян 09.09) ───
   Эталон — «Получить руководство» формы подбора (.cs-submit). Любая
   оранжевая кнопка сайта: class="apbtn" (модификатор .apbtn-block — на
   всю ширину) ЛИБО селектор в группе ниже, если разметку не поменять.
   Вид кубика ЦЕЛИКОМ: фон accent, радиус 9px, оранжевая тень; hover =
   потемнение (accent-d) + подъём 1px + тень глубже + БЛИК (полоса света
   btn-shine — секция «КНОПКА-БЛИК» ниже в этом файле; новую кнопку без
   класса apbtn надо добавить и в её списки). Стрелка «→» пишется
   ТЕКСТОМ в подписи, не псевдоэлементом: у кнопок-состояний
   («В корзине ✓», «Принять» куки) стрелки нет, и JS свободно меняет
   подпись. Файл двойной: править синхронно site/assets/design.css
   и ai-service/app/static/design.css. */
.apbtn,.cs-submit,.nb-nm-submit,.nb-nm-ok,.report-submit,.ap-submit,.ap-cc-yes{
  display:inline-flex;align-items:center;justify-content:center;gap:8px;
  background:var(--btn);color:#fff;font-family:var(--sans);font-weight:600;
  font-size:14px;line-height:1.25;padding:11px 20px;border:0;border-radius:12px;
  cursor:pointer;text-decoration:none;text-align:center;
  transition:background .15s,transform .15s,box-shadow .15s;
  box-shadow:none}
.apbtn:hover,.cs-submit:hover,.nb-nm-submit:hover,.nb-nm-ok:hover,
.report-submit:hover,.ap-submit:hover,.ap-cc-yes:hover{
  background:var(--btn-h);color:#fff;text-decoration:none;
  transform:translateY(-1px);box-shadow:0 12px 28px -10px rgba(20,20,20,.5)}
.apbtn-block{display:flex;width:100%}

/* ─── ЧЁРНЫЙ КУБИК ДЛЯ ВСЕХ КНОПОК (Ян 20.09: «сделай вообще кубик для всех
   кнопок чёрный, чтобы и при наведении тоже был чёрный цвет») ───────────
   До этого кнопки были оранжевыми (var(--accent)); оранжевый остаётся на
   цене, скидке, метках и активных чипах. Список тот же, что у блика ниже:
   часть кнопок описана в <style> шаблонов (book, checkout, account, cart,
   forum), поэтому красим их здесь одним местом, а не в каждом шаблоне.
   Зелёные состояния («В корзине», «Подписан») и disabled стоят НИЖЕ по
   файлу и остаются своими — правила там тоже с !important. */
.apbtn,.cs-submit,.btn-build,.nb-nm-submit,.nb-nm-ok,.report-submit,.ap-submit,
.ap-cc-yes,.nb .nb-btn-primary,.b-btn-primary,.gg-add,.ac-submit,.ac-addbtn,
.cc-btn,.ac-coupon .cc-copy,.ac-obtn-primary,.co-submit,.oe-save,
.fm-search button,.fm-ask button,.ft-reply-send,.cart-checkout-btn{
  background:var(--btn) !important;color:#fff !important;
  border-color:var(--btn) !important;
  /* Кнопка-ссылка не подчёркивается ни в покое, ни под курсором: на /cart/
     общее правило a:hover перебивало собственный text-decoration кнопки
     (Ян 20.09: «это стандартная кнопка»). */
  text-decoration:none !important;
  box-shadow:none}
/* Наведение: #141414 → #222 глаз не различает, поэтому отклик даёт амберовый
   ободок — бренд возвращается туда, где «здесь действие», ничего не заливая. */
.apbtn:hover,.cs-submit:hover,.btn-build:hover,.nb-nm-submit:hover,
.nb-nm-ok:hover,.report-submit:hover,.ap-submit:hover,.ap-cc-yes:hover,
.nb .nb-btn-primary:hover,.b-btn-primary:hover,.gg-add:hover,.ac-submit:hover,
.ac-addbtn:hover,.cc-btn:hover,.ac-coupon .cc-copy:hover,.ac-obtn-primary:hover,
.co-submit:hover,.oe-save:hover,.fm-search button:hover,.fm-ask button:hover,
.ft-reply-send:hover,.cart-checkout-btn:hover{
  background:var(--btn-h) !important;color:#fff !important;
  border-color:var(--btn-h) !important;
  text-decoration:none !important;
  box-shadow:0 0 0 2px var(--accent)}
/* Фокус с клавиатуры: у кнопок не было спроектированного кольца — по сетке
   из двадцати кнопок человек шёл вслепую (дизайн-ревью 20.09). */
.apbtn:focus-visible,.cs-submit:focus-visible,.btn-build:focus-visible,
.nb-nm-submit:focus-visible,.nb-nm-ok:focus-visible,.report-submit:focus-visible,
.ap-submit:focus-visible,.ap-cc-yes:focus-visible,.nb .nb-btn-primary:focus-visible,
.b-btn-primary:focus-visible,.gg-add:focus-visible,.ac-submit:focus-visible,
.ac-addbtn:focus-visible,.cc-btn:focus-visible,.ac-obtn-primary:focus-visible,
.co-submit:focus-visible,.oe-save:focus-visible,.fm-search button:focus-visible,
.fm-ask button:focus-visible,.ft-reply-send:focus-visible,
.cart-checkout-btn:focus-visible,.nb-fav:focus-visible,.apchip:focus-visible,
.cl-view:focus-visible,.cl-page:focus-visible{
  outline:2px solid var(--accent);outline-offset:2px}
/* Loading-state на время lookup (200-500 мс между кликом и редиректом).
   Кнопка disabled, показывает «Проверяем нашу базу…» с пульсирующим
   дотом. Юзер видит что что-то происходит — без blank screen на /neo/. */
.cs-submit-busy{background:var(--accent-d);cursor:wait;opacity:.92;
  display:inline-flex;align-items:center;gap:10px;justify-content:center}
.cs-submit-busy:hover{background:var(--accent-d)}
.cs-submit-dot{width:9px;height:9px;border-radius:50%;background:#fff;
  animation:cs-submit-pulse 1s ease-in-out infinite;flex:none}
@keyframes cs-submit-pulse{0%,100%{opacity:.4;transform:scale(.8)}50%{opacity:1;transform:scale(1.1)}}
/* «Сбросить» со значком круговой стрелки. Подчёркивание — только у слова:
   подчёркнутая иконка выглядит как опечатка. */
.cs-reset{background:transparent;color:var(--muted);font-size:12.5px;padding:6px 10px;
  border:0;cursor:pointer;font-family:var(--sans);
  display:inline-flex;align-items:center;gap:6px}
.cs-reset span{text-decoration:underline;text-underline-offset:2px}
.cs-reset svg{flex:none;opacity:.8}
.cs-reset:hover svg{opacity:1}
.cs-reset:hover{color:var(--accent-t)}

/* ========= SIDE-MENU «скоро» (заглушки без href) ========= */
.side .soon{display:block;color:var(--muted);font-size:13px;padding:4px 0;font-style:italic;cursor:default}
.side .all-brands{font-size:12.5px;color:var(--muted);font-weight:500}
.side .all-brands:hover{color:var(--accent-t)}

/* ========= HEAD-MUTED — пометки «пример», «скоро» рядом с h3 ========= */
.head-muted{font-weight:400;font-size:12.5px;color:var(--muted);margin-left:10px;letter-spacing:0;text-transform:none}

/* ========= POPULAR REQUESTS — без счётчиков, чистые ссылки ========= */
.demand li .v{display:none}  /* счётчики (старая разметка) скрываем */
.demand li::after{content:"→";color:var(--muted);margin-left:auto;padding-left:8px;opacity:.5;transition:opacity .15s}
.demand li:hover::after{opacity:1;color:var(--accent-t)}

/* ========= PRICE — «от 690 ₽» с серым префиксом ========= */
.books .price .muted{color:var(--muted);font-weight:500;font-size:11.5px;margin-right:3px}

/* ========= RESPONSIVE ========= */
@media(max-width:900px){
  .shell{grid-template-columns:1fr}
  .side{position:static;flex-direction:row;overflow-x:auto;padding-bottom:6px;gap:14px;white-space:nowrap}
  .side a{flex:none;padding:6px 4px}
  .featured{grid-template-columns:1fr}
  .feed{grid-template-columns:1fr}
  .demand{grid-template-columns:1fr}
  .books{grid-template-columns:repeat(2,1fr)}
  /* Мобильная шапка: [бургер | логотип по центру | спейсер] / CTA на всю ширину */
  .navbar-inner{display:grid;grid-template-columns:44px 1fr 44px;height:auto;padding:8px 10px 10px;gap:6px 0;align-items:center}
  .nav-burger{display:flex;grid-row:1;grid-column:1;justify-self:start}
  .nav-left{grid-row:1;grid-column:2;justify-self:center;gap:0}
  .nav-search{grid-row:2;grid-column:1/-1;width:auto;max-width:none;margin:0 4px}
  .nav-scroll-cta{position:static;transform:none;grid-row:2;grid-column:1/-1;width:auto;max-width:none;margin:0 4px;justify-content:center}
  .tagline{display:none}
  .nav-actions{display:none}
  /* Корзина на телефоне остаётся: в мобильной сетке шапки третья колонка
     была пустым спейсером — туда её и ставим. Цель 44px, как остальные. */
  .nav-cart{grid-row:1;grid-column:3;justify-self:end;
    min-width:44px;min-height:44px;justify-content:center;padding:7px 4px}
  .nav-cart svg{width:21px;height:21px}
  .nav-cart-n{position:absolute;top:2px;right:0}
  .subbar .crumbs{display:none}
  /* Панель гамбургера: оверлей под шапкой, в цвет навбара */
  .nav-menu{display:block;position:absolute;top:100%;left:0;right:0;z-index:80;background:var(--nav);border-bottom:3px solid var(--accent);box-shadow:0 24px 48px rgba(0,0,0,.5);max-height:calc(100vh - 120px);overflow:auto}
  .nav-menu[hidden]{display:none}
  .nav-menu-inner{padding:4px 18px 20px}
  .nav-menu-label{font-size:10.5px;color:#8f8f8f;letter-spacing:.09em;text-transform:uppercase;font-weight:700;margin:16px 0 4px}
  .nav-menu-grid{display:grid;grid-template-columns:1fr 1fr;gap:0 18px}
  .nav-menu a{display:block;color:#e4e4e4;text-decoration:none;font-weight:600;font-size:14.5px;padding:10px 2px;border-bottom:1px solid #272727}
  .nav-menu a:hover{color:#fff;text-decoration:none}
  .nav-menu a.nav-menu-all{color:#a8a8a8;font-weight:500}
  .nav-menu-acc{display:flex;gap:10px;padding-top:14px}
  .nav-menu-acc a{flex:1;text-align:center;border:1px solid #3a3a3a;border-radius:8px;padding:11px 8px;font-size:14px}
  /* Акцент — на «Личном кабинете». Раньше правило било по первой кнопке, а
     ею стала иконка администрирования (Ян 05.09: она должна быть неприметной,
     как остальные пункты). */
  .nav-menu-acc a:first-child:not(.nav-admin){border-color:var(--accent);color:#fff}
  .nav-menu-acc .nav-admin + a{border-color:var(--accent);color:#fff}
  .nav-menu-acc .nav-admin{flex:0 0 auto;padding-left:14px;padding-right:14px}
  html.nav-menu-locked,html.nav-menu-locked body{overflow:hidden}
}
@media(max-width:640px){
  body{font-size:14px}
  h1{font-size:24px !important;line-height:1.2 !important}
  .sub{font-size:14px !important}
  .hero-section{padding:18px 14px;border-radius:8px}
  .cs-form{padding:16px 14px;margin-bottom:14px}
  .cs-row-3,.cs-row-2,.cs-row-2-eq{grid-template-columns:1fr;gap:8px;margin-bottom:8px}
  .cs-field>select,.cs-field>input{font-size:16px;height:46px}
  .cs-task-input{font-size:16px !important;height:50px !important}
  .cs-actions{flex-wrap:wrap;gap:8px}
  .cs-submit{flex:1;min-width:60%;padding:14px 18px;font-size:15px}
  .books{grid-template-columns:1fr}
  .subbar-inner{padding:7px 14px}
  .navbar .kbd{display:none}
}

/* ─── Combobox (search-in-dropdown для brand/model) ────────────── */
.cs-combo{position:relative;width:100%}
.cs-combo-input{
  width:100%;box-sizing:border-box;
  /* min-height = высоте нативного select в соседних полях: комбо было 36 px
     против 42 у «поколения», и ряд выглядел разнокалиберным (Ян 06.09). */
  min-height:42px;
  padding:9px 30px 9px 12px;font-size:14px;font-weight:500;
  background:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'><path d='M3 4l3 4 3-4' fill='none' stroke='%23888' stroke-width='1.5'/></svg>") no-repeat right 10px center #fff;
  /* Та же рамка и радиус, что у нативных списков рядом (поколение, год,
     двигатель): комбо было темнее (--line-2) и с радиусом 4 px — на общем
     ряду читалось жирнее соседей (Ян 06.09). */
  border:1px solid var(--line);border-radius:8px;
  color:var(--ink);outline:none;transition:border-color .12s,box-shadow .12s;
}
.cs-combo-input:focus{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft,rgba(234,88,12,.12))}
.cs-combo-input:disabled,.cs-combo-disabled .cs-combo-input{
  background-color:#f5f4f0;color:var(--muted);cursor:not-allowed
}
.cs-combo-list{
  display:none;position:absolute;z-index:50;
  top:calc(100% + 4px);left:0;right:0;
  max-height:280px;overflow-y:auto;
  margin:0;padding:4px 0;
  list-style:none;
  background:#fff;border:1px solid var(--line);border-radius:8px;
  box-shadow:0 8px 24px rgba(0,0,0,.10),0 2px 6px rgba(0,0,0,.05);
  font-size:14px;
}
.cs-combo.open .cs-combo-list{display:block}
.cs-combo-list li{
  padding:8px 12px;cursor:pointer;color:var(--ink);
  border-left:2px solid transparent;
}
.cs-combo-list li[role=option]:hover,
.cs-combo-list li.cs-combo-hl{
  background:var(--accent-soft,#fef0e6);border-left-color:var(--accent)
}
.cs-combo-list li mark{
  background:transparent;color:var(--accent-d,#c2410c);font-weight:700;padding:0
}
.cs-combo-list .cs-combo-empty{
  color:var(--muted);font-style:italic;cursor:default;padding:10px 12px
}
.cs-combo-list .cs-combo-empty:hover{background:transparent;border-left-color:transparent}

/* =====================================================================
   AI PRECHECK — первые 1-3 секунды: pre-flight классификатор задачи.
   Цель: не показывать тяжёлый skeleton если задача очевидно не про авто
   (унитаз, ноут) — backend отказывает за ~1.5 сек.
   ===================================================================== */
.ai-precheck{
  background:var(--surface);border:1px solid var(--line);
  border-left:4px solid var(--accent);padding:18px 22px;border-radius:8px;
  display:flex;align-items:center;gap:14px;max-width:680px;
}
.ai-precheck-dot{
  width:10px;height:10px;border-radius:50%;background:var(--accent);
  animation:ai-precheck-pulse 1.1s ease-in-out infinite;flex:none;
}
.ai-precheck-title{font-size:14px;font-weight:700;color:var(--ink);line-height:1.3}
.ai-precheck-sub{font-size:12.5px;color:var(--muted);margin-top:2px;line-height:1.4}
@keyframes ai-precheck-pulse{
  0%,100%{transform:scale(1);   box-shadow:0 0 0 0 rgba(234,88,12,.5)}
  50%   {transform:scale(1.15); box-shadow:0 0 0 8px rgba(234,88,12,0)}
}

/* =====================================================================
   AI WAIT — ожидание AI-генерации руководства (renderSkeleton)
   Профи-паттерн: 4 шага с галочками, прогресс-бар, таймер, ротация фактов.
   Цель: пользователь видит движение, понимает что идёт, не уходит.
   ===================================================================== */
/* «Готовим инструкцию» — wait-UI рендерится внутри #results, который
   уже сидит в .block.search-block (та же ширина и фон/рамка, что у
   других блоков «Как это работает», «Новинки каталога» и т.п.).
   .ai-wait — это layout-обёртка БЕЗ собственного фона/рамки/padding,
   чтобы не получилась «карточка в карточке». Заголовок «Готовим
   инструкцию» рисуем стилем .block h3 (tick + 17px). */
.ai-wait{
  background:transparent;border:0;border-radius:0;padding:0;
  display:flex;flex-direction:column;gap:14px;max-width:none;
}
/* При показе wait-UI скрываем шапку «Что нужно починить?» и форму:
   .search-block становится самостоятельным блоком «Готовим инструкцию»
   с такой же шириной как все остальные. */
.search-block.is-busy > .head,
.search-block.is-busy > .neo-prebuild,
.search-block.is-busy > #search-form{display:none}
.ai-wait-eyebrow{
  font-size:11px;color:var(--muted);
  text-transform:uppercase;letter-spacing:.06em;font-weight:700;
}
.ai-wait-h1{
  font-size:17px;font-weight:800;color:var(--ink);line-height:1.25;
  letter-spacing:-.005em;
  display:flex;align-items:center;gap:9px;
  padding-bottom:10px;border-bottom:2px solid var(--rule);margin-bottom:2px;
}
.ai-wait-h1::before{
  content:"";display:inline-block;width:7px;height:18px;
  background:var(--accent);border-radius:4px;
}
.ai-wait-car{
  font-size:14px;color:var(--ink-2);font-weight:600;
}
.ai-wait-task{
  font-size:14px;color:var(--ink);font-weight:500;
  padding:8px 12px;background:var(--accent-soft);
  border-radius:4px;display:inline-block;align-self:flex-start;
}
.ai-wait-progress{
  height:3px;background:var(--line);border-radius:4px;overflow:hidden;
  margin:6px 0 4px;
}
.ai-wait-progress-fill{
  height:100%;width:0;background:var(--accent);
  border-radius:4px;
  transition:width .8s cubic-bezier(.4,0,.2,1);
}
.ai-steps{
  list-style:none;padding:0;margin:0;
  display:flex;flex-direction:column;gap:10px;
}
.ai-step{
  display:grid;grid-template-columns:22px 1fr auto;align-items:center;
  gap:12px;font-size:14px;color:var(--muted);
  transition:color .25s ease;
}
.ai-step-icon{
  width:18px;height:18px;border-radius:50%;
  border:1.5px solid var(--line-2);
  position:relative;flex:none;
  transition:all .3s ease;
}
.ai-step-label{line-height:1.35;min-width:0;overflow-wrap:anywhere}
.ai-step-time{
  font-family:var(--mono);font-size:11.5px;color:var(--muted);
  font-variant-numeric:tabular-nums;letter-spacing:-.01em;
}
.ai-step[data-state='active']{color:var(--ink);font-weight:600}
.ai-step[data-state='active'] .ai-step-icon{
  border-color:var(--accent);
  background:var(--accent-soft);
  animation:ai-step-pulse 1.6s ease-in-out infinite;
}
.ai-step[data-state='active'] .ai-step-icon::after{
  content:'';position:absolute;top:50%;left:50%;
  width:6px;height:6px;border-radius:50%;
  background:var(--accent);
  transform:translate(-50%,-50%);
}
.ai-step[data-state='active'] .ai-step-time{color:var(--accent-t);font-weight:600}
.ai-step[data-state='done']{color:var(--ink-2)}
.ai-step[data-state='done'] .ai-step-icon{
  border-color:var(--accent);background:var(--accent);
  animation:ai-step-pop .35s ease;
}
.ai-step[data-state='done'] .ai-step-icon::after{
  content:'';position:absolute;top:50%;left:50%;
  width:9px;height:5px;
  border-left:1.8px solid #fff;border-bottom:1.8px solid #fff;
  transform:translate(-50%,-65%) rotate(-45deg);
}
.ai-wait-meta{
  display:flex;justify-content:space-between;align-items:center;
  font-size:12.5px;color:var(--muted);
  padding-top:4px;
}
.ai-wait-elapsed{
  font-family:var(--mono);font-variant-numeric:tabular-nums;
  font-weight:600;color:var(--ink-2);
}
.ai-wait-fact{
  background:var(--paper);
  border:1px solid var(--line);
  border-radius:4px;padding:14px 16px;
  margin-top:4px;
}
.ai-wait-fact-label{
  font-size:10.5px;color:var(--accent-t);
  text-transform:uppercase;letter-spacing:.08em;
  font-weight:700;margin-bottom:6px;
}
.ai-wait-fact-body{
  font-size:13.5px;color:var(--ink);line-height:1.5;
  transition:opacity .22s ease,transform .22s ease;
}
.ai-wait-fact-fade{opacity:0;transform:translateY(4px)}
@keyframes ai-step-pulse{
  0%,100%{box-shadow:0 0 0 0 rgba(234,88,12,.4)}
  50%   {box-shadow:0 0 0 6px rgba(234,88,12,0)}
}
@keyframes ai-step-pop{
  0%  {transform:scale(.7)}
  60% {transform:scale(1.15)}
  100%{transform:scale(1)}
}

@media (max-width:520px){
  .ai-wait{padding:18px 18px 16px}
  .ai-wait-h1{font-size:17px}
  .ai-step{font-size:13.5px}
  .ai-wait-fact-body{font-size:13px}
}

/* =====================================================================
   ГЛАВНАЯ — "Как это работает", "Свежие гайды", "Каталог"
   ===================================================================== */
.how-steps{list-style:none;padding:0;margin:0;display:grid;grid-template-columns:repeat(3,1fr);gap:14px}
.how-steps > li{display:flex;gap:14px;padding:16px 18px;background:var(--paper);border-radius:8px;border:1px solid var(--line)}
.how-num{
  flex:none;width:34px;height:34px;border-radius:50%;
  background:var(--accent);color:#fff;font-family:var(--mono);
  font-size:15px;font-weight:700;
  display:flex;align-items:center;justify-content:center;
}
.how-body h4{font-size:15px;font-weight:800;color:var(--ink);margin:2px 0 4px;letter-spacing:-.005em}
.how-body p{font-size:13.5px;color:var(--ink-2);line-height:1.5;margin:0}
@media (max-width:860px){
  .how-steps{grid-template-columns:1fr}
}

.latest-guides{list-style:none;padding:0;margin:0;display:flex;flex-direction:column;gap:0}
.latest-guides li{border-top:1px solid var(--line)}
.latest-guides li:first-child{border-top:0}
.latest-guides a{
  display:flex;align-items:baseline;gap:14px;padding:10px 0;
  text-decoration:none;color:var(--ink);
  transition:color .12s;
}
.latest-guides a:hover{color:var(--accent-d)}
.latest-guides a:hover .latest-task{color:var(--accent-d)}
.latest-machine{
  font-family:var(--mono);font-size:12px;color:var(--muted);
  letter-spacing:-.01em;flex:none;min-width:220px;
}
.latest-task{font-size:14px;color:var(--ink-2);font-weight:500;line-height:1.4}
@media (max-width:780px){
  .latest-guides a{flex-direction:column;gap:2px}
  .latest-machine{min-width:0}
}

.catalog-pitch{
  font-size:14px;color:var(--ink-2);line-height:1.55;
  margin:0 0 16px;max-width:720px;
}
.catalog-links{
  display:flex;flex-wrap:wrap;gap:8px;
}
.catalog-link{
  display:inline-block;padding:7px 14px;
  background:var(--paper);border:1px solid var(--line);border-radius:4px;
  font-size:13px;font-weight:600;color:var(--ink);
  text-decoration:none;transition:.12s;
}
.catalog-link:hover{
  background:var(--accent-soft);border-color:var(--accent);
  color:var(--accent-d);text-decoration:none;
}

/* =====================================================================
   NEW-BOOKS — карточки книг на главной (новинки каталога)
   ===================================================================== */
/* Пять книг в ряд на широком экране (Ян 06.09) — четыре давали слишком
   крупные карточки. На узких сужается: 4 → 3 → 2, и на телефоне остаётся 2,
   а не одна во весь экран. */
.new-books{
  /* Четыре в ряд, не пять: при --page-max 1280 пятая колонка ужимала
     обложку до ~180px, а обложка — главный опознавательный знак книги
     (аудит 10.09). */
  display:grid;grid-template-columns:repeat(4,1fr);gap:14px;
}

/* =====================================================================
   NB-CARD — карточка книги. Та же разметка что на site/index.html.j2
   (главная — «Новинки каталога»). Используется компонентом
   templates/components/_book_card.html в боковой колонке guide-страницы.

   При изменении вида книги — менять В ОДНОМ МЕСТЕ (или здесь, или в
   site/assets/design.css — оба должны быть синхронизированы).
   ===================================================================== */
.nb{
  display:flex;flex-direction:column;text-decoration:none;color:var(--ink);
  background:#fff;border:1px solid var(--line);border-radius:8px;
  overflow:hidden;transition:transform .15s,border-color .15s,box-shadow .15s;
  cursor:pointer;position:relative;
}
/* Кнопка «в избранное» — правый верхний угол карточки */
/* Свойства книги (.nb-specs) — деталь СПИСКА каталога, не карточки:
   в сетке и в боковых колонках хабов они превращали карточку в простыню
   «Автомобиль с: … Год издания: … Серия: …» и та переставала совпадать с
   карточками главной (Ян 09.09). Показывает их только .cl-list каталога. */
.nb-specs{display:none}
.nb-fav{
  position:absolute;top:8px;right:8px;z-index:3;
  width:32px;height:32px;border:0;border-radius:50%;
  background:rgba(255,255,255,.9);color:#c0392b;
  font-size:17px;line-height:1;cursor:pointer;
  display:flex;align-items:center;justify-content:center;
  box-shadow:0 1px 4px rgba(0,0,0,.12);transition:transform .12s,background .12s;
}
.nb-fav:hover{transform:scale(1.12);background:#fff}
.nb:hover{
  border-color:var(--accent);box-shadow:0 6px 18px rgba(0,0,0,.10);
  transform:translateY(-2px);text-decoration:none;color:var(--ink);
}
.nb-gallery{
  position:relative;aspect-ratio:4/5;background:#fff;
  overflow:hidden;padding-bottom:22px;
}
/* Плавный переход галерея → body вместо жёсткой линии:
   1. лёгкий vignette внизу галереи (тень обложки на «листке»)
   2. inset-shadow сверху body — обложка визуально «лежит» на нём
   Гораздо мягче чем border-bottom:1px solid. */
.nb-gallery::after{
  content:"";position:absolute;left:0;right:0;bottom:0;height:24px;
  background:linear-gradient(to bottom,
    rgba(0,0,0,0) 0%,
    rgba(0,0,0,.04) 100%);
  pointer-events:none;z-index:1;
}
.nb-body{box-shadow:inset 0 1px 0 rgba(0,0,0,.04)}
.nb-photo{
  position:absolute;inset:0;
  width:100%;height:100%;object-fit:contain;
  padding:14px;box-sizing:border-box;background:#fff;display:block;
  opacity:0;visibility:hidden;transition:opacity .2s;pointer-events:none;
}
.nb-photo-active{opacity:1;visibility:visible}

/* Стрелки prev/next — появляются на hover */
.nb-arr{
  position:absolute;top:50%;transform:translateY(-50%);
  width:36px;height:36px;background:rgba(255,255,255,.92);
  border:1px solid var(--line);border-radius:50%;cursor:pointer;
  font-size:22px;line-height:1;color:var(--ink);
  display:flex;align-items:center;justify-content:center;
  opacity:0;transition:opacity .15s,background .12s;
  font-weight:300;font-family:Arial,sans-serif;
  z-index:2;padding:0;padding-bottom:3px;
}
.nb-arr:hover{background:#fff;border-color:var(--accent);color:var(--accent-d)}
.nb-arr-prev{left:8px}
.nb-arr-next{right:8px}
.nb:hover .nb-arr{opacity:1}
.nb-gallery{
  position:relative;aspect-ratio:4/5;background:#fff;
  overflow:hidden;padding-bottom:22px;
}
/* Точки внизу */
.nb-dots{
  position:absolute;bottom:6px;left:50%;transform:translateX(-50%);
  display:flex;gap:5px;z-index:2;
}
.nb-dot{
  width:7px;height:7px;border-radius:50%;
  background:rgba(20,20,20,.25);border:0;cursor:pointer;padding:0;
  transition:background .15s,width .15s;
}
.nb-dot-active{background:var(--accent);width:18px;border-radius:4px}
.nb-dot:hover{background:rgba(20,20,20,.5)}
.nb-dot-active:hover{background:var(--accent)}
.nb-body{
  box-shadow:inset 0 1px 0 rgba(0,0,0,.04);
  padding:11px 13px 12px;
  display:flex;flex-direction:column;gap:5px;flex:1;
  text-decoration:none;color:var(--ink);
}
.nb-body:hover{text-decoration:none;color:var(--ink)}
/* Издательство — метаданные, а не выгода (дизайн-ревью 20.09: амбер должен
   означать одно). Оранжевый на карточке остался только у плашки скидки. */
.nb-pub{
  font-family:var(--mono);font-size:9.5px;color:var(--muted);
  letter-spacing:.06em;text-transform:uppercase;font-weight:700;
}
.nb-name{
  font-size:12.5px;font-weight:700;color:var(--ink);line-height:1.35;
  letter-spacing:-.005em;
  display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;
  overflow:hidden;
}
/* Допинфо под названием: хвост общего шаблона книги. Появилось, когда имя
   в карточке стало коротким и место освободилось (Ян 10.09). */
.nb-note{
  font-size:11px;font-weight:500;color:var(--ink-2);line-height:1.35;
  margin-top:2px;
  display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;
  overflow:hidden;
}
/* Цена в карточке (Ян 13.09): итоговая крупно, базовая зачёркнутой и плашка
   скидки — как у «Читай-города» и маркетплейсов. Файл двойной — правка в обоих. */
.nb-price{
  display:flex;flex-wrap:wrap;align-items:baseline;column-gap:6px;row-gap:2px;
  color:var(--ink);margin-top:auto;padding-top:6px;
}
.nb-price b{font-size:16px;font-weight:800;letter-spacing:-.01em;white-space:nowrap}
.nb-price .muted{font-size:10.5px;font-weight:500;color:var(--muted)}
.nb-price .cur{font-size:12.5px;font-weight:700;color:var(--ink);margin-left:-3px}
.nb-price-old{
  font-size:12px;font-weight:500;color:var(--muted);white-space:nowrap;
  text-decoration:line-through;text-decoration-thickness:1px;
}
.nb-disc{
  align-self:center;font-size:11px;font-weight:800;line-height:1.35;color:#fff;
  background:var(--accent);border-radius:4px;padding:1px 6px;white-space:nowrap;
}
.nb-sr{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}

/* Кнопки CTA на карточке (как .b-actions на странице книги).
   Двойная специфичность .nb-card + !important на color/background чтобы
   родительские стили (.main a:hover{color:accent}, обёртки в side-card
   на странице гайда) не перебивали. */
.nb-actions{
  display:flex;flex-wrap:wrap;gap:5px;
  padding:0 13px 12px;margin-top:-2px;
}
/* .main a:hover в guide.css перебивает цвета кнопок (становятся рыжими).
   Поэтому используем удвоенную специфичность .nb .nb-btn + !important
   на color/background. */
/* Пропорции взяты с ОтветИИм (Ян 20.09: «кнопки в корзину мне не нравятся,
   посмотри как сделано в ОтветИИм»): вес 600 вместо 700, радиус 10, высота 38
   и никакой тени — двадцать кнопок в сетке не должны весить как призыв. */
.nb .nb-btn{
  flex:1;min-width:0;display:inline-flex;align-items:center;
  justify-content:center;min-height:38px;padding:8px 12px;font-size:13px;
  font-weight:600;border-radius:10px;text-decoration:none !important;
  text-align:center;letter-spacing:0;
  transition:background .15s,border-color .15s,color .15s,box-shadow .15s;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;
}
/* «В корзину» — чёрная (Ян 20.09: «кнопки в корзину очень ярко выглядят,
   сделай их чёрными»). Оранжевого на карточке и так хватает: цена, скидка,
   метки. Оранжевым остаются одиночные кнопки-призывы вне сетки. */
.nb .nb-btn-primary{
  background:var(--btn) !important;color:#fff !important;
  border:1px solid var(--btn) !important;
  box-shadow:none;
}
.nb .nb-btn-primary:hover{
  background:var(--btn-h) !important;border-color:var(--btn-h) !important;
  color:#fff !important;
  box-shadow:0 0 0 2px var(--accent);
}
/* Кнопка «+ В гараж» (#guide-garage) — ТОТ ЖЕ вид, что «В корзину»
   (.nb .nb-btn-primary), но она вне .nb, поэтому дублируем правило на .gg-add.
   flex:0 0 auto (не растягиваем, в отличие от .nb .nb-btn с flex:1). */
.gg-add{
  flex:0 0 auto;display:inline-flex;align-items:center;justify-content:center;
  padding:8px 10px;font-size:13px;font-weight:700;border-radius:8px;
  text-decoration:none !important;text-align:center;letter-spacing:.005em;
  transition:background .15s,border-color .15s,transform .15s,box-shadow .15s;
  white-space:nowrap;cursor:pointer;font-family:inherit;
  background:var(--accent) !important;color:#fff !important;
  border:1px solid var(--accent) !important;
  box-shadow:0 7px 20px -9px rgba(234,88,12,.55);
}
.gg-add:hover{
  background:var(--accent-d) !important;border-color:var(--accent-d) !important;color:#fff !important;
  transform:translateY(-1px);box-shadow:0 12px 28px -10px rgba(234,88,12,.6);
}
.gg-add .gg-plus{font-size:16px;font-weight:800;line-height:1;margin-right:1px}

/* «В гараж» в левой колонке под названием машины (.side-machine).
   ВАЖНО: у #guide-garage.side-garage НЕ задаём display — иначе перебьёт атрибут
   hidden и блок увидит гость (JS снимает hidden только залогиненному). */
/* Гараж отделён от названия машины тонкой линией — читается как отдельный,
   намеренный элемент, а не «прилеплен» к шапке. */
.side-garage{margin-top:10px;padding-top:10px;border-top:1px solid var(--line)}
.side-garage-btn{padding:6px 13px;font-size:12.5px}   /* компактная кнопка, НЕ во всю ширину */
.side-garage-btn .gg-plus{font-size:14px}
/* «Уже в гараже» — ОДНА спокойная строка-ссылка: амбер-галочка + приглушённый
   текст (без зелёно-оранжевой пестроты). Скоуп `.side-garage` бьёт крупный
   `.side a` (иначе ссылка выглядела бы как пункт меню рейла). */
.side-garage .side-garage-in{display:inline-flex;align-items:center;gap:6px;
  font-size:12.5px;font-weight:600;color:var(--ink-2);text-decoration:none;
  padding:0;border:0;background:none;margin:0;letter-spacing:0}
.side-garage .side-garage-in::before{content:"✓";color:var(--accent-d);font-weight:800;font-size:13px}
.side-garage .side-garage-in:hover{color:var(--accent-d);background:none;border:0;text-decoration:none}
.side-garage .side-garage-arr{color:var(--muted);transition:color .12s}
.side-garage .side-garage-in:hover .side-garage-arr{color:var(--accent-d)}
.side-garage .gg-status{margin-top:6px;font-size:11.5px;color:var(--accent-d);line-height:1.4}

/* ── Действия по руководству: иконки в правом-верхнем углу заголовка ──── */
.guide-tools{display:flex;gap:6px;flex:0 0 auto;align-self:flex-start;margin-top:3px}
.guide-tool{
  display:inline-flex;align-items:center;justify-content:center;
  width:34px;height:34px;padding:0;font-size:15px;line-height:1;
  background:transparent;border:1px solid var(--line-2);color:var(--ink-2);
  border-radius:8px;cursor:pointer;font-family:inherit;transition:.12s;
}
.guide-tool:hover{border-color:var(--accent);background:var(--accent-soft)}
.guide-tool.is-done{border-color:var(--incart);background:transparent}
.print-only{display:none}

@media print{
  /* Печать = чистый Ч/Б документ. НИЧЕГО не полагается на фон (браузеры печатают
     фоновые цвета только с явной опцией «фоновая графика») — номера шагов и
     маркеры рисуем чёрным текстом, а не белым-на-цветном-кружке. */
  .navbar, .subbar, footer, .side-cats, .guide-aside,
  #guide-garage, .guide-report, .svc-est, .guide-tools, .no-print{
    display:none !important;
  }
  html, body{background:#fff !important}
  .print-only{display:block !important}
  .print-source{font-size:11px;color:#000 !important;margin:0 0 12px;padding-bottom:8px;
    line-height:1.4;border-bottom:1px solid #000}
  .print-source .print-url{color:#333 !important;word-break:break-all}

  .shell, .shell.guide{display:block !important;max-width:100% !important;margin:0 !important;padding:0 !important;gap:0 !important}
  .main{width:100% !important;max-width:100% !important;margin:0 !important;padding:0 !important}

  /* Всё чёрным; фоны/тени/цветные плашки — прочь, в т.ч. у ::before-маркеров. */
  .main, .main *, .main *::before, .main *::after{
    color:#000 !important;background:transparent !important;
    box-shadow:none !important;text-shadow:none !important;
  }
  .main .block{border:0 !important;border-top:1.5px solid #000 !important;border-radius:0;
    padding:8px 0 2px !important;margin:0 0 4px !important}
  .block .head{border-bottom:1px solid #000 !important;padding-bottom:6px;margin-bottom:8px}
  .block .head h3{border:0 !important;padding-left:0 !important}
  .block .head h3::before{display:none !important}
  .block .head .badge{border:0 !important;padding:0 !important}
  .guide-title h1{font-size:20px;margin:0 0 6px}
  .sub{font-size:12.5px;margin-bottom:12px}

  /* Мета — простой перечень через отступы, без плашек-рамок. */
  .guide-meta{display:block !important;font-size:12px;margin:0 0 12px !important;border:0 !important}
  .guide-meta .m{display:inline !important;border:0 !important;padding:0 !important;
    margin:0 16px 0 0;font-family:inherit;white-space:normal}

  /* Шаги — обычная нумерация «N.» чёрным (цветные кружки при печати исчезают). */
  .steps-list li{padding:6px 0 6px 28px !important;border-top:1px solid #ccc !important;color:#000 !important}
  .steps-list li:first-child{border-top:0 !important;padding-top:2px !important}
  .steps-list li::before{
    content:counter(s) "." !important;width:auto !important;height:auto !important;
    border-radius:0 !important;left:0 !important;top:6px !important;
    font-family:inherit !important;font-weight:700 !important;display:block !important;
  }
  .steps-list li:first-child::before{top:2px !important}

  /* Предупреждение «!» — чёрный в тонкой рамке (фон не нужен). */
  .pitfalls li{padding:6px 0 6px 24px !important;border-bottom:1px solid #ccc !important}
  .pitfalls li:last-child{border-bottom:0 !important}
  .pitfalls li::before{
    content:"!" !important;border:1.4px solid #000 !important;
    width:16px !important;height:16px !important;top:6px !important;font-weight:700 !important;
  }

  /* Фазы (details) раскрыты: JS выставляет open, CSS — подстраховка. */
  details.phase, details.phase>*{display:block !important}
  summary::-webkit-details-marker{display:none}
  .phase-head{cursor:default;font-weight:700;font-size:13.5px;margin:10px 0 2px;list-style:none}
  .phase-count{font-weight:400}

  /* Разрывы страниц: не рвём шаг/деталь; заголовки не отрываем от контента. */
  .steps-list>li, .parts-item, .pitfalls>li, .guide-meta{page-break-inside:avoid;break-inside:avoid}
  .block .head, h1, h3, .phase-head{page-break-after:avoid}
  a{color:#000 !important;text-decoration:none !important}
  @page{margin:14mm}
}
/* «В корзине» — тот же кубик, но в зелёном: своя тень и блик (Ян 09.09) */
.nb .nb-cart-in{
  background:var(--incart) !important;border-color:var(--incart) !important;
  color:#fff !important;box-shadow:0 7px 20px -9px rgba(13,152,71,.55);
}
/* «В корзине» на детальной странице книги (.b-btn-primary) — тот же
   зелёный. Правило глобальное, чтобы цвет жил в одном месте. */
/* !important обязателен: чёрный кубик кнопок выше тоже с !important, и без
   него «В корзине» на странице книги чернела вместо зелёной. */
.b-btn-primary.b-cart-in{background:var(--incart) !important;border-color:var(--incart) !important;
  box-shadow:0 7px 20px -9px rgba(13,152,71,.55)}
.b-btn-primary.b-cart-in:hover{background:var(--incart-d) !important;border-color:var(--incart-d) !important;
  box-shadow:0 12px 28px -10px rgba(13,152,71,.6)}
.nb .nb-cart-in:hover{
  background:var(--incart-d) !important;border-color:var(--incart-d) !important;
  color:#fff !important;box-shadow:0 12px 28px -10px rgba(13,152,71,.6);
  transform:translateY(-1px);
}
.nb .nb-btn-secondary{
  background:#fff !important;color:var(--ink) !important;
  border:1px solid var(--line-2) !important;
}
.nb .nb-btn-secondary:hover{
  border-color:var(--accent) !important;color:var(--accent-d) !important;
}
/* «Подписан» — состояние кнопки .js-notify-modal после успешной подписки */
.nb .nb-btn-secondary.nb-notify-done,
.nb .nb-btn-secondary.nb-notify-done:hover{
  background:#f0f9f2 !important;color:#16a34a !important;
  border-color:#bfe6cb !important;cursor:default;opacity:1;
}

/* ─── Форма подписки «Сообщить о появлении» (OOS-карточка) ───
   Раскрывается по клику; во flex-ряду .nb-actions занимает всю ширину. */
/* .nb .nb-btn{display:inline-flex} перебивает UA [hidden]{display:none};
   возвращаем скрытие кнопки-тоггла после раскрытия формы. */
.js-notify-toggle[hidden]{display:none !important}
.nb-notify-form{
  flex:1 1 100%;display:flex;gap:5px;align-items:stretch;margin-top:2px;
}
.nb-notify-form input[type=email]{
  flex:1 1 auto;min-width:0;padding:7px 9px;font-size:13px;
  border:1px solid var(--line-2);border-radius:4px;
  background:#fff;color:var(--ink);
}
.nb-notify-form input[type=email]:focus{outline:none;border-color:var(--accent)}
.nb .nb-notify-form .nb-btn-primary{flex:0 0 auto;padding:7px 14px}
.nb-notify-status{flex:1 1 100%;font-size:12px;color:#b91c1c;margin-top:2px}
.nb-notify-thanks{flex:1 1 100%;font-size:12.5px;font-weight:700;color:#16a34a;padding:4px 0}

/* ─── Notify-модалка «Сообщить о появлении» (карточка книги) ───
   В карточке видна только кнопка .js-notify-modal; клик открывает overlay
   (строится в book-card.js). Тело окна: форма email → подтверждение. */
.nb-nm-overlay{
  position:fixed;inset:0;z-index:1000;
  display:flex;align-items:center;justify-content:center;
  padding:16px;
  background:rgba(20,17,16,.55);
  -webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);
  animation:nbNmFade .16s ease;
}
.nb-nm-overlay[hidden]{display:none}
html.nb-nm-lock{overflow:hidden}
.nb-nm{
  position:relative;width:100%;max-width:380px;
  background:var(--surface);color:var(--ink);
  border:1px solid var(--line);border-radius:12px;
  padding:26px 24px 24px;
  box-shadow:0 24px 60px -18px rgba(20,17,13,.5);
  animation:nbNmRise .18s ease;
}
.nb-nm--done{text-align:center}
.nb-nm-close{
  position:absolute;top:8px;right:10px;
  width:30px;height:30px;padding:0;line-height:1;
  border:0;background:none;cursor:pointer;
  font-size:24px;color:var(--muted);border-radius:8px;
}
.nb-nm-close:hover{color:var(--ink);background:var(--paper)}
.nb-nm-title{margin:0 0 6px;font-size:18px;font-weight:800;letter-spacing:-.01em;color:var(--ink)}
.nb-nm-sub{margin:0 0 16px;font-size:13.5px;line-height:1.45;color:var(--ink-2)}
.nb-nm--done .nb-nm-sub{margin-bottom:18px}
.nb-nm-form{display:flex;flex-direction:column;gap:10px}
.nb-nm-input{
  width:100%;padding:11px 12px;font-size:14px;
  border:1px solid var(--line-2);border-radius:8px;
  background:#fff;color:var(--ink);
}
.nb-nm-input:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft)}
/* Кнопки модалки задаём самостоятельно: окно живёт в <body>, вне .nb,
   поэтому styling `.nb .nb-btn` до него не достаёт. */
.nb-nm-submit,.nb-nm-ok{width:100%}                /* вид — кубик .apbtn выше */
.nb-nm-submit:disabled{opacity:.6;cursor:default}
.nb-nm-ok{margin-top:4px}
.nb-nm-status{font-size:12.5px;color:#b91c1c;min-height:1em}
.nb-nm-done-ic{
  width:46px;height:46px;margin:0 auto 12px;
  display:flex;align-items:center;justify-content:center;
  border-radius:50%;background:var(--accent-soft);color:var(--accent-t);
  font-size:26px;font-weight:700;
}
@keyframes nbNmFade{from{opacity:0}to{opacity:1}}
@keyframes nbNmRise{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}
@media (prefers-reduced-motion:reduce){.nb-nm-overlay,.nb-nm{animation:none}}

@media (max-width:1100px){
  .new-books{grid-template-columns:repeat(3,1fr)}
}
@media (max-width:760px){
  .new-books{grid-template-columns:repeat(2,1fr)}
}
@media (max-width:480px){
  /* Две колонки и на телефоне: одна книга во весь экран — «очень жирные
     книги», как выразился Ян. */
  .new-books{grid-template-columns:repeat(2,1fr);gap:10px}
  .nb-cover{aspect-ratio:16/9}
}

/* ==================================================
   Блоки, добавленные на страницах /guides/ и /cart/
   ================================================== */

/* CTA-ссылка справа в subbar — короткий путь в каталог книг.
   Призыв слабее основного h1/buy, чтобы не отвлекать от чтения гайда. */
/* Селектор с `a` обязателен: у общего `.subbar a` (underline) специфичность
   выше, чем у одиночного класса, и в покое под ссылкой оказывались ДВЕ линии —
   подчёркивание и своя рамка. При наведении подчёркивание снималось hover-
   правилом, линия дёргалась, и строка мигала (Ян 06.09). */
.subbar a.subbar-trust{
  margin-left:auto;color:#fff;opacity:.9;font-size:12.5px;
  font-weight:600;letter-spacing:.005em;white-space:nowrap;
  text-decoration:none;border-bottom:1px solid rgba(255,255,255,.3);
  padding-bottom:1px;transition:opacity .12s,border-color .12s;
}
.subbar a.subbar-trust:hover{opacity:1;border-bottom-color:#fff;text-decoration:none;color:#fff}
@media(max-width:760px){.subbar-trust{display:none}}

/* ====================================================================
   SIDE-CATS — навигация по системам автомобиля (стиль Haynes/ALLDATA)
   Используется на страницах /guides/* — левый sidebar.
   ==================================================================== */
.side-cats{gap:0}
.side-cats .side-top{
  display:block;padding:6px 12px;font-size:13px;font-weight:600;
  color:var(--ink-2);border-left:2px solid transparent;margin-left:-2px;
  transition:.12s;text-decoration:none;
}
.side-cats .side-top:hover{background:var(--surface);border-left-color:var(--accent);color:var(--ink)}

.side-machine{
  margin:14px 0 8px;padding:10px 12px;background:var(--paper);
  border-left:3px solid var(--accent);border-radius:0 4px 4px 0;
}
.side-machine-label{
  font-size:10px;color:var(--muted);letter-spacing:.08em;
  text-transform:uppercase;font-weight:700;margin-bottom:3px;
}
.side-machine-name{
  font-size:14px;font-weight:800;color:var(--ink);line-height:1.3;
  letter-spacing:-.005em;
}
.side-machine-gen{font-size:12px;font-weight:600;color:var(--ink-2)}

.side-cat{margin:0;padding:0;border-bottom:1px solid var(--line)}
.side-cat:first-of-type{border-top:1px solid var(--line)}
.side-cat-head{
  display:flex;align-items:center;gap:8px;padding:9px 12px;
  font-size:13px;font-weight:600;color:var(--ink);
  cursor:pointer;user-select:none;list-style:none;
  border-left:2px solid transparent;margin-left:-2px;
  transition:background .12s;
}
.side-cat-head::-webkit-details-marker{display:none}
.side-cat-head::marker{display:none}
.side-cat-head:hover{background:var(--surface)}
/* Текущая категория: extra-bold тёмный текст (как .side-machine-name).
   Без амбер-цвета — фон+полоска у active-гайда внутри уже сигнализируют. */
.side-cat--current > .side-cat-head{
  font-weight:800;color:var(--ink);
}
.side-cat-title{flex:1;letter-spacing:-.005em}
.side-cat-count{
  font-family:var(--mono);font-size:11px;font-weight:600;
  color:var(--muted);background:var(--line);padding:1px 7px;border-radius:8px;
  font-variant-numeric:tabular-nums;line-height:1.5;
}
/* Шеврон ▸ → ▾ (CSS-only через border) */
.side-cat-chev{
  width:0;height:0;flex:none;
  border-top:4px solid transparent;border-bottom:4px solid transparent;
  border-left:5px solid var(--muted);
  transition:transform .15s ease;
  margin-left:-2px;
}
.side-cat[open] > .side-cat-head .side-cat-chev{
  transform:rotate(90deg);
}

/* Active гайд в списке — тот же стиль что у блока .side-machine
   (бежевый paper фон + амбер-полоска 3px слева). */
.side-cat-active{position:relative}
.side-cat-active > span[aria-current]{
  display:block;padding:6px 12px 6px 22px;font-size:12.5px;
  color:var(--ink);font-weight:700;line-height:1.35;
  background:var(--paper);
  border-left:3px solid var(--accent);margin-left:-3px;
  border-radius:0 4px 4px 0;
}

.side-cat-list,.side-cat-suggestions{
  list-style:none;margin:0;padding:0;
}
.side-cat-list li,.side-cat-suggestions li{margin:0;padding:0}
.side-cat-list{padding-bottom:6px}
.side-cat-list a{
  display:block;padding:5px 12px 5px 24px;font-size:12.5px;
  color:var(--ink-2);font-weight:500;line-height:1.35;
  border-left:2px solid transparent;margin-left:-2px;
  text-decoration:none;transition:.12s;
}
.side-cat-list a:hover{
  background:var(--surface);color:var(--ink);
  border-left-color:var(--line-2);
}
.side-cat-status{
  font-size:10px;color:var(--muted);margin-left:6px;
  font-weight:500;
}

.side-cat-suggestions{padding-bottom:8px}
.side-cat-suggest{
  display:flex;align-items:flex-start;gap:7px;
  padding:4px 12px 4px 14px;font-size:12px;
  color:var(--muted);font-weight:500;line-height:1.35;
  border-left:2px dashed transparent;margin-left:-2px;
  text-decoration:none;transition:.12s;
}
.side-cat-suggest:hover{
  color:var(--accent-d);background:var(--accent-soft);
  border-left-color:var(--accent);
}
.side-cat-suggest-plus{
  font-family:var(--mono);font-size:14px;color:var(--accent-t);
  font-weight:800;line-height:1;flex:none;width:14px;text-align:center;
  margin-top:1px;
}

/* ─── Сайдбар гайда на мобиле: строка + шторка (выбор Яна 02.09) ──────
   .side-works прозрачна всегда: summary скрыт, details open из разметки.
   ≤900px: контент гайда — с первого экрана; над заголовком тонкая
   строка-кнопка .guide-worksbar «<машина> · все работы ⌄», по тапу сайдбар
   выезжает bottom sheet'ом (.side-cats.open) с затемнением .side-backdrop.
   Шапка шторки — однострочная карточка машины с «+ В гараж» справа. ─── */
.side-works > .side-works-head{display:none}
.guide-worksbar{display:none}
.side-backdrop{display:none}
@media(max-width:900px){
  .guide-worksbar{
    display:flex;align-items:center;gap:6px;width:100%;
    margin:0 0 14px;padding:11px 14px;
    background:var(--paper);border:1px solid var(--line-2);border-radius:8px;
    font:inherit;font-size:13.5px;color:var(--ink);text-align:left;
  }
  .gwb-car{font-weight:800;letter-spacing:-.005em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  .gwb-label{color:var(--ink-2);font-weight:600;white-space:nowrap}
  .gwb-chev{
    margin-left:auto;flex:none;width:0;height:0;
    border-left:5px solid transparent;border-right:5px solid transparent;
    border-top:6px solid var(--accent);
  }
  .side-backdrop:not([hidden]){
    display:block;position:fixed;inset:0;z-index:94;
    background:rgba(0,0,0,.42);
  }
  .shell.guide .side-cats,
  .cl-wrap .side-cats,
  .b-wrap .side-cats{
    position:fixed;left:0;right:0;bottom:0;top:auto;z-index:95;
    background:var(--surface);border-radius:12px 12px 0 0;
    box-shadow:0 -18px 48px rgba(0,0,0,.35);
    max-height:78vh;overflow:auto;
    padding:10px 16px calc(18px + env(safe-area-inset-bottom));
    transform:translateY(102%);transition:transform .25s ease;
    flex-direction:column;white-space:normal;gap:0;
  }
  .shell.guide .side-cats.open,
  .cl-wrap .side-cats.open,
  .b-wrap .side-cats.open{transform:translateY(0)}
  /* «ручка» шторки */
  .shell.guide .side-cats::before,
  .cl-wrap .side-cats::before,
  .b-wrap .side-cats::before{
    content:"";display:block;width:38px;height:4px;border-radius:4px;
    background:var(--line-2);margin:0 auto 10px;flex:none;
  }
  .side-cats .side-machine{
    margin:0 0 4px;padding:10px 14px;
    display:grid;grid-template-columns:1fr auto;align-items:center;column-gap:12px;
  }
  .side-cats .side-machine-label{grid-column:1;margin-bottom:2px}
  .side-cats .side-machine-name{grid-column:1;font-size:15px}
  .side-cats .side-machine-name br{display:none}
  .side-cats .side-machine-gen::before{content:"· "}
  .side-cats .side-garage{grid-column:2;grid-row:1/span 2;border-top:0;margin-top:0;padding-top:0}
}

@media (max-width: 820px){
  .side-cats{position:static}
  .side-cat-list a{padding-left:24px}
}

/* =====================================================================
   GUIDE-REPORT — кнопка «сообщить о неточности» под гайдом
   ===================================================================== */
.guide-report{margin:24px 0 12px}
.report-details{
  background:var(--paper);border:1px dashed var(--line-2);
  border-radius:8px;padding:0;
}
.report-summary{
  display:flex;align-items:center;gap:10px;
  padding:14px 18px;cursor:pointer;user-select:none;
  font-size:13.5px;color:var(--ink-2);font-weight:500;
  list-style:none;
}
.report-summary::-webkit-details-marker{display:none}
.report-summary::marker{display:none}
.report-summary-icon{
  width:22px;height:22px;flex:none;
  display:inline-flex;align-items:center;justify-content:center;
  background:var(--accent-soft);color:var(--accent-t);
  border-radius:50%;font-size:13px;font-weight:700;
}
.report-summary-cta{
  color:var(--accent-d);font-weight:700;text-decoration:underline;
  text-underline-offset:3px;text-decoration-thickness:1px;
}
.report-details[open] .report-summary{
  border-bottom:1px dashed var(--line-2);
}

.report-form{padding:14px 18px 18px}
.report-thanks{
  padding:14px 18px;font-size:13.5px;color:var(--ink);line-height:1.5;
}
.report-label{display:block;margin-bottom:12px}
.report-label-text{
  display:block;font-size:12px;color:var(--ink-2);font-weight:700;
  text-transform:uppercase;letter-spacing:.05em;margin-bottom:5px;
}
.report-optional{
  font-weight:500;color:var(--muted);text-transform:none;letter-spacing:0;
}
.report-textarea,.report-input{
  width:100%;padding:9px 11px;font-family:inherit;font-size:13.5px;
  color:var(--ink);background:#fff;
  border:1px solid var(--line);border-radius:4px;outline:none;
  box-sizing:border-box;transition:border-color .12s,box-shadow .12s;
}
.report-textarea{min-height:90px;resize:vertical;line-height:1.45}
.report-textarea:focus,.report-input:focus{
  border-color:var(--accent);
  box-shadow:0 0 0 3px rgba(234,88,12,.18);
}
.report-hint{
  display:block;font-size:11.5px;color:var(--muted);margin-top:4px;
}
.report-actions{
  display:flex;align-items:center;gap:14px;margin-top:6px;
}
/* .report-submit — вид кубика .apbtn (группа выше) */
.report-submit:disabled{background:var(--muted);cursor:default;transform:none;box-shadow:none}
.report-status{font-size:12.5px;color:var(--ink-2)}
.report-status-error{color:#c0392b;font-weight:600}

/* ========= STEPS LIST (нумерованные с амбер-кружком + таймкод) ========= */
/* ========= PHASES (группировка шагов по фазам) ========= */
.phases{counter-reset:s;display:flex;flex-direction:column;gap:8px}
.phases .steps-list{counter-reset:none}
/* У способов (взаимоисключающих вариантов) нумерация своя — счётчик
   сбрасываем. ⚠ Атрибут start у <ol> здесь ничего не решает: номер
   рисует CSS-счётчик, и он про start не знает (Ян 23.09: второй способ
   начинался с 12). */
.phases.is-methods .steps-list{counter-reset:s}
.phase{border:1px solid var(--line);border-radius:8px;background:var(--surface,#fff);overflow:hidden}
.phase[open]{border-color:var(--accent)}
.phase-head{display:flex;align-items:center;gap:12px;padding:12px 16px;cursor:pointer;background:var(--paper);user-select:none;list-style:none}
.phase-head::-webkit-details-marker{display:none}
.phase-head::after{content:"▾";margin-left:auto;color:var(--muted);font-size:14px;transition:transform .15s ease}
.phase[open] .phase-head::after{transform:rotate(180deg)}
.phase-num{font-family:var(--mono);font-size:11px;font-weight:700;color:var(--accent-t);text-transform:uppercase;letter-spacing:.04em;background:var(--accent-soft,#fef0e6);padding:3px 8px;border-radius:4px;border:1px solid var(--accent);flex:none}
.phase-title{font-size:15px;font-weight:700;color:var(--ink);flex:1;text-transform:none;letter-spacing:-.005em}
.phase-count{font-size:12px;color:var(--muted);font-family:var(--mono);flex:none;margin-right:8px}
.phase[open] .steps-list{padding:6px 18px 14px 18px}
.phase:not([open]) .steps-list{display:none}
.hero-section #search-form .cs-form{background:#fff;box-shadow:0 2px 8px rgba(20,20,20,.06);border-color:var(--line-2)}
.hero-section #results:empty{display:none}
.hero-section #results:not(:empty){margin-top:8px}
/* «подходит: II поколение (SU2), 2020–2024» — строка выбора, а не сноска:
   11px курсивом читались как примечание (дизайн-ревью 20.09). */
.nb-reason{
  font-size:12px;color:var(--ink-2);line-height:1.4;margin-top:2px;
}

/* Кнопки CTA */
.nb-actions{
  display:flex;flex-wrap:wrap;gap:5px;
  padding:0 13px 12px;margin-top:-2px;
}

/* ─── Запчасти-список — компактные строки с гайкой-буллетом ─── */
.parts-list{list-style:none;padding:0;margin:0;display:flex;flex-direction:column;gap:8px}
.parts-item{
  display:flex;align-items:flex-start;gap:10px;
  padding:10px 12px;background:var(--paper);
  border:1px solid var(--line);border-radius:4px;
  font-size:14px;line-height:1.45;color:var(--ink);
}
.parts-item:hover{border-color:var(--accent-soft)}
.parts-bullet{
  flex:none;font-size:15px;line-height:1.4;
  filter:saturate(.8);  /* нейтрализуем «эмодзи»-яркость */
}
.parts-text{flex:1;min-width:0}
.parts-name{display:block}
.parts-analogues{display:block;margin-top:4px;font-size:12.5px;line-height:1.5;color:var(--muted)}
.parts-analogues-label{font-weight:600;color:var(--ink-2)}
/* Кнопка «Купить» — поиск детали на autodoc.ru (позже — партнёрская ссылка) */
.parts-buy{
  flex:none;align-self:center;
  display:inline-flex;align-items:center;
  padding:7px 13px;border-radius:8px;
  background:var(--accent);color:#fff;
  font-size:13px;font-weight:700;text-decoration:none;white-space:nowrap;
  transition:background .12s,transform .12s;
}
.parts-buy:hover{background:var(--accent-d);color:#fff;text-decoration:none;transform:translateY(-1px)}
.parts-buy-arrow{transition:transform .12s}
.parts-buy:hover .parts-buy-arrow{transform:translateX(2px)}
@media (max-width:560px){
  .parts-item{flex-wrap:wrap}
  .parts-buy{width:100%;justify-content:center;margin-top:6px;align-self:stretch}
}
/* ═══════════════════════════════════════════════════════════════════
   ПОЛИРОВКА (2026-07) — глубина, сдержанность акцента, жизнь при hover.
   Только визуал (тени / hover / типографика / ритм). Разметку и логику
   не трогает. Аддитивный слой в конце файла — легко откатить целиком.
   ═══════════════════════════════════════════════════════════════════ */
:root{
  --sh-card:0 1px 2px rgba(26,21,13,.05),0 14px 30px -20px rgba(26,21,13,.18);
  --sh-hover:0 6px 14px rgba(26,21,13,.06),0 26px 50px -24px rgba(26,21,13,.30);
  --r-card:12px;
}
/* 1+5 — глубина и единый радиус на карточках-контейнерах */
.block,.featured,.side-card,.ai-card,.hero-section{border-radius:var(--r-card);box-shadow:var(--sh-card)}
.cs-form{border-radius:var(--r-card)}
.cs-form.hero{box-shadow:var(--sh-card)}
/* 3 — жизнь при наведении на кликабельных карточках */
.featured{transition:box-shadow .18s ease,transform .18s ease,border-color .18s ease}
.featured:hover{box-shadow:var(--sh-hover);transform:translateY(-2px)}
.how-steps>li{transition:background .16s,box-shadow .16s,transform .16s,border-color .16s}
.how-steps>li:hover{background:var(--surface);box-shadow:var(--sh-card);transform:translateY(-2px);border-color:var(--line-2)}
.bk{transition:transform .16s ease,box-shadow .16s ease,border-color .16s ease}
.bk:hover{transform:translateY(-3px);box-shadow:var(--sh-hover);border-color:var(--line-2)}
.nb:hover{box-shadow:var(--sh-hover)}
/* 2 — сдержать амбер: кружки шагов из «залитых» в мягкие (акцент, не крик) */
.how-num{background:var(--accent-soft);color:var(--accent-d);border:1.5px solid rgba(234,88,12,.30);box-shadow:none}
/* 4 — тугой трекинг крупным заголовкам */
.hero-section h1,.featured h2,.ai-card h2{letter-spacing:-.02em}
.block h3{letter-spacing:-.01em}
/* 6 — «Свежие руководства»: плоский список → кликабельные строки */
.latest-guides li{border-top:0}
.latest-guides a{padding:11px 12px;border-radius:8px;margin:1px 0;transition:background .14s,transform .14s,color .12s}
.latest-guides a:hover{background:var(--paper);transform:translateX(4px)}
/* 7 — форма подбора: заметнее фокус + скругление под остальное */
.cs-field>select,.cs-field>input{border-radius:8px;transition:border-color .14s,box-shadow .14s}
.cs-field>select:focus,.cs-field>input:focus{box-shadow:0 0 0 3px var(--accent-soft)}
/* (вид .cs-submit задаёт кубик .apbtn — см. блок формы подбора выше) */
/* 8 — микро-переходы */
.block .all,.catalog-link,.side-cat-suggest,.demand a,.item h4 a{transition:color .13s,background .13s,border-color .13s,transform .13s}
@media (prefers-reduced-motion:reduce){
  .featured,.how-steps>li,.bk,.nb,.latest-guides a{transition:none!important}
  /* Кнопки-кубики НЕ входят в запрет: подъём на 1px — не «движение», а
     состояние hover; с «уменьшить движение» в macOS он иначе пропадал,
     и hover выглядел неработающим (Ян 09.09 «не работают новые стили»). */
  .featured:hover,.how-steps>li:hover,.bk:hover,.latest-guides a:hover{transform:none!important}
}

/* ═══════════════════════════════════════════════════════════════════
   ПОЛИРОВКА-2 (2026-07-13) — красивый лоадер генерации + блик на кнопке.
   Взято/вдохновлено: CSS-loaders (SpinKit) + Uiverse button shine.
   Только визуал, CSS-only, разметку/JS не трогает.
   ═══════════════════════════════════════════════════════════════════ */

/* ЛОАДЕР ГЕНЕРАЦИИ — «сканирующий» прогресс со свечением (было: плоский бар) */
.ai-wait-progress{height:5px;background:var(--line);border-radius:4px}
.ai-wait-progress-fill{
  position:relative;overflow:hidden;border-radius:4px;
  background:linear-gradient(90deg,var(--accent-d),var(--accent));
  box-shadow:0 0 12px -2px rgba(234,88,12,.65);
}
.ai-wait-progress-fill::after{
  content:"";position:absolute;inset:0;
  background:linear-gradient(90deg,transparent 0,rgba(255,255,255,.55) 50%,transparent 100%);
  animation:ai-wait-shimmer 1.3s ease-in-out infinite;
}
@keyframes ai-wait-shimmer{0%{transform:translateX(-100%)}100%{transform:translateX(120%)}}
/* «дышащая» точка-тик у заголовка «Готовим инструкцию» */
.search-block.is-busy .ai-wait-h1::before{animation:ai-wait-tick 1.5s ease-in-out infinite}
@keyframes ai-wait-tick{0%,100%{box-shadow:0 0 0 0 rgba(234,88,12,.55)}50%{box-shadow:0 0 0 5px rgba(234,88,12,0)}}
@media (prefers-reduced-motion:reduce){
  .ai-wait-progress-fill::after,.search-block.is-busy .ai-wait-h1::before{animation:none!important}
}

/* КНОПКА-БЛИК (Uiverse-style) — полоса света по ВСЕМ оранжевым кнопкам-
   кубикам, не только «Получить руководство» (Ян 09.09: «на кнопке
   получить руководство при наведении есть эффект движения блика, на
   других нет»). Список = кубик .apbtn + кнопки, чей вид задан в
   шаблонах. Зелёным/disabled состояниям блик отключён ниже. */
.apbtn,.cs-submit,.btn-build,.nb-nm-submit,.nb-nm-ok,.report-submit,.ap-submit,
.ap-cc-yes,.nb .nb-btn-primary,.b-btn-primary,.gg-add,.ac-submit,.ac-addbtn,
.cc-btn,.ac-coupon .cc-copy,.ac-obtn-primary,.co-submit,.oe-save,
.fm-search button,.fm-ask button,.ft-reply-send,.cart-checkout-btn,
.nb .nb-cart-in{position:relative;overflow:hidden}
.apbtn::before,.cs-submit::before,.btn-build::before,.nb-nm-submit::before,
.nb-nm-ok::before,.report-submit::before,.ap-submit::before,.ap-cc-yes::before,
.nb .nb-btn-primary::before,.b-btn-primary::before,.gg-add::before,
.ac-submit::before,.ac-addbtn::before,.cc-btn::before,.ac-coupon .cc-copy::before,
.ac-obtn-primary::before,.co-submit::before,.oe-save::before,
.fm-search button::before,.fm-ask button::before,.ft-reply-send::before,
.cart-checkout-btn::before,.nb .nb-cart-in::before{
  content:"";position:absolute;top:0;left:-70%;width:45%;height:100%;pointer-events:none;
  background:linear-gradient(120deg,transparent,rgba(255,255,255,.38),transparent);
  transform:skewX(-20deg);
}
@media (prefers-reduced-motion:no-preference){
  .apbtn:hover::before,.cs-submit:hover::before,.btn-build:hover::before,
  .nb-nm-submit:hover::before,.nb-nm-ok:hover::before,.report-submit:hover::before,
  .ap-submit:hover::before,.ap-cc-yes:hover::before,.nb .nb-btn-primary:hover::before,
  .b-btn-primary:hover::before,.gg-add:hover::before,.ac-submit:hover::before,
  .ac-addbtn:hover::before,.cc-btn:hover::before,.ac-coupon .cc-copy:hover::before,
  .ac-obtn-primary:hover::before,.co-submit:hover::before,.oe-save:hover::before,
  .fm-search button:hover::before,.fm-ask button:hover::before,
  .ft-reply-send:hover::before,.cart-checkout-btn:hover::before,
  .nb .nb-cart-in:hover::before{animation:btn-shine .7s ease}
}
@keyframes btn-shine{from{left:-70%}to{left:140%}}
/* «Подписан»/занято/выключено — без блика; зелёная «В корзине» бликует */
.b-btn-primary.b-notify-done::before,.cs-submit-busy::before,
button[disabled]::before,.cart-checkout-btn[aria-disabled="true"]::before{content:none}

/* Скелет формы подбора — держит место и лейблы до рендера search.js,
   убирает мигание «пустой блок → впрыгнули поля». Заменяется renderForm(). */
.cs-skel{height:42px;border-radius:8px;background:var(--line);position:relative;overflow:hidden}
.cs-skel.tall{height:46px}
.cs-skel.btn{height:44px;width:210px;border-radius:8px}
.cs-skel.pill{height:26px;width:120px;border-radius:12px;display:inline-block}
.cs-skel::after{content:"";position:absolute;inset:0;
  background:linear-gradient(90deg,transparent,rgba(255,255,255,.6),transparent);
  animation:cs-skel-sh 1.3s ease-in-out infinite}
@keyframes cs-skel-sh{0%{transform:translateX(-100%)}100%{transform:translateX(100%)}}
@media (prefers-reduced-motion:reduce){.cs-skel::after{animation:none}}

/* Обложка-иконка гайда — техническая иконка по теме (см. partials/cover_icons.html).
   БЕЛЫЙ фон + рамка + едва заметная нейтральная сетка + амбер-иконка (единственный акцент). */
.featured-cover.icn{
  background:var(--surface);
  display:flex;align-items:flex-end;padding:18px 20px;position:relative;overflow:hidden;
  box-shadow:inset -1px 0 0 var(--line);
}
.featured-cover.icn::before{
  content:"";position:absolute;inset:0;opacity:.7;
  background-image:linear-gradient(rgba(20,20,20,.035) 1px,transparent 1px),linear-gradient(90deg,rgba(20,20,20,.035) 1px,transparent 1px);
  background-size:22px 22px;
  mask-image:radial-gradient(circle at 50% 42%,#000,transparent 78%);
}
.featured-cover.icn .featured-cover-label{color:var(--ink-2)}
.cover-icn{
  position:absolute;top:50%;left:50%;transform:translate(-50%,-60%);
  width:184px;height:184px;stroke:var(--accent);stroke-width:1.25;fill:none;
  stroke-linecap:round;stroke-linejoin:round;opacity:1;
  filter:drop-shadow(0 1px 1px rgba(20,20,20,.10));
}
.cover-icn .dim{stroke:rgba(20,20,20,.26)}
.cover-icn .fill{fill:var(--accent);stroke:none;opacity:.92}

/* Та же обложка-иконка, компактная — в шапке самого руководства (слева от эха
   запроса). Логику q-echo не меняем: добавили иконку + перенесли текст в колонку. */
.q-echo.has-cover{align-items:center;gap:14px}
.q-echo-cover.icn{
  flex:0 0 auto;width:66px;height:66px;border-radius:8px;position:relative;overflow:hidden;
  background:var(--surface);
  border:1px solid var(--line);
  display:grid;place-items:center;box-shadow:0 1px 2px rgba(20,20,20,.06);
}
.q-echo-cover.icn::before{
  content:"";position:absolute;inset:0;opacity:.6;
  background-image:linear-gradient(rgba(20,20,20,.04) 1px,transparent 1px),linear-gradient(90deg,rgba(20,20,20,.04) 1px,transparent 1px);
  background-size:13px 13px;mask-image:radial-gradient(circle at 50% 45%,#000,transparent 82%);
}
.q-echo-cover.icn .cover-icn{
  position:static;transform:none;width:54px;height:54px;stroke-width:1.4;
  filter:drop-shadow(0 1px 1px rgba(20,20,20,.10));
}
/* Версия/дата в правой карточке «AI-руководство» (перенесено из плашки над H1). */
.side-card-prov{
  font-family:var(--mono);font-size:11px;font-weight:600;color:var(--accent-d);
  letter-spacing:.03em;text-transform:uppercase;
  margin-top:11px;padding-top:10px;border-top:1px solid rgba(194,72,10,.20);
}

/* Лендинг популярной работы (task_page.html) — список готовых гайдов по маркам. */
.task-guides{list-style:none;display:flex;flex-direction:column}
.task-guides li{display:flex;align-items:center;gap:12px;border-top:1px solid var(--line)}
.task-guides li:first-child{border-top:0}
.task-guides li a{flex:1;min-width:0;display:flex;flex-direction:column;gap:2px;padding:13px 2px;text-decoration:none}
.task-guides li a:hover .tg-car{color:var(--accent-t)}
.task-guides .tg-car{font-weight:700;font-size:15px;color:var(--ink);letter-spacing:-.005em}
.task-guides .tg-meta{font-family:var(--mono);font-size:11.5px;color:var(--muted)}
.task-guides .tg-badge.done{font-family:var(--mono);font-size:10.5px;font-weight:600;text-transform:uppercase;letter-spacing:.04em;color:#0f5b4a;background:#e6f5ec;border:1px solid rgba(15,91,74,.25);padding:3px 8px;border-radius:4px;white-space:nowrap}

/* ХАБ МАРКИ (brand_hub.html) — чипы моделей + (brand_index.html) сетка марок. */
.brand-models{display:flex;flex-wrap:wrap;gap:8px}
.brand-letter{font-family:var(--mono);font-size:13px;font-weight:700;color:var(--accent-t);margin:22px 0 10px;padding-bottom:6px;border-bottom:1px solid var(--line)}
.brand-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(175px,1fr));gap:8px}
.brand-cell{display:flex;align-items:center;justify-content:space-between;gap:8px;border:1px solid var(--line);border-radius:8px;padding:10px 13px;text-decoration:none;background:var(--surface);transition:transform .12s,border-color .12s}
.brand-cell:hover{border-color:var(--accent);text-decoration:none;transform:translateY(-1px)}
.brand-cell .bc-name{font-weight:600;font-size:14px;color:var(--ink);letter-spacing:-.005em}
.brand-cell:hover .bc-name{color:var(--accent-t)}
.brand-cell .bc-count{font-family:var(--mono);font-size:11px;font-weight:700;color:#fff;background:var(--accent);border-radius:8px;padding:1px 7px;min-width:20px;text-align:center}
.brand-cell.has-guides{border-left:3px solid var(--accent)}
/* Список руководств на хабе марки — заголовок одной строкой:
   «Марка Модель Двигатель (Год): Работа» — машина спокойно, работа жирным. */
.bg-guides{list-style:none;margin:0;padding:0;display:flex;flex-direction:column}
.bg-guides li{display:flex;align-items:center;gap:12px;border-top:1px solid var(--line)}
/* display:flex перебивает UA-правило [hidden] — возвращаем скрытие
   (кубик guides_list прячет хвост списка за «показать ещё») */
.bg-guides li[hidden]{display:none}
.bg-guides li:first-child{border-top:0}
.bg-guides li a{flex:1;min-width:0;padding:14px 2px;text-decoration:none;line-height:1.4;font-size:15px;letter-spacing:-.005em}
.bg-guides .bg-mach{color:var(--ink-2);font-weight:500}
.bg-guides .bg-work{color:var(--ink);font-weight:700}
.bg-guides li a:hover .bg-work{color:var(--accent-t)}
.bg-guides .tg-badge.done{font-family:var(--mono);font-size:10.5px;font-weight:600;text-transform:uppercase;letter-spacing:.04em;color:#0f5b4a;background:#e6f5ec;border:1px solid rgba(15,91,74,.25);padding:3px 8px;border-radius:4px;white-space:nowrap}
/* «показать ещё N →» кубика guides_list — текстовая кнопка, не CTA */
.bgl-more{display:inline-block;margin-top:10px;font:inherit;font-size:13px;
  font-weight:600;color:var(--muted);background:none;border:0;cursor:pointer;padding:0}
.bgl-more:hover{color:var(--accent-t)}

/* Левый рейл хаба марки — список моделей. */
.side-models{list-style:none;margin:6px 0 0;padding:0;display:flex;flex-direction:column}
.side-models li a{display:block;padding:6px 12px;font-size:13.5px;color:var(--ink-2);text-decoration:none;border-left:2px solid transparent;margin-left:-2px;transition:.12s}
.side-models li a:hover{color:var(--accent-t);border-left-color:var(--accent);background:var(--surface);text-decoration:none}
.side-more{display:block;padding:8px 12px;font-size:12.5px;color:var(--muted);font-weight:600;text-decoration:none}
.side-more:hover{color:var(--accent-t);text-decoration:none}
.q-echo-txt{display:flex;flex-direction:column;gap:3px;min-width:0}
.q-echo.has-cover .lab{line-height:1.2}
.q-echo.has-cover .q{line-height:1.15}
/* Заголовок гайда с иконкой темы слева (когда есть parsed.title —
   q-echo не рисуется, дублирования нет). */
.guide-title{display:flex;align-items:center;gap:14px;margin:8px 0 16px}
.guide-title h1{font-size:24px;font-weight:800;letter-spacing:-.01em;margin:0;line-height:1.2;min-width:0}
@media (max-width:560px){
  .q-echo-cover.icn{width:54px;height:54px;border-radius:8px}
  .q-echo-cover.icn .cover-icn{width:44px;height:44px}
  .guide-title{gap:11px}
  .guide-title h1{font-size:21px}
}

/* ── Мост «руководство → книга» для узких экранов ─────────────────────────
   На десктопе книга живёт в правом сайдбаре и видна сразу. Ниже 1100px
   сайдбар уезжает под текст, и книгу не видит почти никто — эта строка
   ставится перед пошаговой частью. На широких экранах скрыта: дублировать
   предложение в двух местах — навязчиво. */
.book-hint{display:none}
@media (max-width:1100px){
  .book-hint{
    display:flex;align-items:center;gap:12px;margin:0 0 18px;
    padding:12px 14px;border:1px solid var(--line);border-left:3px solid var(--accent);
    border-radius:8px;background:#fff8ed;text-decoration:none;color:inherit;
  }
  .book-hint:hover{background:#fff3e0}
  .book-hint-cover{width:44px;height:60px;object-fit:cover;border-radius:4px;
    flex:0 0 auto;background:#eee}
  .book-hint-txt{display:flex;flex-direction:column;gap:3px;min-width:0;flex:1}
  .book-hint-txt b{font-size:13.5px;line-height:1.3;color:var(--ink)}
  .book-hint-txt span{font-size:12px;line-height:1.4;color:var(--ink-2)}
  .book-hint-go{flex:0 0 auto;font-size:12.5px;font-weight:700;color:var(--accent-d);
    white-space:nowrap}
}
@media (max-width:420px){
  .book-hint-go{display:none}
}

/* Найденная в оглавлении книги работа — конкретика вместо общих слов.
   Данные из сканера каталога (таблица book_toc). */
.toc-hit{display:flex;gap:8px;align-items:flex-start;margin:-2px 0 14px;padding:10px 12px;
  border:1px solid #b8e0c4;background:#edf8f0;border-radius:8px;
  font-size:12.5px;line-height:1.45;color:#14532d}
.toc-hit-mark{flex:0 0 auto;font-weight:800;color:#1a7a3a}

/* ── Вопросы из сообщества в правой колонке руководства ──────────────────
   Раздел «Сообщество» жил без единой ссылки с сайта (Ян 06.09). Здесь его
   главный вход: человек уже с конкретной машиной и работой. */
.cq-list{list-style:none;margin:0 0 12px;padding:0;display:flex;flex-direction:column;gap:2px}
.cq-list li{margin:0}
.cq-list a{display:block;padding:9px 10px;border-radius:8px;text-decoration:none;
  border-left:2px solid transparent;transition:background .12s,border-color .12s}
.cq-list a:hover{background:var(--surface);border-left-color:var(--accent);text-decoration:none}
.cq-title{display:block;font-size:13.5px;line-height:1.35;color:var(--ink);font-weight:600}
.cq-meta{display:block;margin-top:3px;font-size:11.5px;color:var(--muted)}
.cq-all{display:block;text-align:center;padding:9px 12px;border-radius:4px;
  border:1px solid var(--line-2);color:var(--ink);font-weight:700;font-size:13px;
  text-decoration:none;background:transparent}
.cq-all:hover{background:var(--surface);text-decoration:none;color:var(--ink)}

/* Ссылка «все →» в шапке блока (витрины главной). */
.block .head .head-all{font-size:12.5px;font-weight:600;color:var(--accent-t);
  white-space:nowrap;text-decoration:none}
.block .head .head-all:hover{text-decoration:underline}


/* ========= ЕДИНЫЙ ВИД СПИСКОВ: РУКОВОДСТВА И ОБСУЖДЕНИЯ =========
   Ян 06.09: «визуал руководств и сообщества с главной перенести на детальную
   страницу руководства и куда они ещё попадают». До этого каждая страница
   рисовала списки по-своему, и сайт выглядел как три разных.

   Руководство = карточка с картинкой (обложка честная — она про тему работы).
   Обсуждение = строка со столбцом ответов: картинку там пришлось бы выдумывать
   по заголовку, а столбец цифр даёт вертикаль, по которой идёт глаз. */

/* ── Карточки руководств (компактные, горизонтальные) ── */
.guides-gallery{display:grid;grid-template-columns:repeat(2,1fr);gap:10px}
.gg-card{display:flex;flex-direction:row;align-items:center;gap:12px;padding:10px;
  border:1px solid var(--line);border-radius:8px;overflow:hidden;background:var(--surface);
  text-decoration:none;box-shadow:var(--sh-card);
  transition:transform .14s ease,box-shadow .14s ease,border-color .14s ease}
.gg-card:hover{transform:translateY(-2px);box-shadow:0 12px 26px -14px rgba(26,21,13,.32);
  border-color:var(--line-2);text-decoration:none}
.gg-cover{flex:none;width:104px;height:64px;border-radius:8px;overflow:hidden;background:#141110}
.gg-cover img{width:100%;height:100%;object-fit:cover;display:block;transition:transform .3s ease}
.gg-card:hover .gg-cover img{transform:scale(1.03)}
.gg-body{padding:0;min-width:0;display:flex;flex-direction:column;gap:3px}
.gg-machine{font-family:var(--mono);font-size:11px;color:var(--ink-2);letter-spacing:.01em;line-height:1.35}
.gg-task{font-weight:700;font-size:14px;color:var(--ink);letter-spacing:-.01em;line-height:1.28;
  display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.gg-card:hover .gg-task{color:var(--accent-t)}
/* В узкой колонке (правый сайдбар страницы руководства) — один столбец. */
.gg-narrow .guides-gallery{grid-template-columns:1fr}
@media(max-width:600px){ .guides-gallery{grid-template-columns:1fr} }

/* ── Обсуждения: строка со столбцом ответов ── */
.qa-list{display:flex;flex-direction:column}
.qa-row{display:flex;gap:14px;align-items:flex-start;padding:11px 8px;
  border-top:1px solid var(--line);text-decoration:none;color:inherit;
  border-radius:8px;transition:background .14s ease}
.qa-row:first-child{border-top:0}
/* Глобальное a:hover подчёркивает весь текст ссылки — на строке из заголовка
   и автомобиля это читается как случайно подчёркнутый абзац. */
.qa-row:hover{text-decoration:none;background:var(--paper)}
.qa-row:hover .qa-title,
.qa-row:hover .qa-machine{text-decoration:none}
.qa-row:hover .qa-title{color:var(--accent-t)}
.qa-count{flex:none;width:54px;text-align:center;padding-top:1px}
.qa-count b{display:block;font-size:17px;font-weight:700;color:var(--ink);
  line-height:1.1;font-variant-numeric:tabular-nums}
.qa-count i{display:block;font-style:normal;font-size:10px;color:var(--muted);
  text-transform:uppercase;letter-spacing:.04em;margin-top:1px}
.qa-body{min-width:0}
.qa-title{display:block;font-weight:600;font-size:14.5px;line-height:1.3;
  color:var(--ink);letter-spacing:-.005em}
.qa-machine{display:block;font-family:var(--mono);font-size:11px;
  color:var(--ink-2);line-height:1.35;margin-top:3px}
/* Машина первой строкой (порядок карточек руководств, Ян 09.09) — только
   там, где она реально первая: старые витрины с machine под заголовком
   не задеты. */
.qa-body .qa-machine:first-child{margin:0 0 3px}
/* Узкая колонка: столбец ответов ужимаем, иначе заголовку остаётся полоска. */
.qa-narrow .qa-count{width:34px}
.qa-narrow .qa-count b{font-size:15px}
.qa-narrow .qa-title{font-size:13.5px}
.qa-narrow .qa-row{padding:9px 4px;gap:10px}
.qa-narrow .qa-count i{font-size:9px;letter-spacing:.02em}
/* Подпись автомобиля в узкой колонке — одной строкой: имена вроде
   «Mercedes-Benz E-Class» иначе переносятся и ломают ритм списка. */
.qa-narrow .qa-machine{font-size:10.5px;white-space:nowrap;overflow:hidden;
  text-overflow:ellipsis}

/* Подсказки работ под полем «задача или проблема» (было — ряд чипов «часто:»,
   Ян 06.09: «нагружают карточку»). Список выпадает по фокусу и сужается при
   вводе, поэтому поле должно быть позиционирующим родителем. */
.cs-task-field{position:relative}
.cs-sugg{position:absolute;z-index:40;left:0;right:0;top:100%;margin-top:4px;
  background:var(--surface);border:1px solid var(--line-2);border-radius:8px;
  box-shadow:0 14px 30px -12px rgba(26,21,13,.35);padding:5px;
  display:flex;flex-direction:column;gap:1px;max-height:340px;overflow-y:auto;
  overscroll-behavior:contain}
.cs-sugg[hidden]{display:none}
.cs-sugg-head{font-size:11px;color:var(--muted);padding:6px 10px 5px;
  border-bottom:1px solid var(--line);margin-bottom:3px;line-height:1.3}
.cs-sugg-item{font:inherit;font-size:13.5px;text-align:left;color:var(--ink);
  background:none;border:0;border-radius:8px;padding:8px 10px;cursor:pointer;width:100%}
.cs-sugg-item:hover{background:var(--paper)}
@media (max-width:480px){
  /* В две колонки карточка узкая, и «Сообщить о появлении» обрезалось
     многоточием. Разрешаем перенос в две строки и уменьшаем шрифт. */
  .nb .nb-btn{white-space:normal;font-size:11.5px;line-height:1.2;padding:7px 8px;
    overflow:visible;text-overflow:clip}
}

/* Ровные ряды в каталоге: книг приходит 10 (два ряда по пять на широком
   экране). На промежуточных ширинах хвост прячем, чтобы последний ряд не был
   щербатым: 4 в ряд → показываем 8, 3 в ряд → 9. При двух колонках 10 делится
   ровно, прятать нечего. */
@media (max-width:1320px) and (min-width:1101px){
  .new-books .nb:nth-child(n+9){display:none}
}
@media (max-width:1100px) and (min-width:761px){
  .new-books .nb:nth-child(n+10){display:none}
}

/* ─── Согласие на обработку персональных данных ───────────────────────────
   Кубик для всех форм (partials/consent.html). Держим мелким и спокойным:
   это обязательная строка, а не призыв к действию, — но кликабельная область
   должна быть большой, поэтому вся строка это <label>. */
.ap-consent{font-size:12px;line-height:1.45;color:var(--muted);margin:2px 0 0}
.ap-consent a{color:var(--ink-2);text-decoration:underline;
  text-underline-offset:2px}
.ap-consent a:hover{color:var(--accent-t)}
/* Галочка согласия (Ян 08.09: вернуть везде, кроме чекаута) */
.ap-consent-check{display:flex;gap:10px;align-items:flex-start;cursor:pointer;
  color:var(--ink-2)}
/* Чекбокс в языке формы: та же рамка и скругление, что у полей ввода, —
   нативный квадрат выбивался (скриншот Яна 08.09). Ровно по левому краю. */
.ap-consent-check input{appearance:none;-webkit-appearance:none;margin:0;
  flex:0 0 auto;width:18px;height:18px;border:1.5px solid var(--line);
  border-radius:4px;background:var(--surface);cursor:pointer;
  transition:border-color .12s,background-color .12s}
.ap-consent-check input:hover{border-color:var(--accent)}
.ap-consent-check input:focus-visible{outline:2px solid var(--accent);outline-offset:2px}
.ap-consent-check input:checked{background:var(--accent) url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 10'%3E%3Cpath d='M1.5 5.2 4.6 8.3 10.5 1.7' fill='none' stroke='white' stroke-width='2.2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") center/11px no-repeat;border-color:var(--accent)}
/* В статической форме контактов галочка живёт в общем вертикальном ритме
   (14px между блоками), а не прилипает к кнопке (скриншот Яна 08.09). */
.ap-form .ap-consent-check{margin:2px 0 16px}
/* Замочек рисуем псевдоэлементом: эмодзи в разных системах выглядит по-разному
   и ломает высоту строки. */

/* ─── Плашка про куки (partials/cookie_consent.html) ──────────────────────
   Полоса внизу, а не окно поверх страницы: читать сайт она не мешает, но и
   не теряется. Две кнопки равного веса — выбор должен быть настоящим. */
.ap-cc{position:fixed;left:0;right:0;bottom:0;z-index:60;
  display:flex;gap:16px;align-items:center;flex-wrap:wrap;
  padding:12px 20px;background:var(--surface);
  border-top:1px solid var(--line);
  box-shadow:0 -8px 24px -14px rgba(26,21,13,.35)}
.ap-cc[hidden]{display:none!important}
.ap-cc-text{flex:1 1 420px;font-size:12.5px;line-height:1.5;color:var(--ink-2)}
.ap-cc-text a{color:var(--accent-t);text-decoration:underline;
  text-underline-offset:2px}
.ap-cc-btns{display:flex;gap:8px;flex:none}
.ap-cc button{font:inherit;font-size:13px;font-weight:600;cursor:pointer;
  padding:9px 18px;border-radius:8px;white-space:nowrap}
/* «Принять» — цвет и hover кубика .apbtn (группа выше); размер остаётся
   компактным барным (перебивает специфичность .ap-cc button). Кнопка-
   состояние, поэтому без стрелки. */
@media (max-width:560px){
  /* Кнопка в один ряд с текстом, не отдельной строкой на всю ширину: так
     плашка занимает ~70px вместо 130 — на экране 844px это была шестая
     часть высоты, и вместе с виджетом чата треть (аудит 10.09). */
  .ap-cc{padding:10px 14px;gap:10px;flex-wrap:nowrap;align-items:center}
  .ap-cc-text{flex:1 1 auto;font-size:12px;line-height:1.4}
  .ap-cc-btns{width:auto;flex:none}
  .ap-cc button{padding:9px 14px}
}

/* «Ждёт ответа» вместо нуля в столбце обсуждений: ноль читается как дырка. */
.qa-count-none i{line-height:1.25;padding-top:2px;display:block}

/* Кнопку чата ОтветИИм поднимаем над тем, что стоит внизу экрана: куки-плашка
   (--cc-h) и липкая панель покупки на карточке книги (--buy-h). Иначе пузырь
   ложится прямо на «Добавить в корзину» (Ян 11.09) или на текст плашки
   (скриншот 08.09). Высоты обеих измеряет JS — они разные на разных экранах.

   ⚠ Двигаем САМ пузырь, а не контейнер #otvetiim-widget: transform на
   контейнере делает его точкой отсчёта для fixed-потомка, и раскрытый чат
   уезжал на 685px ниже экрана — на телефоне пузырь пропадал, а чат не
   появлялся (Ян 11.09). Полноэкранное окно (100vh) не трогаем вовсе. */
/* ⚠ Раскрытый чат виджет растягивает на height:100vh. На телефоне 100vh —
   это высота экрана БЕЗ вычета адресной строки, а при открытой клавиатуре
   видимая область сжимается ещё сильнее. Низ окна (кнопки быстрых ответов и
   строка ввода) уезжает за край, и до него приходится прокручивать —
   особенно заметно на коротких экранах вроде 320×568 (Ян 13.09).
   Единица dvh считает именно видимую часть. Инлайн-стиль виджета перебить
   можно только !important. */
@supports (height: 100dvh) {
  #otvetiim-widget iframe[style*="100vh"] {
    /* Шапку чата с крестиком виджет кладёт в самый верх экрана — на
       телефонах с чёлкой она уходит под статус-бар, и крестик не нажать
       (Ян 13.09). Отступаем на безопасную зону и на неё же укорачиваем. */
    top: env(safe-area-inset-top, 0px) !important;
    height: calc(100dvh - env(safe-area-inset-top, 0px)) !important;
    /* Ширину берём от родителя, а не в vw: на мобильных 100vw не учитывает
       зум и переполнение, и окно вылезает за правый край вместе с крестиком. */
    width: 100% !important;
    left: 0 !important; right: 0 !important;
  }
}

body:has(.ap-cc:not([hidden])) #otvetiim-widget iframe:not([style*="100vh"]),
body:has(.b-sticky:not([hidden])) #otvetiim-widget iframe:not([style*="100vh"]){
  transform:translateY(calc(-1 * (var(--cc-h, 0px) + var(--buy-h, 0px)) - 8px))}
/* И сама страница добирает низ на высоту плашки: иначе она накрывала первый
   ряд товаров и кнопку «В корзину» (аудит 10.09, замер на 390px). */
body:has(.ap-cc:not([hidden])){padding-bottom:var(--cc-h, 64px)}

/* ─── ЦЕЛИ КАСАНИЯ (Ян 10.09, аудит) ───────────────────────────────
   Замер на 390px: 124 кнопки/ссылки уже 40px. Точка карусели была
   7×7 — свайпа у галереи нет, и это единственный способ листать фото.
   Вид ряда не трогаем: зону нажатия растит псевдоэлемент, а gap
   разводит соседние зоны, чтобы палец не попадал в чужую. */
/* ⚠ Шаг точек НЕ РАСШИРЯТЬ. 20.09 я поднял его с 6 до 14 px ради зоны
   нажатия — ряд тут же разъехался и вылез из карточки, ровно как 11.09.
   Зону растим вверх и вниз, по бокам — только то, что влезает в зазор. */
.nb-dots{gap:6px}
.nb-dot{position:relative}
.nb-dot::after{content:"";position:absolute;inset:-9px -3px}
@media(max-width:760px){
  .nb-fav{width:40px;height:40px;font-size:19px}
  .nav-burger{min-width:44px;min-height:44px}
}

/* ─── КРОШКИ НА МОБИЛЕ (Ян 10.09, аудит) ──────────────────────────
   Раньше .crumbs и .subbar-trust прятались, и на каждой внутренней
   странице телефона оставалась пустая оранжевая полоса 14px. Теперь
   вместо цепочки — одна ссылка «← родитель», а если родителя нет,
   полосы нет вовсе. */
.crumbs-up{display:none}
@media(max-width:760px){
  /* Селектор с `a` обязателен: общий `.subbar a` подчёркивает ссылки и по
     специфичности сильнее одного класса — без этого ссылка «← марка» ехала
     с подчёркиванием (Ян 11.09). */
  .subbar a.crumbs-up{display:inline-block;color:#fff;font-size:12.5px;
    font-weight:600;text-decoration:none;padding:3px 0;max-width:100%;
    overflow:hidden;white-space:nowrap;text-overflow:ellipsis}
  .subbar a.crumbs-up:hover{color:#fff;text-decoration:none}
  .subbar:has(.crumbs):not(:has(.crumbs-up)){display:none}
}

/* CTA в hero — только на телефоне (аудит 10.09): на десктопе форма подбора
   и так попадает в первый экран, кнопка была бы лишним шагом. */
.hero-cta{display:none;margin-top:16px}
@media(max-width:900px){.hero-cta{display:inline-flex}}

/* Скелет формы подбора держит РОВНО ту высоту, которую займёт готовая форма.
   Замер 10.09: скелет был 363px против 274px у формы, и подмена роняла низ
   страницы на 89px — 0.070 из общего CLS 0.146. Лишнее внутри скелета просто
   обрезается: он и так лишь заглушка на ~200 мс. */
.cs-skeleton{height:274px;overflow:hidden}
@media(max-width:640px){.cs-skeleton{height:502px}}
@media(max-width:480px){.cs-skeleton{height:521px}}

/* =====================================================================
   ЧИП — один кубик на все короткие кликабельные метки
   Ян 20.09.2026: «чипы сделаны везде по-разному… засунь в кубик, чтобы
   больше такой жопы не было». Было пять геометрий: радиусы 20/18/14/9/4,
   отступы от 5×12 до 8×15. Стало одно: высота 34, радиус 8, отступы 0×14,
   шрифт 13/600. Различаются только состояния, не форма.
     .apchip        — обычный (белый, рамка)
     .apchip.on     — выбранный (оранжевый)
     .apchip.ghost  — «показать ещё» (пунктир, приглушённый)
     b внутри       — счётчик, i внутри — уточнение (годы)
   .apchips — ряд чипов, .apchips.strip — лента со свайпом на телефоне.
   Старые классы (.cs-chip в форме подбора, .bm-chip в указателе марок)
   перечислены здесь же — разметку тех страниц не трогаем.
   ===================================================================== */
.apchip,.cs-chip,.bm-chip{
  display:inline-flex;align-items:center;gap:7px;height:34px;padding:0 14px;
  background:#fff;border:1px solid var(--line);border-radius:8px;
  font-family:var(--sans);font-size:13px;font-weight:600;line-height:1;
  color:var(--ink);text-decoration:none;white-space:nowrap;cursor:pointer;
  transition:border-color .12s,background .12s,color .12s;
}
.apchip:hover,.cs-chip:hover,.bm-chip:hover{
  border-color:var(--accent);color:var(--ink);background:#fff;text-decoration:none;
}
.apchip.on{background:var(--accent);border-color:var(--accent);color:#fff;cursor:default}
.apchip.ghost{background:none;border-style:dashed;color:var(--muted)}
.apchip.ghost:hover{color:var(--ink)}
.apchip b{font-family:var(--mono);font-size:11px;font-weight:700;color:var(--muted)}
.apchip i{font-style:normal;font-size:11.5px;color:var(--muted)}
.apchip.on b,.apchip.on i{color:rgba(255,255,255,.85)}
.apchips{display:flex;flex-wrap:wrap;gap:8px}
/* На телефоне длинный ряд — лента со свайпом, а не четыре этажа кнопок. */
@media(max-width:639px){
  .apchips.strip{
    flex-wrap:nowrap;overflow-x:auto;scrollbar-width:none;-webkit-overflow-scrolling:touch;
    margin-left:-20px;margin-right:-20px;padding:0 20px 2px;
  }
  .apchips.strip::-webkit-scrollbar{display:none}
  .apchips.strip .apchip{flex:none}
}

/* ── Доступность чипов и меню (аудит по ui-ux-pro-max, 20.09) ──────────
   Белый текст на #ea580c даёт контраст 3.56 при норме 4.5 — для мелкого
   текста это не проходит; на --accent-d (#c2480a) выходит 5.0. Счётчики были
   11px серым (3.56), плюсики — акцентом на белом (3.56). Тапы на телефоне
   поднимаем до 44 px: правило Apple HIG / Material. */
/* Фон активного чипа — фирменный оранжевый, как у всех кнопок сайта.
   Пробовал затемнять ради контраста 4.5 — чип стал темнее «В корзину» и
   выбивался из ряда (Ян 20.09: «почему чипы сделал тёмными»). Вопрос
   контраста решаем не для одного элемента, а для всей оранжевой группы. */
.apchip.on{background:var(--accent);border-color:var(--accent)}
.apchip b{font-size:12px;color:var(--ink-2)}
.apchip i{font-size:12px;color:var(--ink-2)}
.apchip.on b,.apchip.on i{color:rgba(255,255,255,.92)}
.side-cat-suggest-plus{color:var(--accent-d)}
.side-cat-count{font-size:12px;color:var(--ink-2)}
@media(max-width:639px){
  .apchip{height:40px;padding:0 15px}
  .apchips{gap:10px}
  .side-cat-head{min-height:44px}
  .side-cat-list a,.side-cat-suggest{padding-top:9px;padding-bottom:9px}
}

/* ── Оранжевый кнопок: яркий, решение Яна (20.09) ──────────────────────
   Аудит показал контраст 3.56 при норме 4.5 для белого текста на #ea580c, и
   я перевёл кнопки на тон темнее. Ян вернул яркий: «предыдущий, более яркий
   цвет больше нравился». Осознанный выбор бренда против буквы WCAG AA —
   текст на кнопках жирный и короткий, читается. Не переигрывать без него. */

/* ── Пальцу есть куда попасть (аудит 20.09) ───────────────────────────
   Замер на 390 px: «В корзину» 34 px, переключатель вида 36, пункты меню
   работ 34. Зоны точек карусели и сердечка растили ещё 10–11.09, их не
   трогаем. Стрелки галереи на телефоне не показываются вовсе (они на
   наведении) — убираем, чтобы не ловили случайные касания. */
@media(max-width:760px){
  .nb .nb-btn{min-height:44px}
  .cl-view{width:44px;height:44px}
  .nb-arr{display:none}
  .nb-fav{width:44px;height:44px}
  .side-cat-list a,.side-cat-suggest{padding-top:13px;padding-bottom:13px}
  .side-cat-head{min-height:46px}
  /* Точку карусели шире не сделать — ряд разъедется; растим зону по высоте. */
  .nb-dot::after{inset:-19px -3px}   /* 7 + 38 = 45 px под палец */
}

/* Ссылка «к содержимому» — только для клавиатуры (аудит 20.09). */
.skip-link{position:absolute;left:-9999px;top:0;z-index:200}
.skip-link:focus{
  left:12px;top:12px;width:auto;height:auto;padding:10px 16px;
  background:#fff;border:2px solid var(--accent);border-radius:8px;
  font:700 14px/1 var(--sans);color:var(--ink);text-decoration:none;
}

/* ── Читаемость мелочей и остатки зон касания (аудит 20.09) ───────────
   9.5 px у издательства и 11 px у кнопки — ниже порога читаемости (12),
   а это не декор, а товар: издательство, цена со скидкой, подпись машины.
   Метки-заголовки («ВСЕ РАБОТЫ ПО») оставляем мелкими — они декоративные. */
.nb-pub{font-size:11.5px}
.nb .nb-btn{font-size:13px}
.nb-disc{font-size:12px}
.gg-machine,.qa-machine{font-size:12px}
@media(max-width:760px){
  /* Специфичность выше локальных правил меню — иначе пункты оставались 31 px. */
  .side-cats .side-cat-list a,.side-cats .side-cat-suggest{padding-top:13px;padding-bottom:13px}
  .block .head .head-all,.cl-h a{display:inline-flex;align-items:center;min-height:44px}
}

/* ── Панель каталога: сортировка, наличие, вид ───────────────────────
   Кубик (Ян 22.09: «пусть это будет кубик»). Разметка — в
   partials/catalog_toolbar.html, стили здесь, поведение своё у каждой
   страницы: в каталоге порция подменяется без перезагрузки, в хабе
   машины страница просто перезагружается.
   ⚠ Файла два — ai-service/app/static/design.css и site/assets/design.css,
   правим синхронно. */
.cl-toolbar{display:flex;align-items:center;gap:18px;margin-bottom:16px;flex-wrap:wrap}
.cl-toolbar > .cl-views{margin-left:auto}
.cl-sort{display:flex;align-items:center;gap:9px}
.cl-sort-lab{font-size:13px;color:var(--muted);white-space:nowrap}
.cl-sort-sel{
  height:40px;padding:0 34px 0 13px;border:1px solid var(--line);border-radius:8px;
  background:#fff url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='8' viewBox='0 0 12 8'%3E%3Cpath d='M1 1.5 6 6.5l5-5' fill='none' stroke='%236b6558' stroke-width='1.6' stroke-linecap='round'/%3E%3C/svg%3E") no-repeat right 12px center;
  font:600 13px/1 var(--sans);color:var(--ink);cursor:pointer;
  -webkit-appearance:none;appearance:none;max-width:100%;
}
.cl-sort-sel:hover{border-color:var(--accent)}
.cl-sort-sel:focus{outline:2px solid var(--accent);outline-offset:1px}
/* Кнопка нужна только без скрипта: со скриптом список применяется сразу. */
.cl-sort-go{display:none}
.no-js .cl-sort-go{display:inline-flex}
/* Переключатель наличия. Тот же приём, что у маркетплейсов: тумблер стоит
   в строке с сортировкой, а не кнопкой под списком. Без скрипта его нет —
   тогда страница показывает всё, как и раньше. */
.cl-tgs{display:flex;align-items:center;gap:18px;flex-wrap:wrap}
.cl-tg{display:none;align-items:center;gap:9px;min-height:44px;cursor:pointer;
  font-size:13px;color:var(--ink-2);user-select:none;margin-right:auto}
.cl-tg.on{display:inline-flex}
.cl-tg input{position:absolute;width:1px;height:1px;opacity:0}
.cl-tg-box{flex:none;width:36px;height:20px;border-radius:999px;background:var(--line-2);
  position:relative;transition:background .15s}
.cl-tg-box::after{content:"";position:absolute;top:2px;left:2px;width:16px;height:16px;
  border-radius:50%;background:#fff;box-shadow:0 1px 2px rgba(26,21,13,.3);transition:transform .15s}
.cl-tg input:checked + .cl-tg-box{background:var(--accent)}
.cl-tg input:checked + .cl-tg-box::after{transform:translateX(16px)}
.cl-tg input:focus-visible + .cl-tg-box{outline:2px solid var(--accent);outline-offset:2px}
.cl-views{display:flex;border:1px solid var(--line);border-radius:7px;overflow:hidden}
.cl-view{width:38px;height:36px;display:grid;place-items:center;background:#fff;border:0;cursor:pointer;color:var(--muted)}
.cl-view:hover{color:var(--ink)}
.cl-view.on{background:var(--accent);color:#fff}
.cl-view svg{width:16px;height:16px}

/* Списочный вид: та же карточка-компонент, раскладка строкой */
.cl-list{display:flex;flex-direction:column;gap:12px}
.cl-list .nb{display:grid;grid-template-columns:132px minmax(0,1fr);align-items:start}
.cl-list .nb-gallery{grid-row:1 / span 2;aspect-ratio:3/4;padding-bottom:0}
.cl-list .nb-gallery::after{display:none}
/* Кнопка избранного стоит в правом верхнем углу карточки. В сетке она над
   обложкой, а в списке обложка уходит влево — и сердечко садится прямо на
   название (видно на узкой колонке: «ЭКСТРЕННАЯ ПОМ♡ЩЬ ПРИ ДТП»).
   Освобождаем ей место отступом текста. */
.cl-list .nb-body{box-shadow:none;padding:14px 52px 8px 16px}
.cl-list .nb-name{font-size:14.5px;-webkit-line-clamp:2}
.cl-list .nb-price{margin-top:6px}
/* Кнопки в списке — по содержимому, не на всю ширину строки */
.cl-list .nb-actions{padding:0 16px 14px;justify-content:flex-start}
.cl-list .nb .nb-btn{flex:0 0 auto;padding:8px 18px}
@media(max-width:560px){.cl-list .nb{grid-template-columns:100px minmax(0,1fr)}}

/* Свойства книги: в сетке скрыты, в списке — строка key:value */
.cl-grid .nb-specs{display:none}
.cl-list .nb-specs{display:flex;flex-wrap:wrap;gap:4px 16px;margin-top:2px}
.cl-list .nb-spec{font-size:12px;color:var(--ink-2)}
.cl-list .nb-spec .k{color:var(--muted)}

/* ─── Работы по узлам и шапки разделов: общие для хаба машины и
   страницы марки (Ян 22.09: список работ нужен и там, и там). ─────── */
.hb-sec{margin:0 0 34px;scroll-margin-top:16px}
.hb-sec>.hb-h{display:flex;align-items:baseline;gap:10px;margin:0 0 14px}
.hb-sec>.hb-h h2{font-size:19px;font-weight:800;letter-spacing:-.01em;color:var(--ink);margin:0}
.hb-sec>.hb-h .hb-n{font-family:var(--mono);font-size:12px;color:var(--muted);font-weight:700}
.hb-sec>.hb-h a{margin-left:auto;font-size:13.5px;font-weight:600;color:var(--accent-t);text-decoration:none}

/* Работы по узлам: две колонки, разложенные сервером. Сетка тут не годится
   (ряд равняется по самой высокой карточке, и рядом с «Двигателем» на 36
   работ зияет пустота), а CSS-колонки не разбивают <details> — всё уезжало
   в первую. Поэтому просто две колонки-стопки. */
.hb-units{display:flex;gap:12px;align-items:flex-start}
.hb-col{flex:1 1 0;min-width:0}
@media(max-width:860px){.hb-units{display:block}.hb-col{display:contents}}
.hb-unit{background:#fff;border:1px solid var(--line);border-radius:12px;
  padding:0 16px;margin:0 0 8px;break-inside:avoid;-webkit-column-break-inside:avoid}
.hb-unit>summary{list-style:none;cursor:pointer;min-height:52px;display:flex;align-items:center}
.hb-unit>summary h3{width:100%}
.hb-unit[open]{padding-bottom:10px}
.hb-unit[open]>summary{border-bottom:1px solid var(--line);margin-bottom:4px}
.hb-unit>summary::-webkit-details-marker{display:none}
.hb-unit h3{font-size:15px;font-weight:700;color:var(--ink);margin:0;
  display:flex;align-items:center;gap:9px}
/* Закрытый узел не должен выглядеть сломанным заголовком: убираем нижний
   отступ и добавляем знак, что тут есть что развернуть. */
.hb-unit:not([open]) h3{margin-bottom:0}
.hb-unit>summary h3::after{content:"";flex:none;width:7px;height:7px;margin:0 3px 3px 4px;
  border:solid var(--muted);border-width:0 2px 2px 0;transform:rotate(45deg);transition:transform .15s ease}
.hb-unit[open]>summary h3::after{transform:rotate(-135deg);margin-bottom:-3px}
.hb-unit>summary:hover h3{color:var(--accent-t)}
.hb-unit h3::before{content:"";width:6px;height:15px;background:var(--accent);
  border-radius:3px;flex:none}
.hb-unit h3 .hb-n{margin-left:auto;font-family:var(--mono);font-size:11.5px;
  color:var(--muted);font-weight:600;background:var(--bg-soft,#f4f2ee);border-radius:999px;padding:2px 9px}
.hb-list{list-style:none;margin:0;padding:0}
.hb-list li{border-top:1px solid var(--line)}
.hb-list li:first-child{border-top:0}
.hb-list a{display:block;padding:8px;margin:0 -8px;border-radius:8px;
  font-size:13.5px;line-height:1.4;color:var(--ink-2);text-decoration:none;
  transition:background .14s ease,color .14s ease}
.hb-list a:hover{background:var(--paper);color:var(--accent-t);text-decoration:none}
.hb-list a::before{content:"+";color:var(--accent-d);font-weight:800;margin-right:7px}
/* Готовое руководство: читать прямо сейчас, а не заказывать сборку.
   Вместо «+» — галочка, текст тёмный и жирнее, как у живой ссылки. */
.hb-list .hb-ready a{color:var(--ink);font-weight:700}
.hb-list .hb-ready a::before{content:"✓";color:#1a7a3a}
.hb-more{margin-top:6px}
.hb-more summary{cursor:pointer;font-size:13px;color:var(--muted);padding:6px 0;
  list-style:none}
.hb-more summary::-webkit-details-marker{display:none}
.hb-more summary:hover{color:var(--accent-t)}
.hb-more[open] summary{color:var(--ink-2)}
.hb-none{font-size:14px;color:var(--muted);line-height:1.55}

/* Полоска «соберём руководство» — общий кубик страницы марки и хаба машины.
   Кнопка обычная чёрная, как все (Ян 20.09: «очень огромная»): пробовали
   оранжевую и крупную — на экране она кричала громче всего. */
.cl-build{display:flex;flex-wrap:wrap;align-items:center;gap:14px;padding:16px 18px;
  background:#fff;border:1px solid var(--line);border-radius:12px}
.cl-build p{margin:0;font-size:14px;color:var(--ink-2);line-height:1.5;flex:1 1 320px}

/* Полоска стоит между списком работ и книгами. Отступ задаём ей самой:
   на странице марки он доставался от .cl-guides (правила про карточки
   руководств), а в хабе машины такого правила нет — и заголовок «Книги»
   прилипал к полоске (Ян 23.09: «не одинаково»). */
.cl-cta{margin:0 0 34px}

/* Число книг в шапке блока — справа, моноширинные цифры. Общее для страницы
   марки и хаба машины. */
.cl-h-n{margin-left:auto;font-size:13px;color:var(--muted);font-variant-numeric:tabular-nums}

/* ─── Поиск в шапке (Ян 20.09: «сделай в шапку, пусть будет в стиле кнопки
   „подобрать руководство"»). С 23.09 он на всех страницах, поэтому стили здесь,
   а не на одной тестовой главной.
   Поле — та же тёмная плашка, что кнопка; на телефоне выше (44 px под палец) и шрифт 16 px,
   иначе iOS зумит страницу при фокусе. */
.nav-search{position:relative;gap:8px;padding-right:4px;cursor:text}
.nav-search:focus-within{border-color:var(--accent)}
.nav-search input{flex:1;min-width:0;height:100%;border:0;outline:none;background:transparent;
  color:#fff;font:600 13px/1.2 inherit;letter-spacing:.01em}
.nav-search input::placeholder{color:#cfcfcf;font-weight:600}
.nav-search input::-webkit-search-cancel-button{display:none}
/* В design.css есть старое правило `.nav-search button{background:var(--accent)}` — из-за него
   крестик очистки выходил оранжевой плашкой (Ян 20.09). Перебиваем: просто крупный светлый крестик. */
.nav-search .aps-clear{flex:none;width:40px;height:40px;border:0;background:transparent;
  color:#cfcfcf;font-size:26px;line-height:1;cursor:pointer;border-radius:8px;padding:0}
.nav-search .aps-clear:hover{background:transparent;color:#fff}
/* Строка «Найдено: N» — только для скринридера, глазами её видеть не надо
   (Ян 20.09: «найдено 6 очень близко к краю поисковой строки»). */
.aps-live{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;
  clip:rect(0 0 0 0);white-space:nowrap;border:0}
/* Примеры запросов: показываем при клике в пустое поле — там, где человек уже собрался
   печатать. Ничего не мигает: на главной и так крутятся заголовок и карточки (Ян 20.09:
   «вместе с поиском получаются 2 мигания»). */
.aps-drop{position:absolute;z-index:120;left:-1px;right:-1px;top:calc(100% + 8px);
  max-height:min(70vh,560px);overflow:auto;background:#fff;color:var(--ink);
  border:1px solid var(--line);border-radius:12px;box-shadow:0 18px 40px rgba(0,0,0,.28);
  overscroll-behavior:contain;text-align:left}
.aps-g{display:flex;justify-content:space-between;align-items:center;gap:8px;
  padding:12px 14px 6px;font-size:11px;letter-spacing:.09em;text-transform:uppercase;color:var(--muted)}
.aps-gn{font-variant-numeric:tabular-nums}
.aps-i{display:grid;grid-template-columns:44px 1fr auto;align-items:center;gap:12px;
  min-height:56px;padding:8px 14px;color:var(--ink);text-decoration:none;border-top:1px solid #f1eee9}
.aps-g + .aps-i{border-top:0}
/* Ян 20.09: «оранжевые подсказки — плохо выглядят». Строка под курсором подсвечивается
   спокойным серым, текст остаётся чёрным (в design.css ссылки при наведении оранжевеют),
   а слева появляется тонкая янтарная полоска — акцент есть, но не заливкой. */
.aps-i:hover,.aps-i.is-cur{background:#f6f4f1;text-decoration:none;
  box-shadow:inset 3px 0 0 var(--accent)}
.aps-i:hover .aps-t,.aps-i.is-cur .aps-t,.aps-i:hover .aps-m,.aps-i.is-cur .aps-m{color:inherit}
.aps-i:hover{color:var(--ink)}
.aps-i:active{background:#efece8}
.aps-i:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}
.aps-img{width:44px;height:44px;border-radius:9px;object-fit:cover;background:#141110;display:block}
.aps-letter{display:flex;align-items:center;justify-content:center;background:#f1eee9;
  color:var(--muted);font-weight:600;font-size:18px}
.aps-t{min-width:0;font-size:15px;font-weight:400;line-height:1.35;display:-webkit-box;
  -webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.aps-t b{font-weight:600}
.aps-m{color:var(--muted);font-size:13px;white-space:nowrap;font-variant-numeric:tabular-nums}
.aps-wait{padding:16px 14px;color:var(--muted);font-size:14px}
/* Примеры — тоже кнопки внутри .nav-search, поэтому их красило то же старое правило
   `.nav-search button{background:var(--accent)}` (Ян 20.09: «подсказки оранжевые»).
   Селектор с .nav-search специфичнее — перебивает. */
.nav-search .aps-ex{display:flex;align-items:center;gap:10px;min-height:48px;padding:6px 14px;
  width:100%;border:0;border-top:1px solid #f1eee9;background:transparent;color:var(--ink);
  font:400 15px/1.35 inherit;text-align:left;cursor:pointer}
.nav-search .aps-ex:first-of-type{border-top:0}
.nav-search .aps-ex:hover,.nav-search .aps-ex.is-cur{background:#f6f4f1;color:var(--ink);
  box-shadow:inset 3px 0 0 var(--accent)}
.nav-search .aps-ex svg{width:16px;height:16px;flex:none;color:var(--muted)}
.aps-all{display:flex;align-items:center;justify-content:center;min-height:48px;
  border-top:1px solid #f1eee9;color:var(--accent-d);text-decoration:none;font-weight:600;font-size:14px}
.aps-all:hover{background:#f6f4f1;color:var(--ink)}
.aps-empty{padding:16px 14px}
.aps-empty b{display:block;margin-bottom:6px;font-weight:600}
.aps-act{display:flex;align-items:center;min-height:48px;color:var(--accent-d);text-decoration:none;
  border-top:1px solid #f1eee9}
.aps-act:hover{color:var(--ink);background:#f6f4f1}
@media(max-width:860px){
  .nav-search{height:44px}
  .nav-search .aps-clear{width:44px;height:44px;font-size:28px}
  .nav-search input{font-size:16px}
  .aps-drop{max-height:min(66vh,480px)}
  .aps-i{grid-template-columns:44px 1fr;row-gap:2px}
  .aps-m{grid-column:2;white-space:normal}
}
@media(prefers-reduced-motion:reduce){.nav-search{transition:none}}

/* Подпись под названием машины в левом меню: «список работ — по всей марке».
   Нужна там, где книг по самой модели нет и счётчики узлов большие. */
.side-machine-note{margin-top:8px;font-size:11.5px;line-height:1.4;color:var(--muted)}
