/* ===========================================================================
   opponent-hand — die Hand des Gegners auf dem eigenen Brett
   (render/opponent-hand.js, Daten aus hand-report.js ueber die Engine).
   Gewaehlt: seine Figur steht leicht angehoben, mit Bodenschatten — dieselbe
   Haltung wie die eigene Auswahl (main-14 .selected), aber ohne Leuchten,
   Ringe oder Zugpunkte. In der Hand: das Feld ist leer, die Kopie schwebt als
   .mpLift.is-remote (board-lift.css) dort, wo er sie haelt.
   =========================================================================== */

/* Gewaehlt: springt mit kleinem Ueberschwung hoch und schwebt dann langsam auf
   und ab, der Bodenschatten atmet mit. Beides haengt an der Hand-Uhr (--opp-t),
   darum startet bei Hover-Neuaufbauten nichts neu. */
#board .sq.oppHand .chip:not(.dragging) {
  translate: 0 -10%;
  scale: 1.1;
  animation:
    mpOppLift .3s cubic-bezier(.3, 1.45, .5, 1) both,
    mpOppFloat 2.8s ease-in-out infinite;
  animation-delay: var(--opp-t, 0ms), calc(var(--opp-t, 0ms) + .3s);
}
#board .sq.oppHand .chip:not(.dragging) .pieceAsset {
  filter:
    drop-shadow(0 9px 6px rgba(0, 0, 0, .5))
    drop-shadow(0 0 8px rgba(10, 200, 185, .16));
}

/* Bodenschatten bleibt am Fuss auf dem Brett zurueck. */
#board .sq .oppHandShadow {
  position: absolute;
  left: 50%;
  top: 80%;
  width: 58%;
  height: 16%;
  translate: -50% -50%;
  border-radius: 50%;
  background: radial-gradient(closest-side,
    rgba(0, 0, 0, .66), rgba(0, 0, 0, .3) 55%, transparent);
  pointer-events: none;
  z-index: 0;
  animation:
    mpOppShadowIn .3s ease-out both,
    mpOppShadowBreath 2.8s ease-in-out infinite;
  animation-delay: var(--opp-t, 0ms), calc(var(--opp-t, 0ms) + .3s);
}

/* In der Hand (oder auf dem Heimflug): das Feld ist leer, die Kopie traegt den
   Schatten. Den Chip selbst deckt opponent-hand.js inline ab (main-02 erzwingt
   `opacity: 1 !important` am Chip, ein Stylesheet kommt dagegen nicht an). */
#board .sq.oppHand-held .oppHandShadow {
  opacity: 0;
  animation: none;   /* sonst haelt die Einblend-Animation (fill both) ihn sichtbar */
}

/* Schwebende Kopie des Gegners: unter den eigenen Effekt-Ebenen und Dialogen. */
.mpLift.is-remote {
  z-index: 55;
}

@keyframes mpOppLift {
  from { translate: 0 0; scale: 1; }
  to   { translate: 0 -10%; scale: 1.1; }
}
@keyframes mpOppFloat {
  0%, 100% { translate: 0 -10%; }
  50%      { translate: 0 -13.5%; }
}
@keyframes mpOppShadowIn {
  from { opacity: 0; scale: .7 1; }
  to   { opacity: 1; scale: 1; }
}
@keyframes mpOppShadowBreath {
  0%, 100% { opacity: 1; scale: 1; }
  50%      { opacity: .68; scale: .88 1; }
}

@media (prefers-reduced-motion: reduce) {
  #board .sq.oppHand .chip:not(.dragging),
  #board .sq .oppHandShadow { animation: none; }
}
