/* Раздел статей. Подключается ПОСЛЕ kac-site.css и перебивает его там, где нужно.

   Оглавление и футер живут здесь, а не в общем листе, хотя правила у них те же,
   что на правовых страницах и на лендинге. Причина: там они лежат инлайном в
   каждой странице, и перенос в общий лист означал бы правку пяти чужих файлов
   ради этой работы. Стилей .toc в общем листе нет вовсе, поэтому правило цели
   нажатия для .toc a обязано стоять здесь, рядом с ними: тач-проход общего
   листа поднимает до 44 px всё остальное, а оглавление обходит стороной
   (см. tests/test_site_toc_touch_target.py). */

/* ===== Шапка ===== */
/* kac-site.css не прячет ссылки шапки на узком экране: на лендинге это делает
   его собственный инлайновый блок вместе с бургер-меню. Бургера здесь нет —
   значит, ссылки просто уходят, а бренд и кнопки остаются; навигация в этих
   ширинах остаётся в подвале.
   Порог тот же, что на лендинге (1100), и он не произвольный: замер в браузере дал
   схлопывание названия «Конъюнктура» в ноль уже на 1000 px — бренду негде
   ужаться рядом с четырьмя ссылками и двумя кнопками. На 1100 px помещается. */
@media (max-width: 1100px) { .nav-links { display: none; } }

/* ===== Заголовок ===== */
.blog-head { max-width: 920px; margin: 0 auto; padding: 44px 28px 0; }
.blog-head h1 { font-size: clamp(28px, 3.4vw, 40px); font-weight: 800; letter-spacing: -0.03em; line-height: 1.18; margin-top: 16px; }
.blog-head .lead { font-size: 19px; color: var(--fg-muted); margin-top: 16px; line-height: 1.6; max-width: 620px; }
.crumbs { font-size: 13px; color: var(--fg-muted); font-family: var(--font-mono); display: flex; gap: 8px; flex-wrap: wrap; }
.crumbs a { color: var(--fg-muted); }
.crumbs a:hover { color: var(--fg); }
.blog-meta { display: flex; align-items: center; gap: 14px; flex-wrap: wrap; margin-top: 16px; font-size: 14px; color: var(--fg-muted); font-family: var(--font-mono); }
.blog-badge { display: inline-flex; align-items: center; font-family: var(--font-mono); font-size: 12px; font-weight: 600; letter-spacing: .06em; text-transform: uppercase; color: var(--accent-soft-fg); background: var(--accent-tint); border: 1px solid var(--accent-soft); padding: 4px 10px; border-radius: 999px; }

/* ===== Раскладка статьи ===== */
.blog-main { max-width: 920px; margin: 0 auto; padding: 28px 28px 60px; display: grid; grid-template-columns: 222px 1fr; gap: 44px; align-items: start; }
.blog-body { min-width: 0; max-width: 620px; }

/* Обложки сохраняют исходные пропорции: предметы не обрезаются на телефоне. */
.article-cover { display: block; width: 100%; height: auto; margin-top: 24px; border-radius: 12px; }
.post-cover { display: block; width: 100%; height: auto; aspect-ratio: 1672 / 941; border-radius: 8px; }

/* Пояснения набраны HTML-текстом и перестраиваются без уменьшения шрифта. */
.article-visual { margin: 28px 0; padding: 24px; border: 1px solid var(--border); border-radius: 12px; background: var(--bg-2); }
.blog-body .visual-title { font-size: 22px; font-weight: 700; line-height: 1.3; letter-spacing: -.02em; color: var(--fg); margin-bottom: 24px; text-wrap: balance; scroll-margin-top: 120px; }
.article-visual figcaption { font-size: 13px; line-height: 1.55; color: var(--fg-muted); margin-top: 20px; }
.blog-body .visual-label { font-size: 15px; font-weight: 600; color: var(--fg); margin: 0 0 14px; line-height: 1.4; }
.blog-body .visual-note { font-size: 15px; line-height: 1.55; padding-top: 18px; margin: 20px 0 0; border-top: 1px solid var(--border); }
.sheet-comparison { display: grid; grid-template-columns: 1fr 1fr; gap: 24px; }
.sheet-comparison > div { min-width: 0; }
.sheet-line { padding: 10px 0; border-top: 1px solid var(--border); font-size: 15px; line-height: 1.4; }
.sheet-line > span { text-decoration: line-through; text-decoration-color: var(--fg-muted); }
.sheet-line small { display: block; font-size: 13px; color: var(--fg-muted); margin-top: 4px; }
.sheet-line-refine > span { text-decoration: none; }
.sheet-result { border-left: 1px solid var(--border); padding-left: 24px; }
.blog-body .resource-name { font-size: 21px; font-weight: 650; line-height: 1.45; color: var(--accent-soft-fg); margin-bottom: 12px; overflow-wrap: anywhere; }
.blog-body .resource-detail { font-size: 14px; line-height: 1.5; margin-bottom: 12px; }
.resource-fields { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; margin: 18px 0 12px; }
.resource-fields dt { font-size: 12px; color: var(--fg-muted); }
.resource-fields dd { font-family: var(--font-mono); font-size: 23px; margin: 2px 0 0; color: var(--fg); }
.vat-legend { display: flex; flex-wrap: wrap; gap: 8px 18px; font-size: 13px; margin-bottom: 22px; color: var(--fg-2); }
.vat-legend > span { display: flex; align-items: center; gap: 7px; }
.vat-legend i { width: 12px; height: 12px; display: inline-block; }
.vat-base { background: var(--accent); }
.vat-tax { background: var(--fg-muted); }
.vat-quote + .vat-quote { margin-top: 22px; }
.vat-quote-title { display: flex; justify-content: space-between; flex-wrap: wrap; gap: 6px 12px; font-size: 15px; margin-bottom: 8px; }
.vat-quote-title > span { font-family: var(--font-mono); font-variant-numeric: tabular-nums; white-space: nowrap; }
.vat-bar { display: flex; height: 26px; border-left: 1px solid var(--border-strong); }
.vat-bar > span { display: block; }
.blog-body .vat-quote p { margin: 7px 0 0; font-size: 14px; line-height: 1.5; }
.file-roles { margin: 0; }
.file-roles > div { display: grid; grid-template-columns: 64px 1fr; gap: 16px; padding: 16px 0; border-top: 1px solid var(--border); }
.file-roles dt { font-family: var(--font-mono); color: var(--accent-soft-fg); font-size: 17px; padding-top: 1px; }
.file-roles dd { margin: 0; font-size: 15px; line-height: 1.5; }
.file-roles dd strong, .file-roles dd span { display: block; }
.file-roles dd span { color: var(--fg-2); font-size: 14px; margin-top: 4px; }
.blog-body .export-start { text-align: center; font-size: 16px; font-weight: 600; color: var(--fg); margin-bottom: 22px; }
.export-branches { display: grid; grid-template-columns: 1fr 1fr; gap: 24px; }
.export-branches > div { border-top: 1px solid var(--accent-soft-fg); padding-top: 14px; }
.blog-body .export-format { font-size: 14px; font-family: var(--font-mono); color: var(--accent-soft-fg); margin-bottom: 10px; }
.blog-body .export-branches p { font-size: 14px; line-height: 1.55; }
.export-next { position: relative; text-align: center; padding: 18px 10px 0; margin-top: 24px; border-top: 1px solid var(--border-strong); }
.export-next::before { content: ''; position: absolute; width: 8px; height: 8px; border-right: 1px solid var(--fg-muted); border-bottom: 1px solid var(--fg-muted); transform: rotate(45deg); top: -5px; left: calc(50% - 4px); background: var(--bg-2); }
.export-next strong { display: block; font-size: 17px; line-height: 1.4; }
.export-next span { display: block; margin-top: 8px; color: var(--fg-2); font-size: 14px; line-height: 1.55; }
.export-final strong { color: var(--accent-soft-fg); font-size: 22px; }
@media (max-width: 520px) {
  .article-visual { padding: 20px 16px; }
  .sheet-comparison, .export-branches { grid-template-columns: 1fr; gap: 24px; }
  .sheet-result { border-left: 0; border-top: 1px solid var(--border); padding: 20px 0 0; }
  .file-roles > div { grid-template-columns: 52px 1fr; gap: 12px; }
}

/* Проверка источников, реквизитов и дат: текст остаётся доступным без картинок. */
.source-comparison { display: grid; grid-template-columns: 1fr 1fr; gap: 24px; }
.source-comparison > div { min-width: 0; }
.source-comparison .visual-label { min-height: 42px; }
.source-papers { display: flex; gap: 10px; padding: 6px 0 18px; }
.source-papers span { position: relative; display: grid; place-items: start center; padding-top: 10px; width: 56px; height: 74px; border: 1px solid var(--accent-soft-fg); border-radius: 4px; color: var(--accent-soft-fg); font-size: 17px; font-weight: 600; }
.source-papers span::after { content: ''; position: absolute; left: 11px; right: 11px; bottom: 13px; height: 7px; border-top: 1px solid var(--border-strong); border-bottom: 1px solid var(--border-strong); }
.blog-body .source-total { font-size: 23px; font-weight: 700; color: var(--fg); margin-bottom: 8px; }
.blog-body .source-explanation { font-size: 15px; line-height: 1.55; margin-bottom: 0; }
.quote-fields { margin: 0; }
.quote-fields > div { display: grid; grid-template-columns: 150px 1fr; gap: 20px; padding: 16px 0; }
.quote-fields > div + div { border-top: 1px solid var(--border); }
.quote-fields dt { font-size: 15px; font-weight: 600; line-height: 1.5; color: var(--fg); }
.quote-fields dd { margin: 0; font-size: 15px; line-height: 1.5; color: var(--fg-2); }
.blog-body .document-steps { list-style: none; counter-reset: doc-step; gap: 0; padding: 0; margin: 0; }
.document-steps li { position: relative; counter-increment: doc-step; padding: 0 0 24px 48px; }
.document-steps li::before { content: counter(doc-step); position: absolute; left: 0; top: 0; width: 30px; height: 30px; display: grid; place-items: center; border: 1px solid var(--accent-soft-fg); border-radius: 50%; color: var(--accent-soft-fg); font-family: var(--font-mono); font-size: 15px; }
.document-steps li:not(:last-child)::after { content: ''; position: absolute; left: 15px; top: 36px; bottom: 6px; border-left: 1px solid var(--border-strong); }
.document-steps li:last-child { padding-bottom: 0; }
.document-steps strong, .document-steps span { display: block; }
.document-steps strong { font-size: 17px; line-height: 1.45; }
.document-steps span { margin-top: 6px; font-size: 15px; line-height: 1.55; }
.blog-body .document-timeline { list-style: none; gap: 0; margin: 0; padding: 0 0 0 8px; }
.document-timeline li { position: relative; display: grid; grid-template-columns: 128px 1fr; gap: 18px; padding: 0 0 24px 22px; font-size: 15px; line-height: 1.5; }
.document-timeline li::before { content: ''; position: absolute; left: -5px; top: 6px; width: 9px; height: 9px; border: 1px solid var(--accent-soft-fg); border-radius: 50%; background: var(--bg-2); }
.document-timeline li:not(:last-child)::after { content: ''; position: absolute; left: -1px; top: 19px; bottom: 1px; border-left: 1px solid var(--border-strong); }
.document-timeline time { font-family: var(--font-mono); font-size: 14px; color: var(--accent-soft-fg); font-variant-numeric: tabular-nums; }
.date-conclusions { display: grid; grid-template-columns: 1fr 1fr; gap: 24px; margin-top: 8px; }
.date-conclusions > div { border-top: 1px solid var(--border-strong); padding-top: 14px; }
.date-conclusions strong { font-size: 16px; }
.blog-body .date-conclusions p { font-size: 15px; line-height: 1.55; margin: 8px 0 0; }
@media (max-width: 520px) {
  .source-comparison, .date-conclusions { grid-template-columns: 1fr; }
  .source-comparison .visual-label { min-height: 0; }
  .source-comparison > div + div { border-top: 1px solid var(--border); padding-top: 20px; }
  .quote-fields > div { grid-template-columns: 1fr; gap: 6px; padding: 14px 0; }
  .document-timeline li { grid-template-columns: 1fr; gap: 4px; }
}

/* Хронология и пересчёт единиц: читаемые подписи вместо текста внутри картинки. */
.history-timeline strong, .history-timeline span { display: block; }
.history-timeline strong { font-size: 17px; line-height: 1.45; }
.history-timeline span { margin-top: 6px; font-size: 15px; line-height: 1.55; }
.history-timeline li:last-child { padding-bottom: 0; }
.unit-matrix { display: grid; grid-template-columns: repeat(5, minmax(0, 1fr)); gap: 8px; }
.unit-matrix span { padding: 12px 0; text-align: center; border: 1px solid var(--accent-soft); border-radius: 4px; background: var(--accent-tint); color: var(--accent-soft-fg); font-family: var(--font-mono); font-size: 14px; }
.blog-body .unit-equation { margin: 16px 0 22px; font-family: var(--font-mono); font-size: 16px; text-align: center; color: var(--fg); font-variant-numeric: tabular-nums; }
.unit-price-result { display: grid; grid-template-columns: 1fr 1fr; gap: 20px; margin: 0; }
.unit-price-result > div { border-top: 1px solid var(--border-strong); padding-top: 14px; }
.unit-price-result dt { font-size: 14px; line-height: 1.5; color: var(--fg-2); }
.unit-price-result dd { margin: 7px 0 0; font-family: var(--font-mono); font-size: 24px; color: var(--fg); font-variant-numeric: tabular-nums; }
.conversion-line { display: grid; grid-template-columns: 1fr 1fr 1fr; gap: 14px; align-items: start; padding: 18px 0; border-top: 1px solid var(--border); }
.conversion-line span { display: block; min-height: 44px; font-size: 14px; line-height: 1.5; color: var(--fg-2); }
.conversion-line strong, .conversion-line b { display: block; margin-top: 6px; font-family: var(--font-mono); font-size: 23px; line-height: 1.4; font-weight: 600; font-variant-numeric: tabular-nums; }
.conversion-line .conversion-action span, .conversion-line .conversion-action b { color: var(--accent-soft-fg); }
@media (max-width: 520px) {
  .unit-matrix { grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 6px; }
  .unit-price-result { grid-template-columns: 1fr; gap: 16px; }
  .conversion-line { grid-template-columns: 1fr; gap: 16px; padding: 20px 0; }
  .conversion-line span { min-height: 0; }
  .conversion-action { padding-left: 18px; border-left: 1px solid var(--accent-soft-fg); }
}

/* ===== Оглавление =====
   Разметка: <nav class="toc-box"><details><summary>…</summary><div class="toc">.
   Внешний класс отличается от внутреннего намеренно — расширение toc даёт свой
   .toc, и один класс на обоих применял бы каждое правило дважды. */
.toc-box { position: sticky; top: 88px; font-size: 13px; }
.toc-box summary { font-size: 11px; text-transform: uppercase; letter-spacing: .06em; color: var(--fg-muted); margin-bottom: 12px; cursor: pointer; }
.toc-box summary:hover { color: var(--fg); }
.toc a { display: block; color: var(--fg-muted); padding: 5px 0; line-height: 1.4; transition: color .15s; border-left: 2px solid transparent; padding-left: 12px; margin-left: -12px; }
.toc a:hover { color: var(--fg); }
.toc ul { list-style: none; margin: 0; padding: 0; }
.toc ul ul { display: none; }               /* только h2: h3 раздули бы колонку */
@media (pointer: coarse) { .toc a { min-height: 44px; display: flex; align-items: center; } }
/* Сама подпись — тоже цель нажатия: на телефоне ею оглавление и открывают. */
@media (pointer: coarse) { .toc-box summary { min-height: 44px; display: flex; align-items: center; } }

/* На десктопе оглавление раскрыто всегда: <details> нужен только телефону, а
   держать две разные разметки — верный способ, чтобы они разъехались. Порог тот
   же, на котором колонка оглавления уезжает под текст. */
@media (min-width: 821px) {
  .toc-box details::details-content { content-visibility: visible; }
  .toc-box details:not([open]) > *:not(summary) { display: block; }
  .toc-box summary { list-style: none; }
  .toc-box summary::-webkit-details-marker { display: none; }
}

/* ===== Тело статьи ===== */
.blog-body h2 { font-size: 24px; font-weight: 700; letter-spacing: -0.02em; margin: 40px 0 14px; scroll-margin-top: 88px; }
.blog-body h2:first-child { margin-top: 0; }
.blog-body h3 { font-size: 19px; font-weight: 600; margin: 28px 0 10px; scroll-margin-top: 88px; }
.blog-body p { font-size: 17px; color: var(--fg-2); margin: 0 0 14px; line-height: 1.68; }
.blog-body ul, .blog-body ol { margin: 0 0 16px; padding-left: 22px; display: flex; flex-direction: column; gap: 9px; }
.blog-body li { font-size: 17px; color: var(--fg-2); line-height: 1.62; }
.blog-body strong { color: var(--fg); font-weight: 600; }
.blog-body a { color: var(--accent-soft-fg); text-decoration: underline; text-underline-offset: 2px; }
.blog-body blockquote { margin: 22px 0; padding: 16px 20px; border-left: 3px solid var(--accent-soft); background: var(--accent-tint); border-radius: 0 var(--radius) var(--radius) 0; }
.blog-body blockquote p:last-child { margin-bottom: 0; }
.blog-body img { max-width: 100%; height: auto; border-radius: var(--radius); border: 1px solid var(--border-soft); }
.blog-body code { font-family: var(--font-mono); font-size: 14px; background: var(--bg-3); border: 1px solid var(--border-soft); border-radius: 6px; padding: 1px 6px; }
.blog-body pre { overflow-x: auto; background: var(--bg-3); border: 1px solid var(--border); border-radius: var(--radius); padding: 16px 18px; margin: 0 0 16px; }
.blog-body pre code { background: none; border: 0; padding: 0; }
.blog-body table { width: 100%; border-collapse: collapse; margin: 8px 0 18px; font-size: 15px; display: block; overflow-x: auto; }
.blog-body th, .blog-body td { text-align: left; padding: 11px 12px; border-bottom: 1px solid var(--border-soft); }
.blog-body th { font-size: 13px; text-transform: uppercase; letter-spacing: .04em; color: var(--fg-muted); font-weight: 600; }

/* ===== Подвал статьи ===== */
.article-publication { margin-top: 36px; padding-top: 18px; border-top: 1px solid var(--border); }
.article-publication > strong { font-size: 15px; }
.blog-body .article-publication p { margin-top: 7px; font-size: 14px; line-height: 1.6; color: var(--fg-muted); }
.blog-cta { max-width: 920px; margin: 0 auto; padding: 0 28px; }
.blog-cta .inner { display: flex; align-items: center; justify-content: space-between; gap: 18px; flex-wrap: wrap; background: var(--panel); border: 1px solid var(--border); border-radius: var(--radius-lg); padding: 22px 26px; box-shadow: var(--shadow-card); }
.blog-cta p { font-size: 15px; color: var(--fg-muted); max-width: 460px; }
.related { max-width: 920px; margin: 0 auto; padding: 46px 28px 80px; }
.related h2 { font-size: 21px; font-weight: 700; letter-spacing: -0.02em; margin-bottom: 20px; }

/* ===== Карточки ===== */
.card-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 20px; }
.post-card { display: flex; flex-direction: column; gap: 12px; background: var(--panel); border: 1px solid var(--border); border-radius: var(--radius-lg); box-shadow: var(--shadow-card); padding: 22px 24px; transition: border-color .2s, transform .12s; }
.post-card:hover { border-color: var(--border-strong); transform: translateY(-2px); }
.post-card h3 { font-size: 18px; font-weight: 700; letter-spacing: -0.015em; line-height: 1.34; }
.post-card h3 a { color: var(--fg); }
.post-card p { font-size: 15px; color: var(--fg-muted); line-height: 1.55; }
.post-card .row { display: flex; align-items: center; gap: 12px; flex-wrap: wrap; font-family: var(--font-mono); font-size: 12px; color: var(--fg-muted); margin-top: auto; }

/* ===== Страница списка ===== */
.blog-list { max-width: 1080px; margin: 0 auto; padding: 8px 28px 80px; }
.blog-list section { margin-top: 48px; }
.blog-list section:first-child { margin-top: 0; }
.blog-list .sec-tag { display: block; margin-bottom: 18px; }

/* ===== Футер ===== */
/* Копия правил из site/index.html: там они лежат инлайном и общему листу неизвестны. */
footer { border-top: 1px solid var(--border-soft); padding: 52px 0 calc(40px + env(safe-area-inset-bottom, 0px)); background: var(--bg-2); }
.foot-grid { display: flex; justify-content: space-between; gap: 40px; flex-wrap: wrap; }
.foot-brand { max-width: 300px; }
.foot-brand p { font-size: 15px; color: var(--fg-muted); margin-top: 16px; }
.foot-cols { display: flex; gap: 64px; flex-wrap: wrap; }
.foot-col h3 { font-size: 13px; text-transform: uppercase; letter-spacing: .06em; color: var(--fg-muted); font-weight: 600; margin: 0 0 14px; }
.foot-col a { display: block; font-size: 15px; color: var(--fg-muted); padding: 5px 0; transition: color .15s; }
.foot-col a:hover { color: var(--fg); }
/* Общий лист глушит нативную подсветку тапа у всех ссылок, поэтому отклик на
   палец надо вернуть руками — иначе тап по подвалу не даёт никакой реакции.
   На лендинге это правило есть, в общий лист его не вынесли. */
.foot-col a:active, .foot-bot a:active { opacity: .6; }
/* Тач-проход общего листа поднимает ссылки подвала до 44 px через inline-flex,
   но правило .foot-col a выше по каскаду возвращает display:block — высота
   остаётся, а центрирование пропадает, и текст липнет к верху коробки.
   Возвращаем ровно то, что задумано общим листом. */
@media (pointer: coarse) { .foot-col a { display: inline-flex; align-items: center; min-height: 44px; } }
.foot-bot { margin-top: 44px; padding-top: 24px; border-top: 1px solid var(--border-soft); display: flex; justify-content: space-between; gap: 16px; flex-wrap: wrap; font-size: 13px; color: var(--fg-muted); }

/* ===== Адаптив ===== */
@media (max-width: 1000px) { .card-grid { grid-template-columns: 1fr 1fr; } }
@media (max-width: 820px) {
  .blog-main { grid-template-columns: 1fr; gap: 22px; }
  .toc-box { position: static; border-bottom: 1px solid var(--border-soft); padding-bottom: 16px; }
  .toc-box summary { margin-bottom: 0; }
  .toc-box details[open] summary { margin-bottom: 12px; }
  .toc ul { display: grid; grid-template-columns: 1fr 1fr; gap: 2px 18px; }
  .blog-body { max-width: none; }
}
@media (max-width: 680px) {
  .card-grid { grid-template-columns: 1fr; }
  /* Два CTA рядом с кнопкой темы не помещаются в 375 px: «Попробовать» наезжал
     на знак бренда, а название схлопывалось в ноль. У лендинга главный CTA в
     шапке не живёт вовсе — здесь на узком экране тоже остаётся только «Войти». */
  .nav-cta .btn-primary { display: none; }
  /* Оглавление — в одну колонку. Две достались от правовых страниц, где пункты
     короткие («1. Общие положения»), а заголовки статей — целые фразы: замер на
     375 px дал колонку в 163 px и по три-четыре строки на пункт. */
  .toc ul { grid-template-columns: 1fr; }
}
