/* Мир игры на весь сайт (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%} обрезало ролик — справа серая полоса */
    transform: scale(1.04); transition: transform 8s linear; }   /* без filter: saturate на ролике во весь экран — лишний проход видеокарты на каждый кадр (окно 7, 28.10) */
.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%); } }
/* Затемнение поверх мира (scrim ~55–65 %): текст раздела читается и на светлых мирах (владелец 29.10: «текст не читается, когда играет видео») */
.gw::after { content: ''; position: absolute; inset: 0; z-index: 2;
    background: radial-gradient(110% 95% at 50% 50%, rgba(10,10,13,0.6) 45%, rgba(10,10,13,0.74)),
                linear-gradient(180deg, rgba(10,10,13,0.2), transparent 16%, transparent 84%, rgba(10,10,13,0.2)); }
.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):not(.game.fx-on *) { opacity: 0; transition: opacity 0.35s ease-out; }   /* кнопка «Reservar» в самой карточке остаётся (владелец 31.10: в карточке было пусто внизу) */
/* всё остальное в разделе с карточкой (game-fx.js hideAround: фото, лид, кнопки, соседние блоки) — гаснет, пока играет мир; возвращается вместе с ним */
.gw-off { opacity: 0 !important; transition: opacity 0.35s ease-out; }
.gw-back { transition: opacity 0.4s ease-out !important; }
/* остальные карточки — скрыты целиком (владелец 28.10), номера и подписи вместе с ними; навести мышь на соседнюю всё равно можно — она станет активной */
.gw-active main > :has(.game.fx-on) .game:not(.fx-on) { opacity: 0; }
/* кнопка «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; }
/* Выбранная карточка — непрозрачная, как в обычном виде (владелец 29.10: прозрачное «окно в мир» не читалось): своя обложка, тёмный фон, светлый текст */
.gw-active .game.fx-on { background-color: var(--aw-bg); border-color: rgba(255,255,255,0.5);
    box-shadow: 0 0 0 1px rgba(255,255,255,0.2), 0 40px 80px -40px rgba(0,0,0,0.7); }
.game .game-img img { transition: opacity 0.4s ease-out, transform 1.2s var(--ease); }
.gw-active .game.fx-on .game-body { background: var(--aw-bg); }
.gw-active .game.fx-on :is(.tc-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 main > :has(.game.fx-on) :is(.dv-note, .gp-scroll) { background: rgba(18, 18, 22, 0.9); border-color: rgba(255,255,255,0.14); color: rgba(255,255,255,0.92); }
.gw-active main > :has(.game.fx-on) :is(p, li, small):not(.game *, .dv-note *) { text-shadow: 0 1px 12px rgba(0,0,0,0.9), 0 0 2px rgba(0,0,0,0.7); }
/* Телефон: одна активная карточка ленты (по центру) — остальные затухают */
@media (hover: none) { .top-rail:has(.game.fx-on) .game:not(.fx-on) { opacity: 0.35; } }
