/* Косметика из боевого пропуска (этап 2, 13.10.2026): рамка и титул у портрета в бою. */
/* 13.10 владелец: с рамкой энергия вылезала из панели — размер аватара прежний (112×128), титул стоит вместо подписи «Вы». */
.bv2 .bv2-ava.has-frame { width:112px; height:128px; clip-path:none; background:none; overflow:visible; }
/* 13.10 владелец (2): рамка в бою мелкая — рамка 148 px выходит за квадрат аватара, портрет внутри 104 px; высота панели прежняя. */
.bv2 .bv2-pp .tc-cut-body:has(> .bv2-ava.has-frame) { column-gap:24px; }
.bv2 .bv2-ava.has-frame > img:first-child { inset:auto; left:calc(50% - 52px); top:calc(50% - 52px); width:104px; height:104px; clip-path:none; z-index:0; }
.bv2 .bv2-ava.has-frame .bv2-ava-frame { position:absolute; inset:auto; left:calc(50% - 74px); top:calc(50% - 74px); width:148px; height:148px; object-position:50% 50%; object-fit:contain; clip-path:none; pointer-events:none; z-index:1; filter:drop-shadow(0 0 6px #000a); }
.bv2 .bv2-title { display:inline-block; margin:0 0 2px; padding:1px 9px; border:1px solid #c9a24f; background:linear-gradient(180deg,#2b2110cc,#0e0b06cc); color:#ffe39a; font-style:normal; font-size:10px; font-weight:900; letter-spacing:.12em; text-transform:uppercase; clip-path:polygon(6px 0,calc(100% - 6px) 0,100% 50%,calc(100% - 6px) 100%,6px 100%,0 50%); }
.mobile .bv2 .bv2-ava.has-frame { width:84px; height:84px; }
.mobile .bv2 .bv2-ava.has-frame > img:first-child { left:calc(50% - 35px); top:calc(50% - 35px); width:70px; height:70px; }
.mobile .bv2 .bv2-ava.has-frame .bv2-ava-frame { left:calc(50% - 50px); top:calc(50% - 50px); width:100px; height:100px; }

/* Досье карты → «Варианты арта» (этап 2): оригинал + варианты; свои включаются, чужие показывают, где получить. */
.cd-variant-grid { display:grid; grid-template-columns:repeat(auto-fill,minmax(150px,1fr)); gap:12px; margin-top:12px; }
.cd-variant { position:relative; display:flex; flex-direction:column; gap:6px; padding:6px; border:1px solid #2b5a69; background:#05121acc; clip-path:polygon(8px 0,100% 0,100% calc(100% - 8px),calc(100% - 8px) 100%,0 100%,0 8px); }
.cd-variant img { width:100%; aspect-ratio:3/2; object-fit:cover; }
.cd-variant-name { color:#e6f5ff; font-size:12px; font-weight:800; line-height:1.25; }
.cd-variant small { color:#8fb0bf; font-size:11px; line-height:1.3; }
.cd-variant.is-selected { border-color:#ffd46a; box-shadow:inset 0 0 0 1px #ffd46a, 0 0 14px #ffc24a44; }
.cd-variant.is-legendary { border-color:#ffb347; }
.cd-variant.is-locked img { filter:grayscale(.55) brightness(.6); }
.cd-variant-on { color:#ffe39a; font-size:11px; letter-spacing:.08em; text-transform:uppercase; }
.cd-variant .cd-variant-use { min-height:30px; font-size:11px; }

/* Стиль рамок карт «Заражение» (этап 2): ваши карты — ядовито-зелёное свечение; карты соперника не меняются.
   13.10 владелец: в коллекции карты налипали друг на друга — стиль менял позиционирование рамки (position:relative + споры ::after).
   Теперь только свечение (filter), раскладка карт не меняется. */
.look-infection tc-card-frame { filter:drop-shadow(0 0 4px #9dff6acc) drop-shadow(0 0 12px #3fbf2a77); }
.look-infection .opponent-card tc-card-frame, .look-infection .bv3-slot.red tc-card-frame { filter:none; }

/* 13.10 владелец: стол из пропуска тонул под затемнением боя (фон по умолчанию: яркость .42 + размытие). С надетым столом — видно стол. */
.bv2.has-table .bv2-bg img { filter:brightness(.88) saturate(1.08); }
.bv2.has-table .bv2-vig { opacity:.4; }
.bv2.has-table .bv3-felt { opacity:.3; }

/* 13.10 владелец (11): экран итога на ПК стоял в ячейке «справа от меню, под панелью», хотя меню и панель на нём скрыты —
   слева и сверху были пустые тёмные полосы. На экранах итога содержимое занимает весь экран. */
.desktop.app:is([data-route="MATCH_RESULT"],[data-route="MATCH_REWARD"]) { grid-template: 1fr / 1fr; }
.desktop.app:is([data-route="MATCH_RESULT"],[data-route="MATCH_REWARD"]) > main { grid-column:1; grid-row:1; }
.desktop.app:is([data-route="MATCH_RESULT"],[data-route="MATCH_REWARD"]) > main:has(> .tr-screen) { height:100vh; }

/* Аудит 14.10: под атакой — какие свои поправки уже учтены и когда они не сработают. */
.bv2 .bv2-bonus-note { display:block; margin-top:4px; max-width:250px; color:#ffd68a; font-size:11px; line-height:1.25; font-weight:700; }
.bv2 .bv2-bonus-note[hidden] { display:none; }
.bs-banner .bs-why { color:#ffe1a0; font-weight:700; letter-spacing:.02em; }
.bv3 .bv3-bonus-note { display:block; margin-top:8px; color:#ffd68a; font-size:12px; line-height:1.3; font-weight:700; }
.bv3 .bv3-bonus-note[hidden] { display:none; }

/* Аудит 14.10: «Пара в колоде» и шанс пары в руке — пояснение под связками фракций. */
.deck-synergy-hint { margin:8px 0 0; color:#8fb0bf; font-size:11px; line-height:1.35; }

/* 14.10 владелец: рамка 148 px наезжала на левый край панели — панель с рамкой 452×186, рамка целиком внутри, энергия на месте. */
.bv2 .bv2-pp.framed, .bv3 .bv2-pp.framed.me, .bv3 .bv2-pp.framed.red { width:452px; height:186px; }
.bv2 .bv2-pp.framed .tc-cut-body { padding:18px 26px 22px 40px; column-gap:30px; }
.bv2:not(.bv3) .bv2-pp.me.framed { top:660px; }

/* 14.10: лимит легендарных в колоде (2). */
.deck-legendary-limit { margin:8px 0 0; color:#ffd27a; font-size:12px; font-weight:700; }
.deck-legendary-limit.over { color:#ff8a7a; }

/* Облик рамок карт (14.10.2026): на картах в облике значок фракции и приёмы — внутри окна облика, не на рамке. */
.bv2 .bv2-card.skinned .bv2-emb { left:8.1%; top:8.4%; width:19%; }
.bv2 .bv2-card.skinned .bv2-abil { left:10%; right:10%; }

/* 14.10 владелец: длинное имя соперника («ПРИЗРАК · Стенд · Игрок 2») растягивало колонку — шкала здоровья и цифры
   уезжали за рамку панели. Колонка не шире панели, имя обрезается многоточием (полное — в подсказке). */
.bv2 .bv2-pp .tc-cut-body { grid-template-columns:112px minmax(0,1fr); }
.bv2 .bv2-pp .tc-cut-body > div:last-child { min-width:0; }
.bv2 .bv2-pp h3 { max-width:100%; }
/* 14.10 владелец: «СЦЕПКА» выталкивалась за рамку карты длинным названием умения («Восстановление»).
   Сцепка всегда целиком на месте, длинное умение сокращается многоточием (полное — в подсказке). */
.bv2 .bv2-abil { min-width:0; }
.bv2 .bv2-chip { min-width:0; max-width:100%; }
.bv2 .bv2-chip.link { flex:none; }
.bv2 .bv2-chip:not(.link) { flex:0 1 auto; overflow:hidden; }
.bv2 .bv2-chip:not(.link) > span { min-width:0; overflow:hidden; text-overflow:ellipsis; }

/* 14.10 владелец: экран итога без данных («Подводим итог боя…» / «Завершённый матч не найден») — в рамке игры. */
.match-result-screen.tc-result-wait { min-height:100%; display:grid; place-items:center; padding:24px 16px; background:radial-gradient(ellipse at 50% 40%,rgba(4,22,34,.6),rgba(1,5,9,.92)),url('/app/client/assets/ui/season-pass/season-bg-owner.png') 60% 22%/cover no-repeat; }
.tc-result-wait-box { --sp-cut:20px; --sp-bottom-cut:12px; --sp-band:5px; --sp-inner-cut:15px; --sp-inner-bottom-cut:8px; width:min(620px,100%); color:#e7f5fc; filter:drop-shadow(0 24px 60px #000); }
.tc-result-wait-box > .sp-glass { background:linear-gradient(180deg,#071824,#030b13); }
.tc-result-wait-box > .sp-body { padding:34px 30px 30px; text-align:center; display:flex; flex-direction:column; align-items:center; gap:10px; }
.tc-rw-kicker { margin:0; color:#61e7ff; font-weight:800; font-size:13px; letter-spacing:.14em; text-transform:uppercase; }
.tc-result-wait-box h1 { margin:0; color:#f3faff; font-weight:850; font-size:clamp(24px,2.6vw,34px); text-transform:uppercase; letter-spacing:.02em; }
.tc-rw-lead { margin:0; color:#aed9e7; font-size:14px; }
.tc-rw-spin { display:flex; gap:8px; margin:6px 0; }
.tc-rw-spin i { width:12px; height:12px; background:#3fe0ff; clip-path:polygon(50% 0,100% 50%,50% 100%,0 50%); animation:tcRw 1s ease-in-out infinite; box-shadow:0 0 8px #3fe0ff; }
.tc-rw-spin i:nth-child(2) { animation-delay:.15s; } .tc-rw-spin i:nth-child(3) { animation-delay:.3s; }
@keyframes tcRw { 50% { opacity:.25; transform:scale(.7); } }
.tc-rw-actions { margin-top:14px; }
.tc-rw-actions button { min-width:240px; min-height:46px; padding:10px 26px; border:0; border-top:1px solid #d6fbff; background:linear-gradient(180deg,#2cc6ea,#0b6f8c); color:#f2fdff; font:900 14px system-ui,Segoe UI,sans-serif; letter-spacing:.12em; text-transform:uppercase; cursor:pointer; clip-path:polygon(9px 0,100% 0,100% calc(100% - 9px),calc(100% - 9px) 100%,0 100%,0 9px); }
/* 14.10: бой закончился по таймеру до первого раунда — пустую панель «Ход боя · 0» не показываем. */
.tr-rounds:has(.tr-rounds-list:empty) { display:none; }

/* 14.10 владелец: видео города проявляется плавно поверх картинки, когда загрузилось (первый вход не ждёт 22 МБ). */
.city-scene video.city-video[data-lazy-video] { opacity:0; transition:opacity .8s ease; }
.tc-city-video-ready .city-scene video.city-video[data-lazy-video] { opacity:1; }
/* 14.10 владелец: при тряске в бою по краям мелькала пустота — во время тряски экран чуть больше (края всегда закрыты). */
@keyframes bs-shake { 0%, 100% { transform:none; } 20% { transform:translate(-6px, 3px) scale(1.02); } 40% { transform:translate(5px, -4px) scale(1.02); } 60% { transform:translate(-3px, 2px) scale(1.02); } 80% { transform:translate(2px, -1px) scale(1.02); } }
/* 15.10 владелец: экраны загрузки/ошибки и пустой повтор — в рамке игры. */
.tc-status { min-height:100%; display:grid; place-items:center; padding:24px 16px; background:radial-gradient(ellipse at 50% 40%,rgba(4,22,34,.6),rgba(1,5,9,.92)),url('/app/client/assets/ui/season-pass/season-bg-owner.png') 60% 22%/cover no-repeat; }
.tc-status .tc-result-wait-box p.error { margin:0; color:#ff9a7a; font-size:14px; }
.tc-status .tc-rw-actions button, .tc-status .tc-rw-actions a { min-width:220px; min-height:44px; padding:10px 24px; border:0; border-top:1px solid #d6fbff; background:linear-gradient(180deg,#2cc6ea,#0b6f8c); color:#f2fdff; font:900 14px system-ui,Segoe UI,sans-serif; letter-spacing:.12em; text-transform:uppercase; cursor:pointer; clip-path:polygon(9px 0,100% 0,100% calc(100% - 9px),calc(100% - 9px) 100%,0 100%,0 9px); }
/* 15.10 владелец: во время обучения меню затемнено с замочком (откроется после обучения). */
.nav-button.locked { opacity:.42; filter:grayscale(.7); cursor:not-allowed; position:relative; }
.nav-button.locked .nav-lock { position:absolute; right:10%; top:10%; width:16px; height:18px; background:#cfe6f0; clip-path:polygon(20% 45%,20% 30%,30% 12%,50% 5%,70% 12%,80% 30%,80% 45%,95% 45%,95% 100%,5% 100%,5% 45%,32% 45%,32% 30%,40% 20%,50% 17%,60% 20%,68% 30%,68% 45%); filter:drop-shadow(0 0 4px #000); }
.shell-brand[disabled], .shell-identity[disabled] { cursor:not-allowed; opacity:.55; }
.tc-unlock-toast { position:fixed; left:50%; top:110px; transform:translateX(-50%); z-index:99992; padding:14px 34px; color:#e9fdff; font:900 18px system-ui,Segoe UI,sans-serif; letter-spacing:.12em; text-transform:uppercase; background:linear-gradient(180deg,#123049,#0a1824); border:1px solid #5fd4ff; box-shadow:0 0 30px #3fe0ff66; clip-path:polygon(12px 0,calc(100% - 12px) 0,100% 50%,calc(100% - 12px) 100%,12px 100%,0 50%); animation:tcUnlock 3.2s ease forwards; pointer-events:none; }
@keyframes tcUnlock { 0% { opacity:0; transform:translate(-50%,-12px); } 12%,80% { opacity:1; transform:translate(-50%,0); } 100% { opacity:0; transform:translate(-50%,-8px); } }
/* 15.10 владелец: после боя на долю секунды мелькал другой экран («Подводим итог боя…») перед итогом.
   Экран ожидания появляется плавно и только если итог грузится дольше 0,6 с — обычно его не видно вовсе. */
@keyframes tc-wait-in { from { opacity:0; } to { opacity:1; } }
.match-result-screen.tc-result-wait { animation:tc-wait-in .35s ease .6s both; }
