.ws-actor{position:absolute;z-index:2;background:transparent;border:0;padding:0;cursor:pointer;transform-origin:50% 93%;touch-action:none;min-width:calc(44px / var(--ws-scale));min-height:calc(44px / var(--ws-scale))}
.ws-actor img{width:100%;height:100%;object-fit:contain;pointer-events:none;user-select:none}.ws-actor:disabled{cursor:default}.ws-editing .ws-actor{opacity:.28;pointer-events:none}
.ws-actor-label{position:absolute;left:50%;bottom:-10px;transform:translateX(-50%);padding:7px 12px;border-radius:10px;background:#fff7df;color:#163d52;font:800 24px/1.2 system-ui;white-space:nowrap;display:none}.ws-actor:focus-visible .ws-actor-label,.ws-actor:hover .ws-actor-label{display:block}
.duggle-portrait{position:relative;display:inline-block;overflow:hidden;vertical-align:middle;max-width:100%;transform-origin:50% 85%}.duggle-portrait img{display:block;width:100%;height:auto;transform:scale(1.08);transform-origin:50% 0;pointer-events:none}
@keyframes cast-notice{0%,100%{transform:translateY(0) rotate(0)}35%{transform:translateY(-5px) rotate(-2deg)}70%{transform:translateY(-2px) rotate(1deg)}}
@keyframes cast-think{0%,100%{transform:rotate(0)}45%{transform:rotate(-3deg)}70%{transform:rotate(-2deg)}}
@keyframes cast-success{0%,100%{transform:translateY(0) scale(1)}35%{transform:translateY(-8px) scale(1.025)}70%{transform:translateY(-2px) scale(1.01)}}
@keyframes cast-idle{0%,100%{transform:scale(1)}50%{transform:scale(1.012)}}
.cast-react{animation:cast-notice 1.2s ease 1}.cast-react[data-character-state=thinking],.cast-react[data-character-state=retry]{animation-name:cast-think}.cast-react[data-character-state=success],.cast-react[data-character-state=discovery]{animation-name:cast-success}.cast-react[data-character-state=idle]{animation-name:cast-idle}
@media(prefers-reduced-motion:reduce){.cast-react{animation:none!important}}
