/* Kitty — exclusive skin-aware Battle V3 claws and overcharge awakening. */
.kitty-charged-vfx,
.kitty-speed-cast,
.kitty-speed-frame,
.kitty-claw-impact {
    --kitty-vfx-primary: #20bfff;
    --kitty-vfx-secondary: #b9f6ff;
    --kitty-vfx-tertiary: #b9f6ff;
    position: absolute;
    inset: -14px -10px;
    z-index: 55;
    overflow: hidden;
    pointer-events: none;
    isolation: isolate;
}

.kitty-charged-vfx[data-kitty-vfx-theme="academy"],
.kitty-speed-cast[data-kitty-vfx-theme="academy"],
.kitty-speed-frame[data-kitty-vfx-theme="academy"],
.kitty-claw-impact[data-kitty-vfx-theme="academy"] { mix-blend-mode: screen; filter: contrast(1.12) saturate(1.15); }
.kitty-charged-vfx[data-kitty-vfx-theme="storybook"],
.kitty-speed-cast[data-kitty-vfx-theme="storybook"],
.kitty-speed-frame[data-kitty-vfx-theme="storybook"],
.kitty-claw-impact[data-kitty-vfx-theme="storybook"] { filter: saturate(.92) brightness(1.1); border-radius: 32% 12% 28% 14%; }
.kitty-charged-vfx[data-kitty-vfx-theme="star"],
.kitty-speed-cast[data-kitty-vfx-theme="star"],
.kitty-speed-frame[data-kitty-vfx-theme="star"],
.kitty-claw-impact[data-kitty-vfx-theme="star"] { filter: saturate(1.22) contrast(1.05); }
.kitty-charged-vfx[data-kitty-vfx-theme="upgraded"],
.kitty-speed-cast[data-kitty-vfx-theme="upgraded"],
.kitty-speed-frame[data-kitty-vfx-theme="upgraded"],
.kitty-claw-impact[data-kitty-vfx-theme="upgraded"] { filter: saturate(1.35) brightness(1.08); }
.kitty-charged-vfx[data-kitty-vfx-theme="vip"],
.kitty-speed-cast[data-kitty-vfx-theme="vip"],
.kitty-speed-frame[data-kitty-vfx-theme="vip"],
.kitty-claw-impact[data-kitty-vfx-theme="vip"] { filter: sepia(.08) saturate(1.25) brightness(1.12); }

/* 133 · Feltöltve! — a portré belsejében és a teljes keret körül átütő áram. */
.kitty-charged-vfx { animation: kittyChargedFade 2.05s ease-out both; }
.kitty-charged-vfx__wash {
    position: absolute;
    inset: 13px 10px;
    background:
        repeating-linear-gradient(116deg, transparent 0 36px, color-mix(in srgb, var(--kitty-vfx-primary) 19%, transparent) 38px 40px, transparent 42px 74px),
        radial-gradient(circle at 50% 45%, color-mix(in srgb, var(--kitty-vfx-secondary) 45%, transparent), color-mix(in srgb, var(--kitty-vfx-primary) 16%, transparent) 42%, transparent 73%);
    mix-blend-mode: screen;
    animation: kittyChargedWash 1.1s steps(3, end) 2;
}
.kitty-charged-vfx__inner-arcs,
.kitty-charged-vfx__frame-arcs,
.kitty-charged-vfx__sparks { position: absolute; inset: 0; }
.kitty-charged-vfx__arc {
    position: absolute;
    left: calc(10% + (var(--kitty-fragment-i) * 8.8%));
    top: calc(12% + (var(--kitty-fragment-m4) * 20%));
    width: 31%;
    height: 4px;
    background: linear-gradient(90deg, transparent, #fff 12%, var(--kitty-vfx-secondary) 34% 48%, transparent 50% 58%, var(--kitty-vfx-primary) 62% 86%, transparent);
    clip-path: polygon(0 34%, 28% 0, 24% 46%, 54% 18%, 48% 65%, 78% 31%, 70% 79%, 100% 46%, 73% 100%, 43% 73%, 18% 100%);
    filter: drop-shadow(0 0 4px var(--kitty-vfx-primary));
    opacity: 0;
    transform: rotate(calc(-28deg + var(--kitty-fragment-i) * 13deg)) scaleX(.35);
    animation: kittyInnerArc .48s calc(var(--kitty-fragment-i) * .055s) steps(2, end) 3;
}
.kitty-charged-vfx__frame-arc {
    position: absolute;
    left: 50%;
    top: 50%;
    width: 5px;
    height: 92px;
    transform-origin: 2px 2px;
    transform: rotate(calc(var(--kitty-fragment-i) * 30deg)) translateY(-273px) skewY(-18deg);
    background: linear-gradient(#fff 0 8%, var(--kitty-vfx-secondary) 19% 42%, transparent 44% 52%, var(--kitty-vfx-primary) 55% 84%, transparent);
    clip-path: polygon(45% 0,100% 0,58% 35%,100% 36%,22% 100%,42% 57%,0 57%);
    filter: drop-shadow(0 0 5px var(--kitty-vfx-primary));
    opacity: 0;
    animation: kittyFrameArc .72s calc(var(--kitty-fragment-i) * .045s) steps(3, end) 2;
}
.kitty-charged-vfx__core {
    position: absolute;
    left: 50%;
    top: 45%;
    width: 84%;
    aspect-ratio: 1;
    transform: translate(-50%, -50%);
    border: 2px solid color-mix(in srgb, var(--kitty-vfx-secondary) 68%, transparent);
    border-radius: 50%;
    box-shadow: 0 0 18px var(--kitty-vfx-primary), inset 0 0 24px var(--kitty-vfx-primary);
    animation: kittyChargedCore 1.1s cubic-bezier(.16,.76,.28,1) both;
}
.kitty-charged-vfx__core::before,
.kitty-charged-vfx__core::after,
.kitty-charged-vfx__core i,
.kitty-charged-vfx__core b { content: ""; position: absolute; inset: -14px; border: 2px dashed var(--kitty-vfx-primary); border-radius: 50%; animation: kittyChargedOrbit 1.4s linear infinite; }
.kitty-charged-vfx__core::after { inset: 19%; border-style: dotted; border-color: var(--kitty-vfx-tertiary); animation-direction: reverse; animation-duration: .9s; }
.kitty-charged-vfx__core i { inset: 36%; border-width: 5px; border-style: solid; border-color: #fff transparent var(--kitty-vfx-secondary); animation-duration: .42s; }
.kitty-charged-vfx__core b { inset: -28%; border-width: 1px; opacity: .38; animation-duration: 2s; }
.kitty-charged-vfx__spark {
    position: absolute;
    left: calc(4% + (var(--kitty-fragment-i) * 5.35%));
    bottom: calc(3% + (var(--kitty-fragment-m5) * 8%));
    width: 3px;
    height: calc(18px + var(--kitty-fragment-m4) * 8px);
    border-radius: 50%;
    background: linear-gradient(transparent, var(--kitty-vfx-primary), #fff);
    box-shadow: 0 0 7px var(--kitty-vfx-secondary);
    opacity: 0;
    transform: rotate(calc(-30deg + var(--kitty-fragment-i) * 7deg));
    animation: kittyChargedSpark .85s calc(var(--kitty-fragment-i) * .04s) ease-out 2;
}
.kitty-charged-flash .v3-rank-frame { animation: kittyChargedRankFlash 1.7s ease-out both !important; }

/* 134 · Villámgyors! — egyszeri gyorsulás, majd a buffhoz kötött élő keret. */
.kitty-speed-cast { overflow: visible; animation: kittySpeedCastFade 1.9s ease-out both; }
.kitty-speed-cast__silhouette {
    position: absolute;
    inset: 14px 9px;
    border: 4px solid var(--kitty-vfx-secondary);
    box-shadow: 0 0 14px #fff, 0 0 34px var(--kitty-vfx-primary), inset 0 0 28px color-mix(in srgb, var(--kitty-vfx-primary) 55%, transparent);
    transform: skewY(-4deg) scaleX(.92);
    animation: kittySpeedSilhouette .7s cubic-bezier(.12,.8,.2,1) both;
}
.kitty-speed-cast.is-overdrive .kitty-speed-cast__silhouette { border-width: 7px; box-shadow: 0 0 18px #fff, 0 0 52px var(--kitty-vfx-primary), inset 0 0 44px var(--kitty-vfx-tertiary); }
.kitty-speed-cast__streaks,
.kitty-speed-cast__burst,
.kitty-speed-cast__afterimage { position: absolute; inset: 0; }
.kitty-speed-cast__streak {
    position: absolute;
    right: calc(-42% + (var(--kitty-fragment-m4) * 7%));
    top: calc(2% + (var(--kitty-fragment-i) * 6.1%));
    width: calc(66% + (var(--kitty-fragment-m3) * 15%));
    height: calc(2px + var(--kitty-fragment-m3) * 1px);
    background: linear-gradient(90deg, transparent, var(--kitty-vfx-primary) 18%, #fff 70%, transparent);
    box-shadow: 0 0 7px var(--kitty-vfx-primary);
    opacity: 0;
    transform: skewX(-28deg) translateX(80%);
    animation: kittySpeedStreak .62s calc(var(--kitty-fragment-i) * .035s) cubic-bezier(.18,.75,.2,1) 2;
}
.kitty-speed-cast__burst-ray {
    position: absolute;
    left: 50%;
    top: 44%;
    width: 4px;
    height: 54%;
    transform-origin: 2px 2px;
    transform: rotate(calc(var(--kitty-fragment-i) * 45deg)) translateY(-12%);
    background: linear-gradient(#fff, var(--kitty-vfx-secondary) 22%, transparent 72%);
    filter: drop-shadow(0 0 5px var(--kitty-vfx-primary));
    animation: kittySpeedBurst .9s calc(var(--kitty-fragment-i) * .025s) ease-out both;
}
.kitty-speed-cast__afterimage i { position: absolute; inset: 22px 15px; border: 2px solid var(--kitty-vfx-primary); opacity: 0; animation: kittySpeedAfterimage .72s ease-out both; }
.kitty-speed-cast__afterimage i:nth-child(2) { animation-delay: .14s; }
.kitty-speed-cast__afterimage i:nth-child(3) { animation-delay: .28s; }
.kitty-speed-kick .v3-flip-inner { animation: kittySpeedKick .88s cubic-bezier(.16,.85,.22,1) both; }

.kitty-speed-frame {
    inset: -17px -12px;
    z-index: 14;
    overflow: visible;
    animation: kittySpeedFramePulse 1.05s ease-in-out infinite alternate;
}
.kitty-speed-frame__edge { position: absolute; background: linear-gradient(90deg, transparent, var(--kitty-vfx-primary), #fff, var(--kitty-vfx-secondary), transparent); filter: drop-shadow(0 0 5px var(--kitty-vfx-primary)); }
.kitty-speed-frame__edge.is-top,
.kitty-speed-frame__edge.is-bottom { left: 3%; right: 3%; height: 3px; animation: kittySpeedEdgeHorizontal .72s linear infinite; }
.kitty-speed-frame__edge.is-top { top: 2%; }
.kitty-speed-frame__edge.is-bottom { bottom: 2%; animation-direction: reverse; }
.kitty-speed-frame__edge.is-left,
.kitty-speed-frame__edge.is-right { top: 2%; bottom: 2%; width: 3px; background: linear-gradient(180deg, transparent, var(--kitty-vfx-secondary), #fff, var(--kitty-vfx-primary), transparent); animation: kittySpeedEdgeVertical .86s linear infinite; }
.kitty-speed-frame__edge.is-left { left: 2%; animation-direction: reverse; }
.kitty-speed-frame__edge.is-right { right: 2%; }
.kitty-speed-frame__corners { position: absolute; inset: 0; }
.kitty-speed-frame__corners i { position: absolute; width: 23%; height: 13%; border-style: solid; border-color: var(--kitty-vfx-secondary); filter: drop-shadow(0 0 7px var(--kitty-vfx-primary)); }
.kitty-speed-frame__corners i:nth-child(1) { left: 0; top: 0; border-width: 4px 0 0 4px; }
.kitty-speed-frame__corners i:nth-child(2) { right: 0; top: 0; border-width: 4px 4px 0 0; }
.kitty-speed-frame__corners i:nth-child(3) { right: 0; bottom: 0; border-width: 0 4px 4px 0; }
.kitty-speed-frame__corners i:nth-child(4) { left: 0; bottom: 0; border-width: 0 0 4px 4px; }
.kitty-speed-frame__current { position: absolute; inset: 0; }
.kitty-speed-frame__bolt {
    position: absolute;
    left: calc(4% + (var(--kitty-fragment-m2) * 91%));
    top: calc(5% + (var(--kitty-fragment-i) * 9.5%));
    width: 17px;
    height: 34px;
    background: linear-gradient(#fff, var(--kitty-vfx-secondary) 32%, var(--kitty-vfx-primary) 72%, transparent);
    clip-path: polygon(45% 0,100% 0,59% 40%,100% 40%,12% 100%,39% 58%,0 58%);
    filter: drop-shadow(0 0 5px var(--kitty-vfx-primary));
    opacity: 0;
    animation: kittySpeedFrameBolt 1.2s calc(var(--kitty-fragment-i) * -.115s) steps(2,end) infinite;
}
.kitty-speed-frame.is-overdrive { animation-duration: .55s; }
.kitty-speed-frame.is-overdrive .kitty-speed-frame__edge { height: 5px; filter: drop-shadow(0 0 8px #fff) drop-shadow(0 0 12px var(--kitty-vfx-primary)); }
.kitty-speed-frame.is-overdrive .kitty-speed-frame__bolt { width: 21px; height: 42px; animation-duration: .68s; }
.has-kitty-speed-frame > .v3-rank-frame { filter: drop-shadow(0 0 8px var(--kitty-vfx-primary, #20bfff)) drop-shadow(0 0 18px var(--kitty-vfx-secondary, #b9f6ff)); }

/* 135 · Halálos Villámkarom — átszáguldás, három karomvágás, Sokk és rázkódás. */
.kitty-claw-trace {
    --kitty-vfx-primary: #20bfff;
    --kitty-vfx-secondary: #b9f6ff;
    --kitty-vfx-tertiary: #b9f6ff;
    position: fixed;
    z-index: 120;
    height: 58px;
    margin-top: -29px;
    transform-origin: 0 50%;
    pointer-events: none;
    filter: none !important;
}
.kitty-claw-trace i,
.kitty-claw-trace b { --kitty-claw-lane-angle: 0deg; position: absolute; left: 0; width: 100%; height: 4px; background: linear-gradient(90deg, transparent, var(--kitty-vfx-primary) 15%, #fff 72%, var(--kitty-vfx-secondary) 91%, transparent); box-shadow: 0 0 8px var(--kitty-vfx-primary); transform: rotate(var(--kitty-claw-lane-angle)) scaleX(0); transform-origin: 0 50%; animation: kittyClawTrace .72s cubic-bezier(.17,.78,.2,1) both; }
.kitty-claw-trace i:nth-child(1) { --kitty-claw-lane-angle: -4deg; top: 8px; }
.kitty-claw-trace i:nth-child(2) { top: 27px; animation-delay: .045s; }
.kitty-claw-trace i:nth-child(3) { --kitty-claw-lane-angle: 4deg; top: 46px; animation-delay: .09s; }
.kitty-claw-trace b { top: 24px; height: 11px; opacity: .23; filter: blur(5px); }
.kitty-claw-trace.intensity-1 i { height: 6px; box-shadow: 0 0 10px #fff, 0 0 16px var(--kitty-vfx-primary); }
.kitty-claw-trace.intensity-2 i { height: 8px; box-shadow: 0 0 12px #fff, 0 0 24px var(--kitty-vfx-primary); animation-duration: .55s; }

.kitty-claw-impact { inset: -22px -16px; z-index: 60; overflow: visible; }
.kitty-claw-impact__flash { position: absolute; inset: 18px 13px; background: radial-gradient(ellipse at 50% 45%, #fff 0 3%, var(--kitty-vfx-secondary) 8%, color-mix(in srgb, var(--kitty-vfx-primary) 58%, transparent) 22%, transparent 63%); mix-blend-mode: screen; animation: kittyClawFlash .65s ease-out both; }
.kitty-claw-impact__slashes { position: absolute; inset: 2% -16% 12%; transform: rotate(-22deg); }
.kitty-claw-impact__shock,
.kitty-claw-impact__sparks { position: absolute; inset: 0; }
.kitty-claw-impact__arc {
    position: absolute;
    left: 50%;
    top: 45%;
    width: 5px;
    height: calc(65px + var(--kitty-fragment-m4) * 22px);
    transform-origin: 2px 2px;
    transform: rotate(calc(var(--kitty-fragment-i) * 29deg)) translateY(-10px);
    background: linear-gradient(#fff, var(--kitty-vfx-secondary) 22%, transparent 24% 34%, var(--kitty-vfx-primary) 37% 68%, transparent 72%);
    clip-path: polygon(43% 0,100% 0,62% 36%,100% 36%,16% 100%,40% 58%,0 58%);
    filter: drop-shadow(0 0 5px var(--kitty-vfx-primary));
    opacity: 0;
    animation: kittyClawShock .72s calc(var(--kitty-fragment-i) * .035s) steps(3,end) 2;
}
.kitty-claw-impact__spark { position: absolute; left: 50%; top: 45%; width: 3px; height: calc(24px + var(--kitty-fragment-m5) * 11px); transform-origin: 1px 1px; transform: rotate(calc(var(--kitty-fragment-i) * 23deg)) translateY(-52px); background: linear-gradient(#fff, var(--kitty-vfx-secondary), transparent); box-shadow: 0 0 6px var(--kitty-vfx-primary); animation: kittyClawSpark .75s calc(var(--kitty-fragment-i) * .025s) ease-out both; }
.kitty-claw-impact.intensity-1 { filter: saturate(1.2) brightness(1.12) !important; }
.kitty-claw-impact.intensity-1 .kitty-claw-impact__slashes { inset: -3% -24% 8%; }
.kitty-claw-impact.intensity-2 { filter: saturate(1.38) brightness(1.2) !important; }
.kitty-claw-impact.intensity-2 .kitty-claw-impact__slashes { inset: -10% -32% 4%; }
.kitty-claw-shake .v3-flip-inner { animation: kittyClawShake .62s ease-out both; }
.kitty-claw-shake-strong .v3-flip-inner { animation: kittyClawShakeStrong .82s ease-out both; }
.kitty-claw-shake-overloaded .v3-flip-inner { animation: kittyClawShakeOverloaded 1.02s ease-out both; }

@keyframes kittyChargedFade { 0%{opacity:0} 9%,78%{opacity:1} 100%{opacity:0} }
@keyframes kittyChargedWash { 0%,100%{opacity:.12} 22%{opacity:1;filter:brightness(1.8)} 48%{opacity:.35} 52%{opacity:.95} }
@keyframes kittyInnerArc { 0%,100%{opacity:0} 18%{opacity:1;transform:rotate(calc(-28deg + var(--kitty-fragment-i) * 13deg)) scaleX(1.08)} 55%{opacity:.35;transform:rotate(calc(-28deg + var(--kitty-fragment-i) * 13deg)) scaleX(.7)} }
@keyframes kittyFrameArc { 0%,100%{opacity:0} 22%{opacity:1} 62%{opacity:.28;filter:drop-shadow(0 0 9px #fff)} }
@keyframes kittyChargedCore { 0%{opacity:0;transform:translate(-50%,-50%) scale(.25) rotate(-18deg)} 35%{opacity:1;transform:translate(-50%,-50%) scale(1.2) rotate(4deg)} 100%{opacity:0;transform:translate(-50%,-50%) scale(1.62) rotate(18deg)} }
@keyframes kittyChargedOrbit { to{transform:rotate(360deg)} }
@keyframes kittyChargedSpark { 0%{opacity:0;transform:translateY(25px) scaleY(.25)} 24%{opacity:1} 100%{opacity:0;transform:translateY(-125px) scaleY(1.25)} }
@keyframes kittyChargedRankFlash { 0%{filter:none} 18%,48%{filter:drop-shadow(0 0 10px #fff) drop-shadow(0 0 26px var(--kitty-vfx-primary,#20bfff)) brightness(1.45)} 30%,66%{filter:drop-shadow(0 0 6px var(--kitty-vfx-secondary,#b9f6ff))} 100%{filter:none} }
@keyframes kittySpeedCastFade { 0%{opacity:0} 8%,68%{opacity:1} 100%{opacity:0} }
@keyframes kittySpeedSilhouette { 0%{opacity:0;transform:translateX(-80%) skewY(-8deg) scaleX(.7)} 32%{opacity:1;transform:translateX(8%) skewY(-4deg) scaleX(1.04)} 100%{opacity:0;transform:translateX(52%) skewY(-2deg) scaleX(.88)} }
@keyframes kittySpeedStreak { 0%{opacity:0;transform:skewX(-28deg) translateX(90%) scaleX(.15)} 20%{opacity:1} 100%{opacity:0;transform:skewX(-28deg) translateX(-150%) scaleX(1.25)} }
@keyframes kittySpeedBurst { 0%{opacity:0;transform:rotate(calc(var(--kitty-fragment-i) * 45deg)) translateY(-12%) scaleY(.1)} 20%{opacity:1} 100%{opacity:0;transform:rotate(calc(var(--kitty-fragment-i) * 45deg)) translateY(-45%) scaleY(1.35)} }
@keyframes kittySpeedAfterimage { 0%{opacity:.8;transform:translateX(0) skewY(-4deg)} 100%{opacity:0;transform:translateX(-68%) skewY(-8deg) scaleX(.78)} }
@keyframes kittySpeedKick { 0%,100%{transform:translateX(0)} 18%{transform:translateX(14px) skewY(-1deg);filter:brightness(1.5)} 34%{transform:translateX(-8px)} 53%{transform:translateX(5px)} }
@keyframes kittySpeedFramePulse { to{opacity:.78;transform:scale(1.015)} }
@keyframes kittySpeedEdgeHorizontal { from{background-position:-180px 0} to{background-position:180px 0} }
@keyframes kittySpeedEdgeVertical { from{background-position:0 -280px} to{background-position:0 280px} }
@keyframes kittySpeedFrameBolt { 0%,72%,100%{opacity:0;transform:scale(.45) rotate(-8deg)} 76%{opacity:1;transform:scale(1.15) rotate(4deg)} 88%{opacity:.45;transform:scale(.78) rotate(-3deg)} }
@keyframes kittyClawTrace { 0%{opacity:0;transform:rotate(var(--kitty-claw-lane-angle)) scaleX(0)} 18%{opacity:1} 72%{opacity:1;transform:rotate(var(--kitty-claw-lane-angle)) scaleX(1)} 100%{opacity:0;transform:rotate(var(--kitty-claw-lane-angle)) scaleX(1.08)} }
@keyframes kittyClawFlash { 0%{opacity:0;transform:scale(.2)} 18%{opacity:1;transform:scale(1.18)} 100%{opacity:0;transform:scale(1.55)} }
@keyframes kittyClawSlash { 0%{opacity:0;transform:translateX(-115%) scaleX(.3)} 18%{opacity:1} 70%{opacity:1;transform:translateX(5%) scaleX(1)} 100%{opacity:0;transform:translateX(34%) scaleX(1.08)} }
@keyframes kittyClawShock { 0%,100%{opacity:0} 16%{opacity:1} 46%{opacity:.25} 61%{opacity:1;filter:drop-shadow(0 0 9px #fff)} }
@keyframes kittyClawCharge { 0%{opacity:0;transform:translate(-50%,-50%) scale(.18)} 23%{opacity:1;transform:translate(-50%,-50%) scale(1.08)} 68%{opacity:.78;transform:translate(-50%,-50%) scale(.86)} 100%{opacity:0;transform:translate(-50%,-50%) scale(1.3)} }
@keyframes kittyClawOrbit { to{transform:rotate(360deg)} }
@keyframes kittyClawCore { 0%{opacity:0;transform:scale(.2)} 24%{opacity:1;transform:scale(1.25)} 100%{opacity:0;transform:scale(3.2)} }
@keyframes kittyClawSpark { 0%{opacity:0} 18%{opacity:1} 100%{opacity:0;transform:rotate(calc(var(--kitty-fragment-i) * 23deg)) translateY(-180px) scaleY(1.4)} }
@keyframes kittyClawShake { 0%,100%{transform:translate(0)} 16%{transform:translate(-7px,2px) rotate(-.7deg);filter:brightness(1.45)} 34%{transform:translate(6px,-2px) rotate(.6deg)} 52%{transform:translate(-4px,1px)} 72%{transform:translate(3px,-1px)} }
@keyframes kittyClawShakeStrong { 0%,100%{transform:translate(0)} 12%{transform:translate(-12px,4px) rotate(-1.2deg);filter:brightness(1.7)} 25%{transform:translate(10px,-4px) rotate(1deg)} 39%{transform:translate(-8px,3px)} 54%{transform:translate(7px,-2px)} 70%{transform:translate(-4px,1px)} 84%{transform:translate(3px)} }
@keyframes kittyClawShakeOverloaded { 0%,100%{transform:translate(0)} 9%{transform:translate(-17px,6px) rotate(-1.8deg);filter:brightness(2)} 18%{transform:translate(15px,-6px) rotate(1.5deg)} 29%{transform:translate(-13px,5px)} 40%{transform:translate(11px,-4px)} 52%{transform:translate(-9px,3px)} 64%{transform:translate(7px,-3px)} 76%{transform:translate(-5px,2px)} 88%{transform:translate(3px,-1px)} }

@media (prefers-reduced-motion: reduce) {
    .kitty-charged-vfx *, .kitty-speed-cast *, .kitty-speed-frame *, .kitty-claw-impact *, .kitty-claw-trace * { animation-duration: .01ms !important; animation-iteration-count: 1 !important; }
    .kitty-charged-flash .v3-rank-frame, .kitty-speed-kick .v3-flip-inner, .kitty-claw-shake .v3-flip-inner, .kitty-claw-shake-strong .v3-flip-inner, .kitty-claw-shake-overloaded .v3-flip-inner { animation: none !important; }
}

body.v3-vfx-disabled :is(.kitty-charged-vfx, .kitty-speed-cast, .kitty-speed-frame, .kitty-claw-impact, .kitty-claw-charge, .kitty-claw-trace, .kitty-skin-motifs, .kitty-ultimate-stage, .kitty-ultimate-card, .kitty-storm-impact) {
    display: none !important;
}

/* Sharp curved cuts stay solid; the electrical filaments flicker beside them. */
.kitty-claw-svg { display: block; width: 100%; height: 100%; overflow: visible; }
.kitty-claw-svg.is-reversed { transform: scaleX(-1); }
.kitty-claw-blade { opacity: 0; animation: kittyRakeReveal 1.65s calc(var(--kitty-blade-i) * .055s) both; }
.kitty-claw-blade__edge { fill: var(--kitty-vfx-primary); filter: drop-shadow(0 0 8px var(--kitty-vfx-primary)); }
.kitty-claw-blade__core { fill: #fff; }
.kitty-claw-blade__scar { fill: none; stroke: var(--kitty-vfx-secondary); stroke-width: 2; stroke-dasharray: 1; stroke-dashoffset: 1; animation: kittyScarDraw .36s calc(var(--kitty-blade-i) * .055s) ease-out both; }
.kitty-claw-blade__arc { fill: none; stroke: var(--kitty-vfx-tertiary); stroke-width: 3; filter: drop-shadow(0 0 5px var(--kitty-vfx-primary)); animation: kittyRakeArc .26s calc(var(--kitty-blade-i) * .06s) steps(2,end) 4 both; }
.kitty-claw-impact.is-basic { inset: -8px -4px; }
.kitty-claw-impact.is-basic .kitty-claw-impact__slashes { inset: 12% -8% 18%; }
.kitty-claw-impact.is-basic .kitty-claw-blade { animation-duration: .85s; }
.kitty-claw-impact.is-basic .kitty-claw-impact__shock { opacity: .4; }
.kitty-claw-impact.is-basic .kitty-claw-impact__arc { animation-iteration-count: 1; }
.kitty-basic-seal { position: absolute; right: -5%; top: 15%; width: 38px; aspect-ratio: 1; color: var(--kitty-vfx-tertiary); filter: drop-shadow(0 0 4px var(--kitty-vfx-primary)); animation: kittyCrestCharge .85s ease-out both; }
.kitty-basic-seal svg { display: block; width: 100%; height: 100%; }
.kitty-claw-impact__echo { position: absolute; inset: -8% -24% 6%; rotate: 24deg; }
.kitty-claw-impact__echo .kitty-claw-blade { animation-delay: calc(.3s + var(--kitty-blade-i) * .055s); }
.kitty-claw-impact__echo :is(.kitty-claw-blade__scar, .kitty-claw-blade__arc) { animation-delay: .3s; }
.kitty-claw-impact.intensity-2 .kitty-claw-impact__shock { opacity: .65; }
.kitty-claw-impact.is-missed .kitty-claw-impact__slashes { translate: 85% -15%; opacity: .55; }
.kitty-claw-impact.is-missed :is(.kitty-claw-impact__flash, .kitty-claw-impact__shock, .kitty-claw-impact__sparks) { display: none; }
@keyframes kittyRakeReveal {
    0% { opacity: 0; clip-path: inset(0 0 100% 0); }
    12% { opacity: 1; clip-path: inset(0); }
    28% { opacity: 1; filter: brightness(1.4); }
    68% { opacity: .8; }
    100% { opacity: 0; clip-path: inset(0); }
}
@keyframes kittyScarDraw { to { stroke-dashoffset: 0; } }
@keyframes kittyRakeArc { 0%,100% { opacity: .15; } 45% { opacity: 1; } }

/* Large literal family emblems, shared across charge, speed and claws. */
.kitty-motif-orbit { --kitty-orbit-radius: clamp(60px, 7vw, 125px); position: absolute; left: 50%; top: 45%; width: 1px; height: 1px; color: var(--kitty-vfx-secondary); animation: kittyMotifCast 1.85s ease-out both; }
.kitty-motif { position: absolute; left: 0; top: 0; width: clamp(28px, 3.3vw, 46px); aspect-ratio: 1; margin: -20px; transform: rotate(var(--kitty-motif-angle)) translateY(calc(-1 * var(--kitty-orbit-radius))) rotate(calc(-1 * var(--kitty-motif-angle))); filter: drop-shadow(0 0 4px var(--kitty-vfx-primary)); }
.kitty-motif:nth-child(2n) { color: var(--kitty-vfx-tertiary); }
:is(.kitty-motif, .kitty-cast-crest, .kitty-speed-cat, .kitty-skin-motifs, .kitty-ultimate-nexus, .kitty-ultimate-card) svg { display: block; width: 100%; height: 100%; overflow: visible; }
.kitty-motif svg > :first-child { fill: currentColor; fill-opacity: .16; }
.kitty-charged-vfx { overflow: visible; }
.kitty-cast-crest { position: absolute; inset: 18% 5% 22%; color: var(--kitty-vfx-secondary); filter: drop-shadow(0 0 7px var(--kitty-vfx-primary)); animation: kittyCrestCharge 1.6s ease-out both; }
.kitty-cat-outline { stroke-width: 5; }
.kitty-cat-eye { fill: currentColor; stroke-width: 2; }
.kitty-speed-cat { position: absolute; inset: 18% 4% 22%; color: var(--kitty-vfx-secondary); filter: drop-shadow(-15px 0 4px var(--kitty-vfx-primary)); animation: kittySpeedCat 1.35s ease-out both; }
.kitty-speed-cast .kitty-motif-orbit { animation: kittySpeedMotifs 1.9s ease-out both; }
@keyframes kittyMotifCast { 0% { opacity: 0; scale: .35; rotate: -35deg; } 25%,60% { opacity: 1; } 100% { opacity: 0; scale: 1.5; rotate: 24deg; } }
@keyframes kittyCrestCharge { 0% { opacity: 0; scale: .45; } 30%,58% { opacity: .95; scale: 1; } 100% { opacity: 0; scale: 1.18; } }
@keyframes kittySpeedCat { 0% { opacity: 0; translate: -70% 0; } 20% { opacity: .95; } 65% { opacity: .7; translate: 10% 0; } 100% { opacity: 0; translate: 75% 0; } }
@keyframes kittySpeedMotifs { 0% { opacity: 0; translate: -90px 0; } 22%,55% { opacity: 1; } 100% { opacity: 0; translate: 110px 0; } }

/* Idle motifs hug the outer portrait edges, leaving face, stats and HUD clear. */
.kitty-skin-motifs { position: absolute; inset: 0; z-index: 13; pointer-events: none; color: var(--kitty-vfx-secondary); }
.kitty-skin-motifs__aura { position: absolute; inset: 7% -5% 20%; border-radius: 40%; background: radial-gradient(ellipse at 0 35%, color-mix(in srgb, var(--kitty-vfx-primary) 30%, transparent), transparent 45%), radial-gradient(ellipse at 100% 75%, color-mix(in srgb, var(--kitty-vfx-tertiary) 28%, transparent), transparent 45%); animation: kittySkinBreath 3.8s ease-in-out infinite alternate; }
.kitty-skin-motifs__emblem { position: absolute; top: 15%; right: -5%; width: clamp(36px, 4.2vw, 58px); aspect-ratio: 1; color: var(--kitty-vfx-secondary); filter: drop-shadow(0 1px 2px #050714) drop-shadow(0 0 4px var(--kitty-vfx-primary)); animation: kittySkinCharm 4.4s ease-in-out infinite alternate; }
.kitty-skin-motifs__charm { position: absolute; width: clamp(24px, 2.7vw, 38px); aspect-ratio: 1; filter: drop-shadow(0 1px 2px #050714) drop-shadow(0 0 3px var(--kitty-vfx-primary)); animation: kittySkinCharm 3.4s calc(var(--kitty-charm-i) * -.8s) ease-in-out infinite alternate; }
.kitty-skin-motifs__charm:nth-of-type(3) { left: -5%; top: 32%; }
.kitty-skin-motifs__charm:nth-of-type(4) { right: -5%; top: 49%; color: var(--kitty-vfx-tertiary); }
.kitty-skin-motifs__charm:nth-of-type(5) { left: -4%; top: 61%; }
.kitty-skin-motifs__charm:nth-of-type(6) { left: 10%; top: 12%; color: var(--kitty-vfx-tertiary); }
.kitty-skin-motifs__ultimate { display: none; position: absolute; inset: 20% 12% 37%; opacity: .18; color: var(--kitty-vfx-secondary); }
.kitty-skin-motifs.is-ultimate .kitty-skin-motifs__ultimate { display: block; animation: kittySkinUltimateBreath 1.5s ease-in-out infinite alternate; }
.kitty-skin-motifs.is-ultimate .kitty-skin-motifs__aura { filter: brightness(1.5); }
.kitty-skin-motifs[data-kitty-vfx-theme="base"] .kitty-skin-motifs__charm { opacity: .5; }
.kitty-skin-motifs[data-kitty-vfx-theme="storybook"] svg { stroke-width: 4; }
.kitty-skin-motifs[data-kitty-vfx-theme="vip"] svg { fill: color-mix(in srgb, var(--kitty-vfx-primary) 20%, transparent); }
@keyframes kittySkinBreath { from { opacity: .45; } to { opacity: .9; } }
@keyframes kittySkinUltimateBreath { from { opacity: .12; } to { opacity: .24; } }
@keyframes kittySkinCharm { from { translate: 0 -4px; rotate: -6deg; } to { translate: 0 5px; rotate: 7deg; } }

/* Ultimate: energy intake -> cat awakening -> crossed claws -> release. */
.kitty-ultimate-stage { position: fixed; inset: 0; z-index: 1600; pointer-events: none; overflow: hidden; isolation: isolate; animation: kittyUltimateFade 3.4s linear both; }
.kitty-ultimate-stage__veil { position: absolute; inset: 0; background: radial-gradient(ellipse at var(--kitty-origin-x) var(--kitty-origin-y), transparent 8%, #0506159c 65%); animation: kittyUltimateVeil 3.4s ease both; }
.kitty-ultimate-nexus { position: absolute; left: var(--kitty-origin-x); top: var(--kitty-origin-y); width: min(610px, 85vw, 85vh); aspect-ratio: 1; transform: translate(-50%,-50%); color: var(--kitty-vfx-secondary); }
.kitty-ultimate-nexus__aura { position: absolute; inset: -55%; background: radial-gradient(circle, color-mix(in srgb, var(--kitty-vfx-primary) 65%, transparent), transparent 67%); animation: kittyUltimateAura 3.4s ease-out both; }
.kitty-ultimate-backdrop { position: absolute; inset: -6%; color: var(--kitty-vfx-primary); filter: drop-shadow(0 0 6px var(--kitty-vfx-primary)); animation: kittyUltimateBackdrop 3.4s ease-out both; }
.kitty-ultimate-backdrop > svg { stroke-width: 1.8; }
.kitty-ultimate-star { width: 100%; height: 100%; animation: kittyUltimateStar 3.4s ease-out both; }
.kitty-ultimate-crown { position: absolute; inset: 0 8% 28%; color: var(--kitty-vfx-primary); }
.kitty-ultimate-book { position: absolute; inset: 20% -10% -2%; transform: perspective(700px) rotateX(25deg); animation: kittyUltimateBook 3.4s ease-out both; }
.kitty-ultimate-web { animation: kittyUltimateWeb 3.4s ease-out both; }
.kitty-ultimate-halo { position: absolute; inset: 10%; border: 3px solid var(--kitty-vfx-secondary); border-radius: 50%; box-shadow: 0 0 15px var(--kitty-vfx-primary), inset 0 0 12px var(--kitty-vfx-primary); animation: kittyUltimateHalo 3.4s ease-out both; }
.kitty-ultimate-halo.is-inner { inset: 24%; border: 5px dashed var(--kitty-vfx-tertiary); animation-delay: .08s; }
.kitty-ultimate-infall, .kitty-ultimate-debris { position: absolute; inset: 0; }
.kitty-ultimate-infall__bolt { position: absolute; left: 50%; top: 50%; width: 5px; height: 44%; transform-origin: 50% 0; background: linear-gradient(#fff, var(--kitty-vfx-secondary), var(--kitty-vfx-primary), transparent); clip-path: polygon(35% 0,100% 0,58% 27%,100% 30%,40% 58%,80% 60%,0 100%,25% 65%,0 56%,35% 28%,0 25%); filter: drop-shadow(0 0 5px var(--kitty-vfx-primary)); animation: kittyUltimateIntake 1.2s calc(var(--kitty-fragment-i) * .035s) ease-in both; }
.kitty-ultimate-cat { position: absolute; inset: 24% 25% 26%; color: var(--kitty-vfx-secondary); filter: drop-shadow(0 0 6px #fff) drop-shadow(0 0 14px var(--kitty-vfx-primary)); animation: kittyUltimateCat 3.4s ease-out both; }
.kitty-ultimate-seal { position: absolute; inset: 55% 40% 25%; color: var(--kitty-vfx-tertiary); filter: drop-shadow(0 0 5px var(--kitty-vfx-primary)); animation: kittyUltimateSeal 3.4s ease-out both; }
.kitty-ultimate-nexus > .kitty-motif-orbit { --kitty-orbit-radius: min(225px, 30vw, 30vh); top: 50%; animation: kittyUltimateOrbit 3.4s ease-out both; }
.kitty-ultimate-nexus .kitty-motif { width: clamp(32px, 5vw, 66px); margin: -26px; }
.kitty-ultimate-rake { position: absolute; inset: 8% 9%; rotate: -38deg; opacity: 0; animation: kittyUltimateRake .95s 1.35s ease-out both; }
.kitty-ultimate-rake.is-right { rotate: 38deg; animation-delay: 1.52s; }
.kitty-ultimate-rake .kitty-claw-blade { animation-delay: calc(1.35s + var(--kitty-blade-i) * .04s); animation-duration: 1.1s; }
.kitty-ultimate-rake.is-right .kitty-claw-blade { animation-delay: calc(1.52s + var(--kitty-blade-i) * .04s); }
.kitty-ultimate-rake :is(.kitty-claw-blade__scar, .kitty-claw-blade__arc) { animation-delay: 1.4s; }
.kitty-ultimate-wave { position: absolute; inset: 30%; border: 4px solid var(--kitty-vfx-secondary); border-radius: 50%; box-shadow: 0 0 14px var(--kitty-vfx-primary); opacity: 0; animation: kittyUltimateWave 1.3s 1.85s ease-out both; }
.kitty-ultimate-wave.is-second { border-color: var(--kitty-vfx-tertiary); animation-delay: 2.02s; }
.kitty-ultimate-debris__spark { position: absolute; left: 50%; top: 50%; width: 3px; height: calc(12px + var(--kitty-fragment-m4) * 9px); transform-origin: 50% 0; background: linear-gradient(#fff, var(--kitty-vfx-tertiary), transparent); opacity: 0; animation: kittyUltimateDebris 1.1s calc(1.85s + var(--kitty-fragment-m5) * .055s) ease-out both; }
.kitty-ultimate-stage__flash { position: absolute; inset: 0; background: radial-gradient(circle at var(--kitty-origin-x) var(--kitty-origin-y), #ffffffb3, color-mix(in srgb, var(--kitty-vfx-primary) 20%, transparent) 38%, transparent 70%); opacity: 0; animation: kittyUltimateFlash .55s 1.85s ease-out both; }
.kitty-ultimate-stage[data-kitty-vfx-theme="upgraded"] .kitty-ultimate-nexus__aura { background: conic-gradient(from 30deg, transparent, #36d4fc55, transparent, #fb87bd55, transparent, #f7a46655, transparent); border-radius: 50%; }
.kitty-ultimate-stage[data-kitty-vfx-theme="upgraded"] .kitty-ultimate-seal { inset: 52% 32% 16%; }
.kitty-ultimate-stage[data-kitty-vfx-theme="storybook"] .kitty-ultimate-halo { border-style: dotted; border-width: 5px; }
.kitty-ultimate-stage[data-kitty-vfx-theme="vip"] .kitty-ultimate-halo.is-outer { border-style: double; border-width: 8px; }
.kitty-ultimate-stage[data-kitty-tier="maximum"] .kitty-ultimate-nexus__aura { filter: brightness(1.35) saturate(1.3); }
.kitty-ultimate-stage[data-kitty-tier="maximum"] .kitty-ultimate-cat { filter: drop-shadow(0 0 10px #fff) drop-shadow(0 0 24px var(--kitty-vfx-primary)); }
.kitty-ultimate-card { position: absolute; inset: -15px -12px; z-index: 56; pointer-events: none; animation: kittyUltimateCard 3.4s ease-out both; }
.kitty-ultimate-card > span:first-child { position: absolute; inset: 0; border: 4px solid var(--kitty-vfx-secondary); box-shadow: 0 0 12px #fff, 0 0 42px var(--kitty-vfx-primary), 0 0 80px color-mix(in srgb, var(--kitty-vfx-primary) 55%, transparent), inset 0 0 30px var(--kitty-vfx-primary); }
.kitty-ultimate-card > b { position: absolute; inset: 23% 5% 29%; color: var(--kitty-vfx-secondary); opacity: .45; }
.kitty-ultimate-card > .kitty-motif-orbit { animation-delay: 1.5s; }
@keyframes kittyUltimateFade { 0%,100% { opacity: 0; } 7%,87% { opacity: 1; } }
@keyframes kittyUltimateVeil { 0%,100% { opacity: 0; } 20%,68% { opacity: .85; } }
@keyframes kittyUltimateAura { 0% { scale: .2; opacity: 0; } 30% { opacity: .65; } 55% { scale: 1; opacity: 1; } 100% { scale: 1.35; opacity: 0; } }
@keyframes kittyUltimateBackdrop { 0% { opacity: 0; scale: 1.4; } 20%,58% { opacity: .9; scale: 1; } 100% { opacity: 0; scale: 1.12; } }
@keyframes kittyUltimateStar { 0% { rotate: -80deg; scale: .4; } 55% { rotate: 0deg; scale: 1; } 100% { rotate: 24deg; scale: 1.3; } }
@keyframes kittyUltimateWeb { 0% { scale: .3; rotate: -30deg; } 50% { scale: 1; rotate: 0deg; } 100% { scale: 1.1; rotate: 12deg; } }
@keyframes kittyUltimateBook { 0% { scale: .25 1; } 30%,70% { scale: 1; } 100% { scale: 1.15; } }
@keyframes kittyUltimateHalo { 0% { scale: 1.65; opacity: 0; rotate: -40deg; } 24% { opacity: .8; } 43% { scale: .65; opacity: 1; } 62% { scale: 1; } 100% { scale: 1.9; opacity: 0; rotate: 70deg; } }
@keyframes kittyUltimateIntake { 0% { opacity: 0; transform: rotate(calc(var(--kitty-fragment-i) * 43deg)) translateY(-155%) scaleY(.3); } 28% { opacity: .85; } 100% { opacity: 0; transform: rotate(calc(var(--kitty-fragment-i) * 43deg)) translateY(-15%) scaleY(.2); } }
@keyframes kittyUltimateCat { 0%,18% { opacity: 0; scale: .15; } 40% { opacity: 1; scale: 1.1; } 55%,68% { opacity: 1; scale: 1; } 100% { opacity: 0; scale: 1.22; } }
@keyframes kittyUltimateSeal { 0%,25% { opacity: 0; translate: 0 30px; } 46%,72% { opacity: 1; translate: 0 0; } 100% { opacity: 0; } }
@keyframes kittyUltimateOrbit { 0% { opacity: 0; scale: 1.5; rotate: -50deg; } 25% { opacity: 1; } 43% { scale: .55; rotate: 0deg; } 60% { scale: 1; } 82% { opacity: 1; } 100% { opacity: 0; scale: 1.15; rotate: 30deg; } }
@keyframes kittyUltimateRake { 0% { opacity: 0; scale: .75; } 15%,55% { opacity: 1; } 100% { opacity: 0; scale: 1.1; } }
@keyframes kittyUltimateWave { 0% { opacity: 0; scale: .25; } 12% { opacity: 1; } 100% { opacity: 0; scale: 6; } }
@keyframes kittyUltimateDebris { 0% { opacity: 0; transform: rotate(calc(var(--kitty-fragment-i) * 31deg)) translateY(-70px); } 15% { opacity: 1; } 100% { opacity: 0; transform: rotate(calc(var(--kitty-fragment-i) * 31deg)) translateY(-330px) scaleY(.2); } }
@keyframes kittyUltimateFlash { 0% { opacity: 0; } 16% { opacity: .7; } 100% { opacity: 0; } }
@keyframes kittyUltimateCard { 0% { opacity: 0; scale: .94; } 8%,92% { opacity: 1; scale: 1; } 100% { opacity: 0; } }

/* The caster conducts the storm for the full cast, including its buildup. */
.kitty-ultimate-source-current { position: absolute; pointer-events: none; overflow: visible; animation: kittyUltimateCard 3.4s ease-out both; }
.kitty-source-plasma { position: absolute; inset: -16% -32%; background: radial-gradient(ellipse, transparent 25%, color-mix(in srgb, var(--kitty-vfx-secondary) 35%, transparent) 43%, color-mix(in srgb, var(--kitty-vfx-primary) 40%, transparent) 52%, transparent 70%); animation: kittySourcePlasma .85s ease-in-out infinite alternate; }
.kitty-source-current { position: absolute; inset: 5% -4% 20%; }
.kitty-source-current > svg { display: block; width: 100%; height: 100%; overflow: visible; }
.kitty-source-current__bolt { animation: kittySourceCurrent .78s calc(var(--kitty-current-i) * -.11s) ease-in-out infinite; }
.kitty-source-current__bolt path { fill: none; stroke-linecap: round; stroke-linejoin: round; vector-effect: non-scaling-stroke; }
.kitty-source-current__glow { stroke: var(--kitty-vfx-primary); stroke-width: 8; opacity: .6; filter: drop-shadow(0 0 7px var(--kitty-vfx-primary)); }
.kitty-source-current__core { stroke: var(--kitty-vfx-secondary); stroke-width: 2; stroke-dasharray: 28 10 6 12; animation: kittyTornadoSpin .38s calc(var(--kitty-current-i) * -.07s) linear infinite; }
.kitty-source-current__bolt:nth-child(3n) .kitty-source-current__core { stroke: #fff; stroke-width: 2.5; }
.kitty-source-current__bolt:nth-child(3n+2) .kitty-source-current__glow { stroke: var(--kitty-vfx-tertiary); }
@keyframes kittySourceCurrent { 0%,100% { opacity: .15; } 28%,55% { opacity: .9; } 75% { opacity: .35; } }
@keyframes kittySourcePlasma { from { opacity: .45; scale: .98; } to { opacity: .85; scale: 1.08; } }

/* Massive electric tornado and three lightning volleys into every enemy portrait. */
.kitty-ultimate-storm { position: absolute; inset: 0; pointer-events: none; color: var(--kitty-vfx-secondary); }
.kitty-storm-atmosphere { position: absolute; inset: 0; background: radial-gradient(ellipse at var(--kitty-storm-cloud-x) calc(var(--kitty-storm-cloud-y) + var(--kitty-tornado-height) * .45), color-mix(in srgb, var(--kitty-vfx-primary) 28%, transparent), color-mix(in srgb, var(--kitty-vfx-tertiary) 13%, transparent) 42%, transparent 78%); animation: kittyStormCloud 2.8s .35s ease-out both; }
.kitty-ultimate-storm__cloud { position: absolute; left: var(--kitty-storm-cloud-x); top: var(--kitty-storm-cloud-y); width: min(1150px, 110vw); height: 235px; transform: translate(-50%, -50%); opacity: 0; animation: kittyStormCloud 2.8s .35s ease-out both; }
.kitty-ultimate-storm__cloud::before { content: ""; position: absolute; inset: -80% -35%; border-radius: 50%; background: radial-gradient(ellipse, color-mix(in srgb, var(--kitty-vfx-primary) 48%, transparent), transparent 70%); }
.kitty-ultimate-storm__cloud > i { position: absolute; inset: 18% 0; border-radius: 50%; background: radial-gradient(ellipse at 50% 85%, color-mix(in srgb, var(--kitty-vfx-secondary) 52%, transparent), #0d112ddd 40%, transparent 72%); filter: drop-shadow(0 5px 12px var(--kitty-vfx-primary)); animation: kittyStormCloudRoll 1.2s ease-in-out 2 alternate; }
.kitty-ultimate-storm__cloud > i:nth-child(2) { inset: 0 14% 24%; translate: -18% 0; animation-delay: .15s; }
.kitty-ultimate-storm__cloud > i:nth-child(3) { inset: 12% 12% 8%; translate: 22% 0; background: radial-gradient(ellipse at 50% 85%, color-mix(in srgb, var(--kitty-vfx-tertiary) 45%, transparent), #141126dd 40%, transparent 72%); animation-delay: .3s; }
.kitty-ultimate-storm__cloud > b { position: absolute; left: 50%; top: 18%; width: 65px; aspect-ratio: 1; translate: -50% 0; color: var(--kitty-vfx-tertiary); filter: drop-shadow(0 0 7px var(--kitty-vfx-primary)); }
.kitty-ultimate-storm__cloud > b svg { width: 100%; height: 100%; }
.kitty-storm-tornado { position: absolute; left: var(--kitty-storm-cloud-x); top: calc(var(--kitty-storm-cloud-y) - var(--kitty-tornado-height) * .08); width: var(--kitty-tornado-width); height: var(--kitty-tornado-height); translate: -50% 0; transform-origin: 50% 0; opacity: 0; animation: kittyTornadoForm 2.8s .35s ease-out both; }
.kitty-storm-tornado > svg { display: block; position: relative; z-index: 2; width: 100%; height: 100%; overflow: visible; }
.kitty-tornado-aura { position: absolute; inset: -28% -55%; border-radius: 50%; background: radial-gradient(ellipse, color-mix(in srgb, var(--kitty-vfx-secondary) 24%, transparent) 12%, color-mix(in srgb, var(--kitty-vfx-primary) 48%, transparent) 32%, color-mix(in srgb, var(--kitty-vfx-tertiary) 21%, transparent) 48%, transparent 70%); animation: kittyTornadoAura .8s ease-in-out infinite alternate; }
.kitty-tornado-aura.is-outer { inset: -45% -85%; background: repeating-conic-gradient(from 25deg, transparent 0deg 34deg, color-mix(in srgb, var(--kitty-vfx-primary) 24%, transparent) 48deg, transparent 65deg 90deg); mask-image: radial-gradient(ellipse, transparent 22%, #000 40%, transparent 69%); animation: kittyTornadoAuraTurn 2.4s linear infinite; }
.kitty-tornado-pressure { position: absolute; z-index: 1; left: 50%; top: 62%; width: 80%; height: 27%; translate: -50% -50%; border: 4px solid var(--kitty-vfx-secondary); border-radius: 50%; box-shadow: 0 0 22px var(--kitty-vfx-primary); opacity: 0; animation: kittyTornadoPressure 1.1s 1.15s ease-out both; }
.kitty-tornado-pressure.is-second { border-color: var(--kitty-vfx-tertiary); animation-delay: 1.55s; }
.kitty-tornado-funnel { fill: color-mix(in srgb, var(--kitty-vfx-primary) 27%, transparent); stroke: color-mix(in srgb, var(--kitty-vfx-secondary) 48%, transparent); stroke-width: 3; filter: drop-shadow(0 0 24px var(--kitty-vfx-primary)); }
.kitty-tornado-coil ellipse { fill: none; }
.kitty-tornado-coil__haze { stroke: var(--kitty-vfx-primary); stroke-width: 17; opacity: .5; filter: blur(5px); }
.kitty-tornado-coil__current { stroke: var(--kitty-vfx-secondary); stroke-width: 4.5; stroke-dasharray: 31 10 6 10 23 20; filter: drop-shadow(0 0 6px var(--kitty-vfx-primary)); animation: kittyTornadoSpin var(--kitty-coil-duration) calc(var(--kitty-coil-i) * -.06s) linear infinite; }
.kitty-tornado-coil:nth-child(3n) .kitty-tornado-coil__current { stroke: var(--kitty-vfx-tertiary); animation-direction: reverse; }
.kitty-tornado-helix { fill: none; stroke: var(--kitty-vfx-tertiary); stroke-width: 3.5; stroke-dasharray: 9 5 18 8; filter: drop-shadow(0 0 6px var(--kitty-vfx-primary)); animation: kittyTornadoSpin .5s calc(var(--kitty-strand-i) * -.15s) linear infinite; }
.kitty-tornado-helix:nth-of-type(2n) { stroke: #fff; stroke-width: 1.5; opacity: .8; }
.kitty-tornado-eye { fill: #101428aa; stroke: var(--kitty-vfx-secondary); stroke-width: 6; stroke-dasharray: 55 20; filter: drop-shadow(0 0 20px var(--kitty-vfx-primary)); animation: kittyTornadoEye .45s linear infinite; }
.kitty-tornado-foot { fill: none; stroke: var(--kitty-vfx-primary); stroke-width: 6; filter: drop-shadow(0 0 6px var(--kitty-vfx-secondary)); }
.kitty-tornado-wind { position: absolute; inset: -12% -20%; z-index: 3; }
.kitty-tornado-wind__streak { position: absolute; left: calc(7% + var(--kitty-fragment-m5) * 19%); top: calc(6% + var(--kitty-fragment-i) * 3.1%); width: calc(20% + var(--kitty-fragment-m3) * 8%); height: 3px; border-radius: 50%; background: linear-gradient(90deg, transparent, var(--kitty-vfx-primary), var(--kitty-vfx-secondary), transparent); box-shadow: 0 0 6px var(--kitty-vfx-primary); opacity: 0; animation: kittyTornadoWind .65s calc(var(--kitty-fragment-i) * -.045s) ease-in-out infinite; }
.kitty-storm-tornado__motifs { position: absolute; inset: 0; z-index: 4; }
.kitty-storm-tornado__motifs > i { position: absolute; left: 50%; top: calc(12% + var(--kitty-tornado-motif-i) * 13%); width: calc(44px - var(--kitty-tornado-motif-i) * 4px); aspect-ratio: 1; color: var(--kitty-vfx-tertiary); filter: drop-shadow(0 0 4px var(--kitty-vfx-primary)); --kitty-tornado-orbit: calc(var(--kitty-tornado-width) * (.32 - var(--kitty-tornado-motif-i) * .05)); animation: kittyTornadoMotif 1s calc(var(--kitty-tornado-motif-i) * -.2s) linear infinite; }
.kitty-storm-tornado__motifs svg { display: block; width: 100%; height: 100%; }
@keyframes kittyTornadoForm { 0% { opacity: 0; scale: .65 .08; } 28% { opacity: .9; scale: 1 1; } 75% { opacity: 1; scale: 1.05 1; } 100% { opacity: 0; scale: 1.2 1.05; } }
@keyframes kittyTornadoSpin { to { stroke-dashoffset: -100; } }
@keyframes kittyTornadoAura { from { opacity: .6; scale: .98; } to { opacity: .95; scale: 1.1; } }
@keyframes kittyTornadoAuraTurn { to { rotate: 360deg; } }
@keyframes kittyTornadoPressure { 0% { opacity: 0; scale: .4; } 18% { opacity: .9; } 100% { opacity: 0; scale: 2.8; } }
@keyframes kittyTornadoWind { 0% { opacity: 0; translate: -50% 0; rotate: -12deg; } 35%,60% { opacity: .8; } 100% { opacity: 0; translate: 70% -20px; rotate: 15deg; } }
@keyframes kittyTornadoEye { to { stroke-dashoffset: -150; } }
@keyframes kittyTornadoMotif { 0% { transform: translateX(calc(-1 * var(--kitty-tornado-orbit))) scale(.8) rotate(-16deg); opacity: .65; } 25% { transform: translateX(0) scale(1) rotate(0deg); opacity: 1; } 50% { transform: translateX(var(--kitty-tornado-orbit)) scale(.8) rotate(16deg); opacity: .65; } 75% { transform: translateX(0) scale(.6) rotate(0deg); opacity: .25; } 100% { transform: translateX(calc(-1 * var(--kitty-tornado-orbit))) scale(.8) rotate(-16deg); opacity: .65; } }
.kitty-ultimate-storm__lightning { position: absolute; inset: 0; width: 100%; height: 100%; overflow: visible; }
.kitty-storm-bolt { opacity: 0; animation: kittyStormBolt .65s var(--kitty-storm-delay) ease-out both; }
.kitty-storm-bolt path { fill: none; stroke-linecap: round; stroke-linejoin: round; vector-effect: non-scaling-stroke; }
.kitty-storm-bolt__glow { stroke: var(--kitty-vfx-primary); stroke-width: 38; opacity: .65; filter: blur(9px); }
.kitty-storm-bolt__color { stroke: var(--kitty-vfx-secondary); stroke-width: 12; filter: drop-shadow(0 0 6px var(--kitty-vfx-primary)); }
.kitty-storm-bolt__core { stroke: #fff; stroke-width: 4; }
.kitty-storm-bolt :is(.kitty-storm-bolt__color, .kitty-storm-bolt__core) { stroke-dasharray: 1; stroke-dashoffset: 1; animation: kittyStormBoltDraw .12s var(--kitty-storm-delay) linear both; }
.kitty-storm-bolt__branch { stroke: var(--kitty-vfx-tertiary); stroke-width: 2.5; filter: drop-shadow(0 0 3px var(--kitty-vfx-primary)); }
.kitty-storm-bolt.is-echo .kitty-storm-bolt__color { stroke: var(--kitty-vfx-tertiary); }
.kitty-storm-impact { position: absolute; inset: -12px -10px; z-index: 65; pointer-events: none; overflow: visible; animation: kittyStormImpact .9s ease-out both; }
.kitty-storm-impact__flash { position: absolute; inset: 0; background: radial-gradient(ellipse at 50% 43%, #fff 0 2%, color-mix(in srgb, var(--kitty-vfx-secondary) 65%, transparent) 12%, color-mix(in srgb, var(--kitty-vfx-primary) 25%, transparent) 40%, transparent 72%); animation: kittyClawFlash .55s ease-out both; }
.kitty-storm-impact__ring { position: absolute; inset: 2%; border: 5px solid var(--kitty-vfx-secondary); box-shadow: 0 0 30px var(--kitty-vfx-primary), inset 0 0 24px var(--kitty-vfx-primary); animation: kittyStormCardRing .75s ease-out both; }
.kitty-storm-impact__arcs, .kitty-storm-impact__sparks { position: absolute; inset: 0; }
.kitty-storm-impact__arcs .kitty-claw-impact__arc { animation-duration: .36s; animation-iteration-count: 1; }
.kitty-storm-impact__sparks .kitty-claw-impact__spark { animation-duration: .5s; }
.kitty-storm-impact__seal { position: absolute; left: 50%; top: 43%; width: clamp(38px, 5vw, 72px); aspect-ratio: 1; translate: -50% -50%; color: var(--kitty-vfx-tertiary); filter: drop-shadow(0 0 5px var(--kitty-vfx-primary)); animation: kittyCrestCharge .8s ease-out both; }
.kitty-storm-impact__seal svg { display: block; width: 100%; height: 100%; }
@keyframes kittyStormCloud { 0% { opacity: 0; scale: .7; } 25%,78% { opacity: .95; scale: 1; } 100% { opacity: 0; scale: 1.15; } }
@keyframes kittyStormCloudRoll { from { scale: .95 1; opacity: .65; } to { scale: 1.05 1.1; opacity: 1; } }
@keyframes kittyStormBolt { 0% { opacity: 0; } 15%,35% { opacity: 1; } 60% { opacity: .3; } 74% { opacity: .65; } 100% { opacity: 0; } }
@keyframes kittyStormBoltDraw { to { stroke-dashoffset: 0; } }
@keyframes kittyStormImpact { 0%,100% { opacity: 0; } 10%,50% { opacity: 1; } }
@keyframes kittyStormCardRing { 0% { opacity: 0; scale: .88; } 20% { opacity: 1; scale: 1; } 100% { opacity: 0; scale: 1.1; } }

/* Charge-spending casts have extra geometry, rather than just brighter colors. */
.kitty-power-wave { position: absolute; left: 50%; top: 43%; width: 80%; aspect-ratio: 1; translate: -50% -50%; border: 4px solid var(--kitty-vfx-secondary); border-radius: 50%; box-shadow: 0 0 15px var(--kitty-vfx-primary), inset 0 0 12px var(--kitty-vfx-primary); opacity: 0; animation: kittyPowerWave 1.05s .06s ease-out both; }
.kitty-power-wave.is-second { border-color: var(--kitty-vfx-tertiary); animation-delay: .3s; }
.kitty-overdrive-reactor { position: absolute; inset: -12% -12%; animation: kittySpeedCastFade 1.9s ease-out both; }
.kitty-overdrive-reactor .kitty-source-current { inset: 8% 2% 22%; }
.kitty-overdrive-reactor__echo { position: absolute; inset: 23% 13% 30%; color: var(--kitty-vfx-secondary); filter: drop-shadow(0 0 8px var(--kitty-vfx-primary)); opacity: 0; animation: kittyOverdriveEcho 1.05s .12s ease-out both; }
.kitty-overdrive-reactor__echo.is-second { animation-delay: .32s; color: var(--kitty-vfx-tertiary); }
.kitty-overdrive-reactor__echo svg { display: block; width: 100%; height: 100%; }
.kitty-speed-cast.is-overdrive .kitty-speed-cast__streak { height: 5px; width: calc(100% + var(--kitty-fragment-m3) * 18%); box-shadow: 0 0 7px #fff, 0 0 18px var(--kitty-vfx-primary); }
.kitty-speed-cast.is-overdrive .kitty-speed-cast__burst-ray { width: 6px; height: 68%; filter: drop-shadow(0 0 8px var(--kitty-vfx-primary)); }
.kitty-speed-cast.is-overdrive .kitty-speed-cat { filter: drop-shadow(-22px 0 6px var(--kitty-vfx-primary)) drop-shadow(0 0 9px var(--kitty-vfx-secondary)); }
.kitty-speed-cast.is-overdrive .kitty-motif-orbit { --kitty-orbit-radius: clamp(85px, 10vw, 170px); }
.kitty-speed-frame__overdrive-current { display: none; }
.kitty-speed-frame.is-overdrive .kitty-speed-frame__overdrive-current { display: block; opacity: .38; inset: 9% 0 23%; }
.kitty-speed-frame.is-overdrive .kitty-speed-frame__corners i { border-width: 6px; filter: drop-shadow(0 0 10px var(--kitty-vfx-primary)); }
.kitty-speed-frame.is-overdrive .kitty-speed-frame__edge:is(.is-left, .is-right) { height: auto; width: 5px; }
.kitty-claw-charge { position: absolute; inset: -12px -10px; z-index: 56; pointer-events: none; animation: kittyClawChargeCast 1.1s ease-out both; }
.kitty-claw-charge__crest { position: absolute; inset: 18% 4% 28%; color: var(--kitty-vfx-secondary); filter: drop-shadow(0 0 8px var(--kitty-vfx-primary)); }
.kitty-claw-charge__crest svg { display: block; width: 100%; height: 100%; }
.kitty-claw-charge.intensity-2 .kitty-source-plasma { inset: -28% -50%; }
.kitty-claw-impact__power-aura { position: absolute; z-index: -1; inset: -18% -38%; background: radial-gradient(ellipse at 50% 43%, color-mix(in srgb, var(--kitty-vfx-secondary) 36%, transparent), color-mix(in srgb, var(--kitty-vfx-primary) 40%, transparent) 35%, transparent 68%); animation: kittyClawPowerAura 1.7s ease-out both; }
.kitty-claw-impact.intensity-1:not(.is-basic) .kitty-claw-impact__slashes { inset: -10% -33% 3%; }
.kitty-claw-impact.intensity-2:not(.is-basic) .kitty-claw-impact__slashes { inset: -20% -46% -4%; }
.kitty-claw-impact:not(.is-basic):is(.intensity-1, .intensity-2) .kitty-claw-blade__edge { filter: drop-shadow(0 0 9px var(--kitty-vfx-primary)) drop-shadow(0 0 13px var(--kitty-vfx-secondary)); }
.kitty-claw-impact:not(.is-basic):is(.intensity-1, .intensity-2) .kitty-motif-orbit { --kitty-orbit-radius: clamp(85px, 10vw, 165px); }
.kitty-claw-impact:not(.is-basic):is(.intensity-1, .intensity-2) .kitty-claw-impact__arc { width: 7px; animation-duration: .4s; }
.kitty-claw-impact__echo.is-third { inset: -15% -39% -3%; rotate: -38deg; }
.kitty-claw-impact__echo.is-third .kitty-claw-blade { animation-delay: calc(.6s + var(--kitty-blade-i) * .055s); }
.kitty-claw-impact__echo.is-third :is(.kitty-claw-blade__scar, .kitty-claw-blade__arc) { animation-delay: .6s; }
.kitty-claw-impact.intensity-2 .kitty-claw-impact__power-aura { inset: -28% -60%; filter: brightness(1.3); }
.kitty-claw-impact.intensity-2 .kitty-power-wave { border-width: 7px; }
@keyframes kittyPowerWave { 0% { opacity: 0; scale: .2; } 18% { opacity: .95; } 100% { opacity: 0; scale: 2.4; } }
@keyframes kittyOverdriveEcho { 0% { opacity: 0; translate: 35% 0; scale: .8; } 20% { opacity: .8; } 100% { opacity: 0; translate: -110% 0; scale: 1.15; } }
@keyframes kittyClawChargeCast { 0% { opacity: 0; scale: .85; } 18%,46% { opacity: .95; scale: 1; } 100% { opacity: 0; scale: 1.12; } }
@keyframes kittyClawPowerAura { 0% { opacity: 0; scale: .4; } 20%,52% { opacity: .95; scale: 1; } 100% { opacity: 0; scale: 1.25; } }

/* At exactly 100 charge the storm gains a corona and a towering lightning core. */
.kitty-ultimate-stage[data-kitty-tier="maximum"] .kitty-tornado-aura { inset: -42% -75%; filter: saturate(1.3) brightness(1.15); }
.kitty-ultimate-stage[data-kitty-tier="maximum"] .kitty-tornado-aura.is-outer { inset: -60% -105%; animation-duration: 1.65s; }
.kitty-ultimate-stage[data-kitty-tier="maximum"] .kitty-tornado-funnel { stroke-width: 4.5; fill: color-mix(in srgb, var(--kitty-vfx-primary) 36%, transparent); filter: drop-shadow(0 0 36px var(--kitty-vfx-primary)); }
.kitty-ultimate-stage[data-kitty-tier="maximum"] .kitty-tornado-coil__current { stroke-width: 6; filter: drop-shadow(0 0 10px var(--kitty-vfx-primary)); }
.kitty-ultimate-stage[data-kitty-tier="maximum"] .kitty-tornado-helix { stroke-width: 4.5; animation-duration: .36s; }
.kitty-ultimate-stage[data-kitty-tier="maximum"] .kitty-tornado-eye { stroke-width: 9; filter: drop-shadow(0 0 26px var(--kitty-vfx-secondary)); }
.kitty-ultimate-stage[data-kitty-tier="maximum"] .kitty-tornado-wind__streak { height: 5px; box-shadow: 0 0 8px var(--kitty-vfx-secondary), 0 0 14px var(--kitty-vfx-primary); }
.kitty-ultimate-stage[data-kitty-tier="maximum"] .kitty-storm-bolt__glow { stroke-width: 58; }
.kitty-ultimate-stage[data-kitty-tier="maximum"] .kitty-storm-bolt__color { stroke-width: 17; }
.kitty-ultimate-stage[data-kitty-tier="maximum"] .kitty-storm-bolt__core { stroke-width: 5; }
.kitty-ultimate-stage[data-kitty-tier="maximum"] .kitty-source-current__glow { stroke-width: 11; opacity: .8; }
.kitty-ultimate-stage[data-kitty-tier="maximum"] .kitty-source-current__core { stroke-width: 3; }
.kitty-ultimate-stage[data-kitty-tier="maximum"] .kitty-source-plasma { inset: -28% -55%; }
.kitty-tornado-corona { position: absolute; inset: 0; z-index: 5; color: var(--kitty-vfx-tertiary); }
.kitty-tornado-corona > .kitty-motif-orbit { top: 15%; --kitty-orbit-radius: calc(var(--kitty-tornado-width) * .4); animation: kittyMaximumCorona 2.6s .4s ease-out both; }
.kitty-tornado-corona .kitty-motif { width: 64px; margin: -32px; filter: drop-shadow(0 0 8px var(--kitty-vfx-primary)); }
.kitty-tornado-pressure.is-maximum { top: 45%; border-width: 8px; border-color: var(--kitty-vfx-tertiary); animation: kittyMaximumPressure 1.4s 1.4s ease-out both; }
.kitty-maximum-spine { opacity: 0; animation: kittyMaximumSpine 2.2s calc(.65s + var(--kitty-spine-i) * .15s) ease-out both; }
.kitty-maximum-spine path { fill: none; stroke-linecap: round; stroke-linejoin: round; }
.kitty-storm-impact.is-maximum .kitty-storm-impact__ring { inset: -2%; border-width: 7px; box-shadow: 0 0 12px #fff, 0 0 45px var(--kitty-vfx-primary), inset 0 0 30px var(--kitty-vfx-secondary); }
.kitty-storm-impact.is-maximum .kitty-storm-impact__seal { width: clamp(54px, 7vw, 95px); }
.kitty-ultimate-card.is-maximum > span:first-child { border-width: 6px; box-shadow: 0 0 18px #fff, 0 0 65px var(--kitty-vfx-primary), 0 0 110px var(--kitty-vfx-tertiary), inset 0 0 40px var(--kitty-vfx-primary); }
.kitty-ultimate-card.is-maximum .kitty-source-current__glow { stroke-width: 11; }
@keyframes kittyMaximumCorona { 0% { opacity: 0; scale: .4; rotate: -50deg; } 22%,78% { opacity: 1; scale: 1; } 100% { opacity: 0; scale: 1.15; rotate: 50deg; } }
@keyframes kittyMaximumPressure { 0% { opacity: 0; scale: .2; } 18% { opacity: 1; } 100% { opacity: 0; scale: 3.5; } }
@keyframes kittyMaximumSpine { 0% { opacity: 0; } 18%,38% { opacity: .95; } 55% { opacity: .35; } 74% { opacity: .85; } 100% { opacity: 0; } }

body.v3-ultimate-vfx-disabled :is(.kitty-ultimate-stage, .kitty-ultimate-card, .kitty-skin-motifs__ultimate, .kitty-storm-impact) { display: none !important; }
@media (prefers-reduced-motion: reduce) {
    :is(.kitty-skin-motifs, .kitty-ultimate-stage, .kitty-ultimate-card, .kitty-charged-vfx, .kitty-claw-charge, .kitty-speed-cast, .kitty-claw-impact, .kitty-storm-impact) * { animation: none !important; }
    .kitty-speed-frame, .kitty-speed-kick .v3-flip-inner { animation: none !important; }
    .kitty-skin-motifs__charm, .kitty-skin-motifs__emblem { translate: none; rotate: none; }
    .kitty-claw-blade { opacity: .8; }
    .kitty-claw-blade__scar { stroke-dashoffset: 0; }
    .kitty-ultimate-stage, .kitty-ultimate-card { animation: kittyUltimateFade 3.4s linear both; }
    .kitty-ultimate-cat, .kitty-ultimate-backdrop, .kitty-ultimate-seal { opacity: .7; }
    .kitty-ultimate-rake { opacity: .5; }
    .kitty-ultimate-stage__flash, .kitty-ultimate-infall, .kitty-ultimate-debris { display: none; }
    .kitty-ultimate-storm__cloud, .kitty-storm-bolt, .kitty-storm-tornado { opacity: .45; }
    .kitty-storm-bolt :is(.kitty-storm-bolt__color, .kitty-storm-bolt__core) { stroke-dashoffset: 0; }
    .kitty-storm-impact__flash, .kitty-storm-impact__arcs, .kitty-storm-impact__sparks { display: none; }
    .kitty-tornado-wind, .kitty-tornado-pressure, .kitty-tornado-aura.is-outer { display: none; }
    .kitty-source-current__bolt { opacity: .4; }
    .kitty-source-plasma { opacity: .45; }
    .kitty-maximum-spine { opacity: .3; }
    .kitty-tornado-corona > .kitty-motif-orbit { opacity: .6; }
    .kitty-overdrive-reactor__echo { opacity: .3; }
}

/* Divatkém Kitty: rózsaszín-ciánkék kémlézerek, macskaszem-szemüveg és szív-célkereszt. */
:is(.kitty-charged-vfx, .kitty-speed-cast, .kitty-speed-frame, .kitty-claw-impact)[data-kitty-vfx-theme="spy"] { filter: saturate(1.3) brightness(1.08) drop-shadow(0 0 3px #DB276B); }
.kitty-skin-motifs[data-kitty-vfx-theme="spy"] svg { fill: color-mix(in srgb, #F99786 18%, transparent); }
.kitty-skin-motifs[data-kitty-vfx-theme="spy"] .kitty-skin-motifs__charm:nth-of-type(4) { color: #F99786; }
.kitty-ultimate-spy { position: absolute; inset: 0; }
.kitty-ultimate-lasers { position: absolute; inset: 0; width: 100%; height: 100%; color: #FF57D3; stroke-width: 2.2; filter: drop-shadow(0 0 5px #DB276B); animation: kittySpyLasers 1.7s ease-in-out infinite alternate; }
.kitty-ultimate-lasers circle { color: #60D8FF; animation: kittySpyReticle 4s linear infinite; transform-origin: center; }
.kitty-ultimate-spy > svg:last-child { position: absolute; inset: 20% 24% 30%; color: #60D8FF; filter: drop-shadow(0 0 6px #BCA1FF); animation: kittySpyHeartLock 1.1s ease-in-out infinite alternate; }
@keyframes kittySpyLasers { from { opacity: .45; stroke-dasharray: 0 0; } to { opacity: .95; } }
@keyframes kittySpyReticle { to { transform: rotate(360deg); } }
@keyframes kittySpyHeartLock { from { transform: scale(.9); } to { transform: scale(1.06); } }
@media (prefers-reduced-motion: reduce) { .kitty-ultimate-lasers, .kitty-ultimate-lasers circle, .kitty-ultimate-spy > svg:last-child { animation: none; } }
