/* Avatar module styles — all classes av-. Tunables on :root or .av-wrap: --av-bottom (default 10px), --av-left (8px), --av-z (65). */
.av-wrap{--avh:96px;position:fixed;left:calc(var(--av-left,8px) + env(safe-area-inset-left));bottom:calc(var(--av-bottom,10px) + env(safe-area-inset-bottom));z-index:var(--av-z,65);width:calc(var(--avh)*.8);height:var(--avh);pointer-events:none;transition:opacity .35s,transform .35s,visibility .35s,width .35s,height .35s,bottom .35s;font-family:inherit}
.av-wrap.av-inline{position:relative;left:auto;bottom:auto;margin:0 auto}
.av-wrap.av-size-side{--avh:96px}
@media (min-width:1000px){.av-wrap.av-fixed.av-size-side{--avh:200px;left:16px;bottom:13vh}.av-wrap.av-inline.av-size-side{--avh:200px}}
.av-wrap.av-size-hero{--avh:min(300px,42vh)}
@media (max-width:699px){.av-wrap.av-size-hero{--avh:150px}}
.av-wrap.av-hidden{opacity:0;visibility:hidden;transform:translateY(24px)}
.av-wrap.av-hidden .av-char{pointer-events:none}
.av-char{width:100%;height:100%;pointer-events:auto;cursor:pointer;-webkit-tap-highlight-color:transparent;touch-action:manipulation;outline:none;border-radius:24px}
.av-char:focus-visible{box-shadow:0 0 0 3px rgba(30,136,229,.55)}
.av-svg{display:block;width:100%;height:100%;overflow:visible}
.av-svg *{transform-box:view-box}
/* bubble */
.av-bubble{position:absolute;left:0;bottom:calc(100% + 12px);width:max-content;max-width:min(260px,calc(100vw - 24px));box-sizing:border-box;background:#fff;color:#1f2937;border:2px solid #dbeafe;border-radius:18px;padding:10px 15px;font:inherit;font-size:17px;line-height:1.6;font-weight:600;text-align:right;direction:rtl;box-shadow:0 8px 24px rgba(15,23,42,.18);opacity:0;visibility:hidden;transform:translateY(8px) scale(.9);transform-origin:20% 100%;transition:opacity .25s,transform .25s,visibility .25s;pointer-events:none;overflow-wrap:anywhere}
.av-bubble:after{content:"";position:absolute;left:calc(var(--avh)*.4 - 10px);bottom:-10px;width:16px;height:16px;background:#fff;border-right:2px solid #dbeafe;border-bottom:2px solid #dbeafe;transform:rotate(45deg)}
.av-bubble-on .av-bubble{opacity:1;visibility:visible;transform:none}
.av-size-hero .av-bubble,.av-size-side .av-bubble{font-size:18px}
/* rig: groups rotate around their own local origin (each sits inside a translate()) */
.av-arm,.av-fore,.av-hand,.av-eye,.av-pupil,.av-brow,.av-head,.av-jump,.av-breath,.av-tb,.av-pony{transform-origin:0 0}
.av-arm{--a:6deg;--f:-4deg;transform:rotate(var(--a));transition:transform .45s cubic-bezier(.34,1.4,.64,1)}
.av-fore{transform:rotate(var(--f));transition:transform .45s cubic-bezier(.34,1.4,.64,1)}
.av-hand{transform:rotate(calc((var(--a) + var(--f)) * -1));transition:transform .45s cubic-bezier(.34,1.4,.64,1)}
.av-eye{transition:transform .08s}
.av-pupil{transition:transform .3s}
.av-brow{transition:transform .3s}
.av-head{transition:transform .4s}
.av-h,.av-m,.av-ec,.av-spark,.av-dots{display:none}
.av-h-fist,.av-eo{display:inline}
.av-blink .av-eye{transform:scaleY(.1)}
/* mouths */
[data-mouth=smile] .av-m-smile,[data-mouth=grin] .av-m-grin,[data-mouth=open] .av-m-open,[data-mouth=o] .av-m-o,[data-mouth=e] .av-m-e,[data-mouth=flat] .av-m-flat{display:inline}
/* idle life */
.av-breath{animation:av-breath 3.2s ease-in-out infinite alternate}
@keyframes av-breath{from{transform:scale(1,1)}to{transform:scale(1.015,1.03) translateY(-1px)}}
.av-pony{animation:av-pony 2.6s ease-in-out infinite alternate}
@keyframes av-pony{from{transform:rotate(-2deg)}to{transform:rotate(3deg)}}
.av-talking .av-tb{animation:av-tb .32s ease-in-out infinite alternate}
@keyframes av-tb{from{transform:translateY(0) rotate(-.6deg)}to{transform:translateY(-2.5px) rotate(.6deg)}}
.av-boop .av-char{animation:av-boop .5s ease}
@keyframes av-boop{0%{transform:scale(1)}30%{transform:scale(1.08,.92)}60%{transform:scale(.95,1.06)}100%{transform:scale(1)}}
/* poses */
[data-pose=wave] .av-head{transform:rotate(-5deg)}
[data-pose=wave] .av-arm-r .av-h-fist,[data-pose=happy] .av-h-fist,[data-pose=encourage] .av-arm-r .av-h-fist,[data-pose=point] .av-arm-r .av-h-fist{display:none}
[data-pose=wave] .av-arm-r .av-h-open,[data-pose=happy] .av-h-open,[data-pose=encourage] .av-arm-r .av-h-thumb,[data-pose=point] .av-arm-r .av-h-point{display:inline}
[data-pose=wave] .av-arm-r .av-fore{animation:av-wave .36s ease-in-out .3s 6 alternate}
@keyframes av-wave{from{transform:rotate(calc(var(--f) - 18deg))}to{transform:rotate(calc(var(--f) + 22deg))}}
[data-pose=happy] .av-jump{animation:av-jump .55s cubic-bezier(.3,0,.5,1) 3}
@keyframes av-jump{0%,100%{transform:translateY(0) scale(1,1)}12%{transform:translateY(0) scale(1.06,.92)}45%{transform:translateY(-26px) scale(.97,1.04)}}
[data-pose=happy] .av-shadow{animation:av-shadow .55s cubic-bezier(.3,0,.5,1) 3;transform-box:fill-box;transform-origin:center}
@keyframes av-shadow{45%{transform:scale(.7);opacity:.08}}
[data-pose=happy] .av-ec{display:inline}
[data-pose=happy] .av-eo{display:none}
[data-pose=happy] .av-brow{transform:translateY(-4px)}
[data-pose=happy] .av-spark{display:inline}
[data-pose=happy] .av-spark path{animation:av-spark .7s ease-out infinite alternate;transform-box:fill-box;transform-origin:center}
@keyframes av-spark{from{opacity:.2;scale:.6}to{opacity:1;scale:1.15}}
[data-pose=happy] .av-lt{animation:av-glow .5s steps(2) 5}
@keyframes av-glow{50%{filter:brightness(1.35)}}
[data-pose=encourage] .av-eye-l .av-eo{display:none}
[data-pose=encourage] .av-eye-l .av-ec{display:inline}
[data-pose=encourage] .av-brow{transform:translateY(-2px)}
[data-pose=encourage] .av-head{transform:rotate(4deg)}
[data-pose=encourage] .av-lt-g{animation:av-glow .6s steps(2) 3}
[data-pose=point] .av-pupil{transform:translate(2.6px,.5px)}
[data-pose=point] .av-brow{transform:translateY(-3px)}
[data-pose=point] .av-head{transform:rotate(3deg)}
[data-pose=think] .av-pupil{transform:translate(2px,-3px)}
[data-pose=think] .av-brow-r{transform:translateY(-5px) rotate(-8deg)}
[data-pose=think] .av-brow-l{transform:translateY(1px) rotate(6deg)}
[data-pose=think] .av-head{transform:rotate(-4deg)}
[data-pose=think] .av-dots{display:inline;fill:#fff;stroke:#90a4ae;stroke-width:2}
[data-pose=think] .av-dots circle{animation:av-dot 1.2s ease-in-out infinite;opacity:0}
[data-pose=think] .av-dots circle:nth-child(2){animation-delay:.2s}
[data-pose=think] .av-dots circle:nth-child(3){animation-delay:.4s}
@keyframes av-dot{0%{opacity:0}30%,80%{opacity:1}100%{opacity:0}}
/* per-look arm angles (solved per rig) */
.av-wrap[data-look=nouri][data-pose=wave] .av-arm-r{--a:131.3deg;--f:27.1deg}
.av-wrap[data-look=nouri][data-pose=happy] .av-arm-l{--a:129.7deg;--f:27.1deg}
.av-wrap[data-look=nouri][data-pose=happy] .av-arm-r{--a:129.7deg;--f:27.1deg}
.av-wrap[data-look=nouri][data-pose=encourage] .av-arm-r{--a:38.1deg;--f:126.1deg}
.av-wrap[data-look=nouri][data-pose=point] .av-arm-r{--a:85.7deg;--f:92.0deg}
.av-wrap[data-look=nouri][data-pose=think] .av-arm-l{--a:-35.4deg;--f:-69.9deg}
.av-wrap[data-look=boy][data-pose=wave] .av-arm-r{--a:140.6deg;--f:21.3deg}
.av-wrap[data-look=boy][data-pose=happy] .av-arm-l{--a:139.1deg;--f:21.3deg}
.av-wrap[data-look=boy][data-pose=happy] .av-arm-r{--a:139.1deg;--f:21.3deg}
.av-wrap[data-look=boy][data-pose=encourage] .av-arm-r{--a:41.9deg;--f:128.3deg}
.av-wrap[data-look=boy][data-pose=point] .av-arm-r{--a:56.1deg;--f:74.4deg}
.av-wrap[data-look=boy][data-pose=think] .av-arm-l{--a:-86.8deg;--f:-116.9deg}
.av-wrap[data-look=girl][data-pose=wave] .av-arm-r{--a:140.6deg;--f:21.3deg}
.av-wrap[data-look=girl][data-pose=happy] .av-arm-l{--a:139.1deg;--f:21.3deg}
.av-wrap[data-look=girl][data-pose=happy] .av-arm-r{--a:139.1deg;--f:21.3deg}
.av-wrap[data-look=girl][data-pose=encourage] .av-arm-r{--a:41.9deg;--f:128.3deg}
.av-wrap[data-look=girl][data-pose=point] .av-arm-r{--a:56.1deg;--f:74.4deg}
.av-wrap[data-look=girl][data-pose=think] .av-arm-l{--a:-86.8deg;--f:-116.9deg}
/* reduced motion: still poses, no bouncing */
.av-rm .av-breath,.av-rm .av-pony,.av-rm.av-talking .av-tb,.av-rm[data-pose] .av-jump,.av-rm[data-pose] .av-shadow,.av-rm[data-pose] .av-lt,.av-rm[data-pose] .av-arm-r .av-fore,.av-rm.av-boop .av-char{animation:none}
.av-rm .av-arm,.av-rm .av-fore,.av-rm .av-hand{transition:transform .25s ease}
.av-rm [data-pose] .av-spark path,.av-rm[data-pose] .av-spark path{animation:none;opacity:1}
.av-rm[data-pose=think] .av-dots circle{animation:none;opacity:1}
.av-rm .av-bubble{transition:opacity .2s,visibility .2s;transform:none}
@media print{.av-wrap{display:none!important}}
