/* Шрифты лежат у нас, а не подгружаются со сторонних серверов.
   Причина не только в скорости: обращение браузера к чужому серверу передаёт
   IP-адрес пользователя за границу, и это трактуется как трансграничная передача
   персональных данных. Файлы под лицензией SIL OFL 1.1 — размещать у себя разрешено.
   Как получить файлы: см. assets/fonts/README.md */
/* Два файла на начертание: кириллица и латиница, каждый со своим
   unicode-range. Раньше файл был один, и в нём лежал набор
   cyrillic-ext — Ѣ, Ѡ, Ѹ — без единой буквы А–я: скрипт скачивания
   брал первый блок из ответа Google, а первым идёт именно ext.
   Полгода сайт рисовался подстановочным шрифтом. Сторож —
   tools/proverka_shriftov.py. */
@font-face{font-family:'PT Sans';src:url('/assets/fonts/pt-sans-400.woff2') format('woff2');
  font-weight:400;font-style:normal;font-display:swap;unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}
@font-face{font-family:'PT Sans';src:url('/assets/fonts/pt-sans-400-latin.woff2') format('woff2');
  font-weight:400;font-style:normal;font-display:swap;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:'PT Sans';src:url('/assets/fonts/pt-sans-700.woff2') format('woff2');
  font-weight:700;font-style:normal;font-display:swap;unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}
@font-face{font-family:'PT Sans';src:url('/assets/fonts/pt-sans-700-latin.woff2') format('woff2');
  font-weight:700;font-style:normal;font-display:swap;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:'PT Mono';src:url('/assets/fonts/pt-mono-400.woff2') format('woff2');
  font-weight:400;font-style:normal;font-display:swap;unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}
@font-face{font-family:'PT Mono';src:url('/assets/fonts/pt-mono-400-latin.woff2') format('woff2');
  font-weight:400;font-style:normal;font-display:swap;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:'Geologica';src:url('/assets/fonts/geologica-700.woff2') format('woff2');
  font-weight:600 800;font-style:normal;font-display:swap;unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}
@font-face{font-family:'Geologica';src:url('/assets/fonts/geologica-700-latin.woff2') format('woff2');
  font-weight:600 800;font-style:normal;font-display:swap;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}

/* ТАБЛА — дизайн-система. Плотная типографика, зелёный акцент, без скруглений. */
:root{
  --ink:#161A17; --i2:#41493F; --i3:#7A8079;
  --ln:#E0E2DC; --l2:#EFF1EC;
  --bg:#FFFEFC; --b2:#F2F0EC;
  --ac:#0E5A3C; --ad:#0A4530; --al:#E6F0EA;
  --wn:#8A6510; --wl:#FDF6E3; --er:#9C3226; --el:#FBEDEA;
  --tg:#2C7BB6; --mx:#4B5FC4; --r:3px;
  --w:1120px;
}
*{box-sizing:border-box;margin:0;padding:0}
html{-webkit-text-size-adjust:100%}
body{font-family:'PT Sans','Segoe UI',system-ui,-apple-system,sans-serif;background:var(--b2);
  color:var(--ink);font-size:16px;line-height:1.6}
h1,h2,h3,th,.btn,.nav a,.badge{font-family:Geologica,'PT Sans',sans-serif;letter-spacing:-.015em}
a{color:var(--ac)}
.wrap{max-width:var(--w);margin:0 auto;padding:0 20px}

/* шапка */
.top{background:var(--bg);border-bottom:1px solid var(--ln);position:sticky;top:0;z-index:10}
.top .wrap{display:flex;align-items:center;gap:26px;height:58px}
.logo{display:flex;align-items:center;gap:9px;text-decoration:none;color:var(--ink)}
.logo b{font-family:Geologica,sans-serif;font-weight:800;font-size:19px;color:var(--ac);
  letter-spacing:.02em}
.logo svg{display:block}
.nav{display:flex;gap:20px;margin-left:auto;min-width:0}
.logo{flex:none}
.nav a{font-size:14.5px;text-decoration:none;color:var(--i2);font-weight:500}
.nav a:hover,.nav a.on{color:var(--ac)}

/* хлебные крошки и заголовок */
.bc{font-size:13px;color:var(--i3);padding:16px 0 0}
.bc a{color:var(--i3);text-decoration:none}
.bc a:hover{color:var(--ac)}
h1{font-size:30px;font-weight:800;margin:10px 0 6px;line-height:1.2}
.dek{font-size:17px;color:var(--i2);margin-bottom:22px;max-width:70ch}
h2{font-size:21px;font-weight:700;margin:34px 0 10px}
h3{font-size:17px;font-weight:700;margin:20px 0 6px}
p{margin-bottom:12px;max-width:74ch}
main{padding-bottom:60px}

/* калькулятор */
.calc{background:var(--bg);border:1px solid var(--ln);margin-bottom:22px}
.calc .in{padding:20px 22px;display:grid;grid-template-columns:1fr 1fr;gap:16px 22px}
.calc .fld{display:flex;flex-direction:column;gap:5px}
.calc label{font-size:13px;color:var(--i2);font-weight:700}
.calc input,.calc select{font-family:inherit;font-size:17px;padding:9px 11px;
  border:1px solid var(--ln);border-radius:var(--r);background:#fff;color:var(--ink);width:100%}
.calc input:focus,.calc select:focus{outline:2px solid var(--ac);outline-offset:-1px;border-color:var(--ac)}
.calc .hint{font-size:12.5px;color:var(--i3)}
.calc-note{padding:12px 22px;background:var(--bg);border-top:1px solid var(--ln);
  font-size:12.5px;color:var(--i2);line-height:1.5}

/* «Разбор на ваших числах»: подстановка введённых значений в формулу.
   Своя разметка, не .fx — иначе кнопка копирования формул зацепит разбор. */
.razbor{background:var(--bg);border:1px solid var(--ln);border-left:3px solid var(--ac);
  padding:14px 18px;margin:18px 0;overflow-x:auto}
.razbor .rzt{font-family:Geologica,sans-serif;font-weight:700;font-size:14px;
  margin-bottom:8px;color:var(--ink)}
.razbor .rln{font-family:'PT Mono',monospace;font-size:12.5px;line-height:1.9;
  white-space:nowrap;color:var(--i2)}
.razbor .rln b{color:var(--ink)}
.polya{font-size:14.5px;line-height:1.65;color:var(--i2);padding-left:22px}
.polya li{margin-bottom:8px}
.polya b{color:var(--ink)}
.calc .out{background:var(--al);border-top:1px solid var(--ln);padding:18px 22px}
.calc .out .row{display:flex;justify-content:space-between;align-items:baseline;
  padding:7px 0;border-bottom:1px solid rgba(14,90,60,.12);gap:16px}
.calc .out .row:last-of-type{border-bottom:0}
.calc .out .row span{font-size:14.5px;color:var(--i2)}
.calc .out .row b{font-family:'PT Mono',monospace;font-size:17px;color:var(--ac);
  font-variant-numeric:tabular-nums;white-space:nowrap}
.calc .out .row.big b{font-size:23px;font-weight:700}
.calc .act{display:flex;gap:10px;padding:0 22px 18px;flex-wrap:wrap}
.calc .err{background:var(--el);color:var(--er);padding:10px 22px;font-size:14px;display:none}
.calc .err.on{display:block}

.btn{display:inline-block;padding:10px 18px;font-size:14.5px;font-weight:600;
  border:1px solid var(--ac);background:var(--ac);color:#fff;cursor:pointer;
  border-radius:var(--r);text-decoration:none;font-family:Geologica,sans-serif}
.btn:hover{background:var(--ad);border-color:var(--ad)}
.btn.gh{background:transparent;color:var(--ac)}
.btn.gh:hover{background:var(--al)}

/* оффер на файл */
.offer{background:var(--bg);border:1px solid var(--ln);border-left:3px solid var(--ac);
  padding:18px 22px;margin:24px 0}
.offer h2{margin:0 0 6px}
.offer p{font-size:14.5px;color:var(--i2);margin-bottom:12px}
.offer .row{display:flex;gap:10px;flex-wrap:wrap;align-items:center}
.offer input[type=email]{font-family:inherit;font-size:15px;padding:9px 11px;
  border:1px solid var(--ln);border-radius:var(--r);min-width:240px}
.chan{display:inline-flex;align-items:center;gap:6px;font-size:13.5px;text-decoration:none;
  padding:8px 12px;border:1px solid var(--ln);border-radius:var(--r);color:var(--i2)}
.chan.tg{border-color:var(--tg);color:var(--tg)}
.chan.mx{border-color:var(--mx);color:var(--mx)}

/* блоки */
.src{background:var(--bg);border:1px solid var(--ln);padding:14px 18px;margin:20px 0;
  font-size:13.5px;color:var(--i2)}
.src b{color:var(--ink)}
.note{background:var(--wl);border-left:3px solid var(--wn);padding:14px 18px;margin:18px 0;
  font-size:14.5px}
/* Превью файла: картинка собрана из самого .xlsx при сборке. */
.prevyu{margin:16px 0 22px;padding:0}
.prevyu img{display:block;width:100%;max-width:100%;height:auto;
  border:1px solid var(--ln);border-radius:3px;background:var(--bg)}
.prevyu figcaption{margin:8px 2px 0;font-size:12.5px;color:var(--i3)}
@media(max-width:640px){
  /* На узком экране лист не сжимаем до нечитаемого — даём прокрутку вбок */
  .prevyu{overflow-x:auto}
  .prevyu img{width:auto;max-width:none;height:200px}
}

.fx{background:var(--ink);color:#D6DED8;margin:16px 0;
  font-family:'PT Mono',monospace;font-size:13.5px;line-height:1.7}
.fx b{color:#7ED4A6;font-weight:400}
/* Строка блока формул — отдельная копируемая единица. Чередующийся фон:
   строки длинные и переносятся, без него соседние формулы сливаются. */
.fxr{display:flex;align-items:flex-start;gap:10px;padding:9px 18px;cursor:pointer;
  position:relative}
.fxr:nth-child(even){background:rgba(255,255,255,.045)}
.fxr:hover{background:rgba(126,212,166,.10)}
.fxf{flex:1 1 auto;min-width:0;overflow-x:auto;white-space:pre-wrap;
  word-break:break-word;font:inherit}
.fxc{flex:0 1 auto;color:#8A9490}
.fxb{flex:none;align-self:center;background:none;border:1px solid #41493F;color:#8A9490;
  border-radius:3px;font:inherit;font-size:11.5px;padding:2px 7px;cursor:pointer;
  white-space:nowrap}
.fxr:hover .fxb{border-color:#7ED4A6;color:#7ED4A6}
.fxr.ok .fxb{border-color:#7ED4A6;color:#7ED4A6}
.fxr.ok .fxb span{display:none}
.fxr.ok .fxb::after{content:'скопировано'}

table{width:100%;border-collapse:collapse;background:var(--bg);border:1px solid var(--ln);
  margin:14px 0}
th{background:var(--l2);text-align:left;font-size:11px;text-transform:uppercase;
  letter-spacing:.06em;color:var(--i3);padding:9px 12px;border-bottom:1px solid var(--ln)}
td{border-bottom:1px solid var(--l2);padding:9px 12px;font-size:14px;vertical-align:top}
tr:last-child td{border-bottom:0}

.faq details{background:var(--bg);border:1px solid var(--ln);margin-bottom:8px}
.faq summary{padding:13px 18px;cursor:pointer;font-weight:700;font-size:15px;list-style:none}
.faq summary::-webkit-details-marker{display:none}
.faq summary::before{content:"+";color:var(--ac);font-weight:800;margin-right:9px}
.faq details[open] summary::before{content:"−"}
.faq .a{padding:0 18px 15px;font-size:14.5px;color:var(--i2)}

.rel{display:grid;grid-template-columns:repeat(auto-fill,minmax(240px,1fr));gap:12px;margin:14px 0}
.rel a{background:var(--bg);border:1px solid var(--ln);padding:13px 16px;text-decoration:none;
  display:block}
.rel a:hover{border-color:var(--ac)}
.rel .k{font-size:11px;text-transform:uppercase;letter-spacing:.06em;color:var(--i3)}
.rel .t{font-size:15px;font-weight:700;color:var(--ink);margin-top:3px;
  font-family:Geologica,sans-serif}

/* хабы */
/* Заголовок группы карточек на хабе: полка, а не украшение.
   Число справа — сколько страниц на полке, чтобы было видно объём. */
.grp{font-family:Geologica,'PT Sans',sans-serif;font-size:15px;font-weight:600;
  letter-spacing:.02em;text-transform:uppercase;color:var(--i2);
  margin:26px 0 0;padding-bottom:6px;border-bottom:1px solid var(--ln)}
.grp span{color:var(--i3);font-weight:400;font-size:13px;margin-left:6px}
.grp+.hub{margin-top:12px}
.hub{display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:12px;margin:16px 0}
.hub a{background:var(--bg);border:1px solid var(--ln);padding:15px 18px;text-decoration:none;display:block}
.hub a:hover{border-color:var(--ac)}
.hub .t{font-family:Geologica,sans-serif;font-weight:700;font-size:16px;color:var(--ink)}
.hub .d{font-size:13.5px;color:var(--i2);margin-top:4px}
.hub .f{font-family:'PT Mono',monospace;font-size:12px;color:var(--i3);margin-top:6px}

/* подвал */
footer{background:var(--ink);color:#B9C4BC;padding:30px 0;font-size:14px;margin-top:40px}
footer a{color:#7ED4A6;text-decoration:none}
footer .cols{display:grid;grid-template-columns:2fr 1fr 1fr;gap:26px}
footer .ft-t{font-family:Geologica,sans-serif;color:#fff;font-size:14px;
  font-weight:700;margin:0 0 8px;line-height:1.3}
footer ul{list-style:none;font-size:13.5px;line-height:1.9}

.toast{position:fixed;left:50%;bottom:26px;transform:translateX(-50%) translateY(80px);
  background:var(--ink);color:#fff;padding:11px 20px;border-radius:var(--r);font-size:14.5px;
  opacity:0;transition:.22s;z-index:50}
.toast.on{transform:translateX(-50%) translateY(0);opacity:1}

/* Баннер согласия на cookie — счётчик не грузится до «Принять».
   Рамка акцентным цветом и сильная тень отделяют его и от светлой страницы
   (фон почти совпадает), и от тёмного подвала. Кнопки «Принять» и «Отклонить»
   намеренно одинаковые: разная заметность — подталкивание, оно ломает
   добровольность согласия. */
/* Окно согласия — модальное, по центру: решение владельца от 16.08.2026.
   Кнопки одинакового размера и заметности намеренно: разная заметность —
   подталкивание, а оно ломает добровольность согласия. Окно не мешает
   пользоваться сайтом: отказ ничего не отключает. */
.modal{position:fixed;inset:0;z-index:80;display:flex;align-items:center;
  justify-content:center;padding:20px;background:rgba(22,26,23,.55)}
.modal[hidden]{display:none}
.modal-box{background:var(--bg);border:1px solid var(--ln);border-radius:3px;
  box-shadow:0 12px 48px rgba(0,0,0,.35);padding:22px 24px;max-width:56ch;
  width:100%;max-height:86vh;overflow-y:auto}
.modal-box h2{font-size:19px;margin:0 0 10px}
.modal-box p{font-size:14px;color:var(--ink);margin:0 0 10px}
.modal-box .row{display:flex;gap:12px;margin-top:16px}
.modal-box .btn{flex:1 1 0;background:#fff;color:var(--ac);
  border:2px solid var(--ac);font-weight:700;text-align:center}
.modal-box .btn:hover{background:var(--al);border-color:var(--ac)}
body.modal-on{overflow:hidden}
@media(max-width:520px){
  .modal-box{padding:18px 16px}
  .modal-box .row{flex-direction:column}
}

@media(max-width:720px){
  h1{font-size:24px} .dek{font-size:15.5px}
  .calc .in{grid-template-columns:1fr;padding:16px}
  .calc .out{padding:15px 16px}
  .calc .out .row b{font-size:16px}
  .calc .out .row.big b{font-size:20px}
  .calc .act{padding:0 16px 15px}
  .calc .act .btn{flex:1;text-align:center}
  footer .cols{grid-template-columns:1fr}
  .top .wrap{gap:10px;padding:0 14px;overflow:hidden}
  html,body{overflow-x:hidden}
  .nav{gap:14px;margin-left:auto;overflow-x:auto;-webkit-overflow-scrolling:touch;
    scrollbar-width:none;max-width:100%}
  .nav::-webkit-scrollbar{display:none}
  .nav a{font-size:13.5px;white-space:nowrap}
  .offer input{min-width:0;width:100%}
  .offer .row{flex-direction:column;align-items:stretch}
  .cookie .row .btn{flex:1}
  .cookie{padding:12px 14px}
  .cookie p{font-size:12.5px;margin-bottom:8px}
  .wrap{padding:0 14px}
  .fx{font-size:12px}
  .fxr{flex-wrap:wrap;padding:8px 12px}
  .fxf{flex:1 1 100%}
  .fxc{flex:1 1 auto;font-size:11.5px}
  table{display:block;overflow-x:auto}
}

/* согласия в форме и оговорка об ответственности */
.agree{display:block;position:relative;padding-left:25px;font-size:12.5px;color:var(--i2);
  margin-top:9px;line-height:1.5;max-width:78ch;cursor:pointer}
.agree input{position:absolute;left:0;top:3px;width:auto;min-width:0;
  accent-color:var(--ac)}
.disc{background:var(--bg);border:1px solid var(--ln);border-left:3px solid var(--i3);
  padding:13px 17px;margin:22px 0;font-size:13px;color:var(--i2);line-height:1.5}
.disc b{color:var(--ink)}
.req{font-size:12.5px;color:#8A9490;margin-top:14px;line-height:1.6}

/* Строка формулы под ответом: «250 000 × 22 / 122 = 45 081,97».
   Разбор ниже отвечает «почему столько», эта строка — «из чего»,
   и нужна она в ту же секунду, что и сам ответ. */
.fla{margin:2px 0 0;padding:10px 14px;background:var(--l2);border:1px solid var(--ln);
  border-radius:3px;font-family:'PT Mono',monospace;font-size:13px;color:var(--i2);
  overflow-x:auto;white-space:nowrap}
.fla:empty{display:none}
.fla b{color:var(--ink)}

/* Печать расчёта. На бумагу идут только шапка, поля, результат и формула:
   расчёт несут в инспекцию и в суд, и меню разделов там лишнее. */
.pechat-head{display:none}
/* Печать расчёта. Белый список, а не чёрный: скрываем в главной колонке
   всё, потом показываем только то, что должно лечь на лист. С чёрным
   списком на бумагу уезжала вся статья — проверяющая показала это
   на своём же примере, применив правила временным <style>. */
@media print{
  header.top, footer, .modal{display:none !important}
  main.wrap > *{display:none !important}
  main.wrap > .pechat-head,
  main.wrap > .calc,
  main.wrap > .src{display:block !important}
  main.wrap > h1{display:none !important}   /* название печатает шапка */
  .pechat-head{display:block !important;margin:0 0 14px;font-size:11px;color:#333}
  .pechat-head b{display:block;font-size:15px;color:#000;margin-bottom:3px}
  body{background:#fff;color:#000;font-size:12pt}
  main.wrap{max-width:none;padding:0}
  .calc{border:none;padding:0;box-shadow:none;background:none}
  .calc .act, .calc .quick, .calc .err, .calc .hint{display:none !important}
  .in{display:block}
  /* Пустые поля и служебные строки на бумагу не идут: у калькулятора НДС
     восемь пустых «Позиция 2–5» занимали половину листа. Класс ставит
     скрипт перед печатью — по факту значения, а не по вёрстке. */
  .fld.pech-pusto, .row.pech-pusto, .row.pech-skryt{display:none !important}
  .fld{display:flex;justify-content:space-between;gap:12px;
    border-bottom:1px solid #ddd;padding:4px 0;page-break-inside:avoid}
  .fld label{font-weight:400}
  .fld input,.fld select{border:none;background:none;text-align:right;padding:0;
    font-weight:700;-webkit-appearance:none;appearance:none;color:#000}
  .out{margin-top:12px;border-top:2px solid #000;padding-top:8px}
  .out .row{display:flex;justify-content:space-between;padding:3px 0}
  .out .row.big b{font-size:14pt}
  .fla{background:none;border:none;padding:8px 0 0;white-space:normal;color:#000}
  .calc-note{font-size:10pt;color:#333}
  .src{font-size:9pt;color:#333;margin-top:12px;border-top:1px solid #ddd;padding-top:6px}
  a[href]:after{content:""}
}
}

/* Карточка раздела без страницы: тот же вид, но не ссылка и без наведения —
   человек по ней не щёлкает и не ищет, почему не открывается. */
.hub .card-off{display:block;padding:16px 18px;background:var(--bg);
  border:1px solid var(--ln);border-radius:3px;opacity:.66;cursor:default}
.hub .card-off .t{font-weight:700;margin-bottom:4px}

/* Атрибут hidden обязан прятать. Браузерное правило [hidden]{display:none}
   проигрывает любому авторскому — у нас его отменял .calc .fld{display:flex},
   и поля калькулятора НДС были спрятаны в разметке, но видны на экране.
   Эта строка стоит в любом нормализаторе ровно по этой причине. */
[hidden]{display:none !important}

/* Тонкости расчёта: свёрнутый блок под результатом. Оговорки, которые
   важны, но не должны заслонять главную. */
.tonk{background:var(--bg);border:1px solid var(--ln);border-radius:var(--r);
  margin:0 0 22px}
.tonk summary{padding:12px 18px;cursor:pointer;font-weight:700;font-size:14px;
  color:var(--ink);list-style:none}
.tonk summary::-webkit-details-marker{display:none}
.tonk summary::before{content:"+";color:var(--ac);font-weight:800;margin-right:9px}
.tonk[open] summary::before{content:"−"}
.tonk-telo{padding:0 18px 14px;font-size:14px;color:var(--i2)}
.tonk-telo p{margin:0 0 9px}
.tonk-telo p:last-child{margin-bottom:0}
