/* rex-rig.css — движения Рекса по частям (rex-rig.js), как у Рекса на /test/:
   хвост виляет, плюмаж и лапы с вещами качаются; идёт и танцует — ноги по
   очереди сгибаются; говорит, смеётся и жуёт — челюсть. Точки поворота частей
   ставит rex-rig.js. В игре дыхание и прыжки всего Рекса делает
   rex-emotions.js, в углу — dino.js; здесь — только части. */
.rex-rig { position: relative; display: block; width: 100%; aspect-ratio: 1; }
.rex-rig .rig-breath { position: absolute; inset: 0; transform-origin: 50% 94%; animation: rig-breath 3.4s ease-in-out infinite; }
#rex-pic .rex-rig .rig-breath { animation: none; }
.rex-rig .rig-part {
  position: absolute; inset: 0; display: block; width: 100%; height: 100%; max-width: none;
  -webkit-user-drag: none; user-select: none; pointer-events: none;
}
@keyframes rig-breath { 0%, 100% { transform: none; } 50% { transform: scale(1.012, 1.02); } }
/* Земля (осколки скорлупы у малыша, rex-rig.js ground) неподвижна: в игре —
   слоем рядом с Рексом (rex-game.css), в углу — у дома помощника (dino.js):
   Рекс убегает, осколки лежат. */
.rex-ground { display: block; aspect-ratio: 1; pointer-events: none; }
.rex-ground .rig-part {
  position: absolute; inset: 0; display: block; width: 100%; height: 100%; max-width: none;
  -webkit-user-drag: none; user-select: none; pointer-events: none;
}
.dr-ground { position: fixed; left: 0; top: 0; z-index: 44; will-change: transform; }
.dr-ground[hidden] { display: none !important; }
.dr-on.kb-open .dr-ground { display: none !important; } /* как .dr (dino.css) */
@media print { .dr-ground { display: none !important; } }

/* Всегда: хвост виляет, плюмаж и лапы чуть качаются. */
.rex-rig .rig-tail { animation: rig-wag 2.8s ease-in-out infinite; }
.rex-rig .rig-plume { animation: rig-sway 3.4s ease-in-out infinite; }
.rex-rig .rig-armN { animation: rig-armN 3.8s ease-in-out infinite; }
.rex-rig .rig-armF { animation: rig-armF 4.2s ease-in-out infinite; }
@keyframes rig-wag { 0%, 100% { transform: rotate(-2.5deg); } 50% { transform: rotate(3deg); } }
@keyframes rig-sway { 0%, 100% { transform: rotate(-2deg); } 50% { transform: rotate(2.5deg); } }
@keyframes rig-armN { 0%, 100% { transform: rotate(0); } 50% { transform: rotate(2deg); } }
@keyframes rig-armF { 0%, 100% { transform: rotate(0); } 50% { transform: rotate(-1.5deg); } }

/* Идёт (помощник бежит) и танцует: ноги по очереди сгибаются, лапы машут. */
.dr.is-running .rig-legF, [data-act="dance"] .rig-legF { animation: rig-step .6s linear infinite; }
.dr.is-running .rig-legN, [data-act="dance"] .rig-legN { animation: rig-step .6s linear -.3s infinite; }
.dr.is-running .rig-tail { animation-duration: .6s; }
.dr.is-running .rig-armN, [data-act="dance"] .rig-armN { animation: rig-swingN .6s ease-in-out infinite; }
.dr.is-running .rig-armF, [data-act="dance"] .rig-armF { animation: rig-swingF .6s ease-in-out infinite; }
[data-act="dance"] .rig-plume { animation-duration: .6s; }
@keyframes rig-step {
  0% { transform: rotate(-7deg); } 20% { transform: rotate(-1deg) scaleY(.9); } 40% { transform: rotate(7deg) scaleY(.97); }
  50% { transform: rotate(8deg); } 100% { transform: rotate(-7deg); }
}
@keyframes rig-swingN { 0%, 100% { transform: rotate(-3deg); } 50% { transform: rotate(3deg); } }
@keyframes rig-swingF { 0%, 100% { transform: rotate(2deg); } 50% { transform: rotate(-2deg); } }

/* Прыжок: ноги подгибаются. */
[data-act="hop"] .rig-legF, .dr.is-hop .rig-legF { animation: rig-tuck .8s ease-out 1; }
[data-act="hop"] .rig-legN, .dr.is-hop .rig-legN { animation: rig-tuck .8s ease-out .05s 1; }
@keyframes rig-tuck { 0%, 100% { transform: none; } 35% { transform: rotate(-9deg) scaleY(.88); } 60% { transform: rotate(4deg); } }

/* Говорит (облачко со словами в игре, фраза у помощника), смеётся, жуёт — челюсть. */
/* :where — речь слабее смеха и жевания: облачко бывает и при них. */
:where(#rex-pic:has(.rex-say.is-on), .dr.is-telling, .dr.is-speaking) .rig-jaw { animation: rig-talk .34s ease-in-out infinite; }
[data-act="laugh"] .rig-jaw, .dr.is-laughing .rig-jaw { animation: rig-laugh .45s ease-in-out infinite; }
[data-act="chomp"] .rig-jaw { animation: rig-chomp .9s ease-in-out 1; }
@keyframes rig-talk { 0%, 100% { transform: rotate(0); } 50% { transform: rotate(-9deg); } }
/* Смех — рот шире и дольше (Артём 30.09.2026: «при смехе не открывается рот»). */
@keyframes rig-laugh { 0%, 100% { transform: rotate(-8deg); } 50% { transform: rotate(-18deg); } }
@keyframes rig-chomp {
  0% { transform: rotate(-12deg); } 15%, 45%, 75% { transform: rotate(0); } 30%, 60% { transform: rotate(-7deg); } 100% { transform: rotate(0); }
}

/* Закрытые глаза (части lidsHa и lids — rig.py рисует их по разметке "eyes"):
   смеётся и радуется — дужки ^^, спит — сомкнутые веки, изредка моргает (Артём 30.09.2026:
   «при смехе не закрываются глаза»). */
.rex-rig .rig-lidsHa, .rex-rig .rig-lids { opacity: 0; }
.rex-rig .rig-lids { animation: rig-blink 5.3s linear infinite; }
[data-act="laugh"] .rig-lidsHa, .dr.is-laughing .rig-lidsHa, .dr[data-pose="happy"] .rig-lidsHa { opacity: 1; }
[data-act="laugh"] .rig-lids, .dr.is-laughing .rig-lids, .dr[data-pose="happy"] .rig-lids { animation: none; opacity: 0; }
[data-act="sleep"] .rig-lids, .dr[data-pose="sleep"] .rig-lids { animation: none; opacity: 1; }
@keyframes rig-blink { 0%, 95%, 100% { opacity: 0; } 96%, 97.8% { opacity: 1; } }

/* Спит: рот закрыт, плюмаж повис, хвост еле движется. */
[data-act="sleep"] .rig-plume, .dr[data-pose="sleep"] .rig-plume { animation: none; transform: rotate(5deg); }
[data-act="sleep"] .rig-tail, .dr[data-pose="sleep"] .rig-tail { animation-duration: 7s; }

@media (prefers-reduced-motion: reduce) {
  .rex-rig .rig-breath, .rex-rig .rig-part { animation: none !important; }
}
