/* Фоны независимы от темы: тема задаёт палитру и типографику, а
   data-background — сцену. Фон, совпадающий с темой, оставляет исходные
   эффекты темы; другой — заменяет сцену. Новый фон добавляется в
   backgroundNames (app.js) и одним блоком ниже. */

html[data-background-override="true"] body::after {
  background-color: var(--hub-background-color) !important;
  background-image: var(--hub-background-image) !important;
  background-position: var(--hub-background-position, center) !important;
  background-repeat: var(--hub-background-repeat, no-repeat) !important;
  background-size: var(--hub-background-size, cover) !important;
  content: "" !important;
  inset: 0;
  mask-image: none !important;
  opacity: 1 !important;
}

/* Атмосферный блик относится к выбранной теме, но с чужой сценой конфликтует.
   Погода Rain/Storm выбирается app.js по data-background. */
html[data-background-override="true"] body::before { content: none !important; }

html[data-background-motion="off"] body::before,
html[data-background-motion="off"] body::after,
html[data-background-motion="off"] .theme-atmosphere,
html[data-background-motion="off"] .theme-atmosphere::before,
html[data-background-motion="off"] .theme-atmosphere::after,
html[data-background-motion="off"] .theme-atmosphere * {
  animation: none !important;
  transition: none !important;
}

html[data-background-motion="off"] .rain,
html[data-background-motion="off"] .motes {
  display: none !important;
}

/* Свет сцены дышит на месте: медленнее у космоса, заметнее у огня. */
@keyframes scene-glow {
  0%, 100% { opacity: 0.24; transform: scale(1.01); }
  50% { opacity: 0.6; transform: scale(1.05); }
}
