/*  РЗБ – выдвижная боковая панель.
 *
 *  Разделов стало семь, и по одним иконкам их уже не различить. Панель умеет два
 *  состояния: узкое (только иконки, как раньше) и широкое (иконки с подписями).
 *
 *  Вся раскладка держится на переменной --rail: её же читают .rail (ширина) и .app
 *  (левый отступ), поэтому раскрытие – это подмена одного значения, а не отдельные
 *  правила на каждый элемент. Значение переопределяется на <body>, чтобы не спорить
 *  с :root в каждой странице.
 *
 *  Подписи лежат в разметке, а не подставляются скриптом: так навигация работает при
 *  выключенном JS и попадает в индекс поисковика.
 *
 *  Класс состояния (rail-open) висит на <html>, а не на <body>: только его можно
 *  выставить крошечным скриптом в <head>, ДО первой отрисовки. Иначе страница успевает
 *  нарисоваться со свёрнутой панелью, и уже потом она раскрывается – с анимацией,
 *  то есть с прыжком при каждом переходе между разделами.
 *
 *  На узком экране панель раньше просто пряталась, и разделов на телефоне не было
 *  вовсе – оставались только ссылки в подвале. Теперь там выдвижной ящик поверх
 *  содержимого: кнопку в шапку добавляет rail.js.
 */

/* Ширина раскрытой панели считается по самой длинной подписи, а не на глаз.
   Сейчас это «Юридический отдел», 144 пикселя шрифтом Inter 14/600. Дальше
   складываем всё, что стоит по бокам от текста:

       12 поле панели + 12 поле пункта + 21 значок + 12 просвет
     + 144 подпись + 12 поле пункта + 12 поле панели = 225

   Ровно 225 и хватало бы, но впритык оставлять нельзя: другой шрифт в запасе,
   другое округление – и подпись снова обрежется многоточием. Поэтому 238, с
   запасом примерно в пять процентов. Было 214, и «Юридический отдел» не влезал.

   Если появится раздел с более длинным названием, число пересчитывается по той
   же формуле, а не подбирается. */
:root{ --rail-open:238px; }

/* Цвет неактивного пункта. Общий приглушённый --muted рассчитан на текст: на
   мелких буквах он читается спокойным, а на иконке в двадцать один пиксель, да
   ещё обведённой линией в два, выглядит просто выключенным. Подмешиваем к нему
   чуть меньше трети основного цвета текста – иконки становятся примерно на
   десятую часть светлее, и разделы видно, но активный пункт по-прежнему сам по
   себе: он синий и с заливкой, а не просто ярче.

   Токеном, а не числом в каждой странице: правило .ric живёт у всех девяти в
   своём <style>, и хранить там один и тот же цвет девять раз незачем. */
:root{ --ric-off: color-mix(in srgb, var(--muted) 72%, var(--text)); }

/* ── ширина и её анимация ───────────────────────────────────────────── */
/* Никакого overflow:hidden ни на панели, ни на пунктах: всплывающая подсказка
   .ric[data-tip]::after висит ЗА границей пункта и была бы обрезана. */
.rail{ transition:width .3s cubic-bezier(.22,.61,.24,1); }
.app { transition:margin-left .3s cubic-bezier(.22,.61,.24,1); }
:root.rail-open{ --rail:var(--rail-open); }

/* ── кнопка-переключатель ───────────────────────────────────────────── */
/* Живёт в пустом верхнем поле панели, на одной высоте с шапкой. */
.rtog{
  position:absolute; top:14px; left:12px;
  width:42px; height:42px; flex:0 0 auto;
  display:flex; align-items:center; justify-content:center;
  border:none; background:none; padding:0; cursor:pointer;
  color:var(--muted); border-radius:13px;
  transition:color .18s ease, background .18s ease;
}
.rtog svg{ width:20px; height:20px; stroke:currentColor; fill:none; stroke-width:1.9; stroke-linecap:round; }
.rtog .chev{ transition:transform .3s cubic-bezier(.22,.61,.24,1); transform-origin:50% 50%; }
.rail-open .rtog .chev{ transform:rotate(180deg); }
@media (hover:hover){ .rtog:hover{ color:var(--text); background:var(--glass-2); } }

/* ── пункты: в узком состоянии иконка по центру, в широком – иконка и подпись ── */
.rlbl{
  display:none; white-space:nowrap; font-size:14px; font-weight:600;
  overflow:hidden; text-overflow:ellipsis; min-width:0;
}
.rail-open .rail{ align-items:stretch; padding-left:12px; padding-right:12px; }
.rail-open .ric{
  width:100%; justify-content:flex-start; gap:12px; padding:0 12px; height:44px;
}
.rail-open .ric svg{ flex:0 0 auto; }
.rail-open .rlbl{ display:block; }
/* В развёрнутом виде подпись видна – всплывающая подсказка становится лишней. */
.rail-open .ric[data-tip]::after{ display:none; }

/* ── узкий экран: ящик поверх содержимого ───────────────────────────── */
@media(max-width:820px){
  /* Панель здесь не занимает места в потоке: --rail остаётся нулевым,
     а сама она выезжает сдвигом. Поэтому .app не двигается. */
  :root.rail-open{ --rail:0px; }
  /* Селектор намеренно :root .rail, а не просто .rail. Инлайновый <style> страницы
     подключается ПОСЛЕ rail.css и содержит своё .rail{width:var(--rail)} той же
     специфичности – при равной специфичности выигрывает то, что позже, и ширина
     ящика бралась бы из --rail (на узком экране это 0). :root добавляет вес,
     и правило перестаёт зависеть от порядка подключения. */
  /* Ящик непрозрачный, и это не то же самое, что закреплённая панель на широком
     экране. Там она стоит сбоку от содержимого и ничего собой не закрывает,
     поэтому полупрозрачное стекло ей к лицу. Здесь она выезжает ПОВЕРХ текста,
     и сквозь заливку в семьдесят процентов читались чужие строки, а на телефоне,
     где размытия нет вовсе, они вдобавок оставались резкими.
     Цвет тот же самый, просто без прозрачности, поэтому панель не стала светлее
     или темнее, чем была. Числа взяты из серебристой доводки в конце каждой
     страницы, где стоит .rail{background:rgba(21,25,33,.72)}; если тон панели
     однажды поменяют там, поменять его надо и здесь.
     Отделяют ящик от страницы подложка, рамка и тень.
     Размытие здесь уже ни при чём и снято заодно: размывать под сплошной
     заливкой нечего, а слой отрисовки оно заводит. */
  :root .rail{
    display:flex; width:var(--rail-open); z-index:75;
    transform:translateX(-100%); transition:transform .3s cubic-bezier(.22,.61,.24,1);
    align-items:stretch; padding:14px 12px;
    background:rgb(21,25,33); backdrop-filter:none; -webkit-backdrop-filter:none;
  }
  .rail-open .rail{ transform:none; box-shadow:0 0 60px rgba(0,0,0,.6); }
  :root .rail .ric{ width:100%; justify-content:flex-start; gap:12px; padding:0 12px; height:46px; }
  :root .rail .rlbl{ display:block; }
  .rail .ric[data-tip]::after{ display:none; }
  /* Переключатель внутри ящика не нужен: закрывают подложкой или кнопкой в шапке. */
  .rtog{ display:none; }

  .rail-bd{
    position:fixed; inset:0; z-index:74; background:rgba(6,8,12,.6);
    opacity:0; pointer-events:none; transition:opacity .3s ease;
  }
  /* Размытие висит на открытом ящике, а не на самой подложке. Подложку скрипт
     кладёт в body при загрузке, и лежит она там всегда, во весь экран. Пока
     backdrop-filter стоял на ней самой, браузер держал размытие целого экрана
     и тогда, когда ящик закрыт: прозрачность ноль прячет результат, но не
     отменяет работу. Теперь его нет до первого открытия.
     Проявляется оно вместе с подложкой, отдельного перехода не нужно:
     backdrop-filter рисуется как часть элемента и гаснет его прозрачностью. */
  .rail-open .rail-bd{ opacity:1; pointer-events:auto; backdrop-filter:var(--bdf, blur(2px)); }

  /* Кнопка вызова ящика – её добавляет rail.js в шапку. */
  .rburg{
    flex:0 0 auto; width:38px; height:38px; display:flex; align-items:center; justify-content:center;
    border:1px solid var(--stroke); background:var(--glass-2); border-radius:11px;
    color:var(--muted); cursor:pointer; padding:0;
  }
  .rburg svg{ width:19px; height:19px; stroke:currentColor; fill:none; stroke-width:2; stroke-linecap:round; }
}
@media(min-width:821px){
  .rail-bd{ display:none; }
  .rburg{ display:none; }
}

@media (prefers-reduced-motion:reduce){
  .rail,.app,.rtog .chev,.rail-bd{ transition:none; }
}
