/* Separate sources at the cage bars; no shared central ray hub. */
.cage-swelling .cage-break-whole>img{animation:cage-pressure-wide 5.4s ease-in-out forwards}
.cage-defined .cage-break-whole{animation:none;transform:none}
.cage-light-rays{mix-blend-mode:screen;overflow:visible}
.cage-swelling .cage-light-rays{animation:cage-rays-emerge 4.1s ease-in forwards}
.cage-light-rays .cage-light-beam{left:var(--beam-x);top:var(--beam-y);width:var(--beam-length);height:30px;color:var(--beam-colour);clip-path:polygon(0 44%,100% 0,100% 100%,0 56%);background:linear-gradient(90deg,#fff 0%,currentColor 3%,currentColor 62%,transparent 100%);filter:saturate(1.8) brightness(1.15);opacity:0;transform-origin:0 50%;will-change:transform,opacity}
.cage-swelling .cage-light-beam{animation:cage-fissure-flash var(--beam-duration) ease-in-out infinite,cage-fissure-colours 3.2s linear infinite;animation-delay:var(--beam-delay),var(--beam-delay)}
.cage-defined .cage-light-beam{color:var(--cage-light);animation:cage-fissure-flash var(--beam-duration) ease-in-out infinite;animation-delay:var(--beam-delay)}
.cage-broken .cage-light-beam{color:var(--cage-light);animation:cage-final-ray 1.2s ease-out forwards}
.cage-break-animation{overflow:visible}
.cage-break-stage{width:min(400px,76vw);height:360px}
@keyframes cage-pressure-wide{0%{transform:scale(1)}10%{transform:scale(1.12,1.08) skewX(-2deg)}18%{transform:scale(1)}30%{transform:scale(1.24,1.18) skewX(2deg)}39%{transform:scale(1.02)}51%{transform:scale(1.35,1.25) skewX(-3deg)}61%{transform:scale(1.04)}73%{transform:scale(1.45,1.32) skewX(2deg)}82%{transform:scale(1.08)}91%{transform:scale(1.52,1.4)}96%{transform:scale(1.15,1.1)}100%{transform:scale(1.6,1.48)}}
@keyframes cage-fissure-flash{0%,15%,100%{opacity:0;transform:rotate(calc(var(--beam-angle) - 12deg)) scaleX(.45)}28%{opacity:.95;transform:rotate(var(--beam-angle)) scaleX(1)}38%{opacity:.2}48%{opacity:1;transform:rotate(calc(var(--beam-angle) + 14deg)) scaleX(1.15)}68%{opacity:.55}85%{opacity:0;transform:rotate(calc(var(--beam-angle) + 5deg)) scaleX(.7)}}
@keyframes cage-fissure-colours{0%,100%{color:var(--beam-colour)}25%{color:#ffdd00}50%{color:#ff0024}75%{color:#d000ff}}
@keyframes cage-final-ray{0%{opacity:1;transform:rotate(var(--beam-angle)) scaleX(1)}100%{opacity:0;transform:rotate(var(--beam-angle)) scaleX(1.8)}}
@media(prefers-reduced-motion:reduce){.cage-break-animation .cage-light-beam{animation:none!important;opacity:.25;transform:rotate(var(--beam-angle))}.cage-break-animation .cage-break-whole>img{animation:none!important}}
