/* One character family across room scenes, selectors, previews and chat. */
.paper-story-companion .paper-sleep{display:none}
.paper-story-companion .paper-awake{display:inline}
:is(.room-pet,.trial-companion)[data-activity=resting]>.paper-story-companion .paper-awake{display:none}
:is(.room-pet,.trial-companion)[data-activity=resting]>.paper-story-companion .paper-sleep{display:inline}
.paper-story-companion image{pointer-events:none}
.dash-companion-choices .cartoon-thumb{width:96px;height:96px}
#appCompanion .paper-story-companion .paper-awake{display:inline}
#appCompanion .paper-story-companion .paper-sleep{display:none}
.paper-story-companion .paper-step-a{animation:paper-step-a var(--pet-gait,650ms) steps(1,end) infinite}
.paper-story-companion .paper-step-b{animation:paper-step-b var(--pet-gait,650ms) steps(1,end) infinite}
.paper-story-travel{transform:scaleX(calc(var(--pet-facing,1)*-1))}
.room .paper-story-companion.animated-companion{animation:paper-walk-bob var(--pet-gait,650ms) ease-in-out infinite!important}
.room-pet:has(>.paper-story-companion)>.companion-sprite,.trial-companion:has(>.paper-story-companion)>.companion-sprite{display:none!important}
.room-pet:has(>.paper-story-companion)>:is(.cat-tail,.cat-head,.cat-body){display:none!important}
@keyframes paper-step-a{0%,100%{visibility:visible}50%{visibility:hidden}}
@keyframes paper-step-b{0%,100%{visibility:hidden}50%{visibility:visible}}
@keyframes paper-walk-bob{0%,50%,100%{transform:translateY(0)}25%,75%{transform:translateY(-1px)}}
@media(prefers-reduced-motion:reduce){.paper-story-companion .paper-step-a{animation:none;visibility:visible}.paper-story-companion .paper-step-b{animation:none;visibility:hidden}.room .paper-story-companion.animated-companion{animation:none!important}}
.collectible-companion{pointer-events:none}
.collectible-travel{width:100%;height:100%;transform:scaleX(var(--pet-facing,1))}
.collectible-travel>svg{width:100%;height:100%;overflow:hidden}
.companion-frame-viewport{overflow:hidden!important}
.room .collectible-travel>.animated-companion,.trial-room-view .collectible-travel>.animated-companion{animation:none!important}
.fable-walk-frame{visibility:hidden;animation:fable-walk-frames 1120ms steps(1,end) infinite;animation-delay:calc(var(--walk-frame)*140ms)}
@keyframes fable-walk-frames{0%{visibility:visible}12.5%,100%{visibility:hidden}}
.room-pet[data-activity=resting]>.collectible-companion{transform:none;animation:collectible-read-breathe 4s ease-in-out infinite}
.collectible-static-walk>.collectible-companion{display:block!important}
.collectible-portrait-travel{transform:scaleX(calc(var(--pet-facing,1)*-1))}
.collectible-portrait-travel>.collectible-companion{animation:collectible-walk-sway 700ms ease-in-out infinite!important;transform-origin:50% 90%}
@keyframes collectible-walk-sway{0%,50%,100%{transform:translateY(0) rotate(0)}25%{transform:translateY(-1px) rotate(-1deg)}75%{transform:translateY(-1px) rotate(1deg)}}
@keyframes collectible-read-breathe{0%,100%{translate:0 0}50%{translate:0 -1px}}
@media(prefers-reduced-motion:reduce){.fable-walk-frame{animation:none;visibility:hidden}.fable-walk-frame:first-child{visibility:visible}.collectible-portrait-travel>.collectible-companion{animation:none!important}.room-pet[data-activity=resting]>.collectible-companion{animation:none}}
/* Normalized companion sprites: fixed cells, independent poses, and a planted walk cycle. */
.companion-motion .companion-pose{display:none}
.companion-motion .companion-idle,.companion-motion .companion-walk{display:inline}
.companion-frame{visibility:hidden;animation:companion-frames 1080ms steps(1,end) infinite;animation-delay:calc(var(--companion-frame)*180ms)}
@keyframes companion-frames{0%{visibility:visible}16.6667%,100%{visibility:hidden}}
.companion-idle,.companion-read,.companion-sleep{--companion-duration:3600ms}
.companion-pose:not(.companion-walk) .companion-frame{animation-duration:var(--companion-duration,1080ms);animation-delay:calc(var(--companion-frame)*var(--companion-duration,1080ms)/6)}
.companion-travel{transform:scaleX(var(--pet-facing,1))}
.room .room-pet>.companion-motion{animation:none;transform:none;translate:none}
.room-pet[data-activity=greeting]>.companion-motion .companion-idle{display:none}
.room-pet[data-activity=greeting]>.companion-motion .companion-greet{display:inline}
.room-pet[data-activity=resting]>.companion-motion .companion-idle{display:none}
.room-pet[data-activity=resting]>.companion-motion .companion-read{display:inline}
.room-pet[data-activity=resting][data-spot=fireplace]>.companion-motion .companion-read{display:none}
.room-pet[data-activity=resting][data-spot=fireplace]>.companion-motion .companion-sleep{display:inline}
.room-pet[data-activity=resting][data-spot=chair]>.companion-motion .companion-sit{display:inline;animation:companion-sit-away 1080ms step-end forwards}
.room-pet[data-activity=resting][data-spot=chair]>.companion-motion .companion-read{animation:companion-read-after 1080ms step-end both}
@keyframes companion-sit-away{to{opacity:0}}
@keyframes companion-read-after{from{opacity:0}to{opacity:1}}
@media(prefers-reduced-motion:reduce){.companion-motion .companion-frame{animation:none;visibility:hidden}.companion-motion .companion-frame:first-child{visibility:visible}.room-pet[data-activity=resting][data-spot=chair]>.companion-motion .companion-sit{display:none}.room-pet[data-activity=resting][data-spot=chair]>.companion-motion .companion-read{animation:none}}
/* Quiet, infrequent expressions: each blink gets only a brief moment in a long loop. */
.companion-idle{--companion-duration:14000ms}
.companion-read{--companion-duration:18000ms}
.companion-sleep{--companion-duration:16000ms}
.companion-greet{--companion-duration:2400ms}
.companion-walk .companion-frame{animation-duration:1500ms;animation-delay:calc(var(--companion-frame)*250ms)}
.companion-idle .companion-frame,.companion-read .companion-frame{animation-name:companion-quiet-frame;animation-delay:0ms!important}
@keyframes companion-quiet-frame{0%,100%{visibility:hidden}}
.companion-idle .companion-frame:first-child,.companion-read .companion-frame:first-child{animation-name:companion-quiet-open}
.companion-idle .companion-frame:nth-child(2),.companion-read .companion-frame:nth-child(2){animation-name:companion-quiet-blink}
@keyframes companion-quiet-open{0%,48%,50%,100%{visibility:visible}48.01%,49.99%{visibility:hidden}}
@keyframes companion-quiet-blink{0%,48%,50%,100%{visibility:hidden}48.01%,49.99%{visibility:visible}}
:is(.room-pet,.trial-companion)[data-mood]>.companion-motion .companion-pose{display:none;animation:none}
:is(.room-pet,.trial-companion)[data-mood=idle]>.companion-motion .companion-idle,
:is(.room-pet,.trial-companion)[data-mood=read]>.companion-motion .companion-read,
:is(.room-pet,.trial-companion)[data-mood=sleep]>.companion-motion .companion-sleep,
:is(.room-pet,.trial-companion)[data-activity=greeting][data-mood]>.companion-motion .companion-greet{display:inline}
:is(.room-pet,.trial-companion)[data-activity=greeting][data-mood]>.companion-motion .companion-idle{display:none}
:is(.room-pet,.trial-companion)[data-mood=sleep]::after{content:'z  z  Z';position:absolute;left:55%;top:5%;font:600 17px Georgia,serif;letter-spacing:5px;color:#e9d9ff;text-shadow:0 1px 3px #39264d;pointer-events:none;animation:companion-dream 5s ease-out infinite}
@keyframes companion-dream{0%{opacity:0;transform:translate(0,8px) scale(.8)}30%{opacity:.85}100%{opacity:0;transform:translate(12px,-22px) scale(1.1)}}
.trial-room-view .trial-companion{touch-action:none;transition:left var(--pet-travel,0ms) linear,bottom var(--pet-travel,0ms) linear}
@media(prefers-reduced-motion:reduce){.companion-motion .companion-frame{animation:none!important;visibility:hidden!important}.companion-motion .companion-frame:first-child{visibility:visible!important}:is(.room-pet,.trial-companion)[data-mood=sleep]::after{animation:none}}
/* Match the small illustrated room: one screen size, independent of room dimensions. */
:root{--companion-room-size:clamp(56px,8vw,88px)}
.room .room-pet:has(>.companion-avatar),.trial-room-view .trial-companion:has(>.companion-avatar){width:var(--companion-room-size)!important;height:var(--companion-room-size)!important;aspect-ratio:1;padding:0}
:is(.room .room-pet,.trial-room-view .trial-companion)[data-activity=dragging]{transition:none!important;cursor:grabbing;user-select:none}
/* Override Large's legacy percentage sizing without enlarging the shared sprite. */
.room[data-space="grand"].is-large-trial #roomPet:has(>.companion-avatar){width:var(--companion-room-size)!important;height:var(--companion-room-size)!important;max-width:none!important;top:auto!important}

/* Travel direction and foreground layering are independent of the equipped outfit. */
.companion-directional-travel{transform:scaleX(var(--pet-facing,1))}
.companion-directional-travel :is(.companion-walk,.companion-walk-front,.companion-walk-back) .companion-frame{animation-duration:var(--companion-walk-duration,1500ms);animation-delay:calc(var(--companion-frame)*var(--companion-walk-duration,1500ms)/var(--companion-count,6))}
:is(.room-pet,.trial-companion)[data-walk-direction=front] .companion-directional-travel,
:is(.room-pet,.trial-companion)[data-walk-direction=back] .companion-directional-travel{transform:none}
:is(.room-pet,.trial-companion)[data-walk-direction=front] .companion-directional-travel .companion-walk,
:is(.room-pet,.trial-companion)[data-walk-direction=back] .companion-directional-travel .companion-walk{display:none}
:is(.room-pet,.trial-companion)[data-walk-direction=front] .companion-directional-travel .companion-walk-front,
:is(.room-pet,.trial-companion)[data-walk-direction=back] .companion-directional-travel .companion-walk-back{display:inline}
/* World props end at 35; shelving panels and menus remain above the companion. */
.room #roomPet:has(>.companion-avatar){z-index:36!important}
.trial-room-view .trial-pet-place{z-index:36!important}
