:root{
    /* Фон и карточки — из экспорта «Temper Dashboard» (июль).
       Карточка стала полупрозрачной: поверх фона она даёт то самое стекло,
       ради которого макет и переделывали. Размытие подкладывается ниже, по
       самому употреблению токена, — иначе его пришлось бы вписать в полсотни
       мест с инлайновыми стилями. */
    --bg:#edecea;
    --card:rgba(255,255,255,.55);
    /* Тот же цвет под именем из экспортов. Все макеты Claude Design зовут его
       `--glass`, и при переносе стилей приходилось переименовывать вручную —
       а это ровно тот шаг, на котором значение и теряется. */
    --glass:rgba(255,255,255,.55);
    --card-solid:#ffffff;
    --glass-strong:rgba(255,255,255,.7);
    --blur:blur(20px) saturate(1.2);
    --ink:#1a1a1a;
    --ink-2:#5f5f5b;
    --ink-3:#8a8a86;
    --hair:rgba(26,26,26,.08);
    --lime:#d6f24b;
    --sleep:#7C90C9;
    --sleep-soft:#DDE3F5;
    --steps:#8FA92B;
    --steps-soft:#E8F0C4;
    --hrv:#4FA396;
    --hrv-soft:#D6EAE6;
    --neutral-line:#4A4E52;
    --rose-ink:#B54A62;
    --rose:#E07A8D;
    --rose-soft:#F7DCE2;
    --rose-dark:#F09AAC;
    --track:#E8E8E4;
    --st-optimal:#5F8A63;
    --st-normal:#BCD3B4;
    --st-normal-ink:#7B9C76;
    --st-out:#E07A8D;
    --st-none:#D8D8D4;
    /* Имена для цветов, которые до сих пор стояли по всему кабинету числами.
       Приехали с дизайн-системой из экспорта «Документы»; значения те же. */
    --surface-sunken:#f7f6f4;
    --surface-dark:#2f3234;
    --surface-dark-2:#1c1e20;
    --surface-inert:#F0F0EC;
    --hair-strong:#E8E8E4;
    --dashed:#d2d1cc;
    --ink-row:#2C2F31;
    --ink-quiet:#6E7378;
    --ink-faint:#9AA0A6;
    --st-optimal-ink:#4E7A54;
    /* Тень шире и мягче прежней: карточка не лежит на фоне, а висит над ним. */
    --shadow:0 8px 40px rgba(0,0,0,.04);
    --warm:#d98b52;
    /* Тёмная подложка и мятная линия — из экспорта «Комплексное УЗИ». На ней
       рисуются графики динамики и пилюли-шаги: тёмный блок посреди светлого
       экрана — самый сильный акцент, какой есть в системе, и тратится он на то,
       ради чего документ и открывают повторно. */
    --dark:#22221f;
    --on-dark:#edecea;
    --mint:#7beba2;
    --grain:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='140' height='140'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='2'/%3E%3C/filter%3E%3Crect width='140' height='140' filter='url(%23n)' opacity='.5'/%3E%3C/svg%3E");
  }
  /*
   * Размытие под стеклом.
   *
   * Карточки по всему кабинету заданы инлайново — `background:var(--card)` в
   * разметке и в строках, которые собирают модули. Вписать `backdrop-filter`
   * в каждое такое место значит пройти по полусотне файлов и не забыть ни
   * одного; вместо этого правило цепляется за само употребление токена.
   *
   * Два селектора, потому что запись отличается: в разметке пишут без пробела,
   * а браузер, сериализуя cssText из JS, ставит пробел после двоеточия.
   */
  [style*="background:var(--card)"],
  [style*="background: var(--card)"],
  [style*="background:var(--glass)"],
  [style*="background: var(--glass)"]{
    backdrop-filter:var(--blur);
    -webkit-backdrop-filter:var(--blur);
  }

  /*
   * Горизонтальное переполнение обрезается, но не прокручивается: `clip`
   * вместо `hidden`. Разница не косметическая — `hidden` делает корень
   * прокручиваемым, и `position:sticky` внутри страницы перестаёт держаться
   * вовсе. Так молча не работали липкие шапки на списках маркеров и
   * оглавление разбора: правило стоит в оболочке, а ломается вёрстка страниц.
   */
  html,body{margin:0;padding:0;overflow-x:clip;}
  /*
   * Шрифт задан здесь, а не по месту.
   *
   * В экспортах он стоит инлайном на корневом контейнере каждого макета —
   * и при переносе в кабинет потерялся: `font-family` не было ни на одной
   * странице, и весь кабинет рисовался браузерным serif. На макет это не
   * похоже ничем, кроме цветов, и заметить подмену трудно как раз потому,
   * что текст остаётся читаемым.
   *
   * Набор тот же, что в экспорте: 'Helvetica Neue' на маке, Helvetica на
   * старых системах, 'Segoe UI' на Windows.
   */
  body{
    background:var(--bg);-webkit-font-smoothing:antialiased;
    font-family:'Helvetica Neue',Helvetica,'Segoe UI',sans-serif;
    font-weight:400;color:var(--ink);
  }
  /* Поля и кнопки шрифт от body не наследуют — это правило браузера. */
  input,textarea,select,button{font-family:inherit;}
  a{color:var(--ink);text-decoration:none;}
  a:hover{color:var(--ink-2);}
  *{box-sizing:border-box;}
  .shell{display:flex;align-items:flex-start;width:100%;min-height:100vh;padding:0;margin:0;}
  /*
   * Рельс — по макету «Кровь · стиль приложения».
   *
   * Плита цвета бумаги с волосяной линией справа, логотип капсом и круглая
   * кнопка сворачивания рядом с ним. Свёрнутый — 76 px: остаются значки, а
   * подписи и заголовки групп не пропадают рывком, а тают; ширина, отступы и
   * прозрачность движутся одной кривой за 260–300 мс.
   *
   * Сворачивается кнопкой, а не наведением: наведение — случайный жест, меню
   * разворачивалось, когда курсор просто шёл мимо, и страница под ним
   * дёргалась. Выбор запоминается и держится на всех экранах (nav.js,
   * temper.rail.min). Свёрнутый рельс занимает меньше места по-настоящему:
   * колонка сужается, и страница разъезжается следом.
   *
   * Активный пункт — тонкое голубое кольцо, как у выбранной пилюли вида. Заливки
   * в рельсе больше нет ни у кого: лаймовая плашка спорила с экраном за взгляд.
   *
   * Все селекторы прижаты к `.colL` намеренно. У страниц есть свои <style> с
   * короткими именами — `.lab`, `.row`, `.t`, — и «Подобрать панель» своим
   * `.lab { font-size:12px }` перебивала подпись пункта меню. Родитель в
   * селекторе делает такие столкновения невозможными.
   */
  .colL{
    --rail-ease:cubic-bezier(.22,.8,.2,1);
    flex:0 0 322px;position:sticky;top:0;height:100vh;
    display:flex;flex-direction:column;padding:18px 0 22px;margin:0;min-height:0;
    background:#EDECEA;border-right:1px solid rgba(34,34,31,.10);
    overflow-x:hidden;overflow-y:auto;scrollbar-width:none;
    transition:flex-basis 300ms var(--rail-ease);
  }
  /* Третий режим — рельса нет вовсе. Он нужен экранам во всю ширину: карте
     разбора при большом плане не хватает и свёрнутых семидесяти пикселей.
     Вернуть меню можно кнопкой у левого края — она появляется только здесь. */
  .colL.rail-off{flex:0 0 0;width:0;min-width:0;padding:0;border:0;overflow:hidden;pointer-events:none;}
  .colL::-webkit-scrollbar{display:none;}
  .rail-peek{
    position:fixed;left:0;top:50%;transform:translateY(-50%);z-index:40;
    width:26px;height:64px;border:0;border-radius:0 8px 8px 0;cursor:pointer;
    background:rgba(34,34,31,.10);color:var(--ink-2);font:inherit;font-size:13px;
    display:none;align-items:center;justify-content:center;
  }
  .rail-peek:hover{background:rgba(34,34,31,.18);color:var(--ink);}
  body.rail-hidden .rail-peek{display:flex;}

  /* ---- шапка: логотип и кнопка ---- */
  .colL .rail-head{
    flex:none;display:flex;align-items:center;justify-content:space-between;gap:12px;
    padding:0 14px 0 27px;margin-bottom:22px;
    transition:padding 260ms var(--rail-ease),gap 260ms var(--rail-ease);
  }
  .colL .rail-logo{
    white-space:nowrap;text-transform:uppercase;color:#22221F;
    font-size:19px;letter-spacing:.22em;
    transition:font-size 260ms var(--rail-ease),letter-spacing 260ms var(--rail-ease);
  }
  .colL .rail-logo:hover{color:#22221F;}
  .colL .rail-toggle{
    width:30px;height:30px;flex:none;border:0;border-radius:999px;background:#fff;
    box-shadow:0 1px 2px rgba(0,0,0,.06);display:flex;align-items:center;justify-content:center;
    font:inherit;font-size:13px;line-height:1;color:#5A5A5A;cursor:pointer;
    transition:background 160ms;
  }
  .colL .rail-toggle:hover{background:#F7F7F6;}

  /* ---- группы и пункты ---- */
  .colL .rail-items{display:flex;flex-direction:column;flex:0 0 auto;}

  /* Заголовок группы — тихий капс. В свёрнутом рельсе он тает до пустой полосы
     в 14 px: подпись превратилась бы в обрубок, а без полосы группы слиплись бы. */
  .colL .rail-group{
    display:flex;align-items:center;overflow:hidden;white-space:nowrap;
    height:28px;margin-top:14px;padding-left:27px;opacity:1;
    font-size:10px;letter-spacing:.16em;text-transform:uppercase;color:rgba(34,34,31,.5);
    transition:height 260ms var(--rail-ease),opacity 260ms var(--rail-ease),padding 260ms var(--rail-ease);
  }

  .colL .rail-item{
    position:relative;height:40px;flex:none;display:flex;align-items:center;justify-content:flex-start;
    margin:0 14px;border-radius:14px;overflow:hidden;
    font-size:14px;color:rgba(34,34,31,.62);cursor:pointer;
    transition:margin 260ms var(--rail-ease),background 160ms,color 160ms,box-shadow 160ms;
  }
  .colL .rail-item:hover{background:rgba(34,34,31,.045);color:#22221F;}
  .colL .rail-item svg,.colL .rail-item i,.colL .rail-item [data-lucide]{
    width:18px;height:18px;flex:0 0 18px;margin-left:13px;color:rgba(34,34,31,.62);
    transition:margin 260ms var(--rail-ease),color 160ms;
  }
  .colL .rail-item .lab{
    min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;
    max-width:220px;padding-left:14px;opacity:1;
    transition:max-width 260ms var(--rail-ease),padding 260ms var(--rail-ease),opacity 200ms var(--rail-ease);
  }
  /* Активный пункт — пилюля, залитая baby blue: одна обводка на светлом рельсе
     читалась слабо. */
  .colL .rail-item.on{background:#B9DCF5;color:#22221F;}
  .colL .rail-item.on svg,.colL .rail-item.on i,.colL .rail-item.on [data-lucide],
  .colL .rail-item:hover svg,.colL .rail-item:hover i,.colL .rail-item:hover [data-lucide]{color:#22221F;}

  /* Свёрнутый рельс — только на широком экране. На узком меню выезжает целиком
     по бургеру, и значки без подписей там были бы полумерой. */
  @media(min-width:1024px){
    .colL.rail-min{flex-basis:76px;}
    .colL.rail-min .rail-head{flex-direction:column;justify-content:flex-start;gap:16px;padding:0;}
    .colL.rail-min .rail-logo{font-size:11px;letter-spacing:.14em;}
    .colL.rail-min .rail-group{height:14px;opacity:0;padding-left:0;}
    .colL.rail-min .rail-item{margin:0 17px;justify-content:center;}
    .colL.rail-min .rail-item svg,.colL.rail-min .rail-item i,
    .colL.rail-min .rail-item [data-lucide]{margin-left:0;}
    .colL.rail-min .rail-item .lab{max-width:0;padding-left:0;opacity:0;}
    .colL.rail-min .rail-item .badge{display:none;}
  }

  /* «Выйти» — в самом низу рельса, отдельно от разделов: это не место, куда
     идут, а действие, и среди пунктов его легко нажать по ошибке.
     Низ прилипает к краю экрана: на невысоком окне рельс выше экрана, и без
     этого кнопка уезжала под край. Фон — рельса, чтобы пункты уходили под него. */
  /* Зазор перед низом: в конце прокрутки пункты иначе упирались в
     разделитель вплотную. */
  .colL .rail-gap{flex:0 0 16px;}
  .colL .rail-foot{
    flex:none;margin-top:auto;position:sticky;bottom:-22px;z-index:1;
    display:flex;flex-direction:column;padding:10px 0 22px;margin-bottom:-22px;
    background:#EDECEA;box-shadow:0 -1px 0 rgba(34,34,31,.08);
  }
  .colL .rail-foot .rail-item{border:0;background:transparent;font-family:inherit;text-align:left;}
  .colL .rail-foot .rail-item:hover{background:rgba(34,34,31,.045);}
  .colL .rail-foot .rail-item:focus-visible{outline:2px solid #B9DCF5;outline-offset:2px;}
  .colL .rail-foot .rail-item:disabled{cursor:default;opacity:.6;}
  .colL .rail-item .badge{
    flex:0 0 auto;font-size:12px;line-height:1;white-space:nowrap;
    border-radius:999px;padding:5px 10px;background:rgba(26,26,26,.06);color:var(--ink-3);
  }
  .colL .rail-item .badge.lime{background:var(--lime);color:var(--ink);}
  .colL .rail-item .badge.bad{background:rgba(224,122,141,.26);color:var(--rose-ink);}
  .colL .rail-item .badge.ok{background:rgba(95,138,99,.2);color:var(--st-optimal-ink);}

  .burger{display:none;}
  @media(max-width:1023px){
    /* На узком экране рельс выезжает поверх страницы по бургеру — той же
       кривой, что сворачивание на широком. Раньше бургер переключал класс, у
       которого не было ни одного правила, и меню на телефоне не открывалось. */
    .colL{
      position:fixed;left:0;top:0;bottom:0;z-index:55;width:300px;height:auto;
      transform:translateX(-102%);visibility:hidden;
      transition:transform 300ms var(--rail-ease),visibility 0s linear 300ms,box-shadow 300ms;
    }
    .colL.is-open{
      transform:none;visibility:visible;box-shadow:24px 0 60px rgba(0,0,0,.16);
      transition:transform 300ms var(--rail-ease),visibility 0s,box-shadow 300ms;
    }
    .colL .rail-toggle{display:none;}
    .burger{display:flex;}
  }

/* Колонка страницы рядом с рельсом. Поля из экспорта: 30 сверху, 60 снизу.

   Базис нулевой, а не auto: с `auto` колонка просит ширину своего содержимого
   и может уехать на строку ниже, под липкий рельс. Колонка должна занимать
   остаток строки, каким бы он ни был. */
.colFull{flex:1 1 0;min-width:0;display:flex;justify-content:center;padding:30px 0 60px;margin:0;}
@media(max-width:1023px){ .colFull{padding:16px 0 40px;} }

/* Из экспорта дизайна: спиннер и бегущая полоса на экранах загрузки. */
@keyframes om-spin{to{transform:rotate(360deg);}}
@keyframes om-slide{0%{transform:translateX(-100%);}100%{transform:translateX(265%);}}

/* hover rules recovered from the design's style-hover attributes */
[data-hv="hv1"]:hover{color:#000;}
[data-hv="hv2"]:hover{color:var(--ink);}
[data-hv="hv3"]:hover{background:rgba(224,122,141,.16);transform:translateY(-1px);box-shadow:0 4px 12px rgba(224,122,141,.18);}
[data-hv="hv4"]:hover{color:var(--ink-3);}
