/* A small companion at the edge; no full-screen hit target or sound. */
.edgeBuddy{position:fixed;width:184px;height:120px;z-index:25;pointer-events:none;contain:layout style;isolation:isolate}
.edgeBuddy[hidden]{display:none!important}
.buddyActor{width:100%;height:100%;animation:buddyArrive .65s cubic-bezier(.2,.8,.25,1) both;transform-origin:50% 90%}
.edgeBuddy[data-side=left]{--buddy-entry:-65px}.edgeBuddy[data-side=right]{--buddy-entry:65px}
.buddyBubble{position:absolute;inset:0 4px auto;padding:9px 13px;border:1px solid #edccdb;border-radius:17px 17px 17px 5px;background:#fffdfcf5;color:#976078;font:600 11px/1.5 system-ui,sans-serif;box-shadow:0 4px 15px #96274c08;text-align:center;max-height:43px}
.edgeBuddy[data-side=right] .buddyBubble{border-radius:17px 17px 5px 17px}
.buddyRail{position:absolute;left:0;top:45px;width:64px;height:70px;transform:translateY(var(--buddy-step,0));transition:transform 2.8s ease-in-out}
.edgeBuddy[data-side=right] .buddyRail{left:auto;right:0}
.edgeAvatar.liveMascot{width:62px;height:62px;cursor:pointer;pointer-events:auto;touch-action:manipulation;filter:drop-shadow(0 4px 5px #bf2f5818)}
.edgeAvatar:focus-visible,.buddyDismiss:focus-visible{outline:2px solid #bc1855;outline-offset:3px}
.edgeAvatar .mascotGround{opacity:0}.edgeAvatar .mascotArt{overflow:visible}
.edgeBuddy[data-state=walking] .edgeAvatar .mascotBody{animation:buddyDrift 1.4s ease-in-out 2}
.edgeBuddy[data-state=leaving] .buddyActor{animation:buddyLeave .38s ease-in both}
.buddyDismiss{position:absolute;right:-4px;top:-17px;width:28px;height:28px;min-width:0;min-height:0;display:grid;place-items:center;padding:0;margin:0;border:1px solid #eed6e0;border-radius:50%;background:#fffafcec;color:#96687b;font:16px/1 system-ui;cursor:pointer;pointer-events:auto;opacity:0;transition:opacity .2s ease}
.edgeBuddy:hover .buddyDismiss,.edgeBuddy:focus-within .buddyDismiss{opacity:1}
.edgeAvatar[data-mood=annoyed] .mascotBody{animation:buddyHmph .48s ease-out both}
.edgeAvatar[data-mood=annoyed] .mascotSmile{opacity:0}
.edgeAvatar[data-mood=annoyed] .mascotQuietMouth{opacity:1;d:path('M58 83q6-3 12 0')}
.edgeAvatar[data-mood=annoyed] .mascotBrows{opacity:1}
.edgeAvatar[data-mood=annoyed] .browLeft{transform-origin:50px 53px;transform:translateY(2px) rotate(24deg)}
.edgeAvatar[data-mood=annoyed] .browRight{transform-origin:78px 53px;transform:translateY(2px) rotate(-24deg)}
.edgeAvatar[data-mood=annoyed] .mascotCheeks{fill:#f984a3}
.edgeAvatar[data-mood=annoyed] .mascotEarLeft{transform:rotate(-12deg)}
.edgeAvatar[data-mood=annoyed] .mascotEarRight{transform:rotate(12deg)}
.edgeBuddy[data-state=pouting] .buddyBubble{background:#fff1f5;color:#bd285b}
@keyframes buddyArrive{from{opacity:0;transform:translateX(var(--buddy-entry)) rotate(-3deg)}to{opacity:1;transform:none}}
@keyframes buddyLeave{to{opacity:0;transform:translateX(var(--buddy-entry))}}
@keyframes buddyDrift{0%,100%{transform:translateY(0) rotate(-1.5deg)}50%{transform:translateY(-2px) rotate(1.5deg)}}
@keyframes buddyHmph{0%,100%{transform:rotate(-5deg)}25%{transform:rotate(7deg)}55%{transform:rotate(-7deg)}80%{transform:rotate(1deg)}}
@media(hover:none){.buddyDismiss{opacity:1}}
@media(prefers-reduced-motion:reduce){.buddyActor,.edgeBuddy *{animation:none!important;transition:none!important}.buddyRail{transform:none}}
.appBackground .edgeBuddy{visibility:hidden}

/* Three brief entrances; each visit picks a different one. */
.edgeBuddy[data-entrance=peek]:not([data-state=leaving]) .buddyActor{animation:buddyPeek 1.2s cubic-bezier(.2,.75,.25,1) both}
.edgeBuddy[data-entrance=peek][data-state=arriving] .buddyBubble{animation:buddyMessage .3s .75s ease both}
.edgeBuddy[data-entrance=peek][data-state=arriving] .edgeAvatar .mascotBody{animation:buddyCurious 1.2s ease both}
.edgeBuddy[data-entrance=hop][data-state=arriving] .edgeAvatar .mascotBody{animation:buddyHop 1.15s ease both}
.edgeBuddy[data-entrance=wave][data-state=arriving] .buddyBubble{animation:buddyMessage .3s .25s ease both}
.edgeBuddy[data-state=leaving] .mascotEarRight{transform:rotate(-22deg)}
@keyframes buddyPeek{0%{opacity:0;transform:translateX(var(--buddy-entry))}32%{opacity:1;transform:translateX(calc(var(--buddy-entry)*.28)) rotate(-4deg)}50%{transform:translateX(calc(var(--buddy-entry)*.46)) rotate(1deg)}100%{opacity:1;transform:none}}
@keyframes buddyCurious{0%,100%{transform:none}35%{transform:rotate(7deg)}65%{transform:rotate(-3deg)}}
@keyframes buddyHop{0%,100%{transform:translateY(0)}24%{transform:translateY(-7px) rotate(-5deg)}46%{transform:translateY(1px) scaleY(.98)}65%{transform:translateY(-3px) rotate(3deg)}84%{transform:translateY(0)}}
@keyframes buddyMessage{from{opacity:0;transform:translateY(3px)}to{opacity:1;transform:none}}
