/* Unified opponent presentation for live matches and immediate replays. */
.match-shell-opponent-avatar{position:absolute;z-index:13;left:50%;top:50%;transform:translate(-50%,-50%);pointer-events:none;filter:drop-shadow(0 8px 18px rgba(0,0,0,.32));transition:left .18s cubic-bezier(.2,.8,.2,1),top .18s cubic-bezier(.2,.8,.2,1)}
.match-shell-avatar[data-frame="frame-bot-red"]{
  border-color:#ff4d56;
  box-shadow:0 0 0 3px rgba(92,12,18,.82),0 0 18px rgba(255,77,86,.58)
}

/* The system bot uses the authored chat-provided avatar image. Keep only a neutral
   background as a genuine load-failure fallback; never replace the authored image
   with a second CSS-drawn robot. */
.match-shell-avatar[data-avatar-kind="system"][data-avatar-ref="system.bot.robot"]{
  background:radial-gradient(circle at 50% 36%,#173653,#0a1b2a 72%);
}

/* Legacy pawns stay in the DOM as stable state anchors, but both players are rendered
   through the persistent avatar overlays. This also removes the old red move-pop
   transform that temporarily displaced the pawn toward the lower-right corner. */
.unified-match-shell .pawn.blue,
.unified-match-shell .pawn.red,
.unified-match-shell .daily-pawn.blue-pawn,
.unified-match-shell .daily-pawn.red-pawn,
.match-shell-replay-wrap .pawn.blue,
.match-shell-replay-wrap .pawn.red{
  opacity:0!important;
  pointer-events:none!important
}

.match-shell-replay-wrap{
  position:relative;
  width:100%;
  margin:0 auto;
  isolation:isolate
}
.match-shell-replay-wrap>.match-shell-board-avatar{z-index:12}
.match-shell-replay-wrap>.match-shell-opponent-avatar{z-index:13}

/* Keep movement animation on the avatar itself. The positioning shell retains its
   translate(-50%,-50%), so scale feedback cannot change the field center. */
.match-shell-opponent-avatar.is-moving .match-shell-avatar{
  animation:match-shell-move-pop .24s cubic-bezier(.2,.8,.2,1)
}
