.grumbly-visitor{position:fixed;right:clamp(10px,3vw,42px);bottom:0;width:180px;height:230px;z-index:50;pointer-events:none;overflow:visible;contain:layout style}
.grumbly-visitor button{position:absolute;inset:0;padding:0;border:0;background:none;cursor:pointer;pointer-events:auto;transform:translateY(245px);transform-origin:50% 95%;animation:grumbly-peek 12s cubic-bezier(.45,0,.2,1) infinite;will-change:transform;-webkit-tap-highlight-color:transparent}
.grumbly-visitor img{position:absolute;width:220px;height:220px;max-width:none;left:-20px;top:0;object-fit:contain;user-select:none;pointer-events:none;filter:drop-shadow(0 6px 2px #3e604020)}
.grumbly-visitor button:focus-visible{outline:2px dashed #648f7c;outline-offset:-24px;border-radius:45%}
.grumbly-visitor button::before,.grumbly-visitor button::after{content:'';position:absolute;width:4px;height:22px;background:#648f7c;border-radius:4px;opacity:0;top:33px;left:15px;transform:rotate(-26deg)}
.grumbly-visitor button::after{left:auto;right:12px;transform:rotate(26deg)}
.grumbly-visitor.startled button{animation:grumbly-startle 1.15s ease-in both}
.grumbly-visitor.startled button::before,.grumbly-visitor.startled button::after{animation:grumbly-gasp .35s ease-out both}
@keyframes grumbly-peek{0%,8%{transform:translateY(245px) rotate(0)}18%,25%{transform:translateY(113px) rotate(0)}31%{transform:translateY(103px) rotate(-9deg)}38%{transform:translateY(110px) rotate(8deg)}44%{transform:translateY(110px) rotate(0)}50%{transform:translateY(70px) scale(.98,1.03)}54%{transform:translateY(76px) scale(1.02,.98)}61%{transform:translateY(76px) rotate(-4deg)}67%,78%{transform:translateY(245px)}86%,91%{transform:translateY(123px) rotate(10deg)}100%{transform:translateY(245px) rotate(0)}}
@keyframes grumbly-startle{0%{transform:translateY(100px)}12%{transform:translateY(25px) rotate(-11deg) scale(.95,1.08)}24%{transform:translateY(30px) rotate(9deg)}36%{transform:translateY(46px) rotate(-7deg) scale(1.06,.94)}65%,100%{transform:translateY(250px) rotate(0) scale(1)}}
@keyframes grumbly-gasp{0%{opacity:0;scale:.5}45%{opacity:1;scale:1.1}100%{opacity:0;scale:1.2}}
@media(max-width:600px){.grumbly-visitor{right:12px;transform:scale(.72);transform-origin:bottom right}}
@media(prefers-reduced-motion:reduce){.grumbly-visitor button{animation:none;transform:translateY(125px)}.grumbly-visitor.startled button{animation:none;transform:translateY(245px)}.grumbly-visitor.startled button::before,.grumbly-visitor.startled button::after{animation:none}}
