/* Learny's character (buddy.js): the Learny star with two eyes */
.learny-buddy { display: inline-block; width: var(--buddy-size, 32px); height: var(--buddy-size, 32px); line-height: 0; }
.learny-buddy svg { width: 100%; height: 100%; overflow: visible; }
.learny-buddy .buddy-star { --voice: 0; transform-origin: 32px 32px; transform: scale(calc(1 + var(--voice) * 0.16)); transition: transform 90ms linear; }
.learny-buddy .buddy-shape { fill: #5c9dff; filter: drop-shadow(0 0 calc(2px + var(--voice) * 6px) rgba(92, 157, 255, 0.55)); transition: fill 400ms ease; }
.learny-buddy .buddy-eye { fill: #0b1530; display: none; transform-box: fill-box; transform-origin: center; }
.learny-buddy .buddy-lid { fill: none; stroke: #0b1530; stroke-width: 1.7; stroke-linecap: round; }
.learny-buddy .buddy-eyes { transition: transform 400ms cubic-bezier(0.16, 1, 0.3, 1); }

/* idle: smiling shut eyes, a slow twinkle */
.learny-buddy[data-state="idle"] .buddy-star { animation: buddyTwinkle 4s ease-in-out infinite; }
/* sleeping: dim and still */
.learny-buddy[data-state="sleeping"] .buddy-shape { fill: #3a4f78; filter: none; }
.learny-buddy[data-state="sleeping"] .buddy-lid { transform: translateY(1.2px) scaleY(-0.6); transform-origin: 32px 31px; stroke: #1a2440; }
/* awake states: open eyes that blink */
.learny-buddy:is([data-state="listening"], [data-state="thinking"], [data-state="speaking"], [data-state="sad"]) .buddy-lid { display: none; }
.learny-buddy:is([data-state="listening"], [data-state="thinking"], [data-state="speaking"], [data-state="sad"]) .buddy-eye { display: block; animation: buddyBlink 4s ease-in-out infinite; }
.learny-buddy[data-state="listening"] .buddy-star { animation: buddyPerk 1.6s ease-in-out infinite; }
/* thinking: a quarter turn every second, binary flickering around it */
.learny-buddy[data-state="thinking"] .buddy-star { animation: buddySpin 4s linear infinite; }
.learny-buddy .buddy-bits { display: none; fill: #7fb3ff; font: 700 8px/1 ui-monospace, "SFMono-Regular", Consolas, monospace; }
.learny-buddy[data-state="thinking"] .buddy-bits { display: block; }
.learny-buddy.is-bits-leaving .buddy-bits { display: block; animation: buddyBitsOut 2s ease forwards; }
@keyframes buddyBitsOut { from { opacity: 1; } to { opacity: 0; } }
.learny-buddy[data-state="thinking"] .buddy-bits text { animation: buddyBit 1.2s ease-in-out infinite; }
.learny-buddy[data-state="thinking"] .buddy-bits text:nth-child(2) { animation-delay: 0.2s; }
.learny-buddy[data-state="thinking"] .buddy-bits text:nth-child(3) { animation-delay: 0.4s; }
.learny-buddy[data-state="thinking"] .buddy-bits text:nth-child(4) { animation-delay: 0.6s; }
.learny-buddy[data-state="thinking"] .buddy-bits text:nth-child(5) { animation-delay: 0.8s; }
.learny-buddy[data-state="thinking"] .buddy-bits text:nth-child(6) { animation-delay: 1s; }
@keyframes buddyBit { 0%, 100% { opacity: 0.1; } 50% { opacity: 0.95; } }
.learny-buddy[data-state="thinking"] .buddy-eyes { transform: translate(1.5px, -2.5px); }
.learny-buddy[data-state="sad"] .buddy-shape { fill: #6b7a99; filter: none; }
.learny-buddy[data-state="sad"] .buddy-eyes { transform: translateY(2.5px); }
.learny-buddy[data-state="sad"] .buddy-star { transform: rotate(-12deg) scale(0.94); }

/* Mouth: a smile for every mood except sad (frown); speaking opens it with the voice */
.learny-buddy .buddy-smile, .learny-buddy .buddy-frown { fill: none; stroke: #0b1530; stroke-width: 1.7; stroke-linecap: round; }
.learny-buddy .buddy-frown, .learny-buddy .buddy-talk { display: none; }
.learny-buddy .buddy-talk { fill: #0b1530; transform-box: fill-box; transform-origin: center; transform: scaleY(calc(0.35 + var(--voice) * 0.9)); }
.learny-buddy[data-state="sleeping"] .buddy-smile { stroke: #1a2440; transform: scale(0.7); transform-box: fill-box; transform-origin: center; }
.learny-buddy[data-state="thinking"] .buddy-smile { transform: translateX(1.5px) scale(0.75); transform-box: fill-box; transform-origin: center; }
.learny-buddy[data-state="listening"] .buddy-smile { transform: scale(1.12); transform-box: fill-box; transform-origin: center; }
.learny-buddy[data-state="speaking"] .buddy-smile { display: none; }
.learny-buddy[data-state="speaking"] .buddy-talk { display: block; }
.learny-buddy[data-state="sad"] .buddy-smile { display: none; }
.learny-buddy[data-state="sad"] .buddy-frown { display: block; }
.learny-buddy .buddy-mouths { transition: transform 400ms cubic-bezier(0.16, 1, 0.3, 1); }
.learny-buddy[data-state="sad"] .buddy-mouths { transform: translateY(1px); }

@keyframes buddyTwinkle { 0%, 100% { transform: scale(1) rotate(0deg); } 50% { transform: scale(1.05) rotate(4deg); } }
@keyframes buddyPerk { 0%, 100% { transform: scale(1.08); } 50% { transform: scale(1.13); } }
@keyframes buddySpin {
  0% { transform: rotate(0deg); animation-timing-function: cubic-bezier(0.65, 0, 0.35, 1); }
  13.75%, 25% { transform: rotate(90deg); animation-timing-function: cubic-bezier(0.65, 0, 0.35, 1); }
  38.75%, 50% { transform: rotate(180deg); animation-timing-function: cubic-bezier(0.65, 0, 0.35, 1); }
  63.75%, 75% { transform: rotate(270deg); animation-timing-function: cubic-bezier(0.65, 0, 0.35, 1); }
  88.75%, 100% { transform: rotate(360deg); }
} 55%, 100% { transform: rotate(90deg); } }
@keyframes buddyBlink { 0%, 93%, 100% { transform: scaleY(1); } 96% { transform: scaleY(0.12); } }
@media (prefers-reduced-motion: reduce) {
  .learny-buddy .buddy-star, .learny-buddy .buddy-eye, .learny-buddy .buddy-bits text { animation: none !important; }
}

/* Learny Pet (pet.js) */
.learny-pet {
  position: fixed; left: 0; top: 0; z-index: 30; display: block; padding: 0; border: 0; background: none; cursor: pointer;
  opacity: 0; pointer-events: none;
  transition: opacity 420ms ease, transform 700ms cubic-bezier(0.16, 1, 0.3, 1);
  -webkit-tap-highlight-color: transparent;
}
.learny-pet.is-shown { opacity: 1; pointer-events: auto; }
.learny-pet:focus-visible { outline: 2px solid #5c9dff; outline-offset: 4px; border-radius: 50%; }
.learny-pet .learny-buddy { display: block; transition: width 500ms ease, height 500ms ease; }
.learny-pet.is-hopping .learny-buddy { animation: petHop 700ms cubic-bezier(0.3, 1.6, 0.5, 1); }
/* Each place has its own little habit */
.learny-pet[data-place="home"] .learny-buddy { animation: petPeek 5s ease-in-out infinite; }
.learny-pet[data-place="chat"] .learny-buddy { animation: petFloat 6s ease-in-out infinite; }
.learny-pet[data-place="admin"] .learny-buddy { animation: petPatrol 7s ease-in-out infinite; }
.learny-pet.is-hopping[data-place] .learny-buddy { animation: petHop 700ms cubic-bezier(0.3, 1.6, 0.5, 1); }
@keyframes petHop { 0% { transform: translateY(0) scale(1); } 35% { transform: translateY(-14px) scale(1.12) rotate(-8deg); } 70% { transform: translateY(0) scale(0.94, 1.06); } 100% { transform: translateY(0) scale(1); } }
@keyframes petPeek { 0%, 100% { transform: translateY(0) rotate(0); } 45% { transform: translateY(-3px) rotate(-10deg); } 55% { transform: translateY(-3px) rotate(-10deg); } }
@keyframes petFloat { 0%, 100% { transform: translateY(0); } 50% { transform: translateY(-6px); } }
@keyframes petPatrol { 0%, 100% { transform: translateX(0); } 30% { transform: translateX(-6px) rotate(-6deg); } 65% { transform: translateX(6px) rotate(6deg); } }
@media (prefers-reduced-motion: reduce) { .learny-pet .learny-buddy { animation: none !important; } }

/* Learny Pet moods: z's while asleep, a cheer, snacks, and "full" */
.pet-zzz { position: absolute; top: -4px; right: -6px; display: none; pointer-events: none; color: #9cc5ff; font-weight: 700; }
.learny-pet.is-sleeping .pet-zzz { display: block; }
.pet-zzz i { position: absolute; right: 0; top: 0; font-style: normal; font-size: 13px; opacity: 0; animation: petZ 3.6s ease-in-out infinite; }
.pet-zzz i:nth-child(2) { font-size: 16px; animation-delay: 1.2s; }
.pet-zzz i:nth-child(3) { font-size: 19px; animation-delay: 2.4s; }
@keyframes petZ {
  0% { opacity: 0; transform: translate(0, 6px); }
  25% { opacity: 0.9; }
  100% { opacity: 0; transform: translate(14px, -26px); }
}
.pet-bit {
  position: absolute; left: 50%; top: 18%; z-index: 1; pointer-events: none; color: #ff7aa8; font-size: 15px; line-height: 1;
  opacity: 0; animation: petBit 1.3s ease-out var(--delay, 0ms) forwards;
}
@keyframes petBit {
  0% { opacity: 0; transform: translate(-50%, 0) scale(0.6); }
  20% { opacity: 1; }
  100% { opacity: 0; transform: translate(calc(-50% + var(--x, 0px)), -46px) scale(1.1); }
}
.learny-pet.is-cheering .pet-bit { color: #ffd66b; text-shadow: 0 0 8px rgba(255, 214, 107, 0.7); }
.learny-pet.is-cheering[data-place] .learny-buddy { animation: petCheer 900ms cubic-bezier(0.3, 1.6, 0.5, 1) 2; }
.learny-pet.is-full[data-place] .learny-buddy { animation: petFull 600ms ease-in-out; }
@keyframes petCheer {
  0%, 100% { transform: translateY(0) rotate(0); }
  35% { transform: translateY(-14px) rotate(-8deg); }
  65% { transform: translateY(-6px) rotate(8deg); }
}
@keyframes petFull {
  0%, 100% { transform: translateX(0); }
  20%, 60% { transform: translateX(-5px); }
  40%, 80% { transform: translateX(5px); }
}
@media (prefers-reduced-motion: reduce) {
  .pet-zzz i, .pet-bit { animation: none !important; }
  .learny-pet.is-sleeping .pet-zzz i:last-child { opacity: 0.8; }
}

/* Learny Pet acts (pet.js data-act) */
.learny-pet[data-act="waving"][data-place] .learny-buddy { animation: petWave 1.5s ease-in-out; transform-origin: 50% 90%; }
@keyframes petWave { 0%, 100% { transform: rotate(0); } 15%, 45%, 75% { transform: rotate(-14deg); } 30%, 60%, 90% { transform: rotate(14deg); } }
.learny-pet[data-act="blinking"] .buddy-eye { transform: scaleY(0.1); transform-box: fill-box; transform-origin: center; transition: transform 80ms ease; }
.learny-pet[data-act="bored"][data-place] .buddy-eyes { animation: petLookAround 3s ease-in-out; }
@keyframes petLookAround { 0%, 100% { transform: translateX(0); } 25%, 40% { transform: translateX(-2.2px); } 60%, 75% { transform: translateX(2.2px) translateY(-0.6px); } }
.learny-pet[data-act="bored"][data-place] .learny-buddy { animation: petSigh 3s ease-in-out; }
@keyframes petSigh { 0%, 100% { transform: scale(1); } 50% { transform: scale(0.96, 1.03) translateY(2px); } }
.learny-pet[data-act="yawning"][data-place] .learny-buddy { animation: petYawn 2.2s ease-in-out; transform-origin: 50% 100%; }
@keyframes petYawn { 0%, 100% { transform: scale(1) rotate(0); } 35%, 65% { transform: scale(0.94, 1.1) rotate(-6deg); } }
.learny-pet[data-act="yawning"] .buddy-talk { transform: scale(1.5, 1.9); transform-box: fill-box; transform-origin: center; }
.learny-pet[data-act="waking"][data-place] .learny-buddy { animation: petWake 1.7s cubic-bezier(0.3, 1.4, 0.5, 1); transform-origin: 50% 100%; }
@keyframes petWake { 0% { transform: scale(0.9, 0.85); filter: brightness(0.7); } 40% { transform: scale(0.95, 1.18); } 60% { transform: scale(1.05, 0.95); } 100% { transform: scale(1); filter: none; } }
.learny-pet[data-act="eating"][data-place] .learny-buddy { animation: petBites 1.5s ease-in-out; transform-origin: 50% 80%; }
@keyframes petBites {
  0%, 20%, 30%, 42%, 52%, 64%, 74%, 84%, 94%, 100% { transform: scale(1); }
  25%, 47%, 69%, 88% { transform: scale(1.07, 0.91); }
}
@keyframes petChomp { 0%, 100% { transform: scale(1); } 50% { transform: scale(1.08, 0.9); } }
.learny-pet[data-act="dizzy"][data-place] .learny-buddy { animation: petDizzy 1.8s ease-in-out; }
@keyframes petDizzy { 0% { transform: rotate(0); } 40% { transform: rotate(540deg); } 60% { transform: rotate(700deg) translateX(3px); } 80% { transform: rotate(710deg) translateX(-3px); } 100% { transform: rotate(720deg); } }
.learny-pet[data-act="dancing"][data-place] .learny-buddy { animation: petDance 0.8s ease-in-out 4; transform-origin: 50% 100%; }
@keyframes petDance { 0%, 100% { transform: translateX(0) rotate(0); } 25% { transform: translate(-6px, -8px) rotate(-12deg); } 50% { transform: translateX(0) scale(1.05, 0.95); } 75% { transform: translate(6px, -8px) rotate(12deg); } }
.learny-pet[data-act="sneezing"][data-place] .learny-buddy { animation: petSneeze 1.1s ease-in; }
@keyframes petSneeze { 0% { transform: rotate(0); } 50% { transform: rotate(-10deg) scale(1.06); } 62% { transform: rotate(14deg) translateX(5px) scale(0.92); } 100% { transform: rotate(0); } }
/* curious: perched on the message box, leaning over to snoop at what you
   type: a slow look left and right, eyes down at the text */
.learny-pet.is-peeking { transition: opacity 420ms ease, transform 900ms cubic-bezier(0.22, 1, 0.36, 1); }
.learny-pet[data-act="curious"][data-place] .learny-buddy { animation: petSnoop 3.2s ease-in-out infinite; transform-origin: 50% 100%; }
@keyframes petSnoop {
  0%, 100% { transform: rotate(7deg) translateY(2px); }
  30% { transform: rotate(13deg) translate(1px, 3px); }
  55% { transform: rotate(3deg) translateY(1px); }
  75% { transform: rotate(-4deg) translateY(2px); }
}
.learny-pet[data-act="curious"] .buddy-eyes { animation: petSnoopEyes 3.2s ease-in-out infinite; }
@keyframes petSnoopEyes {
  0%, 100% { transform: translate(0.8px, 2px); }
  30% { transform: translate(2px, 2.4px); }
  55% { transform: translate(0, 1.8px); }
  75% { transform: translate(-1.8px, 2.2px); }
}
.learny-pet[data-act="offline"][data-place] .learny-buddy { animation: petDroop 2.4s ease-in-out infinite; transform-origin: 50% 100%; filter: grayscale(0.6); }
@keyframes petDroop { 0%, 100% { transform: rotate(-4deg) scale(0.97); } 50% { transform: rotate(4deg) scale(0.97); } }
.learny-pet[data-act="offline"]::after { content: "…"; position: absolute; top: -10px; right: -2px; color: #9cc5ff; font-weight: 700; font-size: 18px; }
.learny-pet[data-act="startled"][data-place] .learny-buddy { animation: petStartle 0.9s cubic-bezier(0.3, 1.8, 0.5, 1); }
@keyframes petStartle { 0% { transform: translateY(0) scale(1); } 25% { transform: translateY(-14px) scale(1.12); } 100% { transform: translateY(0) scale(1); } }
.learny-pet[data-act="dancing"] .pet-bit { color: #b48cff; text-shadow: 0 0 8px rgba(180, 140, 255, 0.7); }
.learny-pet[data-act="dizzy"] .pet-bit { color: #ffd66b; }
.learny-pet[data-act="eating"] .pet-bit { color: #ffd66b; }
.learny-pet[data-act="waving"] .pet-bit { color: #9cc5ff; font-size: 13px; font-weight: 700; }
@media (prefers-reduced-motion: reduce) { .learny-pet[data-act] .learny-buddy { animation: none !important; } }

/* Learny Pet: tiny arms (only on the pet). Each arm turns at its shoulder;
   raising is + for the left arm and - for the right. */
.learny-buddy .buddy-arms { display: none; }
.learny-pet .learny-buddy .buddy-arms { display: block; }
.learny-buddy .buddy-arm { transform-box: view-box; transition: transform 420ms cubic-bezier(0.34, 1.4, 0.5, 1); }
.learny-buddy .buddy-arm-l { transform-origin: 21px 37px; }
.learny-buddy .buddy-arm-r { transform-origin: 43px 37px; }
/* A soft dark edge so the arms read against the dark page and the body */
.learny-buddy .buddy-arm-edge { fill: none; stroke: #16305e; stroke-width: 5.6; stroke-linecap: round; opacity: 0.85; }
.learny-buddy .buddy-arm-limb { fill: none; stroke: #8fc2ff; stroke-width: 3.6; stroke-linecap: round; transition: stroke 400ms ease; }
.learny-buddy .buddy-hand { fill: #b9dbff; stroke: #16305e; stroke-width: 1.1; transition: fill 400ms ease; }
.learny-buddy .buddy-hand-shine { fill: #fff; opacity: 0.8; }
.learny-pet .learny-buddy .buddy-arms { filter: drop-shadow(0 0 2px rgba(92, 157, 255, 0.45)); }
.learny-buddy[data-state="sleeping"] .buddy-arm-limb { stroke: #4f6896; }
.learny-buddy[data-state="sleeping"] .buddy-hand { fill: #627ba8; }
.learny-buddy[data-state="sleeping"] .buddy-hand-shine { opacity: 0.25; }
.learny-buddy[data-state="sad"] .buddy-arm-limb { stroke: #8f9cb8; }
.learny-buddy[data-state="sad"] .buddy-hand { fill: #a9b4ca; }

/* Moods */
.learny-pet[data-place] .learny-buddy[data-state="idle"] .buddy-arm-l { animation: armSwayL 3.2s ease-in-out infinite; }
.learny-pet[data-place] .learny-buddy[data-state="idle"] .buddy-arm-r { animation: armSwayR 3.2s ease-in-out infinite; }
@keyframes armSwayL { 0%, 100% { transform: rotate(-6deg); } 50% { transform: rotate(10deg); } }
@keyframes armSwayR { 0%, 100% { transform: rotate(6deg); } 50% { transform: rotate(-10deg); } }
.learny-pet[data-place] .learny-buddy[data-state="sleeping"] .buddy-arm-l { transform: rotate(-42deg); }
.learny-pet[data-place] .learny-buddy[data-state="sleeping"] .buddy-arm-r { transform: rotate(42deg); }
.learny-pet[data-place] .learny-buddy[data-state="listening"] .buddy-arm-l { animation: armPerkL 1.6s ease-in-out infinite; }
.learny-pet[data-place] .learny-buddy[data-state="listening"] .buddy-arm-r { animation: armPerkR 1.6s ease-in-out infinite; }
@keyframes armPerkL { 0%, 100% { transform: rotate(28deg); } 50% { transform: rotate(40deg); } }
@keyframes armPerkR { 0%, 100% { transform: rotate(-28deg); } 50% { transform: rotate(-40deg); } }
/* thinking: a hand at the chin, tapping */
.learny-pet[data-place] .learny-buddy[data-state="thinking"] .buddy-arm-r { animation: armChin 0.9s ease-in-out infinite; }
.learny-pet[data-place] .learny-buddy[data-state="thinking"] .buddy-arm-l { transform: rotate(-20deg); }
@keyframes armChin { 0%, 100% { transform: rotate(118deg) scale(0.62); } 50% { transform: rotate(128deg) scale(0.62); } }
/* speaking: little gestures */
.learny-pet[data-place] .learny-buddy[data-state="speaking"] .buddy-arm-l { animation: armTalkL 1s ease-in-out infinite; }
.learny-pet[data-place] .learny-buddy[data-state="speaking"] .buddy-arm-r { animation: armTalkR 1s ease-in-out infinite 0.5s; }
@keyframes armTalkL { 0%, 100% { transform: rotate(0deg); } 50% { transform: rotate(48deg); } }
@keyframes armTalkR { 0%, 100% { transform: rotate(0deg); } 50% { transform: rotate(-48deg); } }
.learny-pet[data-place] .learny-buddy[data-state="sad"] .buddy-arm-l { transform: rotate(-22deg); }
.learny-pet[data-place] .learny-buddy[data-state="sad"] .buddy-arm-r { transform: rotate(22deg); }

/* Acts (more specific than the moods) */
.learny-pet[data-place][data-act="waving"] .learny-buddy .buddy-arm-r { animation: armWave 0.38s ease-in-out 4 alternate; }
.learny-pet[data-place][data-act="waving"] .learny-buddy .buddy-arm-l { transform: rotate(-10deg); animation: none; }
@keyframes armWave { from { transform: rotate(-78deg); } to { transform: rotate(-114deg); } }
.learny-pet[data-place][data-act="eating"] .learny-buddy .buddy-arm-l { animation: armHoldL 1.5s forwards; }
.learny-pet[data-place][data-act="eating"] .learny-buddy .buddy-arm-r { animation: armHoldR 1.5s forwards; }
@keyframes armHoldL {
  0% { transform: rotate(-50deg) scale(0.75); animation-timing-function: cubic-bezier(0.34, 1.4, 0.5, 1); }
  8%, 88% { transform: rotate(-98deg) scale(0.56); animation-timing-function: ease-in-out; }
  100% { transform: rotate(-20deg); }
}
@keyframes armHoldR {
  0% { transform: rotate(50deg) scale(0.75); animation-timing-function: cubic-bezier(0.34, 1.4, 0.5, 1); }
  8%, 88% { transform: rotate(98deg) scale(0.56); animation-timing-function: ease-in-out; }
  100% { transform: rotate(20deg); }
}
/* The bread: only while eating. It pops in, then each bite (one per chomp)
   takes it down a size until it's gone. */
.learny-buddy .buddy-bread { display: none; transform-box: view-box; transform-origin: 32px 40.4px; }
.learny-pet[data-act="eating"] .learny-buddy .buddy-bread { display: block; animation: breadBites 1.5s forwards; }
@keyframes breadBites {
  0% { transform: scale(0.3) translateY(4px); opacity: 0; animation-timing-function: cubic-bezier(0.34, 1.5, 0.5, 1); }
  7%, 23% { transform: scale(1); opacity: 1; animation-timing-function: steps(1, end); }
  25%, 45% { transform: scale(0.76, 0.9); animation-timing-function: steps(1, end); }
  47%, 67% { transform: scale(0.52, 0.82); animation-timing-function: steps(1, end); }
  69%, 86% { transform: scale(0.28, 0.72); opacity: 1; animation-timing-function: steps(1, end); }
  88%, 100% { transform: scale(0); opacity: 0; }
}


.learny-pet[data-place][data-act="dancing"] .learny-buddy .buddy-arm-l { animation: armDanceL 0.4s ease-in-out 8 alternate; }
.learny-pet[data-place][data-act="dancing"] .learny-buddy .buddy-arm-r { animation: armDanceR 0.4s ease-in-out 8 alternate; }
@keyframes armDanceL { from { transform: rotate(108deg); } to { transform: rotate(40deg); } }
@keyframes armDanceR { from { transform: rotate(-40deg); } to { transform: rotate(-108deg); } }
.learny-pet[data-place][data-act="dizzy"] .learny-buddy .buddy-arm-l { animation: armFlailL 0.18s linear 10 alternate; }
.learny-pet[data-place][data-act="dizzy"] .learny-buddy .buddy-arm-r { animation: armFlailR 0.18s linear 10 alternate-reverse; }
@keyframes armFlailL { from { transform: rotate(-25deg); } to { transform: rotate(75deg); } }
@keyframes armFlailR { from { transform: rotate(30deg); } to { transform: rotate(-80deg); } }
.learny-pet[data-place][data-act="yawning"] .learny-buddy .buddy-arm-l { animation: armStretchL 2.2s ease-in-out; }
.learny-pet[data-place][data-act="yawning"] .learny-buddy .buddy-arm-r { animation: armStretchR 2.2s ease-in-out; }
@keyframes armStretchL { 0%, 100% { transform: rotate(0deg); } 35%, 65% { transform: rotate(112deg); } }
@keyframes armStretchR { 0%, 100% { transform: rotate(0deg); } 35%, 65% { transform: rotate(-112deg); } }
.learny-pet[data-place][data-act="waking"] .learny-buddy .buddy-arm-l { animation: armWakeL 1.7s ease-in-out; }
.learny-pet[data-place][data-act="waking"] .learny-buddy .buddy-arm-r { animation: armWakeR 1.7s ease-in-out; }
@keyframes armWakeL { 0% { transform: rotate(-42deg); } 45% { transform: rotate(114deg); } 70% { transform: rotate(88deg); } 100% { transform: rotate(10deg); } }
@keyframes armWakeR { 0% { transform: rotate(42deg); } 45% { transform: rotate(-114deg); } 70% { transform: rotate(-88deg); } 100% { transform: rotate(-10deg); } }
.learny-pet[data-place][data-act="bored"] .learny-buddy .buddy-arm-l { animation: armBoredL 3s ease-in-out; }
.learny-pet[data-place][data-act="bored"] .learny-buddy .buddy-arm-r { animation: armBoredR 3s ease-in-out; }
@keyframes armBoredL { 0%, 100% { transform: rotate(-18deg); } 50% { transform: rotate(-6deg); } }
@keyframes armBoredR { 0%, 100% { transform: rotate(18deg); } 30%, 70% { transform: rotate(124deg) scale(0.6); } }
.learny-pet[data-place][data-act="sneezing"] .learny-buddy .buddy-arm-l { animation: armSneeze 1.1s ease-in-out; }
@keyframes armSneeze { 0%, 100% { transform: rotate(0deg); } 40%, 70% { transform: rotate(-136deg) scale(0.62); } }
.learny-pet[data-place][data-act="curious"] .learny-buddy .buddy-arm-l { animation: armGripL 3.2s ease-in-out infinite; }
@keyframes armGripL { 0%, 100% { transform: rotate(-48deg) scale(0.86); } 50% { transform: rotate(-38deg) scale(0.86); } }
.learny-pet[data-place][data-act="curious"] .learny-buddy .buddy-arm-r { animation: armGripR 3.2s ease-in-out infinite; }
@keyframes armGripR { 0%, 100% { transform: rotate(38deg) scale(0.86); } 50% { transform: rotate(48deg) scale(0.86); } }
.learny-pet[data-place][data-act="offline"] .learny-buddy .buddy-arm-l { transform: rotate(-26deg); animation: none; }
.learny-pet[data-place][data-act="offline"] .learny-buddy .buddy-arm-r { transform: rotate(26deg); animation: none; }
.learny-pet[data-place][data-act="startled"] .learny-buddy .buddy-arm-l { animation: armStartleL 0.9s cubic-bezier(0.3, 1.8, 0.5, 1); }
.learny-pet[data-place][data-act="startled"] .learny-buddy .buddy-arm-r { animation: armStartleR 0.9s cubic-bezier(0.3, 1.8, 0.5, 1); }
@keyframes armStartleL { 0% { transform: rotate(0deg); } 25%, 60% { transform: rotate(104deg); } 100% { transform: rotate(0deg); } }
@keyframes armStartleR { 0% { transform: rotate(0deg); } 25%, 60% { transform: rotate(-104deg); } 100% { transform: rotate(0deg); } }
.learny-pet[data-place].is-cheering .learny-buddy .buddy-arm-l { animation: armCheerL 0.3s ease-in-out 6 alternate; }
.learny-pet[data-place].is-cheering .learny-buddy .buddy-arm-r { animation: armCheerR 0.3s ease-in-out 6 alternate; }
@keyframes armCheerL { from { transform: rotate(112deg); } to { transform: rotate(78deg); } }
@keyframes armCheerR { from { transform: rotate(-112deg); } to { transform: rotate(-78deg); } }
.learny-pet[data-place].is-hopping .learny-buddy .buddy-arm-l { animation: armHopL 0.7s ease-out; }
.learny-pet[data-place].is-hopping .learny-buddy .buddy-arm-r { animation: armHopR 0.7s ease-out; }
@keyframes armHopL { 0%, 100% { transform: rotate(0deg); } 40% { transform: rotate(95deg); } }
@keyframes armHopR { 0%, 100% { transform: rotate(0deg); } 40% { transform: rotate(-95deg); } }
@media (prefers-reduced-motion: reduce) { .learny-pet .buddy-arm { animation: none !important; } }
