/* =========================================================================
   LIVECAT v2 — 自由活动猫样式
   ========================================================================= */

.lc2-wrap {
  position: fixed;
  top: 0; left: 0;
  width: 0; height: 0;
  z-index: 9999;
  pointer-events: none;
  font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
  user-select: none;
  transition: opacity .3s ease;
}
.lc2-wrap.lc2-hidden { opacity: 0; }

/* ---------- 猫本体 ---------- */
.lc2-cat {
  position: fixed;
  top: 0; left: 0;
  width: 100px;
  height: 70px;
  pointer-events: auto;
  cursor: pointer;
  transform-origin: center center;
  will-change: transform;
  transition: filter .3s ease;
  z-index: 2;
}
.lc2-cat:hover { filter: brightness(1.08); }

.lc2-body {
  width: 100%;
  height: 100%;
  display: block;
  filter: drop-shadow(0 4px 8px rgba(0,0,0,0.18));
}

/* v4：变换锚点修正——以元素自身包围盒为参照，不再挂 viewBox 原点 */
.lc2-eye-l, .lc2-eye-r, .lc2-mouth {
  transform-box: fill-box;
  transform-origin: center;
}
.lc2-ear-l { transform-box: fill-box; transform-origin: bottom right; }
.lc2-ear-r { transform-box: fill-box; transform-origin: bottom left; }
.lc2-front-leg, .lc2-front-leg2, .lc2-back-leg, .lc2-back-leg2 {
  transform-box: fill-box;
}

/* ---------- 状态对应身体姿势 ---------- */

/* 走路：身体轻颠（v8 起腿为一体剪影，不再分腿旋转） */
.state-walk .lc2-body {
  animation: lc2-bob 0.5s ease-in-out infinite;
}
@keyframes lc2-bob {
  0%, 100% { transform: translateY(0); }
  50% { transform: translateY(-1.6px); }
}
.state-walk .lc2-tail {
  transform-origin: 71.9px 33.6px;
  animation: lc2-tail-swish 1.2s ease-in-out infinite;
}
@keyframes lc2-walk-leg {
  0%, 100% { transform: rotate(0deg); }
  50% { transform: rotate(-18deg); }
}
@keyframes lc2-tail-swish {
  0%, 100% { transform: rotate(-10deg); }
  50% { transform: rotate(15deg); }
}

/* 跑步：腿更快 */
/* 跑步：身体快速起伏 */
.state-run .lc2-body {
  animation: lc2-bob 0.22s ease-in-out infinite;
}
.state-run .lc2-tail {
  transform-origin: 71.9px 33.6px;
  animation: lc2-tail-swish 0.4s ease-in-out infinite;
}

/* 睡觉：身体趴下、呼吸 */
.state-sleep .lc2-body {
  transform-origin: center 70%;
  transform: scaleY(0.7) translateY(8px);
  animation: lc2-breathe 3.6s ease-in-out infinite;
}
.state-sleep .lc2-eyes { opacity: 0.25; }
.state-sleep .lc2-pupil-l, .state-sleep .lc2-pupil-r { height: 0.5px; y: 24; }
.state-sleep .lc2-tail {
  transform-origin: 71.9px 33.6px;
  transform: rotate(40deg);
}
@keyframes lc2-breathe {
  0%, 100% { transform: scaleY(0.7) translateY(8px); }
  50% { transform: scaleY(0.74) translateY(6px); }
}

/* 坐姿：身体略抬高 */
.state-sit .lc2-body {
  transform: translateY(-4px);
}
.state-sit .lc2-tail {
  transform-origin: 71.9px 33.6px;
  animation: lc2-tail-swish 2s ease-in-out infinite;
}

/* 玩耍 / 弹跳 */
.state-play .lc2-body {
  animation: lc2-hop 0.7s cubic-bezier(.5,0,.5,1) infinite;
}
.state-play .lc2-tail {
  transform-origin: 71.9px 33.6px;
  animation: lc2-tail-swish 0.3s ease-in-out infinite;
}
@keyframes lc2-hop {
  0%, 100% { transform: translateY(0); }
  40% { transform: translateY(-14px); }
  60% { transform: translateY(-14px); }
}

/* 吃东西：身体前倾、嘴动 */
.state-eat .lc2-body {
  transform: translateY(3px) rotate(-3deg);
}
.state-eat .lc2-mouth {
  animation: lc2-chew 0.4s ease-in-out infinite;
}
@keyframes lc2-chew {
  0%, 100% { transform: scaleY(1); }
  50% { transform: scaleY(0.5); }
}

/* 钻纸箱：身体变小、不动 */
.state-box .lc2-body {
  transform: scale(0.7) translateY(12px);
  transition: transform .8s ease;
}
.state-box .lc2-eyes { opacity: 0.4; }
.state-box .lc2-tail { opacity: 0.3; }

/* 疯跑：身体快速抖动 */
.state-zoom .lc2-body {
  animation: lc2-shake 0.18s ease-in-out infinite;
}
.state-zoom .lc2-tail {
  transform-origin: 71.9px 33.6px;
  transform: rotate(35deg);
}
@keyframes lc2-shake {
  0% { transform: translateX(-2px); }
  50% { transform: translateX(2px); }
  100% { transform: translateX(-2px); }
}

/* 被摸：身体微微拱起 */
.state-pet .lc2-body {
  transform: translateY(-3px) scaleY(1.04);
  transition: transform .2s ease;
}
.state-pet .lc2-tail {
  transform-origin: 71.9px 33.6px;
  transform: rotate(20deg);
}

/* §4.1 呼噜可视化（正向呼噜 25Hz → 节奏约 2.4 秒）
   触发条件：.lc2-purring（由 tick 在 SLEEP / PETTED 时挂上）
   三圈波纹错开 0.8 秒，从身体中心向外扩散并淡出。
   transform-origin 等于呼噜波纹圆心 (52.2, 38.3) —— SVG 内坐标系。 */
.lc2-purring .lc2-purr-r1,
.lc2-purring .lc2-purr-r2,
.lc2-purring .lc2-purr-r3 {
  transform-origin: 52.2px 38.3px;
  animation: lc2-purr-ring 2.4s ease-out infinite;
}
.lc2-purring .lc2-purr-r2 { animation-delay: 0.8s; }
.lc2-purring .lc2-purr-r3 { animation-delay: 1.6s; }
@keyframes lc2-purr-ring {
  0%   { transform: scale(0.4); opacity: 0; }
  20%  { opacity: 0.7; }
  60%  { opacity: 0.25; }
  100% { transform: scale(1.6); opacity: 0; }
}

/* 蹭人腿 HEADBUNT（§4.3）：身体侧倾贴过来 */
.state-bunt .lc2-body {
  transform: rotate(-8deg) translateY(2px);
  transform-origin: 50% 70%;
  animation: lc2-bunt-rub 1.4s ease-in-out infinite;
}
.state-bunt .lc2-tail {
  transform-origin: 71.9px 33.6px;
  transform: rotate(35deg);
  animation: lc2-tail-swish 1.8s ease-in-out infinite;
}
@keyframes lc2-bunt-rub {
  0%, 100% { transform: rotate(-8deg) translateY(2px); }
  50%      { transform: rotate(-4deg) translateX(3px) translateY(0deg); }
}

/* 呕吐毛球：身体前倾、腹部剧烈收缩抖动 */
.state-hack .lc2-body {
  animation: lc2-hack 0.45s ease-in-out infinite;
  transform-origin: 50% 70%;
}
.state-hack .lc2-tail {
  transform-origin: 71.9px 33.6px;
  transform: rotate(-15deg);
  animation: lc2-tail-swish 0.6s ease-in-out infinite;
}
@keyframes lc2-hack {
  0%, 100% { transform: translateY(0) scaleY(1); }
  30%      { transform: translateY(2px) scaleY(0.92); }   /* 腹部收缩 */
  60%      { transform: translateY(-2px) scaleY(1.06); }  /* 抬头 */
}

/* §4.4 踩奶：前爪节奏性推动，身体轻微起伏（由 state-knead pose 驱动）*/
.state-knead .lc2-body {
  transform-origin: 50% 80%;
  animation: lc2-knead-rub 0.85s ease-in-out infinite;
}
@keyframes lc2-knead-rub {
  0%, 100% { transform: translateY(0) scaleY(1); }
  50%      { transform: translateY(-3px) scaleY(0.97); }  /* 前爪推动节奏 */
}

/* 踩奶时呼噜加强：周期从 2.4s 缩到 1.2s（用 attribute 而非 class，
   因为 tick 脏检查会重写 className，但 attribute 不会被清掉）*/
.lc2-cat[data-purr-strong] .lc2-purr-ring {
  animation-duration: 1.2s !important;
}

/* §8.3 猫薄荷反应：身体翻滚 + 抖动（由 state-nip pose 驱动）*/
.state-nip .lc2-body {
  transform-origin: 50% 70%;
  animation: lc2-nip-roll 1.8s ease-in-out infinite;
}
.state-nip .lc2-tail {
  transform-origin: 86px 38px;
  animation: lc2-tail-swish 0.4s ease-in-out infinite;
}
@keyframes lc2-nip-roll {
  0%   { transform: rotate(0deg) translateY(0); }
  25%  { transform: rotate(180deg) translateY(-4px); }
  50%  { transform: rotate(360deg) translateY(0); }
  75%  { transform: rotate(540deg) translateY(-4px); }
  100% { transform: rotate(720deg) translateY(0); }
}

/* §8.4 激光追逐：全力冲刺，身体压低 */
.state-laser .lc2-body {
  transform: translateY(2px) scaleY(0.96);
  animation: lc2-laser-dash 0.3s ease-in-out infinite;
}
.state-laser .lc2-tail {
  transform-origin: 86px 38px;
  animation: lc2-tail-swish 0.25s ease-in-out infinite;
}
@keyframes lc2-laser-dash {
  0%, 100% { transform: translateY(2px) scaleY(0.96); }
  50%      { transform: translateY(0) scaleY(1.02); }
}

/* 困惑态：身体左右摇晃 */
.state-confused .lc2-body {
  transform-origin: 50% 80%;
  animation: lc2-confused 1.5s ease-in-out infinite;
}
@keyframes lc2-confused {
  0%, 100% { transform: rotate(0deg); }
  25%      { transform: rotate(-6deg); }
  75%      { transform: rotate(6deg); }
}

/* 激光点 DOM */
.lc2-laser-dot {
  position: fixed;
  width: 14px;
  height: 14px;
  border-radius: 50%;
  background: radial-gradient(circle, #ff2020 0%, #cc0000 60%, rgba(204,0,0,0.3) 100%);
  box-shadow: 0 0 12px #ff3030, 0 0 24px #ff0000;
  pointer-events: none;
  z-index: 99999;
  transform: translate(-50%, -50%);
  animation: lc2-laser-pulse 0.6s ease-in-out infinite;
}
@keyframes lc2-laser-pulse {
  0%, 100% { opacity: 0.85; transform: translate(-50%, -50%) scale(1); }
  50%      { opacity: 1;    transform: translate(-50%, -50%) scale(1.15); }
}

/* §4.2 缓慢眨眼彩蛋：眼睛压成线再回正 */
.lc2-blinking .lc2-eye-l,
.lc2-blinking .lc2-eye-r {
  animation: lc2-slow-blink 1.5s ease-in-out;
}
@keyframes lc2-slow-blink {
  0%   { transform: scaleY(1); }
  40%  { transform: scaleY(0.08); }   /* 压成线 */
  60%  { transform: scaleY(0.08); }   /* 保持 0.3 秒——真猫的缓慢眨眼 */
  100% { transform: scaleY(1); }
}
.lc2-blinking .lc2-pupil-l,
.lc2-blinking .lc2-pupil-r {
  animation: lc2-slow-blink-pupil 1.5s ease-in-out;
}
@keyframes lc2-slow-blink-pupil {
  0%, 100% { height: 6px; }
  40%, 60% { height: 0.5px; }
}

/* 钻纸箱时被戳：纸箱抖一下 */
.lc2-shake-once .lc2-body {
  animation: lc2-shake-once 0.4s ease-in-out;
}
@keyframes lc2-shake-once {
  0%, 100% { transform: scale(0.7) translateY(12px); }
  25%      { transform: scale(0.71) translateY(10px) rotate(-2deg); }
  75%      { transform: scale(0.71) translateY(10px) rotate(2deg); }
}

/* 配额耗尽：明显不悦（耳朵后压 + 尾巴用力甩） */
.lc2-annoyed .lc2-ear-l,
.lc2-annoyed .lc2-ear-r {
  transition: transform 0.2s ease;
  animation: lc2-ears-back 1.2s ease-in-out;
}
.lc2-annoyed .lc2-tail {
  transform-origin: 71.9px 33.6px;
  animation: lc2-tail-swish 0.25s ease-in-out infinite;
}
@keyframes lc2-ears-back {
  0%, 100% { transform: rotate(0deg); }
  20%, 80% { transform: rotate(-15deg) translateY(2px); }
}

/* ---------- 新增：伸懒腰 STRETCH ---------- */
/* 真实猫醒后招牌动作：前腿前伸、臀部翘起、背部长拉伸展。
   一次伸展持续约 2-3 秒，然后回到正常姿态。 */
.state-stretch .lc2-body {
  transform-origin: 50% 90%;
  animation: lc2-stretch 3.5s ease-out;
}
@keyframes lc2-stretch {
  0%   { transform: scaleY(1) scaleX(1) translateY(0); }
  25%  { transform: scaleY(1.18) scaleX(0.92) translateY(-6px); }  /* 背部拱起 */
  55%  { transform: scaleY(1.22) scaleX(0.88) translateY(-8px); }  /* 持续伸展顶点 */
  80%  { transform: scaleY(1.12) scaleX(0.94) translateY(-3px); }  /* 缓慢回落 */
  100% { transform: scaleY(1) scaleX(1) translateY(0); }
}
.state-stretch .lc2-tail {
  transform-origin: 71.9px 33.6px;
  transform: rotate(60deg);   /* 尾巴高高翘起 */
}
.state-stretch .lc2-mouth {
  animation: lc2-yawn-shape 3.5s ease-out;   /* 伸展时常伴随张嘴 */
}

/* ---------- 新增：打哈欠 YAWN ---------- */
/* 嘴张大露牙，持续约 2 秒。眼睛眯起。*/
.state-yawn .lc2-body {
  transform: translateY(0);
}
.state-yawn .lc2-mouth {
  transform-origin: center top;
  animation: lc2-yawn-shape 2.5s ease-in-out;
}
.state-yawn .lc2-eyes {
  animation: lc2-yawn-eyes 2.5s ease-in-out;
}
.state-yawn .lc2-tail {
  transform-origin: 71.9px 33.6px;
  animation: lc2-tail-swish 3s ease-in-out infinite;
}
@keyframes lc2-yawn-shape {
  0%, 100% { transform: scaleY(1); }
  40%      { transform: scaleY(2.5) translateY(-2px); }    /* 嘴张大 */
  60%      { transform: scaleY(2.5) translateY(-2px); }    /* 保持张嘴 */
}
@keyframes lc2-yawn-eyes {
  0%, 100% { opacity: 1; transform: scaleY(1); }
  40%, 60% { opacity: 0.4; transform: scaleY(0.25); }      /* 眼睛眯起 */
}

/* ---------- 新增：盯鼠标 STARE_MOUSE（pose=stalk）---------- */
/* 猫观察猎物的标志性动作：身体压低、瞳孔放大、几乎不动。
   与 ALERT 表情配合，让猫显得正在认真评估猎物。 */
.state-stalk .lc2-body {
  transform: scaleY(0.82) translateY(6px);   /* 身体压低贴近地面 */
  transform-origin: 50% 90%;
}
.state-stalk .lc2-pupil-l {
  transform: scaleY(1.4);                    /* 瞳孔放大（兴奋） */
  transform-origin: center;
}
.state-stalk .lc2-tail {
  transform-origin: 71.9px 33.6px;
  animation: lc2-stalk-tail 2.5s ease-in-out infinite;  /* 尾巴尖端微抖 */
}
@keyframes lc2-stalk-tail {
  0%, 100% { transform: rotate(5deg); }
  50%      { transform: rotate(-8deg); }
}

/* ---------- idle 微动作：自动眨眼 ---------- */
/* 每 3-8 秒一次的自然眨眼，独立于状态切换。
   比 slow-blink 快得多（220ms vs 1.5s），看起来更像无意识的生理动作。 */
.lc2-idle-blink .lc2-eye-l,
.lc2-idle-blink .lc2-eye-r {
  animation: lc2-idle-blink 220ms ease-in-out;
}
@keyframes lc2-idle-blink {
  0%   { transform: scaleY(1); }
  50%  { transform: scaleY(0.08); }
  100% { transform: scaleY(1); }
}
.lc2-idle-blink .lc2-pupil-l,
.lc2-idle-blink .lc2-pupil-r {
  animation: lc2-idle-blink-pupil 220ms ease-in-out;
}
@keyframes lc2-idle-blink-pupil {
  0%, 100% { height: 6.4px; }
  50%      { height: 0.5px; }
}

/* ---------- idle 微动作：耳朵抖动 ---------- */
/* 真实猫每 10-30 秒会独立抖动耳朵一次（排除异物 / 警觉反射）。
   600ms 的快速双抖，很有辨识度。 */
.lc2-idle-ear .lc2-ear-l,
.lc2-idle-ear .lc2-ear-r {
  animation: lc2-idle-ear 600ms ease-in-out;
}
@keyframes lc2-idle-ear {
  0%   { transform: rotate(0deg); }
  15%  { transform: rotate(-12deg); }
  30%  { transform: rotate(0deg); }
  45%  { transform: rotate(-8deg); }
  60%  { transform: rotate(0deg); }
  100% { transform: rotate(0deg); }
}

/* ---------- 气泡 ---------- */
.lc2-bubble {
  position: fixed;
  background: var(--ink, #1f2430);
  color: #fff;
  padding: 9px 14px;
  border-radius: 14px;
  font-size: 12.5px;
  line-height: 1.5;
  max-width: 260px;
  opacity: 0;
  transform: translate(-50%, -100%) scale(0.9);
  transition: opacity .25s ease, transform .25s cubic-bezier(.2,.9,.3,1.2);
  pointer-events: none;
  box-shadow: 0 8px 22px rgba(0,0,0,.18);
  z-index: 3;
  white-space: normal;
}
.lc2-bubble.show {
  opacity: 1;
  transform: translate(-50%, -110%) scale(1);
}

/* ---------- 状态标签 ---------- */
.lc2-label {
  position: fixed;
  font-size: 11px;
  color: var(--muted, #6b7280);
  background: rgba(255,255,255,.92);
  padding: 2px 8px;
  border-radius: 8px;
  pointer-events: none;
  white-space: nowrap;
  border: 1px solid var(--line, #e5e7eb);
  opacity: 0;
  transform: translate(-50%, 0);
  transition: opacity .3s ease;
  z-index: 3;
}
.lc2-wrap:hover .lc2-label { opacity: 1; }

/* ---------- 控制按钮 ---------- */
.lc2-ctrls {
  position: fixed;
  display: flex;
  gap: 4px;
  pointer-events: auto;
  opacity: 0;
  transform: scale(0.85);
  transform-origin: center;
  transition: opacity .2s ease, transform .2s cubic-bezier(.2,.9,.3,1.2);
  z-index: 4;
}
.lc2-wrap:hover .lc2-ctrls {
  opacity: 1;
  transform: scale(1);
}
.lc2-btn {
  width: 28px;
  height: 28px;
  border-radius: 50%;
  border: 1px solid var(--line, #e5e7eb);
  background: #fff;
  cursor: pointer;
  font-size: 14px;
  line-height: 1;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 0;
  transition: transform .15s ease, background .15s ease;
  box-shadow: 0 4px 10px rgba(0,0,0,.08);
}
.lc2-btn:hover { transform: scale(1.15); background: #f9fafb; }
.lc2-btn:active { transform: scale(0.9); }

/* ---------- 啃食内容 MUNCH ---------- */
/* 被猫啃掉的元素：灰度 + 半透明 + 上方挂一个啃咬痕迹标签 */
.lc2-munched {
  color: var(--faint, #9ca3af) !important;
  background: rgba(0,0,0,0.03) !important;
  filter: grayscale(1) opacity(0.5);
  position: relative;
  transition: filter .4s ease, opacity .4s ease, color .4s ease;
  pointer-events: none;
  user-select: none;
}
.lc2-munched img,
.lc2-munched svg {
  filter: grayscale(1) opacity(0.4) !important;
}
.lc2-munched::after {
  content: '🐾 已被猫啃食 · 恢复中…';
  position: absolute;
  top: -1.4em;
  left: 0;
  font-size: 10px;
  color: #92400e;
  background: #fef3c7;
  padding: 1px 8px;
  border-radius: 8px;
  white-space: nowrap;
  pointer-events: none;
  z-index: 9;
  font-family: -apple-system, sans-serif;
  font-weight: 600;
  letter-spacing: 0.02em;
  animation: lc2-munch-label-pop .3s ease;
}
@keyframes lc2-munch-label-pop {
  from { opacity: 0; transform: scale(0.7); }
  to   { opacity: 1; transform: scale(1); }
}

/* 啃食动作：猫趴在文字上啃 —— 身体压低前倾 + 嘴动 */
.state-munch .lc2-body {
  transform: translateY(6px) scaleY(0.88) rotate(-5deg);
  transform-origin: 50% 80%;
  animation: lc2-munch-chew 0.35s ease-in-out infinite;
}
@keyframes lc2-munch-chew {
  0%, 100% { transform: translateY(6px) scaleY(0.88) rotate(-5deg); }
  50%      { transform: translateY(4px) scaleY(0.82) rotate(-3deg); }
}
.state-munch .lc2-tail {
  transform-origin: 71.9px 33.6px;
  animation: lc2-tail-swish 0.6s ease-in-out infinite;
}

/* 飘落的「啃咬碎屑」粒子 */
.lc2-crumb {
  position: fixed;
  width: 4px; height: 4px;
  background: #92400e;
  border-radius: 1px;
  pointer-events: none;
  z-index: 9998;
  animation: lc2-crumb-fall 0.8s ease-out forwards;
}
@keyframes lc2-crumb-fall {
  0%   { opacity: 1; transform: translate(0, 0) rotate(0deg); }
  100% { opacity: 0; transform: translate(var(--dx, 20px), var(--dy, 40px)) rotate(180deg); }
}

/* ---------- 跨页面穿越指示器 ---------- */
.lc2-portal-hint {
  position: fixed;
  bottom: 10px;
  right: 12px;
  font-size: 10.5px;
  color: var(--faint, #9ca3af);
  background: rgba(255,255,255,0.85);
  padding: 3px 10px;
  border-radius: 8px;
  border: 1px solid var(--line, #e5e7eb);
  pointer-events: none;
  z-index: 9998;
  font-family: 'SF Mono', Consolas, monospace;
  opacity: 0;
  transition: opacity .3s ease;
}
.lc2-portal-hint.show { opacity: 1; }

/* ---------- §15 Token 老鼠 v2 ---------- */
.lc2-mouse {
  position: fixed;
  width: 96px;
  height: 64px;
  pointer-events: auto;          /* 可点击交互彩蛋 */
  cursor: pointer;
  z-index: 9998;
  transition: opacity .4s ease, transform .18s cubic-bezier(.34,1.56,.64,1);
  filter: drop-shadow(0 4px 10px rgba(212, 160, 23, 0.35));
  animation: lc2-mouse-bounce 0.28s ease-in-out infinite;
}
.lc2-mouse:hover {
  filter: drop-shadow(0 4px 14px rgba(255, 215, 0, 0.7));
  transform: scale(1.08);
}
.lc2-mouse.lc2-mouse-caught-by-user {
  animation: lc2-mouse-user-catch 0.7s cubic-bezier(.36, .07, .19, .97) forwards;
  pointer-events: none;
}
@keyframes lc2-mouse-user-catch {
  0%   { transform: scale(1) rotate(0deg); opacity: 1; }
  35%  { transform: scale(1.4) rotate(15deg); opacity: 1; filter: brightness(1.8) drop-shadow(0 0 24px #fff8dc); }
  100% { transform: scale(0.2) rotate(540deg) translateY(-40px); opacity: 0; }
}
.lc2-mouse-hint {
  position: fixed;
  pointer-events: none;
  z-index: 9997;
  padding: 4px 10px;
  font: 11px/1.4 -apple-system, "PingFang SC", "Microsoft YaHei", sans-serif;
  color: #8b6914;
  background: rgba(255, 248, 220, 0.92);
  border: 1px solid rgba(255, 215, 0, 0.5);
  border-radius: 8px;
  white-space: nowrap;
  opacity: 0;
  transition: opacity .25s ease;
}
.lc2-mouse-hint.show { opacity: 1; }
@keyframes lc2-mouse-bounce {
  0%, 100% { transform: translateY(0); }
  50%      { transform: translateY(-4px); }
}
.lc2-mouse-body { width: 100%; height: 100%; display: block; overflow: visible; }

/* 尾巴摆动 */
.lc2-mouse-tail {
  animation: lc2-mouse-tail-wag 0.35s ease-in-out infinite;
  transform-origin: 96px 42px;
}
@keyframes lc2-mouse-tail-wag {
  0%, 100% { transform: rotate(0deg); }
  50%      { transform: rotate(18deg); }
}

/* 外圈发光脉冲 */
.lc2-mouse-glow-outer {
  animation: lc2-mouse-glow-pulse 1.8s ease-in-out infinite;
}
@keyframes lc2-mouse-glow-pulse {
  0%, 100% { opacity: 0.12; }
  50%      { opacity: 0.4; }
}

/* Token 金币内圈脉冲 */
.lc2-mouse-glow:not(.lc2-mouse-glow-outer) {
  animation: lc2-mouse-token-pulse 2.2s ease-in-out infinite;
}
@keyframes lc2-mouse-token-pulse {
  0%, 100% { opacity: 0.3; }
  50%      { opacity: 0.7; }
}

/* 「T」字符微闪 */
.lc2-mouse-token-T {
  animation: lc2-mouse-token-shimmer 3s ease-in-out infinite;
}
@keyframes lc2-mouse-token-shimmer {
  0%, 100% { fill: #8b6914; }
  50%      { fill: #5c4709; }
}

/* Token 掉落粒子（金色金币） */
.lc2-token-particle {
  position: fixed;
  width: 12px;
  height: 12px;
  background: radial-gradient(circle, #ffd700 0%, #daa520 60%, #8b6914 100%);
  border-radius: 50%;
  pointer-events: none;
  z-index: 9999;
  box-shadow: 0 0 8px #ffd700, 0 0 16px rgba(255,215,0,0.6);
  animation: lc2-token-fly 1.4s ease-out forwards;
}
@keyframes lc2-token-fly {
  0%   { opacity: 1; transform: translate(0, 0) scale(1) rotate(0deg); }
  100% { opacity: 0; transform: translate(var(--dx, 0), var(--dy, 0)) scale(0.3) rotate(var(--rot, 360deg)); }
}

/* ---------- 移动端适配 ---------- */
@media (max-width: 600px) {
  .lc2-cat { width: 80px; height: 56px; }
  .lc2-bubble { font-size: 11.5px; max-width: 220px; }
  .lc2-ctrls { opacity: 1; transform: scale(1); }
}

/* ---------- prefers-reduced-motion ---------- */
@media (prefers-reduced-motion: reduce) {
  .lc2-cat, .lc2-body, .lc2-tail, .lc2-leg, .lc2-mouth,
  .lc2-eye-l, .lc2-eye-r, .lc2-pupil-l, .lc2-pupil-r,
  .lc2-ear-l, .lc2-ear-r,
  .state-sleep .lc2-body, .state-walk .lc2-front-leg,
  .state-walk .lc2-front-leg2, .state-walk .lc2-back-leg,
  .state-walk .lc2-back-leg2, .state-run .lc2-front-leg,
  .state-run .lc2-front-leg2, .state-run .lc2-back-leg,
  .state-run .lc2-back-leg2, .state-play .lc2-body,
  .state-zoom .lc2-body, .state-eat .lc2-mouth,
  .state-hack .lc2-body, .state-hack .lc2-tail,
  .lc2-blinking .lc2-eye-l, .lc2-blinking .lc2-eye-r,
  .lc2-blinking .lc2-pupil-l, .lc2-blinking .lc2-pupil-r,
  .lc2-shake-once .lc2-body,
  .lc2-annoyed .lc2-ear-l, .lc2-annoyed .lc2-ear-r,
  .lc2-annoyed .lc2-tail,
  .lc2-purring .lc2-purr-r1, .lc2-purring .lc2-purr-r2,
  .lc2-purring .lc2-purr-r3, .state-bunt .lc2-body,
  .state-bunt .lc2-tail,
  .state-knead .lc2-body,
  .lc2-cat[data-purr-strong] .lc2-purr-ring,
  .state-nip .lc2-body, .state-nip .lc2-tail,
  .state-laser .lc2-body, .state-laser .lc2-tail,
  .state-confused .lc2-body,
  .state-stretch .lc2-body, .state-stretch .lc2-tail, .state-stretch .lc2-mouth,
  .state-yawn .lc2-mouth, .state-yawn .lc2-eyes, .state-yawn .lc2-tail,
  .state-stalk .lc2-body, .state-stalk .lc2-pupil-l, .state-stalk .lc2-tail,
  .state-munch .lc2-body, .state-munch .lc2-tail,
  .lc2-idle-blink .lc2-eye-l, .lc2-idle-blink .lc2-eye-r,
  .lc2-idle-blink .lc2-pupil-l, .lc2-idle-blink .lc2-pupil-r,
  .lc2-idle-ear .lc2-ear-l, .lc2-idle-ear .lc2-ear-r,
  .lc2-laser-dot {
    animation: none !important;
    transition: none !important;
  }
}
