/* ============================================================
   4istit.ru — «книга с оглавлением».
   Слева постоянное содержание, справа полоса чтения.
   Светлая тема. Без внешних шрифтов и библиотек.
   ============================================================ */

/* ---------- 1. Токены ---------- */

:root{
  --desk:    #ebe4d4;   /* стол под листом   */
  --paper:   #f8f5ee;   /* бумага            */
  --paper-2: #efe9dd;   /* вклейки, врезки   */
  --paper-3: #e6dfd0;
  --ink:     #1b1916;
  --ink-2:   #5e584e;   /* второстепенный    */
  --ink-3:   #8b8375;   /* подписи, номера   */
  --hair:    #ddd4c3;
  --accent:  #8c2f26;   /* охристо-красный   */
  --on-accent:#fff8f0;

  --serif: Georgia, "PT Serif", "Droid Serif", "Times New Roman", serif;
  --sans:  system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;

  --t--2: .72rem;
  --t--1: clamp(.82rem, .79rem + .14vw, .9rem);
  --t-0:  clamp(1.08rem, 1.02rem + .3vw, 1.22rem);
  --t-1:  clamp(1.22rem, 1.12rem + .45vw, 1.45rem);
  --t-2:  clamp(1.55rem, 1.3rem + 1.15vw, 2.25rem);
  --t-3:  clamp(2.2rem, 1.55rem + 3vw, 4rem);

  --rail:  17.5rem;
  --read:  40rem;       /* полоса чтения: ~70 знаков в строке               */
  --wide:  46rem;       /* картинки и видео: шире текста, но не намного     */
  --reader: 1;          /* множитель размера текста, меняется читателем     */
  --bay:   clamp(2.75rem, 2rem + 3.2vw, 4.75rem);

  color-scheme: light;
}

/* ---------- 2. Основа ---------- */

*,*::before,*::after{ box-sizing:border-box }

/* иначе display из классов побеждает атрибут hidden и скрытый блок виден */
[hidden]{ display:none !important }

html{ -webkit-text-size-adjust:100%; scroll-behavior:smooth }

body{
  margin:0;
  background:var(--desk);
  color:var(--ink);
  font-family:var(--serif);
  font-size:var(--t-0);
  line-height:1.72;
  overflow-wrap:break-word;
  -webkit-font-smoothing:antialiased;
}

img{ max-width:100%; height:auto; display:block; border:0 }

h1,h2,h3{ font-family:var(--serif); font-weight:700; line-height:1.14;
          letter-spacing:-.012em; text-wrap:balance; margin:0 }

p{ text-wrap:pretty }

a{ color:inherit;
   text-decoration-color:color-mix(in srgb, var(--accent) 45%, transparent);
   text-decoration-thickness:.07em; text-underline-offset:.17em;
   transition:color .15s, text-decoration-color .15s }
a:hover{ color:var(--accent); text-decoration-color:var(--accent) }

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

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

.sr{ position:absolute; width:1px; height:1px; padding:0; margin:-1px;
     overflow:hidden; clip:rect(0,0,0,0); white-space:nowrap; border:0 }

.skip{ position:absolute; left:-9999px }
.skip:focus{ left:1rem; top:1rem; z-index:100; background:var(--accent);
             color:var(--on-accent); padding:.65rem 1rem; border-radius:4px }

/* маленькие прописные — метки разделов */
.label{
  font-family:var(--sans); font-size:var(--t--2); font-weight:700;
  letter-spacing:.15em; text-transform:uppercase; color:var(--ink-3);
}

/* ---------- 3. Каркас ---------- */

.frame{
  display:grid; grid-template-columns:minmax(0,1fr);
  background:var(--paper); min-height:100vh;
}

@media (min-width:62rem){
  /* рейка + полоса чтения как единый лист на столе:
     по центру экрана и с границей с обеих сторон, а не только слева */
  .frame{
    grid-template-columns:var(--rail) minmax(0,1fr);
    max-width:72rem; margin-inline:auto;
    border-inline:1px solid var(--hair);
  }
}

/* ---------- 4. Оглавление слева ---------- */

/* на узких экранах — выдвижная панель, доступная в любой момент */
.rail{
  position:fixed; top:0; bottom:0; left:0; z-index:120;
  width:min(20rem, 86vw);
  background:var(--paper-2);
  border-right:1px solid var(--hair);
  padding:1.4rem clamp(1.25rem,4vw,1.6rem) 2rem;
  overflow-y:auto; overscroll-behavior:contain;
  display:flex; flex-direction:column; gap:1.75rem;
  transform:translateX(-100%); visibility:hidden;
  transition:transform .25s ease, visibility .25s;
  box-shadow:0 0 40px rgba(30,24,14,.18);
}
.nav-sw:checked ~ .frame .rail{ transform:none; visibility:visible }

/* затемнение позади панели */
.scrim{
  position:fixed; inset:0; z-index:110; display:none;
  background:rgba(26,22,16,.42); cursor:pointer;
}
.nav-sw:checked ~ .scrim{ display:block }

.rail__close{
  position:absolute; top:.9rem; right:.9rem;
  width:2rem; height:2rem; border-radius:99px; cursor:pointer;
  display:flex; align-items:center; justify-content:center;
  font-family:var(--sans); font-size:1.1rem; line-height:1;
  color:var(--ink-2); background:var(--paper); border:1px solid var(--hair);
}
.rail__close:hover{ color:var(--accent); border-color:var(--accent) }

@media (min-width:62rem){
  .rail{
    position:sticky; top:0; left:auto; bottom:auto; z-index:auto;
    width:auto; height:100vh;
    transform:none; visibility:visible; box-shadow:none;
    border-right:1px solid var(--hair);
    padding:2.25rem 1.6rem 2rem;
    gap:2rem;
  }
  .scrim,.rail__close{ display:none !important }
}

.mark{ display:flex; align-items:baseline; gap:.1rem; text-decoration:none }
.mark b{ font-size:1.35rem; font-weight:700; letter-spacing:-.03em }
.mark span{ font-family:var(--sans); font-size:var(--t--2); color:var(--ink-3) }
.mark:hover b{ color:var(--accent) }

/* ---------- 4a. Верхняя полоса читателя (узкие экраны) ---------- */

.progress{
  position:fixed; top:0; left:0; z-index:200;
  height:3px; width:0; background:var(--accent);
}

.bar{
  position:sticky; top:0; z-index:100;
  display:flex; align-items:center; gap:.6rem;
  padding:.55rem clamp(.9rem,4vw,1.5rem);
  background:color-mix(in srgb, var(--paper) 86%, transparent);
  backdrop-filter:saturate(1.5) blur(10px);
  -webkit-backdrop-filter:saturate(1.5) blur(10px);
  border-bottom:1px solid var(--hair);
}
@media (min-width:62rem){ .bar{ display:none } }

.bar__btn{
  display:inline-flex; align-items:center; gap:.45rem;
  font-family:var(--sans); font-size:var(--t--1); font-weight:600;
  padding:.45rem .85rem; border:1px solid var(--hair); border-radius:99px;
  background:var(--paper); cursor:pointer; user-select:none; color:var(--ink);
}
.bar__btn:hover{ border-color:var(--accent); color:var(--accent) }
.bar__btn b{ display:block; width:1rem; height:2px; background:currentColor;
             box-shadow:0 5px 0 currentColor, 0 -5px 0 currentColor }

/* ---------- 4b. Размер шрифта ---------- */

.sizer{ display:flex; align-items:center; gap:.2rem; margin-left:auto }
.sizer button{
  width:2rem; height:2rem; border-radius:6px; cursor:pointer;
  border:1px solid var(--hair); background:var(--paper); color:var(--ink-2);
  font-family:var(--sans); font-weight:700; line-height:1; padding:0;
}
.sizer button:hover{ border-color:var(--accent); color:var(--accent) }
.sizer button:disabled{ opacity:.35; cursor:default; border-color:var(--hair); color:var(--ink-3) }
.sizer output{
  font-family:var(--sans); font-size:var(--t--2); color:var(--ink-3);
  min-width:2.7rem; text-align:center; font-variant-numeric:tabular-nums;
}
.sizer .sizer__cap{ font-family:var(--sans); font-size:var(--t--2);
                    color:var(--ink-3); margin-right:.25rem }

.rail .sizer{ margin-left:0 }
@media (max-width:61.99rem){ .rail .sizer,.rail .sizer__cap{ display:none } }

.toc__group + .toc__group{ margin-top:1.6rem }
.toc__group > .label{ display:block; margin:0 0 .55rem }

.toc ol{ list-style:none; margin:0; padding:0;
         font-family:var(--sans); font-size:var(--t--1); line-height:1.35 }
.toc li + li{ margin-top:.1rem }

.toc a{
  display:flex; gap:.65rem; align-items:baseline;
  padding:.42rem .55rem; margin-left:-.55rem;
  border-radius:5px; text-decoration:none; color:var(--ink-2);
}
.toc a:hover{ background:var(--paper-3); color:var(--ink) }
.toc a i{ font-style:normal; font-size:.72rem; color:var(--ink-3);
          font-variant-numeric:tabular-nums; min-width:1.1em }
.toc a[aria-current="page"]{ color:var(--accent); font-weight:700; background:var(--paper-3) }
.toc a[aria-current="page"] i{ color:var(--accent) }

.rail__foot{ font-family:var(--sans); font-size:var(--t--1); color:var(--ink-2) }
@media (min-width:62rem){ .rail__foot{ margin-top:auto } }
.rail__foot p{ margin:0 0 .6rem }
.rail__foot a{ text-decoration:none }
.rail__foot a:hover{ text-decoration:underline }

.book{
  display:inline-flex; align-items:center; gap:.5rem;
  padding:.6rem 1.05rem; border-radius:99px;
  background:var(--accent); color:var(--on-accent);
  font-weight:650; text-decoration:none; margin-bottom:.9rem;
  transition:filter .15s, transform .15s;
}
.book:hover{ filter:brightness(1.1); transform:translateY(-1px); color:var(--on-accent) }

/* ---------- 5. Полоса чтения ---------- */

.page{
  padding:0 clamp(1.25rem,5vw,4.5rem) var(--bay);
  max-width:calc(var(--wide) + 6rem);
}

.hero{ padding:var(--bay) 0 0 }
.hero .label{ display:block; margin-bottom:1.1rem }
.hero h1{ font-size:var(--t-3); max-width:16ch; line-height:1.06 }
/* У 335 страниц заголовок начинается со строчной — «знакомство»,
   «по жизни». Заглавную ставим только оформлением: сам текст
   заголовка остаётся авторским, буква в файле не меняется. */
.hero h1::first-letter{ text-transform:uppercase }

/* заголовок обычной страницы скромнее обложки главной */
.hero--page{ padding-top:1.5rem }
.hero--page h1{ font-size:var(--t-2); max-width:24ch; line-height:1.16 }
.hero--page .tmeta{ margin:.9rem 0 1.75rem }
/* строка «≈ N минут» у коротких страниц скрыта — отступ под
   заголовком держит сам заголовок, иначе текст к нему прилипает */
.hero--page{ padding-bottom:1.75rem }
.hero--page:has(.tmeta:not([hidden])){ padding-bottom:0 }
.hero__motto{
  font-size:var(--t-1); font-style:italic; color:var(--ink-2);
  max-width:30ch; margin:1.3rem 0 0;
}

/* ширину держат дети, а не сам контейнер — иначе .out не может её перебить */
.col{ font-size:calc(var(--t-0) * var(--reader)) }
.col > *{ max-width:calc(var(--read) * var(--reader)) }  /* строка растёт вместе с кеглем */
.col > .out{ max-width:none }

.col h2{ font-size:var(--t-2); margin:var(--bay) 0 1.15rem }
.col h3{ font-size:var(--t-1); margin:2.25rem 0 .7rem }

/* Выключка по левому краю. Выключку по ширине включим только вместе
   с мягкими переносами, расставленными заранее: без переносов она даёт
   дыры между словами — проверено, hyphens:auto русский не переносит. */
.col p{
  margin:0 0 1.15em;
  hyphens:auto; -webkit-hyphens:auto;   /* сгладит край там, где словарь есть */
}
.col ol,.col ul{ margin:0 0 1.15em; padding-left:1.35em }
.col li{ margin:.4em 0 }
.col li::marker{ color:var(--accent) }

/* буквица */
.lede::first-letter{
  float:left; font-size:3.5em; line-height:.8;
  padding:.06em .1em 0 0; color:var(--accent); font-weight:700;
}

.turn{ font-size:var(--t-1); color:var(--ink-2); font-style:italic }

.rule{ border:0; border-top:1px solid var(--hair); margin:var(--bay) 0 }

/* старые таблицы из исходных страниц не рвут макет */
.col table{
  display:block; max-width:100%; overflow-x:auto;
  border-collapse:collapse; margin:0 0 1.25em; font-size:var(--t--1);
}
.col td,.col th{ padding:.45rem .7rem; border:1px solid var(--hair); text-align:left }

/* ---------- 6. Вклейки ---------- */

.plate{ margin:2.25rem 0; max-width:var(--wide) }
.plate img,.plate .screen{ border-radius:3px }
.plate figcaption{
  font-family:var(--sans); font-size:var(--t--1); color:var(--ink-3);
  margin-top:.65rem; padding-left:.1rem;
}
.plate figcaption a{ color:var(--ink-2) }

.poster{ display:block; text-decoration:none; transition:opacity .18s }
.poster:hover{ opacity:.9 }

.screen{ aspect-ratio:16/9; background:#12100e; overflow:hidden }
.screen iframe{ width:100%; height:100%; border:0; display:block }

/* ряд вклеек */
.plates{
  display:grid; gap:1.6rem;
  grid-template-columns:repeat(auto-fit,minmax(11.5rem,1fr));
  margin:2.25rem 0; padding:0; list-style:none; max-width:var(--wide);
}
.plates figure{ margin:0 }
.plates img{ width:100%; aspect-ratio:4/3; object-fit:cover }
.plates a{ text-decoration:none }
.plates a:hover img{ opacity:.9 }
.plates figcaption{ font-family:var(--sans); font-size:var(--t--1);
                    color:var(--ink-2); margin-top:.6rem; line-height:1.4 }
.plates .n{ display:block; color:var(--ink-3); font-size:var(--t--2);
            letter-spacing:.12em; text-transform:uppercase; margin-bottom:.2rem }

/* ---------- 7. Врезка ---------- */

.aside{
  margin:2.25rem 0; padding:1.15rem 1.35rem;
  background:var(--paper-2); border-left:2px solid var(--accent);
  font-family:var(--sans); font-size:var(--t--1); line-height:1.6;
  max-width:var(--wide);
}
.aside p{ margin:0 0 .45em }
.aside p:last-child{ margin:0 }

/* ---------- 8. «Точка входа» ---------- */

.states{
  display:grid; gap:1.75rem; align-items:start;
  grid-template-columns:minmax(0,1fr);
  margin:2rem 0; max-width:var(--wide);
}
@media (min-width:44rem){ .states{ grid-template-columns:14rem minmax(0,1fr) } }
.states img{ border-radius:3px }
.states ol{ counter-reset:s; list-style:none; margin:1.1em 0 0; padding:0;
            font-family:var(--sans); font-size:var(--t--1) }
.states ol li{ counter-increment:s; margin:0; border-top:1px solid var(--hair) }
.states ol li:last-child{ border-bottom:1px solid var(--hair) }
.states ol a{ display:flex; gap:.8rem; padding:.7rem .2rem; text-decoration:none }
.states ol a::before{ content:counter(s,decimal-leading-zero);
                      color:var(--ink-3); font-size:var(--t--2); letter-spacing:.06em }
.states ol a:hover{ color:var(--accent) }

/* ---------- 9. Список ссылок в две колонки ---------- */

.more{ max-width:var(--wide); margin:var(--bay) 0 0 }
.more ul{ list-style:none; margin:0; padding:0;
          columns:2; column-gap:2.5rem;
          font-family:var(--sans); font-size:var(--t--1) }
@media (max-width:34rem){ .more ul{ columns:1 } }
.more li{ break-inside:avoid; margin:0 0 .1rem }
.more a{ display:block; padding:.6rem 0; border-bottom:1px solid var(--hair);
         text-decoration:none; color:var(--ink-2) }
.more a:hover{ color:var(--accent) }

/* ---------- 10. Подвал ---------- */

.foot{
  border-top:1px solid var(--hair); margin-top:var(--bay);
  padding-top:var(--bay);
  font-family:var(--sans); font-size:var(--t--1); line-height:1.6;
  color:var(--ink-2); max-width:var(--wide);
}
.foot__grid{ display:grid; gap:1.75rem 2.5rem;
             grid-template-columns:repeat(auto-fit,minmax(11rem,1fr)) }
.foot .label{ display:block; margin:0 0 .75rem }
.foot ul{ list-style:none; margin:0; padding:0 }
.foot li + li{ margin-top:.45rem }
.foot a{ text-decoration:none }
.foot a:hover{ text-decoration:underline }
.foot__sign{ margin:var(--bay) 0 0; font-style:italic;
             font-family:var(--serif); color:var(--ink-3) }

/* ---------- 11. Крошки для типовых страниц ---------- */

.crumbs{ font-family:var(--sans); font-size:var(--t--1); color:var(--ink-3);
         padding:var(--bay) 0 0; margin:0 }
.crumbs a{ text-decoration:none; color:var(--ink-2) }
.crumbs a:hover{ color:var(--accent) }
.crumbs i{ font-style:normal; padding:0 .45rem; opacity:.55 }

/* ---------- 12. Числа и прогресс в оглавлении ---------- */

.toc a{ position:relative }
.toc__name{ flex:1 }
.toc__meta{
  font-size:.72rem; color:var(--ink-3); font-variant-numeric:tabular-nums;
  letter-spacing:.02em; white-space:nowrap;
}
.toc__bar{
  position:absolute; left:.55rem; right:.55rem; bottom:.18rem;
  height:2px; background:var(--paper-3); border-radius:2px; overflow:hidden;
}
/* селектор длиннее правила для номера раздела (.toc a i) намеренно:
   иначе его min-width побеждает по специфичности и пустая полоса
   всё равно рисует кусок цвета */
.toc a .toc__bar i{
  display:block; height:100%; width:0; min-width:0;
  background:var(--accent); border-radius:2px; transition:width .3s ease;
}
.toc a.is-done .toc__meta{ color:var(--accent) }
.toc a.is-done .toc__name::after{ content:" ✓"; color:var(--accent) }

/* ---------- 13. Кнопка закладки ---------- */

.mark-btn{
  width:2rem; height:2rem; border-radius:6px; cursor:pointer; padding:0;
  border:1px solid var(--hair); background:var(--paper); color:var(--ink-3);
  font-size:1rem; line-height:1;
}
.mark-btn:hover{ border-color:var(--accent); color:var(--accent) }
.mark-btn[aria-pressed="true"]{ color:var(--accent); border-color:var(--accent);
                                background:var(--paper-2) }

/* ---------- 14. Возвращение: продолжить, счётчик, закладки ---------- */

/* Узкая полоса для вернувшегося читателя.
   Новому посетителю её не показываем вовсе — скрипт держит её скрытой,
   пока в браузере нет истории чтения. */
.desk{
  display:flex; flex-wrap:wrap; align-items:center; gap:.6rem 1.4rem;
  margin:1.75rem 0 0; padding:.85rem 1.1rem;
  background:var(--paper-2); border-left:2px solid var(--accent);
  font-family:var(--sans); font-size:var(--t--1); line-height:1.4;
}
.desk__go{ display:flex; flex-direction:column; gap:.1rem; min-width:0;
           text-decoration:none; color:var(--ink) }
.desk__go .label{ margin:0 }
.desk__go b{ font-weight:650 }
.desk__go em{ font-style:normal; color:var(--ink-3) }
.desk__go:hover b{ color:var(--accent) }
.desk__stat{ color:var(--ink-3); margin-left:auto; white-space:nowrap }
.desk__stat b{ color:var(--ink-2) }

/* ---------- полка в оглавлении: продолжить и отложенное ----------
   На каждой странице, а не только на главной: раньше отложенное
   лежало внизу главной, в конце страницы высотой 7600 пикселей. */
.shelf{ margin:0 0 1.4rem; font-family:var(--sans); font-size:var(--t--1) }
.shelf__go{
  display:flex; flex-direction:column; gap:.1rem;
  padding:.65rem .8rem; margin-bottom:.5rem;
  background:var(--paper); border:1px solid var(--hair); border-left:2px solid var(--accent);
  border-radius:4px; text-decoration:none; color:var(--ink);
}
.shelf__go .label{ margin:0 }
.shelf__go b{ font-weight:650; line-height:1.3 }
.shelf__go em{ font-style:normal; color:var(--ink-3); font-size:var(--t--2) }
.shelf__go:hover b{ color:var(--accent) }

.shelf__marks summary{
  cursor:pointer; padding:.35rem 0; color:var(--ink-2); font-weight:600;
  list-style-position:inside;
}
.shelf__marks summary:hover{ color:var(--accent) }
.shelf__marks ul{ list-style:none; margin:.2rem 0 0; padding:0;
                  max-height:16rem; overflow-y:auto }
.shelf__marks li{ display:flex; align-items:flex-start; gap:.3rem;
                  border-bottom:1px solid var(--hair) }
.shelf__marks li:last-child{ border-bottom:0 }
.shelf__marks a{ flex:1; min-width:0; padding:.4rem 0; line-height:1.3;
                 text-decoration:none; color:var(--ink-2) }
.shelf__marks a:hover{ color:var(--accent) }
.shelf__marks button{
  flex:none; border:0; background:none; cursor:pointer;
  padding:.35rem .3rem; font:inherit; font-size:1.05em; line-height:1; color:var(--ink-3);
}
.shelf__marks button:hover{ color:var(--accent) }

/* в полосе на главной список отложенного занимает всю ширину */
.desk .shelf__marks{ flex-basis:100%; order:2 }
.desk .desk__stat{ order:1 }

.grand__bar{
  display:block; height:4px; background:var(--paper-3); border-radius:3px;
  overflow:hidden; margin-top:.7rem;
}
.grand__bar i{ display:block; height:100%; width:0; background:var(--accent);
               border-radius:3px; transition:width .4s ease }
#grand b{ font-size:var(--t-1); font-family:var(--serif) }

.marks__list{ list-style:none; margin:0; padding:0 }
.marks__list li{ margin:0 }
.marks__list a{ display:block; padding:.4rem 0; border-bottom:1px solid var(--hair);
                text-decoration:none; color:var(--ink-2) }
.marks__list li:last-child a{ border-bottom:0 }
.marks__list a:hover{ color:var(--accent) }

/* ---------- 15. Ступени пути ---------- */

.steps{ list-style:none; margin:1.75rem 0 0; padding:0; counter-reset:st }

.step a{
  display:flex; gap:1.1rem; align-items:center;
  padding:.85rem .7rem; margin-inline:-.7rem; border-radius:5px;
  border-top:1px solid var(--hair); text-decoration:none;
}
.step:last-child a{ border-bottom:1px solid var(--hair) }
.step a:hover{ background:var(--paper-2) }

.ring{ position:relative; flex:none; width:2.5rem; height:2.5rem;
       display:grid; place-items:center }
.ring svg{ position:absolute; inset:0; width:100%; height:100%;
           transform:rotate(-90deg) }
.ring circle{ fill:none; stroke-width:2.5 }
.ring .ring__track{ stroke:var(--paper-3) }
.ring .ring__fill{ stroke:var(--accent); stroke-linecap:round;
                   transition:stroke-dashoffset .5s ease }
.ring b{ font-family:var(--sans); font-size:.85rem; font-weight:700;
         color:var(--ink-2); position:relative }

.step__body{ display:flex; flex-direction:column; gap:.1rem; min-width:0 }
.step__name{ font-size:var(--t-1); font-weight:700; letter-spacing:-.012em;
             line-height:1.25 }
.step__count{ font-family:var(--sans); font-size:var(--t--1); color:var(--ink-3) }

.step a:hover .step__name{ color:var(--accent) }
.step.is-done .ring b{ color:var(--accent) }
.step.is-done .step__name::after{ content:" ✓"; color:var(--accent) }
.step.is-going .ring b{ color:var(--accent) }

/* ---------- 13a. Подразделы внутри оглавления ---------- */

/* Части раздела. Отделены от главного списка тремя вещами сразу:
   отступом, вертикальной чертой в цвет акцента и подномерами 01.1,
   чтобы их нельзя было принять за соседние разделы. */
.toc__sub{
  list-style:none; margin:.2rem 0 .75rem .85rem; padding:.1rem 0 .1rem .85rem;
  border-left:2px solid color-mix(in srgb, var(--accent) 30%, var(--hair));
}
.toc__sub li + li{ margin-top:.05rem }

.toc__sub a{
  display:flex; gap:.55rem; align-items:baseline;
  padding:.34rem .5rem; margin-left:-.5rem;
  font-size:.78rem; line-height:1.3; color:var(--ink-3);
  text-decoration:none; border-radius:4px;
}
.toc__sub a i{
  font-style:normal; font-size:.66rem; color:var(--ink-3);
  font-variant-numeric:tabular-nums; opacity:.75; white-space:nowrap;
}
.toc__sub a span{ flex:1 }
.toc__sub a em{
  font-style:normal; font-size:.66rem; color:var(--ink-3);
  font-variant-numeric:tabular-nums; opacity:.8; white-space:nowrap;
}
.toc__sub a:hover{ background:var(--paper-3); color:var(--ink) }
.toc__sub a:hover i,.toc__sub a:hover em{ opacity:1 }
.toc__sub a[aria-current="page"]{ color:var(--accent); font-weight:700 }
.toc__sub a[aria-current="page"] i,
.toc__sub a[aria-current="page"] em{ color:var(--accent); opacity:1 }

/* ---------- 13b. Подразделы на заглавной странице раздела ---------- */

/* отступ снизу обязателен: дальше сразу идёт текст или картинка,
   и без него они прилипают к карточкам */
.parts{ margin:1.75rem 0 2.75rem; max-width:var(--wide) }
.parts .label{ display:block; margin-bottom:.8rem }
.parts ul{
  display:grid; gap:.5rem; list-style:none; margin:0; padding:0;
  grid-template-columns:repeat(auto-fit,minmax(15rem,1fr));
}
/* число страниц всегда отдельной строкой — иначе оно скачет
   в зависимости от длины названия */
.parts a{
  display:flex; flex-direction:column; gap:.3rem;
  padding:.85rem 1rem;
  border:1px solid var(--hair); border-radius:4px;
  font-family:var(--sans); font-size:var(--t--1); line-height:1.35;
  text-decoration:none; color:var(--ink);
  transition:border-color .15s, background-color .15s;
}
.parts a b{ font-weight:600 }
.parts a b::after{ content:" →"; color:var(--ink-3) }
.parts a em{ font-style:normal; font-size:var(--t--2); color:var(--ink-3);
             white-space:nowrap }
.parts a:hover{ border-color:var(--accent); background:var(--paper-2); color:var(--accent) }

/* ---------- 14a. Переход по соседним страницам ---------- */

.pager{
  display:grid; gap:.9rem; margin:var(--bay) 0 0; max-width:var(--wide);
  grid-template-columns:minmax(0,1fr);
}
@media (min-width:38rem){ .pager{ grid-template-columns:1fr 1fr } }

.pager a{
  display:flex; flex-direction:column; gap:.2rem;
  padding:.9rem 1.1rem; border:1px solid var(--hair); border-radius:4px;
  text-decoration:none; font-family:var(--sans); font-size:var(--t--1);
  color:var(--ink); transition:border-color .15s, background-color .15s;
}
.pager a:hover{ border-color:var(--accent); background:var(--paper-2); color:var(--accent) }
.pager span{ font-size:var(--t--2); letter-spacing:.1em; text-transform:uppercase;
             color:var(--ink-3) }
.pager__next{ text-align:right }
.pager__prev span::before{ content:"← " }
.pager__next span::after{ content:" →" }

/* ---------- 14b. Все страницы раздела ---------- */

.pages{ margin:2rem 0 0; max-width:var(--wide) }
.pages .label{ display:block; margin-bottom:.7rem }
.pages ol{ display:flex; flex-wrap:wrap; gap:.35rem; list-style:none; margin:0; padding:0 }
.pages a,.pages b{
  display:block; min-width:2.3rem; text-align:center;
  padding:.45rem .6rem; border:1px solid var(--hair); border-radius:4px;
  font-family:var(--sans); font-size:var(--t--1); text-decoration:none;
  color:var(--ink-2); font-weight:400;
}
.pages a:hover{ border-color:var(--accent); color:var(--accent) }
.pages b{ background:var(--accent); border-color:var(--accent); color:var(--on-accent);
          font-weight:700 }

/* ---------- 14c. Реклама, доставшаяся от старого сайта ---------- */

.promo-note{
  margin:2rem 0 0; max-width:var(--wide);
  font-family:var(--sans); font-size:var(--t--2); color:var(--ink-3);
  line-height:1.7;
}
.promo-note a{ color:var(--ink-3) }
.promo-note a:hover{ color:var(--accent) }

/* ---------- 15a. Поддержать автора ---------- */

.support{
  max-width:var(--wide); margin:var(--bay) 0 0;
  padding:1.4rem 1.6rem;
  background:var(--paper-2); border-left:2px solid var(--accent);
  display:grid; gap:1.25rem; align-items:center;
}
@media (min-width:46rem){ .support{ grid-template-columns:minmax(0,1fr) auto } }

.support .label{ display:block; margin-bottom:.5rem }
.support h2{ font-size:var(--t-1); margin:0 0 .55rem }
.support p{
  margin:0; max-width:46ch;
  font-family:var(--sans); font-size:var(--t--1); line-height:1.55; color:var(--ink-2);
}
.support .book{ margin:0; white-space:nowrap }

/* ---------- 16. Шрифт без засечек по выбору читателя ---------- */

html[data-font="sans"] .col{ font-family:var(--sans); line-height:1.66 }
html[data-font="sans"] .col p{ letter-spacing:.002em }

/* ---------- 17. Сколько читать ---------- */

.tmeta{
  font-family:var(--sans); font-size:var(--t--1); color:var(--ink-3);
  margin:-.6rem 0 1.5rem;
}

/* ---------- 18. Вернуться на то же место ---------- */

/* Висит, пока читатель сам не нажмёт, не закроет её или не уйдёт
   прокруткой дальше первого экрана. Раньше исчезала через 10 секунд,
   и её легко было не заметить. */
.pill-resume{
  position:fixed; left:50%; bottom:1.5rem; transform:translateX(-50%);
  z-index:150; display:flex; align-items:stretch;
  max-width:calc(100vw - 2rem);
  border-radius:99px; border:1px solid var(--hair); background:var(--paper);
  box-shadow:0 4px 24px rgba(30,24,14,.22);
  font-family:var(--sans); font-size:var(--t--1); font-weight:600;
}
.pill-resume button{
  border:0; background:none; cursor:pointer; font:inherit; color:var(--ink);
}
.pill-resume__go{ padding:.7rem .6rem .7rem 1.25rem; text-align:left }
.pill-resume__x{ padding:.7rem 1rem .7rem .6rem; color:var(--ink-3) !important;
                 border-left:1px solid var(--hair) !important }
.pill-resume__go:hover{ color:var(--accent) }
.pill-resume__x:hover{ color:var(--accent) !important }
/* открыто оглавление — кнопка не должна лежать поверх него */
.nav-sw:checked ~ .pill-resume{ display:none }

/* ---------- 19. Печать ---------- */

@media print{
  body{ background:#fff; color:#000; font-size:11.5pt; line-height:1.45 }
  .frame{ display:block; max-width:none; border:0; background:#fff }
  .rail,.bar,.scrim,.progress,.pill-resume,.desk,.sizer,.skip{ display:none !important }
  .page{ padding:0; max-width:none }
  .col > *{ max-width:none }
  .plate,.plates,.screen,.states img{ display:none }   /* видео на бумаге бессмысленно */
  a{ color:#000; text-decoration:underline }
  /* показываем, куда ведут ссылки */
  .col a[href^="http"]::after{ content:" (" attr(href) ")"; font-size:9pt; color:#444 }
  h1,h2,h3{ page-break-after:avoid }
  p{ orphans:3; widows:3 }
  .foot{ border-top:1px solid #999; font-size:9pt }
}

.muted{ color:var(--ink-2) }

/* ---------- 20. Прочие вставки ----------
   На страницах попадаются сторонние рамки с жёсткой шириной
   (например платёжный виджет). Не даём им вылезать за экран. */

.col iframe{ max-width:100% }

/* ---------- 21. Оглавления разделов ----------
   Бывшие таблицы навигации: строка «превью + описание + подробнее»
   стала одной карточкой-ссылкой. Адрес прежний, кликается всё. */

.items{ list-style:none; margin:2rem 0; padding:0; max-width:var(--wide) }
.items li + li{ margin-top:.4rem }

/* именно прямой потомок: иначе правило цепляет ссылки ВНУТРИ текста
   карточки, и каждая из них превращается в отдельную полосу */
.items > li > a{
  display:flex; gap:1.1rem; align-items:flex-start;
  padding:.95rem 1rem; margin-inline:-1rem;
  border-radius:5px; text-decoration:none; color:var(--ink);
  border-bottom:1px solid var(--hair);
  transition:background-color .15s;
}
.items > li:first-child > a{ border-top:1px solid var(--hair) }
.items > li > a:hover{ background:var(--paper-2) }

.items__pic{ flex:none; width:7rem }
.items__pic img{
  width:100%; height:auto; aspect-ratio:4/3; object-fit:cover;
  border-radius:3px; background:var(--paper-3);
}

/* Номер строки из первой колонки таблицы. Держим его отдельно от
   текста карточки: так он не разрывает фразу и все номера стоят
   ровным столбиком. */
.items__n{
  flex:none; width:1.9rem; padding-top:.1rem;
  font-family:var(--sans); font-size:var(--t--2); font-weight:600;
  font-variant-numeric:tabular-nums; text-align:right;
  color:var(--ink-3);
}
.items > li > a:hover .items__n{ color:var(--accent) }

.items__text{
  flex:1; min-width:0;
  font-family:var(--sans); font-size:var(--t--1); line-height:1.5;
  color:var(--ink-2);
}
.items > li > a:hover .items__text{ color:var(--ink) }
.items__text p{ margin:0 0 .4em }
.items__text p:last-child{ margin:0 }

@media (max-width:34rem){
  .items > li > a{ gap:.8rem }
  .items__pic{ width:5rem }
}

/* Оглавление без превью: строки короче, разделитель тоньше. */
.items--compact > li > a{ padding:.5rem 1rem }
.items--compact li + li{ margin-top:0 }
.items--compact .items__text{ color:var(--ink) }

/* Строка, где ссылки ведут в разные места: та же раскладка,
   но каждая ссылка сохранена отдельно. */
.items__plain{
  display:flex; gap:1.1rem; align-items:flex-start;
  padding:.95rem 1rem; margin-inline:-1rem;
  border-bottom:1px solid var(--hair);
  font-family:var(--sans); font-size:var(--t--1); line-height:1.5;
  color:var(--ink-2);
}
.items__plain p{ margin:0 0 .4em }
.items__plain p:last-child{ margin:0 }

/* ---------- 22. Медиатека ----------
   Строка «ссылки | постер» из старых таблиц: постер слева,
   ссылки справа, без табличных рамок. */

.media{
  display:flex; gap:1.5rem; align-items:flex-start;
  margin:1.25rem 0 2.25rem; max-width:var(--wide);
}
.media__pic{ flex:none; width:15rem; max-width:45% }
.media__pic img{ width:100%; height:auto; border-radius:3px; background:var(--paper-3) }
.media__pic a{ text-decoration:none }
.media__pic p{ margin:.5rem 0 0; font-family:var(--sans); font-size:var(--t--1) }

.media__body{
  flex:1; min-width:0;
  font-family:var(--sans); font-size:var(--t--1); line-height:1.6;
}
.media__body p{ margin:0 0 .55em }
.media__body p:last-child{ margin:0 }

@media (max-width:38rem){
  .media{ flex-direction:column; gap:.9rem }
  .media__pic{ width:100%; max-width:none }
}

/* ============================================================
   Поиск по сайту.

   Поле стоит в рейке на каждой странице, но ничего не грузит:
   это обычная форма, которая ведёт на страницу поиска. Словарь
   подтягивается только там. Так поиск доступен отовсюду, а
   остальные страницы остаются лёгкими.
   ============================================================ */

.find{ display:flex; gap:.35rem; margin:0 0 .9rem }
.find input{
  flex:1; min-width:0;
  padding:.45rem .6rem;
  font:inherit; font-size:var(--t--1);
  color:var(--ink); background:var(--paper);
  border:1px solid var(--hair); border-radius:4px;
}
.find input::placeholder{ color:var(--ink-3) }
.find input:focus{ outline:none; border-color:var(--accent) }
.find button{
  padding:.45rem .7rem;
  font:inherit; font-size:var(--t--2); font-weight:600;
  color:var(--ink-2); background:var(--paper-2);
  border:1px solid var(--hair); border-radius:4px; cursor:pointer;
}
.find button:hover{ border-color:var(--accent); color:var(--accent) }

/* ---------- страница поиска ---------- */

.search__form{ display:flex; gap:.5rem; margin:0 0 1rem; max-width:var(--wide) }
.search__form input{
  flex:1; min-width:0;
  padding:.7rem .9rem;
  font-family:var(--sans); font-size:var(--t-0);
  color:var(--ink); background:var(--paper);
  border:1px solid var(--hair); border-radius:5px;
}
.search__form input:focus{ outline:none; border-color:var(--accent) }
.search__form button{
  padding:.7rem 1.3rem; border:0; border-radius:5px; cursor:pointer;
  background:var(--accent); color:var(--on-accent);
  font-family:var(--sans); font-size:var(--t--1); font-weight:650;
}
.search__form button:hover{ filter:brightness(1.1) }

.search__note{
  font-family:var(--sans); font-size:var(--t--1);
  color:var(--ink-2); margin:0 0 1.2rem;
}
.search__when{ color:var(--ink-3) }
.search__miss{ font-family:var(--sans); font-size:var(--t--1); color:var(--ink-2) }

/* Результат: название, раздел, начало страницы. Раскладку берём
   у карточек оглавления — читателю не нужно привыкать заново. */
.search__title{ display:block; font-size:var(--t-0); color:var(--accent); margin-bottom:.15rem }
.search__sec{ display:block; font-size:var(--t--2); color:var(--ink-3); margin-bottom:.3rem }
.search__snip{ display:block; color:var(--ink-2) }

#search-out mark{
  background:rgba(140,47,38,.13); color:inherit;
  padding:0 .1em; border-radius:2px;
}

.search__more{
  margin-top:1rem; padding:.55rem 1.2rem; cursor:pointer;
  font-family:var(--sans); font-size:var(--t--1);
  color:var(--ink-2); background:var(--paper-2);
  border:1px solid var(--hair); border-radius:99px;
}
.search__more:hover{ border-color:var(--accent); color:var(--accent) }

/* ============================================================
   Баннеры проектов автора — в шапке каждой страницы.
   Один под другим, во всю ширину колонки — по просьбе автора.
   ============================================================ */
.promo{
  display:grid; gap:.8rem;
  max-width:var(--wide);
  margin:1.5rem 0 0;
}
.promo a{
  display:block; border-radius:4px; overflow:hidden;
  transition:transform .15s, box-shadow .15s;
}
.promo a:hover{ transform:translateY(-1px); box-shadow:0 4px 14px rgba(30,24,14,.18) }
.promo img{ width:100%; height:auto }
/* всегда один под другим и во всю ширину колонки: это важные
   объявления автора, их должно быть хорошо видно и читать без усилия */
/* на главной шапка — сами баннеры, лишний отступ сверху у заголовка не нужен */
.promo + .hero{ padding-top:clamp(1.75rem, 1.2rem + 2vw, 3rem) }
/* под баннерами крошкам не нужен полный отступ сверху */
.promo + .crumbs{ padding-top:clamp(1.4rem, 1rem + 1.4vw, 2.2rem) }
