/* ============================================================
   AOX TOWN — キャラクター・リグ v2（かわいい3頭身・表情19種・個性ある動き）
   構造: .rig > .rb(.p-pose) > [.sh .hb .leg×2 .arm×2 .torso .head(.hr .fc(.br .ey .ck .mo) ) .fx .acc .blk .pil] + .zz + .say
   制御: data-m(メンバー) data-x(表情) data-idle data-sleep data-react data-wake data-prop data-hs(髪型)
   ============================================================ */
.rig{position:relative;width:44px;height:62px;--skin:#f6d0b0;--hair:#222;--top:#e5483f;--bottom:#2d3550;--shoes:#fff;
  --ink:#2b2858;--cheek:#ff8fa3;--bcol:color-mix(in srgb,var(--hair) 85%,#000);
  --wk-dur:.58s;--amp:28deg;--aamp:22deg;--bob:3px;--lean:2deg;--sway:2.5deg;--roll:1.5deg;--gx:0px;--gy:0px;
  --ew:5px;--eh:7px;--brl:0deg;--brr:0deg;--bry:0px;--cko:0;--mw:7px;--mh:3px;
  transition:scale .18s ease}
.rb{position:absolute;inset:0;transform-origin:50% 100%}
.rig i,.rig u,.rig s,.rig b{position:absolute;display:block;text-decoration:none;font-style:normal}
.rig .sh{left:6px;bottom:-3px;width:32px;height:8px;border-radius:50%;background:rgba(35,38,82,.22)}
.rig.flip{scale:-1 1}

/* ---- からだ ---- */
.rig .head{left:6px;top:0;width:32px;height:29px;border-radius:46% 46% 43% 43%/52% 52% 46% 46%;background:var(--skin);z-index:4;transform-origin:50% 88%;
  box-shadow:inset 0 -3px 0 rgba(120,60,40,.08)}
.rig .head::before,.rig .head::after{content:"";position:absolute;top:14px;width:5px;height:7px;border-radius:50%;background:var(--skin);z-index:-1}
.rig .head::before{left:-2px}.rig .head::after{right:-2px}
.rig .torso{left:12px;top:27px;width:20px;height:17px;border-radius:8px 8px 6px 6px;background:var(--top);z-index:3;box-shadow:inset 0 -4px 0 rgba(0,0,0,.09)}
.rig .torso::before{content:"";position:absolute;left:7px;top:0;width:6px;height:4px;border-radius:0 0 5px 5px;background:var(--skin);opacity:.95}
.rig .arm{top:29px;width:6px;height:16px;border-radius:4px;background:var(--top);transform-origin:50% 3px;z-index:2;box-shadow:inset -1px 0 0 rgba(0,0,0,.08)}
.rig .arm::after{content:"";position:absolute;left:0;bottom:-3px;width:6px;height:6px;border-radius:50%;background:var(--skin)}
.rig .arm.l{left:6.5px}.rig .arm.r{left:31.5px}
.rig .leg{top:42px;width:8px;height:14px;border-radius:3px;background:var(--bottom);transform-origin:50% 2px;z-index:1}
.rig .leg b{left:-1.5px;bottom:-4px;width:11px;height:6px;border-radius:5px 6px 3px 3px;background:var(--shoes);box-shadow:inset 0 -2px 0 rgba(0,0,0,.12)}
.rig .leg.l{left:13px}.rig .leg.r{left:23px}
.rig .acc{left:8px;top:-9px;width:28px;font-size:14px;line-height:1;text-align:center;z-index:7}

/* ---- 髪（髪型は data-hs。前髪はclip-pathで形を変える）---- */
.rig .hb{left:3px;top:-3px;width:38px;height:26px;border-radius:50% 50% 38% 38%;background:var(--hair);z-index:3;transform-origin:50% 0}
.rig .hr{left:-3px;top:-7px;width:38px;height:23px;background:var(--hair);z-index:5;transform-origin:50% 100%;
  clip-path:polygon(0 100%,0 40%,6% 16%,26% 3%,50% 0,74% 3%,94% 16%,100% 40%,100% 100%,91% 100%,89% 58%,72% 44%,56% 58%,40% 46%,24% 54%,13% 62%,10% 100%)}
.rig .hr::after{content:"";position:absolute;left:20%;top:12%;width:32%;height:16%;border-radius:50%;background:rgba(255,255,255,.2);rotate:-12deg}
/* TENMA: つんつんヤンチャ */
.rig[data-hs=spiky] .hr{top:-10px;height:26px;clip-path:polygon(0 100%,0 52%,5% 34%,9% 42%,15% 12%,25% 36%,34% 2%,45% 32%,57% 6%,67% 34%,78% 10%,84% 38%,94% 30%,100% 54%,100% 100%,91% 100%,90% 66%,76% 54%,65% 66%,52% 52%,39% 66%,27% 54%,14% 64%,10% 100%)}
.rig[data-hs=spiky] .hb{height:19px;top:-2px}
/* MANATO: ふんわり長め＋流し前髪 */
.rig[data-hs=soft] .hr{clip-path:polygon(0 100%,0 38%,6% 17%,24% 4%,50% 0,76% 4%,94% 17%,100% 38%,100% 100%,92% 100%,92% 66%,82% 54%,64% 40%,42% 54%,22% 68%,12% 82%,9% 100%)}
.rig[data-hs=soft] .hb{left:1px;width:42px;height:34px;top:-3px;border-radius:50% 50% 46% 46%}
/* SHOTA: 切れ長のシャープな前髪 */
.rig[data-hs=sharp] .hr{clip-path:polygon(0 100%,0 38%,6% 14%,26% 3%,52% 0,78% 5%,95% 20%,100% 42%,100% 100%,92% 100%,91% 60%,84% 54%,70% 68%,60% 46%,46% 62%,32% 44%,18% 58%,10% 72%,8% 100%)}
.rig[data-hs=sharp] .hb{height:21px}
/* KEI: きちんとセンター分け・丸いボブ */
.rig[data-hs=neat] .hr{clip-path:polygon(0 100%,0 38%,6% 15%,26% 3%,50% 0,74% 3%,94% 15%,100% 38%,100% 100%,92% 100%,90% 64%,76% 52%,58% 58%,50% 36%,42% 58%,24% 52%,10% 64%,8% 100%)}
.rig[data-hs=neat] .hb{left:1px;width:42px;height:31px;border-radius:50% 50% 44% 44%}
.rig .hr,.rig .hb{animation:hairIdle 4.2s ease-in-out infinite}
@keyframes hairIdle{0%,100%{rotate:0deg}50%{rotate:1.2deg}}

/* ---- 顔パーツ ---- */
.rig .fc{left:0;right:0;top:11px;height:18px;z-index:2;transition:translate .2s}
.rig .br{top:-1.5px;width:8px;height:2.4px;border-radius:2px;background:var(--bcol);z-index:6;transition:rotate .15s,translate .15s}
.rig .br.l{left:5px;rotate:var(--brl);translate:0 var(--bry)}
.rig .br.r{right:5px;rotate:var(--brr);translate:0 var(--bry)}
.rig .ey{top:3px;width:var(--ew);height:var(--eh);border-radius:50% 50% 50% 50%/56% 56% 44% 44%;background:var(--ink);translate:var(--gx) var(--gy);transition:height .12s,width .12s,translate .14s}
.rig .ey.l{left:7.5px}.rig .ey.r{right:7.5px}
.rig .ey::after{content:"";position:absolute;left:1px;top:1px;width:2px;height:2px;border-radius:50%;background:#fff}
.rig.blink .ey{scale:1 .12}
.rig .ck{top:8.5px;width:7px;height:4px;border-radius:50%;background:var(--cheek);opacity:var(--cko);transition:opacity .2s}
.rig .ck.l{left:1.5px}.rig .ck.r{right:1.5px}
.rig .mo{left:50%;top:11px;width:var(--mw);height:var(--mh);margin-left:calc(var(--mw)/-2);border:0;border-bottom:2px solid var(--ink);border-radius:0 0 50% 50%;transition:width .12s,height .12s}
.rig .mo::after{content:"";position:absolute;left:18%;right:18%;bottom:0;height:0;border-radius:50% 50% 0 0;background:#f2677a}

/* メンバーごとの顔の個性 */
.rig[data-m=TENMA]{--ew:5.8px;--eh:7.6px;--mw:8px;--brl:-3deg;--brr:3deg;--bry:-1px}
.rig[data-m=TENMA] .br{height:2.8px;width:8.6px}
.rig[data-m=TENMA] .ey::after{width:2.5px;height:2.5px}
.rig[data-m=MANATO]{--ew:5px;--eh:6.6px;--brl:-6deg;--brr:6deg}
.rig[data-m=SHOTA]{--ew:4.8px;--eh:5.4px;--mw:6px;--brl:4deg;--brr:-4deg;--bry:1.4px}
.rig[data-m=SHOTA] .ey{border-radius:28% 28% 50% 50%/30% 30% 70% 70%}
.rig[data-m=KEI]{--ew:5.4px;--eh:7.4px;--brl:-4deg;--brr:4deg;--bry:-.6px;--cko:.18}

/* ---- 表情（data-x）---- */
/* 閉じ目(上向きアーチ ^ ^) */
.rig:is([data-x=bigSmile],[data-x=laugh],[data-x=laughClosedEyes],[data-x=eatingHappy],[data-x=singing]) .ey,
.rig[data-x=wink] .ey.r{height:4px;width:6.4px;top:4px;background:transparent;border:0;border-top:2.5px solid var(--ink);border-radius:50% 50% 0 0}
.rig:is([data-x=bigSmile],[data-x=laugh],[data-x=laughClosedEyes],[data-x=eatingHappy],[data-x=singing]) .ey::after,.rig[data-x=wink] .ey.r::after{display:none}
/* 眠り目(下向きアーチ ‿) */
.rig[data-x=sleep] .ey{height:3px;width:6.4px;top:5px;background:transparent;border:0;border-bottom:2.2px solid var(--ink);border-radius:0 0 50% 50%}
.rig[data-x=sleep] .ey::after{display:none}
/* とろん目(半月) */
.rig:is([data-x=sleepy],[data-x=annoyed],[data-x=relieved]) .ey{height:3.6px;top:5px;border-radius:0 0 55% 55%}
.rig:is([data-x=sleepy],[data-x=annoyed],[data-x=relieved]) .ey::after{display:none}
.rig[data-x=relieved] .ey{height:4.4px;width:6px}
.rig[data-x=sleepy] .ey{top:6px}
/* ぎゅっ目 */
.rig[data-x=eatingBad] .ey{height:2.2px;width:6.4px;border-radius:2px;top:5px}
.rig[data-x=eatingBad] .ey.l{rotate:16deg}.rig[data-x=eatingBad] .ey.r{rotate:-16deg}
.rig[data-x=eatingBad] .ey::after{display:none}
.rig[data-x=surprised] .ey{height:9px;width:7px;top:1.5px}
.rig[data-x=surprised] .ey::after{width:3px;height:3px}
.rig[data-x=angry] .ey{height:4.6px;top:4px}
.rig[data-x=sad] .ey{height:7.4px;top:4px}
.rig[data-x=embarrassed] .ey{height:5px;width:4.6px;top:4.4px}
.rig[data-x=thinking] .ey{height:6.4px}

/* 眉 */
.rig[data-x=happy]{--bry:-1px}
.rig:is([data-x=bigSmile],[data-x=laugh],[data-x=laughClosedEyes],[data-x=wink],[data-x=eatingHappy],[data-x=singing]){--bry:-2px;--brl:-8deg;--brr:8deg}
.rig[data-x=surprised]{--bry:-3.4px;--brl:-4deg;--brr:4deg}
.rig:is([data-x=sad],[data-x=eatingBad]){--brl:-18deg;--brr:18deg;--bry:.6px}
.rig[data-x=angry]{--brl:20deg;--brr:-20deg;--bry:1.6px}
.rig[data-x=annoyed]{--brl:7deg;--brr:-7deg;--bry:2px}
.rig[data-x=embarrassed]{--brl:-12deg;--brr:12deg;--bry:.6px}
.rig:is([data-x=sleepy],[data-x=sleep]){--brl:-9deg;--brr:9deg;--bry:2.4px}
.rig[data-x=relieved]{--brl:-12deg;--brr:12deg;--bry:1.6px}
.rig[data-x=thinking]{--brl:3deg;--brr:-14deg;--bry:-.6px}
.rig[data-x=thinking] .br.r{translate:0 -2.4px}
.rig[data-x=wink] .br.r{translate:0 1.8px}

/* 頬の赤み */
.rig:is([data-x=happy]){--cko:.38}
.rig:is([data-x=bigSmile],[data-x=laugh],[data-x=laughClosedEyes],[data-x=wink],[data-x=eatingHappy],[data-x=singing],[data-x=relieved]){--cko:.75}
.rig[data-x=embarrassed]{--cko:1}
.rig[data-x=embarrassed] .ck{width:9px;height:5px}
.rig:is([data-x=sleep],[data-x=sleepy]){--cko:.45}

/* 口 */
.rig:is([data-x=happy],[data-x=wink]) {--mw:9px;--mh:4px}
.rig[data-x=neutral]{--mw:6px;--mh:2px}
.rig:is([data-x=bigSmile],[data-x=laugh],[data-x=laughClosedEyes]) .mo{--mw:11px;--mh:7px;border:0;background:var(--ink);border-radius:0 0 100% 100%/0 0 100% 100%}
.rig:is([data-x=bigSmile],[data-x=laugh],[data-x=laughClosedEyes]) .mo::after{height:3px}
.rig[data-x=laugh] .mo,.rig[data-x=laughClosedEyes] .mo{--mw:12px;--mh:8px}
.rig[data-x=wink] .mo{--mw:9px;--mh:5px;border:0;background:var(--ink);border-radius:0 0 100% 100%}
.rig[data-x=wink] .mo::after{height:2px}
.rig[data-x=surprised] .mo{--mw:6px;--mh:7px;border:2px solid var(--ink);border-radius:50%;top:11.5px}
.rig:is([data-x=sad],[data-x=thinking]) .mo{--mw:7px;--mh:3px;border-bottom:0;border-top:2px solid var(--ink);border-radius:50% 50% 0 0;top:13px}
.rig[data-x=thinking] .mo{--mw:5px;translate:3px 0;border-top-width:1.8px;--mh:1px;top:13px;border-radius:2px}
.rig[data-x=angry] .mo{--mw:9px;--mh:3.4px;border:1.6px solid var(--ink);background:#fff;border-radius:2px;top:12.4px}
.rig[data-x=annoyed] .mo{--mw:6px;--mh:1px;border-bottom:0;border-top:2px solid var(--ink);border-radius:2px;top:13px;rotate:-4deg}
.rig:is([data-x=embarrassed],[data-x=eatingBad]) .mo{--mw:10px;--mh:4px;border:0;border-radius:0;top:12px;
  background:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 4'%3E%3Cpath d='M0.6 2 Q2 0.2 3.4 2 T6.2 2 T9 2 T11.6 2' fill='none' stroke='%232b2858' stroke-width='1.5' stroke-linecap='round'/%3E%3C/svg%3E") center/contain no-repeat}
.rig:is([data-x=sleepy]) .mo{--mw:4px;--mh:4px;border:2px solid var(--ink);border-radius:50%;top:12px}
.rig[data-x=sleep] .mo{--mw:3px;--mh:3px;border:2px solid var(--ink);border-radius:50%;top:12.4px;opacity:.85}
.rig[data-x=relieved] .mo{--mw:7px;--mh:3px}
.rig[data-x=eatingHappy] .mo{--mw:8px;--mh:5px;border:0;background:var(--ink);border-radius:0 0 100% 100%}
.rig[data-x=eatingHappy] .mo::after{height:2px}
.rig[data-x=singing] .mo{--mw:8px;--mh:7px;border:0;background:var(--ink);border-radius:46% 46% 54% 54%}
.rig[data-x=singing] .mo::after{height:3px;left:22%;right:22%}
.rig[data-x=talking] .mo{--mw:6px;--mh:4px;border:0;background:var(--ink);border-radius:0 0 100% 100%;animation:talkMo .36s ease-in-out infinite}
@keyframes talkMo{0%,100%{scale:1 .35}35%{scale:1 1}70%{scale:.9 .6}}
.rig[data-x=singing] .mo{animation:singMo .5s ease-in-out infinite}
@keyframes singMo{0%,100%{scale:1 .7}50%{scale:1.1 1.1}}
.rig:is([data-x=eatingHappy],[data-x=eatingBad]) .mo{transform-origin:50% 0}
.p-eat .mo{animation:chew .46s ease-in-out infinite}
@keyframes chew{0%,100%{scale:1 1}50%{scale:.88 .5}}
.rig[data-x=sleepy] .mo{animation:yawnMo 3.4s ease-in-out infinite}
@keyframes yawnMo{0%,60%,100%{scale:.7 .7}75%{scale:1.5 1.7}}
.rig[data-x=sleep] .mo{animation:breathMo 2.6s ease-in-out infinite}
@keyframes breathMo{50%{scale:1.2 1.3}}
/* 顔色 */
.rig[data-x=angry] .head{background:color-mix(in srgb,var(--skin) 80%,#ff4d3d)}
.rig[data-x=eatingBad] .head{background:color-mix(in srgb,var(--skin) 62%,#9fcf6b)}
.rig[data-x=embarrassed] .head{background:color-mix(in srgb,var(--skin) 88%,#ff7a7a)}
.rig[data-x=laughClosedEyes] .head,.rig[data-x=laugh] .head{animation:headLaugh .32s ease-in-out infinite}
@keyframes headLaugh{0%,100%{rotate:-4deg}50%{rotate:4deg;translate:0 -1px}}

/* 顔エフェクト（汗・音符・ハート・びっくり・眠気・イライラ・キラキラ） */
.rig .fx{left:26px;top:-8px;width:22px;height:22px;z-index:8;pointer-events:none}
.rig .fx b{position:absolute;font-size:11px;line-height:1;white-space:nowrap}
.rig .fx .k-sweat{left:2px;top:3px;animation:fxSweat 1.5s ease-in infinite}
.rig .fx .k-note{left:6px;top:-2px;animation:fxNote 1.6s ease-out infinite}
.rig .fx .k-heart{left:4px;top:-4px;animation:fxHeart 1.4s ease-out infinite}
.rig .fx .k-bang{left:-14px;top:-10px;font-size:13px;animation:fxPop .5s ease-out 1}
.rig .fx .k-zzz{left:6px;top:-6px;font-size:10px;animation:fxZ 2.4s ease-in-out infinite}
.rig .fx .k-vein{left:-34px;top:-3px;font-size:11px;animation:fxVein .5s ease-in-out infinite alternate}
.rig .fx .k-sparkle{left:-6px;top:-8px;animation:fxSpark 1.1s ease-in-out infinite}
.rig .fx .k-dots{left:6px;top:0;font-weight:900;color:var(--ink);animation:fxDots 1.4s steps(4) infinite;font-size:12px}
@keyframes fxSweat{0%{translate:0 -2px;opacity:0}20%{opacity:1}100%{translate:1px 12px;opacity:0}}
@keyframes fxNote{0%{translate:0 6px;opacity:0;rotate:-10deg}25%{opacity:1}100%{translate:8px -14px;opacity:0;rotate:12deg}}
@keyframes fxHeart{0%{translate:0 6px;scale:.4;opacity:0}30%{opacity:1;scale:1.1}100%{translate:3px -14px;scale:1;opacity:0}}
@keyframes fxPop{from{scale:.2;opacity:0}60%{scale:1.4}to{scale:1;opacity:1}}
@keyframes fxZ{0%{translate:0 6px;opacity:0}30%{opacity:1}100%{translate:8px -12px;opacity:0}}
@keyframes fxVein{from{scale:.85;rotate:-8deg}to{scale:1.2;rotate:8deg}}
@keyframes fxSpark{0%,100%{scale:.3;opacity:0}50%{scale:1.15;opacity:1;rotate:20deg}}
@keyframes fxDots{from{clip-path:inset(0 100% 0 0)}to{clip-path:inset(0 0 0 0)}}

/* ---- ポーズ ---- */
.p-idle{animation:idleBreath 3.2s ease-in-out infinite}
@keyframes idleBreath{0%,100%{translate:0 0;scale:1 1}50%{translate:0 -1px;scale:1 1.012}}

/* 歩き：脚と腕が逆位相・上下バウンド・頭の揺れ・前傾 */
.p-walk{transform:rotate(var(--lean));animation:wBody var(--wk-dur) ease-in-out infinite}
@keyframes wBody{0%,100%{translate:0 0;rotate:calc(var(--roll)*-1)}25%{translate:0 calc(var(--bob)*-1)}50%{translate:0 0;rotate:var(--roll)}75%{translate:0 calc(var(--bob)*-1)}}
.p-walk .leg.l,.p-walk .arm.r{animation:swL var(--wk-dur) ease-in-out infinite}
.p-walk .leg.r,.p-walk .arm.l{animation:swL var(--wk-dur) ease-in-out calc(var(--wk-dur)*-.5) infinite}   /* 逆位相（半周期ずらす） */
.p-walk .arm{--amp:var(--aamp)}
@keyframes swL{0%,100%{rotate:calc(var(--amp)*-1)}50%{rotate:var(--amp)}}
.p-walk .head{animation:wHead calc(var(--wk-dur)*2) ease-in-out infinite}
@keyframes wHead{0%,100%{rotate:calc(var(--sway)*-1);translate:0 0}25%{translate:0 .8px}50%{rotate:var(--sway)}75%{translate:0 .8px}}
.p-walk .hr,.p-walk .hb{animation:hairWalk var(--wk-dur) ease-in-out infinite}
@keyframes hairWalk{0%,100%{translate:0 0}25%,75%{translate:0 1.4px}50%{translate:0 0}}
.p-walk .torso{animation:wTor calc(var(--wk-dur)*2) ease-in-out infinite;transform-origin:50% 0}
@keyframes wTor{0%,100%{rotate:calc(var(--roll)*-1.4)}50%{rotate:calc(var(--roll)*1.4)}}
.rig[data-skip="1"] .p-walk .leg.l{animation-name:swSkip}
@keyframes swSkip{0%,100%{rotate:calc(var(--amp)*-1)}50%{rotate:calc(var(--amp)*1.2)}}
.rig[data-m=KEI] .p-walk .fc{animation:glanceF 3.4s ease-in-out infinite}
@keyframes glanceF{0%,35%,100%{translate:0 0}45%,60%{translate:-2px 0}70%,85%{translate:2px 0}}
.rig[data-m=SHOTA] .p-walk .arm{--amp:10deg}   /* 腕はあまり振らない(だるそう) */
.rig[data-m=MANATO] .p-walk .head{animation-name:wHeadBeat}
@keyframes wHeadBeat{0%,100%{rotate:-5deg}25%{translate:0 -1px}50%{rotate:5deg}75%{translate:0 -1px}}
/* 立ち止まる前の減速 */
.rig.slow{--wk-dur:1s;--amp:12deg;--aamp:9deg;--bob:1px}

/* 座り（正面向き・足は短く、手は膝の上） */
.p-sit,.p-tv,.p-game,.p-phone{translate:0 6px}
.p-sit .leg,.p-tv .leg,.p-game .leg,.p-phone .leg{height:8px}
.p-sit .leg.l,.p-tv .leg.l,.p-game .leg.l{rotate:5deg}.p-sit .leg.r,.p-tv .leg.r,.p-game .leg.r{rotate:-5deg}
.p-sit .arm.l{rotate:-12deg}.p-sit .arm.r{rotate:12deg}
.p-sit{animation:sitBreath 3.4s ease-in-out infinite}
@keyframes sitBreath{50%{translate:0 5px}}
.p-sit .head{animation:sitHead 5s ease-in-out infinite}
@keyframes sitHead{0%,100%{rotate:0deg}30%{rotate:3deg}60%{rotate:-3deg}}
.p-tv .arm.l{rotate:-16deg}.p-tv .arm.r{rotate:16deg}
.p-tv .head{rotate:-3deg;animation:tvHead 6s ease-in-out infinite}
@keyframes tvHead{0%,100%{translate:0 0}40%{translate:0 -1.5px;rotate:3deg}70%{translate:0 .5px}}
.p-game{animation:gameBob 1.4s ease-in-out infinite}
@keyframes gameBob{50%{translate:0 4px}}
.p-game .arm.l,.p-game .arm.r{rotate:0deg;animation:thumbs .3s ease-in-out infinite alternate}
.p-game .arm.l{rotate:-52deg}.p-game .arm.r{rotate:52deg;animation-delay:.15s}
@keyframes thumbs{to{translate:0 -1.4px}}
.p-game .arm.r::before{content:"🎮";position:absolute;left:-12px;bottom:-9px;font-size:11px}
.p-game .head{rotate:4deg;animation:gameHead 2.2s ease-in-out infinite}
@keyframes gameHead{50%{rotate:-4deg;translate:1px 0}}
/* スマホ */
.p-phone .arm.r{rotate:150deg}
.p-phone .arm.r::before{content:"";position:absolute;left:-3px;bottom:3px;width:8px;height:12px;border-radius:2px;background:#232652;border:1px solid #9aa2cf;box-shadow:0 0 5px rgba(150,200,255,.7)}
.p-phone .arm.l{rotate:-14deg}
.p-phone .head{rotate:6deg;animation:phoneHead 3s ease-in-out infinite}
@keyframes phoneHead{40%{rotate:9deg;translate:0 1px}}
.rig:is([data-pose=phone],[data-pose=game]){--gy:2px}

/* 食べる：手元を見る→ひとくち→もぐもぐ */
.p-eat{animation:eatBody 3.6s ease-in-out infinite}
@keyframes eatBody{0%,100%{translate:0 0}20%{translate:0 1px}}
.p-eat .head{animation:eatHead 3.6s ease-in-out infinite}
@keyframes eatHead{0%,12%{rotate:7deg;translate:0 1px}28%{rotate:-4deg}40%,100%{rotate:0deg;translate:0 0}50%{rotate:2deg}60%{rotate:-1.5deg}70%{rotate:2deg}}
.p-eat .arm.r{animation:eatArm 3.6s ease-in-out infinite}
@keyframes eatArm{0%,10%{rotate:-26deg}30%,42%{rotate:152deg}60%{rotate:30deg}78%,100%{rotate:-26deg}}
.p-eat .arm.l{rotate:-34deg}
.p-eat .arm.r::before{content:var(--prop,"🥄");position:absolute;left:-3px;bottom:-7px;font-size:11px;line-height:1}
.rig[data-pose=eat]{--gy:1.6px}
.p-eat .fc{animation:chewFace .46s ease-in-out infinite}
@keyframes chewFace{50%{translate:0 .8px}}
/* 話す：相づち・身振り */
.p-talk{animation:talkBody 2.6s ease-in-out infinite}
@keyframes talkBody{0%,100%{rotate:0deg}30%{rotate:1.6deg}65%{rotate:-1.2deg}}
.p-talk .arm.r{animation:gest 1.7s ease-in-out infinite}
@keyframes gest{0%,100%{rotate:-8deg}30%{rotate:-62deg}55%{rotate:-36deg}}
.p-talk .head{animation:nodTalk 1.5s ease-in-out infinite}
@keyframes nodTalk{0%,100%{rotate:0deg;translate:0 0}25%{rotate:3deg;translate:0 1px}60%{rotate:-2deg}}
.rig[data-react=nod] .p-talk .head{animation:nodBig .7s ease-in-out infinite}
@keyframes nodBig{0%,100%{rotate:0deg;translate:0 0}50%{rotate:9deg;translate:0 2px}}
.rig[data-react=gesture] .p-talk .arm.l{animation:gest 1.1s ease-in-out infinite reverse}
.rig[data-react=gesture] .p-talk .arm.r{animation:gest .9s ease-in-out infinite}
.rig[data-react=laugh] .p-talk{animation:shake .34s ease-in-out infinite}
.rig[data-react=tsukkomi] .p-talk .arm.r{animation:chop .5s ease-in-out infinite}
@keyframes chop{0%,100%{rotate:-30deg}45%{rotate:-100deg}60%{rotate:-60deg}}
.rig[data-react=tsukkomi] .p-talk .head{animation:none;rotate:-6deg;translate:-1px 1px}
.rig[data-react=trouble] .p-talk .head{animation:none;rotate:12deg}
.rig[data-react=trouble] .p-talk .arm.r{animation:none;rotate:150deg}
.rig[data-react=trouble] .p-talk .arm.r::after{translate:1px 0}
.rig[data-react=surprise] .p-talk{animation:hop .5s ease-out 1}
.rig[data-react=surprise] .p-talk .arm{animation:none;rotate:-110deg}
.rig[data-react=surprise] .p-talk .arm.l{rotate:110deg}
.rig[data-react=smile] .p-talk .head{animation:none;rotate:4deg}
/* 笑い・泣き・怒り・びっくり */
.p-laugh{animation:shake .34s ease-in-out infinite}
.p-laugh .arm.l{animation:gest .34s ease-in-out -.17s infinite}.p-laugh .arm.r{animation:gest .34s infinite}
@keyframes shake{0%,100%{translate:0 0;rotate:-3deg}50%{translate:0 -4px;rotate:3deg}}
.p-cry .head{rotate:12deg;translate:0 2px}
.p-cry .arm.r{rotate:150deg}
.p-cry{animation:cryBody 2s ease-in-out infinite}
@keyframes cryBody{50%{translate:0 1.5px}}
.p-angry{animation:shake .22s linear infinite}.p-angry .arm.l{rotate:-18deg}.p-angry .arm.r{rotate:18deg}
.p-surprised{animation:hop .5s ease-out 1}.p-surprised .arm.l{rotate:100deg}.p-surprised .arm.r{rotate:-100deg}
@keyframes hop{40%{translate:0 -10px}}
.p-shudder{animation:shake .12s linear infinite}
.p-jump{animation:jump .45s ease-out 3}.p-jump .arm.l{rotate:150deg}.p-jump .arm.r{rotate:-150deg}
@keyframes jump{40%{translate:0 -16px}}
/* 料理・そうじ */
.p-cook .arm.r{animation:stir .5s ease-in-out infinite}.p-cook .arm.l{rotate:-34deg}
@keyframes stir{0%,100%{rotate:50deg}50%{rotate:20deg}}
.p-cook .head{rotate:5deg;animation:sitHead 3s ease-in-out infinite}
/* ダンス・うた・ストレッチ・運動 */
.p-dance{animation:dj .46s ease-in-out infinite}
@keyframes dj{0%,100%{translate:0 0;rotate:-3deg}50%{translate:0 -6px;rotate:3deg}}
.p-dance .arm.l{animation:da .46s ease-in-out infinite}.p-dance .arm.r{animation:da .46s ease-in-out -.23s infinite}
@keyframes da{0%,100%{rotate:150deg}50%{rotate:40deg}}
.p-dance .leg.l{animation:swL .46s infinite;--amp:20deg}.p-dance .leg.r{animation:swL .46s ease-in-out -.23s infinite;--amp:20deg}
.p-dance .head{animation:wHead .92s ease-in-out infinite;--sway:6deg}
.rig[data-m=TENMA] .p-dance{animation-duration:.38s}
.rig[data-m=TENMA] .p-dance .arm.l,.rig[data-m=TENMA] .p-dance .arm.r{animation-duration:.38s}
.p-sing{animation:sway 1.6s ease-in-out infinite}
@keyframes sway{0%,100%{rotate:-2.5deg}50%{rotate:2.5deg}}
.p-sing .arm.r{rotate:-135deg}
.p-sing .arm.r::before{content:"🎤";position:absolute;left:-7px;top:-13px;font-size:12px}
.p-sing .arm.l{rotate:20deg}
.p-sing .head{animation:singHead 1.6s ease-in-out infinite}
@keyframes singHead{0%,100%{rotate:3deg}50%{rotate:-3deg;translate:0 -1px}}
.rig[data-m=SHOTA] .p-sing{animation:rapBeat .5s ease-in-out infinite}
@keyframes rapBeat{0%,100%{translate:0 0;rotate:0deg}50%{translate:0 2px;rotate:-2deg}}
.rig[data-m=SHOTA] .p-sing .arm.l{animation:pointA 1s ease-in-out infinite}
@keyframes pointA{0%,100%{rotate:-60deg}50%{rotate:-100deg}}
.rig[data-m=SHOTA] .p-sing .head{animation:nodBig .5s ease-in-out infinite;--sway:0}
.rig[data-m=MANATO] .p-sing{animation-duration:2.2s}
.p-stretch{animation:stretchB 3s ease-in-out infinite}
@keyframes stretchB{0%,100%{rotate:0deg}50%{rotate:-3deg;scale:1 1.04}}
.p-stretch .arm.l{rotate:160deg}.p-stretch .arm.r{rotate:-160deg}
.p-stretch .head{rotate:-5deg}
.p-workout{animation:squat .8s ease-in-out infinite}
@keyframes squat{0%,100%{translate:0 0}50%{translate:0 5px}}
.p-workout .arm.l{animation:pump .8s ease-in-out infinite}.p-workout .arm.r{animation:pump .8s ease-in-out -.4s infinite}
@keyframes pump{0%,100%{rotate:-30deg}50%{rotate:-140deg}}
.p-workout .leg.l{rotate:10deg}.p-workout .leg.r{rotate:-10deg}
.p-look .head{animation:lookH 4s ease-in-out infinite}
@keyframes lookH{0%,15%,100%{rotate:0deg}30%,45%{rotate:-12deg}60%,75%{rotate:12deg}}
.p-look .ey{animation:lookE 4s ease-in-out infinite}
@keyframes lookE{0%,15%,100%{translate:0 0}30%,45%{translate:-2px 0}60%,75%{translate:2px 0}}
.p-look{animation:idleBreath 3s ease-in-out infinite}
/* おふろ */
.p-bath{clip-path:inset(0 0 38% 0)}
.p-bath::after{content:"🫧";position:absolute;left:-2px;top:30px;font-size:16px;animation:fxZ 3s ease-in-out infinite}
.p-bath .head{animation:sitHead 4s ease-in-out infinite}

/* ---- 待機バリエーション（棒立ち禁止）---- */
.rig[data-idle=shift] .p-idle{animation:idShift 3.4s ease-in-out infinite}
@keyframes idShift{0%,100%{rotate:-1.6deg;translate:-1px 0}50%{rotate:1.6deg;translate:1px 0}}
.rig[data-idle=shift] .p-idle .leg.l{rotate:4deg}.rig[data-idle=shift] .p-idle .leg.r{rotate:-1deg}
.rig[data-idle=look] .p-idle .head{animation:lookH 3.8s ease-in-out infinite}
.rig[data-idle=look] .p-idle .ey{animation:lookE 3.8s ease-in-out infinite}
.rig[data-idle=tilt] .p-idle .head{rotate:9deg;translate:0 1px}
.rig[data-idle=fold] .p-idle .arm.l{rotate:-40deg;translate:3px 1px}.rig[data-idle=fold] .p-idle .arm.r{rotate:40deg;translate:-3px 1px}
.rig[data-idle=pocket] .p-idle .arm.l{rotate:12deg;scale:1 .62}.rig[data-idle=pocket] .p-idle .arm.r{rotate:-12deg;scale:1 .62}
.rig[data-idle=phone] .p-idle .arm.r{rotate:150deg}
.rig[data-idle=phone] .p-idle .arm.r::before{content:"";position:absolute;left:-3px;bottom:3px;width:8px;height:12px;border-radius:2px;background:#232652;border:1px solid #9aa2cf;box-shadow:0 0 5px rgba(150,200,255,.7)}
.rig[data-idle=phone] .p-idle .head{rotate:7deg;translate:0 1px}
.rig[data-idle=phone]{--gy:2px}
.rig[data-idle=yawn] .p-idle .arm.r{rotate:152deg}
.rig[data-idle=yawn] .p-idle .head{rotate:-6deg;translate:0 -1px}
.rig[data-idle=yawn] .p-idle{animation:idStretch 2.6s ease-in-out infinite}
.rig[data-idle=sway] .p-idle{animation:sway 2.4s ease-in-out infinite}
.rig[data-idle=stretch] .p-idle{animation:stretchB 3s ease-in-out infinite}
.rig[data-idle=stretch] .p-idle .arm.l{rotate:160deg}.rig[data-idle=stretch] .p-idle .arm.r{rotate:-160deg}
.rig[data-idle=hop] .p-idle{animation:idHop 1.1s ease-out infinite}
@keyframes idHop{0%,55%,100%{translate:0 0}28%{translate:0 -6px}}
.rig[data-idle=hop] .p-idle .arm.l{rotate:-24deg}.rig[data-idle=hop] .p-idle .arm.r{rotate:24deg}
.rig[data-idle=hum] .p-idle{animation:sway 1.8s ease-in-out infinite}
.rig[data-idle=hum] .p-idle .head{animation:singHead 1.8s ease-in-out infinite}
.rig[data-idle=pat] .p-idle .arm.l{rotate:-52deg;translate:4px 3px}.rig[data-idle=pat] .p-idle .arm.r{rotate:52deg;translate:-4px 3px}
.rig[data-idle=pat] .p-idle{animation:idPat 1s ease-in-out infinite}
@keyframes idPat{50%{translate:0 -2px}}
@keyframes idStretch{0%,100%{scale:1 1}50%{scale:1 1.03}}

/* ---- 寝る（仰向け/横向き/うつ伏せ/変な寝相・布団・枕・寝息）---- */
.rig .blk,.rig .pil{display:none}
.rig .zz{display:none;left:-38px;top:30px;width:30px;height:30px;z-index:9;pointer-events:none}
.rig .zz b{position:absolute;font-weight:900;color:#fff;text-shadow:0 1px 0 rgba(35,38,82,.55),0 0 3px rgba(35,38,82,.4);font-size:10px;animation:zzF 2.8s ease-in-out infinite;opacity:0}
.rig .zz b:nth-child(2){animation-delay:.9s;font-size:12px}.rig .zz b:nth-child(3){animation-delay:1.8s;font-size:14px}
@keyframes zzF{0%{translate:0 8px;opacity:0}25%{opacity:1}100%{translate:-10px -22px;opacity:0}}
.rig[data-pose=sleep] .zz{display:block}
.p-sleep{--slp:translate(30px,-3px) rotate(-90deg);transform:var(--slp);animation:slpBreath 2.8s ease-in-out infinite}
@keyframes slpBreath{0%,100%{scale:1 1}50%{scale:1.025 1.045}}
.p-sleep .head{rotate:90deg;translate:-2px 4px}
.p-sleep .arm.l{rotate:6deg}.p-sleep .arm.r{rotate:-6deg}
.p-sleep .fc{translate:0 0}
.rig[data-pose=sleep] .blk,.rig[data-pose=sleep] .pil{display:block}
.rig .blk{left:7px;top:30px;width:32px;height:30px;border-radius:9px 9px 6px 6px;z-index:8;background:color-mix(in srgb,var(--top) 55%,#fff);box-shadow:inset 0 5px 0 rgba(255,255,255,.4),inset 0 -3px 0 rgba(0,0,0,.08)}
.rig .blk::after{content:"";position:absolute;left:5px;top:12px;width:8px;height:8px;border-radius:50%;background:rgba(255,255,255,.35);box-shadow:12px 6px 0 rgba(255,255,255,.3)}
.rig .pil{left:-1px;top:-3px;width:46px;height:23px;border-radius:12px;z-index:2;background:#fffaf0;box-shadow:inset 0 -3px 0 rgba(120,100,80,.18),0 2px 0 rgba(0,0,0,.08)}
/* 仰向け */
.rig[data-sleep=back] .p-sleep{--slp:translate(30px,-3px) rotate(-90deg)}
/* 横向き：体をすこし細く・膝を曲げて手は枕の下 */
.rig[data-sleep=side] .p-sleep{--slp:translate(30px,-1px) rotate(-90deg) scaleY(.86)}
.rig[data-sleep=side] .p-sleep .head{rotate:96deg;translate:-2px 5px}
.rig[data-sleep=side] .p-sleep .fc{translate:-2px 0;scale:.84 1}
.rig[data-sleep=side] .p-sleep .leg.l{rotate:36deg}.rig[data-sleep=side] .p-sleep .leg.r{rotate:62deg}
.rig[data-sleep=side] .p-sleep .arm.l{rotate:-150deg}
.rig[data-sleep=side] .blk{top:27px;height:33px}
/* うつ伏せ気味：枕に顔を埋める */
.rig[data-sleep=belly] .p-sleep{--slp:translate(30px,-1px) rotate(-90deg) scaleY(.94)}
.rig[data-sleep=belly] .p-sleep .head{rotate:62deg;translate:0 6px}
.rig[data-sleep=belly] .p-sleep .fc{translate:4px 1px;scale:.72 1;opacity:.8}
.rig[data-sleep=belly] .pil{z-index:6;top:8px;height:15px}
.rig[data-sleep=belly] .p-sleep .arm.l{rotate:160deg}.rig[data-sleep=belly] .p-sleep .arm.r{rotate:-160deg}
.rig[data-sleep=belly] .blk{top:34px;height:26px}
/* たまに変な寝相 */
.rig[data-sleep=weird] .p-sleep{--slp:translate(30px,-3px) rotate(-96deg)}
.rig[data-sleep=weird] .p-sleep .head{rotate:60deg;translate:-2px 5px}
.rig[data-sleep=weird] .p-sleep .arm.r{rotate:-172deg}
.rig[data-sleep=weird] .p-sleep .arm.l{rotate:24deg}
.rig[data-sleep=weird] .p-sleep .leg.l{rotate:-58deg}.rig[data-sleep=weird] .p-sleep .leg.r{rotate:12deg}
.rig[data-sleep=weird] .blk{top:36px;height:24px;rotate:-8deg;left:10px}
/* 寝返り */
.rig.roll .rb{animation:rollA .9s ease-in-out 1}
@keyframes rollA{0%{translate:0 0}35%{translate:0 -7px;scale:1 .94}70%{translate:0 -2px}100%{translate:0 0}}
/* 寝言 */
.rig .say{display:none;left:6px;top:-24px;white-space:nowrap;background:#fff;border-radius:10px;padding:1px 6px;font-size:9px;font-weight:800;color:var(--ink);box-shadow:0 2px 0 rgba(35,38,82,.25);z-index:12;animation:fxPop .3s ease-out 1}
.rig .say.on{display:block}
.rig.flip .say{scale:-1 1}

/* ---- 起床（もぞもぞ→伸び→おはよう）---- */
.p-wake{translate:0 6px}
.p-wake .leg{height:8px}.p-wake .leg.l{rotate:5deg}.p-wake .leg.r{rotate:-5deg}
.rig[data-wake=mozo] .p-wake{animation:mozo 1.8s ease-in-out infinite}
@keyframes mozo{0%,100%{rotate:-2deg;translate:0 6px}30%{rotate:2.5deg;translate:1px 7px}60%{rotate:-1deg;translate:0 8px}}
.rig[data-wake=mozo] .p-wake .head{rotate:13deg;translate:0 3px;animation:none}
.rig[data-wake=mozo] .p-wake .arm.r{animation:rub .7s ease-in-out infinite}
@keyframes rub{0%,100%{rotate:152deg;translate:0 0}50%{rotate:158deg;translate:-2px -1px}}
.rig[data-wake=mozo] .p-wake .arm.l{rotate:-10deg}
.rig[data-wake=stretch] .p-wake{animation:stretchB 2.4s ease-in-out infinite;translate:0 4px}
.rig[data-wake=stretch] .p-wake .arm.l{rotate:162deg}.rig[data-wake=stretch] .p-wake .arm.r{rotate:-162deg}
.rig[data-wake=stretch] .p-wake .head{rotate:-6deg}
.rig[data-wake=done] .p-wake .arm.l{rotate:-12deg}.rig[data-wake=done] .p-wake .arm.r{rotate:12deg}
.rig[data-wake=done] .p-wake .head{animation:sitHead 4s ease-in-out infinite}
.rig[data-pose=wake] .blk{display:block;top:37px;height:22px;left:8px;width:30px;z-index:8}
.rig[data-wake=done] .blk{display:none!important}
.rig[data-pose=wake]:not([data-wake=done]) .hr{rotate:-3deg}
.rig[data-pose=wake]:not([data-wake=done]) .hr::before{content:"";position:absolute;left:44%;top:-6%;width:12%;height:42%;background:var(--hair);transform:skewX(-20deg)}

/* 寝ぐせ・髪の揺れ・服の揺れ */
.rig:is([data-pose=dance],[data-pose=jump]) .torso{animation:cloth .5s ease-in-out infinite alternate}
@keyframes cloth{to{scale:1.04 .98}}

@media (prefers-reduced-motion:reduce){
  .rb,.rb *,.rig .fx b,.rig .zz b,.rig .say{animation:none!important}
}
