/* Тёмная тема — общий слой.

   Подключается поверх ядра на страницах, которые `lgf_is_dark()` считает
   тёмными, и перекрашивает то, что ядро рисует светлым: шапку, подвал,
   карточки, заголовки секций, крошки, кнопки.

   Палитра та же, что на тёмной главной (`pages/home-dark.css`). Значения
   продублированы намеренно: главная утверждена клиентом и её файл мы не
   трогаем. Когда тёмной станет большая часть сайта, объявление уедет сюда
   одно на всех, а `home-dark.css` останется только со своими блоками `.d*`.

   ⚠️ Токены объявлены на `body`, а не на внутренней обёртке. Шапка и подвал
   лежат вне любой обёртки шаблона, а `var()` с именем, которого нет в области
   видимости, — это не «значение по умолчанию», а недействительное свойство:
   подвал терял и свой фон из ядра, и тёмный, оставаясь белым по белому.
   На этом уже обожглись на главной, см. журнал 2026-09-07. */

body.is-dark{
  /* Основа не чёрная, а глубокая ночная синь: чистый чёрный рядом с синим
     читается как «выключенный экран», а не как тёмная тема. */
  --d-bg:#070C1A;
  --d-bg-2:#0C1428;          /* приподнятая поверхность */
  --d-bg-3:#111B36;          /* карточка */
  --d-line:rgba(126,158,255,.16);
  --d-line-2:rgba(126,158,255,.28);

  --d-text:#E7ECF9;
  --d-muted:#FFFFFF;         /* по просьбе клиента второстепенный текст белый */

  /* Акцент ярче фирменного #3A5DAE: на тёмном фоне #3A5DAE даёт около 3.2:1 —
     хватит на рамку, но не на текст. Для текста берём светлее. */
  --d-accent:#3D6BFF;
  --d-accent-text:#86A6FF;
  /* ⚠️ Заливка кнопки отдельным тоном. Белый текст на #3D6BFF даёт 4.43:1
     при норме 4.5 — замерено на отрендеренной странице, а не посчитано по
     токену. Глазу разницы нет, но норму надо держать: для заливок берём
     чуть глубже, для линий и значков остаётся #3D6BFF. */
  --d-accent-fill:#2F5BF0;
  --d-accent-fill-2:#2748D6;   /* наведение: глубже, а не светлее — светлее роняет контраст */

  --d-shadow:0 24px 60px rgba(0,0,0,.55);

  /* ------------------------------------------------ ПЕРЕОПРЕДЕЛЁННЫЕ ТОКЕНЫ

     Три токена ядра служат каждый ровно одному делу, поэтому их дешевле
     переопределить целиком, чем гоняться за полусотней селекторов: так
     покрываются и те компоненты, которых я не заметил глазами.
     Проверено по файлу перед правкой:
     · `--lgf-muted` — только текст (0 употреблений фоном);
     · `--lgf-tint`  — только фон  (0 употреблений цветом);
     · `--lgf-rule`  — рамки и фон-разделитель; единственное употребление
       цветом (слэш в крошках) перекрашено отдельным правилом ниже.
     ⚠️ `--lgf-blue` и `--lgf-blue-dark` НЕ трогаем: каждый работает и текстом,
     и заливкой (десять фонов у одного, четырнадцать у другого), и подмена
     обрушила бы подвал, плеер и кнопки. Их разбираем поимённо. */
  --lgf-muted:var(--d-muted);
  --lgf-tint:var(--d-bg-3);
  --lgf-rule:var(--d-line);
  --lgf-rule-strong:var(--d-line-2);
  /* ⚠️ `--border` объявлен на `:root` как `1px solid var(--lgf-rule)`, и сам
     он не пересчитается: `var()` внутри значения custom property подставляется
     там, где свойство ОБЪЯВЛЕНО, а не там, где используется. Объявляем заново. */
  --border:1px solid var(--d-line);

  background:var(--d-bg);
  color:var(--d-text);
  /* Полосы прокрутки, автозаполнение и прочее, что рисует сам браузер. */
  color-scheme:dark;
}

/* Рамка фокуса в ядре — фирменный #3A5DAE: на основе #070C1A это 3.2:1,
   а поверх светлой плашки логотипа, просвечивающей сквозь полупрозрачную
   шапку, она и вовсе тонет. Берём светлый акцент. */
body.is-dark :focus-visible{outline-color:var(--d-accent-text)}

/* --------------------------------------------------------------- ШАПКА */

/* ⚠️ У страницы без hero скрипт вешает `.is-stuck` сразу при загрузке
   (`lgf.js`: страница без `[data-hero]`), поэтому тёмная шапка нужна
   с первого кадра — на главной этого не видно, там есть hero.
   `color` задаём явно: `.nav__link::after` (черта под пунктом) и другие
   мелочи берут `currentColor`, и без этого они остались бы тёмно-синими
   на тёмном фоне — то есть невидимыми. */
body.is-dark .header.is-stuck{
  background:rgba(7,12,26,.82);
  -webkit-backdrop-filter:saturate(140%) blur(14px);
  backdrop-filter:saturate(140%) blur(14px);
  color:var(--d-text);
  border-bottom-color:var(--d-line);
  box-shadow:none
}
body.is-dark .header.is-stuck .header__logo{color:var(--d-text)}
body.is-dark .header.is-stuck .nav a{color:var(--d-text)}
body.is-dark .header.is-stuck .nav a:hover{color:var(--d-accent-text)}
body.is-dark .header.is-stuck .burger span{background:var(--d-text)}
body.is-dark .nav__sub{background:var(--d-bg-2);color:var(--d-text);border-color:var(--d-line);box-shadow:0 18px 40px rgba(0,0,0,.45)}
body.is-dark .nav__sub a{color:var(--d-text)}
body.is-dark .nav__sub a:hover,body.is-dark .nav__sub a[aria-current="page"]{color:var(--d-accent-text)}
body.is-dark .header.is-stuck .nav__sub a:hover,body.is-dark .header.is-stuck .nav__sub a[aria-current="page"]{color:var(--d-accent-text)}
/* ⚠️ Правило шапки весит (0,4,1) и перебивает общее наведение `body.is-dark
   .btn:hover` (0,3,1) — без своей пары кнопка Register не откликалась на
   наведение вовсе. Та же пара нужна и на тёмной главной. */
body.is-dark .header.is-stuck .header__cta{
  --btn-bg:var(--d-accent-fill);--btn-fg:#fff;--btn-bd:var(--d-accent-fill)
}
body.is-dark .header.is-stuck .header__cta:hover{
  --btn-bg:var(--d-accent-fill-2);--btn-bd:var(--d-accent-fill-2)
}

/* Мобильное меню и баннер cookie в ядре залиты фирменным #1E305C — рядом
   с основой #070C1A это выглядит светлой вставкой из другой темы. */
body.is-dark .menu{background:var(--d-bg)}
body.is-dark .cookie{background:var(--d-bg-2);border-top:1px solid var(--d-line)}

/* --------------------------------------------------------------- ПОДВАЛ */

body.is-dark .footer{background:var(--d-bg-2);border-top:1px solid var(--d-line)}

/* ---------------------------------------------------------- ТИПОГРАФИКА */

body.is-dark h1,body.is-dark h2,body.is-dark h3,
body.is-dark h4,body.is-dark h5,body.is-dark h6{color:var(--d-text)}
body.is-dark .lead{color:var(--d-muted)}
body.is-dark .eyebrow{color:var(--d-accent-text)}

/* Акцентная линия под заголовком секции нарисована тремя разными способами
   (фон, градиент у варианта в строку, выворотка на тёмной секции) — перекрыть
   надо все три, иначе на части заголовков она останется тёмно-синей. */
body.is-dark .section-head::after{background:var(--d-accent)}
body.is-dark .section-head--row::after{
  background-image:linear-gradient(var(--d-accent),var(--d-accent))
}

body.is-dark .breadcrumb,
body.is-dark .breadcrumb a{color:rgba(231,236,249,.72)}
body.is-dark .breadcrumb a:hover{color:var(--d-accent-text)}
body.is-dark .breadcrumb li + li::before{color:var(--d-line-2)}
body.is-dark .breadcrumb [aria-current]{color:var(--d-text)}

/* ------------------------------------------------------------- КАРТОЧКИ */

body.is-dark .card{background:var(--d-bg-3);border-color:var(--d-line)}
body.is-dark .card:hover{border-color:var(--d-line-2);box-shadow:var(--d-shadow)}
body.is-dark .card--tint{background:var(--d-bg-2)}
body.is-dark .card__title{color:var(--d-text)}
body.is-dark .card:hover .card__title{color:var(--d-accent-text)}
body.is-dark .card__meta,body.is-dark .card__excerpt{color:var(--d-muted)}
body.is-dark .card__arrow{color:var(--d-accent-text)}
/* Рамка фокуса висит на самой карточке, а не на ссылке внутри, поэтому
   общее правило выворотки до неё не достаёт. */
body.is-dark .card:has(.card__link:focus-visible){outline-color:var(--d-accent-text)}

/* ---------------------------------------------------------------- КНОПКИ */

/* Компонент берёт цвета из трёх переменных — перекрашиваем их, а не свойства. */
body.is-dark .btn{--btn-bg:var(--d-accent-fill);--btn-fg:#fff;--btn-bd:var(--d-accent-fill)}
body.is-dark .btn:hover{--btn-bg:var(--d-accent-fill-2);--btn-bd:var(--d-accent-fill-2)}
body.is-dark .btn--secondary{
  --btn-bg:transparent;--btn-fg:var(--d-text);--btn-bd:var(--d-line-2)
}
body.is-dark .btn--secondary:hover{--btn-bg:transparent;--btn-fg:#fff;--btn-bd:var(--d-accent)}

/* ⚠️ `body.is-dark .btn` весит (0,2,1) и перебивает модификаторы ядра,
   у которых всего один класс. Каждый модификатор объявляем заново тем же
   весом и **после** общего правила, иначе призрачная кнопка становится
   залитой: в баннере cookie «Decline» вставал таким же плотным блоком,
   как «Accept», и выбор переставал читаться. */
body.is-dark .btn--on-dark{--btn-bg:transparent;--btn-fg:var(--d-text);--btn-bd:var(--d-line-2)}
body.is-dark .btn--on-dark:hover{--btn-bg:transparent;--btn-fg:#fff;--btn-bd:var(--d-accent)}

/* Белая заливка под тёмную подложку. На тёмной странице белый блок кричит
   громче всего на экране, поэтому в контенте переводим её на акцент —
   кроме баннера согласия: там белый «Accept» против контурного «Decline»
   и есть вся иерархия выбора, и она уже проверена замером. */
body.is-dark .btn--light{--btn-bg:var(--d-accent-fill);--btn-fg:#fff;--btn-bd:var(--d-accent-fill)}
body.is-dark .btn--light:hover{--btn-bg:var(--d-accent-fill-2);--btn-bd:var(--d-accent-fill-2)}
body.is-dark .cookie .btn--light{
  --btn-bg:var(--lgf-white);--btn-fg:var(--lgf-blue-dark);--btn-bd:var(--lgf-white)
}
body.is-dark .cookie .btn--light:hover{--btn-bg:#E7ECF9;--btn-bd:#E7ECF9}

/* Кнопка подписки в подвале: в ядре белая заливка под фирменный тёмно-синий
   фон. Задаём явно, чтобы она не перекрашивалась общим правилом «по случаю». */
body.is-dark .subscribe .btn{--btn-bg:var(--d-accent-fill);--btn-fg:#fff;--btn-bd:var(--d-accent-fill)}
body.is-dark .subscribe .btn:hover{--btn-bg:var(--d-accent-fill-2);--btn-bd:var(--d-accent-fill-2)}

/* ------------------------------------------------------------------ ФОРМЫ */

/* Сообщение об ошибке в ядре — #B3261E, подобранный под белую форму.
   На подвале #0C1428 это 2.80:1 при норме 4.5. */
body.is-dark .field__error{color:#FFB4AB}
body.is-dark .field[data-invalid] .input,
body.is-dark .field[data-invalid] .textarea,
body.is-dark .field[data-invalid] .select{border-color:#FFB4AB}
body.is-dark .field__status{color:var(--d-accent-text)}
body.is-dark .field > label{color:var(--d-text)}
body.is-dark .field__help{color:var(--d-muted)}

/* ------------------------------------------------------- ПУСТОЕ СОСТОЯНИЕ */

body.is-dark .empty{border-color:var(--d-line)}
body.is-dark .empty__icon{color:var(--d-accent-text)}
body.is-dark .empty h2{color:var(--d-text)}
body.is-dark .empty .lead{color:var(--d-muted)}

/* ------------------------------------------------- ТЁМНАЯ СЕКЦИЯ ВНУТРИ */

/* `.section--dark` в ядре залита фирменным #1E305C. Это «тёмное» относительно
   белого; на основе #070C1A она читается как светлая синяя плашка. Переводим
   на приподнятую поверхность с линией сверху — тем же приёмом, что и блок
   регистрации на тёмной главной. */
body.is-dark .section--dark{
  background:var(--d-bg-2);color:var(--d-text);border-top:1px solid var(--d-line)
}
body.is-dark .section--dark h2,
body.is-dark .section--dark .stat{color:var(--d-text)}
body.is-dark .section--dark .eyebrow{color:var(--d-accent-text)}
body.is-dark .section--dark a:not(.btn){color:var(--d-text)}
body.is-dark .section--dark .section-head::after{background:var(--d-accent)}
body.is-dark .section--dark .section-head--row::after{
  background-image:linear-gradient(var(--d-accent),var(--d-accent))
}

/* ------------------------------------------------- ПЛАШКИ ЛОГОТИПОВ ПАРТНЁРОВ */

/* ⚠️ Логотипы партнёров — присланные файлы в собственных цветах: чёрный UBS,
   чёрный Boite d’Or, чёрный герб Citta di Lugano, красный S-GE, красно-оранжевый
   economiesuisse, золото-синий Swiss Diamond. Инвертировать их фильтром значит
   испортить айдентику, положить на тёмное — потерять контуры. Поэтому плашка
   принудительно белая. Светлое поле под знаком читается как приём, а не как
   недоделка.
   Правило переехало сюда из pages/partners.css: блок «Other partners» стоит
   и на профиле партнёра, а стили архива туда не грузятся. Один компонент —
   один источник. */
body.is-dark .partner-card__logo{background:#fff;color:var(--lgf-blue-dark)}
body.is-dark .partner-card:hover .partner-card__logo{color:var(--lgf-blue)}

/* ------------------------------------------------------ ТОНИРОВАННАЯ СЕКЦИЯ */

/* `.section--tint` в ядре залита #F1F4FA. На основе #070C1A это белая полоса
   поперёк страницы, и весь текст в ней — уже выведенный в светлые тона общим
   слоем — исчезает: заголовок даёт 1.07:1. Переводим на приподнятую поверхность
   тем же приёмом, что и `.section--dark`.
   Шаг #070C1A → #0C1428 сам по себе едва читается, поэтому край полосы
   обозначаем линиями. Вес (0,2,1) выше, чем у `.section + .section--tint
   {border-top:0}` из ядра (0,2,0), — обнулить нашу рамку оно не сможет. */
body.is-dark .section--tint{
  background:var(--d-bg-2);
  border-top:1px solid var(--d-line);
  border-bottom:1px solid var(--d-line)
}

/* --------------------------------------------------------- ТЕКСТОВАЯ ССЫЛКА */

/* `.link` в ядре — фирменный #3A5DAE: 3.12:1 на основе и 2.93:1 на приподнятой
   поверхности при норме 4.5. Подчёркивание и стрелка берут currentColor
   и тянутся за цветом сами. */
body.is-dark .link{color:var(--d-accent-text)}

/* ------------------------------------------------------------------ ПЕЙДЖЕР */

/* Пейджер собран из белых плашек, между которыми просвечивает фон контейнера:
   `gap:1px` и есть разделитель. На тёмной странице это две светящиеся панели
   перед подвалом.
   Наведение уходит в тёмное, а не в светлое, — как и в светлой теме, где
   белая плашка на наведении темнеет до #F1F4FA. */
body.is-dark .pager{background:var(--d-line-2);border-block-color:var(--d-line)}
body.is-dark .pager__link{background:var(--d-bg-3);color:var(--d-text)}
body.is-dark .pager__link:hover{background:var(--d-bg-2)}
body.is-dark .pager__dir{color:var(--d-accent-text)}

/* -------------------------------------------------------- ПОДЛОЖКИ ПОД МЕДИА */

/* Светлая подложка #F1F4FA видна ровно до того, как придёт файл, — а кадры
   грузятся лениво и место под них зарезервировано. На тёмной странице это
   вспышка во всю ширину полосы.
   ⚠️ `.video` из общего правила исключён: у плеера своя заставка, и ещё —
   живой `<video>` несёт те же классы `video ratio ratio--16x9`, поэтому
   правило по `.ratio` перекрасило бы его чёрные поля (`video.video
   {background:#000}`, вес (0,1,1)) в синий. Кнопке-заставке фон задаём
   отдельно и по тегу. */
body.is-dark .ratio:not(.video),
body.is-dark .media-wide > img,
body.is-dark .pgallery__stage,
body.is-dark .pgallery__thumb-link{background:var(--d-bg-3)}
body.is-dark button.video{background:var(--d-bg-3)}

/* ---------------------------------------------------------------- ТИПОГРАФИКА */

/* Линейка ядра #D3DCEC даёт к тёмному фону 14.1:1 — светлая рейка ярче
   собственного текста страницы. Тот же дефект уже ловили на тёмной главной. */
body.is-dark hr{border-top-color:var(--d-line)}

/* Ссылка внутри прозы берёт цвет от базового `a` (#3A5DAE, 3.12:1), а на
   наведении ядро красит её в #1E305C — 1.52:1, слово пропадает и остаётся
   висеть одно подчёркивание.
   Исключения `.btn`/`.link` обязательны: без них правило перебивает --btn-fg
   и ломает кнопку внутри прозы — это уже было, журнал 2026-08-01. */
body.is-dark .prose a:not(.btn):not(.link){color:var(--d-accent-text)}
body.is-dark .prose a:not(.btn):not(.link):hover{color:#fff}

/* Маркеры списков: у нумерованного это текст (норма 4.5), у маркированного —
   единственный признак пункта, `list-style` снят. */
body.is-dark .prose ul li::before{background:var(--d-accent-text)}
body.is-dark .prose ol li::before{color:var(--d-accent-text)}

/* Шаблоны партнёров подписей под кадрами не выводят, но проза идёт через
   `the_content()`: картинка с подписью из редактора дала бы невидимый текст
   (1.31:1) под светлой линейкой. */
body.is-dark figure figcaption{color:var(--d-muted);border-top-color:var(--d-line)}

/* ------------------------------------------------------------------ СОЦСЕТИ */

/* В ядре рамка значка — #D3DCEC (14.1:1, ярче текста), сам значок — #3A5DAE
   (3.12:1): строка читается как пустые светлые квадраты.
   ⚠️ ВЕС. `body.is-dark .social--light a` — это (0,2,2), а наведения в ядре
   весят (0,2,1): без своей пары базовое правило перебило бы их, и на
   наведении остался бы белый фон из `.social a:hover` под светлым значком.
   Пару объявляем ПОСЛЕ. */
body.is-dark .social--light a{border-color:var(--d-line-2);color:var(--d-text)}
body.is-dark .social--light a:hover{
  background:var(--d-accent-fill);border-color:var(--d-accent-fill);color:#fff
}


/* ═════════════════════════════════════════════ ОСТАЛЬНОЙ САЙТ

   Ниже то, чего не было на страницах партнёров: спикеры, Newsroom, статья,
   архив, редакция, About, Contact, «спасибо», 404.

   Почти всё второстепенное перекрасилось само — через переопределённые выше
   токены `--lgf-muted`, `--lgf-tint` и `--lgf-rule`. Здесь остаётся три
   группы: текст на фирменном синем (2.9:1 — мало), поверхности, залитые
   белым в открытую (`--lgf-white`), и состояния контролов.

   ⚠️ ВЕС. `body.is-dark .x` — это (0,2,1), а `.x:hover` в ядре всего (0,2,0):
   объявив базовый цвет, мы молча перебиваем наведение и выбранное состояние.
   Поэтому у каждого компонента ниже состояния объявлены своей парой.
   Это уже четвёртый случай той же ошибки, см. журнал. */

/* ------------------------------------------------- ТЕКСТ НА ФИРМЕННОМ СИНЕМ

   `--lgf-blue` (#3A5DAE) на основе #070C1A — 2.93:1. Для рамки и заливки это
   годится (белый на нём 6.6:1), для текста нет. Текст уводим в светлый акцент,
   заливки оставляем — они и держат фирменный цвет на странице. */
body.is-dark .session-item__time,
body.is-dark .session-item__where,
body.is-dark .tab__date,
body.is-dark .card__source,
body.is-dark .archive-toc__num,
body.is-dark .edition__year,
body.is-dark .steps__num,
body.is-dark .map__pin,
body.is-dark .dest__arrow,
body.is-dark .enquiry__icon,
body.is-dark .enquiry__cta,
body.is-dark .share__list a,
body.is-dark .share__list button,
body.is-dark .pagination a,

/* ------------------------------------------------- ТЕКСТ НА ТЁМНО-СИНЕМ

   `--lgf-blue-dark` (#1E305C) — цвет основного текста на белом. На тёмном это
   1.52:1, то есть текста фактически нет. Сам токен не подменяем: он же служит
   заливкой подвала, плеера и тёмных секций. */
body.is-dark .card__role,
body.is-dark .card__org,
body.is-dark .profile__role,
body.is-dark .profile__org,
body.is-dark .mission__text,
body.is-dark .mission__principle-text,
body.is-dark .questions__final,
body.is-dark .map__addr,
body.is-dark .featured__title,
body.is-dark .enquiry__title,
body.is-dark .enquiry__name,
body.is-dark .dest__title,
body.is-dark .steps__title,
body.is-dark .edition__title,
body.is-dark .mini-person__name,
body.is-dark .filter{color:var(--d-text)}

/* Пара к `.filter`: правило выше весит (0,2,1) и перебило бы оба состояния
   из ядра — и наведение (0,2,0), и нажатую кнопку фильтра. */
body.is-dark .filter:hover{color:var(--d-accent-text);border-color:var(--d-line-2)}
body.is-dark .filter[aria-pressed="true"],
body.is-dark .filter.is-active,
body.is-dark .filter[aria-current="page"]{
  background:var(--d-accent-fill);border-color:var(--d-accent-fill);color:#fff
}

/* Вкладки программы: подпись выбранного дня в ядре — тёмно-синяя. */
body.is-dark .tab:hover{color:var(--d-accent-text)}
body.is-dark .tab[aria-selected="true"]{
  color:var(--d-text);border-bottom-color:var(--d-accent)
}

/* ------------------------------------------------- БЕЛЫЕ ПОВЕРХНОСТИ

   Всё это залито `--lgf-white` в открытую, а не через токен подложки. */
body.is-dark .contact-form,
body.is-dark .weekly-form,
body.is-dark .enquiry__item,
body.is-dark .dest__item{background:var(--d-bg-2)}

body.is-dark .mini-person__photo,
body.is-dark .choice input{background:var(--d-bg-3)}

/* Плитки обращений и разделов 404 — сетки с зазором 1 px: разделитель рисует
   подложка контейнера, и она уже перекрашена токеном `--lgf-rule`. */
body.is-dark .enquiry__item--note{background:var(--d-bg-3)}

/* Быстрые переходы в контакты на About лежат внутри тёмной секции и залиты
   белым на 22 % — поверх нашей основы это светлая плашка. */
body.is-dark .about-cta{background:var(--d-line)}
body.is-dark .about-cta__item{background:var(--d-bg-2)}

/* Наведение оставлено как в ядре — раздвигающиеся внутренние поля строки.
   ⚠️ Пробовали заменить его на акцентную подсветку строки (заливка
   `rgba(126,158,255,.12)`, белая подпись, стрелка в акцент) — **отклонено
   заказчиком**: на тёмном фоне подсветка читается плотной светлой плашкой
   во всю строку, а не откликом. Не возвращать без отдельной просьбы. */

/* Метка-тег: в ядре белая плашка с рамкой. Ссылка-тег и сплошной вариант
   заливаются акцентом — им нужна пара, иначе правило выше их перебьёт. */
body.is-dark .tag{
  background:var(--d-bg-3);border-color:var(--d-line-2);color:var(--d-text)
}
body.is-dark a.tag:hover,
body.is-dark .tag--solid{
  background:var(--d-accent-fill);border-color:var(--d-accent-fill);color:#fff
}

/* ------------------------------------------------- ФОРМЫ

   Поле ввода берёт подложку из `--lgf-tint` и уже потемнело, но фокус в ядре
   заливает поле белым, а рамка наведения — фирменный синий на 2.9:1. */
body.is-dark .input:focus,
body.is-dark .textarea:focus,
body.is-dark .select:focus{background:var(--d-bg-2);border-color:var(--d-accent)}
body.is-dark .input:hover,
body.is-dark .textarea:hover,
body.is-dark .select:hover{border-color:var(--d-accent)}
body.is-dark .input::placeholder,
body.is-dark .textarea::placeholder{color:rgba(231,236,249,.5)}
body.is-dark .choice:hover input{border-color:var(--d-accent)}
body.is-dark .choice input:checked{
  background:var(--d-accent-fill);border-color:var(--d-accent-fill)
}

/* ------------------------------------------------- ПАГИНАЦИЯ

   Цвет ссылок задан выше; здесь наведение и текущая страница — у обоих
   в ядре вес (0,2,0) и (0,3,0), базовое правило их перебивает. */
body.is-dark .pagination a:hover{color:#fff;border-color:var(--d-accent)}
body.is-dark .pagination .nav-links [aria-current="page"]{
  background:var(--d-accent-fill);border-color:var(--d-accent-fill);color:#fff
}

/* Кнопки «поделиться»: цвет значка задан выше, заливка на наведении — пара. */
body.is-dark .share__list a:hover,
body.is-dark .share__list button:hover{
  background:var(--d-accent-fill);border-color:var(--d-accent-fill);color:#fff
}

/* ------------------------------------------------- КАРТА НА КОНТАКТАХ

   Заглушка намеренно не изображает карту, а показывает адрес. Сетку рисует
   градиент по `--lgf-rule` — он уже перекрашен токеном. Кнопка на наведении
   в ядре уходит в тёмно-синий, то есть на тёмной странице почти исчезает. */
body.is-dark .map__cta{background:var(--d-accent-fill);color:#fff}
body.is-dark .map:hover .map__cta{background:var(--d-accent-fill-2)}

/* ------------------------------------------------- ПЛАШКИ ЛОГОТИПОВ

   Переехали из `pages/partners.css`: тот же компонент стоит в блоке
   «Partners of the … edition» на странице редакции, а стили архива
   партнёров туда не грузятся. Один компонент — один источник.

   ⚠️ Плашки остаются светлыми намеренно. Логотипы — готовые файлы в своих
   цветах, нарисованные под белое: инвертировать их фильтром значит испортить
   айдентику, а положить цветной знак на тёмное — потерять половину контуров.
   ⚠️ Наведение в ядре заливает плашку `--lgf-tint`, а он теперь тёмный —
   без этой пары плашка на наведении проваливалась бы в фон вместе со знаком. */
body.is-dark .tier__logo{
  background:#fff;border-color:transparent;color:var(--lgf-blue-dark)
}
body.is-dark a.tier__logo:hover{
  background:#fff;border-color:var(--d-accent);color:var(--lgf-blue)
}
/* Почётная строка: знак лежит на белой плашке по той же причине, что и в
   карточке, — три знака из шести чёрные и на тёмном пропадают, а перекрашивать
   присланные файлы нельзя. Название и подпись — светлые, они наш текст. */
body.is-dark .patronage__logo{background:#fff;border-color:transparent;color:var(--lgf-blue-dark)}
body.is-dark .patronage__logo:hover{border-color:var(--d-accent);color:var(--lgf-blue)}
body.is-dark .patronage__caption{color:var(--d-accent-text)}
body.is-dark .patronage__name{color:var(--d-text)}
body.is-dark .marquee__logo{background:#fff;border-color:transparent;color:var(--lgf-blue-dark)}
body.is-dark .marquee__logo:hover{background:#fff;border-color:var(--d-accent);color:var(--lgf-blue)}

/* ------------------------------------------------- МЕЛОЧИ

   Слэш между звеньями крошек — единственное место, где `--lgf-rule` работал
   цветом, а не рамкой: после подмены токена он стал почти невидим. */
body.is-dark .breadcrumb li + li::before{color:var(--d-line-2)}
body.is-dark .speakers-search__icon{color:var(--d-muted)}
body.is-dark .service__mark{background:var(--d-bg-3);color:var(--d-accent-text)}
body.is-dark .article-aside__box{border-color:var(--d-line)}
body.is-dark .pullquote{border-left-color:var(--d-accent)}
body.is-dark .stats__item{border-top-color:var(--d-accent)}

/* Контакты: плитка обращений — ссылка целиком, а строки реквизитов ведут
   почтой. В ядре обе окрашены фирменным синим, а наведение у реквизита
   уходит в тёмно-синий, то есть на тёмной странице ссылка гаснет. */
body.is-dark .enquiry__link{color:var(--d-accent-text)}
body.is-dark .contact-row a,
body.is-dark .contact-row .icon{color:var(--d-accent-text)}
body.is-dark .contact-row a:hover{color:#fff}

/* ------------------------------------------------- ШАПКА ПОВЕРХ КАДРА

   ⚠️ Дефект старше тёмной темы, но виден именно здесь. Пока под шапкой
   стоит первый экран с фотографией, она прозрачная и набрана белым —
   а кадр редакции 2025 снят днём. Замер по пикселям: пункты меню
   2.17–4.01:1 при норме 4.5, «Skip to content» 3.18.
   Скрим ядра на самом кадре не помогает: он намеренно выходит на плато
   только к 20 % высоты, чтобы верхняя кромка кадра оставалась светлой, —
   а шапка сидит ровно в этих верхних 20 %.
   Поэтому гасим не кадр, а полосу под шапкой: снизу она растворяется,
   и отдельной плашки не читается.
   ⚠️ Только на тёмных страницах: тёмная главная утверждена клиентом
   вместе со своим первым экраном, и трогать его ради этого незачем. */
body.is-dark .header:not(.is-stuck)::before{
  content:'';position:absolute;inset:0;pointer-events:none;z-index:-1;
  background:linear-gradient(to bottom,
    rgba(7,12,26,.72) 0%, rgba(7,12,26,.58) 62%, rgba(7,12,26,0) 100%)
}

/* ------------------------------------------------- ФОРМА РЕГИСТРАЦИИ

   ⚠️ Это БЕЛАЯ карточка на тёмной странице — единственный такой остров.
   Общий слой её чуть не сломал: `body.is-dark .field > label` весит (0,2,2)
   и перебил бы `.register-form .field > label` (0,2,1) из ядра, то есть
   подписи полей стали бы светлыми по белому. Сегодня форма стоит только
   на главной, где класса `is-dark` нет, и дефект не виден — но появится
   в тот день, когда форму поставят куда-то ещё. Возвращаем карточке её
   собственные цвета.
   ⚠️ Синюю кнопку ядро задаёт через `!important`, поэтому перебить её можно
   только своим `!important` и большим весом. Цвет — тот же акцент, что
   у всех кнопок тёмной темы, иначе форма выпадает из палитры страницы. */
body.is-dark .register-form .field > label,
body.is-dark .register-form .choice span,
body.is-dark .register-form .field__help{color:var(--lgf-blue-dark)}
/* ⚠️ Значения литералами, а не токенами: `--lgf-tint` и `--lgf-rule-strong`
   на тёмной странице переопределены выше и отдали бы тёмное — а поле стоит
   на белой карточке. Это те же величины, что в `:root` ядра. */
body.is-dark .register-form .input,
body.is-dark .register-form .textarea,
body.is-dark .register-form .select{
  background:#F1F4FA;border-color:rgba(30,48,92,.55);color:var(--lgf-blue-dark)
}
body.is-dark .register-form .btn{
  --btn-bg:var(--d-accent-fill) !important;--btn-fg:#fff !important;--btn-bd:var(--d-accent-fill) !important
}
body.is-dark .register-form .btn:hover{
  --btn-bg:var(--d-accent-fill-2) !important;--btn-bd:var(--d-accent-fill-2) !important
}

/* Полоса «программа ещё не объявлена» на тёмных страницах. */
body.is-dark .tba{background:var(--d-bg-2);border-color:var(--d-line)}
body.is-dark .tba__flag{background:var(--d-accent-fill);color:#fff}
body.is-dark .tba__title{color:var(--d-text)}
body.is-dark .tba__meta{color:var(--d-muted)}
body.is-dark .tba__link{color:var(--d-accent-text)}
body.is-dark .tba__link:hover{color:#fff}

/* ------------------------------------------- НОВЫЕ БЛОКИ СТРАНИЦЫ «О ФОРУМЕ» */
/* Номер вопроса — акцентом, но светлым: фирменный #3A5DAE на основе #070C1A
   даёт 1.5:1 и пропадает. Текст самих вопросов и коротких строк миссии
   берёт цвет от body, отдельного правила им не нужно. */
body.is-dark .questions__item::before{color:var(--d-accent-text)}

/* ⚠️ Звёздочка обязательного поля оставалась фирменной #3A5DAE: на основе
   #070C1A это 2.93:1 при норме 4.5. Дефект старше тёмной темы контактов —
   прежний замер его пропускал, элемент в один символ не попадал в выборку.
   Внутри белой карточки формы регистрации звёздочка остаётся фирменной:
   там она читается как бренд, и контраст на белом в норме. */
body.is-dark .field .req{color:var(--d-accent-text)}
body.is-dark .register-form .field .req{color:var(--lgf-blue)}

/* Состав совета: имя светлое, биография — второстепенный текст (он уже
   перекрашен подменой --lgf-muted), акцентная черта цитаты светлее
   фирменной: #3A5DAE на основе #070C1A почти пропадает. */
body.is-dark .board__name{color:var(--d-text)}
body.is-dark .board__name a:hover{color:var(--d-accent-text)}
body.is-dark .board-quote{border-left-color:var(--d-accent-text)}

/* Заголовок блока в упрощённой программе: фирменный синий на тёмном не проходит по контрасту. */
body.is-dark .session-group{color:var(--d-accent-text);border-color:var(--d-line)}
