/* PvP 2 — covert intrusion HUD (theater: look real, harmless) */

:root {
    --pvp2-cyan: #4ee6ff;
    --pvp2-pink: #ff2e7e;
    --pvp2-green: #5dff9a;
    --pvp2-gold: #ffc857;
    --pvp2-red: #ff4967;
    --pvp2-ink: #05070a;
}

/* Launcher button */
.pvp2-launch-btn {
    position: fixed;
    right: 180px;
    bottom: 18px;
    z-index: 9200;
    display: inline-flex;
    align-items: center;
    gap: 8px;
    padding: 8px 12px;
    border: 1px solid var(--pvp2-cyan);
    border-radius: 6px;
    background: rgba(5, 10, 16, 0.85);
    color: var(--pvp2-cyan);
    font-family: 'Orbitron', system-ui, sans-serif;
    font-size: 9px;
    letter-spacing: 0.12em;
    text-transform: uppercase;
    cursor: pointer;
}
.pvp2-launch-btn:hover { background: rgba(78, 230, 255, 0.12); }
.pvp2-launch-btn__icon { font-size: 13px; }
.pvp2-launch-btn.is-on { border-color: var(--pvp2-green); color: var(--pvp2-green); }

/* Window */
.pvp2-window {
    position: fixed;
    left: 50%;
    top: 50%;
    transform: translate(-50%, -50%);
    width: min(1240px, 97vw);
    max-height: 92vh;
    display: none;
    flex-direction: column;
    z-index: 9400;
    background: linear-gradient(180deg, #070c12 0%, #04070b 100%);
    border: 1px solid rgba(78, 230, 255, 0.35);
    border-radius: 10px;
    box-shadow: 0 0 40px rgba(0, 0, 0, 0.7);
    color: #cfe9f5;
    font-family: 'JetBrains Mono', monospace;
    overflow: hidden;
}
.pvp2-window__header {
    display: flex;
    align-items: center;
    justify-content: space-between;
    padding: 10px 14px;
    border-bottom: 1px solid rgba(78, 230, 255, 0.2);
    background: rgba(78, 230, 255, 0.05);
    cursor: move;
    user-select: none;
}
.pvp2-window__brand { display: flex; align-items: center; gap: 8px; font-size: 12px; letter-spacing: 0.1em; color: var(--pvp2-cyan); }
.pvp2-window__sub { color: #6f8494; font-size: 10px; }
.pvp2-window__close { background: transparent; border: 0; color: #8aa; cursor: pointer; font-size: 14px; }
.pvp2-body { padding: 14px; overflow: auto; display: flex; flex-direction: column; gap: 12px; }

/* Rows / inputs */
.pvp2-row { display: flex; flex-direction: column; gap: 5px; }
.pvp2-row label { font-size: 10px; color: #7f97a6; letter-spacing: 0.06em; text-transform: uppercase; }
.pvp2-row input, .pvp2-row select {
    background: rgba(0, 0, 0, 0.5);
    border: 1px solid rgba(78, 230, 255, 0.25);
    border-radius: 5px;
    color: #dff2fb;
    padding: 7px 9px;
    font-family: inherit;
    font-size: 12px;
}
.pvp2-grid { display: flex; flex-wrap: wrap; gap: 8px; }

/* Program cards */
.pvp2-prog {
    flex: 1 1 150px;
    min-width: 140px;
    border: 1px solid rgba(120, 150, 170, 0.3);
    border-radius: 7px;
    padding: 9px 10px;
    background: rgba(255, 255, 255, 0.02);
    cursor: pointer;
    transition: border-color .12s, background .12s;
}
.pvp2-prog:hover { border-color: var(--pvp2-cyan); background: rgba(78, 230, 255, 0.06); }
.pvp2-prog.is-locked { opacity: .45; cursor: not-allowed; }
.pvp2-prog.is-done { border-color: var(--pvp2-green); }
.pvp2-prog__name { font-size: 11px; font-weight: 700; color: #eaf6fc; }
.pvp2-prog__desc { font-size: 9.5px; color: #8ba3b1; margin-top: 3px; line-height: 1.3; }
.pvp2-prog__meta { font-size: 9px; color: var(--pvp2-gold); margin-top: 4px; }

/* Suspicion meter */
.pvp2-meter__head { display: flex; justify-content: space-between; font-size: 10px; color: #8ba3b1; margin-bottom: 5px; }
.pvp2-meter__track { height: 9px; border-radius: 5px; background: rgba(255, 255, 255, 0.08); overflow: hidden; }
.pvp2-meter__fill { height: 100%; width: 0%; background: linear-gradient(90deg, #2f7, var(--pvp2-gold), var(--pvp2-red)); transition: width .3s; }

/* Log */
.pvp2-log {
    background: rgba(0, 0, 0, 0.45);
    border: 1px solid rgba(120, 150, 170, 0.2);
    border-radius: 6px;
    padding: 8px 10px;
    font-size: 11px;
    line-height: 1.5;
    max-height: 140px;
    overflow: auto;
}
.pvp2-log__line { color: #9fb6c4; }
.pvp2-log__line b { color: var(--pvp2-cyan); }
.pvp2-log__line.is-warn { color: var(--pvp2-gold); }
.pvp2-log__line.is-bad { color: var(--pvp2-red); }
.pvp2-log__line.is-good { color: var(--pvp2-green); }

.pvp2-actions { display: flex; gap: 8px; flex-wrap: wrap; }
.pvp2-btn {
    border: 1px solid rgba(78, 230, 255, 0.4);
    background: transparent;
    color: var(--pvp2-cyan);
    border-radius: 5px;
    padding: 7px 11px;
    font-family: inherit;
    font-size: 10.5px;
    letter-spacing: 0.05em;
    cursor: pointer;
}
.pvp2-btn:hover { background: rgba(78, 230, 255, 0.1); }
.pvp2-btn--danger { border-color: var(--pvp2-red); color: var(--pvp2-red); }
.pvp2-btn--ghost { border-color: rgba(120, 150, 170, 0.4); color: #9fb6c4; }

.pvp2-toggle { display: inline-flex; align-items: center; gap: 6px; font-size: 10px; color: #8ba3b1; }

/* Victim-side symptoms (visual, fictional) */
.pvp2-glitch { animation: pvp2Glitch .18s steps(2) 0s 6; }
@keyframes pvp2Glitch {
    0% { filter: none; transform: translate(0, 0); }
    50% { filter: hue-rotate(40deg) contrast(1.4); transform: translate(2px, -1px); }
    100% { filter: none; transform: translate(0, 0); }
}
.pvp2-fake-icon {
    position: absolute;
    width: 58px;
    text-align: center;
    color: #dff2fb;
    font-family: 'JetBrains Mono', monospace;
    font-size: 9px;
    opacity: .9;
    z-index: 2;
}
.pvp2-fake-icon__glyph { display: block; font-size: 22px; line-height: 1; }

/* Console (терминальный вид) */
.pvp2-status { display: flex; flex-wrap: wrap; gap: 10px; font-size: 10px; color: #8ba3b1; letter-spacing: .04em; }
.pvp2-status b { color: #dff2fb; }
.pvp2-input-row {
    display: flex;
    align-items: center;
    gap: 8px;
    border: 1px solid rgba(78, 230, 255, 0.3);
    border-radius: 6px;
    background: rgba(0, 0, 0, 0.5);
    padding: 6px 10px;
}
.pvp2-prompt { color: var(--pvp2-green); font-size: 14.5px; white-space: nowrap; }
.pvp2-input-row input {
    flex: 1;
    background: transparent;
    border: 0;
    outline: none;
    color: #dff2fb;
    font-family: inherit;
    font-size: 14.5px;
}
.pvp2-tools { display: flex; flex-wrap: wrap; gap: 6px; }
.pvp2-tools .pvp2-btn { font-size: 9.5px; padding: 5px 8px; }

/* Верхняя панель борда */
.pvp2-topbar {
    display: flex; flex-wrap: wrap; align-items: center; gap: 8px;
    padding: 7px 9px; border: 1px solid rgba(120, 150, 170, 0.22);
    border-radius: 6px; background: rgba(255, 255, 255, 0.02);
}
.pvp2-topbar__cell {
    font-size: 9.5px; letter-spacing: 0.06em; color: #6f8494;
    border-right: 1px solid rgba(120, 150, 170, 0.2); padding-right: 10px;
}
.pvp2-topbar__cell b { color: #dff2fb; font-size: 11px; margin-left: 4px; }
.pvp2-topbar .pvp2-toggle { margin-left: auto; }

/* Баннер «что делать дальше» */
.pvp2-next {
    display: flex; flex-wrap: wrap; align-items: center; gap: 8px;
    padding: 9px 11px; border-radius: 6px; font-size: 11.5px; line-height: 1.4;
    border: 1px solid rgba(120, 150, 170, 0.3);
    border-left: 4px solid var(--pvp2-cyan);
    background: rgba(78, 230, 255, 0.06);
}
.pvp2-next.is-run { border-left-color: var(--pvp2-gold); background: rgba(255, 200, 87, 0.07); }
.pvp2-next.is-warn { border-left-color: var(--pvp2-red); background: rgba(255, 73, 103, 0.07); }
.pvp2-next.is-good { border-left-color: var(--pvp2-green); background: rgba(93, 255, 154, 0.07); }
.pvp2-next.is-bad { border-left-color: var(--pvp2-red); background: rgba(255, 73, 103, 0.12); }
.pvp2-next__label { font-size: 8.5px; letter-spacing: 0.14em; color: #6f8494; }
.pvp2-next__text { flex: 1; min-width: 180px; color: #eaf6fc; }
.pvp2-next__btns { display: flex; gap: 6px; flex-wrap: wrap; }

/* Заголовки секций */
.pvp2-sec-head {
    display: flex; align-items: baseline; gap: 8px;
    font-size: 10px; letter-spacing: 0.12em; color: #8ba3b1;
    border-bottom: 1px solid rgba(120, 150, 170, 0.18);
    padding-bottom: 4px; margin-top: 2px;
}
.pvp2-sec-head span { font-size: 9.5px; letter-spacing: 0; color: #55606b; }

/* Pipeline шагов */
.pvp2-flow { display: flex; flex-direction: column; gap: 0; }
.pvp2-step { display: grid; grid-template-columns: 34px 1fr; align-items: stretch; }
.pvp2-step__rail { position: relative; display: flex; justify-content: center; }
.pvp2-step__rail::before {
    content: ''; position: absolute; top: 0; bottom: 0; left: 50%;
    width: 2px; transform: translateX(-50%); background: rgba(120, 150, 170, 0.22);
}
.pvp2-step:first-child .pvp2-step__rail::before { top: 14px; }
.pvp2-step:last-child .pvp2-step__rail::before { bottom: calc(100% - 14px); }
.pvp2-step__num {
    position: relative; z-index: 1; width: 22px; height: 22px; margin-top: 8px;
    border-radius: 50%; display: grid; place-items: center;
    font-size: 10px; font-weight: 700; color: #04070b; background: var(--pvp2-cyan);
}
.pvp2-step.is-done .pvp2-step__num { background: var(--pvp2-green); }
.pvp2-step.is-run .pvp2-step__num { background: var(--pvp2-gold); }
.pvp2-step.is-missing .pvp2-step__num { background: var(--pvp2-red); }
.pvp2-step.is-locked .pvp2-step__num { background: #55606b; color: #cfd6dd; }
.pvp2-step__card {
    border: 1px solid rgba(120, 150, 170, 0.22);
    border-radius: 6px; background: rgba(255, 255, 255, 0.015);
    padding: 7px 9px; margin: 5px 0;
}
.pvp2-step.is-run .pvp2-step__card { border-color: rgba(255, 200, 87, 0.5); background: rgba(255, 200, 87, 0.05); }
.pvp2-step.is-done .pvp2-step__card { border-color: rgba(93, 255, 154, 0.35); }
.pvp2-step__top { display: flex; align-items: center; gap: 8px; }
.pvp2-step__name { color: #eaf6fc; font-weight: 700; letter-spacing: 0.04em; font-size: 12px; }
.pvp2-step__tag { font-size: 8.5px; color: #6f8494; border: 1px solid rgba(120,150,170,.3); border-radius: 4px; padding: 1px 5px; }
.pvp2-step__tag.is-core { color: var(--pvp2-cyan); border-color: rgba(78,230,255,.35); }
.pvp2-step__state { margin-left: auto; font-size: 10px; color: #8ba3b1; }
.pvp2-step__desc { color: #6f8494; font-size: 10px; margin: 3px 0 5px; }
.pvp2-step__io { display: flex; flex-wrap: wrap; gap: 5px; align-items: center; margin-bottom: 6px; }
.pvp2-step__btns { display: flex; flex-wrap: wrap; gap: 6px; }

/* Легенда */
.pvp2-legend { display: flex; flex-wrap: wrap; gap: 6px; align-items: center; }
.pvp2-legend__txt { color: #55606b; font-size: 9.5px; }

/* Чипы данных (артефакты) */
.pvp2-chip {
    font-size: 9.5px;
    padding: 1px 6px;
    border-radius: 4px;
    border: 1px solid rgba(120, 150, 170, 0.35);
    color: #9fb6c4;
    white-space: nowrap;
}
.pvp2-chip.is-ok { border-color: rgba(93, 255, 154, 0.45); color: var(--pvp2-green); }
.pvp2-chip.is-miss { border-color: rgba(255, 73, 103, 0.45); color: var(--pvp2-red); }
.pvp2-chip.is-done { border-color: rgba(93, 255, 154, 0.45); color: var(--pvp2-green); }
.pvp2-chip.is-out { border-color: rgba(78, 230, 255, 0.35); color: var(--pvp2-cyan); }

.pvp2-btn--warn { border-color: var(--pvp2-gold); color: var(--pvp2-gold); }
.pvp2-btn--run { border-color: var(--pvp2-green); color: var(--pvp2-green); }
.pvp2-bad { color: var(--pvp2-red); }
.pvp2-good { color: var(--pvp2-green); }

.pvp2-art-row { display: flex; flex-wrap: wrap; gap: 6px; align-items: center; font-size: 10px; }
.pvp2-art-row__label { color: #6f8494; letter-spacing: 0.1em; font-size: 9px; }
.pvp2-art { font-size: 9.5px; color: var(--pvp2-green); border: 1px solid rgba(93,255,154,.35); border-radius: 4px; padding: 1px 6px; }
.pvp2-art i { color: #6f8494; font-style: normal; }
.pvp2-art-empty { color: #6f8494; font-size: 10px; }

/* Окно отдельной программы-инструмента */
.pvp2-toolwin {
    position: fixed;
    left: 150px;
    top: 70px;
    width: min(430px, 92vw);
    height: min(400px, 64vh);
    display: none;
    flex-direction: column;
    z-index: 9600;
    background: #04070b;
    border: 1px solid rgba(78, 230, 255, 0.35);
    border-radius: 8px;
    box-shadow: 0 0 44px rgba(0, 0, 0, 0.75);
    color: #cfe9f5;
    font-family: 'JetBrains Mono', monospace;
    overflow: hidden;
}
.pvp2-toolwin__head {
    display: flex;
    align-items: center;
    gap: 8px;
    padding: 7px 11px;
    background: rgba(78, 230, 255, 0.06);
    border-bottom: 1px solid rgba(78, 230, 255, 0.2);
    cursor: move;
    user-select: none;
}
.pvp2-toolwin__dot { width: 8px; height: 8px; border-radius: 50%; background: var(--pvp2-cyan); box-shadow: 0 0 8px var(--pvp2-cyan); }
.pvp2-toolwin__name { color: var(--pvp2-cyan); font-size: 12px; font-weight: 700; letter-spacing: 0.07em; }
.pvp2-toolwin__phase { color: #6f8494; font-size: 9.5px; }
.pvp2-toolwin__badge { margin-left: auto; font-size: 9px; padding: 1px 6px; border-radius: 4px; border: 1px solid rgba(120,150,170,.35); color: #8ba3b1; }
.pvp2-toolwin__badge.is-done { border-color: rgba(93,255,154,.45); color: var(--pvp2-green); }
.pvp2-toolwin__badge.is-run { border-color: rgba(255,200,87,.45); color: var(--pvp2-gold); }
.pvp2-toolwin__badge.is-missing { border-color: rgba(255,73,103,.45); color: var(--pvp2-red); }
.pvp2-toolwin__close { background: transparent; border: 0; color: #8aa; cursor: pointer; font-size: 13px; }
.pvp2-toolwin__wbtn {
    background: transparent; border: 0; color: #8aa; cursor: pointer;
    font-size: 12px; line-height: 1; padding: 2px 5px; border-radius: 4px;
}
.pvp2-toolwin__wbtn:hover { background: rgba(255, 73, 103, 0.2); color: #fff; }
.pvp2-toolwin__menu {
    display: flex; gap: 12px; padding: 5px 12px;
    background: #060b11; border-bottom: 1px solid rgba(120, 150, 170, 0.18);
    font-size: 10px; color: #7f97a6;
}
.pvp2-toolwin__menu span { cursor: default; }
.pvp2-toolwin__menu span:hover { color: #cfd6dd; }
.pvp2-toolwin__cmd {
    padding: 5px 11px;
    background: rgba(0, 0, 0, 0.55);
    border-bottom: 1px solid rgba(120, 150, 170, 0.15);
    font-size: 10px; color: #8bd6a0; white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}
.pvp2-toolwin__progress { position: relative; }
.pvp2-toolwin__pct {
    position: absolute; right: 8px; top: -14px;
    font-size: 9px; color: #8ba3b1;
}
.pvp2-toolwin__next { color: var(--pvp2-green); font-size: 9.5px; }
.pvp2-toolwin__line.is-code { color: #6f9eb8; }

/* Индикаторы (LED) */
.pvp2-ind {
    display: flex; flex-wrap: wrap; align-items: center; gap: 14px;
    padding: 7px 10px; border: 1px solid rgba(120, 150, 170, 0.22);
    border-radius: 6px; background: #04070b;
    font-family: 'JetBrains Mono', monospace; font-size: 10px; color: #8ba3b1; letter-spacing: 0.06em;
}
.pvp2-ind__item { display: inline-flex; align-items: center; gap: 6px; }
.pvp2-ind__item b { color: #dff2fb; }
.pvp2-ind .pvp2-toggle { margin-left: auto; }
.pvp2-led { width: 8px; height: 8px; border-radius: 50%; background: #2a3540; display: inline-block; }
.pvp2-led.is-on { background: var(--pvp2-green); box-shadow: 0 0 8px var(--pvp2-green); animation: pvp2Blink 2.4s infinite; }
.pvp2-led.is-warn { background: var(--pvp2-gold); box-shadow: 0 0 8px var(--pvp2-gold); animation: pvp2Blink 1.2s infinite; }
.pvp2-led.is-alarm { background: var(--pvp2-red); box-shadow: 0 0 10px var(--pvp2-red); animation: pvp2Blink .5s infinite; }
.pvp2-led.is-off { background: #2a3540; }
@keyframes pvp2Blink { 0%, 100% { opacity: 1; } 50% { opacity: .35; } }

/* Терминальные колонки */
.pvp2-cols { display: grid; grid-template-columns: minmax(220px, 1fr) minmax(280px, 1.4fr); gap: 10px; }
.pvp2-col { min-width: 0; }
.pvp2-term-head {
    display: flex; align-items: center; justify-content: space-between; gap: 8px;
    font-family: 'JetBrains Mono', monospace; font-size: 9.5px; letter-spacing: 0.12em;
    color: #7f97a6; background: #060b11; border: 1px solid rgba(120, 150, 170, 0.2);
    border-bottom: 0; border-radius: 6px 6px 0 0; padding: 6px 9px;
}
.pvp2-term-head .pvp2-btn { font-size: 9px; padding: 2px 7px; }

/* Терминал целей */
.pvp2-targets {
    border: 1px solid rgba(120, 150, 170, 0.2); border-radius: 0 0 6px 6px;
    background: #03050a; padding: 6px; min-height: 80px; max-height: 300px; overflow: auto;
    font-family: 'JetBrains Mono', monospace;
}
.pvp2-targets__empty { color: #55606b; font-size: 10.5px; padding: 8px; }
.pvp2-target {
    display: grid; grid-template-columns: 1fr auto; gap: 2px 8px;
    padding: 5px 8px; border-radius: 4px; cursor: default;
    border: 1px solid transparent; font-size: 11px;
}
.pvp2-target:hover { background: rgba(78, 230, 255, 0.08); border-color: rgba(78, 230, 255, 0.3); }
.pvp2-target.is-active { background: rgba(93, 255, 154, 0.1); border-color: rgba(93, 255, 154, 0.4); }
.pvp2-target__ip { color: var(--pvp2-cyan); font-weight: 700; }
.pvp2-target.is-active .pvp2-target__ip { color: var(--pvp2-green); }
.pvp2-target__nick { color: #8ba3b1; font-size: 10px; }
.pvp2-target__meta { grid-column: 1 / -1; color: #55606b; font-size: 9.5px; }
.pvp2-target.is-appear { animation: pvp2TargetIn .38s ease-out both; }
@keyframes pvp2TargetIn {
    0% { opacity: 0; transform: translateX(-14px); background: rgba(78, 230, 255, 0.14); }
    60% { opacity: 1; transform: translateX(0); }
    100% { background: transparent; }
}

/* Hacker-typer */
.pvp2-typer { display: flex; flex-direction: column; gap: 8px; }
.pvp2-typer__code {
    font-family: 'JetBrains Mono', monospace; font-size: 14px; line-height: 1.6;
    white-space: pre-wrap; word-break: break-word; color: #d7f7c9;
}
.pvp2-typer__rest { color: #3b4a55; }
.pvp2-typer__caret {
    display: inline-block; width: 8px; height: 14px; margin-left: 2px;
    background: var(--pvp2-green); vertical-align: text-bottom;
    animation: pvp2Blink .8s steps(1) infinite;
}
.pvp2-typer__hint {
    color: var(--pvp2-gold); font-size: 12px; letter-spacing: 0.06em;
    border-top: 1px dashed rgba(120, 150, 170, 0.25); padding-top: 6px;
}

/* Раскладка PvP2: targets слева · атаки+лог по центру · терминал справа */
.pvp2-layout { display: grid; grid-template-columns: 250px minmax(320px, 1fr) 360px; gap: 10px; align-items: start; }
.pvp2-panel { min-width: 0; display: flex; flex-direction: column; gap: 8px; }
.pvp2-term-head__sub { color: #55606b; font-size: 9px; margin-left: 6px; letter-spacing: 0; }

/* Атаки: 2 ряда, горизонтальная прокрутка */
.pvp2-atk-strip {
    display: grid; grid-auto-flow: column;
    grid-template-rows: repeat(2, auto);
    grid-auto-columns: 212px;
    gap: 8px; overflow-x: auto; overflow-y: hidden;
    padding: 4px 4px 10px; scrollbar-width: thin;
    border: 1px solid rgba(120, 150, 170, 0.2); border-radius: 0 0 6px 6px; background: #03050a;
}
.pvp2-atk-strip::-webkit-scrollbar { height: 8px; }
.pvp2-atk-strip::-webkit-scrollbar-thumb { background: rgba(78, 230, 255, 0.35); border-radius: 4px; }
.pvp2-card { border: 1px solid rgba(120, 150, 170, 0.22); border-left: 3px solid rgba(120, 150, 170, 0.35); border-radius: 6px; background: rgba(255, 255, 255, 0.015); padding: 6px 8px; }
.pvp2-card.is-ready { border-left-color: var(--pvp2-cyan); }
.pvp2-card.is-run { border-left-color: var(--pvp2-gold); background: rgba(255, 200, 87, 0.05); }
.pvp2-card.is-done { border-left-color: var(--pvp2-green); }
.pvp2-card.is-missing { border-left-color: var(--pvp2-red); }
.pvp2-card.is-locked { opacity: .78; }
.pvp2-card__top { display: flex; align-items: center; gap: 6px; }
.pvp2-card__num { width: 16px; height: 16px; border-radius: 50%; background: var(--pvp2-cyan); color: #04070b; font-size: 9px; font-weight: 700; display: grid; place-items: center; flex: 0 0 auto; }
.pvp2-card.is-done .pvp2-card__num { background: var(--pvp2-green); }
.pvp2-card.is-run .pvp2-card__num { background: var(--pvp2-gold); }
.pvp2-card.is-missing .pvp2-card__num { background: var(--pvp2-red); }
.pvp2-card__name { font-weight: 700; color: #eaf6fc; font-size: 11px; letter-spacing: .03em; }
.pvp2-card__opt { font-size: 8px; color: #6f8494; border: 1px solid rgba(120, 150, 170, 0.3); border-radius: 4px; padding: 0 4px; }
.pvp2-card__state { margin-left: auto; font-size: 9px; color: #8ba3b1; }
.pvp2-card__io { display: flex; flex-wrap: wrap; gap: 4px; align-items: center; margin: 5px 0; }
.pvp2-card__btns { display: flex; flex-wrap: wrap; gap: 5px; }
.pvp2-card .pvp2-btn { font-size: 9px; padding: 3px 7px; }
.pvp2-card .pvp2-chip { font-size: 8.5px; }

/* Терминал справа (ввод команд + hacker-typer) */
.pvp2-panel--term { position: sticky; top: 0; }
.pvp2-term-out {
    border: 1px solid rgba(120, 150, 170, 0.2); border-radius: 0 0 6px 6px;
    background: #03050a; padding: 10px 12px; min-height: 200px; max-height: 340px; overflow: auto;
    font-family: 'JetBrains Mono', monospace; font-size: 13px; line-height: 1.6; color: #9fb6c4;
}
.pvp2-term__line { color: #9fb6c4; }
.pvp2-term__line.is-dim { color: #55606b; }
.pvp2-term__line.is-good { color: var(--pvp2-green); }
.pvp2-term__line.is-warn { color: var(--pvp2-gold); }
.pvp2-term__line.is-bad { color: var(--pvp2-red); }

/* Справка help в терминале (остаётся в истории, можно прокрутить) */
.pvp2-help {
    display: flex; flex-direction: column; gap: 3px;
    margin: 8px 0; padding: 8px 10px;
    border-left: 2px solid rgba(93, 255, 154, 0.5);
    background: rgba(93, 255, 154, 0.04); border-radius: 0 6px 6px 0;
}
.pvp2-help__row { display: grid; grid-template-columns: 176px 1fr; gap: 12px; align-items: baseline; }
.pvp2-help__cmd { color: var(--pvp2-green); font-weight: 600; }
.pvp2-help__desc { color: #8ba3b1; }

/* Индикатор обработки после команды */
.pvp2-term__busy {
    display: flex; align-items: center; gap: 8px; margin-top: 8px;
    color: var(--pvp2-gold); font-size: 14px;
}
.pvp2-busybar {
    position: relative; display: inline-block; width: 84px; height: 6px;
    border-radius: 3px; background: rgba(255, 255, 255, 0.08); overflow: hidden; flex: 0 0 auto;
}
.pvp2-busybar i {
    position: absolute; top: 0; left: -40%; width: 40%; height: 100%;
    background: linear-gradient(90deg, transparent, var(--pvp2-cyan), transparent);
    animation: pvp2BusySweep 0.8s linear infinite;
}
@keyframes pvp2BusySweep { from { left: -40%; } to { left: 100%; } }

/* Вспышка/пульс окна во время обработки и запуска программ */
.pvp2-aux.is-busy, .pvp2-toolwin.is-busy {
    box-shadow: 0 0 22px rgba(78, 230, 255, 0.4), 0 0 44px rgba(0, 0, 0, 0.75);
}
.pvp2-aux.is-busy .pvp2-term-out,
.pvp2-toolwin.is-busy .pvp2-toolwin__screen { animation: pvp2TermFlash 0.5s ease-out; }
@keyframes pvp2TermFlash {
    0% { background: rgba(78, 230, 255, 0.14); }
    100% { background: rgba(0, 0, 0, 0.4); }
}

/* «Болтающийся» контейнер с IP (перетаскивание ЛКМ в терминал) */
.pvp2-ip-token {
    position: fixed;
    z-index: 9900;
    padding: 6px 14px;
    border-radius: 6px;
    background: #08131c;
    border: 1px solid var(--pvp2-cyan);
    color: var(--pvp2-cyan);
    font-family: 'JetBrains Mono', monospace;
    font-size: 14.5px;
    box-shadow: 0 0 18px rgba(78, 230, 255, 0.5);
    cursor: default;
    user-select: none;
    white-space: nowrap;
    animation: pvp2TokenFloat 1.4s ease-in-out infinite;
}
.pvp2-ip-token::before { content: '⋮⋮ '; color: #6f8494; }
@keyframes pvp2TokenFloat {
    0%, 100% { transform: translateY(0); }
    50% { transform: translateY(-4px); }
}

/* Вытянутый из пространства IP (висит на курсоре, с глитчем) */
.pvp2-ip-token.is-pull {
    animation: none;
    text-shadow: 1.5px 0 rgba(255, 0, 80, 0.75), -1.5px 0 rgba(0, 220, 255, 0.75);
    will-change: transform;
}
.pvp2-ip-token.is-pull::after {
    content: ''; position: absolute; left: 50%; bottom: 100%; width: 1px; height: 22px;
    background: linear-gradient(180deg, rgba(78, 230, 255, 0), rgba(78, 230, 255, 0.7));
    transform: translateX(-50%);
}
.pvp2-ip-token.is-drop {
    animation: none; opacity: 0; transition: opacity .18s, transform .18s;
}
.pvp2-ip-shard {
    position: fixed; z-index: 9899; pointer-events: none;
    font-family: 'JetBrains Mono', monospace; font-size: 12px;
    color: var(--pvp2-cyan);
    text-shadow: 1px 0 rgba(255, 0, 80, 0.7), -1px 0 rgba(0, 220, 255, 0.7);
    animation: pvp2ShardFly 0.95s ease-out forwards;
}
@keyframes pvp2ShardFly {
    0% { opacity: 1; transform: translate(0, 0) scale(1); }
    100% { opacity: 0; transform: translate(var(--dx, 20px), var(--dy, -30px)) scale(.7) rotate(20deg); }
}
/* Глитч ТОЛЬКО у контейнера-источника: IP как будто вырывают из пространства */
.pvp2-target.is-tearing,
.pvp2-ip-token.is-tearing { animation: pvp2Tear 1.05s ease-in-out both; }
.pvp2-target.is-tearing {
    border-color: var(--pvp2-cyan) !important;
    background: rgba(78, 230, 255, 0.10);
}
.pvp2-target.is-tearing .pvp2-target__ip {
    text-shadow: 1.5px 0 rgba(255, 0, 80, 0.8), -1.5px 0 rgba(0, 220, 255, 0.8);
}
@keyframes pvp2Tear {
    0%   { transform: translate(0, 0) skewX(0); clip-path: none; opacity: 1; }
    20%  { transform: translate(2px, -1px) skewX(7deg);  clip-path: inset(8% 0 30% 0); }
    40%  { transform: translate(-3px, 1px) skewX(-9deg); clip-path: inset(40% 0 8% 0); }
    60%  { transform: translate(2px, 0) skewX(5deg);     clip-path: inset(18% 0 45% 0); }
    80%  { transform: translate(-1px, 0) skewX(-3deg);   clip-path: inset(30% 0 20% 0); }
    100% { transform: translate(0, 0) skewX(0); clip-path: none; opacity: 1; }
}

/* Провальные попытки: контейнер трясёт и лагает, IP не выходит */
.pvp2-target.is-fail {
    animation: pvp2Lag 0.95s ease-in-out both;
    border-color: #ff003c !important;
    background: rgba(255, 0, 60, 0.09);
}
.pvp2-target.is-fail .pvp2-target__ip {
    color: #ff4d6d;
    text-shadow: 2px 0 rgba(255, 0, 60, 0.9), -2px 0 rgba(0, 229, 255, 0.9);
}
@keyframes pvp2Lag {
    0%   { transform: translate(0, 0) rotate(0); opacity: 1; }
    15%  { transform: translate(-4px, 2px) rotate(-2deg); opacity: .55; }
    30%  { transform: translate(5px, -2px) rotate(2deg); opacity: 1; }
    45%  { transform: translate(-3px, 1px) rotate(-1.5deg); opacity: .5; }
    60%  { transform: translate(4px, 1px) rotate(1.5deg); opacity: 1; }
    75%  { transform: translate(-2px, -1px) rotate(-1deg); opacity: .7; }
    100% { transform: translate(0, 0) rotate(0); opacity: 1; }
}

/* ── Cyberpunk: контейнер как окно в информационное пространство ── */
.pvp2-target {
    position: relative; overflow: hidden;
    transition: transform .18s ease, border-color .18s ease, box-shadow .18s ease;
}
.pvp2-target__ip, .pvp2-target__nick, .pvp2-target__meta { position: relative; z-index: 1; }
.pvp2-target::before {   /* поток данных */
    content: ''; position: absolute; inset: 0; z-index: 0; pointer-events: none; opacity: .22;
    background-image: repeating-linear-gradient(90deg, rgba(0, 229, 255, .18) 0 1px, transparent 1px 5px);
    animation: pvp2HexScroll 3.4s linear infinite;
}
.pvp2-target::after {    /* бегущая скан-линия */
    content: ''; position: absolute; top: 0; bottom: 0; left: -30%; width: 30%; z-index: 0; pointer-events: none;
    background: linear-gradient(90deg, transparent, rgba(0, 229, 255, .22), transparent);
    animation: pvp2Scan 2.6s linear infinite;
}
@keyframes pvp2HexScroll { from { background-position: 0 0; } to { background-position: 40px 0; } }
@keyframes pvp2Scan { 0% { left: -30%; } 100% { left: 100%; } }

/* A. Charge — антиципация */
.pvp2-target.is-charge {
    transform: scale(1.03);
    border-color: #fcee0a !important;
    box-shadow: 0 0 12px rgba(252, 238, 10, .45), inset 0 0 10px rgba(252, 238, 10, .18);
}
.pvp2-target.is-charge::before { opacity: .5; }

/* B. Strain — натяжение нитей */
.pvp2-target.is-strain {
    border-color: #00e5ff !important;
    box-shadow: 0 0 16px rgba(0, 229, 255, .55), inset 0 0 12px rgba(0, 229, 255, .2);
    animation: pvp2StrainShake .16s steps(2) infinite;
}
.pvp2-target.is-strain .pvp2-target__ip {
    text-shadow: 2px 0 rgba(255, 0, 60, .85), -2px 0 rgba(0, 229, 255, .85);
}
@keyframes pvp2StrainShake {
    0%, 100% { transform: translate(0, 0) scale(1.02); }
    50% { transform: translate(1.5px, -1px) scale(1.03); }
}

/* C. Snap — рывок */
.pvp2-target.is-snap { animation: pvp2Snap .18s ease-out; }
@keyframes pvp2Snap {
    0% { transform: scale(1.04); filter: brightness(1.6) contrast(1.2); }
    100% { transform: scale(.99); filter: none; }
}

/* D. Hole — на месте IP остался разрыв */
.pvp2-target.is-hole {
    background: repeating-linear-gradient(0deg, rgba(0, 0, 0, .65) 0 2px, rgba(255, 0, 60, .10) 2px 4px);
}

/* Нити информационного поля */
.pvp2-tendon {
    position: absolute; height: 1px; z-index: 0; pointer-events: none;
    background: linear-gradient(90deg, transparent, rgba(0, 229, 255, .95), transparent);
    box-shadow: 0 0 6px rgba(0, 229, 255, .6);
    animation: pvp2TendonPulse .42s ease-in-out infinite alternate;
}
@keyframes pvp2TendonPulse {
    from { opacity: .25; transform: scaleX(.55); }
    to { opacity: 1; transform: scaleX(1); }
}

/* Ядро/вспышка при извлечении */
.pvp2-core {
    position: fixed; z-index: 9898; width: 16px; height: 16px; margin: -8px 0 0 -8px;
    border-radius: 50%; pointer-events: none;
    background: radial-gradient(circle, #fff 0%, #00e5ff 40%, rgba(0, 229, 255, 0) 72%);
    animation: pvp2Core .55s ease-out forwards;
}
@keyframes pvp2Core {
    0% { transform: scale(.35); opacity: 1; }
    100% { transform: scale(3.4); opacity: 0; }
}

/* ── «Вкусный» burst успешного извлечения IP ── */
.pvp2-ring {
    position: fixed; z-index: 9897; width: 44px; height: 44px; margin: -22px 0 0 -22px;
    border-radius: 50%; pointer-events: none;
    border: 2px solid rgba(0, 229, 255, .9);
    box-shadow: 0 0 18px rgba(0, 229, 255, .8), inset 0 0 12px rgba(0, 229, 255, .5);
    animation: pvp2Ring .8s cubic-bezier(.2, .7, .2, 1) forwards;
}
@keyframes pvp2Ring {
    0% { transform: scale(.2); opacity: 1; border-width: 3px; }
    100% { transform: scale(6); opacity: 0; border-width: 1px; }
}

.pvp2-flare {
    position: fixed; z-index: 9897; width: 130px; height: 130px; margin: -65px 0 0 -65px;
    border-radius: 50%; pointer-events: none;
    background: conic-gradient(from 0deg,
        transparent 0 38deg, rgba(252, 238, 10, .85) 45deg, transparent 52deg 86deg,
        rgba(0, 229, 255, .85) 93deg, transparent 100deg 178deg,
        rgba(252, 238, 10, .85) 185deg, transparent 192deg 226deg,
        rgba(0, 229, 255, .85) 233deg, transparent 240deg 360deg);
    animation: pvp2Flare .55s ease-out forwards;
}
@keyframes pvp2Flare {
    0% { transform: scale(.3) rotate(0); opacity: 1; }
    100% { transform: scale(1.7) rotate(50deg); opacity: 0; }
}

.pvp2-fx-label {
    position: fixed; z-index: 9899; transform: translate(-50%, -50%);
    font-family: 'JetBrains Mono', monospace; font-size: 12px; font-weight: 700;
    letter-spacing: .14em; color: #fcee0a; text-transform: uppercase;
    text-shadow: 0 0 10px rgba(252, 238, 10, .9), 1.5px 0 rgba(255, 0, 60, .8), -1.5px 0 rgba(0, 229, 255, .8);
    pointer-events: none;
    animation: pvp2LabelRise 1.2s ease-out forwards;
}
@keyframes pvp2LabelRise {
    0% { opacity: 0; transform: translate(-50%, -50%) scale(.7); }
    20% { opacity: 1; transform: translate(-50%, -60%) scale(1); }
    100% { opacity: 0; transform: translate(-50%, -160%) scale(1); }
}

/* Зарубки попыток (1/3 … 3/3) */
.pvp2-target__ticks {
    position: absolute; top: 3px; right: 4px; z-index: 2;
    display: inline-flex; gap: 3px; pointer-events: none;
}
.pvp2-target__ticks i { width: 6px; height: 6px; border-radius: 1px; background: rgba(120, 150, 170, .35); }
.pvp2-target__ticks i.is-on { background: #fcee0a; box-shadow: 0 0 6px rgba(252, 238, 10, .8); }

/* Уведомление об ошибке прямо на контейнере-цели */
.pvp2-target { position: relative; }
.pvp2-target__err {
    position: absolute; right: 6px; top: -9px;
    padding: 1px 7px; border-radius: 4px;
    background: #2a0408; border: 1px solid var(--pvp2-red); color: var(--pvp2-red);
    font-size: 10px; font-weight: 700; letter-spacing: .06em;
    box-shadow: 0 0 12px rgba(255, 73, 103, .6);
    animation: pvp2ErrPop .35s ease-out, pvp2Blink .8s ease-in-out 3;
    pointer-events: none;
}
@keyframes pvp2ErrPop { 0% { transform: scale(.6); opacity: 0; } 100% { transform: scale(1); opacity: 1; } }

/* Вытянутый IP глитчит и лагает, пока висит на курсоре */
.pvp2-ip-token.is-pull.is-glitchy { animation: pvp2TokenGlitch 1.4s steps(3) infinite; }
@keyframes pvp2TokenGlitch {
    0%   { opacity: 1;   text-shadow: 1.5px 0 rgba(255, 0, 80, .75), -1.5px 0 rgba(0, 220, 255, .75); }
    50%  { opacity: .72; text-shadow: -2px 0 rgba(255, 0, 80, .9),   2px 0 rgba(0, 220, 255, .9); }
    100% { opacity: 1;   text-shadow: 1.5px 0 rgba(255, 0, 80, .75), -1.5px 0 rgba(0, 220, 255, .75); }
}

/* Во время переноса IP курсор остаётся обычной стрелкой */
body.pvp2-dragging,
body.pvp2-dragging * { cursor: default !important; }

/* Подсветка цели при перетаскивании */
.pvp2-input-row input.is-dropover { color: var(--pvp2-green); }
.pvp2-input-row:has(input.is-dropover) {
    border-color: var(--pvp2-green);
    box-shadow: 0 0 14px rgba(93, 255, 154, 0.45);
}
.pvp2-aux--term.is-dropover {
    border-color: var(--pvp2-green);
    box-shadow: 0 0 26px rgba(93, 255, 154, 0.5), 0 0 44px rgba(0, 0, 0, 0.75);
}

/* Отдельные окна: TARGETS и TERMINAL */
.pvp2-aux {
    position: fixed;
    left: 40px;
    top: 130px;
    display: none;
    flex-direction: column;
    z-index: 9700;
    background: #04070b;
    border: 1px solid rgba(78, 230, 255, 0.35);
    border-radius: 8px;
    box-shadow: 0 0 44px rgba(0, 0, 0, 0.75);
    color: #cfe9f5;
    font-family: 'JetBrains Mono', monospace;
    overflow: hidden;
}
.pvp2-aux--targets { width: min(340px, 92vw); height: min(360px, 62vh); }
.pvp2-aux--term { width: min(780px, 97vw); height: min(580px, 80vh); }
.pvp2-aux__head {
    display: flex; align-items: center; gap: 8px;
    padding: 7px 11px; background: rgba(78, 230, 255, 0.06);
    border-bottom: 1px solid rgba(78, 230, 255, 0.2);
    cursor: move; user-select: none;
}
.pvp2-aux__name { color: var(--pvp2-cyan); font-size: 11px; font-weight: 700; letter-spacing: .07em; }
.pvp2-aux__head [data-pvp-netmap] { margin-left: auto; }
.pvp2-aux__head .pvp2-toolwin__wbtn { margin-left: 0; }
.pvp2-aux .pvp2-targets { border: 0; border-radius: 0; flex: 1 1 auto; min-height: 0; max-height: none; overflow-y: auto; }
/* Лог терминала — фиксированная область со своим скроллом (авто-прокрутка на новые строки) */
.pvp2-aux--term .pvp2-term-out {
    border: 0; border-radius: 0;
    flex: 1 1 auto; min-height: 0; max-height: none;
    overflow-y: auto; overscroll-behavior: contain; scrollbar-width: thin;
    font-size: 14.5px; line-height: 1.6;
}
.pvp2-aux--term .pvp2-term-out::-webkit-scrollbar { width: 8px; }
.pvp2-aux--term .pvp2-term-out::-webkit-scrollbar-thumb { background: rgba(78, 230, 255, 0.35); border-radius: 4px; }
.pvp2-aux .pvp2-input-row, .pvp2-aux .pvp2-tools { margin: 8px 10px; }
.pvp2-aux .pvp2-input-row { margin-bottom: 0; }

@media (max-width: 1080px) {
    .pvp2-layout { grid-template-columns: 220px 1fr; }
    .pvp2-panel--term { grid-column: 1 / -1; position: static; }
}
@media (max-width: 780px) {
    .pvp2-layout { grid-template-columns: 1fr; }
    .pvp2-atk-strip { grid-auto-columns: 170px; }
}
.pvp2-toolwin__io {
    display: flex; flex-wrap: wrap; gap: 5px; align-items: center;
    padding: 6px 11px; font-size: 10px;
    border-bottom: 1px solid rgba(120, 150, 170, 0.15);
}
.pvp2-io__label { color: #6f8494; font-size: 9px; letter-spacing: 0.1em; }
.pvp2-io__arrow { color: #6f8494; }
.pvp2-toolwin__screen {
    flex: 1; overflow: auto; padding: 9px 11px;
    font-size: 10.5px; line-height: 1.5; background: rgba(0, 0, 0, 0.4);
}
.pvp2-toolwin__line { color: #9fb6c4; white-space: pre-wrap; word-break: break-word; }
.pvp2-toolwin__line.is-good { color: var(--pvp2-green); }
.pvp2-toolwin__line.is-warn { color: var(--pvp2-gold); }
.pvp2-toolwin__line.is-bad { color: var(--pvp2-red); }
.pvp2-toolwin__wait { color: #55606b; }
.pvp2-toolwin__progress { height: 5px; background: rgba(255, 255, 255, 0.08); }
.pvp2-toolwin__bar { height: 100%; width: 0%; background: linear-gradient(90deg, var(--pvp2-cyan), var(--pvp2-green)); transition: width .15s; }
.pvp2-toolwin__foot {
    display: flex; align-items: center; justify-content: space-between; gap: 8px;
    padding: 7px 11px; border-top: 1px solid rgba(120, 150, 170, 0.18);
}
.pvp2-toolwin__stats { display: flex; flex-wrap: wrap; gap: 9px; font-size: 9.5px; color: #8ba3b1; }
.pvp2-toolwin__stats b { color: #dff2fb; }
.pvp2-toolwin__ctrls { display: flex; gap: 6px; flex-wrap: wrap; align-items: center; }
.pvp2-toolwin__need { color: var(--pvp2-red); font-size: 9.5px; }
