/* Живой фон игровых экранов — js/stage-bg.js. Слои фиксированы на всё окно и
   не ловят кликов; содержимое комнаты лежит выше (.vx-room в game.css). */
.vx-stagebg{position:fixed;inset:0;z-index:0;pointer-events:none;overflow:hidden;--mx:-9999px;--my:-9999px}
.vx-stagebg canvas{position:absolute;inset:0;width:100%;height:100%}

/* Прожектор — тёплое пятно под курсором; только с мышью и не на записи. */
.vx-stagebg__spot{position:absolute;inset:0;opacity:1;transition:opacity .4s;
  background:radial-gradient(420px circle at var(--mx) var(--my), rgba(245,173,69,.09), transparent 60%)}
.vx-stagebg--calm .vx-stagebg__spot{opacity:0}
@media (pointer:coarse){.vx-stagebg__spot{display:none}}

/* Плёнка: зерно еле заметно, виньетка дышит. */
.vx-stagebg__grain{position:absolute;inset:-50%;opacity:.045;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='160' height='160'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.9' numOctaves='2' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E");
  animation:vx-stagebg-grain .6s steps(4) infinite}
@keyframes vx-stagebg-grain{0%{transform:translate(0,0)}25%{transform:translate(-5%,3%)}50%{transform:translate(4%,-4%)}75%{transform:translate(-3%,-2%)}100%{transform:translate(2%,5%)}}

.vx-stagebg__vig{position:absolute;inset:0;
  background:radial-gradient(ellipse at center, rgba(245,173,69,.07) 0%, transparent 50%, rgba(0,0,0,.7) 100%);
  animation:vx-stagebg-breathe 7s ease-in-out infinite alternate}
@keyframes vx-stagebg-breathe{to{opacity:.6;transform:scale(1.06)}}

/* Царапина — медленно проплывает через весь экран (~11 с). Запускает JS. */
.vx-stagebg__scratch{position:absolute;top:-5%;bottom:-5%;left:-10px;width:2px;opacity:0;filter:blur(.4px);
  background:linear-gradient(transparent, rgba(255,230,190,.2) 20%, rgba(255,230,190,.09) 60%, transparent)}
.vx-stagebg__scratch--run{animation:vx-stagebg-scratch 11s linear forwards}
@keyframes vx-stagebg-scratch{0%{left:-1%;opacity:0}6%{opacity:.9}50%{opacity:.6}94%{opacity:.9}100%{left:101%;opacity:0}}

/* «Уменьшить движение» — фон замирает целиком, прожектор за курсором тоже. */
@media (prefers-reduced-motion:reduce){
  .vx-stagebg__grain,.vx-stagebg__vig{animation:none}
  .vx-stagebg__scratch,.vx-stagebg__spot{display:none}
}
