/* Magic-bird casts keep the board still until all marked targets are linked. */
.magic-scene-host,.magic-scene{position:absolute;inset:0;width:100%;height:100%;pointer-events:none;overflow:visible}
.magic-scene-host{z-index:12}
.magic-active .cell:not(.magic-source):not(.magic-target){opacity:.48;transition:opacity .18s}
.magic-active .cell.magic-source{z-index:5;overflow:visible}
.magic-active .magic-source .magic-bird{animation:magic-bird-charge .55s ease-in-out infinite;filter:drop-shadow(0 0 5px white) drop-shadow(0 0 13px #a5faff)}
.magic-active .magic-target .animal{filter:drop-shadow(0 0 3px #f2ffff) drop-shadow(0 0 5px #79ecff)}
.magic-active .magic-converted .animal{animation:magic-convert .26s ease-out both}
.magic-core-haze{animation:magic-gather .32s ease-out both}
.magic-core-ring,.magic-core-orbit{fill:none;stroke:#eaffff;stroke-width:2;opacity:.85;transform-box:fill-box;transform-origin:center}
.magic-core-ring{stroke-dasharray:28 9;animation:magic-orbit 1.4s linear infinite}
.magic-core-orbit{stroke:#bba1ff;stroke-width:1.5;stroke-dasharray:4 18;animation:magic-orbit 2s linear reverse infinite}
.magic-ray{opacity:0;filter:drop-shadow(0 0 4px #8ee9ff)}
.magic-ray path{fill:none;stroke-linecap:round;stroke-dasharray:1;stroke-dashoffset:1}
.magic-ray-glow{stroke:#8aafff;stroke-width:7;opacity:.72}
.magic-ray-core{stroke:#efffff;stroke-width:2}
.magic-ray-tip{fill:#fff;filter:drop-shadow(0 0 4px #b8ffff)}
.magic-target-mark{opacity:0;fill:none;stroke:#d2ffff;stroke-width:1.5;filter:drop-shadow(0 0 3px #78dcff)}
.magic-target-mark path{stroke:#fff;stroke-width:1}
.magic-scene[data-stage='link'] .magic-ray,.magic-scene[data-stage='convert'] .magic-ray{animation:magic-ray-appear .18s ease-out var(--ray-delay) both}
.magic-scene[data-stage='link'] .magic-ray path,.magic-scene[data-stage='convert'] .magic-ray path{animation:magic-ray-draw .36s ease-out var(--ray-delay) both}
.magic-scene[data-stage='link'] .magic-target-mark,.magic-scene[data-stage='convert'] .magic-target-mark{animation:magic-target-lock .4s ease-out var(--target-delay) both}
.magic-scene[data-stage='convert'] .magic-ray{opacity:.75;animation:none}
.magic-scene[data-stage='convert'] .magic-ray path{stroke-dashoffset:0;animation:none}
.magic-scene[data-stage='release'] .magic-core{opacity:0;transition:opacity .16s}
.magic-full-wave{opacity:0;fill:none;stroke-width:9;transform:scale(.01)}
.magic-scene[data-stage='release'] .magic-full-wave{animation:magic-wave .5s cubic-bezier(.16,.6,.3,1) both}
.magic-scene[data-stage='release'] .second-wave{animation-delay:.08s;stroke-width:3}
.magic-star{fill:#dfffff;opacity:0;filter:drop-shadow(0 0 3px #6ef9ff);transform-box:fill-box;transform-origin:center}
.magic-scene[data-stage='release'] .magic-star{animation:magic-star-burst .32s ease-out both}
.magic-release .magic-target .animal{filter:brightness(1.35) drop-shadow(0 0 5px #e0ffff)}
.magic-double[data-stage='link'] .magic-links{opacity:.4}
@keyframes magic-bird-charge{0%,100%{transform:scale(1.1) translateY(-2px)}50%{transform:scale(1.24) translateY(-5px)}}
@keyframes magic-gather{from{opacity:0;transform:scale(.25)}to{opacity:1;transform:scale(1)}}
@keyframes magic-orbit{to{transform:rotate(360deg)}}
@keyframes magic-ray-appear{from{opacity:0}to{opacity:1}}
@keyframes magic-ray-draw{to{stroke-dashoffset:0}}
@keyframes magic-target-lock{0%{opacity:0}60%{opacity:.9}100%{opacity:.6}}
@keyframes magic-convert{0%{transform:scale(.78);filter:brightness(1.8)}75%{transform:scale(1.18)}100%{transform:scale(1)}}
@keyframes magic-wave{0%{opacity:.9;transform:scale(.01)}70%{opacity:.65}100%{opacity:0;transform:scale(1)}}
@keyframes magic-star-burst{0%{opacity:0}18%{opacity:1}100%{opacity:0;translate:var(--star-x) var(--star-y);scale:.2}}
@media(prefers-reduced-motion:reduce){.magic-scene-host{display:none}.magic-active .magic-source .magic-bird,.magic-active .magic-converted .animal{animation:none}}
