/* Opt-in cosmetic presentation only. The host remains the same actionable
   element and its final geometry never changes. Existing piece-motion and
   reveal-flight own transport; hold.css owns confirmation progress. */
.xg-card[data-card-effect] {
  --xg-card-effect-ink: var(--xg-card-winner,#f1cd6b);
  --xg-card-effect-glow: #fbe5a0b3;
}
.xg-card[data-card-effect]:not(.holding-action)::after {
  content:"";position:absolute;inset:0;z-index:15;
  box-sizing:border-box;border-radius:inherit;
  pointer-events:none;
}
.xg-card[data-card-effect="select"]:not(.holding-action)::after {
  box-shadow:inset 0 0 0 3px var(--xg-card-accent),0 0 8px var(--xg-card-accent);
  animation:xg-card-effect-pulse 330ms ease-out both;
}
.xg-card[data-card-effect="activate"]:not(.holding-action)::after {
  background:radial-gradient(circle at center,
    color-mix(in srgb,var(--xg-card-effect-ink) 42%,transparent),transparent 72%);
  animation:xg-card-effect-activate 440ms ease-out both;
}
.xg-card[data-card-effect="exhaust"]:not(.holding-action)::after {
  border:3px solid var(--xg-card-warning,#d8ab58);
  background:repeating-linear-gradient(135deg,transparent 0 9px,#0001 9px 11px);
  animation:xg-card-effect-exhaust 440ms ease-out both;
}
/* A non-authoritative red impact flash for losing a push-your-luck draw.
   The game retains its persistent BUST stamp and controls its arrival. */
.xg-card[data-card-effect="bust"]:not(.holding-action)::after {
  background:radial-gradient(circle at 50% 45%,#ffb4ae66,transparent 67%);
  border:3px solid var(--xg-card-bust,#c44e55);
  animation:xg-card-effect-bust 620ms ease-out both;
}
.xg-card[data-card-effect="win"]:not(.holding-action)::after {
  background:linear-gradient(115deg,transparent 20%,#fff0 34%,
    var(--xg-card-effect-glow) 48%,#fff9 52%,transparent 69%);
  background-size:250% 100%;
  animation:xg-card-effect-win var(--xg-card-effect-duration,700ms) ease-out
    var(--xg-card-effect-delay,0ms) both;
  animation-play-state:var(--xg-card-effect-play-state,running);
}
.xg-card[data-card-effect="morph"]:not(.holding-action)::after,
.xg-card[data-card-effect="appear"]:not(.holding-action)::after {
  box-shadow:inset 0 0 0 2px var(--xg-card-effect-ink);
  animation:xg-card-effect-activate 420ms ease-out both;
}
@keyframes xg-card-effect-bust {
  0% {opacity:0;transform:scale(1.12);box-shadow:0 0 0 0 #d9455270}
  30% {opacity:1;transform:scale(1);box-shadow:0 0 20px 6px #d9455266}
  100% {opacity:0;box-shadow:0 0 0 transparent}
}
@keyframes xg-card-effect-pulse {
  0% {opacity:1;box-shadow:inset 0 0 0 2px var(--xg-card-accent),
    0 0 15px var(--xg-card-accent);}
  100% {opacity:0;box-shadow:inset 0 0 0 4px var(--xg-card-accent),
    0 0 0 transparent;}
}
@keyframes xg-card-effect-win {
  0% {background-position:130% 0;opacity:0}
  25% {opacity:1}
  100% {background-position:-80% 0;opacity:0}
}
@keyframes xg-card-effect-activate {
  0% {opacity:0;transform:scale(.97)}
  50% {opacity:1}
  100% {opacity:0;transform:scale(1)}
}
@keyframes xg-card-effect-exhaust {
  0% {opacity:0}
  50% {opacity:.65}
  100% {opacity:0}
}
/* Per-region illumination follows the game's existing clipped hit polygon
   instead of inventing new target geometry. Legal/disabled state still comes
   from the authorized projection and is not inferred from this cue. */
.xg-card .xg-card-region__action[data-card-region-lit="true"]:not([aria-disabled="true"]) {
  background:color-mix(in srgb,var(--xg-card-region-glow,#ffdf80) 24%,transparent);
  box-shadow:inset 0 0 0 2px var(--xg-card-region-glow,#ffdf80);
}
.xg-card .xg-card-region__fill[data-card-region-lit="true"] {
  filter:brightness(1.16);
}
@media(prefers-reduced-motion:reduce) {
  .xg-card[data-card-effect]::after {animation:none!important;display:none!important}
  .xg-card .xg-card-region__fill[data-card-region-lit="true"] {filter:none}
  .xg-card .xg-card-region__action[data-card-region-lit="true"]:not([aria-disabled="true"]) {
    outline:2px solid var(--xg-card-region-glow,#ffdf80);outline-offset:-2px;
  }
}
@media(forced-colors:active) {
  .xg-card .xg-card-region__action[data-card-region-lit="true"] {
    outline:2px solid Highlight;outline-offset:-2px;background:transparent;
  }
  .xg-card[data-card-effect]::after {filter:none;border-color:Highlight}
}
