/*
  Универсальный автоматический тёмный режим для неадаптированной разметки —
  раздел 7.4 мастер-плана ("работает даже там, где не подстроено"). Приём —
  CSS filter: invert(), тот же, что использовали wp-dark-mode/
  wp-dark-mode-ultimate (sotiks-dark-mode их заменяет) — переворачивает
  яркость/цвет любой разметки внутри области действия, не требуя знать её
  конкретные селекторы (BuddyBoss, Elementor, FluentForms, WP core блоки,
  что угодно новое).

  Область действия — main.sotiks-content (обёртка обычного содержимого
  страницы во всех шаблонах темы, themes/sotiks-base/templates/*.html), а
  НЕ body/html целиком. Причина: filter на любом предке создаёт новый
  containing block для его position:fixed потомков (спека CSS) — весь App
  Shell (сайдбар/шапка, custom-left-sidebar-redesign) рендерится вне main
  через отдельный хук, поэтому не задет. Но собственные модалки SOTIKS
  Community (.modal-backdrop, position:fixed — composer/загрузка/создание
  группы) рендерятся ВНУТРИ main вместе с шорткодом — если инвертировать
  main на такой странице, их fixed-позиционирование сломается тем же
  образом. :not(:has(...)) ниже полностью исключает main из инверсии на
  любой странице с этими компонентами — без потери вида: они и так уже
  полностью адаптированы под tokens.css напрямую, инверсия им не нужна.

  .fd-root (flame-bookmarks, [flame_bookmarks]/[flame_dashboard]),
  .sotiks-notify-list-root (sotiks-notify, [sotiks_notifications]) и
  .stk-board (sotiks-tasks, [sotiks_tasks]) — та же причина: их разметка
  целиком на общих --fd-*/tokens.css переменных темы, уже смотрят на
  [data-theme="dark"] сами (sotiks-tasks — вообще напрямую переиспользует
  components.css темы, своих цветов не заводит); без этого исключения
  инверсия накладывалась поверх уже правильного тёмного цвета и
  переворачивала его обратно — текст выглядел чёрным вместо светлого. Для
  sotiks-tasks вдобавок критично из-за .modal-backdrop (position:fixed) —
  см. общее объяснение про containing block выше.

  .vktbd-fe (vkteams-bot-drive, [vktbd_dashboard]) в этом же списке по
  ДРУГОЙ причине: продакшен-сайт пока на теме BuddyBoss, не sotiks-base —
  этот плагин намеренно НЕ переиспользует tokens.css/components.css темы,
  у него полностью своя копия дизайна прямо в assets/frontend.css (см.
  doc-comment там), включая свою палитру только под светлую тему. Если
  main всё же попадёт под sotiks-base (страница когда-нибудь окажется на
  этой теме) — инверсия перекрасила бы уже собственные (нужные) цвета
  панели во что-то случайное, плюс сломала бы её .modal-backdrop тем же
  containing-block багом. Практического значения на BuddyBoss это
  исключение не имеет (сам этот файл там не подключается вообще), это
  просто корректность на случай будущего переезда темы.

  .smvk-delivery (vkteams-delivery-orders, [smvk_delivery_orders]) — та же
  причина: разметка переодета напрямую на components.css темы (sotiks-tokens/
  sotiks-components подключены как зависимости), уже корректно смотрит на
  [data-theme="dark"] сама; без исключения инверсия перекрашивала уже верные
  тёмные цвета обратно, а иконки (второй invert только для img/video/svg
  выше) то совпадали с остальным контентом, то нет — в зависимости от того,
  что именно уже было проинвертировано родителем.

  .icm-app (item-catalog-manager, [icm_catalog]) — та же причина: своя
  разметка алиасит все --icm-* переменные на токены темы и подключает
  sotiks-tokens/sotiks-components как зависимости, уже корректно смотрит на
  [data-theme="dark"] сама.

  Любой следующий адаптированный под токены (или иначе визуально
  самодостаточный) модуль, оказавшийся внутри main.sotiks-content, нужно
  добавлять в этот же список — иначе тот же баг повторится для него.

  :has() — Chrome 105+/Firefox 121+/Safari 15.4+; в более старых браузерах
  эта страховка просто не сработает (main останется неинвертированным),
  а не сломается — деградация постепенная, не критичная.

  Шаблон Fullscreen (sotiks-content--fullscreen, без базового класса
  sotiks-content) сознательно вне области действия — это edge-to-edge
  канва под полностью кастомную вёрстку (Elementor и т.п.), где риск
  наткнуться на свой fixed-элемент выше.
*/

html[data-theme="dark"] main.sotiks-content:not(:has(.scm-feed, .scm-groups, .scm-profile, .fd-root, .sotiks-notify-list-root, .stk-board, .vktbd-fe, .smvk-delivery, .icm-app, .ssp-app-root, .ssp-office-board, .rtt-directory, .rtt-workday, .rtt-workday-error, .ssp-mw, .ssp-ms, .ssp-mvo)) {
	filter: invert(1) hue-rotate(180deg);
}

/* Медиа внутри — вернуть к нормальному виду, иначе фото/видео выглядят как
   негатив (тот же двойной invert = отмена, приём стандартный для этой
   техники). */
html[data-theme="dark"] main.sotiks-content:not(:has(.scm-feed, .scm-groups, .scm-profile, .fd-root, .sotiks-notify-list-root, .stk-board, .vktbd-fe, .smvk-delivery, .icm-app, .ssp-app-root, .ssp-office-board, .rtt-directory, .rtt-workday, .ssp-mw, .ssp-ms, .ssp-mvo)) img,
html[data-theme="dark"] main.sotiks-content:not(:has(.scm-feed, .scm-groups, .scm-profile, .fd-root, .sotiks-notify-list-root, .stk-board, .vktbd-fe, .smvk-delivery, .icm-app, .ssp-app-root, .ssp-office-board, .rtt-directory, .rtt-workday, .ssp-mw, .ssp-ms, .ssp-mvo)) video,
html[data-theme="dark"] main.sotiks-content:not(:has(.scm-feed, .scm-groups, .scm-profile, .fd-root, .sotiks-notify-list-root, .stk-board, .vktbd-fe, .smvk-delivery, .icm-app, .ssp-app-root, .ssp-office-board, .rtt-directory, .rtt-workday, .ssp-mw, .ssp-ms, .ssp-mvo)) picture,
html[data-theme="dark"] main.sotiks-content:not(:has(.scm-feed, .scm-groups, .scm-profile, .fd-root, .sotiks-notify-list-root, .stk-board, .vktbd-fe, .smvk-delivery, .icm-app, .ssp-app-root, .ssp-office-board, .rtt-directory, .rtt-workday, .ssp-mw, .ssp-ms, .ssp-mvo)) canvas,
html[data-theme="dark"] main.sotiks-content:not(:has(.scm-feed, .scm-groups, .scm-profile, .fd-root, .sotiks-notify-list-root, .stk-board, .vktbd-fe, .smvk-delivery, .icm-app, .ssp-app-root, .ssp-office-board, .rtt-directory, .rtt-workday, .ssp-mw, .ssp-ms, .ssp-mvo)) iframe,
html[data-theme="dark"] main.sotiks-content:not(:has(.scm-feed, .scm-groups, .scm-profile, .fd-root, .sotiks-notify-list-root, .stk-board, .vktbd-fe, .smvk-delivery, .icm-app, .ssp-app-root, .ssp-office-board, .rtt-directory, .rtt-workday, .ssp-mw, .ssp-ms, .ssp-mvo)) svg {
	filter: invert(1) hue-rotate(180deg);
}

/* Store Shift Planner now consumes the shared tokens directly, including its
   own modals and fixed overlays. It must not use the legacy inversion shim. */
