/* 四个泰坦保留独立轮廓，所有角色使用统一展示尺寸。 */
.phase-blade>svg{animation:ronin-core-dash 2.3s ease forwards}.phase-blade .ronin-sword{transform-origin:85px 65px;animation:ronin-draw-cut 2.3s ease forwards;filter:drop-shadow(0 0 3px #b2e4ed)}.ronin-core-ring{display:block;position:absolute;left:-25px;top:-18px;width:43px;height:43px;border:2px solid #9cd5df;border-radius:50%;animation:ronin-core-charge 2.3s ease forwards}.ronin-sword-trail{display:block;position:absolute;left:1px;top:-18px;width:76px;height:61px;border-top:4px solid #c0ecf0;border-right:2px solid #9fc9d8;border-radius:50%;animation:ronin-core-trail 2.3s ease forwards}.phase-blade .ability{left:35px;top:16px}.friend-portal{margin-top:20px;margin-bottom:30px}.bottom{margin-bottom:0}@keyframes ronin-core-dash{0%,18%{transform:translateX(-4px)}32%{transform:translateX(-8px)}48%,68%{transform:translateX(24px) skewX(-5deg)}80%,100%{transform:none}}@keyframes ronin-draw-cut{0%,28%{transform:rotate(-10deg)}38%{transform:rotate(-45deg)}56%,70%{transform:rotate(95deg)}90%,100%{transform:rotate(0)}}@keyframes ronin-core-charge{0%{opacity:0;transform:scale(.5)}15%,30%{opacity:.7;transform:scale(1.2)}45%,100%{opacity:0;transform:scale(1.6)}}@keyframes ronin-core-trail{0%,36%{opacity:0;transform:rotate(-80deg) scale(.4)}52%,60%{opacity:.9;transform:translateX(20px) rotate(50deg) scale(1)}78%,100%{opacity:0;transform:translateX(25px) rotate(110deg) scale(1.1)}}@keyframes vault-meme-thumb{20%,75%{transform:translateY(-5px) rotate(-7deg)}}@keyframes vault-meme-wink{20%,75%{transform:scaleY(.22)}}@keyframes vault-sign{0%{opacity:0;transform:translateY(7px) scale(.7)}20%,80%{opacity:1;transform:none}100%{opacity:0;transform:translateY(-6px)}}@media(prefers-reduced-motion:reduce){.phase-blade .ronin-sword,.ronin-core-ring,.ronin-sword-trail{animation:none!important}}

/* 相同的卡片高度和 SVG 高度，不再给泰坦或特定角色单独放大。 */
.squad{align-items:stretch}.squad .teammate{height:78px;min-height:78px;box-sizing:border-box;align-items:center}.squad .teammate>svg{width:56px!important;height:64px!important;flex:0 0 56px;shape-rendering:crispEdges}.squad .teammate[data-character=defect]:not(.acting)>svg{animation:none!important;transform:none}.squad .teammate[data-character=defect].acting>svg{animation:none!important;transform:none}
.geiger>svg{animation:vault-radiation 2.3s steps(2) forwards}.geiger .ability{left:-2px;top:1px;width:64px;height:70px}.geiger-noise{display:block;position:absolute;inset:0}.geiger-noise i{display:block;position:absolute;width:3px;height:3px;background:#a6d776;animation:geiger-grain .21s steps(1) 11}.geiger-noise i:nth-child(3n){width:2px;height:4px;background:#d2e99c}.geiger-noise i:nth-child(4n){background:#679b56}
@keyframes vault-radiation{0%,85%{filter:grayscale(1) sepia(1) saturate(2.7) hue-rotate(35deg) brightness(1.15)}100%{filter:none}}@keyframes geiger-grain{0%,35%{opacity:0}36%,60%{opacity:.85}61%,100%{opacity:0}}
@media(prefers-reduced-motion:reduce){.geiger>svg,.geiger-noise i{animation:none!important}.geiger>svg{filter:grayscale(1) sepia(1) saturate(2.7) hue-rotate(35deg)}.geiger-noise i{opacity:.45}}


/* 固定 16×16 像素坐标的故障机器人，与其他小人一样保持硬边。 */
.squad .teammate[data-character=defect]>svg{image-rendering:pixelated;shape-rendering:crispEdges}
