/* FreeCell state polish: loaded after style.css. */
.freecell-card.is-movable {
  filter: brightness(1.06) saturate(1.08);
}

.freecell-card.is-movable:hover {
  filter: brightness(1.12) saturate(1.12);
}

.freecell-card.is-locked {
  filter: brightness(0.62) saturate(0.75) opacity(0.72);
  cursor: not-allowed;
}

.freecell-card.is-dragging {
  opacity: 0.34;
  filter: brightness(0.8) saturate(0.75);
}

.freecell-drag-ghost {
  position: fixed;
  z-index: 2147483647;
  pointer-events: none;
  transform: translate(-50%, -35%);
  filter: none;
  opacity: 1;
  visibility: visible;
}

.freecell-drag-ghost .freecell-card {
  filter: none;
  opacity: 1;
  cursor: grabbing;
}

#gameViewport:fullscreen .freecell-drag-ghost {
  position: fixed;
  z-index: 2147483647;
}

#gameViewport:fullscreen .freecell-card__top,
#gameViewport:fullscreen .freecell-card__bottom {
  font-size: clamp(1.02rem, 1.34vw, 1.22rem);
  padding: 0.28rem 0.38rem;
}

#gameViewport:fullscreen .freecell-card__center {
  font-size: clamp(1.72rem, 2.85vw, 2.45rem);
}

.freecell-hint-source-gold {
  animation: freecellHintGoldPulse 0.52s ease-in-out 0s 5 alternate;
  z-index: 90;
}

.freecell-hint-target-gold {
  animation: freecellHintGoldTarget 0.52s ease-in-out 0s 5 alternate;
}

.freecell-hint-source-green {
  animation: freecellHintGreenPulse 0.52s ease-in-out 0s 5 alternate;
  z-index: 90;
}

.freecell-hint-target-green {
  animation: freecellHintGreenTarget 0.52s ease-in-out 0s 5 alternate;
}

.freecell-hint-source-blue {
  animation: freecellHintBluePulse 0.52s ease-in-out 0s 5 alternate;
  z-index: 90;
}

.freecell-hint-target-blue {
  animation: freecellHintBlueTarget 0.52s ease-in-out 0s 5 alternate;
}

@keyframes freecellHintGoldPulse {
  from { box-shadow: 0 8px 16px rgba(0, 0, 0, 0.22), inset 0 0 0 1px rgba(255, 255, 255, 0.86); transform: translateY(0); }
  to { box-shadow: 0 0 0 5px rgba(255, 228, 92, 0.9), 0 0 30px rgba(255, 228, 92, 0.6), 0 18px 32px rgba(0, 0, 0, 0.32); transform: translateY(-4px); }
}

@keyframes freecellHintGoldTarget {
  from { box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.08); }
  to { border-color: #ffe45c; background: rgba(255, 228, 92, 0.2); box-shadow: 0 0 0 4px rgba(255, 228, 92, 0.22), 0 0 30px rgba(255, 228, 92, 0.42), inset 0 1px 0 rgba(255, 255, 255, 0.18); }
}

@keyframes freecellHintGreenPulse {
  from { box-shadow: 0 8px 16px rgba(0, 0, 0, 0.22), inset 0 0 0 1px rgba(255, 255, 255, 0.86); transform: translateY(0); }
  to { box-shadow: 0 0 0 5px rgba(74, 222, 128, 0.85), 0 0 30px rgba(74, 222, 128, 0.55), 0 18px 32px rgba(0, 0, 0, 0.32); transform: translateY(-4px); }
}

@keyframes freecellHintGreenTarget {
  from { box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.08); }
  to { border-color: #4ade80; background: rgba(74, 222, 128, 0.18); box-shadow: 0 0 0 4px rgba(74, 222, 128, 0.2), 0 0 30px rgba(74, 222, 128, 0.38), inset 0 1px 0 rgba(255, 255, 255, 0.18); }
}

@keyframes freecellHintBluePulse {
  from { box-shadow: 0 8px 16px rgba(0, 0, 0, 0.22), inset 0 0 0 1px rgba(255, 255, 255, 0.86); transform: translateY(0); }
  to { box-shadow: 0 0 0 5px rgba(96, 165, 250, 0.9), 0 0 30px rgba(96, 165, 250, 0.55), 0 18px 32px rgba(0, 0, 0, 0.32); transform: translateY(-4px); }
}

@keyframes freecellHintBlueTarget {
  from { box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.08); }
  to { border-color: #60a5fa; background: rgba(96, 165, 250, 0.18); box-shadow: 0 0 0 4px rgba(96, 165, 250, 0.2), 0 0 30px rgba(96, 165, 250, 0.38), inset 0 1px 0 rgba(255, 255, 255, 0.18); }
}
