/* 益威 ERP 吉祥物「花花」— 30 种表情/动作 */

/* 性能：后台 / 不可见时暂停 CSS 动画 */
.erp-cat.erp-cat--perf-paused,
.erp-cat.erp-cat--perf-paused * {
    animation-play-state: paused !important;
}

.erp-cat.erp-cat--reduce-motion,
.erp-cat.erp-cat--reduce-motion * {
    animation: none !important;
    transition: none !important;
}

/* ── 容器 ── */
.erp-cat-wrap {
    flex-shrink: 0;
    overflow: visible;
    position: relative;
    z-index: 1;
}

.erp-cat-wrap--login {
    width: 78px;
    height: 96px;
}

.erp-cat-wrap--ranking {
    width: 72px;
    height: 58px;
    transition: transform 0.2s ease;
    cursor: default;
    pointer-events: auto;
}

.erp-cat-wrap--clickable {
    cursor: pointer;
}

.erp-cat-wrap--clickable:focus-visible {
    outline: 2px solid #f97316;
    outline-offset: 2px;
    border-radius: 8px;
}

.erp-cat-wrap--ranking:hover {
    transform: scale(1.05);
}

.erp-cat-ranking-bar {
    display: flex;
    align-items: center;
    gap: 12px;
    margin-bottom: 8px;
}

/* ── 业绩排行：停靠 / 拖动 ── */
.revenue-card--cat-home {
    overflow: visible;
}

.revenue-card__body--cat {
    position: relative;
    overflow: visible;
}

.erp-cat-dock {
    position: fixed;
    z-index: 1050;
    pointer-events: none;
    opacity: 0;
    transition: opacity 0.35s ease;
}

.erp-cat-dock--in-panel {
    position: absolute;
    left: calc(8px + 3em);
    bottom: calc(8px + 2em);
    top: auto;
    z-index: 12;
    opacity: 1;
    transition: none;
}

/* 数据加载前隐藏，避免非得主账号闪一下猫 */
.erp-cat-dock--awaiting-host {
    visibility: hidden !important;
    opacity: 0 !important;
    pointer-events: none !important;
}

.erp-cat-dock.is-ready {
    opacity: 1;
}

.erp-cat-dock.is-moving {
    opacity: 0.95;
}

.erp-cat-dock.is-moving.is-crawling .erp-cat-wrap:not(.erp-cat-wrap--face-left) {
    animation: erpCatWalkBob 0.36s ease-in-out infinite alternate;
}

.erp-cat-dock.is-moving.is-crawling .erp-cat-wrap--face-left {
    animation: erpCatWalkBobLeft 0.36s ease-in-out infinite alternate;
}

.erp-cat-dock.is-moving.is-jumping .erp-cat-wrap:not(.erp-cat-wrap--face-left) {
    animation: erpCatJumpBob 0.62s cubic-bezier(0.22, 1, 0.36, 1) forwards;
}

.erp-cat-dock.is-moving.is-jumping .erp-cat-wrap--face-left {
    animation: erpCatJumpBobLeft 0.62s cubic-bezier(0.22, 1, 0.36, 1) forwards;
}

@keyframes erpCatWalkBob {
    from { transform: translateY(0); }
    to   { transform: translateY(-4px); }
}

@keyframes erpCatWalkBobLeft {
    from { transform: scaleX(-1) translateY(0); }
    to   { transform: scaleX(-1) translateY(-4px); }
}

@keyframes erpCatJumpBob {
    0%   { transform: translateY(0) scale(1); }
    35%  { transform: translateY(-22px) scale(1.04); }
    70%  { transform: translateY(-8px) scale(0.98); }
    100% { transform: translateY(0) scale(1); }
}

@keyframes erpCatJumpBobLeft {
    0%   { transform: scaleX(-1) translateY(0); }
    35%  { transform: scaleX(-1) translateY(-22px); }
    70%  { transform: scaleX(-1) translateY(-8px); }
    100% { transform: scaleX(-1) translateY(0); }
}

.erp-cat-dock__panel {
    position: relative;
    display: inline-flex;
    align-items: flex-end;
    gap: 0;
    pointer-events: none;
    width: fit-content;
    max-width: none;
}

.erp-cat-dock--side-right .erp-cat-dock__panel {
    flex-direction: row;
}

.erp-cat-dock--side-left .erp-cat-dock__panel {
    flex-direction: row;
}

.erp-cat-dock--above .erp-cat-dock__panel {
    flex-direction: column;
    align-items: center;
}

.erp-cat-dock__meta {
    position: absolute;
    display: flex;
    flex-direction: column;
    gap: 4px;
    min-width: 0;
    width: max-content;
    max-width: none;
    pointer-events: none;
    z-index: 2;
}

/* 气泡在嘴巴右上方，留空不挡脸；尾巴圆点连到嘴边 */
.erp-cat-dock--side-right .erp-cat-dock__meta {
    left: 44px;
    top: 8px;
    bottom: auto;
}

.erp-cat-dock--side-left .erp-cat-dock__meta {
    left: auto;
    right: 44px;
    top: 8px;
    bottom: auto;
}

.erp-cat-dock--above .erp-cat-dock__meta {
    left: 50%;
    right: auto;
    bottom: calc(100% + 8px);
    transform: translateX(-50%);
}

.erp-cat-hint--dock {
    display: block;
    margin-left: 0;
    line-height: 1.3;
    max-width: 200px;
}

.erp-cat-speech--dock {
    max-width: 9.5em;
    min-width: 2.4em;
    padding: 5px 9px;
    line-height: 1.15;
    word-break: keep-all;
    overflow-wrap: normal;
}

/* 圆点尾巴：气泡 → 圆点 → 嘴巴 */
.erp-cat-dock--side-right .erp-cat-speech--dock::before {
    left: -12px;
    bottom: -6%;
    top: auto;
}

.erp-cat-dock--side-left .erp-cat-speech--dock::before {
    left: auto;
    right: -12px;
    bottom: -6%;
    top: auto;
}

.erp-cat-dock--above .erp-cat-speech--dock::before {
    left: 50%;
    right: auto;
    bottom: -10px;
    top: auto;
    transform: translateX(-50%);
}

@media (max-width: 767.98px) {
    .erp-cat-wrap--ranking {
        width: 62px;
        height: 50px;
    }

    .erp-cat-hint--dock {
        display: none;
    }

    .erp-cat-dock--side-right .erp-cat-dock__meta {
        left: 36px;
        top: 6px;
    }

    .erp-cat-dock--side-left .erp-cat-dock__meta {
        right: 36px;
        top: 6px;
    }

    .erp-cat-dock--side-right .erp-cat-speech--dock::before {
        left: -10px;
        bottom: -4%;
    }

    .erp-cat-dock--side-left .erp-cat-speech--dock::before {
        right: -10px;
        bottom: -4%;
    }

    .erp-cat-speech--dock {
        font-size: 0.62rem;
        max-width: 8.5em;
        padding: 4px 8px;
    }
}

@media (max-width: 767.98px) and (orientation: portrait) {
    .erp-cat-dock.erp-cat-dock--in-panel {
        left: 1em !important;
        bottom: 0 !important;
    }
}

.erp-cat-speech:not(.is-visible) {
    display: none;
}

.erp-cat-speech.is-visible {
    display: inline-flex;
    align-items: center;
    justify-content: center;
}

.erp-cat-speech {
    display: none;
    background: #fff;
    border: 1px solid #86efac;
    border-radius: 999px;
    padding: 5px 10px;
    min-width: 2.2em;
    max-width: 9.5em;
    font-size: 0.65rem;
    color: #166534;
    font-weight: 600;
    box-shadow: 0 2px 6px rgba(22, 163, 74, 0.1);
    position: relative;
    pointer-events: none;
    user-select: none;
    text-align: center;
    line-height: 1.15;
    word-break: keep-all;
    overflow-wrap: normal;
    white-space: normal;
}

/* 漫画风圆气泡尾巴：单个圆点连向嘴巴 */
.erp-cat-speech::before {
    content: '';
    position: absolute;
    left: -12px;
    bottom: -6%;
    top: auto;
    width: 6px;
    height: 6px;
    background: #fff;
    border: 1px solid #86efac;
    border-radius: 50%;
    box-shadow: 0 1px 4px rgba(22, 163, 74, 0.08);
    transform: none;
}

.erp-cat-speech::after {
    content: none;
    display: none;
}

.erp-cat-hint {
    font-size: 0.72rem;
    color: #9ca3af;
    margin-left: 4px;
}

/* ── SVG 根 ── */
.erp-cat,
.mascot.erp-cat {
    width: 100%;
    height: 100%;
    overflow: visible;
    position: relative;
    transition: transform 0.55s cubic-bezier(0.34, 1.4, 0.64, 1);
}

.erp-cat .cat-body {
    transform-origin: 68px 112px;
    transition: transform 0.5s cubic-bezier(0.34, 1.4, 0.64, 1);
}

.erp-cat .cat-neck {
    transform-origin: 92px 102px;
    transition: transform 0.55s cubic-bezier(0.34, 1.4, 0.64, 1);
}

.erp-cat .cat-upper {
    transform-origin: 88px 96px;
    transition: transform 0.55s cubic-bezier(0.34, 1.4, 0.64, 1);
    transform: rotate(-6deg) translate(4px, 2px);
}

.erp-cat .tail {
    transform-origin: 36px 108px;
    transition: transform 0.45s cubic-bezier(0.34, 1.56, 0.64, 1);
    transform: rotate(-20deg);
}

.erp-cat .hind-leg-left,
.erp-cat .hind-leg-right,
.erp-cat .front-leg-left,
.erp-cat .front-leg-right {
    transition: transform 0.35s cubic-bezier(0.34, 1.4, 0.64, 1);
}

.erp-cat .hind-leg-left  { transform-origin: 40px 110px; }
.erp-cat .hind-leg-right { transform-origin: 58px 112px; }
.erp-cat .front-leg-left { transform-origin: 86px 108px; }
.erp-cat .front-leg-right { transform-origin: 100px 106px; }

.erp-cat .leg-bone {
    transition: transform 0.35s cubic-bezier(0.34, 1.4, 0.64, 1);
}

.erp-cat .eye-right { transform-origin: 104px 58px; transition: transform 0.45s cubic-bezier(0.34, 1.56, 0.64, 1); }
.erp-cat .eye-left  { transform-origin: 64px 58px;  transition: transform 0.45s cubic-bezier(0.34, 1.56, 0.64, 1); }

.erp-cat .eye-pop-glow { opacity: 0; transition: opacity 0.25s ease; }
.erp-cat .eye-peek { opacity: 0; transition: opacity 0.2s ease; }
.erp-cat .eye-open { transition: opacity 0.15s ease; }
.erp-cat .eye-closed { opacity: 0; transition: opacity 0.15s ease; }

.erp-cat .iris,
.erp-cat .pupil {
    transition: transform 0.35s cubic-bezier(0.34, 1.4, 0.64, 1), opacity 0.15s ease;
    transform: translate(7px, 2px);
}

.erp-cat .whisker { transition: transform 0.4s cubic-bezier(0.34, 1.4, 0.64, 1); transform-origin: center; }
.erp-cat .blush { opacity: 0; transition: opacity 0.2s ease; }
.erp-cat .sweat { opacity: 0; transition: opacity 0.2s ease; }
.erp-cat .tear { opacity: 0; transition: opacity 0.2s ease; }
.erp-cat .sparkle { opacity: 0; transition: opacity 0.2s ease; }
.erp-cat .zzz { opacity: 0; transition: opacity 0.2s ease; }
.erp-cat .crown { opacity: 0; transition: opacity 0.25s ease; transform-origin: 84px 20px; }

.erp-cat .mouth-normal { opacity: 1; transition: opacity 0.15s ease; }
.erp-cat .mouth-smile,
.erp-cat .mouth-surprised,
.erp-cat .mouth-sad,
.erp-cat .mouth-angry,
.erp-cat .mouth-open { opacity: 0; transition: opacity 0.15s ease; }

.erp-cat .hind-paw-left,
.erp-cat .hind-paw-right,
.erp-cat .front-paw-left,
.erp-cat .front-paw-right {
    transition: transform 0.35s cubic-bezier(0.34, 1.4, 0.64, 1);
    transform-origin: center;
}

.erp-cat-wrap--face-left {
    transform: scaleX(-1);
}

.erp-cat-wrap--ranking.erp-cat-wrap--face-left:hover {
    transform: scaleX(-1) scale(1.05);
}

.erp-cat .anger-mark,
.erp-cat .sunglasses,
.erp-cat .shade-glare,
.erp-cat .hearts,
.erp-cat .drool,
.erp-cat .dizzy-stars,
.erp-cat .silver-medal,
.erp-cat .coin-float { opacity: 0; transition: opacity 0.2s ease; }
.erp-cat .groom-tongue,
.erp-cat .eat-bowl { opacity: 0; transition: opacity 0.2s ease; transform-origin: 94px 128px; }
.erp-cat .groom-tongue { transform-origin: 18px 88px; }

.erp-cat .ear-left,
.erp-cat .ear-right { transition: transform 0.4s ease; transform-origin: center; }

/* 登录页位移 */
.erp-cat.mood-covering,
.erp-cat.covering { z-index: 5; transform: translateX(16px); }
.erp-cat.mood-peeking,
.erp-cat.peeking { z-index: 5; transform: translateX(22px); }

/* ═══════════════════════════════════════
   1. idle — 暗中观察（默认）
   ═══════════════════════════════════════ */
.erp-cat.mood-idle .cat-body {
    animation: erpCatIdleBreathe 3s ease-in-out infinite;
}

.erp-cat.mood-idle .cat-neck {
    animation: erpCatIdleNeck 3s ease-in-out infinite;
}

.erp-cat.mood-idle .tail {
    animation: erpCatTailWag 2.2s ease-in-out infinite alternate;
}

.erp-cat.mood-idle .front-leg-left {
    animation: erpCatIdleStepFL 2.4s ease-in-out infinite alternate;
}

.erp-cat.mood-idle .front-leg-right {
    animation: erpCatIdleStepFR 2.4s ease-in-out infinite alternate-reverse;
}

.erp-cat.mood-idle .hind-leg-left {
    animation: erpCatIdleStepHL 2.4s ease-in-out infinite alternate-reverse;
}

.erp-cat.mood-idle .hind-leg-right {
    animation: erpCatIdleStepHR 2.4s ease-in-out infinite alternate;
}

.erp-cat.mood-idle .pupil,
.erp-cat.mood-idle .iris {
    animation: erpCatIdleLook 4s ease-in-out infinite alternate;
}

@keyframes erpCatIdleBreathe {
    0%, 100% { transform: translateY(0) scaleX(1); }
    50%      { transform: translateY(-3px) scaleX(1.03); }
}

@keyframes erpCatIdleNeck {
    0%, 100% { transform: scaleY(1) translate(0, 0); }
    50%      { transform: scaleY(1.06) translate(3px, -3px); }
}

@keyframes erpCatIdleStepFL {
    from { transform: rotate(0deg); }
    to   { transform: rotate(8deg) translate(2px, -2px); }
}

@keyframes erpCatIdleStepFR {
    from { transform: rotate(0deg); }
    to   { transform: rotate(-6deg) translate(3px, -1px); }
}

@keyframes erpCatIdleStepHL {
    from { transform: rotate(0deg); }
    to   { transform: rotate(-10deg) translate(-2px, 1px); }
}

@keyframes erpCatIdleStepHR {
    from { transform: rotate(0deg); }
    to   { transform: rotate(12deg) translate(2px, 0); }
}

@keyframes erpCatIdleLook {
    from { transform: translate(7px, 2px); }
    to   { transform: translate(10px, 0px); }
}

/* ═══════════════════════════════════════
   2. watching — 盯紧用户名
   ═══════════════════════════════════════ */
.erp-cat.mood-watching .cat-body,
.erp-cat.watching .cat-body { transform: rotate(-3deg); }
.erp-cat.mood-watching .cat-neck,
.erp-cat.watching .cat-neck { transform: scaleY(1.35) translate(8px, -8px); }
.erp-cat.mood-watching .cat-upper,
.erp-cat.watching .cat-upper { transform: rotate(-20deg) translate(20px, -6px) scale(1.02, 1.06); }
.erp-cat.mood-watching .eye-right,
.erp-cat.watching .eye-right { animation: erpCatEyePopUser 0.55s cubic-bezier(0.34, 1.56, 0.64, 1) forwards; }
.erp-cat.mood-watching .pupil,
.erp-cat.mood-watching .iris,
.erp-cat.watching .pupil,
.erp-cat.watching .iris { transform: translate(10px, -6px); }
.erp-cat.mood-watching .tail,
.erp-cat.watching .tail { transform: rotate(-22deg); }

@keyframes erpCatEyePopUser {
    0%   { transform: translate(0, 0) scale(1); }
    100% { transform: translate(26px, -8px) scale(1.75); }
}

/* ═══════════════════════════════════════
   3. shy — 有点害羞
   ═══════════════════════════════════════ */
.erp-cat.mood-shy .cat-body,
.erp-cat.shy .cat-body { transform: rotate(2deg); }
.erp-cat.mood-shy .cat-neck,
.erp-cat.shy .cat-neck { transform: scaleY(1.2) translate(6px, -4px); }
.erp-cat.mood-shy .cat-upper,
.erp-cat.shy .cat-upper { transform: rotate(-2deg) translate(14px, 4px) scale(1.01, 1.04); }
.erp-cat.mood-shy .pupil,
.erp-cat.mood-shy .iris,
.erp-cat.shy .pupil,
.erp-cat.shy .iris { transform: translate(9px, 5px); }
.erp-cat.mood-shy .tail,
.erp-cat.shy .tail { transform: rotate(-8deg); }
.erp-cat.mood-shy .blush,
.erp-cat.shy .blush { opacity: 0.35; }

/* ═══════════════════════════════════════
   4. covering — 偷看密码
   ═══════════════════════════════════════ */
.erp-cat.mood-covering .cat-body,
.erp-cat.covering .cat-body { transform: rotate(-2deg) scaleX(0.96); }
.erp-cat.mood-covering .cat-neck,
.erp-cat.covering .cat-neck { transform: scaleY(1.65) scaleX(0.88) translate(12px, -10px); }
.erp-cat.mood-covering .cat-upper,
.erp-cat.covering .cat-upper { transform: rotate(-6deg) translate(28px, 10px) scale(1.04, 1.1); }
.erp-cat.mood-covering .eye-left .eye-open,
.erp-cat.mood-covering .eye-right .eye-open,
.erp-cat.covering .eye-left .eye-open,
.erp-cat.covering .eye-right .eye-open { opacity: 1; }
.erp-cat.mood-covering .eye-left .eye-closed,
.erp-cat.mood-covering .eye-right .eye-closed,
.erp-cat.covering .eye-left .eye-closed,
.erp-cat.covering .eye-right .eye-closed { opacity: 0; }
.erp-cat.mood-covering .eye-right .eye-peek,
.erp-cat.covering .eye-right .eye-peek { opacity: 0; }
.erp-cat.mood-covering .eye-left .eye-pop-glow,
.erp-cat.mood-covering .eye-right .eye-pop-glow,
.erp-cat.covering .eye-left .eye-pop-glow,
.erp-cat.covering .eye-right .eye-pop-glow { opacity: 0.5; }
.erp-cat.mood-covering .eye-right,
.erp-cat.covering .eye-right { animation: erpCatEyePopCover 0.65s cubic-bezier(0.34, 1.56, 0.64, 1) forwards; }
.erp-cat.mood-covering .eye-left,
.erp-cat.covering .eye-left { animation: erpCatEyePopLeftCover 0.65s 0.06s cubic-bezier(0.34, 1.56, 0.64, 1) forwards; }
.erp-cat.mood-covering .pupil,
.erp-cat.mood-covering .iris,
.erp-cat.covering .pupil,
.erp-cat.covering .iris { transform: translate(12px, 5px); }
.erp-cat.mood-covering .eye-left .pupil,
.erp-cat.mood-covering .eye-left .iris,
.erp-cat.covering .eye-left .pupil,
.erp-cat.covering .eye-left .iris { transform: translate(10px, 4px); }
.erp-cat.mood-covering .tail,
.erp-cat.covering .tail { transform: rotate(-10deg); animation: erpCatTailNervous 0.35s ease-in-out infinite alternate; }
.erp-cat.mood-covering .blush,
.erp-cat.covering .blush { opacity: 0.45; }
.erp-cat.mood-covering .sweat,
.erp-cat.covering .sweat { opacity: 0.75; }

@keyframes erpCatEyePopCover {
    0%   { transform: translate(0, 0) scale(1); }
    55%  { transform: translate(38px, 14px) scale(2.35); }
    100% { transform: translate(34px, 12px) scale(2.15); }
}
@keyframes erpCatEyePopLeftCover {
    0%   { transform: translate(0, 0) scale(1); }
    55%  { transform: translate(32px, 13px) scale(2.1); }
    100% { transform: translate(28px, 11px) scale(1.9); }
}
@keyframes erpCatTailNervous {
    from { transform: rotate(-10deg); }
    to   { transform: rotate(-2deg); }
}

/* ═══════════════════════════════════════
   5. peeking — 明目张胆
   ═══════════════════════════════════════ */
.erp-cat.mood-peeking .cat-body,
.erp-cat.peeking .cat-body { transform: rotate(-1deg) scaleX(0.94); }
.erp-cat.mood-peeking .cat-neck,
.erp-cat.peeking .cat-neck { transform: scaleY(1.85) scaleX(0.85) translate(16px, -14px); animation: erpCatNeckPulse 0.8s ease-in-out infinite alternate; }
.erp-cat.mood-peeking .cat-upper,
.erp-cat.peeking .cat-upper { transform: rotate(-4deg) translate(36px, 14px) scale(1.08, 1.14); animation: erpCatHeadReachPeek 0.7s cubic-bezier(0.34, 1.56, 0.64, 1) forwards; }
.erp-cat.mood-peeking .eye-right .eye-open,
.erp-cat.peeking .eye-right .eye-open { opacity: 1; }
.erp-cat.mood-peeking .eye-right .eye-peek,
.erp-cat.peeking .eye-right .eye-peek { opacity: 0; }
.erp-cat.mood-peeking .eye-left .eye-pop-glow,
.erp-cat.mood-peeking .eye-right .eye-pop-glow,
.erp-cat.peeking .eye-left .eye-pop-glow,
.erp-cat.peeking .eye-right .eye-pop-glow { opacity: 0.5; }
.erp-cat.mood-peeking .eye-right,
.erp-cat.peeking .eye-right { animation: erpCatEyePopPeek 0.7s cubic-bezier(0.34, 1.56, 0.64, 1) forwards; }
.erp-cat.mood-peeking .eye-left,
.erp-cat.peeking .eye-left { animation: erpCatEyePopLeft 0.7s 0.08s cubic-bezier(0.34, 1.56, 0.64, 1) forwards; }
.erp-cat.mood-peeking .pupil,
.erp-cat.mood-peeking .iris,
.erp-cat.peeking .pupil,
.erp-cat.peeking .iris { transform: translate(14px, 6px); }
.erp-cat.mood-peeking .eye-left .pupil,
.erp-cat.mood-peeking .eye-left .iris,
.erp-cat.peeking .eye-left .pupil,
.erp-cat.peeking .eye-left .iris { transform: translate(12px, 5px); }
.erp-cat.mood-peeking .tail,
.erp-cat.peeking .tail { transform: rotate(-12deg); animation: erpCatTailSneak 0.5s ease-in-out infinite alternate; }
.erp-cat.mood-peeking .blush,
.erp-cat.peeking .blush { opacity: 0.4; }

@keyframes erpCatNeckPulse {
    from { transform: scaleY(1.85) scaleX(0.85) translate(16px, -14px); }
    to   { transform: scaleY(1.95) scaleX(0.82) translate(18px, -16px); }
}
@keyframes erpCatHeadReachPeek {
    0%   { transform: rotate(-6deg) translate(28px, 10px) scale(1.04, 1.1); }
    100% { transform: rotate(-4deg) translate(36px, 14px) scale(1.08, 1.14); }
}
@keyframes erpCatEyePopPeek {
    0%   { transform: translate(34px, 12px) scale(2.15); }
    55%  { transform: translate(46px, 18px) scale(2.5); }
    100% { transform: translate(42px, 16px) scale(2.35); }
}
@keyframes erpCatEyePopLeft {
    0%   { transform: translate(0, 0) scale(1); }
    100% { transform: translate(28px, 12px) scale(1.85); }
}
@keyframes erpCatTailSneak {
    from { transform: rotate(-12deg); }
    to   { transform: rotate(-6deg); }
}

/* ═══════════════════════════════════════
   6. happy — 笑逐颜开
   ═══════════════════════════════════════ */
.erp-cat.mood-happy .cat-upper { transform: rotate(-8deg) translate(4px, -2px); }
.erp-cat.mood-happy .tail { animation: erpCatTailWag 0.35s ease-in-out infinite alternate; }
.erp-cat.mood-happy .blush { opacity: 0.55; }
.erp-cat.mood-happy .mouth-normal { opacity: 0; }
.erp-cat.mood-happy .mouth-smile { opacity: 1; }
.erp-cat.mood-happy .pupil,
.erp-cat.mood-happy .iris { transform: translate(6px, 0); }

@keyframes erpCatTailWag {
    from { transform: rotate(-20deg); }
    to   { transform: rotate(-8deg); }
}

/* ═══════════════════════════════════════
   7. excited — 激动不已
   ═══════════════════════════════════════ */
.erp-cat.mood-excited { animation: erpCatBounce 0.45s ease-in-out infinite alternate; }
.erp-cat.mood-excited .cat-upper { transform: rotate(-10deg) translate(8px, -6px) scale(1.05); }
.erp-cat.mood-excited .eye-right,
.erp-cat.mood-excited .eye-left { animation: erpCatEyeBounce 0.45s ease-in-out infinite alternate; }
.erp-cat.mood-excited .pupil { transform: scale(1.3) translate(7px, 2px); }
.erp-cat.mood-excited .mouth-normal { opacity: 0; }
.erp-cat.mood-excited .mouth-smile { opacity: 1; }
.erp-cat.mood-excited .tail { animation: erpCatTailWag 0.25s ease-in-out infinite alternate; }

@keyframes erpCatBounce {
    from { transform: translateY(0); }
    to   { transform: translateY(-6px); }
}
@keyframes erpCatEyeBounce {
    from { transform: scale(1); }
    to   { transform: scale(1.12); }
}

/* ═══════════════════════════════════════
   8. celebrate — 撒花庆祝
   ═══════════════════════════════════════ */
.erp-cat.mood-celebrate { animation: erpCatCelebrateJump 0.6s ease-in-out infinite; }
.erp-cat.mood-celebrate .cat-upper { transform: rotate(-6deg) translate(0, -8px) scale(1.06); }
.erp-cat.mood-celebrate .sparkle { opacity: 1; animation: erpCatSparkle 0.8s ease-in-out infinite alternate; }
.erp-cat.mood-celebrate .front-leg-left { transform: rotate(-58deg) translate(-6px, -16px); }
.erp-cat.mood-celebrate .front-leg-right { transform: rotate(58deg) translate(6px, -18px); }
.erp-cat.mood-celebrate .mouth-normal { opacity: 0; }
.erp-cat.mood-celebrate .mouth-smile { opacity: 1; }
.erp-cat.mood-celebrate .blush { opacity: 0.5; }

@keyframes erpCatCelebrateJump {
    0%, 100% { transform: translateY(0) rotate(0deg); }
    50%      { transform: translateY(-10px) rotate(2deg); }
}
@keyframes erpCatSparkle {
    from { opacity: 0.6; transform: scale(0.9); }
    to   { opacity: 1; transform: scale(1.1); }
}

/* ═══════════════════════════════════════
   9. sleepy — 打盹犯困
   ═══════════════════════════════════════ */
.erp-cat.mood-sleepy .cat-upper { transform: rotate(-6deg) translate(2px, 6px); }
.erp-cat.mood-sleepy .eye-left .eye-open,
.erp-cat.mood-sleepy .eye-right .eye-open { opacity: 0; }
.erp-cat.mood-sleepy .eye-left .eye-closed,
.erp-cat.mood-sleepy .eye-right .eye-closed { opacity: 1; }
.erp-cat.mood-sleepy .zzz { opacity: 1; animation: erpCatZzzFloat 1.5s ease-in-out infinite; }
.erp-cat.mood-sleepy .tail { transform: rotate(-6deg); }

@keyframes erpCatZzzFloat {
    0%, 100% { transform: translateY(0); opacity: 0.7; }
    50%      { transform: translateY(-4px); opacity: 1; }
}

/* ═══════════════════════════════════════
   10. surprised — 大吃一惊
   ═══════════════════════════════════════ */
.erp-cat.mood-surprised .cat-upper { transform: rotate(-8deg) translate(4px, -6px) scale(1.06); }
.erp-cat.mood-surprised .eye-right,
.erp-cat.mood-surprised .eye-left { animation: erpCatEyeSurprise 0.4s cubic-bezier(0.34, 1.56, 0.64, 1) forwards; }
.erp-cat.mood-surprised .mouth-normal { opacity: 0; }
.erp-cat.mood-surprised .mouth-surprised { opacity: 1; }
.erp-cat.mood-surprised .ear-left { transform: rotate(-12deg); }
.erp-cat.mood-surprised .ear-right { transform: rotate(12deg); }
.erp-cat.mood-surprised .tail { transform: rotate(-28deg); }

@keyframes erpCatEyeSurprise {
    0%   { transform: scale(1); }
    100% { transform: scale(1.35); }
}

/* ═══════════════════════════════════════
   11. champion — 荣耀加身
   ═══════════════════════════════════════ */
.erp-cat.mood-champion .crown { opacity: 1; animation: erpCatCrownShine 1s ease-in-out infinite alternate; }
.erp-cat.mood-champion .cat-upper { transform: rotate(-6deg) translate(4px, -6px) scale(1.05); }
.erp-cat.mood-champion .sparkle { opacity: 0.8; }
.erp-cat.mood-champion .mouth-normal { opacity: 0; }
.erp-cat.mood-champion .mouth-smile { opacity: 1; }
.erp-cat.mood-champion .blush { opacity: 0.5; }
.erp-cat.mood-champion .tail { animation: erpCatTailWag 0.4s ease-in-out infinite alternate; }

@keyframes erpCatCrownShine {
    from { transform: scale(1); }
    to   { transform: scale(1.06); }
}

/* ═══════════════════════════════════════
   12. angry — 气鼓鼓
   ═══════════════════════════════════════ */
.erp-cat.mood-angry .cat-upper { transform: rotate(-8deg) translate(4px, 4px) scale(1.02); animation: erpCatAngryShake 0.15s ease-in-out infinite alternate; }
.erp-cat.mood-angry .ear-left { transform: rotate(-18deg) translate(-4px, 6px); }
.erp-cat.mood-angry .ear-right { transform: rotate(18deg) translate(4px, 6px); }
.erp-cat.mood-angry .anger-mark { opacity: 1; }
.erp-cat.mood-angry .mouth-normal { opacity: 0; }
.erp-cat.mood-angry .mouth-angry { opacity: 1; }
.erp-cat.mood-angry .pupil,
.erp-cat.mood-angry .iris { transform: translate(8px, 4px) scale(0.85); }
.erp-cat.mood-angry .tail { transform: rotate(8deg); animation: erpCatTailNervous 0.25s ease-in-out infinite alternate; }

@keyframes erpCatAngryShake {
    from { transform: rotate(-8deg) translate(4px, 4px); }
    to   { transform: rotate(-6deg) translate(6px, 5px); }
}

/* ═══════════════════════════════════════
   22. love — 爱心满满
   ═══════════════════════════════════════ */
.erp-cat.mood-love .cat-upper { transform: rotate(-8deg) translate(6px, -2px) scale(1.03); animation: erpCatLoveSway 1s ease-in-out infinite alternate; }
.erp-cat.mood-love .eye-left .eye-open,
.erp-cat.mood-love .eye-right .eye-open { opacity: 0; }
.erp-cat.mood-love .hearts { opacity: 1; animation: erpCatHeartBeat 0.8s ease-in-out infinite; }
.erp-cat.mood-love .blush { opacity: 0.65; }
.erp-cat.mood-love .mouth-normal { opacity: 0; }
.erp-cat.mood-love .mouth-smile { opacity: 1; }
.erp-cat.mood-love .tail { animation: erpCatTailWag 0.45s ease-in-out infinite alternate; }

@keyframes erpCatLoveSway {
    from { transform: rotate(-8deg) translate(6px, -2px); }
    to   { transform: rotate(-6deg) translate(8px, -4px); }
}
@keyframes erpCatHeartBeat {
    0%, 100% { transform: scale(1); }
    50%      { transform: scale(1.08); }
}

/* ═══════════════════════════════════════
   23. hungry — 馋得流口水
   ═══════════════════════════════════════ */
.erp-cat.mood-hungry .cat-upper { transform: rotate(-14deg) translate(10px, 6px); }
.erp-cat.mood-hungry .pupil,
.erp-cat.mood-hungry .iris { transform: translate(10px, 6px); }
.erp-cat.mood-hungry .drool { opacity: 0.85; animation: erpCatDrool 1.2s ease-in-out infinite; }
.erp-cat.mood-hungry .mouth-normal { opacity: 0; }
.erp-cat.mood-hungry .mouth-open { opacity: 1; }

@keyframes erpCatDrool {
    0%, 100% { transform: scaleY(1); }
    50%      { transform: scaleY(1.15); }
}

/* ═══════════════════════════════════════
   24. dizzy — 眼冒金星
   ═══════════════════════════════════════ */
.erp-cat.mood-dizzy { animation: erpCatDizzySpin 2s linear infinite; }
.erp-cat.mood-dizzy .cat-upper { transform: rotate(-10deg) translate(2px, 2px); }
.erp-cat.mood-dizzy .eye-left .eye-open,
.erp-cat.mood-dizzy .eye-right .eye-open { opacity: 0; }
.erp-cat.mood-dizzy .eye-left .eye-closed,
.erp-cat.mood-dizzy .eye-right .eye-closed { opacity: 1; }
.erp-cat.mood-dizzy .dizzy-stars { opacity: 1; animation: erpCatStarsSpin 1.5s linear infinite; }
.erp-cat.mood-dizzy .mouth-normal { opacity: 0; }
.erp-cat.mood-dizzy .mouth-sad { opacity: 0.6; }

@keyframes erpCatDizzySpin {
    0%, 100% { transform: rotate(0deg); }
    25%      { transform: rotate(2deg); }
    75%      { transform: rotate(-2deg); }
}
@keyframes erpCatStarsSpin {
    from { transform: rotate(0deg); }
    to   { transform: rotate(360deg); }
}

/* ═══════════════════════════════════════
   25. cool — 墨镜酷猫
   ═══════════════════════════════════════ */
.erp-cat.mood-cool .cat-upper { transform: rotate(-10deg) translate(8px, 0) scale(1.02); }
.erp-cat.mood-cool .sunglasses { opacity: 1; }
.erp-cat.mood-cool .eye-left .eye-open,
.erp-cat.mood-cool .eye-right .eye-open { opacity: 0; }
.erp-cat.mood-cool .mouth-normal { opacity: 0; }
.erp-cat.mood-cool .mouth-smile { opacity: 0.7; }
.erp-cat.mood-cool .tail { transform: rotate(-20deg); animation: erpCatTailSneak 0.7s ease-in-out infinite alternate; }

/* ═══════════════════════════════════════
   26. peekaboo — 躲猫猫
   ═══════════════════════════════════════ */
.erp-cat.mood-peekaboo .cat-body { transform: translateX(-6px); }
.erp-cat.mood-peekaboo .cat-upper { transform: rotate(-20deg) translate(-8px, 12px) scale(0.96); }
.erp-cat.mood-peekaboo .front-leg-left { transform: rotate(-35deg) translate(-6px, -8px); }
.erp-cat.mood-peekaboo .eye-right .eye-open { opacity: 1; }
.erp-cat.mood-peekaboo .eye-left .eye-open { opacity: 0; }
.erp-cat.mood-peekaboo .eye-left .eye-closed { opacity: 1; }
.erp-cat.mood-peekaboo .pupil,
.erp-cat.mood-peekaboo .iris { transform: translate(14px, 2px); }
.erp-cat.mood-peekaboo .blush { opacity: 0.35; }

/* ═══════════════════════════════════════
   18. typing — 疯狂输入
   ═══════════════════════════════════════ */
.erp-cat.mood-typing .cat-upper { transform: rotate(-16deg) translate(20px, 10px) scale(1.02); }
.erp-cat.mood-typing .cat-neck { transform: scaleY(1.2) translate(8px, -4px); }
.erp-cat.mood-typing .front-leg-left { animation: erpCatTypeLeft 0.25s ease-in-out infinite alternate; }
.erp-cat.mood-typing .front-leg-right { animation: erpCatTypeRight 0.25s ease-in-out infinite alternate-reverse; }
.erp-cat.mood-typing .pupil,
.erp-cat.mood-typing .iris { transform: translate(14px, 6px); }

@keyframes erpCatTypeLeft {
    from { transform: rotate(-15deg) translate(0, 0); }
    to   { transform: rotate(-28deg) translate(4px, -6px); }
}
@keyframes erpCatTypeRight {
    from { transform: rotate(12deg) translate(0, 0); }
    to   { transform: rotate(26deg) translate(4px, -5px); }
}

/* ═══════════════════════════════════════
   30. shouting — 大声广播
   ═══════════════════════════════════════ */
.erp-cat.mood-shouting .cat-upper { transform: rotate(-6deg) translate(0, -8px) scale(1.08); animation: erpCatShoutPulse 0.4s ease-in-out infinite alternate; }
.erp-cat.mood-shouting .front-leg-right { transform: rotate(72deg) translate(8px, -26px); }
.erp-cat.mood-shouting .mouth-normal { opacity: 0; }
.erp-cat.mood-shouting .mouth-open { opacity: 1; }
.erp-cat.mood-shouting .mouth-surprised { opacity: 0.5; }

@keyframes erpCatShoutPulse {
    from { transform: rotate(-6deg) translate(0, -8px) scale(1.06); }
    to   { transform: rotate(-4deg) translate(0, -10px) scale(1.1); }
}

/* ═══════════════════════════════════════
   31. silver — 银牌亚军
   ═══════════════════════════════════════ */
.erp-cat.mood-silver .cat-upper { transform: rotate(-8deg) translate(4px, -2px) scale(1.02); }
.erp-cat.mood-silver .silver-medal { opacity: 1; animation: erpCatMedalSwing 1.2s ease-in-out infinite alternate; }
.erp-cat.mood-silver .mouth-normal { opacity: 0; }
.erp-cat.mood-silver .mouth-smile { opacity: 1; }
.erp-cat.mood-silver .blush { opacity: 0.4; }

@keyframes erpCatMedalSwing {
    from { transform: rotate(-4deg); }
    to   { transform: rotate(4deg); }
}

/* ═══════════════════════════════════════
   32. coinrain — 金币雨
   ═══════════════════════════════════════ */
.erp-cat.mood-coinrain .cat-upper { transform: rotate(-10deg) translate(6px, -4px); }
.erp-cat.mood-coinrain .coin-float { opacity: 1; animation: erpCatCoinFall 1.5s ease-in-out infinite; }
.erp-cat.mood-coinrain .sparkle { opacity: 0.7; }
.erp-cat.mood-coinrain .pupil,
.erp-cat.mood-coinrain .iris { transform: translate(10px, -4px); }
.erp-cat.mood-coinrain .mouth-normal { opacity: 0; }
.erp-cat.mood-coinrain .mouth-smile { opacity: 1; }
.erp-cat.mood-coinrain .tail { animation: erpCatTailWag 0.35s ease-in-out infinite alternate; }

@keyframes erpCatCoinFall {
    0%, 100% { transform: translateY(0); opacity: 1; }
    50%      { transform: translateY(6px); opacity: 0.75; }
}

/* ═══════════════════════════════════════
   33. focused — 锁定目标
   ═══════════════════════════════════════ */
.erp-cat.mood-focused .cat-upper { transform: rotate(-14deg) translate(22px, 6px) scale(1.04); }
.erp-cat.mood-focused .cat-neck { transform: scaleY(1.4) translate(10px, -8px); }
.erp-cat.mood-focused .pupil,
.erp-cat.mood-focused .iris { transform: translate(14px, 4px) scale(0.75); }
.erp-cat.mood-focused .eye-left .pupil,
.erp-cat.mood-focused .eye-left .iris { transform: translate(12px, 3px) scale(0.75); }
.erp-cat.mood-focused .eye-right { animation: erpCatEyePopUser 0.5s cubic-bezier(0.34, 1.56, 0.64, 1) forwards; }

/* ═══════════════════════════════════════
   23. bullish — 形势看涨
   ═══════════════════════════════════════ */
.erp-cat.mood-bullish .cat-upper { transform: rotate(-12deg) translate(14px, -8px); }
.erp-cat.mood-bullish .pupil,
.erp-cat.mood-bullish .iris { transform: translate(10px, -8px); }
.erp-cat.mood-bullish .eye-left .pupil,
.erp-cat.mood-bullish .eye-left .iris { transform: translate(8px, -7px); }
.erp-cat.mood-bullish .mouth-normal { opacity: 0; }
.erp-cat.mood-bullish .mouth-smile { opacity: 1; }
.erp-cat.mood-bullish .tail { animation: erpCatTailWag 0.4s ease-in-out infinite alternate; }
.erp-cat.mood-bullish .blush { opacity: 0.35; }

/* ═══════════════════════════════════════
   24. boss — 老板驾到
   ═══════════════════════════════════════ */
.erp-cat.mood-boss .crown { opacity: 1; }
.erp-cat.mood-boss .cat-body { transform: scale(1.04); }
.erp-cat.mood-boss .cat-upper { transform: rotate(-8deg) translate(4px, -4px) scale(1.05); }
.erp-cat.mood-boss .front-leg-left { transform: rotate(-20deg) translate(2px, 2px); }
.erp-cat.mood-boss .front-leg-right { transform: rotate(20deg) translate(4px, 0); }
.erp-cat.mood-boss .sunglasses { opacity: 0.85; }
.erp-cat.mood-boss .mouth-normal { opacity: 0; }
.erp-cat.mood-boss .mouth-smile { opacity: 0.6; }

/* ═══════════════════════════════════════
   25. stretch — 伸个懒腰
   ═══════════════════════════════════════ */
.erp-cat.mood-stretch .cat-body { transform: scaleY(0.92) translateY(-4px); }
.erp-cat.mood-stretch .cat-neck { transform: scaleY(1.5) translate(0, -12px); animation: erpCatStretchNeck 1.2s ease-in-out infinite alternate; }
.erp-cat.mood-stretch .cat-upper { transform: rotate(-6deg) translate(0, -10px) scale(1.04, 1.08); }
.erp-cat.mood-stretch .front-leg-left { transform: rotate(-72deg) translate(-14px, -18px); }
.erp-cat.mood-stretch .front-leg-right { transform: rotate(72deg) translate(14px, -20px); }
.erp-cat.mood-stretch .eye-left .eye-closed,
.erp-cat.mood-stretch .eye-right .eye-closed { opacity: 1; }
.erp-cat.mood-stretch .eye-left .eye-open,
.erp-cat.mood-stretch .eye-right .eye-open { opacity: 0; }
.erp-cat.mood-stretch .tail { transform: rotate(-24deg); animation: erpCatTailWag 0.6s ease-in-out infinite alternate; }

@keyframes erpCatStretchNeck {
    from { transform: scaleY(1.5) translate(0, -12px); }
    to   { transform: scaleY(1.65) translate(2px, -14px); }
}

/* ═══════════════════════════════════════
   40. waving — 挥手拜拜
   ═══════════════════════════════════════ */
.erp-cat.mood-waving .cat-upper { transform: rotate(-10deg) translate(6px, 0); }
.erp-cat.mood-waving .front-leg-right { animation: erpCatWave 0.45s ease-in-out infinite alternate; }
.erp-cat.mood-waving .mouth-normal { opacity: 0; }
.erp-cat.mood-waving .mouth-smile { opacity: 1; }
.erp-cat.mood-waving .blush { opacity: 0.35; }

@keyframes erpCatWave {
    from { transform: rotate(58deg) translate(4px, -20px); }
    to   { transform: rotate(78deg) translate(8px, -28px); }
}

/* ═══════════════════════════════════════
   41. sleeping — 呼呼大睡
   ═══════════════════════════════════════ */
.erp-cat.mood-sleeping .cat-body {
    animation: erpCatSleepBodyBreath 2.8s ease-in-out infinite;
}

.erp-cat.mood-sleeping .cat-neck {
    transform: scaleY(0.52) translate(2px, 20px) rotate(12deg);
}

.erp-cat.mood-sleeping .cat-upper {
    transform: rotate(16deg) translate(-14px, 24px) scale(0.9);
}

.erp-cat.mood-sleeping .front-leg-left {
    transform: rotate(-22deg) translate(-8px, -2px);
}

.erp-cat.mood-sleeping .front-leg-right {
    transform: rotate(-14deg) translate(-2px, 0);
}

.erp-cat.mood-sleeping .hind-leg-left,
.erp-cat.mood-sleeping .hind-leg-right {
    transform: rotate(8deg) translate(0, 4px);
}

.erp-cat.mood-sleeping .tail {
    transform: rotate(-42deg) translate(-10px, 4px);
    animation: erpCatSleepTailTuck 3.2s ease-in-out infinite alternate;
}

.erp-cat.mood-sleeping .eye-left .eye-open,
.erp-cat.mood-sleeping .eye-right .eye-open { opacity: 0; }

.erp-cat.mood-sleeping .eye-left .eye-closed,
.erp-cat.mood-sleeping .eye-right .eye-closed { opacity: 1; }

.erp-cat.mood-sleeping .zzz {
    opacity: 1;
    animation: erpCatSleepZzz 2.2s ease-in-out infinite;
}

.erp-cat.mood-sleeping .mouth-normal { opacity: 1; }

@keyframes erpCatSleepBodyBreath {
    0%, 100% { transform: rotate(-12deg) translateY(12px) scale(0.92, 0.84); }
    50%      { transform: rotate(-12deg) translateY(14px) scale(0.94, 0.87); }
}

@keyframes erpCatSleepTailTuck {
    from { transform: rotate(-42deg) translate(-10px, 4px); }
    to   { transform: rotate(-32deg) translate(-6px, 2px); }
}

@keyframes erpCatSleepZzz {
    0%, 100% { transform: translate(6px, -4px) scale(1); opacity: 0.75; }
    50%      { transform: translate(10px, -10px) scale(1.18); opacity: 1; }
}

/* ═══════════════════════════════════════
   42. grooming — 舔屁股
   ═══════════════════════════════════════ */
.erp-cat.mood-grooming .cat-body {
    transform: translateY(6px) scale(0.98);
}

.erp-cat.mood-grooming .cat-neck {
    transform: rotate(-78deg) translate(-32px, -18px) scaleY(0.82);
    transform-origin: 92px 102px;
    animation: erpCatGroomNeck 0.42s ease-in-out infinite alternate;
}

.erp-cat.mood-grooming .cat-upper {
    transform: rotate(-74deg) translate(-58px, -6px) scale(0.92);
    transform-origin: 88px 96px;
    animation: erpCatGroomHead 0.42s ease-in-out infinite alternate;
}

.erp-cat.mood-grooming .tail {
    transform: rotate(-52deg) translate(-6px, -8px);
    animation: erpCatGroomTail 0.48s ease-in-out infinite alternate;
}

.erp-cat.mood-grooming .hind-leg-left {
    animation: erpCatGroomLegUp 0.52s ease-in-out infinite alternate;
}

.erp-cat.mood-grooming .hind-leg-right {
    transform: rotate(4deg) translate(2px, 0);
}

.erp-cat.mood-grooming .front-leg-left {
    transform: rotate(24deg) translate(6px, 6px);
}

.erp-cat.mood-grooming .front-leg-right {
    transform: rotate(10deg) translate(4px, 8px);
}

.erp-cat.mood-grooming .groom-tongue {
    opacity: 1;
    animation: erpCatGroomLick 0.26s ease-in-out infinite alternate;
}

.erp-cat.mood-grooming .eye-left .eye-open,
.erp-cat.mood-grooming .eye-right .eye-open { opacity: 0; }

.erp-cat.mood-grooming .eye-left .eye-closed,
.erp-cat.mood-grooming .eye-right .eye-closed { opacity: 1; }

.erp-cat.mood-grooming .mouth-normal { opacity: 1; }

@keyframes erpCatGroomNeck {
    from { transform: rotate(-78deg) translate(-32px, -18px) scaleY(0.82); }
    to   { transform: rotate(-82deg) translate(-36px, -22px) scaleY(0.78); }
}

@keyframes erpCatGroomHead {
    from { transform: rotate(-74deg) translate(-58px, -6px) scale(0.92); }
    to   { transform: rotate(-78deg) translate(-62px, -10px) scale(0.9); }
}

@keyframes erpCatGroomTail {
    from { transform: rotate(-52deg) translate(-6px, -8px); }
    to   { transform: rotate(-38deg) translate(-2px, -12px); }
}

@keyframes erpCatGroomLegUp {
    from { transform: rotate(-8deg) translate(0, 0); }
    to   { transform: rotate(-34deg) translate(-8px, -14px); }
}

@keyframes erpCatGroomLick {
    from { transform: rotate(-6deg) scale(0.92); }
    to   { transform: rotate(8deg) scale(1.08); }
}

/* ═══════════════════════════════════════
   43. eating — 埋头干饭
   ═══════════════════════════════════════ */
.erp-cat.mood-eating .cat-body {
    transform: translateY(5px) scale(0.98);
}

.erp-cat.mood-eating .cat-neck {
    transform: scaleY(1.12) translate(6px, 8px);
    animation: erpCatEatNeck 0.34s ease-in-out infinite alternate;
}

.erp-cat.mood-eating .cat-upper {
    transform: rotate(-24deg) translate(2px, 18px) scale(0.95);
    animation: erpCatEatHead 0.34s ease-in-out infinite alternate;
}

.erp-cat.mood-eating .eat-bowl {
    opacity: 1;
    animation: erpCatEatBowl 0.34s ease-in-out infinite alternate;
}

.erp-cat.mood-eating .eye-left .eye-open,
.erp-cat.mood-eating .eye-right .eye-open { opacity: 0; }

.erp-cat.mood-eating .eye-left .eye-closed,
.erp-cat.mood-eating .eye-right .eye-closed { opacity: 1; }

.erp-cat.mood-eating .mouth-normal { opacity: 0; }

.erp-cat.mood-eating .mouth-open {
    opacity: 1;
    transform-origin: 84px 86px;
    animation: erpCatEatChew 0.26s ease-in-out infinite alternate;
}

.erp-cat.mood-eating .blush { opacity: 0.4; }

.erp-cat.mood-eating .front-leg-left {
    animation: erpCatEatPawL 0.34s ease-in-out infinite alternate;
}

.erp-cat.mood-eating .front-leg-right {
    animation: erpCatEatPawR 0.34s ease-in-out infinite alternate-reverse;
}

.erp-cat.mood-eating .tail {
    animation: erpCatTailWag 0.42s ease-in-out infinite alternate;
}

@keyframes erpCatEatHead {
    from { transform: rotate(-24deg) translate(2px, 18px) scale(0.95); }
    to   { transform: rotate(-28deg) translate(0, 20px) scale(0.93); }
}

@keyframes erpCatEatNeck {
    from { transform: scaleY(1.12) translate(6px, 8px); }
    to   { transform: scaleY(1.18) translate(8px, 10px); }
}

@keyframes erpCatEatChew {
    from { transform: scaleY(0.82); }
    to   { transform: scaleY(1.12); }
}

@keyframes erpCatEatBowl {
    from { transform: translateY(0); }
    to   { transform: translateY(1.5px); }
}

@keyframes erpCatEatPawL {
    from { transform: rotate(26deg) translate(8px, 6px); }
    to   { transform: rotate(32deg) translate(6px, 4px); }
}

@keyframes erpCatEatPawR {
    from { transform: rotate(20deg) translate(4px, 8px); }
    to   { transform: rotate(26deg) translate(2px, 6px); }
}

/* ═══════════════════════════════════════
   44. shades — 戴上墨镜
   ═══════════════════════════════════════ */
.erp-cat.mood-shades .cat-body {
    transform: translateY(-2px) scale(1.01);
}

.erp-cat.mood-shades .cat-upper {
    transform: rotate(-8deg) translate(6px, -2px) scale(1.04);
    animation: erpCatShadesHead 1.1s ease-in-out infinite alternate;
}

.erp-cat.mood-shades .sunglasses {
    opacity: 1;
    transform-origin: 84px 58px;
    animation: erpCatShadesGlasses 1.3s ease-in-out infinite alternate;
}

.erp-cat.mood-shades .shade-glare {
    opacity: 1;
    animation: erpCatShadesGlare 1.8s ease-in-out infinite;
}

.erp-cat.mood-shades .eye-left .eye-open,
.erp-cat.mood-shades .eye-right .eye-open { opacity: 0; }

.erp-cat.mood-shades .mouth-normal { opacity: 0; }

.erp-cat.mood-shades .mouth-smile {
    opacity: 0.9;
    transform-origin: 84px 84px;
    animation: erpCatShadesSmile 1.4s ease-in-out infinite alternate;
}

.erp-cat.mood-shades .blush { opacity: 0.35; }

.erp-cat.mood-shades .front-leg-left {
    animation: erpCatShadesPawL 1.2s ease-in-out infinite alternate;
}

.erp-cat.mood-shades .front-leg-right {
    animation: erpCatShadesPawR 1.2s ease-in-out infinite alternate-reverse;
}

.erp-cat.mood-shades .tail {
    animation: erpCatTailWag 0.48s ease-in-out infinite alternate;
}

@keyframes erpCatShadesHead {
    from { transform: rotate(-8deg) translate(6px, -2px) scale(1.04); }
    to   { transform: rotate(-12deg) translate(8px, 0) scale(1.05); }
}

@keyframes erpCatShadesGlasses {
    from { transform: translateY(0) rotate(-1deg); }
    to   { transform: translateY(-1px) rotate(1deg); }
}

@keyframes erpCatShadesGlare {
    0%, 100% { opacity: 0.45; transform: translateX(0); }
    50%      { opacity: 1; transform: translateX(2px); }
}

@keyframes erpCatShadesSmile {
    from { transform: scaleX(1); }
    to   { transform: scaleX(1.06); }
}

@keyframes erpCatShadesPawL {
    from { transform: rotate(8deg) translate(2px, 0); }
    to   { transform: rotate(14deg) translate(4px, -2px); }
}

@keyframes erpCatShadesPawR {
    from { transform: rotate(-6deg) translate(0, 0); }
    to   { transform: rotate(-12deg) translate(-2px, -2px); }
}

/* ═══════════════════════════════════════
   四肢 + 尾巴：全 mood 联动补全
   ═══════════════════════════════════════ */

/* 动画 limb 禁用 transition，避免与 keyframes 打架 */
.erp-cat[class*="mood-"] .front-leg-left,
.erp-cat[class*="mood-"] .front-leg-right,
.erp-cat[class*="mood-"] .hind-leg-left,
.erp-cat[class*="mood-"] .hind-leg-right,
.erp-cat[class*="mood-"] .tail,
.erp-cat.watching .front-leg-left,
.erp-cat.watching .front-leg-right,
.erp-cat.watching .hind-leg-left,
.erp-cat.watching .hind-leg-right,
.erp-cat.watching .tail,
.erp-cat.shy .front-leg-left,
.erp-cat.shy .front-leg-right,
.erp-cat.shy .hind-leg-left,
.erp-cat.shy .hind-leg-right,
.erp-cat.shy .tail,
.erp-cat.covering .front-leg-left,
.erp-cat.covering .front-leg-right,
.erp-cat.covering .hind-leg-left,
.erp-cat.covering .hind-leg-right,
.erp-cat.covering .tail,
.erp-cat.peeking .front-leg-left,
.erp-cat.peeking .front-leg-right,
.erp-cat.peeking .hind-leg-left,
.erp-cat.peeking .hind-leg-right,
.erp-cat.peeking .tail {
    transition: none;
}

@keyframes erpCatLimbGentleFL {
    from { transform: rotate(0deg) translate(0, 0); }
    to   { transform: rotate(10deg) translate(2px, -2px); }
}
@keyframes erpCatLimbGentleFR {
    from { transform: rotate(0deg) translate(0, 0); }
    to   { transform: rotate(-8deg) translate(3px, -1px); }
}
@keyframes erpCatLimbGentleHL {
    from { transform: rotate(0deg) translate(0, 0); }
    to   { transform: rotate(-12deg) translate(-2px, 1px); }
}
@keyframes erpCatLimbGentleHR {
    from { transform: rotate(0deg) translate(0, 0); }
    to   { transform: rotate(14deg) translate(2px, 0); }
}

@keyframes erpCatLimbNervousFL {
    from { transform: rotate(4deg) translate(0, 0); }
    to   { transform: rotate(-8deg) translate(1px, -2px); }
}
@keyframes erpCatLimbNervousFR {
    from { transform: rotate(-4deg) translate(0, 0); }
    to   { transform: rotate(10deg) translate(2px, -2px); }
}
@keyframes erpCatLimbNervousHL {
    from { transform: rotate(-6deg) translate(0, 0); }
    to   { transform: rotate(10deg) translate(2px, -2px); }
}
@keyframes erpCatLimbNervousHR {
    from { transform: rotate(6deg) translate(0, 0); }
    to   { transform: rotate(-12deg) translate(-2px, -1px); }
}

@keyframes erpCatLimbRaiseFL {
    from { transform: rotate(-48deg) translate(-6px, -14px); }
    to   { transform: rotate(-64deg) translate(-10px, -20px); }
}
@keyframes erpCatLimbRaiseFR {
    from { transform: rotate(48deg) translate(6px, -14px); }
    to   { transform: rotate(66deg) translate(10px, -22px); }
}
@keyframes erpCatLimbRaiseHL {
    from { transform: rotate(8deg) translate(0, 0); }
    to   { transform: rotate(26deg) translate(8px, -10px); }
}
@keyframes erpCatLimbRaiseHR {
    from { transform: rotate(-8deg) translate(0, 0); }
    to   { transform: rotate(-24deg) translate(-6px, -8px); }
}

@keyframes erpCatLimbDroopFL {
    from { transform: rotate(4deg) translate(0, 2px); }
    to   { transform: rotate(12deg) translate(2px, 4px); }
}
@keyframes erpCatLimbDroopFR {
    from { transform: rotate(-2deg) translate(0, 2px); }
    to   { transform: rotate(-10deg) translate(0, 4px); }
}
@keyframes erpCatLimbDroopHL {
    from { transform: rotate(4deg) translate(0, 0); }
    to   { transform: rotate(12deg) translate(0, 3px); }
}
@keyframes erpCatLimbDroopHR {
    from { transform: rotate(-2deg) translate(0, 0); }
    to   { transform: rotate(10deg) translate(0, 2px); }
}

@keyframes erpCatLimbThinkFL {
    from { transform: rotate(6deg) translate(0, 0); }
    to   { transform: rotate(14deg) translate(2px, 2px); }
}
@keyframes erpCatLimbThinkFR {
    from { transform: rotate(38deg) translate(8px, -12px); }
    to   { transform: rotate(48deg) translate(12px, -16px); }
}
@keyframes erpCatLimbThinkHL {
    from { transform: rotate(0deg) translate(0, 0); }
    to   { transform: rotate(8deg) translate(2px, 0); }
}
@keyframes erpCatLimbThinkHR {
    from { transform: rotate(-4deg) translate(0, 0); }
    to   { transform: rotate(-12deg) translate(-2px, 1px); }
}

@keyframes erpCatLimbStompFL {
    from { transform: rotate(-10deg) translate(0, 0); }
    to   { transform: rotate(-22deg) translate(-4px, 2px); }
}
@keyframes erpCatLimbStompFR {
    from { transform: rotate(58deg) translate(6px, -20px); }
    to   { transform: rotate(78deg) translate(10px, -28px); }
}
@keyframes erpCatLimbStompHL {
    from { transform: rotate(10deg) translate(0, 0); }
    to   { transform: rotate(24deg) translate(6px, -6px); }
}
@keyframes erpCatLimbStompHR {
    from { transform: rotate(-8deg) translate(0, 0); }
    to   { transform: rotate(-22deg) translate(-4px, -4px); }
}

@keyframes erpCatLimbReachFL {
    from { transform: rotate(-20deg) translate(-4px, -6px); }
    to   { transform: rotate(-32deg) translate(-8px, -10px); }
}
@keyframes erpCatLimbReachFR {
    from { transform: rotate(16deg) translate(2px, -2px); }
    to   { transform: rotate(28deg) translate(4px, -6px); }
}
@keyframes erpCatLimbReachHL {
    from { transform: rotate(6deg) translate(0, 0); }
    to   { transform: rotate(14deg) translate(4px, -2px); }
}
@keyframes erpCatLimbReachHR {
    from { transform: rotate(-4deg) translate(0, 0); }
    to   { transform: rotate(-14deg) translate(-2px, -2px); }
}

@keyframes erpCatLimbWiggleFL {
    from { transform: rotate(-14deg) translate(0, 0); }
    to   { transform: rotate(16deg) translate(2px, -2px); }
}
@keyframes erpCatLimbWiggleFR {
    from { transform: rotate(12deg) translate(0, 0); }
    to   { transform: rotate(-18deg) translate(-2px, -1px); }
}
@keyframes erpCatLimbWiggleHL {
    from { transform: rotate(10deg) translate(0, 0); }
    to   { transform: rotate(-16deg) translate(2px, -3px); }
}
@keyframes erpCatLimbWiggleHR {
    from { transform: rotate(-8deg) translate(0, 0); }
    to   { transform: rotate(18deg) translate(-2px, -2px); }
}

@keyframes erpCatLimbStretchHL {
    from { transform: rotate(6deg) translate(0, 0); }
    to   { transform: rotate(18deg) translate(8px, -6px); }
}
@keyframes erpCatLimbStretchHR {
    from { transform: rotate(-4deg) translate(0, 0); }
    to   { transform: rotate(-16deg) translate(-6px, -4px); }
}

@keyframes erpCatLimbStretchFL {
    from { transform: rotate(-68deg) translate(-12px, -16px); }
    to   { transform: rotate(-78deg) translate(-16px, -20px); }
}
@keyframes erpCatLimbStretchFR {
    from { transform: rotate(68deg) translate(12px, -16px); }
    to   { transform: rotate(78deg) translate(16px, -22px); }
}

@keyframes erpCatTailSlow {
    from { transform: rotate(-12deg); }
    to   { transform: rotate(-2deg); }
}
@keyframes erpCatTailDroop {
    from { transform: rotate(2deg); }
    to   { transform: rotate(12deg); }
}

/* 轻柔摆腿 + 摇尾 */
.erp-cat.mood-happy .front-leg-left,
.erp-cat.mood-love .front-leg-left,
.erp-cat.mood-champion .front-leg-left,
.erp-cat.mood-silver .front-leg-left,
.erp-cat.mood-cool .front-leg-left,
.erp-cat.mood-bullish .front-leg-left,
.erp-cat.mood-coinrain .front-leg-left {
    animation: erpCatLimbGentleFL 1.8s ease-in-out infinite alternate;
}
.erp-cat.mood-happy .front-leg-right,
.erp-cat.mood-love .front-leg-right,
.erp-cat.mood-champion .front-leg-right,
.erp-cat.mood-silver .front-leg-right,
.erp-cat.mood-cool .front-leg-right,
.erp-cat.mood-bullish .front-leg-right,
.erp-cat.mood-coinrain .front-leg-right {
    animation: erpCatLimbGentleFR 1.8s ease-in-out infinite alternate-reverse;
}
.erp-cat.mood-happy .hind-leg-left,
.erp-cat.mood-love .hind-leg-left,
.erp-cat.mood-champion .hind-leg-left,
.erp-cat.mood-silver .hind-leg-left,
.erp-cat.mood-cool .hind-leg-left,
.erp-cat.mood-shades .hind-leg-left,
.erp-cat.mood-bullish .hind-leg-left,
.erp-cat.mood-coinrain .hind-leg-left {
    animation: erpCatLimbGentleHL 1.9s ease-in-out infinite alternate-reverse;
}
.erp-cat.mood-happy .hind-leg-right,
.erp-cat.mood-love .hind-leg-right,
.erp-cat.mood-champion .hind-leg-right,
.erp-cat.mood-silver .hind-leg-right,
.erp-cat.mood-cool .hind-leg-right,
.erp-cat.mood-shades .hind-leg-right,
.erp-cat.mood-bullish .hind-leg-right,
.erp-cat.mood-coinrain .hind-leg-right {
    animation: erpCatLimbGentleHR 1.9s ease-in-out infinite alternate;
}
.erp-cat.mood-silver .tail {
    animation: erpCatTailWag 0.45s ease-in-out infinite alternate;
}

/* 害羞 */
.erp-cat.mood-shy .front-leg-left,
.erp-cat.shy .front-leg-left {
    animation: erpCatLimbGentleFL 2.2s ease-in-out infinite alternate;
}
.erp-cat.mood-shy .front-leg-right,
.erp-cat.shy .front-leg-right {
    animation: erpCatLimbGentleFR 2.2s ease-in-out infinite alternate-reverse;
}
.erp-cat.mood-shy .hind-leg-left,
.erp-cat.shy .hind-leg-left {
    animation: erpCatLimbGentleHL 2.3s ease-in-out infinite alternate-reverse;
}
.erp-cat.mood-shy .hind-leg-right,
.erp-cat.shy .hind-leg-right {
    animation: erpCatLimbGentleHR 2.3s ease-in-out infinite alternate;
}
.erp-cat.mood-shy .tail,
.erp-cat.shy .tail {
    animation: erpCatTailSlow 1.6s ease-in-out infinite alternate;
}

/* 偷看 / 生气 */
.erp-cat.mood-covering .front-leg-left,
.erp-cat.covering .front-leg-left,
.erp-cat.mood-angry .front-leg-left,
.erp-cat.mood-peeking .front-leg-left,
.erp-cat.peeking .front-leg-left {
    animation: erpCatLimbNervousFL 0.28s ease-in-out infinite alternate;
}
.erp-cat.mood-covering .front-leg-right,
.erp-cat.covering .front-leg-right,
.erp-cat.mood-angry .front-leg-right,
.erp-cat.mood-peeking .front-leg-right,
.erp-cat.peeking .front-leg-right {
    animation: erpCatLimbNervousFR 0.28s ease-in-out infinite alternate-reverse;
}
.erp-cat.mood-covering .hind-leg-left,
.erp-cat.covering .hind-leg-left,
.erp-cat.mood-angry .hind-leg-left,
.erp-cat.mood-peeking .hind-leg-left,
.erp-cat.peeking .hind-leg-left {
    animation: erpCatLimbNervousHL 0.32s ease-in-out infinite alternate-reverse;
}
.erp-cat.mood-covering .hind-leg-right,
.erp-cat.covering .hind-leg-right,
.erp-cat.mood-angry .hind-leg-right,
.erp-cat.mood-peeking .hind-leg-right,
.erp-cat.peeking .hind-leg-right {
    animation: erpCatLimbNervousHR 0.32s ease-in-out infinite alternate;
}

/* 盯人 / 专注 */
.erp-cat.mood-watching .front-leg-left,
.erp-cat.watching .front-leg-left,
.erp-cat.mood-focused .front-leg-left {
    animation: erpCatLimbThinkFL 1.1s ease-in-out infinite alternate;
}
.erp-cat.mood-watching .front-leg-right,
.erp-cat.watching .front-leg-right,
.erp-cat.mood-focused .front-leg-right {
    animation: erpCatLimbThinkFR 1.1s ease-in-out infinite alternate-reverse;
}
.erp-cat.mood-watching .hind-leg-left,
.erp-cat.watching .hind-leg-left,
.erp-cat.mood-focused .hind-leg-left {
    animation: erpCatLimbThinkHL 1.2s ease-in-out infinite alternate-reverse;
}
.erp-cat.mood-watching .hind-leg-right,
.erp-cat.watching .hind-leg-right,
.erp-cat.mood-focused .hind-leg-right {
    animation: erpCatLimbThinkHR 1.2s ease-in-out infinite alternate;
}
.erp-cat.mood-watching .tail,
.erp-cat.watching .tail,
.erp-cat.mood-focused .tail {
    animation: erpCatTailSneak 0.55s ease-in-out infinite alternate;
}

/* 激动 / 庆祝 / 老板 */
.erp-cat.mood-excited .front-leg-left,
.erp-cat.mood-celebrate .front-leg-left,
.erp-cat.mood-boss .front-leg-left {
    animation: erpCatLimbRaiseFL 0.42s ease-in-out infinite alternate;
}
.erp-cat.mood-excited .front-leg-right,
.erp-cat.mood-celebrate .front-leg-right,
.erp-cat.mood-boss .front-leg-right {
    animation: erpCatLimbRaiseFR 0.42s ease-in-out infinite alternate-reverse;
}
.erp-cat.mood-excited .hind-leg-left,
.erp-cat.mood-celebrate .hind-leg-left,
.erp-cat.mood-boss .hind-leg-left {
    animation: erpCatLimbRaiseHL 0.48s ease-in-out infinite alternate-reverse;
}
.erp-cat.mood-excited .hind-leg-right,
.erp-cat.mood-celebrate .hind-leg-right,
.erp-cat.mood-boss .hind-leg-right {
    animation: erpCatLimbRaiseHR 0.48s ease-in-out infinite alternate;
}
.erp-cat.mood-celebrate .tail,
.erp-cat.mood-boss .tail {
    animation: erpCatTailWag 0.32s ease-in-out infinite alternate;
}

/* 犯困 */
.erp-cat.mood-sleepy .front-leg-left {
    animation: erpCatLimbDroopFL 2.4s ease-in-out infinite alternate;
}
.erp-cat.mood-sleepy .front-leg-right {
    animation: erpCatLimbDroopFR 2.4s ease-in-out infinite alternate-reverse;
}
.erp-cat.mood-sleepy .hind-leg-left {
    animation: erpCatLimbDroopHL 2.5s ease-in-out infinite alternate-reverse;
}
.erp-cat.mood-sleepy .hind-leg-right {
    animation: erpCatLimbDroopHR 2.5s ease-in-out infinite alternate;
}
.erp-cat.mood-sleepy .tail {
    animation: erpCatTailDroop 2.2s ease-in-out infinite alternate;
}

/* 惊讶 / 大喊 / 躲猫猫 */
.erp-cat.mood-surprised .front-leg-left,
.erp-cat.mood-shouting .front-leg-left,
.erp-cat.mood-peekaboo .front-leg-left {
    animation: erpCatLimbStompFL 0.35s ease-in-out infinite alternate;
}
.erp-cat.mood-surprised .front-leg-right,
.erp-cat.mood-shouting .front-leg-right,
.erp-cat.mood-peekaboo .front-leg-right {
    animation: erpCatLimbStompFR 0.35s ease-in-out infinite alternate-reverse;
}
.erp-cat.mood-surprised .hind-leg-left,
.erp-cat.mood-shouting .hind-leg-left,
.erp-cat.mood-peekaboo .hind-leg-left {
    animation: erpCatLimbStompHL 0.38s ease-in-out infinite alternate-reverse;
}
.erp-cat.mood-surprised .hind-leg-right,
.erp-cat.mood-shouting .hind-leg-right,
.erp-cat.mood-peekaboo .hind-leg-right {
    animation: erpCatLimbStompHR 0.38s ease-in-out infinite alternate;
}
.erp-cat.mood-surprised .tail,
.erp-cat.mood-shouting .tail,
.erp-cat.mood-peekaboo .tail {
    animation: erpCatTailNervous 0.25s ease-in-out infinite alternate;
}

/* 馋 / 打电话 / 打字 / 挥手 */
.erp-cat.mood-hungry .front-leg-left {
    animation: erpCatLimbReachFL 0.9s ease-in-out infinite alternate;
}
.erp-cat.mood-hungry .front-leg-right {
    animation: erpCatLimbReachFR 0.9s ease-in-out infinite alternate-reverse;
}
.erp-cat.mood-hungry .hind-leg-left {
    animation: erpCatLimbReachHL 1s ease-in-out infinite alternate-reverse;
}
.erp-cat.mood-hungry .hind-leg-right {
    animation: erpCatLimbReachHR 1s ease-in-out infinite alternate;
}
.erp-cat.mood-hungry .tail {
    animation: erpCatTailWag 0.5s ease-in-out infinite alternate;
}

.erp-cat.mood-typing .hind-leg-left {
    animation: erpCatLimbNervousHL 0.3s ease-in-out infinite alternate-reverse;
}
.erp-cat.mood-typing .hind-leg-right {
    animation: erpCatLimbNervousHR 0.3s ease-in-out infinite alternate;
}
.erp-cat.mood-typing .tail {
    animation: erpCatTailNervous 0.35s ease-in-out infinite alternate;
}

.erp-cat.mood-waving .front-leg-left {
    animation: erpCatLimbGentleFL 1.4s ease-in-out infinite alternate;
}
.erp-cat.mood-waving .hind-leg-left {
    animation: erpCatLimbGentleHL 1.5s ease-in-out infinite alternate-reverse;
}
.erp-cat.mood-waving .hind-leg-right {
    animation: erpCatLimbGentleHR 1.5s ease-in-out infinite alternate;
}
.erp-cat.mood-waving .tail {
    animation: erpCatTailWag 0.4s ease-in-out infinite alternate;
}

/* 眼冒金星 */
.erp-cat.mood-dizzy .front-leg-left {
    animation: erpCatLimbWiggleFL 0.45s ease-in-out infinite alternate;
}
.erp-cat.mood-dizzy .front-leg-right {
    animation: erpCatLimbWiggleFR 0.45s ease-in-out infinite alternate-reverse;
}
.erp-cat.mood-dizzy .hind-leg-left {
    animation: erpCatLimbWiggleHL 0.48s ease-in-out infinite alternate-reverse;
}
.erp-cat.mood-dizzy .hind-leg-right {
    animation: erpCatLimbWiggleHR 0.48s ease-in-out infinite alternate;
}
.erp-cat.mood-dizzy .tail {
    animation: erpCatTailNervous 0.3s ease-in-out infinite alternate;
}

/* 伸懒腰：后腿也动 */
.erp-cat.mood-stretch .front-leg-left {
    animation: erpCatLimbStretchFL 1.1s ease-in-out infinite alternate;
}
.erp-cat.mood-stretch .front-leg-right {
    animation: erpCatLimbStretchFR 1.1s ease-in-out infinite alternate-reverse;
}
.erp-cat.mood-stretch .hind-leg-left {
    animation: erpCatLimbStretchHL 1.2s ease-in-out infinite alternate-reverse;
}
.erp-cat.mood-stretch .hind-leg-right {
    animation: erpCatLimbStretchHR 1.2s ease-in-out infinite alternate;
}

/* 睡觉：四肢随呼吸轻起伏 */
.erp-cat.mood-sleeping .front-leg-left {
    animation: erpCatSleepFL 2.8s ease-in-out infinite alternate;
}
.erp-cat.mood-sleeping .front-leg-right {
    animation: erpCatSleepFR 2.8s ease-in-out infinite alternate-reverse;
}
.erp-cat.mood-sleeping .hind-leg-left {
    animation: erpCatSleepHL 3s ease-in-out infinite alternate-reverse;
}
.erp-cat.mood-sleeping .hind-leg-right {
    animation: erpCatSleepHR 3s ease-in-out infinite alternate;
}

@keyframes erpCatSleepFL {
    from { transform: rotate(-22deg) translate(-8px, -2px); }
    to   { transform: rotate(-18deg) translate(-6px, 0); }
}
@keyframes erpCatSleepFR {
    from { transform: rotate(-14deg) translate(-2px, 0); }
    to   { transform: rotate(-10deg) translate(0, -1px); }
}
@keyframes erpCatSleepHL {
    from { transform: rotate(8deg) translate(0, 4px); }
    to   { transform: rotate(12deg) translate(2px, 3px); }
}
@keyframes erpCatSleepHR {
    from { transform: rotate(8deg) translate(0, 4px); }
    to   { transform: rotate(6deg) translate(-2px, 5px); }
}

/* 舔毛：前爪 + 右后腿微动（左后腿保留专用抬腿动画） */
.erp-cat.mood-grooming .front-leg-left {
    animation: erpCatGroomPawL 0.48s ease-in-out infinite alternate;
}
.erp-cat.mood-grooming .front-leg-right {
    animation: erpCatGroomPawR 0.48s ease-in-out infinite alternate-reverse;
}
.erp-cat.mood-grooming .hind-leg-right {
    animation: erpCatGroomHindR 0.52s ease-in-out infinite alternate;
}

@keyframes erpCatGroomPawL {
    from { transform: rotate(24deg) translate(6px, 6px); }
    to   { transform: rotate(30deg) translate(8px, 4px); }
}
@keyframes erpCatGroomPawR {
    from { transform: rotate(10deg) translate(4px, 8px); }
    to   { transform: rotate(16deg) translate(6px, 6px); }
}
@keyframes erpCatGroomHindR {
    from { transform: rotate(4deg) translate(2px, 0); }
    to   { transform: rotate(10deg) translate(4px, -2px); }
}

/* 埋头干饭：后腿稳蹲 */
.erp-cat.mood-eating .hind-leg-left {
    animation: erpCatEatHindL 0.38s ease-in-out infinite alternate-reverse;
}
.erp-cat.mood-eating .hind-leg-right {
    animation: erpCatEatHindR 0.38s ease-in-out infinite alternate;
}

@keyframes erpCatEatHindL {
    from { transform: rotate(6deg) translate(0, 2px); }
    to   { transform: rotate(10deg) translate(2px, 0); }
}
@keyframes erpCatEatHindR {
    from { transform: rotate(-4deg) translate(0, 2px); }
    to   { transform: rotate(-8deg) translate(-2px, 0); }
}

/* ── 爬行 locomotion（停靠移动时，优先级高于 mood） ── */
.erp-cat.erp-cat--crawling {
    transform: translateY(2px) !important;
}

.erp-cat.erp-cat--crawling .cat-body {
    animation: erpCatCrawlBody 0.42s ease-in-out infinite alternate !important;
}

.erp-cat.erp-cat--crawling .cat-neck {
    animation: erpCatCrawlNeck 0.42s ease-in-out infinite alternate !important;
}

.erp-cat.erp-cat--crawling .cat-upper {
    animation: erpCatCrawlHead 0.42s ease-in-out infinite alternate !important;
}

.erp-cat.erp-cat--crawling .front-leg-left {
    animation: erpCatStepFrontL 0.48s ease-in-out infinite !important;
}

.erp-cat.erp-cat--crawling .front-leg-right {
    animation: erpCatStepFrontR 0.48s ease-in-out infinite !important;
    animation-delay: 0.24s !important;
}

.erp-cat.erp-cat--crawling .hind-leg-left {
    animation: erpCatStepHindL 0.48s ease-in-out infinite !important;
    animation-delay: 0.24s !important;
}

.erp-cat.erp-cat--crawling .hind-leg-right {
    animation: erpCatStepHindR 0.48s ease-in-out infinite !important;
}

.erp-cat.erp-cat--crawling .tail {
    animation: erpCatCrawlTail 0.42s ease-in-out infinite alternate !important;
}

.erp-cat.erp-cat--crawling .pupil,
.erp-cat.erp-cat--crawling .iris {
    transform: translate(12px, 4px) !important;
    animation: none !important;
}

@keyframes erpCatCrawlBody {
    0%, 100% { transform: translateY(6px) rotate(-4deg) scaleX(0.94); }
    50%      { transform: translateY(0) rotate(2deg) scaleX(1.08) translateX(10px); }
}

@keyframes erpCatCrawlNeck {
    0%, 100% { transform: scaleY(0.82) translate(2px, 8px); }
    50%      { transform: scaleY(1) translate(12px, -2px); }
}

@keyframes erpCatCrawlHead {
    0%, 100% { transform: rotate(-2deg) translate(6px, 16px) scale(1, 0.92); }
    50%      { transform: rotate(-10deg) translate(18px, 4px) scale(1.02, 0.98); }
}

@keyframes erpCatStepFrontL {
    0%, 100% { transform: rotate(18deg) translate(0, 2px); }
    50%      { transform: rotate(-28deg) translate(16px, -12px); }
}

@keyframes erpCatStepFrontR {
    0%, 100% { transform: rotate(12deg) translate(0, 0); }
    50%      { transform: rotate(-22deg) translate(14px, -10px); }
}

@keyframes erpCatStepHindL {
    0%, 100% { transform: rotate(-8deg) translate(0, 0); }
    50%      { transform: rotate(24deg) translate(12px, -8px); }
}

@keyframes erpCatStepHindR {
    0%, 100% { transform: rotate(-14deg) translate(0, 2px); }
    50%      { transform: rotate(20deg) translate(10px, -6px); }
}

@keyframes erpCatCrawlTail {
    from { transform: rotate(-8deg); }
    to   { transform: rotate(-32deg); }
}

/* ── 跳跃 locomotion ── */
.erp-cat.erp-cat--jumping .cat-body {
    animation: erpCatJumpBody 0.62s cubic-bezier(0.22, 1, 0.36, 1) !important;
}

.erp-cat.erp-cat--jumping .cat-neck {
    animation: erpCatJumpNeck 0.62s cubic-bezier(0.22, 1, 0.36, 1) !important;
}

.erp-cat.erp-cat--jumping .cat-upper {
    animation: erpCatJumpHead 0.62s cubic-bezier(0.22, 1, 0.36, 1) !important;
}

.erp-cat.erp-cat--jumping .front-leg-left,
.erp-cat.erp-cat--jumping .front-leg-right {
    animation: erpCatJumpLegsTuck 0.62s cubic-bezier(0.22, 1, 0.36, 1) !important;
}

.erp-cat.erp-cat--jumping .hind-leg-left,
.erp-cat.erp-cat--jumping .hind-leg-right {
    animation: erpCatJumpLegsPush 0.62s cubic-bezier(0.22, 1, 0.36, 1) !important;
}

.erp-cat.erp-cat--jumping .tail {
    animation: erpCatJumpTail 0.62s cubic-bezier(0.22, 1, 0.36, 1) !important;
}

@keyframes erpCatJumpBody {
    0%, 100% { transform: translateY(0) scaleX(1); }
    35%      { transform: translateY(-10px) scaleX(0.94); }
    55%      { transform: translateY(-6px) scaleX(1.02); }
}

@keyframes erpCatJumpNeck {
    0%, 100% { transform: scaleY(1) translate(0, 0); }
    35%      { transform: scaleY(0.88) translate(2px, 4px); }
    55%      { transform: scaleY(1.05) translate(6px, -6px); }
}

@keyframes erpCatJumpHead {
    0%, 100% { transform: rotate(-6deg) translate(4px, 2px); }
    35%      { transform: rotate(-12deg) translate(8px, 10px) scale(0.96); }
    55%      { transform: rotate(-4deg) translate(10px, -8px) scale(1.04); }
}

@keyframes erpCatJumpLegsTuck {
    0%, 100% { transform: rotate(0deg) translate(0, 0); }
    35%      { transform: rotate(-35deg) translate(2px, -8px); }
    55%      { transform: rotate(15deg) translate(4px, 2px); }
}

@keyframes erpCatJumpLegsPush {
    0%, 100% { transform: rotate(0deg) translate(0, 0); }
    25%      { transform: rotate(18deg) translate(0, 2px); }
    45%      { transform: rotate(-12deg) translate(2px, -4px); }
}

@keyframes erpCatJumpTail {
    0%, 100% { transform: rotate(-20deg); }
    35%      { transform: rotate(8deg); }
    55%      { transform: rotate(-28deg); }
}

/* ── 拖拽：鼠标拖动 + 反抗动画 ── */
.erp-cat-dock.is-dragging {
    opacity: 1;
    transition: none;
}

.erp-cat-dock.is-dragging .erp-cat-wrap--ranking {
    cursor: grabbing;
}

.erp-cat.erp-cat--dragging {
    transition: none !important;
}

.erp-cat.erp-cat--dragging .cat-body {
    transform:
        translate(calc(var(--drag-pull-x, 0) * -16px), calc(var(--drag-pull-y, 0) * -12px))
        rotate(calc(var(--drag-pull-x, 0) * -16deg))
        scale(1.04, 0.92);
    animation: erpCatDragBodyStruggle 0.15s ease-in-out infinite alternate !important;
}

.erp-cat.erp-cat--dragging .cat-neck {
    transform:
        scaleY(0.68)
        translate(calc(var(--drag-pull-x, 0) * -10px), 14px);
    animation: erpCatDragNeckStruggle 0.17s ease-in-out infinite alternate !important;
}

.erp-cat.erp-cat--dragging .cat-upper {
    animation: erpCatDragHeadStruggle 0.13s ease-in-out infinite alternate !important;
}

.erp-cat.erp-cat--dragging .front-leg-left {
    animation: erpCatDragKickFL 0.19s ease-in-out infinite alternate !important;
}

.erp-cat.erp-cat--dragging .front-leg-right {
    animation: erpCatDragKickFR 0.19s ease-in-out infinite alternate-reverse !important;
}

.erp-cat.erp-cat--dragging .hind-leg-left {
    animation: erpCatDragKickHL 0.21s ease-in-out infinite alternate-reverse !important;
}

.erp-cat.erp-cat--dragging .hind-leg-right {
    animation: erpCatDragKickHR 0.21s ease-in-out infinite alternate !important;
}

.erp-cat.erp-cat--dragging .tail {
    animation: erpCatDragTailFlail 0.11s ease-in-out infinite alternate !important;
}

.erp-cat.erp-cat--dragging .ear-left {
    transform: rotate(-22deg) translate(-6px, 8px);
    animation: erpCatDragEarL 0.14s ease-in-out infinite alternate;
}

.erp-cat.erp-cat--dragging .ear-right {
    transform: rotate(22deg) translate(6px, 8px);
    animation: erpCatDragEarR 0.14s ease-in-out infinite alternate-reverse;
}

.erp-cat.erp-cat--dragging .anger-mark { opacity: 1; }
.erp-cat.erp-cat--dragging .mouth-normal { opacity: 0; }
.erp-cat.erp-cat--dragging .mouth-angry { opacity: 1; }
.erp-cat.erp-cat--dragging .sweat { opacity: 0.8; }
.erp-cat.erp-cat--dragging .pupil,
.erp-cat.erp-cat--dragging .iris {
    transform: translate(calc(var(--drag-pull-x, 0) * -6px), 4px) scale(0.82) !important;
    animation: none !important;
}

@keyframes erpCatDragBodyStruggle {
    from { transform: translate(calc(var(--drag-pull-x, 0) * -16px), calc(var(--drag-pull-y, 0) * -12px)) rotate(calc(var(--drag-pull-x, 0) * -16deg)) scale(1.04, 0.92); }
    to   { transform: translate(calc(var(--drag-pull-x, 0) * -20px), calc(var(--drag-pull-y, 0) * -16px)) rotate(calc(var(--drag-pull-x, 0) * -20deg)) scale(1.06, 0.88); }
}

@keyframes erpCatDragNeckStruggle {
    from { transform: scaleY(0.68) translate(calc(var(--drag-pull-x, 0) * -10px), 14px); }
    to   { transform: scaleY(0.58) translate(calc(var(--drag-pull-x, 0) * -14px), 18px); }
}

@keyframes erpCatDragHeadStruggle {
    from { transform: rotate(calc(var(--drag-pull-x, 0) * -18deg - 6deg)) translate(calc(var(--drag-pull-x, 0) * -8px), 8px) scale(1.02, 0.96); }
    to   { transform: rotate(calc(var(--drag-pull-x, 0) * -24deg - 4deg)) translate(calc(var(--drag-pull-x, 0) * -12px), 12px) scale(1.04, 0.94); }
}

@keyframes erpCatDragKickFL {
    from { transform: rotate(42deg) translate(-8px, -16px); }
    to   { transform: rotate(-38deg) translate(10px, -22px); }
}

@keyframes erpCatDragKickFR {
    from { transform: rotate(-36deg) translate(8px, -14px); }
    to   { transform: rotate(48deg) translate(-6px, -20px); }
}

@keyframes erpCatDragKickHL {
    from { transform: rotate(28deg) translate(6px, -10px); }
    to   { transform: rotate(-32deg) translate(-4px, -14px); }
}

@keyframes erpCatDragKickHR {
    from { transform: rotate(-24deg) translate(-4px, -8px); }
    to   { transform: rotate(34deg) translate(8px, -12px); }
}

@keyframes erpCatDragTailFlail {
    from { transform: rotate(calc(var(--drag-pull-x, 0) * 40deg + 12deg)); }
    to   { transform: rotate(calc(var(--drag-pull-x, 0) * 40deg - 28deg)); }
}

@keyframes erpCatDragEarL {
    from { transform: rotate(-22deg) translate(-6px, 8px); }
    to   { transform: rotate(-32deg) translate(-10px, 4px); }
}

@keyframes erpCatDragEarR {
    from { transform: rotate(22deg) translate(6px, 8px); }
    to   { transform: rotate(32deg) translate(10px, 4px); }
}

/* ── 鼠标追踪 + 偶尔偷窥 ── */
.erp-cat.erp-cat--eye-track .eye-left .iris,
.erp-cat.erp-cat--eye-track .eye-left .pupil,
.erp-cat.erp-cat--eye-track .eye-right .iris,
.erp-cat.erp-cat--eye-track .eye-right .pupil,
.erp-cat.erp-cat--eye-track .eye-right .peek-iris,
.erp-cat.erp-cat--eye-track .eye-right .peek-pupil {
    animation: none !important;
}

.erp-cat.erp-cat--sneak-peek .eye-left .eye-open { opacity: 0; }
.erp-cat.erp-cat--sneak-peek .eye-left .eye-closed { opacity: 1; }
.erp-cat.erp-cat--sneak-peek .eye-right .eye-open { opacity: 0; }
.erp-cat.erp-cat--sneak-peek .eye-right .eye-peek { opacity: 1; }

.erp-cat.erp-cat--sneak-peek .front-leg-left {
    transform: rotate(-64deg) translate(-12px, -26px) !important;
    animation: none !important;
}

.erp-cat.erp-cat--sneak-peek .cat-upper {
    animation: erpCatSneakPeekUpper 0.52s ease-in-out infinite alternate !important;
}

.erp-cat.erp-cat--sneak-peek .cat-neck {
    animation: erpCatSneakPeekNeck 0.52s ease-in-out infinite alternate !important;
}

.erp-cat.erp-cat--sneak-peek .tail {
    animation: erpCatTailNervous 0.32s ease-in-out infinite alternate !important;
}

.erp-cat.erp-cat--sneak-peek .blush { opacity: 0.38; }
.erp-cat.erp-cat--sneak-peek .sweat { opacity: 0.55; }

.erp-cat.erp-cat--sneak-peek.erp-cat--sneak-peek-alt .eye-left .eye-open { opacity: 1; }
.erp-cat.erp-cat--sneak-peek.erp-cat--sneak-peek-alt .eye-left .eye-closed { opacity: 0; }
.erp-cat.erp-cat--sneak-peek.erp-cat--sneak-peek-alt .eye-right .eye-open { opacity: 0; }
.erp-cat.erp-cat--sneak-peek.erp-cat--sneak-peek-alt .eye-right .eye-closed { opacity: 1; }
.erp-cat.erp-cat--sneak-peek.erp-cat--sneak-peek-alt .eye-right .eye-peek { opacity: 0; }

.erp-cat.erp-cat--sneak-peek.erp-cat--sneak-peek-alt .front-leg-left {
    transform: none !important;
}

.erp-cat.erp-cat--sneak-peek.erp-cat--sneak-peek-alt .front-leg-right {
    transform: rotate(62deg) translate(14px, -28px) !important;
    animation: none !important;
}

@keyframes erpCatSneakPeekUpper {
    from { transform: rotate(-8deg) translate(10px, 6px) scale(1.02, 1.04); }
    to   { transform: rotate(-4deg) translate(16px, 4px) scale(1.04, 1.06); }
}

@keyframes erpCatSneakPeekNeck {
    from { transform: scaleY(1.28) translate(8px, -6px); }
    to   { transform: scaleY(1.42) translate(12px, -10px); }
}
