/* =========================================================================
   ЕГЭ НАЛЕГКЕ — ПРОСТЫЕ СПИСКИ
   Версия 3.2 · 05.09.2026
   =========================================================================
   &#9888;&#65039; ЧТО ИЗМЕНИЛОСЬ ПРОТИВ 3.1 — ТРИ МЕСТА, БОЛЬШЕ НИЧЕГО
   Базой взят файл, который РЕАЛЬНО стоит на боевом: прочитан прямо со
   страницы «лайфхаки для ЕГЭ» 935812628, 36 правил, состав и порядок
   сверены один в один. Ни одно чужое правило не тронуто.
   1. Раздел 0 — добавлена переменная --enl-simple-dim-locked.
   2. Раздел 2.3 — у .description убрано display: block !important.
      &#9888;&#65039; Это и есть причина, по которой техническое описание было видно,
      хотя .description стоит в списке скрытия. Подробности там же.
   3. Раздел 2.5 — новый: приглушение недоступного урока.
   ЧТО ЭТО
   Тот же вид, что был у отменённого «оформления по умолчанию», но
   включается вручную и только там, где включили. Ни одна страница не
   меняется сама.
   ЧЕТЫРЕ КЛАССА. ДВА ОФОРМЛЯЮТ, ДВА ЗАКРЫВАЮТ
   Оформление — ставится вместо ничего:
       enl-simple-trainings   → блоку СПИСКА ТРЕНИНГОВ (подтренингов)
       enl-simple-lessons     → блоку СПИСКА УРОКОВ
   Закрытость — ставится ДОПОЛНИТЕЛЬНО, вторым классом к любому уже
   работающему, своему или чужому. Оформления не подменяют вовсе:
       enl-blocked            → закрыт ВЕСЬ блок
       enl-lock-trainings     → закрыты ОТДЕЛЬНЫЕ подтренинги внутри
                                списка, по id (список в разделе 4)
   Все ставятся в конструкторе GetCourse, в поле CSS-класса блока, и
   сочетаются как угодно:
       enl-simple-trainings enl-lock-trainings
       enl-hard-page enl-blocked
   &#9888;&#65039; Все четыре имени проверены на незанятость: ни в одном файле темы,
   ни в одном скрипте, ни в одном документе проекта их нет.
   &#9888;&#65039; Похожее имя enl-locked ЗАНЯТО — оно у чек-листа, для его
   собственного замка. Поэтому здесь имена другие.
   ЧЕМ ЭТО ОТЛИЧАЕТСЯ ОТ enl-defaults.css, КОТОРЫЙ ЛОМАЛ
   Тот файл работал от обратного: оформлял ВСЁ, кроме помеченного
   классом enl-, через :not([class*="enl-"]). То есть влезал везде по
   умолчанию, а страницы со своим оформлением должны были от него
   защищаться. Одна пропущенная пометка — и страница ломалась.
   Здесь знак защиты обратный: файл не делает НИЧЕГО, пока класс не
   поставлен. Ошибиться в сторону поломки нельзя — забыли поставить,
   страница осталась ровно как была.
   ПОЧЕМУ ЭТО РАБОТАЕТ БЕЗ СКРИПТА
   Класс приходит с сервера вместе с разметкой, а не дописывается
   потом. Значит оформление применяется до первой отрисовки и ничего
   не мелькает. Механизм замерен, а не придуман: GetCourse уже кладёт
   такие классы на блоки — на «библиотеке» блок списка уроков приезжает
   как <div class="xdget-block xdget-lessonList enl-hard-page">, блок
   формы на панели CloudText — с классом enl-ct-formholder. Оба
   поставлены руками в настройках блока.
   ЧЕГО ЗДЕСЬ НАМЕРЕННО НЕТ
   0. Ни одного скрипта. Всё держится на классе, который приходит с
      сервера вместе с разметкой.
   1. Ни одного объявления на :root. Переменные объявлены на самих
      классах — наружу не протекает ничего.
   2. Ни одного состояния урока. В таких списках заданий нет:
      «выполнено», «есть задание», «просмотрено» показывать нечего и
      незачем. Кружок, галочка, текстовые плашки — спрятаны все.
      Цвет края чередуется ПО ПОРЯДКУ, а не по смыслу.
      &#9888;&#65039; Единственное исключение — раздел 2.5: урок, который ещё не
      открылся, приглушается. Это не показ состояния, а знак, что
      трогать пока нечего.
   3. Никакой зависимости от 0-основа.css. Замерено 01.09.2026 на живой
      странице тренинга боевого аккаунта: --enl-pink, --enl-olive,
      --enl-yellow, --enl-white, --enl-muted, --enl-shadow там НЕ
      объявлены — есть только --enl-text, --enl-border и --enl-font.
      Опереться на них значило бы получить прозрачные карточки без
      тени, молча, без единой ошибки в консоли.
      Когда основа доедет по-настоящему — переключается блок
      переменных ниже, и только он.
   ========================================================================= */
/* =========================================================================
   0. ПЕРЕМЕННЫЕ — НА САМИХ КЛАССАХ, НЕ НА :root
   =========================================================================
   Область видимости переменной — элемент и всё внутри него. Объявив их
   на самих блоках, получаем то же удобство, что и на :root, но снаружи
   этих блоков переменных не существует вовсе.
   Значения — те же, что были в enl-defaults.css: задача была перенести
   вид, а не переделать его.
   ========================================================================= */
.enl-simple-trainings,
.enl-simple-lessons {
  --enl-simple-font:     "Raleway", Arial, sans-serif;
  --enl-simple-text:     #161616;
  --enl-simple-title:    #303030;
  --enl-simple-muted:    #555555;
  --enl-simple-card:     #FFFFFF;
  /* Два цвета чередования. Нужен один цвет на всё — впиши одинаковые. */
  --enl-simple-edge-1:   #D9DC6A;   /* оливковый */
  --enl-simple-edge-2:   #FCCBD1;   /* розовый   */
  --enl-simple-border:   rgba(22, 22, 22, 0.07);
  --enl-simple-shadow:   0 4px 12px rgba(22, 22, 22, 0.035),
                         0 10px 24px rgba(22, 22, 22, 0.055);
  /* Прозрачность служебных состояний подтренинга — см. раздел 1.4 */
  --enl-simple-dim-hidden: 0.45;
  --enl-simple-dim-empty:  0.72;
  /* &#9888;&#65039; ДОБАВЛЕНО 05.09.2026. Прозрачность урока, который ещё не
     открылся — см. раздел 2.5. */
  --enl-simple-dim-locked: 0.55;
}
/* =========================================================================
   1. СПИСОК ТРЕНИНГОВ  ·  класс enl-simple-trainings
   =========================================================================
   Родная разметка, снята 01.09.2026 на боевом аккаунте, подтренинг
   «библиотека»:
     <div class="xdget-block xdget-trainingList enl-simple-trainings">
       <table class="stream-table">
         <tr class="training-row no-children" data-training-id="935799527">
           <td>
             <a href="/teach/control/stream/view/id/935799527">
               <span class="stream-title">учебники и сборники</span>
               <div><b> 10 уроков. </b></div>
             </a>
   ========================================================================= */
.enl-simple-trainings .stream-table {
  display:     block !important;
  width:       100% !important;
  margin:      30px 0 50px !important;
  background:  transparent !important;
  border:      0 !important;
}
/* &#9888;&#65039; Сетка живёт на tbody, а не на table: браузер вставляет tbody сам,
   даже если его нет в исходном коде, и строки никогда не станут прямыми
   ячейками сетки таблицы. Поймано замером, не рассуждением. */
.enl-simple-trainings .stream-table > tbody {
  display:                block !important;
  grid-template-columns:  repeat(2, minmax(0, 1fr)) !important;
  gap:                    20px !important;
  width:                  100% !important;
}
@supports (display: grid) {
  .enl-simple-trainings .stream-table > tbody {
    display: grid !important;
  }
}
/* &#9888;&#65039; СБРОС ВЫСОТЫ — ОБЯЗАТЕЛЕН, БЕЗ НЕГО КАРТОЧКИ НАЛЕЗАЮТ ДРУГ НА ДРУГА.
   GetCourse задаёт строке height: 70px. Карточка внутри вырастает до
   своей высоты, вылезает за строку, а ряд сетки считается по строке —
   и следующий ряд начинается поверх предыдущего. */
.enl-simple-trainings .stream-table > tbody > tr.training-row,
.enl-simple-trainings .stream-table > tbody > tr.training-row > td {
  height:      auto !important;
  min-height:  0 !important;
  max-height:  none !important;
}
.enl-simple-trainings .stream-table > tbody > tr.training-row {
  display:     block !important;
  width:       100% !important;
  min-width:   0 !important;
  border:      0 !important;
  background:  transparent !important;
}
.enl-simple-trainings .stream-table > tbody > tr.training-row > td {
  display:     block !important;
  padding:     0 !important;
  border:      0 !important;
  background:  transparent !important;
}
/* --- 1.1. Карточка --- */
.enl-simple-trainings .stream-table > tbody > tr.training-row > td > a {
  position:         relative !important;
  display:          flex !important;
  flex-direction:   column !important;
  width:            100% !important;
  height:           auto !important;
  min-height:       175px !important;
  box-sizing:       border-box !important;
  padding:          33px 24px 23px !important;   /* 25 сверху + 8 на полосу */
  color:            var(--enl-simple-text) !important;
  background:       var(--enl-simple-card) !important;
  border:           1px solid var(--enl-simple-border) !important;
  border-radius:    20px !important;
  box-shadow:       var(--enl-simple-shadow) !important;
  text-decoration:  none !important;
  overflow:         hidden !important;
}
/* --- 1.2. Цветная полоса сверху ---
   Цвет чередуется по порядку карточки: первая оливковая, вторая розовая.
   В две колонки это даёт левый столбец оливковым, правый розовым.
   &#9888;&#65039; Почему не по смыслу: никакого «уровня» или «типа» в родной разметке
   нет, а выводить его из названия значило бы гадать по тексту. */
.enl-simple-trainings .stream-table > tbody > tr.training-row > td > a::before {
  content:     "" !important;
  position:    absolute !important;
  top:         0 !important;
  right:       0 !important;
  left:        0 !important;
  height:      8px !important;
  background:  var(--enl-simple-edge-1) !important;
}
.enl-simple-trainings .stream-table > tbody > tr.training-row:nth-child(even) > td > a::before {
  background: var(--enl-simple-edge-2) !important;
}
/* --- 1.3. Текст карточки --- */
.enl-simple-trainings .stream-table > tbody > tr.training-row .stream-title {
  display:          block !important;
  margin:           0 0 12px !important;
  color:            #111111 !important;
  font-family:      var(--enl-simple-font) !important;
  font-size:        27px !important;
  font-weight:      600 !important;
  line-height:      1.08 !important;
  text-transform:   lowercase !important;
}
/* Счётчик уроков в роли подписи. Своего описания у подтренинга нет;
   строка «10 уроков» — единственное, что GetCourse сообщает о
   содержимом. Жирность снимаем: в карточке это подпись, а не заголовок. */
.enl-simple-trainings .stream-table > tbody > tr.training-row > td > a > div {
  max-width:    430px !important;
  margin:       0 0 20px !important;
  color:        var(--enl-simple-muted) !important;
  font-size:    14px !important;
  font-weight:  400 !important;
  line-height:  1.4 !important;
}
.enl-simple-trainings .stream-table > tbody > tr.training-row > td > a > div b {
  font-weight: 400 !important;
}
/* --- Счётчик уроков спрятан ---
   &#9888;&#65039; ГДЕ ЭТО ОКАЗАЛОСЬ. Просьба была «для enl-simple-lessons скрыть
   описания и количество уроков». Описания в списке уроков есть, а
   количества уроков там нет вовсе — строка «10 уроков.» живёт только
   на карточке подтренинга. Поэтому она спрятана здесь, у тренингов.
   Скрывать её в списке уроков было бы нечего.
   Оформление счётчика выше не удалено по той же причине, что и у
   описаний: вернуть — это убрать правило ниже, а не писать заново.
   &#9888;&#65039; Здесь порядок работает как надо: правило со скрытием стоит НИЖЕ
   правила с оформлением, а при равной силе побеждает то, что ниже.
   У описаний в разделе 2 было наоборот — см. правку в 2.3.
   &#9888;&#65039; После этого в карточке остаётся только название и «перейти →».
   Карточка держит min-height: 175px, поэтому она не схлопнется, но
   станет заметно воздушнее. Не понравится — уменьши min-height в 1.1. */
.enl-simple-trainings .stream-table > tbody > tr.training-row > td > a > div {
  display: none !important;
}
.enl-simple-trainings .stream-table > tbody > tr.training-row > td > a::after {
  content:          "перейти  →" !important;
  display:          block !important;
  margin-top:       auto !important;
  color:            var(--enl-simple-text) !important;
  font-family:      var(--enl-simple-font) !important;
  font-size:        12px !important;
  font-weight:      600 !important;
  letter-spacing:   0.02em !important;
  text-transform:   lowercase !important;
  white-space:      pre !important;
}
/* --- 1.4. Два служебных состояния подтренинга ---
   &#9888;&#65039; ЭТО РЕШЕНИЕ, КОТОРОЕ СНИМАЕТСЯ УДАЛЕНИЕМ ДВУХ ПРАВИЛ НИЖЕ.
   Требование «никаких состояний» относилось к урокам: у ученика в этих
   списках заданий нет, показывать нечего. Эти два — не про ученика:
   .no-public видно только сотрудникам, .no-lessons означает пустую
   карточку. Оставил их приглушёнными, чтобы никто однажды не решил, что
   скрытый подтренинг ученики тоже видят. */
.enl-simple-trainings .stream-table > tbody > tr.training-row.no-public > td > a {
  opacity:     var(--enl-simple-dim-hidden) !important;
  box-shadow:  none !important;
}
.enl-simple-trainings .stream-table > tbody > tr.training-row.no-lessons > td > a {
  opacity: var(--enl-simple-dim-empty) !important;
}
/* =========================================================================
   2. СПИСОК УРОКОВ  ·  класс enl-simple-lessons
   =========================================================================
   Родная разметка, снята 01.09.2026 там же:
     <div class="xdget-block xdget-lessonList enl-simple-lessons">
       <ul class="lesson-list">
         <li class="user-state-accomplished lesson-id-349688760">
           <a class="user-state-bg item-a" href="…">
             <div class="state-icon-block hidden-xs">
               <span class="user-state-new-icon fa fa-check"></span>
             </div>
             <div class="info">
               <table><tbody><tr><td class="item-main-td">
                 <div class="vmiddle">
                   <div class="user-state-label"> Есть задание </div>
                   <div class="link title">вводный урок
                     <span class="lesson-list__video-watched">просмотрено</span>
                   </div>
                   <div class="description"> … </div>
   ========================================================================= */
.enl-simple-lessons ul.lesson-list {
  display:         flex !important;
  flex-direction:  column !important;
  gap:             18px !important;
  width:           100% !important;
  margin:          0 !important;
  padding:         0 !important;
  list-style:      none !important;
  background:      transparent !important;
  border:          0 !important;
  box-shadow:      none !important;
}
.enl-simple-lessons ul.lesson-list > li {
  display:     block !important;
  width:       100% !important;
  min-width:   0 !important;
  height:      auto !important;
  min-height:  0 !important;
  margin:      0 !important;
  padding:     0 !important;
  border:      0 !important;
  background:  transparent !important;
  list-style:  none !important;
}
/* --- 2.1. Карточка урока ---
   &#9888;&#65039; background задаём принудительно. У ссылки стоит класс
   user-state-bg — GetCourse красит её по состоянию ученика. Состояний
   нам не нужно вовсе, поэтому фон один для всех. */
.enl-simple-lessons ul.lesson-list > li > a.item-a {
  position:         relative !important;
  display:          flex !important;
  align-items:      center !important;
  gap:              18px !important;
  width:            100% !important;
  height:           auto !important;
  min-height:       118px !important;
  box-sizing:       border-box !important;
  margin:           0 !important;
  padding:          18px 96px 18px 26px !important;
  color:            var(--enl-simple-text) !important;
  background:       var(--enl-simple-card) !important;
  border:           1px solid var(--enl-simple-border) !important;
  border-radius:    18px !important;
  box-shadow:       var(--enl-simple-shadow) !important;
  text-decoration:  none !important;
  overflow:         hidden !important;
}
/* --- 2.2. СОСТОЯНИЙ НЕТ ВОВСЕ ---
   Прячем все три способа, которыми GetCourse показывает состояние:
   кружок с галочкой слева, текстовую плашку и отметку о просмотре
   видео. Не перекрашиваем, не уменьшаем — убираем.
   &#9888;&#65039; Прячем контейнер кружка целиком, а не значок внутри. Иначе пустой
   кружок остаётся занимать место, и карточка выглядит так, будто у неё
   отвалилась картинка.
   &#9888;&#65039; ПРОВЕРЕНО, ЧТО ЭТИХ ЧЕТЫРЁХ СТРОК ХВАТАЕТ. 05.09.2026 собраны все
   классы, встречающиеся внутри <li>, на одиннадцати живых страницах
   обоих курсов — списки уроков, папки, недели, библиотека, снеки,
   квизлеты. Статус GetCourse показывает ровно четырьмя способами:
     кружок слева      .state-icon-block            ← вместе со значками
                                                      внутри: .user-state-new-icon,
                                                      .fa, .fa-check, .glyphicon
     плашка текстом    .user-state-label            ← «Есть задание»,
                                                      «Недоступен до Вт 08 Сен»
     отметка о видео   .lesson-list__video-watched  ← «просмотрено»
     служебная строка  .description                 ← «… | b=…; due=…»
   &#9888;&#65039; Отдельных строк НЕ требуют: .user-state-label-ex, .has-start-at,
   .lesson-date — это добавочные классы на том же самом
   .user-state-label, а не другие элементы. Разметка всегда вида
   <div class="user-state-label has-start-at lesson-date">.
   &#9888;&#65039; Классы состояния на самом <li> (user-state-reached,
   user-state-has_mission, user-state-accomplished,
   user-state-not_reached, first-unreached) текста не несут. Через них
   GetCourse красит ссылку классом user-state-bg — фон принудительно
   задан в 2.1, поэтому цвет состояния не проступает. */
.enl-simple-lessons ul.lesson-list .state-icon-block,
.enl-simple-lessons ul.lesson-list .user-state-label,
.enl-simple-lessons ul.lesson-list .lesson-list__video-watched,
.enl-simple-lessons ul.lesson-list .description {
  display: none !important;
}
/* &#9888;&#65039; .description в этом списке — НЕ описание для ученика. Замерено
   01.09.2026 на «библиотеке»: там лежит служебная строка вида
   «| due=прямо сейчас!; b=вводный урок» — то, что разбирает чек-лист.
   Ученику её видеть незачем, поэтому она в списке выше.
   Оформление описания ниже (раздел 2.3) НЕ удалено намеренно: скрытому
   элементу оно ничего не стоит, а вернуть описания — это убрать одну
   строку из списка выше, а не писать правила заново. */
/* --- 2.3. Текст ---
   Разбираем вложенную таблицу GetCourse: внутри .info лежит настоящая
   <table>, и без разборки она держит свою ширину и вертикальное
   выравнивание. */
.enl-simple-lessons ul.lesson-list .info,
.enl-simple-lessons ul.lesson-list .info table,
.enl-simple-lessons ul.lesson-list .info tbody,
.enl-simple-lessons ul.lesson-list .info tr,
.enl-simple-lessons ul.lesson-list .info td,
.enl-simple-lessons ul.lesson-list .info .vmiddle {
  display:         block !important;
  width:           100% !important;
  min-width:       0 !important;
  height:          auto !important;
  min-height:      0 !important;
  margin:          0 !important;
  padding:         0 !important;
  border:          0 !important;
  background:      transparent !important;
  vertical-align:  middle !important;
}
.enl-simple-lessons ul.lesson-list .info {
  flex:       1 1 auto !important;
  min-width:  0 !important;
}
.enl-simple-lessons ul.lesson-list .link.title {
  display:          block !important;
  max-width:        100% !important;
  margin:           0 !important;
  padding:          0 !important;
  color:            var(--enl-simple-title) !important;
  font-family:      var(--enl-simple-font) !important;
  font-size:        23px !important;
  font-weight:      600 !important;
  line-height:      1.2 !important;
  letter-spacing:   -0.01em !important;
  text-transform:   lowercase !important;
  overflow-wrap:    anywhere !important;
}
/* &#9888;&#65039; ПРАВКА 05.09.2026: ОТСЮДА УБРАНО display: block !important.
   Это и есть причина, по которой техническое описание оставалось на
   экране, хотя .description стоит в списке скрытия выше.
   Специфичность у обоих правил одинаковая — 0,2,2 против 0,2,2, — и
   важность одинаковая. При равной силе побеждает то, которое НИЖЕ. То
   есть строкой выше описание прятали, а этой строкой возвращали.
   Замерено 05.09.2026 на живой странице «лайфхаки для ЕГЭ» 935812628:
   у .description вычисленный display был block, и на экране висело
   «если страшно делать 2 часть. (миникурс по лайфхакам егэ) | b=…».
   Остальное оформление описания оставлено намеренно: вернуть показ —
   это убрать .description из списка в 2.2, а не писать правила заново.
   Без display правило просто ждёт своего часа. */
.enl-simple-lessons ul.lesson-list .description {
  margin:       8px 0 0 !important;
  color:        var(--enl-simple-muted) !important;
  font-size:    14px !important;
  font-weight:  400 !important;
  line-height:  1.4 !important;
}
/* --- 2.5. УРОК ЕЩЁ НЕ ОТКРЫЛСЯ — ПРИГЛУШАЕМ  ·  ДОБАВЛЕНО 05.09.2026 ---
   GetCourse ставит на строку класс user-state-not_reached, а дату
   выхода кладёт в плашку статуса. Замерено 05.09.2026 в «разборах
   заданий» обществознания:
     <li class="user-state-not_reached lesson-id-349743485">
       <div class="user-state-label has-start-at lesson-date">
         Недоступен до Вт 08 Сен 00:00
   &#9888;&#65039; Саму дату не показываем — это статус, а статусов в этих списках
   нет вовсе (раздел 2.2). Приглушение остаётся единственным знаком, что
   урок ещё закрыт: ученик видит его в списке, понимает, что он есть, и
   видит, что он пока не его.
   &#9888;&#65039; Приглушаем КАРТОЧКУ, а не <li>. Карточка — это a.item-a: на ней
   фон, рамка, тень, цветной край и стрелка, и все они её дети, значит
   гаснут вместе с ней. На самом <li> не нарисовано ничего.
   &#9888;&#65039; Это оформление, а не запрет. Закрывает урок сам GetCourse: до
   срока он не пустит внутрь. Здесь мы только не даём закрытому уроку
   выглядеть как открытый.
   Проверено на «лайфхаках для ЕГЭ» 935812628: все три урока приходят с
   классом user-state-not_reached, до правки opacity у них был 1. */
.enl-simple-lessons ul.lesson-list > li.user-state-not_reached > a.item-a {
  opacity: var(--enl-simple-dim-locked) !important;
}
/* --- 2.4. Цветной край справа со стрелкой ---
   &#9888;&#65039; ЗДЕСЬ ГЛАВНОЕ ОТЛИЧИЕ ОТ СТАРОГО ФАЙЛА. Там цвет края означал
   состояние: оливковый — сделано, голубой — ждут действия, жёлтый —
   просто открыт. Здесь он не означает ничего и чередуется по порядку,
   как полоса на карточках тренингов. Так и задумано. */
.enl-simple-lessons ul.lesson-list > li > a.item-a::before {
  content:        "" !important;
  position:       absolute !important;
  top:            0 !important;
  right:          0 !important;
  bottom:         0 !important;
  width:          78px !important;
  background:     var(--enl-simple-edge-1) !important;
  border-radius:  0 17px 17px 0 !important;
}
.enl-simple-lessons ul.lesson-list > li:nth-child(even) > a.item-a::before {
  background: var(--enl-simple-edge-2) !important;
}
.enl-simple-lessons ul.lesson-list > li > a.item-a::after {
  content:          "→" !important;
  position:         absolute !important;
  top:              50% !important;
  right:            22px !important;
  display:          flex !important;
  align-items:      center !important;
  justify-content:  center !important;
  width:            34px !important;
  height:           34px !important;
  color:            var(--enl-simple-text) !important;
  background:       var(--enl-simple-card) !important;
  border-radius:    50% !important;
  font-size:        20px !important;
  line-height:      1 !important;
  transform:        translateY(-50%) !important;
}
/* =========================================================================
   3. «ЗАКРЫТО»  ·  класс enl-blocked  ·  ДОПОЛНИТЕЛЬНЫЙ
   =========================================================================
   ЧТО ДЕЛАЕТ
   Приглушает блок и вешает замок. Внутрь ничего не нажимается.
   &#9888;&#65039; ЭТО МОДИФИКАТОР, А НЕ ОФОРМЛЕНИЕ. Он не задаёт ни одного свойства
   вида: ни фона, ни шрифта, ни рамок, ни отступов, ни сетки. Поэтому
   ставится ВТОРЫМ классом к любому уже работающему — своему или чужому:
       enl-simple-trainings enl-blocked
       enl-hard-page enl-blocked
       enl-blocked                      (сам по себе тоже работает)
   ПОЧЕМУ ИМЕННО ПЕЛЕНА, А НЕ opacity НА БЛОКЕ
   opacity на блоке сделал бы полупрозрачным ВСЁ внутри, включая сам
   замок — он вышел бы бледным и мутным. Плюс opacity меняет свойство
   самого блока, а мы обещали ничего не подменять.
   Пелена — отдельный слой поверх содержимого: полупрозрачный
   прямоугольник цвета страницы. Оформление под ним остаётся ровно
   таким, каким было, просто видно его через дымку. Замок лежит НАД
   пеленой и потому чёткий.
   &#9888;&#65039; ЕДИНСТВЕННОЕ, ЧТО КЛАСС ВСЁ-ТАКИ МЕНЯЕТ У БЛОКА — position:
   relative. Без этого пелена растянется не по блоку, а по всей
   странице. Для обычного блока-контейнера это безобидно: relative
   оставляет его на том же месте в потоке. Задеть может ровно один
   случай — если внутри блока есть элемент с position: absolute,
   который раньше отсчитывался от более дальнего предка: теперь он
   будет отсчитываться от этого блока. Если такое встретится, скажи —
   решается отдельно, без отказа от пелены.
   &#9888;&#65039; Второе ограничение честно: пелена и замок сделаны на ::before и
   ::after самого блока. Если у блока уже есть свои ::before/::after,
   они будут заменены. На блоках-контейнерах GetCourse их нет.
   ========================================================================= */
.enl-blocked {
  /* Размер замка. Меняется здесь, в одном месте. */
  --enl-blocked-lock: 56px;
  /* Плотность дымки. 0.62 — читается, что под ней, но нажать не тянет. */
  --enl-blocked-veil: rgba(253, 252, 243, 0.62);
  position: relative !important;
}
/* --- Пелена --- */
.enl-blocked::before {
  content:          "" !important;
  position:         absolute !important;
  top:              0 !important;
  right:            0 !important;
  bottom:           0 !important;
  left:             0 !important;
  z-index:          5 !important;
  background:       var(--enl-blocked-veil) !important;
  border-radius:    inherit !important;
  pointer-events:   auto !important;
}
/* --- Замок ---
   Тот же SVG, что у закрытой секции аккордеона, знак в знак: круг
   #292929 с прозрачностью .07, дужка и корпус #888985. Изменён только
   размер — здесь он не значок у заголовка, а единственная метка на
   целом блоке.
   &#9888;&#65039; Замок не перехватывает нажатия сам: pointer-events: none. Их
   перехватывает пелена. Иначе на замке курсор вёл бы себя иначе, чем
   рядом с ним, и это выглядело бы как ошибка. */
.enl-blocked::after {
  content:              "" !important;
  position:             absolute !important;
  top:                  50% !important;
  left:                 50% !important;
  z-index:              6 !important;
  width:                var(--enl-blocked-lock) !important;
  height:               var(--enl-blocked-lock) !important;
  transform:            translate(-50%, -50%) !important;
  background-image:     url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'%3E%3Ccircle cx='16' cy='16' r='16' fill='%23292929' fill-opacity='.07'/%3E%3Cpath d='M12 14v-2.5a4 4 0 0 1 8 0V14' fill='none' stroke='%23888985' stroke-width='2.3' stroke-linecap='round'/%3E%3Crect x='9.5' y='13.5' width='13' height='10' rx='2' fill='%23888985'/%3E%3C/svg%3E") !important;
  background-size:      100% 100% !important;
  background-repeat:    no-repeat !important;
  background-position:  center !important;
  pointer-events:       none !important;
}
/* --- Нажать нельзя ---
   Пелена уже перехватывает нажатия, но полагаться на один заслон
   нельзя: у чего-нибудь внутри может оказаться свой z-index выше
   пелены, и оно снова станет кликабельным. Отключаем ссылки и кнопки
   прямо, а курсор возвращаем к обычному — «палец» на неработающей
   ссылке обещает то, чего не будет. */
.enl-blocked a,
.enl-blocked button,
.enl-blocked input,
.enl-blocked select,
.enl-blocked textarea {
  pointer-events: none !important;
  cursor:         default !important;
}
/* =========================================================================
   4. ЗАКРЫТ ОДИН ПОДТРЕНИНГ  ·  класс enl-lock-trainings  ·  ДОПОЛНИТЕЛЬНЫЙ
   =========================================================================
   ЗАЧЕМ ОТДЕЛЬНО ОТ РАЗДЕЛА 3
   enl-blocked закрывает БЛОК целиком. Здесь нужно другое: список
   открыт, а закрыт один подтренинг внутри него. Класс на блок повесить
   можно, на строку — нет: строки рисует GetCourse, полей у них нет.
   Зацепка есть в самой разметке, замерено 01.09.2026 на боевом:
       <tr class="training-row" data-training-id="935799527">
   По этому числу CSS и целится. Значит вопрос «может по id тренинга?»
   был верным — так и делаем.
   ВЫГЛЯДИТ ТОЧНО ТАК ЖЕ, КАК В РАЗДЕЛЕ 3
   Та же дымка цвета страницы, тот же замок тем же SVG, по центру
   карточки. Разница только в том, что накрывается: там весь блок,
   здесь одна карточка.
   &#9888;&#65039; SVG замка лежит в файле ДВАЖДЫ — в разделе 3 и здесь. У CSS нет
   способа сослаться на кусок другого правила. Будешь менять форму
   замка — меняй в обоих местах, иначе разъедутся.
   КАК ВКЛЮЧИТЬ
   1. На блок списка добавить класс enl-lock-trainings ВТОРЫМ, к тем,
      что уже стоят. Оформление он не подменяет:
          enl-simple-trainings enl-lock-trainings
          какой-угодно-свой   enl-lock-trainings
   2. В список ниже вписать id закрытых подтренингов — по строке на
      каждый. Id виден в адресе подтренинга:
          /teach/control/stream/view/id/935799527  →  935799527
   &#9888;&#65039; ЧЕГО ЭТО НЕ ДЕЛАЕТ. Мышью карточка не открывается — дымка ловит
   нажатие. Но ссылка под ней остаётся ссылкой: до неё можно дойти
   клавишей Tab и нажать Enter. Это оформление, а не ограничение
   доступа: настоящий доступ закрывается настройками GetCourse.
   Нужно жёстко — скажи, добавлю второе правило с тем же списком id.
   ========================================================================= */
.enl-lock-trainings {
  --enl-lock-tr-lock: 56px;
  --enl-lock-tr-veil: rgba(253, 252, 243, 0.62);
}
/* Ячейка становится точкой отсчёта для дымки. Смещений не задаём —
   relative ничего не двигает, только даёт дымке от чего оттолкнуться.
   Правилу не нужен список id: лишним оно быть не может. */
.enl-lock-trainings .stream-table tr.training-row > td {
  position: relative !important;
}
/* ▼▼▼▼▼▼▼▼▼ СПИСОК ЗАКРЫТЫХ ПОДТРЕНИНГОВ — ПРАВИТСЯ ТОЛЬКО ЗДЕСЬ ▼▼▼▼▼▼▼▼▼
   Одна строка — один подтренинг. У последней строки запятой НЕТ,
   после неё сразу идёт «{».
   Образец строки, копировать целиком вместе с запятой:
       .enl-lock-trainings tr.training-row[data-training-id="ЧИСЛО"] > td::after,
*/
.enl-lock-trainings tr.training-row[data-training-id="0000000000"] > td::after,
.enl-lock-trainings tr.training-row[data-training-id="0000000001"] > td::after {
/* ▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲ КОНЕЦ СПИСКА ▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲ */
  content:  "" !important;
  position: absolute !important;
  top:      0 !important;
  right:    0 !important;
  bottom:   0 !important;
  left:     0 !important;
  z-index:  5 !important;
  /* Дымка и замок одним фоном: цвет — нижним слоем, картинка — верхним.
     Так весь эффект помещается в одно правило, и список id приходится
     писать один раз, а не трижды. */
  background-color:     var(--enl-lock-tr-veil) !important;
  background-image:     url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'%3E%3Ccircle cx='16' cy='16' r='16' fill='%23292929' fill-opacity='.07'/%3E%3Cpath d='M12 14v-2.5a4 4 0 0 1 8 0V14' fill='none' stroke='%23888985' stroke-width='2.3' stroke-linecap='round'/%3E%3Crect x='9.5' y='13.5' width='13' height='10' rx='2' fill='%23888985'/%3E%3C/svg%3E") !important;
  background-repeat:    no-repeat !important;
  background-position:  center !important;
  background-size:      var(--enl-lock-tr-lock) var(--enl-lock-tr-lock) !important;
  /* Скругление берём у карточки, чтобы дымка не торчала углами.
     inherit здесь не годится: у td своего скругления нет. */
  border-radius: 20px !important;
  /* Дымка ловит нажатие на себя — карточка под ней не открывается. */
  pointer-events: auto !important;
  cursor:         default !important;
}
/* =========================================================================
   5. УЗКИЕ ЭКРАНЫ
   =========================================================================
   &#9888;&#65039; Проверять на 390 обязательно: на телефоне ломается не то же самое,
   что на компьютере. Здесь только то, без чего вид разъезжается.
   ========================================================================= */
@media (max-width: 767px) {
  .enl-blocked {
    --enl-blocked-lock: 44px;
  }
  .enl-lock-trainings {
    --enl-lock-tr-lock: 44px;
  }
  .enl-simple-trainings .stream-table > tbody {
    grid-template-columns: minmax(0, 1fr) !important;
    gap: 16px !important;
  }
  .enl-simple-trainings .stream-table > tbody > tr.training-row > td > a {
    min-height: 0 !important;
    padding:    28px 20px 20px !important;
  }
  .enl-simple-trainings .stream-table > tbody > tr.training-row .stream-title {
    font-size: 22px !important;
  }
  .enl-simple-lessons ul.lesson-list > li > a.item-a {
    min-height: 0 !important;
    padding:    16px 66px 16px 18px !important;
    gap:        14px !important;
  }
  .enl-simple-lessons ul.lesson-list > li > a.item-a::before {
    width: 54px !important;
  }
  .enl-simple-lessons ul.lesson-list > li > a.item-a::after {
    right:  12px !important;
    width:  30px !important;
    height: 30px !important;
  }
  .enl-simple-lessons ul.lesson-list .link.title {
    font-size: 19px !important;
  }
}

.enl-simple-lessons ul.lesson-list .description:not([data-enl-descr]) {
  display: none !important;
}