[data-pet-id],
[data-hold-action],
[data-swipe-action],
[data-drag-action] {
  -webkit-tap-highlight-color: transparent;
}

[data-pet-id]:focus-visible,
[data-hold-action]:focus-visible,
[data-swipe-action]:focus-visible,
[data-drag-action]:focus-visible {
  outline: 3px solid rgb(255 218 151 / 88%);
  outline-offset: 4px;
}

.encounter-zone,
.cat-stage {
  border-radius: 28px;
  cursor: grab;
}

.encounter-zone {
  position: relative;
}

.encounter-zone:active,
.cat-stage:active {
  cursor: grabbing;
}

.interaction-tip {
  margin: 8px 0 0;
  padding: 9px 12px;
  border-radius: 14px;
  background: rgb(255 255 255 / 52%);
  color: var(--ink-soft);
  font-size: var(--text-sm);
  line-height: var(--line-normal);
  text-align: center;
}

.scene-prop {
  display: flex;
  width: 100%;
  min-height: 76px;
  align-items: center;
  justify-content: center;
  gap: 12px;
  margin-top: 5px;
  border: 0;
  background: transparent;
  color: var(--ink);
  cursor: pointer;
}

.scene-prop img {
  width: 92px;
  height: 66px;
  object-fit: contain;
  filter: drop-shadow(0 8px 8px rgb(73 47 40 / 18%));
  transition: transform 180ms var(--ease);
}

.scene-prop span {
  display: grid;
  gap: 3px;
  text-align: left;
}

.scene-prop b { font-size: 14px; }
.scene-prop small { color: var(--rose-ink); font-size: var(--text-xs); font-weight: 800; }
.scene-prop:active img { transform: translateY(3px) rotate(-2deg); }

.hold-lamp {
  --hold-progress: 0;
  position: relative;
  display: grid;
  width: 184px;
  min-height: 216px;
  place-items: center;
  align-content: center;
  gap: 1px;
  border: 0;
  background: transparent;
  color: #fff8e8;
  cursor: pointer;
  touch-action: none;
  text-shadow: 0 3px 12px rgb(54 35 39 / 70%);
}

.hold-lamp::before {
  position: absolute;
  top: 10px;
  left: 14px;
  width: 156px;
  height: 156px;
  border-radius: 50%;
  background: conic-gradient(#ffd990 calc(var(--hold-progress) * 1turn), rgb(255 255 255 / 18%) 0);
  content: "";
  filter: drop-shadow(0 0 18px rgb(255 196 113 / 48%));
  -webkit-mask: radial-gradient(farthest-side, transparent calc(100% - 7px), #000 0);
  mask: radial-gradient(farthest-side, transparent calc(100% - 7px), #000 0);
}

.hold-lamp img {
  position: relative;
  z-index: 2;
  width: 126px;
  height: 150px;
  object-fit: contain;
  filter: drop-shadow(0 0 22px rgb(255 196 111 / 58%));
}

.hold-lamp span,
.hold-lamp small {
  position: relative;
  z-index: 2;
}

.hold-lamp span { font-size: 15px; font-weight: 900; }
.hold-lamp small { color: #f6ddc1; font-size: var(--text-xs); }
.hold-lamp.is-holding img { animation: lamp-breathe 700ms ease-in-out infinite alternate; }

.swipe-reveal {
  --swipe-progress: 0;
  --swipe-x: 0px;
  position: relative;
  display: grid;
  width: 100%;
  min-height: 106px;
  grid-template-columns: 108px 1fr 30px;
  align-items: center;
  gap: 8px;
  overflow: hidden;
  padding: 8px 16px 8px 4px;
  border: 1px solid rgb(255 255 255 / 55%);
  border-radius: 28px;
  background: linear-gradient(145deg, rgb(255 250 240 / 92%), rgb(235 211 191 / 82%));
  color: var(--ink);
  cursor: ew-resize;
  text-align: left;
  touch-action: none;
  box-shadow: 0 15px 34px rgb(48 31 39 / 22%);
}

.swipe-reveal::after {
  position: absolute;
  right: 0;
  bottom: 0;
  left: 0;
  height: 5px;
  transform: scaleX(var(--swipe-progress));
  transform-origin: left;
  background: linear-gradient(90deg, var(--honey), var(--rose));
  content: "";
}

.swipe-reveal img {
  width: 108px;
  height: 90px;
  transform: translateX(var(--swipe-x)) rotate(calc(var(--swipe-progress) * 7deg));
  object-fit: contain;
  filter: drop-shadow(0 7px 8px rgb(74 50 40 / 20%));
  transition: transform 120ms ease-out;
}

.swipe-reveal span { display: grid; gap: 4px; }
.swipe-reveal b { font-size: var(--text-sm); }
.swipe-reveal small { color: var(--rose-ink); font-size: var(--text-xs); font-weight: 800; }
.swipe-reveal > i { color: var(--rose-dark); font-size: 30px; font-style: normal; animation: swipe-arrow 1.4s ease-in-out infinite; }

.care-shelf {
  color: var(--ink);
}

.care-shelf > summary {
  display: flex;
  width: max-content;
  min-width: 82px;
  min-height: 38px;
  align-items: center;
  justify-content: center;
  gap: 8px;
  padding: 7px 12px;
  border: 1px solid rgb(255 255 255 / 64%);
  border-radius: 999px;
  background: rgb(255 249 240 / 90%);
  box-shadow: 0 8px 20px rgb(72 47 40 / 14%);
  color: var(--ink);
  cursor: pointer;
  font-size: var(--text-xs);
  font-weight: 900;
  list-style: none;
}
.care-shelf > summary::-webkit-details-marker { display: none; }
.care-shelf > summary::before { color: var(--rose-ink); content: "✦"; font-size: 12px; }
.care-shelf > summary::after { color: var(--ink-soft); content: "+"; font-size: 16px; line-height: 1; }
.care-shelf > summary b {
  display: grid;
  min-width: 18px;
  height: 18px;
  place-items: center;
  border-radius: 999px;
  background: #f0ded4;
  color: var(--rose-ink);
  font-size: 10px;
}
.care-shelf[open] > summary::after { content: "−"; }
.care-shelf > summary:focus-visible { outline: 3px solid rgb(231 183 104 / 56%); outline-offset: 3px; }

.care-shelf__tray {
  position: absolute;
  top: calc(100% + 8px);
  left: 0;
  display: grid;
  width: 168px;
  max-height: 286px;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 6px;
  overflow: auto;
  padding: 12px 10px;
  border: 1px solid rgb(255 255 255 / 62%);
  border-radius: 18px;
  background: rgb(255 249 240 / 94%);
  box-shadow: 0 16px 34px rgb(72 47 40 / 18%);
  backdrop-filter: blur(14px);
  scrollbar-width: thin;
}
.care-shelf:not([open]) > .care-shelf__tray { display: none; }
.care-shelf__tray .care-prop { align-content: center; }
.care-shelf__tray .care-prop__label { display: none; }

.care-prop {
  --drag-x: 0px;
  --drag-y: 0px;
  position: relative;
  z-index: 4;
  display: grid;
  min-width: 0;
  min-height: 72px;
  place-items: center;
  align-content: end;
  gap: 1px;
  padding: 2px;
  transform: translate3d(var(--drag-x), var(--drag-y), 0);
  border: 0;
  background: transparent;
  color: var(--ink-soft);
  cursor: grab;
  touch-action: none;
}

.care-prop img {
  width: 62px;
  height: 52px;
  object-fit: contain;
  filter: drop-shadow(0 6px 5px rgb(78 52 43 / 18%));
}

.care-prop span,
.care-prop b,
.care-prop__label {
  display: block;
  overflow: visible;
  max-width: 100%;
  font-size: var(--text-xs);
  font-weight: 800;
  line-height: var(--line-tight);
  text-overflow: clip;
  white-space: normal;
}

.care-prop__label {
  padding: 2px 7px;
  border-radius: 999px;
  background: rgb(255 250 242 / 84%);
  box-shadow: 0 3px 9px rgb(78 52 43 / 10%);
  color: var(--ink);
}

.care-prop[aria-pressed="true"],
.newborn-care-prop[aria-pressed="true"],
[data-tool-id][aria-pressed="true"] {
  border: 1px solid rgb(146 80 78 / 60%);
  border-radius: var(--radius-md);
  background: rgb(255 244 235 / 92%);
  box-shadow: 0 0 0 4px rgb(217 138 134 / 18%), 0 12px 26px rgb(78 52 43 / 16%);
  color: var(--rose-ink);
}

.care-prop.is-dragging {
  z-index: 70;
  transform: translate3d(var(--drag-x), var(--drag-y), 0) scale(1.2) rotate(-3deg);
  cursor: grabbing;
}

.cat-stage {
  transition: box-shadow 180ms ease, background 180ms ease;
}

.cat-stage.is-drop-ready {
  background: radial-gradient(circle at 50% 58%, rgb(255 231 173 / 46%), transparent 58%);
  box-shadow: inset 0 0 0 3px rgb(242 185 102 / 55%);
}

.clean-spot {
  pointer-events: none;
  position: absolute;
  z-index: 5;
  right: 6px;
  bottom: 18px;
  display: grid;
  width: 72px;
  min-height: 58px;
  grid-template-columns: repeat(3, 10px);
  place-content: center;
  gap: 4px;
  border: 1px dashed rgb(149 104 78 / 34%);
  border-radius: 18px;
  background: rgb(255 247 224 / 76%);
  box-shadow: 0 8px 20px rgb(76 50 38 / 12%);
  transition: transform 160ms ease, box-shadow 160ms ease;
}

.clean-spot i {
  width: 9px;
  height: 9px;
  border-radius: 50%;
  background: #9a6648;
  box-shadow: inset 0 2px 2px rgb(255 255 255 / 18%);
}

.clean-spot b {
  grid-column: 1 / -1;
  color: #8b5a43;
  font-size: var(--text-xs);
  text-align: center;
}

.clean-spot.is-drop-ready {
  transform: scale(1.08);
  box-shadow: 0 0 0 4px rgb(255 218 141 / 46%), 0 10px 24px rgb(76 50 38 / 18%);
}

.trait-swipe {
  --swipe-progress: 0;
  --swipe-x: 0px;
  position: relative;
  display: grid;
  width: min(78%, 280px);
  place-items: center;
  padding: 12px;
  color: var(--ink);
  cursor: ew-resize;
  text-align: center;
  touch-action: none;
}

.trait-swipe::after {
  pointer-events: none;
  position: absolute;
  z-index: 2;
  inset: 0;
  transform: translateX(calc(var(--swipe-progress) * 108%));
  border-radius: inherit;
  background: linear-gradient(120deg, rgb(92 78 106 / 86%), rgb(238 192 151 / 70%));
  content: "";
  transition: transform 110ms ease-out;
}

.trait-swipe img {
  position: relative;
  z-index: 1;
  width: 100%;
  height: 154px;
  object-fit: contain;
}

.trait-name,
.trait-copy,
.swipe-caption {
  position: relative;
  z-index: 3;
  display: block;
}

.trait-name { margin-top: 6px; font-size: var(--text-md); font-weight: 900; }
.trait-copy { margin-top: 4px; color: var(--ink-soft); font-size: var(--text-xs); }
.swipe-caption { margin-top: 9px; color: #fff8ea; font-size: var(--text-xs); font-weight: 850; text-shadow: 0 2px 8px rgb(52 38 56 / 60%); }
.swipe-caption i { margin-left: 5px; font-size: 20px; font-style: normal; }

.tool-cursor {
  --tool-contact-x: 50%;
  --tool-contact-y: 50%;
  --tool-rotation: 0deg;
  pointer-events: none;
  position: absolute;
  z-index: 120;
  top: 0;
  left: 0;
  width: 68px;
  height: 68px;
  transform: translate3d(var(--tool-x, -120px), var(--tool-y, -120px), 0) translate(calc(0% - var(--tool-contact-x)), calc(0% - var(--tool-contact-y)));
  transform-origin: var(--tool-contact-x) var(--tool-contact-y);
  opacity: 0;
  filter: drop-shadow(0 10px 10px rgb(74 45 37 / 28%));
  transition: opacity 100ms ease;
  will-change: transform;
}
.tool-cursor img {
  width: 100%;
  height: 100%;
  transform: rotate(var(--tool-rotation));
  transform-origin: var(--tool-contact-x) var(--tool-contact-y);
  object-fit: contain;
}
body.is-tool-armed .tool-cursor,
.game-shell.is-tool-armed .tool-cursor,
.tool-cursor.is-visible { opacity: 1; }

.cat-actor,
.cat-performer { position: relative; display: grid; place-items: end center; transform-origin: 50% 88%; }
.cat-actor { padding: 0; border: 0; background: transparent; color: inherit; cursor: grab; touch-action: none; transition: transform 1.3s cubic-bezier(.2, .76, .2, 1); --cat-color-tone: brightness(1); --room-walk-cycle-ms: 840ms; --room-walk-ms: calc(var(--room-walk-cycle-ms) * 2); --pose-crossfade-ms: 260ms; }
.cat-actor[data-cat-breed="white"][data-cat-stage="day20"] { --cat-color-tone: contrast(1.12) brightness(.84) sepia(.14) saturate(.88); }
.cat-actor:focus-visible { outline: 0; }
.cat-actor:focus-visible .cat-sprite { filter: var(--cat-color-tone) drop-shadow(0 0 10px rgb(255 218 151 / 88%)) drop-shadow(0 18px 18px rgb(71 46 37 / 22%)); }
.cat-actor[data-action="select-kitten"] { cursor: pointer; }
.cat-stage > .cat-actor:not(.cat-actor--nursing) { z-index: 2; align-self: end; justify-self: center; }
/* Intrinsic sprite height must not push the paws below the actor's ground contact. */
.cat-actor > .cat-performer { min-width: 0; min-height: 0; width: 100%; height: 100%; }
.cat-actor .cat-sprite,
.cat-actor .cat-action-sprite,
.cat-actor .cat-eyelid-sprite { min-width: 0; min-height: 0; object-fit: contain; transform-origin: 50% 88%; filter: var(--cat-color-tone) drop-shadow(0 18px 18px rgb(71 46 37 / 22%)); transition: opacity var(--pose-crossfade-ms) cubic-bezier(.22, .72, .2, 1); user-select: none; -webkit-user-drag: none; }
.cat-actor .cat-sprite { position: relative; z-index: 1; opacity: 1; animation: breathe var(--cat-cadence, 7s) ease-in-out infinite; }
.cat-actor .cat-sprite { width: 100%; height: 100%; }
.cat-eyelid-sprite {
  pointer-events: none;
  position: absolute;
  z-index: 2;
  inset: 0;
  width: 100%;
  height: 100%;
  opacity: 0;
  animation:
    breathe var(--cat-cadence, 7s) ease-in-out infinite,
    cat-idle-eyelid var(--cat-blink-period, 6.4s) linear var(--cat-blink-delay, 1.2s) infinite;
}
.cat-performer.is-action-pose .cat-eyelid-sprite,
.cat-performer.is-roaming .cat-eyelid-sprite,
.cat-performer.is-watching .cat-eyelid-sprite,
.cat-actor.is-pet-gesture .cat-eyelid-sprite { visibility: hidden; animation-play-state: paused; }
.cat-action-sprite { pointer-events: none; position: absolute; z-index: 1; bottom: 0; left: 50%; width: auto; max-width: none; height: 100%; translate: -50% 0; opacity: 0; }
.cat-performer.is-action-pose .cat-sprite { opacity: 0; }
.cat-action-sprite.is-visible { opacity: 1; }
.cat-performer.is-action-entering:not([data-action-pose="crawl"]):not([data-action-pose="pounce"]) .cat-sprite { animation: cat-action-base-rise var(--pose-crossfade-ms) ease both; }
.cat-performer.is-action-entering:not([data-action-pose="crawl"]):not([data-action-pose="pounce"]) .cat-action-sprite.is-visible { animation: cat-action-pose-rise var(--pose-crossfade-ms) ease both; }
.cat-performer.is-action-settling .cat-sprite { animation: cat-action-base-settle var(--pose-crossfade-ms) ease both; }
.cat-performer.is-action-settling .cat-action-sprite.is-visible { animation: cat-action-pose-settle var(--pose-crossfade-ms) ease both; }
.cat-performer.is-action-pose:not(.is-action-entering) .cat-action-sprite.is-visible { animation: cat-action-pose-hold 2.8s ease-in-out infinite; }
:where(.cat-actor[data-cat-stage="day20"]) > .cat-performer { animation: kitten-idle-day20 3.8s ease-in-out var(--cat-motion-delay, 0ms) infinite; }
:where(.cat-actor[data-cat-stage="month2"]) > .cat-performer { animation: kitten-idle-month2 4.2s ease-in-out var(--cat-motion-delay, 0ms) infinite; }
:where(.cat-actor[data-cat-stage="month3"]) > .cat-performer { animation: kitten-idle-month3 4.6s ease-in-out var(--cat-motion-delay, 0ms) infinite; }
:where(.cat-actor[data-cat-stage="month6"]) > .cat-performer { animation: kitten-idle-month6 5s ease-in-out var(--cat-motion-delay, 0ms) infinite; }
.cat-ground-contact {
  pointer-events: none;
  position: absolute;
  z-index: 0;
  bottom: 1%;
  left: 50%;
  width: 62%;
  height: 8%;
  transform: translateX(-50%);
  border-radius: 50%;
  background: radial-gradient(ellipse, rgb(70 44 30 / 34%) 0 34%, rgb(70 44 30 / 14%) 56%, transparent 76%);
  filter: blur(5px);
  opacity: .82;
}
.cat-actor[data-cat-stage="day20"] .cat-ground-contact { bottom: 4%; width: 78%; height: 9%; }
.cat-actor:has(> .cat-performer.is-roaming) > .cat-ground-contact { width: 48%; opacity: .68; animation: cat-contact-walk var(--room-walk-cycle-ms) linear var(--cat-motion-delay, 0ms) infinite; }
.cat-actor:has(> .cat-performer.is-lifted) > .cat-ground-contact { opacity: .28; }
.cat-room-walk-sprite {
  pointer-events: none;
  position: absolute;
  z-index: 2;
  bottom: 2%;
  left: 50%;
  width: auto;
  height: 96%;
  aspect-ratio: 5 / 3;
  translate: -50% 0;
  background-image: url("../assets/cats/actions/room-walk-v4.png");
  background-repeat: no-repeat;
  background-size: 400% 500%;
  opacity: 0;
  visibility: hidden;
  filter: drop-shadow(0 16px 14px rgb(71 46 37 / 20%));
}
.cat-actor[data-cat-breed="lihua"] .cat-room-walk-sprite { background-position-y: 0%; }
.cat-actor[data-cat-breed="calico"] .cat-room-walk-sprite { background-position-y: 25%; }
.cat-actor[data-cat-breed="black"] .cat-room-walk-sprite { background-position-y: 50%; }
.cat-actor[data-cat-breed="white"] .cat-room-walk-sprite { background-position-y: 75%; }
.cat-actor[data-cat-breed="orange"] .cat-room-walk-sprite { background-position-y: 100%; }
.cat-performer.is-roaming > .cat-sprite,
.cat-performer.is-roaming > .cat-action-sprite,
.cat-performer.is-roaming > .cat-eyelid-sprite,
.cat-performer.is-roaming > .cat-motion-cycle-sprite {
  opacity: 0;
  visibility: hidden;
  transition: none;
  animation: none;
}
.cat-actor .cat-performer.is-roaming { animation: cat-room-walk-body var(--room-walk-cycle-ms) linear var(--cat-motion-delay, 0ms) infinite; }
.cat-performer.is-roaming > .cat-room-walk-sprite { visibility: visible; opacity: 1; animation: cat-room-walk-frames var(--room-walk-cycle-ms) steps(1, end) var(--cat-motion-delay, 0ms) infinite; }
.cat-actor[data-roam-direction="left"] .cat-room-walk-sprite { transform: scaleX(-1); }
.cat-motion-cycle-sprite {
  pointer-events: none;
  position: absolute;
  z-index: 2;
  bottom: 2%;
  left: 50%;
  width: auto;
  height: 96%;
  aspect-ratio: 5 / 3;
  translate: -50% 0;
  background-repeat: no-repeat;
  background-size: 400% 500%;
  opacity: 0;
  filter: drop-shadow(0 16px 14px rgb(71 46 37 / 20%));
  transition: opacity var(--pose-crossfade-ms) ease;
}
.cat-crawl-cycle-sprite,
.cat-pounce-cycle-sprite { visibility: hidden; animation: none; }
.cat-crawl-cycle-sprite { background-image: url("../assets/cats/actions/crawl-cycle-v1.png"); }
.cat-pounce-cycle-sprite { background-image: url("../assets/cats/actions/pounce-cycle-v1.png"); }
.cat-actor[data-cat-breed="lihua"] .cat-motion-cycle-sprite { background-position-y: 0%; }
.cat-actor[data-cat-breed="calico"] .cat-motion-cycle-sprite { background-position-y: 25%; }
.cat-actor[data-cat-breed="black"] .cat-motion-cycle-sprite { background-position-y: 50%; }
.cat-actor[data-cat-breed="white"] .cat-motion-cycle-sprite { background-position-y: 75%; }
.cat-actor[data-cat-breed="orange"] .cat-motion-cycle-sprite { background-position-y: 100%; }
.cat-performer[data-action-pose="crawl"] .cat-action-sprite[data-action-pose-id="crawl"],
.cat-performer[data-action-pose="pounce"] .cat-action-sprite[data-action-pose-id="pounce"] { opacity: 0; visibility: hidden; }
.cat-performer.is-action-pose[data-action-pose="crawl"] > .cat-sprite,
.cat-performer.is-action-pose[data-action-pose="pounce"] > .cat-sprite,
.cat-performer.is-action-entering[data-action-pose="crawl"] > .cat-sprite,
.cat-performer.is-action-entering[data-action-pose="pounce"] > .cat-sprite {
  opacity: 0;
  visibility: hidden;
  transition: none;
  animation: none;
}
.cat-performer[data-action-pose="crawl"] .cat-crawl-cycle-sprite { visibility: visible; opacity: 1; animation: cat-crawl-cycle-frames 3.6s steps(1, end) both; }
.cat-performer[data-action-pose="pounce"] .cat-pounce-cycle-sprite { visibility: visible; opacity: 1; animation: cat-pounce-cycle-frames 3.6s steps(1, end) both; }
.cat-performer.is-action-settling .cat-crawl-cycle-sprite,
.cat-performer.is-action-settling .cat-pounce-cycle-sprite { opacity: 0; visibility: hidden; animation: none; }
.cat-performer.is-pouncing[data-action-pose="pounce"] .cat-pounce-cycle-sprite { animation-duration: 1.65s; }
.cat-performer.is-wand-playing[data-action-pose="pounce"] .cat-pounce-cycle-sprite { animation-duration: 2.05s; }
.cat-performer.is-laser-chasing[data-action-pose="pounce"] .cat-pounce-cycle-sprite { animation-duration: 2.25s; }
.cat-actor[data-cat-stage="adult1y"][data-ambient-action="room-patrol"] .cat-pounce-cycle-sprite { opacity: 0; visibility: hidden; animation: none; }
.cat-actor[data-cat-stage="adult1y"][data-ambient-action="room-patrol"] .cat-sprite { opacity: 0; visibility: hidden; transition: none; animation: none; }
.cat-actor[data-cat-stage="adult1y"][data-ambient-action="room-patrol"] .cat-room-walk-sprite { visibility: visible; opacity: 1; animation: cat-room-walk-frames var(--room-walk-cycle-ms) steps(1, end) var(--cat-motion-delay, 0ms) infinite; }
.core-growth-cat[data-roam-space="window"] { transform: translateX(-50%) translate3d(-36px, -12px, 0) scale(.96); }
.core-growth-cat[data-roam-space="rest"] { transform: translateX(-50%) translate3d(0, 16px, 0) scale(.98); }
.core-growth-cat[data-roam-space="table"] { transform: translateX(-50%) translate3d(36px, -8px, 0) scale(.97); }
.cat-stage > .cat-actor[data-ambient-pose="table-swat"] { z-index: 4; transform: translate3d(min(10vw, 100px), -14%, 0) scale(.94); }
.room-decor-slot--tabletop.is-cat-swatted .room-decor { transform-origin: 72% 100%; animation: decor-cat-swat 1.35s cubic-bezier(.2, .74, .28, 1) both; }
.room-decor-slot--tabletop.is-cat-swatted .room-decor-contact { animation: decor-contact-swat 1.35s ease both; }
.cat-body-zones {
  pointer-events: none;
  position: absolute;
  z-index: 4;
  top: var(--pet-model-top, 0);
  left: var(--pet-model-left, 0);
  width: var(--pet-model-width, 0);
  height: var(--pet-model-height, 0);
}
.cat-body-zone {
  position: absolute;
  top: var(--body-y);
  left: var(--body-x);
  width: var(--body-width);
  height: var(--body-height);
  transform: translate(-50%, -50%);
  border: 1px solid rgb(255 244 193 / 70%);
  border-radius: 50%;
  background: radial-gradient(circle, rgb(255 225 149 / 28%), transparent 70%);
  box-shadow: 0 0 0 0 rgb(255 221 137 / 0%);
  opacity: 0;
  transition: opacity 120ms ease, box-shadow 120ms ease;
}
.cat-body-zone::after {
  position: absolute;
  top: -18px;
  left: 50%;
  padding: 3px 7px;
  transform: translateX(-50%);
  border-radius: 999px;
  background: rgb(74 57 51 / 84%);
  color: #fff9e9;
  content: attr(data-body-label);
  font-size: 10px;
  font-style: normal;
  font-weight: 900;
  white-space: nowrap;
  opacity: 0;
}
.cat-body-zone--back,
.cat-body-zone--paw,
.cat-body-zone--tail { border-radius: 44%; }
.cat-claw-overgrowth {
  pointer-events: none;
  position: absolute;
  z-index: 3;
  top: var(--body-y);
  left: var(--body-x);
  width: var(--body-width);
  height: var(--body-height);
  transform: translate(-50%, -50%);
  border-radius: 44%;
  background: radial-gradient(ellipse at 48% 76%, rgb(255 223 159 / 26%), transparent 54%);
  filter: drop-shadow(0 2px 2px rgb(91 57 43 / 28%));
}
.cat-claw-overgrowth > i {
  position: absolute;
  bottom: 1%;
  width: clamp(6px, 11%, 9px);
  height: 46%;
  transform: rotate(9deg);
  border-radius: 48% 82% 72% 42%;
  background: linear-gradient(140deg, #fffdf0 18%, #f3d39a 72%, #c9875d 100%);
  clip-path: polygon(12% 0, 100% 10%, 58% 100%, 0 66%);
  content: "";
  filter: drop-shadow(0 1px 0 rgb(111 69 53 / 78%)) drop-shadow(0 2px 2px rgb(82 51 40 / 24%));
}
.cat-claw-overgrowth > i:nth-child(1) { left: 24%; height: 38%; transform: rotate(15deg); }
.cat-claw-overgrowth > i:nth-child(2) { left: 46%; }
.cat-claw-overgrowth > i:nth-child(3) { left: 68%; height: 40%; transform: rotate(3deg); }
.is-body-zone-debug .cat-body-zone { opacity: .16; }
.is-body-zone-debug .cat-body-zone::after { opacity: 1; }
.is-body-zone-debug .cat-actor[data-pet-part="head"] .cat-body-zone--head,
.is-body-zone-debug .cat-actor[data-pet-part="chin"] .cat-body-zone--chin,
.is-body-zone-debug .cat-actor[data-pet-part="back"] .cat-body-zone--back,
.is-body-zone-debug .cat-actor[data-pet-part="paw"] .cat-body-zone--paw,
.is-body-zone-debug .cat-actor[data-pet-part="tail"] .cat-body-zone--tail { z-index: 1; box-shadow: 0 0 18px 5px rgb(255 221 137 / 50%); opacity: .92; }
.scene-affordance { padding: 0; border: 0; background: transparent; }
.cat-performer,
.cat-sprite,
[data-cat-actor] { transform-origin: 50% 88%; will-change: transform, filter; }
[data-cat-actor].is-tool-target { filter: drop-shadow(0 0 18px rgb(231 183 104 / 58%)); }
.cat-performer.is-watching {
  transform: translate3d(calc(var(--look-x, 0) * 7px), calc(var(--look-y, 0) * 4px), 0) rotate(calc(var(--look-x, 0) * 1.4deg)) scale(1.012);
  transition: transform 120ms ease-out;
}
.cat-actor[data-cat-gaze="left"] .cat-performer:not(.is-watching):not(.is-action-pose):not(.is-roaming) { transform: translate3d(-4px, 0, 0) rotate(-1.4deg); transition: transform 420ms ease; }
.cat-actor[data-cat-gaze="right"] .cat-performer:not(.is-watching):not(.is-action-pose):not(.is-roaming) { transform: translate3d(4px, 0, 0) rotate(1.4deg); transition: transform 420ms ease; }
.cat-actor[data-cat-gaze="down"] .cat-performer:not(.is-watching):not(.is-action-pose):not(.is-roaming) { transform: translate3d(0, 3px, 0) scale(1.006, .994); transition: transform 420ms ease; }
.cat-performer.is-anticipating { animation: cat-anticipate 680ms ease-in-out infinite alternate; }
.cat-performer.is-pouncing { animation: cat-pounce 1.65s cubic-bezier(.22, .75, .2, 1) both; }
.cat-performer.is-enjoying { animation: cat-enjoy 920ms ease-in-out infinite; }
.cat-performer.is-kneading { animation: cat-knead 1.8s ease-in-out both; }
.cat-performer.is-box-peeking { animation: cat-box-peek 1.7s cubic-bezier(.22, .72, .2, 1) both; }
.cat-performer.is-settling { animation: cat-settle 1.8s ease-in-out both; }
.cat-actor.is-pet-gesture { cursor: grabbing; }
.cat-actor.is-pet-gesture .cat-performer.is-enjoying { animation: cat-pet-follow 420ms ease-in-out infinite alternate; }
.cat-actor[data-pet-part="head"] .cat-performer { transform-origin: 46% 92%; }
.cat-actor[data-pet-part="chin"] .cat-performer { transform-origin: 50% 96%; }
.cat-actor[data-pet-part="back"] .cat-performer { transform-origin: 50% 100%; }
.cat-actor[data-pet-part="paw"] .cat-performer { transform-origin: 72% 94%; }
.cat-actor[data-pet-part="tail"] .cat-performer { transform-origin: 42% 90%; }
.cat-actor[data-pet-part="head"] .cat-performer.is-enjoying,
.cat-performer.is-petting-head { animation: cat-pet-head 760ms ease-in-out infinite alternate; }
.cat-actor[data-pet-part="chin"] .cat-performer.is-enjoying,
.cat-performer.is-petting-chin { animation: cat-pet-chin 900ms ease-in-out infinite alternate; }
.cat-actor[data-pet-part="back"] .cat-performer.is-enjoying,
.cat-performer.is-petting-back { animation: cat-pet-back 980ms ease-in-out infinite alternate; }
.cat-actor[data-pet-part="paw"] .cat-performer.is-enjoying,
.cat-performer.is-petting-paw { animation: cat-pet-paw 620ms cubic-bezier(.3, .05, .2, 1) infinite alternate; }
.cat-actor[data-pet-part="tail"] .cat-performer.is-enjoying,
.cat-performer.is-petting-tail { animation: cat-pet-tail 360ms ease-out 3; }
.cat-performer.is-brushing { animation: cat-brush 1.45s ease-in-out both; }
.cat-performer.is-drying { animation: cat-dry 1.5s ease-in-out both; }
.cat-performer.is-snacking { animation: cat-snack 1.3s ease-in-out both; }
.cat-performer.is-considering { animation: cat-consider 1.25s ease-in-out both; }
.cat-performer.is-bristling { animation: cat-bristle 1.5s cubic-bezier(.2, .72, .2, 1) both; }
.cat-actor[data-ambient-family="rest"] .cat-performer { animation: cat-ambient-rest 3.4s ease-in-out both; }
.cat-actor[data-ambient-family="social"] .cat-performer { animation: cat-ambient-social 3.4s ease-in-out both; }
.cat-actor[data-ambient-family="explore"] .cat-performer { animation: cat-ambient-explore 3.4s ease-in-out both; }
.cat-actor[data-ambient-family="hunt"] .cat-performer { animation: cat-ambient-hunt 3.4s cubic-bezier(.2, .72, .2, 1) both; }
.cat-actor[data-ambient-family="groom"] .cat-performer { animation: cat-ambient-groom 3.4s ease-in-out both; }
.cat-actor[data-ambient-family="forage"] .cat-performer { animation: cat-ambient-forage 3.4s ease-in-out both; }
/* Moving poses own a readable travel path; quiet poses keep the smaller family motion above. */
.cat-actor[data-ambient-pose="crawl"] .cat-performer { animation: cat-ambient-crawl 3.6s cubic-bezier(.32, .02, .22, 1) both; }
.cat-actor[data-ambient-action="curious-peek"] .cat-performer { animation: cat-curious-peek 3.6s ease-in-out both; }
.cat-actor[data-ambient-pose="pounce"] .cat-performer,
.cat-actor[data-ambient-action="short-pounce"] .cat-performer,
.cat-actor[data-ambient-action="play-pounce"] .cat-performer { animation: cat-ambient-pounce 3.6s cubic-bezier(.24, .04, .2, 1) both; }
.cat-actor[data-ambient-action="room-patrol"] .cat-performer { animation: cat-room-patrol 3.6s cubic-bezier(.3, .04, .24, 1) both; }
.cat-actor[data-ambient-pose="crawl"] .cat-ground-contact { animation: cat-contact-crawl 3.6s ease-in-out both; }
.cat-actor[data-ambient-pose="pounce"] .cat-ground-contact { animation: cat-contact-pounce 3.6s ease-in-out both; }
.cat-reaction { pointer-events: none; position: absolute; z-index: 8; top: 8%; left: 50%; padding: 6px 10px; transform: translate(-50%, 8px) rotate(-2deg); border-radius: 7px; background: rgb(73 59 64 / 88%); color: white; font-family: var(--font-display); font-size: var(--text-xs); font-style: normal; font-weight: 900; letter-spacing: .08em; opacity: 0; transition: 150ms var(--ease); }
.cat-reaction:not(:empty) { transform: translate(-50%, 0); opacity: 1; }
.care-point-gain {
  pointer-events: none;
  position: absolute;
  z-index: 12;
  top: -4%;
  left: 50%;
  min-width: max-content;
  padding: 6px 11px;
  border: 2px solid #fff1a8;
  border-radius: 999px;
  background: #d66f48;
  box-shadow: 0 7px 18px rgb(91 48 33 / 28%);
  color: white;
  font-family: var(--font-display);
  font-size: 15px;
  font-weight: 900;
  transform: translateX(-50%);
  animation: care-point-pop 1.15s var(--ease) both;
}
@keyframes care-point-pop {
  0% { opacity: 0; transform: translate(-50%, 14px) scale(.72); }
  20% { opacity: 1; transform: translate(-50%, -4px) scale(1.08); }
  72% { opacity: 1; transform: translate(-50%, -20px) scale(1); }
  100% { opacity: 0; transform: translate(-50%, -34px) scale(.92); }
}
.intimacy-gain {
  top: 18%;
  border-color: #ffd6e8;
  background: #c45b7a;
  animation-delay: 80ms;
}
/* 领取态只显示喵立得图标，红点可越出按钮边缘但不被工具坞裁切。 */
.core-tool--claim {
  position: relative;
  width: 42px;
  min-width: 0;
  height: 42px;
  padding: 0;
  overflow: visible;
}
/* 喵立得文本标签：贴在道具图标顶部上沿，不占列表位。 */
.core-tool,
.care-prop { position: relative; }
.item-flag {
  position: absolute;
  top: -9px;
  left: 50%;
  z-index: 1;
  padding: 2px 8px;
  border-radius: 999px;
  background: #a64d49;
  color: #fff8ea;
  font-size: 11px;
  font-weight: 900;
  font-style: normal;
  letter-spacing: 0.08em;
  white-space: nowrap;
  transform: translateX(-50%);
  pointer-events: none;
}
.core-tool-claim__label {
  position: absolute;
  z-index: 2;
  top: -11px;
  left: 50%;
  padding: 2px 8px;
  border-radius: 999px;
  background: #a64d49;
  color: #fff8ea;
  font-size: 11px;
  font-weight: 900;
  letter-spacing: 0.06em;
  line-height: 1.5;
  white-space: nowrap;
  box-shadow: 0 3px 10px rgb(140 64 58 / 36%);
  transform: translateX(-50%);
}

.core-tool__claim-dot {
  position: absolute;
  z-index: 1;
  top: -4px;
  right: -4px;
  width: 10px;
  height: 10px;
  border: 2px solid #fff8e8;
  border-radius: 50%;
  background: #d85d58;
  box-shadow: 0 1px 4px rgb(88 42 41 / 30%);
  pointer-events: none;
  animation: core-tool-claim-pulse 1.8s ease-in-out infinite;
}
@keyframes core-tool-claim-pulse {
  0%, 72%, 100% { transform: scale(1); }
  84% { transform: scale(1.1); }
}
@media (prefers-reduced-motion: reduce) {
  /* 喵立得文本标签：贴在道具图标顶部上沿，不占列表位。 */
.core-tool-claim__label {
  position: absolute;
  z-index: 2;
  top: -11px;
  left: 50%;
  padding: 2px 8px;
  border-radius: 999px;
  background: #a64d49;
  color: #fff8ea;
  font-size: 11px;
  font-weight: 900;
  letter-spacing: 0.06em;
  line-height: 1.5;
  white-space: nowrap;
  box-shadow: 0 3px 10px rgb(140 64 58 / 36%);
  transform: translateX(-50%);
}

.core-tool__claim-dot { animation: none; }
}
.cat-behavior-tell {
  pointer-events: none;
  position: absolute;
  z-index: 7;
  top: 5%;
  right: auto;
  left: 50%;
  width: max-content;
  max-width: 210px;
  padding: 7px 11px;
  transform: translate(-50%, 8px);
  border: 1px solid rgb(255 255 255 / 66%);
  border-radius: 999px;
  background: rgb(255 249 240 / 90%);
  color: var(--ink);
  box-shadow: 0 8px 20px rgb(72 47 40 / 14%);
  font-size: 11px;
  font-weight: 800;
  line-height: 1.25;
  opacity: 0;
  transition: opacity 160ms ease, transform 160ms ease;
}
.cat-behavior-tell.is-visible { transform: translate(-50%, 0); opacity: 1; }

@media (pointer: fine) {
  .game-shell.is-tool-armed :is([data-play-surface], .cat-stage, [data-cat-actor]),
  .game-shell.is-tool-armed :is([data-play-surface], .cat-stage, [data-cat-actor]) * { cursor: none; }
}

@keyframes lamp-breathe {
  from { transform: scale(0.96); filter: drop-shadow(0 0 14px rgb(255 196 111 / 44%)); }
  to { transform: scale(1.04); filter: drop-shadow(0 0 32px rgb(255 211 139 / 82%)); }
}

@keyframes swipe-arrow {
  0%, 100% { transform: translateX(-3px); opacity: 0.45; }
  50% { transform: translateX(4px); opacity: 1; }
}

@keyframes cat-crawl-cycle-frames {
  0%, 21.9% { background-position-x: 0%; }
  22%, 45.9% { background-position-x: 33.333%; }
  46%, 69.9% { background-position-x: 66.667%; }
  70%, 100% { background-position-x: 100%; }
}
@keyframes cat-pounce-cycle-frames {
  0%, 21.9% { background-position-x: 0%; }
  22%, 55.9% { background-position-x: 33.333%; }
  56%, 73.9% { background-position-x: 66.667%; }
  74%, 100% { background-position-x: 100%; }
}
@keyframes cat-room-walk-frames {
  0%, 24.9% { background-position-x: 0%; }
  25%, 49.9% { background-position-x: 33.333%; }
  50%, 74.9% { background-position-x: 66.667%; }
  75%, 100% { background-position-x: 100%; }
}
@keyframes cat-idle-eyelid {
  0%, 66%, 69%, 100% { opacity: 0; }
  67%, 68% { opacity: 1; }
}
@keyframes cat-room-walk-body {
  0%, 50%, 100% { transform: translate3d(0, 0, 0) rotate(0) scale(1); }
  12.5% { transform: translate3d(2px, -5px, 0) rotate(.7deg) scale(1.008, .992); }
  25% { transform: translate3d(4px, -1px, 0) rotate(.25deg) scale(.998, 1.006); }
  37.5% { transform: translate3d(2px, -4px, 0) rotate(-.55deg) scale(1.006, .994); }
  62.5% { transform: translate3d(-2px, -5px, 0) rotate(-.7deg) scale(1.008, .992); }
  75% { transform: translate3d(-4px, -1px, 0) rotate(-.25deg) scale(.998, 1.006); }
  87.5% { transform: translate3d(-2px, -4px, 0) rotate(.55deg) scale(1.006, .994); }
}
@keyframes cat-contact-walk {
  0%, 50%, 100% { transform: translateX(-50%) scaleX(1); opacity: .7; }
  12.5%, 62.5% { transform: translateX(-50%) scaleX(.82); opacity: .46; }
  25%, 75% { transform: translateX(-50%) scaleX(1.08); opacity: .76; }
  37.5%, 87.5% { transform: translateX(-50%) scaleX(.9); opacity: .55; }
}
@keyframes kitten-idle-day20 {
  0%, 100% { transform: translate3d(0, 1px, 0) rotate(-.3deg) scale(1); }
  28% { transform: translate3d(-2px, -3px, 0) rotate(.8deg) scale(1.014, .986); }
  56% { transform: translate3d(2px, 0, 0) rotate(-.6deg) scale(.994, 1.016); }
  78% { transform: translate3d(-1px, -2px, 0) rotate(.35deg) scale(1.008, .994); }
}
@keyframes kitten-idle-month2 {
  0%, 100% { transform: translate3d(0, 0, 0) rotate(0) scale(1); }
  24% { transform: translate3d(-3px, -4px, 0) rotate(-1.2deg) scale(1.012, .99); }
  48% { transform: translate3d(2px, -1px, 0) rotate(.7deg) scale(.994, 1.018); }
  72% { transform: translate3d(4px, 0, 0) rotate(1deg) scale(1.008, .996); }
}
@keyframes kitten-idle-month3 {
  0%, 100% { transform: translate3d(0, 0, 0) rotate(0) scale(1); }
  30% { transform: translate3d(-4px, -3px, 0) rotate(-1deg) scale(1.014, .988); }
  58% { transform: translate3d(3px, -1px, 0) rotate(.8deg) scale(.996, 1.014); }
  82% { transform: translate3d(1px, -4px, 0) rotate(-.4deg) scale(1.008, .994); }
}
@keyframes kitten-idle-month6 {
  0%, 100% { transform: translate3d(0, 0, 0) rotate(0) scale(1); }
  26% { transform: translate3d(-3px, -5px, 0) rotate(-1.1deg) scale(1.012, .99); }
  52% { transform: translate3d(4px, -2px, 0) rotate(1.2deg) scale(.996, 1.015); }
  76% { transform: translate3d(-1px, -4px, 0) rotate(-.5deg) scale(1.01, .992); }
}
@keyframes cat-anticipate {
  from { transform: translate3d(calc(var(--look-x, 0) * 6px), calc(var(--look-y, 0) * 3px), 0) rotate(calc(var(--look-x, 0) * 1.2deg)) scale(1.012); }
  to { transform: translate3d(calc(var(--look-x, 0) * 6px), calc(var(--look-y, 0) * 3px + 5px), 0) rotate(calc(var(--look-x, 0) * 1.2deg)) scaleX(1.025) scaleY(.975); }
}
@keyframes cat-action-base-rise {
  from { opacity: 1; }
  to { opacity: 0; }
}
@keyframes cat-action-pose-rise {
  from { opacity: 0; }
  to { opacity: 1; }
}
@keyframes cat-action-base-settle {
  from { opacity: 0; }
  to { opacity: 1; }
}
@keyframes cat-action-pose-settle {
  from { opacity: 1; }
  to { opacity: 0; }
}
@keyframes cat-action-pose-hold {
  0%, 100% { transform: translate3d(0, 0, 0) rotate(0) scale(1); }
  28% { transform: translate3d(-1px, -2px, 0) rotate(-.18deg) scale(1.004, .997); }
  56% { transform: translate3d(1px, -4px, 0) rotate(.22deg) scale(.998, 1.008); }
  78% { transform: translate3d(0, -1px, 0) rotate(.08deg) scale(1.002, .999); }
}
@keyframes cat-pounce {
  0%, 100% { transform: translate3d(0, 0, 0) rotate(0) scale(1); }
  12% { transform: translate3d(-5px, 5px, 0) rotate(-1.5deg) scale(1.035, .955); }
  24% { transform: translate3d(-8px, 7px, 0) rotate(-2deg) scale(1.06, .92); }
  38% { transform: translate3d(calc(var(--impact-x, 34px) * .42), calc(var(--impact-y, 0px) - 18px), 0) rotate(1deg) scale(.97, 1.05); }
  52% { transform: translate3d(var(--impact-x, 34px), calc(var(--impact-y, 0px) - 30px), 0) rotate(3deg) scale(1.035, .97); }
  64% { transform: translate3d(calc(var(--impact-x, 34px) * 1.08), calc(var(--impact-y, 0px) + 4px), 0) rotate(1deg) scale(1.07, .91); }
  76% { transform: translate3d(calc(var(--impact-x, 34px) * .88), calc(var(--impact-y, 0px) + 1px), 0) rotate(-.7deg) scale(.985, 1.025); }
  88% { transform: translate3d(calc(var(--impact-x, 34px) * .28), -2px, 0) rotate(-.25deg) scale(1.005, .995); }
}
@keyframes cat-enjoy {
  0%, 100% { transform: translateY(0) rotate(0); filter: drop-shadow(0 18px 18px rgb(71 46 37 / 22%)); }
  50% { transform: translateY(-7px) rotate(-1.5deg) scale(1.025); filter: drop-shadow(0 20px 22px rgb(217 138 134 / 34%)); }
}
@keyframes cat-knead {
  0%, 100% { transform: translate3d(0, 0, 0) rotate(0) scale(1); }
  14% { transform: translate3d(-3px, 3px, 0) rotate(-.7deg) scale(1.012, .986); }
  28% { transform: translate3d(2px, 1px, 0) rotate(.5deg) scale(.994, 1.008); }
  43% { transform: translate3d(3px, 4px, 0) rotate(.8deg) scale(1.014, .982); }
  58% { transform: translate3d(-2px, 1px, 0) rotate(-.45deg) scale(.996, 1.006); }
  74% { transform: translate3d(-2px, 4px, 0) rotate(-.55deg) scale(1.01, .986); }
  88% { transform: translate3d(1px, 1px, 0) rotate(.2deg) scale(1.002, .998); }
}
@keyframes cat-box-peek {
  0%, 100% { transform: translate3d(0, 0, 0) rotate(0) scale(1); }
  16% { transform: translate3d(-6px, 5px, 0) rotate(-1.1deg) scale(1.025, .96); }
  32% { transform: translate3d(-12px, 2px, 0) rotate(-2deg) scale(.99, 1.015); }
  48% { transform: translate3d(-15px, 1px, 0) rotate(-1.3deg) scale(1.01); }
  64% { transform: translate3d(-8px, 4px, 0) rotate(.8deg) scale(1.02, .972); }
  80% { transform: translate3d(3px, 0, 0) rotate(1.2deg) scale(.998, 1.006); }
}
@keyframes cat-settle {
  0% { transform: translate3d(0, 0, 0) scale(1); }
  18% { transform: translate3d(0, -3px, 0) scale(.99, 1.018); }
  38% { transform: translate3d(0, 4px, 0) scale(1.025, .968); }
  58% { transform: translate3d(-2px, 7px, 0) rotate(-.8deg) scale(1.045, .94); }
  76% { transform: translate3d(1px, 8px, 0) rotate(.35deg) scale(1.055, .932); }
  100% { transform: translate3d(0, 6px, 0) scale(1.04, .95); }
}
@keyframes cat-pet-follow {
  from { transform: translateX(calc(var(--pet-direction, 1) * -3px)) rotate(calc(var(--pet-direction, 1) * -.8deg)) scale(.997, 1.008); filter: drop-shadow(0 18px 18px rgb(71 46 37 / 22%)); }
  to { transform: translateX(calc(var(--pet-direction, 1) * 4px)) translateY(-4px) rotate(calc(var(--pet-direction, 1) * 1.2deg)) scale(1.018, .992); filter: drop-shadow(0 20px 22px rgb(217 138 134 / 32%)); }
}
@keyframes cat-pet-head {
  from { transform: translateX(calc(var(--pet-direction, 1) * -6px)) translateY(1px) rotate(calc(var(--pet-direction, 1) * -3deg)) scale(1.01, .995); }
  to { transform: translateX(calc(var(--pet-direction, 1) * 10px)) translateY(-10px) rotate(calc(var(--pet-direction, 1) * 5deg)) scale(1.035, .98); }
}
@keyframes cat-pet-chin {
  from { transform: translateY(-4px) rotate(-.5deg) scale(1, 1.02); }
  to { transform: translateY(-18px) rotate(-1.5deg) scale(.99, 1.075); }
}
@keyframes cat-pet-back {
  from { transform: translateY(-4px) scale(1.025, .98); }
  to { transform: translateY(-15px) scale(1.075, .93); }
}
@keyframes cat-pet-paw {
  from { transform: translate3d(6px, -3px, 0) rotate(2deg) scale(.99, 1.015); }
  to { transform: translate3d(14px, -7px, 0) rotate(4deg) scale(.98, 1.03); }
}
@keyframes cat-pet-tail {
  0%, 100% { transform: translateX(-8px) rotate(-2.5deg); }
  38% { transform: translateX(-16px) rotate(-4.5deg); }
  72% { transform: translateX(14px) rotate(4deg); }
}
@keyframes cat-brush {
  0%, 100% { transform: rotate(0) scale(1); }
  30% { transform: rotate(-1.4deg) scale(1.018); }
  65% { transform: rotate(1deg) scale(1.012); }
}
@keyframes cat-dry {
  0%, 100% { transform: translate3d(0, 0, 0) rotate(0) scale(1); }
  18% { transform: translate3d(-4px, 2px, 0) rotate(-1deg) scale(1.012, .99); }
  36% { transform: translate3d(5px, -1px, 0) rotate(1.2deg) scale(.995, 1.012); }
  54% { transform: translate3d(-3px, 1px, 0) rotate(-.7deg) scale(1.008, .994); }
  72% { transform: translate3d(4px, -2px, 0) rotate(.8deg) scale(.998, 1.008); }
  88% { transform: translate3d(-1px, 0, 0) rotate(-.2deg) scale(1.002); }
}
@keyframes cat-snack {
  0%, 100% { transform: translate3d(0, 0, 0) rotate(0) scale(1); }
  15% { transform: translate3d(0, 5px, 0) rotate(-.5deg) scale(1.01, .98); }
  30% { transform: translate3d(1px, 1px, 0) rotate(.35deg) scale(.998, 1.006); }
  46% { transform: translate3d(0, 6px, 0) rotate(-.35deg) scale(1.012, .976); }
  62% { transform: translate3d(-1px, 2px, 0) rotate(.25deg) scale(1.002); }
  78% { transform: translate3d(0, 5px, 0) rotate(-.2deg) scale(1.008, .984); }
  90% { transform: translate3d(1px, -1px, 0) rotate(.2deg) scale(.998, 1.004); }
}
@keyframes cat-consider {
  0%, 100% { transform: translateX(0) rotate(0); }
  35% { transform: translateX(-5px) rotate(-1.2deg); }
  70% { transform: translateX(4px) rotate(1deg); }
}
@keyframes cat-ambient-rest {
  0%, 100% { transform: translateY(0) scale(1); }
  45%, 70% { transform: translateY(5px) scale(var(--cat-motion-scale, 1)); }
}
@keyframes cat-ambient-social {
  0%, 100% { transform: translateX(0) rotate(0); }
  45% { transform: translateX(-9px) rotate(-2deg) scale(var(--cat-motion-scale, 1)); }
  70% { transform: translateX(-5px) rotate(1deg); }
}
@keyframes cat-ambient-explore {
  0%, 100% { transform: translateX(0) rotate(0); }
  35% { transform: translateX(10px) rotate(1.6deg) scale(var(--cat-motion-scale, 1)); }
  65% { transform: translateX(-4px) rotate(-.8deg); }
}
@keyframes cat-ambient-hunt {
  0%, 22%, 100% { transform: translate3d(0, 0, 0) scale(1); }
  50% { transform: translate3d(18px, -8px, 0) rotate(1.6deg) scale(var(--cat-motion-scale, 1)); }
  70% { transform: translate3d(3px, 0, 0) scale(.99); }
}
@keyframes cat-ambient-groom {
  0%, 100% { transform: rotate(0) translateY(0); }
  40% { transform: rotate(-2deg) translateY(2px) scale(var(--cat-motion-scale, 1)); }
  68% { transform: rotate(1.2deg) translateY(-2px); }
}
@keyframes cat-ambient-forage {
  0%, 100% { transform: translateY(0) rotate(0); }
  30% { transform: translateY(4px) rotate(-1deg) scale(var(--cat-motion-scale, 1)); }
  58% { transform: translateY(-2px) rotate(1.4deg); }
  75% { transform: translateY(2px) rotate(-.5deg); }
}
@keyframes cat-miss {
  0%, 100% { transform: translateX(0) rotate(0); }
  35% { transform: translateX(-5px) rotate(-1deg); }
  70% { transform: translateX(4px) rotate(1deg); }
}
/* The closed trigger keeps the room quiet; unlocked objects only enter when the player opens it. */
.care-shelf {
  position: relative;
  z-index: 9;
}
@keyframes cat-ambient-crawl {
  0%, 100% { transform: translate3d(0, 0, 0) rotate(0) scale(1); }
  10% { transform: translate3d(-3px, 3px, 0) rotate(-1deg) scale(1.025, .965); }
  22% { transform: translate3d(7px, -2px, 0) rotate(.6deg) scale(.985, 1.025); }
  34% { transform: translate3d(15px, 1px, 0) rotate(-.5deg) scale(1.018, .982); }
  46% { transform: translate3d(26px, -3px, 0) rotate(.8deg) scale(.99, 1.018); }
  58% { transform: translate3d(36px, 1px, 0) rotate(-.4deg) scale(1.012, .988); }
  70% { transform: translate3d(32px, -2px, 0) rotate(.35deg) scale(.995, 1.01); }
  82% { transform: translate3d(19px, 1px, 0) rotate(-.25deg) scale(1.008, .994); }
  92% { transform: translate3d(6px, 0, 0) rotate(.15deg) scale(1.002, .998); }
}
@keyframes cat-curious-peek {
  0%, 100% { transform: translate3d(0, 0, 0) rotate(0) scale(1); }
  18% { transform: translate3d(-4px, 4px, 0) rotate(-1deg) scale(1.025, .965); }
  34% { transform: translate3d(8px, -5px, 0) rotate(1.5deg) scale(.985, 1.025); }
  52% { transform: translate3d(14px, -7px, 0) rotate(2deg) scale(1.012, .99); }
  68% { transform: translate3d(10px, -3px, 0) rotate(.7deg) scale(1.006, .996); }
  84% { transform: translate3d(3px, 0, 0) rotate(-.3deg) scale(.998, 1.004); }
}
@keyframes cat-ambient-pounce {
  0%, 100% { transform: translate3d(0, 0, 0) rotate(0) scale(1); }
  12% { transform: translate3d(-5px, 5px, 0) rotate(-1.4deg) scale(1.04, .95); }
  22% { transform: translate3d(-8px, 7px, 0) rotate(-2deg) scale(1.065, .91); }
  34% { transform: translate3d(16px, -16px, 0) rotate(.7deg) scale(.97, 1.05); }
  46% { transform: translate3d(48px, -28px, 0) rotate(2.8deg) scale(1.035, .965); }
  56% { transform: translate3d(62px, -8px, 0) rotate(1.2deg) scale(1.02, .98); }
  64% { transform: translate3d(66px, 5px, 0) rotate(.4deg) scale(1.08, .9); }
  74% { transform: translate3d(59px, 0, 0) rotate(-.7deg) scale(.985, 1.025); }
  84% { transform: translate3d(35px, -2px, 0) rotate(-.3deg) scale(1.008, .992); }
  93% { transform: translate3d(12px, 0, 0) rotate(.15deg) scale(1.002, .998); }
}
@keyframes cat-room-patrol {
  0%, 100% { transform: translate3d(0, 0, 0) rotate(0) scale(1); }
  10% { transform: translate3d(-4px, 3px, 0) rotate(-1deg) scale(1.025, .965); }
  22% { transform: translate3d(12px, -5px, 0) rotate(.8deg) scale(.985, 1.02); }
  36% { transform: translate3d(34px, -9px, 0) rotate(1.6deg) scale(1.015, .985); }
  48% { transform: translate3d(54px, -3px, 0) rotate(.7deg) scale(1.03, .97); }
  60% { transform: translate3d(42px, 1px, 0) rotate(-1.1deg) scale(.99, 1.015); }
  72% { transform: translate3d(18px, -5px, 0) rotate(-1.5deg) scale(1.012, .99); }
  84% { transform: translate3d(-7px, -2px, 0) rotate(.8deg) scale(.995, 1.008); }
  93% { transform: translate3d(-3px, 0, 0) rotate(.2deg) scale(1.002, .998); }
}
@keyframes cat-contact-crawl {
  0%, 100% { transform: translateX(-50%) scaleX(1); opacity: .82; }
  22%, 46%, 70% { transform: translateX(-50%) scaleX(.82); opacity: .58; }
  34%, 58%, 82% { transform: translateX(-50%) scaleX(1.08); opacity: .78; }
}
@keyframes cat-contact-pounce {
  0%, 22%, 100% { transform: translateX(-50%) scaleX(1); opacity: .82; }
  34% { transform: translateX(-50%) scaleX(.7); opacity: .36; }
  46%, 56% { transform: translateX(-50%) scaleX(.45); opacity: .12; }
  64% { transform: translateX(-50%) scaleX(1.24); opacity: .9; }
  74% { transform: translateX(-50%) scaleX(.96); opacity: .7; }
  84% { transform: translateX(-50%) scaleX(1.06); opacity: .78; }
}
@keyframes cat-bristle {
  0%, 100% { transform: translateX(0) scale(1); }
  26% { transform: translateX(-7px) scale(1.025, .985); }
  42%, 58%, 74% { transform: translateX(-5px) rotate(-.7deg); }
  50%, 66% { transform: translateX(-2px) rotate(.7deg); }
}
@keyframes decor-cat-swat {
  0%, 15%, 100% { transform: translate3d(0, 0, 0) rotate(0); }
  34% { transform: translate3d(-7px, -3px, 0) rotate(-5deg); }
  52% { transform: translate3d(12px, 1px, 0) rotate(9deg); }
  70% { transform: translate3d(7px, 0, 0) rotate(4deg); }
}
@keyframes decor-contact-swat {
  0%, 15%, 100% { transform: rotateX(68deg) scaleX(1); opacity: 1; }
  52% { transform: rotateX(68deg) translateX(8px) scaleX(.82); opacity: .72; }
}
.care-shelf__empty { grid-column: 1 / -1; margin: 12px 0; color: var(--ink-soft); font-size: var(--text-xs); text-align: center; }

.cat-stage > .care-shelf--home {
  position: absolute;
  z-index: 9;
  top: 18px;
  left: 18px;
  margin: 0;
}
.care-prop {
  min-height: 70px;
  align-content: end;
  border: 0;
  background: transparent;
  box-shadow: none;
  transition: filter 150ms ease, scale 150ms var(--ease);
}
.care-prop::before {
  position: absolute;
  right: 17%;
  bottom: 12px;
  left: 17%;
  height: 8px;
  border-radius: 50%;
  background: rgb(79 49 35 / 15%);
  filter: blur(3px);
  content: "";
}
.care-prop img {
  position: relative;
  z-index: 1;
  transform-origin: 50% 88%;
  transition: transform 160ms var(--ease), filter 160ms ease;
}
.care-prop__label {
  position: relative;
  z-index: 2;
  margin-top: -2px;
  border: 1px solid rgb(136 93 63 / 10%);
  background: rgb(255 249 238 / 92%);
  box-shadow: 0 2px 6px rgb(78 52 43 / 8%);
  font-size: var(--text-xs);
}
.care-prop:hover img,
.care-prop:focus-visible img { transform: translateY(-4px) rotate(-2deg); filter: drop-shadow(0 8px 7px rgb(78 52 43 / 22%)); }

.care-prop[aria-pressed="true"],
.newborn-care-prop[aria-pressed="true"],
[data-tool-id][aria-pressed="true"] {
  border: 0;
  background: transparent;
  box-shadow: none;
}
.care-prop[aria-pressed="true"]::after,
.newborn-care-prop[aria-pressed="true"]::after {
  position: absolute;
  z-index: -1;
  top: 7px;
  left: 50%;
  width: 62px;
  height: 62px;
  transform: translateX(-50%);
  border: 1px solid rgb(217 138 134 / 48%);
  border-radius: 50%;
  background: radial-gradient(circle, rgb(255 230 183 / 52%), transparent 68%);
  box-shadow: 0 0 0 4px rgb(217 138 134 / 10%);
  content: "";
}
.care-prop[aria-pressed="true"] img,
.newborn-care-prop[aria-pressed="true"] img { transform: translateY(-5px) rotate(-3deg) scale(1.08); filter: drop-shadow(0 9px 8px rgb(126 73 55 / 24%)); }
.care-prop.is-dragging::before { opacity: 0; }

/* Gesture progress follows the rendered body model instead of the actor's transparent image box. */
.cat-actor.is-care-gesture { --care-progress: 0; }

.tool-cursor { transition: opacity 90ms ease, scale 110ms var(--ease), filter 110ms ease; }
.tool-cursor[data-tool-id="brush"] {
  --tool-contact-x: 67%;
  --tool-contact-y: 25%;
  --tool-rotation: -15deg;
  width: 92px;
  height: 92px;
}
.tool-cursor[data-tool-id="nailClipper"] {
  --tool-contact-x: 79%;
  --tool-contact-y: 13%;
  --tool-rotation: -8deg;
  width: 82px;
  height: 82px;
}
.tool-cursor[data-tool-id="photoSticker"] { width: 86px; height: 86px; }
.game-shell[data-tool-phase="gesture"] .tool-cursor { scale: 1.08; filter: drop-shadow(0 12px 13px rgb(74 45 37 / 34%)); }
.game-shell[data-tool-phase="impact"] .tool-cursor { scale: .88; }
.game-shell[data-tool-phase="miss"] .tool-cursor { animation: tool-miss 220ms ease-in-out; }

.cat-performer.is-trimming { animation: cat-trim 1.8s cubic-bezier(.2, .8, .25, 1) both; }
.cat-performer.is-photo-ready { animation: cat-photo 1.5s var(--ease) both; }
.cat-performer.is-photo-ready::after {
  pointer-events: none;
  position: absolute;
  z-index: 8;
  inset: 8% 3%;
  border: 2px solid rgb(255 247 212 / 84%);
  border-radius: 20px;
  box-shadow: 0 0 22px rgb(255 229 163 / 76%);
  content: "";
}

.pet-particle { animation-delay: var(--delay, 0ms); }
.pet-particle--groom { color: #fff0c5; font-size: 25px; text-shadow: 0 2px 7px rgb(139 91 62 / 24%); }
.pet-particle--claw { color: #ffd88e; font-family: var(--font-display); font-size: 26px; font-weight: 900; }
.pet-particle--photo { color: #fff7d5; font-size: 31px; filter: drop-shadow(0 0 8px rgb(255 224 136 / 78%)); }

@keyframes tool-miss {
  0%, 100% { translate: 0 0; }
  35% { translate: -5px 1px; }
  70% { translate: 5px -1px; }
}

@keyframes cat-trim {
  0%, 100% { transform: translateY(0) rotate(0); }
  22% { transform: translateY(3px) rotate(-1deg) scaleY(.985); }
  48% { transform: translateY(-3px) rotate(.7deg); }
  62% { transform: translateY(1px) rotate(-.4deg); }
  78% { transform: translateY(-2px) rotate(.4deg); }
}

@keyframes cat-photo {
  0% { transform: scale(1); filter: brightness(1); }
  24% { transform: scale(1.025) rotate(-1deg); filter: brightness(1.18); }
  48% { transform: scale(1.015) rotate(1deg); filter: brightness(1.02); }
  100% { transform: scale(1); filter: brightness(1); }
}

@media (prefers-reduced-motion: reduce) {
  .pet-particle { display: none; }
  .cat-eyelid-sprite { animation: none; }
  .cat-actor.is-pet-gesture .cat-performer.is-enjoying { animation: none; }
  .tool-cursor,
  .care-prop img { transition: none; }
}

/* 成长进度区会被 outerHTML 替换，控件奖励改挂稳定面板并沿用猫爪分上浮淡出。 */
.core-control-gain {
  top: var(--core-control-gain-top);
  left: var(--core-control-gain-left);
  z-index: 30;
  white-space: nowrap;
}

/* 两条成长奖励沿同一挂点向两侧分开，避免上浮淡出时文字重叠。 */
.core-control-gain:not(.intimacy-gain) { margin-left: -64px; }
.core-control-gain.intimacy-gain { margin-left: 64px; }
