/* Мир игры на весь сайт (web/game-fx.js, владелец 25.10): пока карточка игры выбрана мышью, фон сайта —
   настоящие кадры игры (или обложка с наездом камеры) + анимация игры на весь экран. Под содержимым, клики не перехватывает. */
.gw { position: fixed; inset: 0; z-index: -1; pointer-events: none; overflow: hidden; opacity: 0;
    transition: opacity 0.7s cubic-bezier(0.16, 1, 0.3, 1); }
.gw.on { opacity: 1; }
.gw video, .gw-still { position: absolute; inset: -3%; width: 106%; height: 106%; max-width: none; object-fit: cover;   /* без max-width:none общее img/video{max-width:100%} обрезало ролик — справа серая полоса */
    filter: saturate(1.12) brightness(1); transform: scale(1.04); transition: transform 8s linear; }
.gw.on video, .gw.on .gw-still { transform: scale(1); }
.gw-still { animation: gw-kenburns 14s ease-in-out infinite alternate; }
@keyframes gw-kenburns { from { transform: scale(1.04) translate(0, 0); } to { transform: scale(1.14) translate(-2%, -1.5%); } }
/* Затемнение по краям и снизу — текст страницы читается на любом мире */
.gw::after { content: ''; position: absolute; inset: 0;
    background: radial-gradient(110% 95% at 50% 50%, transparent 55%, rgba(10,10,13,0.45)),
                linear-gradient(180deg, rgba(10,10,13,0.35), transparent 14%, transparent 86%, rgba(10,10,13,0.35)); }
.gw-fx { position: absolute; inset: 0; width: 100%; height: 100%; z-index: 1; opacity: 0.9; }
/* Пока открыт мир — обычный фон-«жидкость» гаснет, чтобы не спорил */
.gw-active .page-fx { opacity: 0; transition: opacity 0.7s ease; }
.page-fx { transition: opacity 0.7s ease; }
@media (prefers-reduced-motion: reduce) { .gw { display: none; } }

/* «Как фильм» (владелец 25.10): пока выбрана игра, её мир встаёт ПОВЕРХ сайта (z-index 4); над ним — только блок
   с выбранной карточкой (z-index 5) и меню. Выбранная карточка — прозрачное окно в мир (как было у Kernel),
   остальные карточки и заголовок блока приглушены. Только мышь: на телефоне мира нет. */
.gw.on, .gw.out { z-index: 4; }
/* уход мыши (владелец 27.10: «всё очень резко, как будто лагает»): мир плавно гаснет поверх сайта — слой не прыгает под содержимое */
.gw.out { opacity: 0; transition: opacity 0.4s cubic-bezier(0.25, 0.46, 0.45, 0.94); }
.gw-active main > :has(.game.fx-on) { position: relative; z-index: 5; }
/* заголовок и подпись блока — совсем скрыты (на 0.1 они просвечивали сквозь кадры игры); соседние карточки — приглушены */
.gw-active main > :has(.game.fx-on) :is(.head, .btn-ghost, .rail-btn, .gs-bg, .filters) { opacity: 0; transition: opacity 0.35s ease-out; }
.gw-active main > :has(.game.fx-on) .game:not(.fx-on) { opacity: 0.14; }
/* кнопка «Ver los 25 escenarios» — у портала своё правило opacity посильнее (.portal.on … .wrap > .btn), перебиваем его */
.gw-active .portal.on .games-stage .wrap > .btn { opacity: 0; }
.game { transition: transform 0.6s var(--ease), border-color 0.4s, opacity 0.4s ease-out, background-color 0.4s ease-out; }
.rail-btn, .gs-bg { transition: opacity 0.4s ease-out; }
.gw-active .game.fx-on { background-color: transparent; border-color: rgba(255,255,255,0.5);
    box-shadow: 0 0 0 1px rgba(255,255,255,0.2), inset 0 0 50px rgba(255,255,255,0.06), 0 40px 80px -40px rgba(0,0,0,0.7); }
.gw-active .game.fx-on .game-img { background: transparent; }
.gw-active .game.fx-on .game-img img { opacity: 0; }
.game .game-img img { transition: opacity 0.4s ease-out, transform 1.2s var(--ease); }
/* текст карточки читается на любом кадре: тень под буквами, без сплошной подложки */
.gw-active .game.fx-on :is(.tc-body, .game-body, .tc-rank, .tc-genre) { text-shadow: 0 2px 14px rgba(0,0,0,0.85), 0 0 2px rgba(0,0,0,0.6); }
.gw-active .game.fx-on .game-body { background: linear-gradient(180deg, transparent, rgba(8,8,10,0.55)); }
