/* Optional desktop alert companion for the authenticated BIMS staff shell. */
body.bims-admin-shell .bims-pet-menu-toggle { width: 100%; cursor: pointer; text-align: left; }

.bims-pet-stage {
  --bims-pet-push-lean: 0deg;
  position: fixed;
  right: 16px;
  bottom: 16px;
  z-index: 4900;
  display: grid;
  justify-items: end;
  width: min(360px, calc(100vw - 32px));
  pointer-events: none;
  isolation: isolate;
  filter: drop-shadow(0 12px 24px rgba(6, 29, 58, .14));
  transition: filter 160ms ease;
}

.bims-pet-stage[hidden] { display: none !important; }
.bims-pet-stage.is-dragging { filter: drop-shadow(0 18px 28px rgba(6, 29, 58, .26)); }
.bims-pet-stage.is-dragging[data-bims-pet-drag-direction="left"] { --bims-pet-push-lean: -6deg; }
.bims-pet-stage.is-dragging[data-bims-pet-drag-direction="right"] { --bims-pet-push-lean: 6deg; }
.bims-pet-stage.is-dragging[data-bims-pet-drag-direction="up"] { --bims-pet-push-lean: -1.8deg; }
.bims-pet-stage.is-dragging[data-bims-pet-drag-direction="down"] { --bims-pet-push-lean: 1.8deg; }

/* A short BIMS-blue propulsion trail sits behind MyDasma only while it is
   genuinely moving. It is part of the PET stage, so dragging never clicks,
   focuses, or alters nearby controls. */
.bims-pet-stage::before,
.bims-pet-stage::after {
  content: '';
  position: absolute;
  z-index: 0;
  pointer-events: none;
  opacity: 0;
}

.bims-pet-stage::before {
  top: 58px;
  right: 103px;
  width: 57px;
  height: 13px;
  border-radius: 999px;
  background: repeating-linear-gradient(90deg, rgba(19, 185, 158, 0) 0 5px, rgba(43, 206, 214, .9) 5px 11px, rgba(116, 223, 255, .15) 11px 15px);
  filter: drop-shadow(0 0 5px rgba(26, 193, 202, .34));
  transform-origin: 100% 50%;
}

.bims-pet-stage::after {
  top: 111px;
  right: 47px;
  width: 33px;
  height: 8px;
  border-radius: 50%;
  background: radial-gradient(ellipse at 25% 50%, rgba(12, 74, 111, .42) 0 22%, transparent 25%), radial-gradient(ellipse at 75% 50%, rgba(12, 74, 111, .27) 0 22%, transparent 25%);
  filter: blur(.2px);
}

.bims-pet-stage.is-dragging.is-walking::before,
.bims-pet-stage.is-dragging.is-walking::after { opacity: 1; }
.bims-pet-stage.is-dragging.is-walking[data-bims-pet-drag-direction="left"]::before { right: -2px; transform: scaleX(-1); animation: bims-pet-push-burst-left .42s ease-out infinite; }
.bims-pet-stage.is-dragging.is-walking[data-bims-pet-drag-direction="right"]::before { animation: bims-pet-push-burst-right .42s ease-out infinite; }
.bims-pet-stage.is-dragging.is-walking[data-bims-pet-drag-direction="up"]::before { top: 111px; right: 50px; transform: rotate(90deg); animation: bims-pet-push-burst-up .42s ease-out infinite; }
.bims-pet-stage.is-dragging.is-walking[data-bims-pet-drag-direction="down"]::before { top: 4px; right: 50px; transform: rotate(-90deg); animation: bims-pet-push-burst-down .42s ease-out infinite; }
.bims-pet-stage.is-dragging.is-walking[data-bims-pet-step="left"]::after { transform: translate3d(-4px, 0, 0) scale(.84, 1); opacity: .62; }
.bims-pet-stage.is-dragging.is-walking[data-bims-pet-step="right"]::after { transform: translate3d(4px, 0, 0) scale(1.08, .86); opacity: .9; }

.bims-pet-context-menu {
  position: absolute;
  z-index: 8;
  display: grid;
  min-width: 142px;
  padding: 5px;
  border: 1px solid rgba(60, 116, 184, .34);
  border-radius: 12px;
  background: rgba(250, 253, 255, .98);
  box-shadow: 0 12px 28px rgba(6, 29, 58, .24);
  pointer-events: auto;
}

.bims-pet-context-menu[hidden] { display: none !important; }

.bims-pet-context-menu [data-bims-pet-close] {
  display: flex;
  align-items: center;
  justify-content: flex-start;
  width: 100%;
  min-height: 34px;
  padding: 7px 10px;
  border: 0;
  border-radius: 8px;
  background: transparent;
  color: #b92d35;
  font: inherit;
  font-size: .78rem;
  font-weight: 850;
  cursor: pointer;
}

body.bims-admin-shell .bims-pet-context-menu [data-bims-pet-close]::before { content: none !important; display: none !important; }
.bims-pet-context-menu [data-bims-pet-close]:hover,
.bims-pet-context-menu [data-bims-pet-close]:focus-visible { background: #fff0f0; outline: none; }

.bims-pet-character {
  /* 88 × 83 was the compact first pass.  This is intentionally 10% larger
     while remaining small enough not to cover the page controls. */
  width: 107px;
  height: 100px;
  margin: 18px 12px -2px 0;
  position: relative;
  isolation: isolate;
  transform-origin: 50% 100%;
  cursor: grab;
  pointer-events: auto;
  z-index: 1;
  touch-action: none;
  user-select: none;
  will-change: transform, filter;
  animation: bims-pet-arrive 420ms cubic-bezier(.2, .8, .2, 1) both, bims-pet-idle 7.2s cubic-bezier(.45, 0, .55, 1) 640ms infinite;
}

/* The server paints this shell before deferred JavaScript runs on later pages.
   Keep its familiar idle motion, but never replay the arrival/fade animation on refresh. */
.bims-pet-stage.is-restored .bims-pet-character {
  animation: bims-pet-idle 7.2s cubic-bezier(.45, 0, .55, 1) 0ms infinite;
}

.bims-pet-character::before {
  content: '';
  position: absolute;
  inset: 13px 10px 3px 8px;
  z-index: 0;
  border-radius: 50%;
  background: radial-gradient(ellipse at 50% 70%, rgba(92, 242, 210, .27), rgba(17, 128, 183, 0) 67%);
  opacity: .7;
  pointer-events: none;
  animation: bims-pet-halo 4.8s ease-in-out 700ms infinite;
}

.bims-pet-character::after {
  content: '';
  position: absolute;
  top: 8px;
  left: calc(50% - 5px);
  z-index: 2;
  width: 10px;
  height: 10px;
  border: 2px solid rgba(255, 250, 208, .96);
  border-radius: 50%;
  background: #14b99e;
  box-shadow: 0 0 0 0 rgba(20, 185, 158, .48);
  pointer-events: none;
  animation: bims-pet-signal 3.6s ease-out 900ms infinite;
}

.bims-pet-stage.is-dragging .bims-pet-character {
  cursor: grabbing;
  animation: bims-pet-drag-delight .64s cubic-bezier(.35, .75, .45, 1) infinite;
}
.bims-pet-stage.is-dragging .bims-pet-character::before {
  cursor: grabbing;
  animation: bims-pet-halo .72s ease-in-out infinite;
}
.bims-pet-stage.is-dragging .bims-pet-character::after {
  cursor: grabbing;
  animation: bims-pet-signal .7s ease-out infinite;
}

/* While MyDasma is actually travelling, its body leans into the pointer
   direction as if gently propelled from behind. The SVG pose gives the legs
   their own alternating walk; the forward burst and ground cadence make the
   movement read as a push rather than something pulled backwards. */
.bims-pet-stage.is-dragging.is-walking .bims-pet-character::before {
  animation: bims-pet-walking-halo .62s ease-in-out infinite;
}
.bims-pet-stage.is-dragging.is-walking[data-bims-pet-drag-direction="left"] .bims-pet-character {
  animation: bims-pet-pushed-left .46s cubic-bezier(.18, .82, .35, 1) infinite;
}
.bims-pet-stage.is-dragging.is-walking[data-bims-pet-drag-direction="right"] .bims-pet-character {
  animation: bims-pet-pushed-right .46s cubic-bezier(.18, .82, .35, 1) infinite;
}
.bims-pet-stage.is-dragging.is-walking[data-bims-pet-drag-direction="up"] .bims-pet-character {
  animation: bims-pet-pushed-up .46s cubic-bezier(.18, .82, .35, 1) infinite;
}
.bims-pet-stage.is-dragging.is-walking[data-bims-pet-drag-direction="down"] .bims-pet-character {
  animation: bims-pet-pushed-down .46s cubic-bezier(.18, .82, .35, 1) infinite;
}
.bims-pet-stage.is-dragging.is-walking .bims-pet-character img {
  transform-origin: 50% 100%;
  animation: bims-pet-foot-cadence .23s steps(2, end) infinite;
}

/* Nearby dashboard controls are acknowledged only visually. The PET never
   clicks, focuses, or adds a class to the target itself. A reach or hold is
   deliberately retained at the final drop point, so the acknowledgement does
   not disappear just because the user has released the pointer. */
.bims-pet-stage[data-bims-pet-target-state="reach"] .bims-pet-character {
  --bims-pet-target-x: 0px;
  --bims-pet-target-y: -3px;
  --bims-pet-target-rotate: 0deg;
  filter: drop-shadow(0 7px 10px rgba(18, 167, 188, .25));
  animation: bims-pet-target-reach .72s cubic-bezier(.25, .78, .3, 1) infinite;
}
.bims-pet-stage[data-bims-pet-target-state="hold"] .bims-pet-character { animation: bims-pet-target-hold .5s cubic-bezier(.2, .78, .32, 1) infinite; }
.bims-pet-stage[data-bims-pet-target-state="reach"][data-bims-pet-target-direction="left"] .bims-pet-character { --bims-pet-target-x: -7px; --bims-pet-target-y: -2px; --bims-pet-target-rotate: -7deg; }
.bims-pet-stage[data-bims-pet-target-state="reach"][data-bims-pet-target-direction="right"] .bims-pet-character { --bims-pet-target-x: 7px; --bims-pet-target-y: -2px; --bims-pet-target-rotate: 7deg; }
.bims-pet-stage[data-bims-pet-target-state="reach"][data-bims-pet-target-direction="up"] .bims-pet-character { --bims-pet-target-x: 0px; --bims-pet-target-y: -8px; --bims-pet-target-rotate: -1.5deg; }
.bims-pet-stage[data-bims-pet-target-state="reach"][data-bims-pet-target-direction="down"] .bims-pet-character { --bims-pet-target-x: 0px; --bims-pet-target-y: 5px; --bims-pet-target-rotate: 1.5deg; }

/* The happy post-drag laugh is deliberately short so it never takes focus
   away from a new alert or the user's next action. */
.bims-pet-stage.is-laughing .bims-pet-character { animation: bims-pet-laugh-delight 1.25s cubic-bezier(.25, .8, .3, 1) both; }
.bims-pet-stage.is-laughing .bims-pet-character::before { animation: bims-pet-halo .9s ease-out both; }
.bims-pet-stage.is-laughing .bims-pet-character::after { animation: bims-pet-signal .8s ease-out both; }

.bims-pet-character img { position: relative; z-index: 1; display: block; width: 100%; height: 100%; object-fit: contain; pointer-events: none; filter: saturate(1.07) contrast(1.06); transition: filter 140ms ease; }
.bims-pet-character.is-pose-loading img { filter: saturate(.92) brightness(.98); }

/* Optional hook for the alert layer: a short, friendly acknowledgement without changing layout. */
.bims-pet-stage.is-alerting .bims-pet-character { animation: bims-pet-attention 1.15s cubic-bezier(.2, .8, .2, 1) both; }
.bims-pet-stage.is-alerting .bims-pet-character::before { animation: bims-pet-halo .82s ease-out both; }
.bims-pet-stage.is-alerting .bims-pet-character::after { animation: bims-pet-signal .9s ease-out both; }

/* Clicking MyDasma gives a short, friendly acknowledgement without interrupting drag. */
.bims-pet-stage.is-interacting .bims-pet-character { animation: bims-pet-friendly-wave 1.05s cubic-bezier(.2, .82, .2, 1) both; }
.bims-pet-stage.is-interacting .bims-pet-character::before { animation: bims-pet-halo .74s ease-out both; }
.bims-pet-stage.is-interacting .bims-pet-character::after { animation: bims-pet-signal .72s ease-out both; }

/* The no-task activity loop changes the artwork to a real walk, sit, lie,
   run, or dance pose. These small outer motions make the transition feel
   alive without moving the saved PET location or touching page controls. */
.bims-pet-stage.is-idling .bims-pet-character {
  filter: drop-shadow(0 9px 15px rgba(34, 76, 178, .22));
}
.bims-pet-stage[data-bims-pet-idle-action="idle-walk"] .bims-pet-character { animation: bims-pet-idle-stroll 1.1s ease-in-out infinite; }
.bims-pet-stage[data-bims-pet-idle-action="idle-sit"] .bims-pet-character { animation: bims-pet-idle-sit-settle 1.8s ease-in-out infinite; }
.bims-pet-stage[data-bims-pet-idle-action="idle-lie"] .bims-pet-character { animation: bims-pet-idle-lie-rest 2.1s ease-in-out infinite; }
.bims-pet-stage[data-bims-pet-idle-action="idle-run"] .bims-pet-character { animation: bims-pet-idle-run-step .54s ease-in-out infinite; }
.bims-pet-stage[data-bims-pet-idle-action="idle-dance"] .bims-pet-character { animation: bims-pet-idle-dance-sway .92s cubic-bezier(.38, .04, .48, 1) infinite; }
.bims-pet-stage.is-idling .bims-pet-character::before { animation: bims-pet-idle-glow 1.35s ease-in-out infinite; }

.bims-pet-alerts {
  justify-self: end;
  width: min(280px, 100%);
  min-height: 0;
  margin: 0 8px 8px 0;
}

.bims-pet-greeting {
  width: min(280px, 100%);
  margin: 0 8px 8px 0;
  padding: 10px 13px;
  border: 1px solid rgba(39, 107, 190, .22);
  border-radius: 17px 17px 4px 17px;
  background: rgba(248, 252, 255, .97);
  box-shadow: 0 10px 24px rgba(13, 63, 124, .16);
  color: #15345d;
  pointer-events: auto;
}

.bims-pet-greeting[hidden] { display: none !important; }
.bims-pet-greeting strong,
.bims-pet-greeting span { display: block; }
.bims-pet-greeting strong { color: #0d56ad; font-size: .79rem; font-weight: 900; line-height: 1.25; }
.bims-pet-greeting span { margin-top: 2px; color: #4e6883; font-size: .7rem; font-weight: 700; line-height: 1.38; }

.bims-pet-stage .bims-toast-region {
  position: static !important;
  display: grid;
  width: 100% !important;
  gap: 7px;
  pointer-events: none;
}

.bims-pet-stage .bims-toast {
  --bims-pet-alert-accent: #0d936b;
  --bims-pet-alert-mark-bg: #e7f8ef;
  grid-template-columns: 22px minmax(0, 1fr);
  align-items: start;
  gap: 8px;
  min-height: 0;
  padding: 10px 13px !important;
  border: 1px solid rgba(39, 107, 190, .22) !important;
  border-left: 3px solid var(--bims-pet-alert-accent) !important;
  border-radius: 17px 17px 4px 17px !important;
  background: rgba(248, 252, 255, .98) !important;
  box-shadow: 0 10px 24px rgba(13, 63, 124, .16) !important;
  color: #15345d !important;
  backdrop-filter: blur(10px);
  animation-name: bims-pet-alert-enter;
}

.bims-pet-stage .bims-toast-success { --bims-pet-alert-accent: #0d936b; --bims-pet-alert-mark-bg: #e7f8ef; }
.bims-pet-stage .bims-toast-warning { --bims-pet-alert-accent: #ad7600; --bims-pet-alert-mark-bg: #fff7df; }
.bims-pet-stage .bims-toast-danger { --bims-pet-alert-accent: #c7464b; --bims-pet-alert-mark-bg: #fff0f0; }
.bims-pet-stage .bims-toast-info { --bims-pet-alert-accent: #0d66bb; --bims-pet-alert-mark-bg: #eaf4ff; }
.bims-pet-stage .bims-toast-content { min-width: 0; color: #4e6883 !important; font-size: .7rem; font-weight: 700; line-height: 1.38; }
.bims-pet-stage .bims-pet-alert-title,
.bims-pet-stage .bims-pet-alert-message { display: block; }
.bims-pet-stage .bims-pet-alert-title { color: #0d56ad !important; font-size: .79rem; font-weight: 900; line-height: 1.25; }
.bims-pet-stage .bims-pet-alert-message { margin-top: 2px; overflow-wrap: anywhere; }
.bims-pet-stage .bims-toast-content > strong:not(.bims-pet-alert-title) { color: #15345d; font-weight: 900; }
.bims-pet-stage .bims-toast-content a { color: #0d66bb; font-weight: 850; text-decoration: none; }
.bims-pet-stage .bims-toast-content a:hover, .bims-pet-stage .bims-toast-content a:focus-visible { text-decoration: underline; }
.bims-pet-stage .bims-toast-mark { width: 22px; height: 22px; border-radius: 8px; background: var(--bims-pet-alert-mark-bg) !important; color: var(--bims-pet-alert-accent) !important; font-size: .78rem; }
/* PET alerts auto-dismiss, so the generic close affordance is intentionally hidden here. */
.bims-pet-stage .bims-toast-close { display: none !important; }
.bims-pet-typewriter { display: inline; }
.bims-pet-typewriter::after { content: '\25ae'; display: inline-block; margin-left: 1px; color: var(--bims-pet-alert-accent, #0d66bb); font-size: .72em; line-height: 1; animation: bims-pet-caret .68s step-end infinite; }
.bims-pet-typewriter.is-complete::after { opacity: 0; animation: none; }
.bims-pet-sr-only { position: absolute !important; width: 1px !important; height: 1px !important; padding: 0 !important; margin: -1px !important; overflow: hidden !important; clip: rect(0, 0, 0, 0) !important; white-space: nowrap !important; border: 0 !important; }

@keyframes bims-pet-arrive { from { opacity: 0; transform: translateY(20px) scale(.82); } to { opacity: 1; transform: translateY(0) scale(1); } }
@keyframes bims-pet-idle {
  0%, 13%, 100% { transform: translate3d(0, 0, 0) rotate(0); }
  6% { transform: translate3d(-2px, -4px, 0) rotate(-.9deg); }
  20% { transform: translate3d(-4px, -1px, 0) rotate(-.45deg); }
  34% { transform: translate3d(-2px, -6px, 0) rotate(.45deg); }
  46% { transform: translate3d(1px, -2px, 0) rotate(-.2deg); }
  61% { transform: translate3d(4px, -4px, 0) rotate(.8deg); }
  76% { transform: translate3d(3px, -1px, 0) rotate(.2deg); }
  88% { transform: translate3d(1px, -3px, 0) rotate(.35deg); }
}
@keyframes bims-pet-halo {
  0%, 100% { opacity: .42; transform: scale(.84); }
  45% { opacity: .74; transform: scale(1.08); }
  65% { opacity: .52; transform: scale(.96); }
}
@keyframes bims-pet-signal {
  0%, 18%, 100% { box-shadow: 0 0 0 0 rgba(20, 185, 158, 0); transform: scale(1); }
  28% { box-shadow: 0 0 0 8px rgba(20, 185, 158, .03); transform: scale(1.08); }
  46% { box-shadow: 0 0 0 15px rgba(20, 185, 158, 0); transform: scale(.96); }
}
@keyframes bims-pet-attention {
  0% { transform: translate3d(0, 0, 0) rotate(0); }
  22% { transform: translate3d(-2px, -7px, 0) rotate(-2deg); }
  44% { transform: translate3d(2px, -5px, 0) rotate(2deg); }
  66% { transform: translate3d(-1px, -4px, 0) rotate(-.8deg); }
  100% { transform: translate3d(0, 0, 0) rotate(0); }
}
@keyframes bims-pet-friendly-wave {
  0%, 100% { transform: translate3d(0, 0, 0) rotate(0); }
  24% { transform: translate3d(-2px, -7px, 0) rotate(-6deg); }
  47% { transform: translate3d(2px, -5px, 0) rotate(6deg); }
  70% { transform: translate3d(-1px, -3px, 0) rotate(-2deg); }
}
@keyframes bims-pet-idle-stroll {
  0%, 100% { transform: translate3d(-4px, 0, 0) rotate(-1.4deg); }
  25% { transform: translate3d(-1px, -4px, 0) rotate(-.3deg); }
  50% { transform: translate3d(4px, 0, 0) rotate(1.5deg); }
  75% { transform: translate3d(1px, -4px, 0) rotate(.3deg); }
}
@keyframes bims-pet-idle-sit-settle {
  0%, 100% { transform: translate3d(0, 2px, 0) scale(1.01, .99); }
  50% { transform: translate3d(0, 0, 0) scale(.99, 1.02); }
}
@keyframes bims-pet-idle-lie-rest {
  0%, 100% { transform: translate3d(0, 3px, 0) rotate(-2.1deg) scale(1.01, .99); }
  50% { transform: translate3d(1px, 0, 0) rotate(-.7deg) scale(.99, 1.015); }
}
@keyframes bims-pet-idle-run-step {
  0%, 100% { transform: translate3d(-5px, 1px, 0) rotate(-3deg) scale(1.03, .97); }
  50% { transform: translate3d(5px, -7px, 0) rotate(3.2deg) scale(.97, 1.05); }
}
@keyframes bims-pet-idle-dance-sway {
  0%, 100% { transform: translate3d(-3px, 0, 0) rotate(-5deg); }
  25% { transform: translate3d(2px, -6px, 0) rotate(3.8deg) scale(1.03); }
  50% { transform: translate3d(4px, -1px, 0) rotate(5.1deg); }
  75% { transform: translate3d(-1px, -5px, 0) rotate(-3.8deg) scale(.98, 1.02); }
}
@keyframes bims-pet-idle-glow {
  0%, 100% { opacity: .48; transform: scale(.88); }
  50% { opacity: .78; transform: scale(1.12); }
}
@keyframes bims-pet-drag-delight {
  0%, 100% { transform: translate3d(0, 0, 0) rotate(var(--bims-pet-push-lean)); }
  50% { transform: translate3d(0, -3px, 0) rotate(var(--bims-pet-push-lean)) scale(.99, 1.01); }
}
@keyframes bims-pet-walking-halo {
  0%, 100% { opacity: .52; transform: translate3d(0, 1px, 0) scale(.9, .82); }
  50% { opacity: .8; transform: translate3d(0, 4px, 0) scale(1.1, .92); }
}
@keyframes bims-pet-pushed-left {
  0%, 100% { transform: translate3d(-3px, 1px, 0) rotate(-5.8deg) scale(1.025, .975); }
  38% { transform: translate3d(-9px, -3px, 0) rotate(-8.2deg) scale(.975, 1.045); }
  72% { transform: translate3d(-4px, -7px, 0) rotate(-2.2deg) scale(1.025, .985); }
}
@keyframes bims-pet-pushed-right {
  0%, 100% { transform: translate3d(3px, 1px, 0) rotate(5.8deg) scale(1.025, .975); }
  38% { transform: translate3d(9px, -3px, 0) rotate(8.2deg) scale(.975, 1.045); }
  72% { transform: translate3d(4px, -7px, 0) rotate(2.2deg) scale(1.025, .985); }
}
@keyframes bims-pet-pushed-up {
  0%, 100% { transform: translate3d(0, -3px, 0) rotate(-1.6deg) scale(1.015, .985); }
  38% { transform: translate3d(0, -10px, 0) rotate(-3deg) scale(.97, 1.055); }
  72% { transform: translate3d(0, -5px, 0) rotate(.8deg) scale(1.025, .98); }
}
@keyframes bims-pet-pushed-down {
  0%, 100% { transform: translate3d(0, 3px, 0) rotate(1.6deg) scale(1.025, .975); }
  38% { transform: translate3d(0, 8px, 0) rotate(3deg) scale(.97, 1.055); }
  72% { transform: translate3d(0, 4px, 0) rotate(-.8deg) scale(1.02, .985); }
}
@keyframes bims-pet-foot-cadence {
  from { transform: translate3d(-1px, 0, 0) rotate(-.45deg); }
  to { transform: translate3d(1px, -1px, 0) rotate(.45deg); }
}
@keyframes bims-pet-push-burst-left {
  0% { opacity: .1; transform: translate3d(8px, 0, 0) scaleX(-.48); }
  100% { opacity: .92; transform: translate3d(0, 0, 0) scaleX(-1); }
}
@keyframes bims-pet-push-burst-right {
  0% { opacity: .1; transform: translate3d(-8px, 0, 0) scaleX(.48); }
  100% { opacity: .92; transform: translate3d(0, 0, 0) scaleX(1); }
}
@keyframes bims-pet-push-burst-up {
  0% { opacity: .1; transform: translate3d(0, 8px, 0) rotate(90deg) scaleX(.48); }
  100% { opacity: .92; transform: translate3d(0, 0, 0) rotate(90deg) scaleX(1); }
}
@keyframes bims-pet-push-burst-down {
  0% { opacity: .1; transform: translate3d(0, -8px, 0) rotate(-90deg) scaleX(.48); }
  100% { opacity: .92; transform: translate3d(0, 0, 0) rotate(-90deg) scaleX(1); }
}
@keyframes bims-pet-target-hold {
  0%, 100% { transform: translate3d(0, 0, 0) rotate(0) scale(1); }
  45% { transform: translate3d(0, 2px, 0) rotate(-1.4deg) scale(1.025, .98); }
  70% { transform: translate3d(0, -2px, 0) rotate(1deg) scale(.99, 1.02); }
}
@keyframes bims-pet-target-reach {
  0%, 100% { transform: translate3d(var(--bims-pet-target-x), var(--bims-pet-target-y), 0) rotate(var(--bims-pet-target-rotate)); }
  52% { transform: translate3d(var(--bims-pet-target-x), calc(var(--bims-pet-target-y) - 3px), 0) rotate(var(--bims-pet-target-rotate)) scale(1.018, .986); }
}
@keyframes bims-pet-laugh-delight {
  0%, 100% { transform: translate3d(0, 0, 0) rotate(0); }
  35% { transform: translate3d(-2px, -5px, 0) rotate(-2.2deg); }
  68% { transform: translate3d(2px, -3px, 0) rotate(2deg); }
}
@keyframes bims-pet-caret { 0%, 48% { opacity: 1; } 49%, 100% { opacity: .08; } }
@keyframes bims-pet-alert-enter { from { opacity: 0; transform: translate3d(18px, 8px, 0) scale(.97); } to { opacity: 1; transform: translate3d(0, 0, 0) scale(1); } }

@media (max-width: 1024px) {
  body.bims-admin-shell .bims-pet-menu-toggle, .bims-pet-stage { display: none !important; }
}

@media print { .bims-pet-stage { display: none !important; } }

@media (prefers-reduced-motion: reduce) {
  .bims-pet-stage::before,
  .bims-pet-stage::after,
  .bims-pet-character,
  .bims-pet-character::before,
  .bims-pet-character::after,
  .bims-pet-stage .bims-toast,
  .bims-pet-typewriter::after { animation: none !important; }
}
