/* ==========================================================================
   FixCommerce — оформление поверх framework.css.

   Всё, что можно менять — токены в :root. Компоненты цветов не знают,
   поэтому тёмная тема получается переопределением одного блока переменных,
   а не второй копией стилей.

   Тема: system по умолчанию (prefers-color-scheme), переключатель в шапке
   ставит data-theme="light|dark" на <html> и запоминает выбор в localStorage.
   ========================================================================== */

/* --- Токены --------------------------------------------------------------- */
:root {
  color-scheme: light dark;

  /* Поверхности */
  --fc-bg:            #ffffff;
  --fc-surface:       #f4f7f8;
  --fc-surface-2:     #eaf0f2;
  --fc-card:          #ffffff;

  /* Текст */
  --fc-ink:           #101b24;
  --fc-ink-soft:      #33454f;
  --fc-muted:         #5c6f7c;

  /* Линии */
  --fc-line:          #e2e8ec;
  /* 3,25:1 к белому. Прежний #c6d2d9 давал 1,54 — границы полей ввода
     просто не читались, а WCAG 1.4.11 требует для них 3:1. */
  --fc-line-strong:   #80919e;

  /* Акцент — фирменный тёмно-бирюзовый */
  --fc-accent:        #0b6b5e;
  --fc-accent-strong: #095448;
  --fc-accent-soft:   #e6f2ef;
  --fc-accent-ring:   rgba(11, 107, 94, .18);
  --fc-on-accent:     #ffffff;

  /* Сигнальные */
  --fc-warn:          #9a6206;
  --fc-warn-soft:     #fdf4e3;
  --fc-warn-line:     #e6cf9d;
  --fc-bad:           #a32020;
  --fc-bad-soft:      #fdeeee;
  --fc-good:          #0b6b5e;

  /* Тени */
  --fc-shadow-1: 0 1px 2px rgba(16, 27, 36, .05);
  --fc-shadow-2: 0 1px 2px rgba(16, 27, 36, .05), 0 10px 28px -12px rgba(16, 27, 36, .22);
  --fc-shadow-3: 0 12px 34px -14px rgba(16, 27, 36, .30);

  /* Форма */
  --fc-radius:    .5rem;
  --fc-radius-sm: .375rem;
  --fc-radius-lg: .875rem;

  /* Ширина строки текста: читается тем легче, чем ближе к 70 знакам */
  --fc-measure: 42rem;

  /* Хвост из китайских гарнитур подключается сам и только там, где нужен:
     браузер идёт по списку до первого шрифта, в котором есть нужный знак, а
     иероглифов нет ни в Segoe UI, ни в Roboto, ни в Helvetica. Латинские
     буквы до этого хвоста не доходят и рисуются как раньше.
     Без него китайская страница на Linux и Android достаётся случайному
     системному шрифту, а на Windows — резервному связыванию, у которого
     другая высота строки, и текст едет относительно соседней латиницы. */
  --fc-font: ui-sans-serif, system-ui, -apple-system, "Segoe UI Variable Text",
             "Segoe UI", Roboto, "Helvetica Neue", Arial,
             "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei",
             "Noto Sans CJK SC", "Source Han Sans SC", sans-serif;
  --fc-font-num: ui-sans-serif, system-ui, "Segoe UI", Roboto, sans-serif;

  /* Иконки, которые рисуются маской и красятся из currentColor. */
  --icon-clock:   url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round'%3E%3Ccircle cx='12' cy='12' r='9'/%3E%3Cpath d='M12 7v5l3 2'/%3E%3C/svg%3E");
  --icon-burger:  url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3E%3Cpath stroke='%23000' stroke-width='2' stroke-linecap='round' d='M4 8h22M4 15h22M4 22h22'/%3E%3C/svg%3E");
  --icon-chevron: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' d='M2 5l6 6 6-6'/%3E%3C/svg%3E");
}

@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) {
    --fc-bg:            #0d1519;
    --fc-surface:       #131e24;
    --fc-surface-2:     #1a262e;
    --fc-card:          #121d23;

    --fc-ink:           #e6eef2;
    --fc-ink-soft:      #c3d0d8;
    --fc-muted:         #93a5b1;

    --fc-line:          #24323b;
    --fc-line-strong:   #5a7180;   /* 3,35:1 к фону карточки */

    --fc-accent:        #4ecfb9;
    --fc-accent-strong: #7fe2d0;
    --fc-accent-soft:   #10302c;
    --fc-accent-ring:   rgba(78, 207, 185, .22);
    --fc-on-accent:     #06231f;

    --fc-warn:          #e5b567;
    --fc-warn-soft:     #2a2114;
    --fc-warn-line:     #4a3a1c;
    --fc-bad:           #f08b8b;
    --fc-bad-soft:      #2b1717;
    --fc-good:          #4ecfb9;

    --fc-shadow-1: 0 1px 2px rgba(0, 0, 0, .4);
    --fc-shadow-2: 0 1px 2px rgba(0, 0, 0, .4), 0 10px 28px -12px rgba(0, 0, 0, .7);
    --fc-shadow-3: 0 12px 34px -14px rgba(0, 0, 0, .8);
  }
}

:root[data-theme="dark"] {
  --fc-bg:            #0d1519;
  --fc-surface:       #131e24;
  --fc-surface-2:     #1a262e;
  --fc-card:          #121d23;

  --fc-ink:           #e6eef2;
  --fc-ink-soft:      #c3d0d8;
  --fc-muted:         #93a5b1;

  --fc-line:          #24323b;
  --fc-line-strong:   #5a7180;   /* 3,35:1 к фону карточки */

  --fc-accent:        #4ecfb9;
  --fc-accent-strong: #7fe2d0;
  --fc-accent-soft:   #10302c;
  --fc-accent-ring:   rgba(78, 207, 185, .22);
  --fc-on-accent:     #06231f;

  --fc-warn:          #e5b567;
  --fc-warn-soft:     #2a2114;
  --fc-warn-line:     #4a3a1c;
  --fc-bad:           #f08b8b;
  --fc-bad-soft:      #2b1717;
  --fc-good:          #4ecfb9;

  --fc-shadow-1: 0 1px 2px rgba(0, 0, 0, .4);
  --fc-shadow-2: 0 1px 2px rgba(0, 0, 0, .4), 0 10px 28px -12px rgba(0, 0, 0, .7);
  --fc-shadow-3: 0 12px 34px -14px rgba(0, 0, 0, .8);
}

/* --- База ----------------------------------------------------------------- */
body {
  background: var(--fc-bg);
  color: var(--fc-ink);
  font-family: var(--fc-font);
  font-size: 1.0625rem;
  line-height: 1.65;
  text-rendering: optimizeLegibility;
  -webkit-font-smoothing: antialiased;
}

main { min-height: 60vh; padding-bottom: 3rem; }

a {
  color: var(--fc-accent);
  text-underline-offset: .18em;
  text-decoration-thickness: from-font;
}
a:hover { color: var(--fc-accent-strong); }

:focus-visible {
  outline: 2px solid var(--fc-accent);
  outline-offset: 2px;
  border-radius: 3px;
}

hr { border: 0; border-top: 1px solid var(--fc-line); }

::selection { background: var(--fc-accent-ring); }

.skip-link {
  position: absolute; top: .5rem; left: .5rem; z-index: 1080;
  background: var(--fc-card); color: var(--fc-ink);
  padding: .55rem .85rem; border-radius: var(--fc-radius-sm);
  box-shadow: var(--fc-shadow-2);
}

/* --- Шапка ---------------------------------------------------------------- */
.site-header {
  background: color-mix(in srgb, var(--fc-bg) 88%, transparent);
  backdrop-filter: saturate(1.6) blur(10px);
  border-bottom: 1px solid var(--fc-line);
}
@supports not (backdrop-filter: blur(1px)) {
  .site-header { background: var(--fc-bg); }
}

.navbar-brand {
  font-size: 1.2rem;
  font-weight: 700;
  letter-spacing: -.02em;
  display: inline-flex;
  align-items: center;
  gap: .5rem;
}
.brand-mark {
  width: 1.75rem; height: 1.75rem;
  flex: 0 0 auto;
  border-radius: .5rem;
  background: linear-gradient(140deg, var(--fc-accent), color-mix(in srgb, var(--fc-accent) 55%, #1aa38c));
  color: var(--fc-on-accent);
  display: grid; place-items: center;
  font-size: .95rem; font-weight: 800;
  letter-spacing: -.04em;
  box-shadow: var(--fc-shadow-1);
}
.brand-fix      { color: var(--fc-accent); }
.brand-commerce { color: var(--fc-ink); }

.nav-link {
  position: relative;
  border-radius: var(--fc-radius-sm);
  color: var(--fc-ink-soft);
  font-size: .975rem;
}
.nav-link:hover { background: var(--fc-surface); color: var(--fc-ink); }
.nav-link.active {
  color: var(--fc-accent) !important;
  font-weight: 600;
  background: var(--fc-accent-soft);
}

/* Переключатель темы: иконка меняется по теме, а не по клику — так она всегда
   показывает текущее состояние, а не обещание. */
.theme-toggle {
  display: inline-grid; place-items: center;
  width: 2.15rem; height: 2.15rem;
  padding: 0;
  border: 1px solid var(--fc-line-strong);
  border-radius: var(--fc-radius-sm);
  background: transparent;
  color: var(--fc-muted);
  cursor: pointer;
}
.theme-toggle:hover { background: var(--fc-surface); color: var(--fc-ink); }
.theme-toggle .icon-moon { display: none; }
:root[data-theme="dark"] .theme-toggle .icon-sun  { display: none; }
:root[data-theme="dark"] .theme-toggle .icon-moon { display: block; }
@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) .theme-toggle .icon-sun  { display: none; }
  :root:not([data-theme="light"]) .theme-toggle .icon-moon { display: block; }
}

.nav-actions { display: flex; align-items: center; gap: .5rem; }
@media (max-width: 991.98px) {
  .nav-actions { padding: .5rem 0 .25rem; }
}

/* Поиск в шапке.

   Поле и кнопка склеены в одну рамку, а не стоят рядом двумя контролами:
   в ряду с переключателями темы и языка три отдельные рамки читаются как
   свалка. Рамка подсвечивается, когда фокус внутри, — :focus-within делает
   это без единой строчки скрипта. */
/* Без overflow: hidden — он обрезал бы кольцо фокуса на кнопке поиска
   (у него outline-offset). Обрезать тут всё равно нечего: фон у поля и
   кнопки прозрачный, за скруглённые углы ничего не вылезает. */
.nav-search {
  display: flex;
  align-items: stretch;
  border: 1px solid var(--fc-line-strong);
  border-radius: var(--fc-radius-sm);
  background: var(--fc-bg);
}
.nav-search:focus-within {
  border-color: var(--fc-accent);
  box-shadow: 0 0 0 3px var(--fc-accent-ring);
}
.nav-search-input {
  width: 9.5rem;
  min-width: 0;
  padding: .3rem .55rem;
  border: 0;
  background: transparent;
  color: var(--fc-ink);
  font: inherit;
  font-size: .875rem;
}
.nav-search-input::placeholder { color: var(--fc-muted); }
.nav-search-input:focus { outline: none; }
.nav-search-btn {
  display: grid; place-items: center;
  width: 2rem;
  padding: 0;
  border: 0;
  background: transparent;
  color: var(--fc-muted);
  cursor: pointer;
}
.nav-search-btn:hover { color: var(--fc-ink); }

/* На узком экране форма стоит первой строкой выпавшего меню и тянется во
   всю ширину: там она не соседствует с кнопками и жаться незачем. */
@media (max-width: 991.98px) {
  .nav-actions { flex-wrap: wrap; }
  .nav-search { order: -1; width: 100%; }
  .nav-search-input { width: auto; flex: 1 1 auto; }
}

/* Генератор документов
   ==========================================================================

   Форма длинная — четыре блока и таблица позиций, — поэтому размечена
   fieldset/legend, а не заголовками: так её видит и скринридер, и человек,
   который просматривает страницу глазами. */
.doc-form fieldset {
  border: 1px solid var(--fc-line);
  border-radius: var(--fc-radius);
  padding: 1rem 1.1rem 1.2rem;
  margin: 0 0 1.25rem;

  /* Обязательная строка, а не вкусовщина: у fieldset браузерное умолчание —
     min-width: min-content. Из-за него он растягивается под широкую таблицу
     позиций и сводит на нет её собственный скролл-контейнер, а страница на
     телефоне уезжает вбок. Замерено: 490 px при экране 375. */
  min-width: 0;
}
.doc-form legend {
  padding: 0 .4rem;
  font-size: .8rem;
  font-weight: 650;
  text-transform: uppercase;
  letter-spacing: .05em;
  color: var(--fc-muted);
}
.doc-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(13rem, 1fr));
  gap: .85rem 1rem;
}
.doc-grid > label { display: flex; flex-direction: column; gap: .3rem; }
.doc-grid > label > span { font-size: .85rem; color: var(--fc-ink-soft); }
.doc-wide { grid-column: 1 / -1; }

.doc-form input[type="text"],
.doc-form input[type="email"],
.doc-form input[type="date"],
.doc-form select,
.doc-form textarea {
  width: 100%;
  padding: .4rem .55rem;
  border: 1px solid var(--fc-line-strong);
  border-radius: var(--fc-radius-sm);
  background: var(--fc-bg);
  color: var(--fc-ink);
  font: inherit;
  font-size: .95rem;
}
.doc-form textarea { resize: vertical; }

.doc-check { display: flex; align-items: center; gap: .5rem; margin-top: .75rem; }
.doc-check input { width: 1.05rem; height: 1.05rem; }

/* Контейнер таблицы позиций обязан быть точкой отсчёта для абсолютного
   позиционирования.

   Почему: подписи полей в ячейках — настоящие <label>, скрытые классом
   visually-hidden, а он работает через position: absolute. Пока у контейнера
   position: static, эти тридцать меток отсчитываются от страницы, а не от
   него, и скролл их не обрезает: каждая шириной в пиксель, но последняя
   стоит в 490 px от края, и страница на телефоне уезжает вбок ровно на эту
   величину. Замерено: 490 при экране 375, после правки 375. */
.doc-form .table-responsive { position: relative; }

/* Поля, нужные не каждому типу документа. Скрываются, когда скрипт проставил
   тип; без скрипта видны все — движок читает у каждого типа только своё, и
   лишние значения ни на что не влияют.

   Списки типов перечислены явно, а не через «спрятать всё и показать нужное»:
   вернуть ячейке таблицы правильный display после display: none — отдельная
   морока, а типов пять и они наперечёт. */
/* Блок «исходный документ» — у корректировки, дубликата, напоминания и
   подтверждения заказа. У счёта, проформы и накладной его нет. */
.doc-form[data-type="invoice"] .doc-only-original,
.doc-form[data-type="proforma"] .doc-only-original,
.doc-form[data-type="delivery"] .doc-only-original,
.doc-form[data-type="exempt"] .doc-only-original,
/* Номер исходного документа: дубликат несёт номер оригинала в своём поле. */
.doc-form[data-type="duplicate"] .doc-f-original-number,
/* Дата оригинала нужна корректировке и дубликату. */
.doc-form[data-type="reminder"] .doc-f-original-issued,
.doc-form[data-type="order"] .doc-f-original-issued,
/* Номер и причина — только у корректировки. */
.doc-form[data-type="invoice"] .doc-only-correction,
.doc-form[data-type="proforma"] .doc-only-correction,
.doc-form[data-type="duplicate"] .doc-only-correction,
.doc-form[data-type="delivery"] .doc-only-correction,
.doc-form[data-type="reminder"] .doc-only-correction,
.doc-form[data-type="exempt"] .doc-only-correction,
.doc-form[data-type="order"] .doc-only-correction,
/* Колонки «до корректировки» — тоже только у неё. */
.doc-form[data-type="invoice"] .doc-col-before,
.doc-form[data-type="proforma"] .doc-col-before,
.doc-form[data-type="duplicate"] .doc-col-before,
.doc-form[data-type="delivery"] .doc-col-before,
.doc-form[data-type="reminder"] .doc-col-before,
.doc-form[data-type="exempt"] .doc-col-before,
.doc-form[data-type="order"] .doc-col-before,
/* Пропущенный срок и ставка процентов нужны одному напоминанию. */
.doc-form[data-type="invoice"] .doc-only-reminder,
.doc-form[data-type="proforma"] .doc-only-reminder,
.doc-form[data-type="correction"] .doc-only-reminder,
.doc-form[data-type="duplicate"] .doc-only-reminder,
.doc-form[data-type="delivery"] .doc-only-reminder,
.doc-form[data-type="exempt"] .doc-only-reminder,
.doc-form[data-type="order"] .doc-only-reminder,
/* Накладная — не про деньги: ни цен, ни ставок в ней нет. */
.doc-form[data-type="delivery"] .doc-col-money,
/* Напоминание — наоборот: только суммы, без количеств и ставок налога. */
.doc-form[data-type="reminder"] .doc-col-qty,
.doc-form[data-type="reminder"] .doc-col-rate,
/* Документ без налога: ставки в нём нет по определению. */
.doc-form[data-type="exempt"] .doc-col-rate { display: none; }

/* Подписи, зависящие от типа: колонка сумм и ссылка на исходный документ. */
.doc-label-reminder,
.doc-label-order { display: none; }
.doc-form[data-type="reminder"] .doc-label-default { display: none; }
.doc-form[data-type="reminder"] .doc-label-reminder { display: inline; }
.doc-form[data-type="order"] .doc-label-default { display: none; }
.doc-form[data-type="order"] .doc-label-order { display: inline; }

.doc-form-items { width: 100%; border-collapse: collapse; }
.doc-form-items th {
  text-align: left;
  font-size: .78rem;
  font-weight: 600;
  color: var(--fc-muted);
  padding: 0 .35rem .4rem;
  white-space: nowrap;
}
.doc-form-items td { padding: .2rem .35rem; vertical-align: top; }
.doc-form-items .doc-narrow { min-width: 5.5rem; }

/* «Забыть» — действие, а не переход, поэтому это кнопка. Выглядит ссылкой,
   потому что стоит внутри фразы и кнопкой там смотрелась бы тяжело. */
.doc-link-button {
  border: 0;
  padding: 0;
  background: none;
  color: var(--fc-accent);
  font: inherit;
  text-decoration: underline;
  cursor: pointer;
}
.doc-link-button:hover { color: var(--fc-accent-strong); }

.doc-actions { display: flex; flex-wrap: wrap; gap: .6rem; margin: 1rem 0 1.25rem; }
.doc-privacy { margin: 0; max-width: var(--fc-measure); }

.doc-errors,
.doc-warnings {
  border-radius: var(--fc-radius);
  padding: .85rem 1rem;
  margin: 1.25rem 0;
}
.doc-errors {
  border: 1px solid var(--fc-bad);
  background: var(--fc-bad-soft);
  color: var(--fc-ink);
}
.doc-warnings {
  border: 1px solid var(--fc-warn-line);
  background: var(--fc-warn-soft);
  color: var(--fc-ink);
}
.doc-errors ul,
.doc-warnings ul { padding-left: 1.1rem; }

/* Предпросмотр документа: серое «поле стола» вокруг листа, чтобы белая
   бумага читалась как бумага и в тёмной теме тоже. */
.doc-preview {
  padding: 1.25rem;
  margin: 0 0 1.75rem;
  background: var(--fc-surface-2);
  border-radius: var(--fc-radius);
  overflow-x: auto;
}

/* Печать страницы генератора: на бумагу идёт только документ. Форма,
   предупреждения и кнопки — это интерфейс, им на листе делать нечего. */
@media print {
  /* FAQ и источники отдельно не перечислены: они лежат внутри .content-body,
     который уже скрыт строкой выше. Раньше здесь стояли ещё .faq-block и
     .sources-block — таких классов на сайте нет, разметку им никто не
     выдаёт, и скрывали они пустоту. */
  .doc-form, .doc-actions, .doc-errors, .doc-warnings, .doc-privacy,
  .doc-preview + *, .lead-intro, .content-body { display: none !important; }
  .doc-preview { padding: 0; margin: 0; background: none; overflow: visible; }
}

/* Страница результатов */
.search-form-page {
  display: flex;
  gap: .5rem;
  margin: 1.25rem 0 1.75rem;
}
.search-form-page .form-control { max-width: 26rem; }
.search-count { margin-bottom: .75rem; }
.search-results { list-style: none; padding: 0; margin: 0 0 2rem; }
.search-results li {
  padding: .85rem 0;
  border-top: 1px solid var(--fc-line);
}
.search-results li:last-child { border-bottom: 1px solid var(--fc-line); }
.search-result-title { font-weight: 600; }
.search-result-text { margin: .25rem 0 0; max-width: var(--fc-measure); }
.search-empty { font-weight: 600; margin-bottom: .25rem; }

/* Иконки-стрелки из framework.css нарисованы в data-URI с фиксированным цветом:
   в тёмной теме «бургер» сливался бы с фоном. Переводим их на маску, чтобы
   цвет брался из currentColor. Стрелка select маской не заменяется — она фон
   у поля, — поэтому там нейтральный серый, читаемый на обеих темах. */
.navbar-toggler-icon,
.accordion-button::after {
  background-image: none;
  background-color: currentColor;
  -webkit-mask-repeat: no-repeat;
          mask-repeat: no-repeat;
  -webkit-mask-size: 100%;
          mask-size: 100%;
}
.navbar-toggler-icon {
  -webkit-mask-image: var(--icon-burger);
          mask-image: var(--icon-burger);
}
.accordion-button::after {
  -webkit-mask-image: var(--icon-chevron);
          mask-image: var(--icon-chevron);
}
.navbar-toggler { color: var(--fc-ink); }
.accordion-button::after { color: var(--fc-muted); }
.form-select {
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath fill='none' stroke='%237c8d99' stroke-width='2' stroke-linecap='round' d='M2 5l6 6 6-6'/%3E%3C/svg%3E");
}

/* --- Первый экран --------------------------------------------------------- */
.hero {
  position: relative;
  overflow: hidden;
  background:
    radial-gradient(60rem 22rem at 12% -20%, var(--fc-accent-soft), transparent 65%),
    linear-gradient(180deg, var(--fc-surface), var(--fc-bg));
  border-bottom: 1px solid var(--fc-line);
  padding: 3.5rem 0 3rem;
  margin-bottom: 2.5rem;
}
/* Тонкая сетка — фон получает фактуру, но не отвлекает от заголовка. */
.hero::before {
  content: "";
  position: absolute; inset: 0;
  background-image:
    linear-gradient(var(--fc-line) 1px, transparent 1px),
    linear-gradient(90deg, var(--fc-line) 1px, transparent 1px);
  background-size: 3rem 3rem;
  opacity: .35;
  -webkit-mask-image: radial-gradient(50rem 20rem at 70% 0%, #000, transparent 75%);
          mask-image: radial-gradient(50rem 20rem at 70% 0%, #000, transparent 75%);
  pointer-events: none;
}
.hero > .container { position: relative; }
.hero-title {
  font-size: clamp(2rem, 1.3rem + 2.6vw, 3.05rem);
  font-weight: 800;
  line-height: 1.1;
  letter-spacing: -.03em;
  margin: 0 0 .85rem;
  max-width: 20ch;
}
.hero-lead {
  color: var(--fc-muted);
  font-size: clamp(1.02rem, .97rem + .3vw, 1.2rem);
  max-width: 44rem;
  margin-bottom: 0;
}
.hero-stats {
  display: flex; flex-wrap: wrap; gap: .5rem .5rem;
  margin-top: 1.75rem;
}
.hero-stat {
  display: inline-flex; align-items: baseline; gap: .4rem;
  padding: .35rem .8rem;
  border: 1px solid var(--fc-line);
  border-radius: 2rem;
  background: var(--fc-card);
  font-size: .875rem;
  color: var(--fc-muted);
  box-shadow: var(--fc-shadow-1);
}
.hero-stat b { color: var(--fc-ink); font-variant-numeric: tabular-nums; }

/* --- Типографика контента ------------------------------------------------- */
h1 {
  font-size: clamp(1.7rem, 1.3rem + 1.6vw, 2.35rem);
  font-weight: 750;
  line-height: 1.18;
  letter-spacing: -.022em;
  margin: 0 0 .75rem;
  max-width: 24ch;
}
h2 {
  font-size: clamp(1.28rem, 1.18rem + .4vw, 1.5rem);
  font-weight: 700;
  letter-spacing: -.014em;
  line-height: 1.3;
  margin: 2.5rem 0 .85rem;
}
h3 { font-size: 1.1rem; font-weight: 650; margin: 1.75rem 0 .5rem; }

.lead-intro {
  color: var(--fc-ink-soft);
  font-size: 1.12rem;
  line-height: 1.6;
  max-width: var(--fc-measure);
  margin-bottom: 1.75rem;
}
.lead-intro p:last-child { margin-bottom: 0; }

/* --- Картинки статей ------------------------------------------------------ */

/*
 * Обложка и схемы. `aspect-ratio` от атрибутов width/height браузер выводит
 * сам, поэтому здесь только `height: auto` — без него заданная в разметке
 * высота стала бы жёсткой и картинка сплющилась бы на узком экране. Атрибуты
 * при этом обязаны остаться: они держат место до загрузки.
 */
.article-cover,
.content-figure {
  margin: 0 0 1.75rem;
}
.article-cover img,
.content-figure img {
  display: block;
  width: 100%;
  height: auto;
  border-radius: var(--fc-radius);
}
/*
 * Рамка нужна светлым схемам: у растра фон свой, и на светлой теме белое поле
 * картинки сливается с белым полем страницы. В тёмной теме та же рамка
 * отделяет светлую схему от тёмного фона — то есть работает в обе стороны.
 */
.content-figure img {
  border: 1px solid var(--fc-line);
  background: var(--fc-surface);
}
.article-cover img { border: 1px solid var(--fc-line); }

.content-figure figcaption {
  margin-top: .6rem;
  font-size: .9rem;
  color: var(--fc-muted);
  max-width: var(--fc-measure);
}

/* На печать схемы идут, обложка — нет: она оформительская, а бумага дорогая. */
@media print {
  .article-cover { display: none; }
  .content-figure img { border-color: #ccc; }
}

.content-section { margin-bottom: .5rem; }
.content-body p,
.content-body ul,
.content-body ol { max-width: var(--fc-measure); }
.content-body li { margin-bottom: .3rem; }
.content-body strong { font-weight: 650; }

/* Дата под заголовком статьи: в YMYL-тематике возраст текста — часть ответа. */
.article-meta {
  display: flex; flex-wrap: wrap; gap: .35rem .8rem;
  margin: -.25rem 0 1.5rem;
  padding-bottom: 1rem;
  border-bottom: 1px solid var(--fc-line);
}

/* --- Объясняющие схемы ----------------------------------------------------
   Разметка в inc/figures.php. Схема — это SVG в потоке текста, поэтому все
   цвета берутся отсюда: одна тема правится в одном месте, а не в четырнадцати
   картинках. Толщины линий заданы в единицах viewBox, то есть масштабируются
   вместе со схемой.                                                          */
.fig {
  margin: 0 0 2rem;
  padding: 1.25rem 1.35rem 1rem;
  border: 1px solid var(--fc-line);
  border-radius: var(--fc-radius-lg);
  background: var(--fc-surface);
  max-width: var(--fc-measure);
}
.fig svg { display: block; width: 100%; height: auto; overflow: visible; }
.fig figcaption {
  margin-top: 1rem;
  padding-top: .75rem;
  border-top: 1px solid var(--fc-line);
  font-size: .88rem;
  line-height: 1.5;
  color: var(--fc-muted);
}

.fig text {
  font-family: var(--fc-font);
  font-size: 13px;
  fill: var(--fc-muted);
}
.fig .t-strong    { fill: var(--fc-ink); font-weight: 600; }
.fig .t-head      { fill: var(--fc-muted); font-size: 12px; font-weight: 600;
                    letter-spacing: .03em; text-transform: uppercase; }
.fig .t-accent    { fill: var(--fc-accent); font-weight: 650; }
.fig .t-bad       { fill: var(--fc-bad); font-weight: 600; }
.fig .t-on-accent { fill: var(--fc-on-accent); font-weight: 650; }
.fig .num         { font-variant-numeric: tabular-nums; }

.fig .bar-accent      { fill: var(--fc-accent); }
.fig .bar-accent-soft { fill: color-mix(in srgb, var(--fc-accent) 45%, transparent); }
.fig .bar-warn        { fill: color-mix(in srgb, var(--fc-warn) 70%, var(--fc-surface)); }
.fig .bar-line        { fill: var(--fc-surface-2); stroke: var(--fc-line-strong); }
.fig .bar-line-2      { fill: color-mix(in srgb, var(--fc-line-strong) 35%, var(--fc-surface)); }
.fig .bar-track       { fill: var(--fc-surface-2); }

.fig .ln-axis, .fig .ln-thin, .fig .ln-brace, .fig .ln-arrow, .fig .ln-none {
  fill: none; stroke: var(--fc-line-strong); stroke-width: 1.5;
}
.fig .ln-arrow  { stroke-linecap: round; stroke-linejoin: round; }
.fig .ln-none   { stroke-width: 2; stroke-linecap: round; }
.fig .ln-brace  { stroke: var(--fc-line-strong); }
.fig .ln-brace-accent { fill: none; stroke: var(--fc-accent); stroke-width: 1.5; }
.fig .ln-thin-dash { fill: none; stroke: var(--fc-line-strong); stroke-width: 1.5; stroke-dasharray: 5 4; }
.fig .ln-thin-dash-accent { fill: none; stroke: var(--fc-accent); stroke-width: 1.5; stroke-dasharray: 5 4; }
.fig .ln-cost    { fill: none; stroke: var(--fc-muted); stroke-width: 2.5; }
.fig .ln-revenue { fill: none; stroke: var(--fc-accent); stroke-width: 2.5; }
.fig .ln-stock   { fill: none; stroke: var(--fc-accent); stroke-width: 2.5;
                   stroke-linejoin: round; stroke-linecap: round; }
.fig .ln-box     { fill: none; stroke: var(--fc-line-strong); stroke-width: 1.5; }

.fig .dot-accent { fill: var(--fc-accent); }
.fig .dot-warn   { fill: color-mix(in srgb, var(--fc-warn) 80%, var(--fc-surface)); }
.fig .dot-muted  { fill: var(--fc-line-strong); }
.fig .band-safety { fill: color-mix(in srgb, var(--fc-warn) 22%, transparent); }
.fig .box-face   { fill: var(--fc-surface-2); stroke: var(--fc-line-strong); stroke-width: 1.5; }
.fig .pallet     { fill: none; stroke: var(--fc-line-strong); stroke-width: 1.5; }
.fig .carton     { fill: var(--fc-surface-2); stroke: var(--fc-line-strong); stroke-width: 1.2; }
.fig .carton-accent { fill: color-mix(in srgb, var(--fc-accent) 22%, transparent);
                      stroke: var(--fc-accent); stroke-width: 1.2; }

/* На узком экране подписи внутри схемы становятся нечитаемо мелкими, если
   тянуть их вместе с viewBox. Поднимаем кегль, а схему даём прокрутить. */
@media (max-width: 575px) {
  .fig { padding: 1rem .9rem .85rem; overflow-x: auto; }
  .fig svg { min-width: 460px; }
}

/* --- Хлебные крошки ------------------------------------------------------- */
.breadcrumb {
  font-size: .85rem;
  color: var(--fc-muted);
  padding: 1rem 0 .5rem;
}
/* Цели нажатия. WCAG 2.5.8 просит 24×24 CSS-пикселя; строчные ссылки внутри
   предложения из требования исключены, а вот отдельно стоящие — крошки,
   списки в подвале и источники — нет: там это просто мелкие промахи пальцем. */
.breadcrumb-item a,
.sources li a,
footer .list-unstyled a {
  display: inline-block;
  padding-block: .28rem;
}
.breadcrumb-item a { color: var(--fc-muted); text-decoration: none; }
.breadcrumb-item a:hover { color: var(--fc-accent); text-decoration: underline; }

/* --- Карточки инструментов ------------------------------------------------ */
.tool-card {
  position: relative;
  border-color: var(--fc-line);
  background: var(--fc-card);
  color: var(--fc-ink);
  border-radius: var(--fc-radius-lg);
  transition: border-color .14s ease, transform .14s ease, box-shadow .14s ease;
}
.tool-card:hover {
  border-color: color-mix(in srgb, var(--fc-accent) 45%, var(--fc-line));
  transform: translateY(-2px);
  box-shadow: var(--fc-shadow-2);
}
.tool-card:hover .card-title { color: var(--fc-accent); }
.tool-card .card-body { display: flex; gap: .85rem; align-items: flex-start; }
.tool-card .card-title { margin-bottom: .2rem; line-height: 1.35; }
.tool-card .card-text { color: var(--fc-muted); }

/* Иконка категории. Пиктограмма помогает глазу сортировать сетку из
   двенадцати карточек быстрее, чем это делает заголовок. */
.card-icon {
  flex: 0 0 auto;
  width: 2.4rem; height: 2.4rem;
  display: grid; place-items: center;
  border-radius: .65rem;
  background: var(--fc-accent-soft);
  color: var(--fc-accent);
}
.card-icon svg { width: 1.25rem; height: 1.25rem; display: block; }

/* --- Калькулятор ---------------------------------------------------------- */
.calc-card {
  border-color: var(--fc-line);
  border-radius: var(--fc-radius-lg);
  background: var(--fc-card);
  box-shadow: var(--fc-shadow-2);
  margin-bottom: 1.25rem;
}
.calc-card .card-body { padding: 1.4rem; }
@media (min-width: 576px) { .calc-card .card-body { padding: 1.65rem; } }

.calc-result {
  background:
    linear-gradient(180deg, var(--fc-accent-soft), color-mix(in srgb, var(--fc-accent-soft) 40%, var(--fc-card)));
  border: 1px solid color-mix(in srgb, var(--fc-accent) 22%, var(--fc-line));
  border-radius: var(--fc-radius);
  padding: 1.15rem .65rem;
}
.result-label {
  display: block;
  font-size: .74rem;
  font-weight: 600;
  text-transform: uppercase;
  letter-spacing: .06em;
  color: var(--fc-muted);
  margin-bottom: .25rem;
}
.result-label em { font-style: normal; }
.result-value {
  display: block;
  font-family: var(--fc-font-num);
  font-size: clamp(1.15rem, .95rem + 1.1vw, 1.7rem);
  font-weight: 750;
  font-variant-numeric: tabular-nums;
  letter-spacing: -.025em;
  line-height: 1.2;
}
.result-value.accent { color: var(--fc-accent); }

.billed-note {
  font-size: .95rem;
  color: var(--fc-muted);
  text-align: center;
  min-height: 1.5rem;
}
.billed-note.is-volumetric,
.billed-note.is-warn   { color: var(--fc-warn); font-weight: 600; }
.billed-note.is-actual { color: var(--fc-good); font-weight: 600; }
.billed-note.is-bad    { color: var(--fc-bad);  font-weight: 600; }

.calc-breakdown { border-top: 1px solid var(--fc-line); padding-top: .85rem; }
.calc-breakdown > div {
  display: flex;
  justify-content: space-between;
  gap: 1rem;
  padding: .28rem 0;
}
.calc-breakdown > div + div { border-top: 1px dashed var(--fc-line); }
.calc-breakdown dt { font-weight: 400; color: var(--fc-muted); font-size: .95rem; }
.calc-breakdown dd {
  margin: 0;
  font-weight: 650;
  font-variant-numeric: tabular-nums;
  white-space: nowrap;
}

/* --- Полоса заполнения порога --------------------------------------------- */
/* Полоска порога — <progress>, а не div со ширинои из скрипта.

   Причина техническая и важная: CSP без 'unsafe-inline' запрещает не только
   атрибут style в разметке, но и запись стилей из JS. Полоска, которой скрипт
   ставил width, молча оставалась нулевой — атрибут проставлялся, стиль не
   применялся. У <progress> значение это свойство элемента, а не стиль.

   Псевдоэлементы двух движков нельзя перечислить через запятую: браузер,
   который не знает один из селекторов, выбрасывает всё правило целиком.
   Поэтому одинаковые блоки продублированы — это не копипаста по недосмотру. */
.threshold-bar {
  display: block;
  width: 100%;
  height: .55rem;
  appearance: none;
  -webkit-appearance: none;
  border: 0;
  border-radius: 1rem;
  overflow: hidden;
  background: var(--fc-surface-2);
  color: var(--fc-accent);          /* запасной цвет для старых движков */
}
.threshold-bar::-webkit-progress-bar { background: var(--fc-surface-2); }
.threshold-bar::-webkit-progress-value {
  background: linear-gradient(90deg, var(--fc-accent), color-mix(in srgb, var(--fc-accent) 60%, #35c2a8));
  border-radius: 1rem;
  transition: width .25s ease;
}
.threshold-bar::-moz-progress-bar {
  background: linear-gradient(90deg, var(--fc-accent), color-mix(in srgb, var(--fc-accent) 60%, #35c2a8));
  border-radius: 1rem;
}
.threshold-bar.is-near::-webkit-progress-value { background: var(--fc-warn); }
.threshold-bar.is-near::-moz-progress-bar      { background: var(--fc-warn); }
.threshold-bar.is-over::-webkit-progress-value { background: var(--fc-bad); }
.threshold-bar.is-over::-moz-progress-bar      { background: var(--fc-bad); }

/* Поле-помощник для копирования в браузерах без Clipboard API. Класс, а не
   инлайновые стили: их запрещает та же CSP. */
.copy-helper {
  position: fixed;
  top: 0;
  left: -9999px;
  opacity: 0;
}

/* --- Правая колонка ------------------------------------------------------- */
@media (min-width: 992px) {
  .sidebar-sticky { position: sticky; top: 5.25rem; }
}
.side-card {
  border: 1px solid var(--fc-line);
  border-radius: var(--fc-radius-lg);
  background: var(--fc-card);
  padding: 1.1rem 1.2rem;
  margin-bottom: 1rem;
}
.side-card-title {
  font-size: .74rem;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: .07em;
  color: var(--fc-muted);
  margin: 0 0 .6rem;
}
.side-links { list-style: none; margin: 0; padding: 0; }
.side-links li + li { border-top: 1px solid var(--fc-line); }
.side-links a {
  display: block;
  padding: .5rem 0;
  font-size: .95rem;
  line-height: 1.4;
  color: var(--fc-ink-soft);
  text-decoration: none;
}
/* Правила `a.is-current` здесь нет намеренно: сайдбар по устройству никогда
   не показывает текущую страницу — оглавление ведёт по якорям, статьи
   выводятся только на инструментах, чужие разделы исключают $PAGE_ID.
   Подсвечивать в нём нечего, и класс никто не выставлял. */
.side-links a:hover { color: var(--fc-accent); }

/* Ссылки на чужие разделы идут с пиктограммой: без неё список из пяти
   названий читается как продолжение соседнего блока, а это другой уровень. */
.side-links a:has(.side-icon) { display: flex; align-items: center; gap: .5rem; }
.side-icon {
  flex: 0 0 auto;
  width: 1.45rem; height: 1.45rem;
  display: grid; place-items: center;
  border-radius: .4rem;
  background: var(--fc-accent-soft);
  color: var(--fc-accent);
}
.side-icon svg { width: .9rem; height: .9rem; display: block; }

/* Якорь оглавления не должен уводить заголовок под липкую шапку. */
.content-section[id] { scroll-margin-top: 5rem; }

/* --- Таблицы -------------------------------------------------------------- */
.table thead th {
  background: var(--fc-surface);
  color: var(--fc-muted);
  font-size: .78rem;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: .05em;
}
/* Прилипает только внутри собственного скролл-контейнера. Без этой оговорки
   шапка таблицы липнет к окну и уезжает поверх соседнего текста. */
.table-responsive > .table thead th { position: sticky; top: 0; z-index: 1; }
.table td { font-size: .97rem; }
#rate-table td, #rate-table th { font-variant-numeric: tabular-nums; }
.table-responsive {
  border: 1px solid var(--fc-line);
  border-radius: var(--fc-radius);
  overflow: auto;
  max-height: 34rem;
}
.table-responsive > .table { margin-bottom: 0; }
.table-responsive > .table tr:last-child td { border-bottom: 0; }

/* --- Формулы -------------------------------------------------------------- */
pre.formula {
  background: var(--fc-surface);
  border: 1px solid var(--fc-line);
  border-left: 3px solid var(--fc-accent);
  border-radius: var(--fc-radius-sm);
  padding: .9rem 1.05rem;
  font-size: .94rem;
  line-height: 1.55;
  margin-bottom: 1.25rem;
  overflow-x: auto;
  color: var(--fc-ink-soft);
}

/* --- Плашка актуальности данных ------------------------------------------- */
.data-freshness {
  display: flex;
  gap: .55rem;
  align-items: flex-start;
  color: var(--fc-muted);
  background: var(--fc-surface);
  border: 1px solid var(--fc-line);
  border-radius: var(--fc-radius-sm);
  padding: .6rem .8rem;
  margin-bottom: 1.5rem;
}
.data-freshness::before {
  content: "";
  flex: 0 0 auto;
  width: 1.05rem; height: 1.05rem;
  margin-top: .12rem;
  background: currentColor;
  -webkit-mask: var(--icon-clock) center / contain no-repeat;
          mask: var(--icon-clock) center / contain no-repeat;
}
.data-freshness strong { color: var(--fc-ink-soft); }

/* Несверенные данные. Заметнее обычной плашки, но не «ошибка»: цифры
   пригодны для прикидки, просто за них ещё никто не поручился. */
.data-freshness-unverified {
  border-left: 3px solid var(--fc-warn, #b8860b);
  padding-left: .75rem;
}


/* --- Глоссарий ------------------------------------------------------------ */
.glossary-list { margin: 1.5rem 0 0; }
.glossary-list > div {
  padding: .9rem 0;
  border-bottom: 1px solid var(--fc-line);
}
.glossary-list dt { font-weight: 650; margin-bottom: .15rem; }
.glossary-list dt a { text-decoration: none; }
.glossary-list dt a:hover { text-decoration: underline; }
.glossary-list dd { margin: 0; color: var(--fc-muted); font-size: .95rem; }

.term-definition {
  font-size: 1.15rem;
  line-height: 1.6;
  color: var(--fc-ink-soft);
  background: var(--fc-surface);
  border-left: 3px solid var(--fc-accent);
  border-radius: 0 var(--fc-radius-sm) var(--fc-radius-sm) 0;
  padding: .85rem 1.1rem;
  margin-bottom: 1.75rem;
}

/* Карточки разделов на странице глоссария */
.glossary-group-card {
  height: 100%;
  padding: 1rem 1.1rem;
  border: 1px solid var(--fc-line);
  border-radius: var(--fc-radius-sm);
  background: var(--fc-surface);
}
.glossary-group-title { margin: 0 0 .35rem; font-weight: 650; }
.glossary-group-title a { text-decoration: none; }
.glossary-group-title a:hover { text-decoration: underline; }
.glossary-group-terms { margin: 0; line-height: 1.5; }

/* Оглавление свода: на странице из девяти терминов без него не найти нужный */
.term-index {
  margin: 1.5rem 0 2rem;
  padding: .9rem 1.1rem;
  border: 1px solid var(--fc-line);
  border-radius: var(--fc-radius-sm);
  background: var(--fc-surface);
}
.term-index-label {
  margin: 0 0 .5rem;
  font-size: .8rem;
  font-weight: 650;
  text-transform: uppercase;
  letter-spacing: .04em;
  color: var(--fc-muted);
}
.term-index ul {
  margin: 0;
  padding: 0;
  list-style: none;
  display: flex;
  flex-wrap: wrap;
  gap: .35rem .9rem;
}
.term-index li { font-size: .95rem; }

/* Термин внутри свода. Разделитель нужен: без него девять определений
   подряд читаются как одна сплошная стена. */
.term-entry { padding-top: 1.75rem; }
.term-entry + .term-entry { border-top: 1px solid var(--fc-line); }
.term-entry .term-definition { font-size: 1.05rem; margin-bottom: 1.25rem; }
.term-tool { margin: 1.1rem 0 0; font-size: .95rem; }

/* --- Страна за страной на странице ставок ---------------------------------
   Двадцать семь одинаковых блоков подряд — это список, а не текст, и читать
   его будут глазами по диагонали. Поэтому две колонки на широком экране и
   тонкая рамка вместо отступов: так видно, где кончается одна страна.        */
.country-list { margin-top: 2.5rem; }

.country-jump {
  display: flex;
  flex-wrap: wrap;
  gap: .3rem .8rem;
  padding: .9rem 1.1rem;
  border: 1px solid var(--fc-line);
  border-radius: var(--fc-radius-sm);
  background: var(--fc-surface);
}

.country-cards {
  display: grid;
  grid-template-columns: 1fr;
  gap: .75rem;
}
@media (min-width: 576px) {
  .country-cards { grid-template-columns: 1fr 1fr; }
}

.country-card {
  padding: .8rem 1rem;
  border: 1px solid var(--fc-line);
  border-radius: var(--fc-radius-sm);
  background: var(--fc-surface);
  /* Якорь под липкой шапкой: без отступа переход по #vat-de ставит заголовок
     страны ровно под неё, и попавший по ссылке видит соседнюю страну. */
  scroll-margin-top: 5rem;
}
.country-card h3 {
  margin: 0 0 .3rem;
  font-size: 1.02rem;
  font-weight: 650;
  font-variant-numeric: tabular-nums;
}
.country-card p { margin: 0; font-size: .93rem; color: var(--fc-muted); }

/* --- Юридические страницы ------------------------------------------------- */
/* Здесь был класс `.legal-draft` под предупреждение «тексты — заготовки».
   Такой разметки на сайте нет: предупреждение выводится обычным
   `p.small.text-muted`, а незаполненные реквизиты закрывают страницу через
   noindex, а не через плашку. Правило красило то, чего не существует. */
.company-details { margin: 0; }
.company-details > div {
  display: flex;
  gap: 1rem;
  padding: .45rem 0;
  border-bottom: 1px solid var(--fc-line);
}
.company-details dt { flex: 0 0 11rem; color: var(--fc-muted); font-weight: 400; }
.company-details dd { margin: 0; font-weight: 600; }
@media (max-width: 575px) {
  .company-details > div { flex-direction: column; gap: .1rem; }
  .company-details dt { flex: none; font-size: .85rem; }
}

/* --- Источники ------------------------------------------------------------ */
.sources ul { padding-left: 1.15rem; }
.sources li { margin-bottom: .4rem; }
.sources a { color: var(--fc-ink-soft); }
.sources a:hover { color: var(--fc-accent); }

/* --- Аккордеон FAQ -------------------------------------------------------- */
.accordion { border-radius: var(--fc-radius-lg); background: var(--fc-card); }
.accordion-button { font-weight: 650; color: var(--fc-ink); }
.accordion-button:hover { background: var(--fc-surface); }
.accordion-button:not(.collapsed) { color: var(--fc-accent); background: var(--fc-accent-soft); }
.accordion-button:focus { box-shadow: none; }
.accordion-body { color: var(--fc-ink-soft); }
.accordion-body p:last-child { margin-bottom: 0; }

/* --- Реклама -------------------------------------------------------------- */
.ad-slot { min-height: 1px; }
.ad-slot:not(:empty) { min-height: 280px; }
.ad-sidebar:not(:empty) { min-height: 600px; }

/* --- Главная: быстрые кнопки и направления --------------------------------
   Быстрые кнопки стоят в первом экране под заголовком — это ответ на «что
   здесь для меня» до всякой прокрутки. Направления ниже — те же инструменты,
   но сгруппированные по тому, кто пришёл, а не по теме раздела. */
.quick-tools {
  display: flex; flex-wrap: wrap; gap: .5rem;
  margin-top: 1.5rem;
}
.quick-tool {
  display: inline-flex; align-items: center; gap: .55rem;
  padding: .55rem .95rem .55rem .6rem;
  border: 1px solid var(--fc-line);
  border-radius: 2rem;
  background: var(--fc-card);
  color: var(--fc-ink);
  font-weight: 600; font-size: .92rem;
  text-decoration: none;
  box-shadow: var(--fc-shadow-1);
  transition: transform .15s, box-shadow .15s, border-color .15s;
}
.quick-tool:hover, .quick-tool:focus-visible {
  color: var(--fc-accent);
  border-color: var(--fc-accent);
  transform: translateY(-1px);
  box-shadow: var(--fc-shadow-2);
}
.quick-tool-icon {
  display: inline-grid; place-items: center;
  width: 1.75rem; height: 1.75rem;
  border-radius: 50%;
  background: var(--fc-accent-soft);
  color: var(--fc-accent);
}
.quick-tool-icon svg { width: 1rem; height: 1rem; }
@media (max-width: 575px) {
  .quick-tools { gap: .4rem; }
  .quick-tool { font-size: .85rem; padding: .5rem .8rem .5rem .5rem; }
}

/* Колонка — флекс, иначе height:100% у карточки не от чего считать и четыре
   карточки получаются разной высоты. */
.directions [class*="col-"] { display: flex; }
.direction-card {
  flex: 1 1 auto;
  padding: 1.35rem 1.4rem 1.25rem;
  border: 1px solid var(--fc-line);
  border-radius: var(--fc-radius-lg);
  background: var(--fc-card);
  box-shadow: var(--fc-shadow-1);
  display: flex; flex-direction: column;
}
.direction-head { display: flex; align-items: center; gap: .85rem; margin-bottom: .6rem; }
.direction-icon {
  display: inline-grid; place-items: center;
  width: 2.6rem; height: 2.6rem; flex: 0 0 auto;
  border-radius: .75rem;
  background: linear-gradient(140deg, var(--fc-accent), color-mix(in srgb, var(--fc-accent) 55%, #1aa38c));
  color: var(--fc-on-accent);
  box-shadow: var(--fc-shadow-1);
}
.direction-icon svg { width: 1.35rem; height: 1.35rem; }
.direction-title { margin: 0; font-size: 1.15rem; font-weight: 700; letter-spacing: -.01em; }
.direction-text { color: var(--fc-muted); margin-bottom: .9rem; max-width: none; }
.direction-links { list-style: none; margin: auto 0 0; padding: 0; display: flex; flex-wrap: wrap; gap: .45rem; }
.direction-links a {
  display: inline-block;
  padding: .4rem .8rem;
  border: 1px solid var(--fc-line);
  border-radius: var(--fc-radius-sm);
  background: var(--fc-surface);
  color: var(--fc-ink);
  font-size: .9rem; font-weight: 500;
  text-decoration: none;
}
.direction-links a:hover { border-color: var(--fc-accent); color: var(--fc-accent); background: var(--fc-accent-soft); }

/* --- Бытовые инструменты --------------------------------------------------- */
/* Поле со знаком процента в одной рамке: framework.css группы полей не даёт. */
.input-group { display: flex; align-items: stretch; }
.input-group .form-control { flex: 1 1 auto; min-width: 0; border-top-right-radius: 0; border-bottom-right-radius: 0; }
.input-group-text {
  display: flex; align-items: center;
  padding: .45rem .75rem;
  border: 1px solid var(--fc-line-strong); border-left: 0;
  border-radius: 0 var(--fc-radius-sm) var(--fc-radius-sm) 0;
  background: var(--fc-surface);
  color: var(--fc-muted);
  font-weight: 600;
}
.result-value-xl { font-size: 2.1rem; }

/* Сравнение цены за единицу: три строки товар × цена × количество × единица. */
.unit-rows { display: grid; gap: .6rem; }
.unit-head, .unit-row {
  display: grid;
  grid-template-columns: 5.5rem 1fr 1fr 6rem minmax(7rem, auto);
  gap: .5rem; align-items: center;
}
.unit-head { display: none; font-size: .78rem; color: var(--fc-muted); font-weight: 600; padding: 0 .25rem; }
.unit-row {
  padding: .6rem .5rem;
  border: 1px solid var(--fc-line);
  border-radius: var(--fc-radius);
  background: var(--fc-bg);
  transition: border-color .15s, background .15s;
}
.unit-row.is-best { border-color: var(--fc-accent); background: var(--fc-accent-soft); }
.unit-row.is-worse { opacity: .92; }
.unit-name { font-weight: 600; font-size: .92rem; }
.unit-out { display: flex; flex-direction: column; align-items: flex-end; gap: .1rem; }
.unit-out .result-value { font-size: 1.05rem; margin: 0; }
.unit-out-badge { font-size: .74rem; font-weight: 700; color: var(--fc-muted); min-height: 1em; }
.is-best .unit-out-badge { color: var(--fc-accent); }
.is-worse .unit-out-badge { color: var(--fc-bad); }
@media (min-width: 768px) {
  .unit-head { display: grid; }
}
@media (max-width: 767.98px) {
  .unit-row { grid-template-columns: 1fr 1fr; }
  .unit-name { grid-column: 1 / -1; }
  .unit-out { grid-column: 1 / -1; flex-direction: row; justify-content: space-between; align-items: baseline; }
}

/* --- Подвал --------------------------------------------------------------- */
footer { background: var(--fc-surface); border-top: 1px solid var(--fc-line); }
footer a { text-decoration: none; }
footer a:hover { text-decoration: underline; color: var(--fc-accent); }

/* --- Печать --------------------------------------------------------------- */
@media print {
  .site-header, footer, .ad-slot, .sidebar-sticky, .breadcrumb { display: none !important; }
  .hero { background: none; border: 0; padding: 0; }
  body { font-size: 11pt; }
  .accordion-collapse { display: block !important; }
}

@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after {
    animation-duration: .01ms !important;
    transition-duration: .01ms !important;
    scroll-behavior: auto !important;
  }
}
