/* Repair pass: shared hinges, continuous joints, and stable reading surfaces. */
#impress,#impress>div{transition-timing-function:cubic-bezier(.4,0,.2,1)!important}
.cover.entered .stage{animation:none}
.stage{will-change:auto}
.playback-ui{opacity:1;pointer-events:auto;top:auto;bottom:12px;background:#592a26e8;padding:6px 10px}
.playback-ui nav button{font-size:12px}#phase-status{font-size:12px;min-width:120px}#keyboard-tip{bottom:57px}
.in-motion .puppet *{animation-play-state:running!important}
.practice .stage:before{inset:0}
.practice.revealed .title-block,.practice.revealed .developer{opacity:1;transform:none}
.practice.revealed .theatre-leaves,.practice.revealed .corner-notes,.practice.revealed .theatre-bookmark{opacity:1}
.practice.revealed .monitor-group{transform:translate3d(0,-12px,20px) rotateY(0deg)}
.practice .system-flow{left:465px;right:75px;top:584px}
.global-view .step:not(.camera-stop){visibility:visible!important}
.global-view .closing-page{visibility:visible!important}
.global-view .map-label{display:block;font-size:42px;top:-68px}
.global-view .lift{opacity:1;transform:none}
.global-view .work-node{opacity:1;transform:none}
.global-view .badge-collection figure,.global-view .next-plans li{opacity:1;transform:none}
.global-view .chapter-medallion{opacity:1;transform:translateZ(65px)}
.global-view .stage{animation:none!important}
/* Four flaps share the edges of one envelope; the letter never crosses its front face. */
.cover .cover-paper,.cover.entered .cover-paper{left:68px;top:54px;width:704px;height:586px;opacity:1;transform:none;transition:none}
.cover .cover-paper h1{margin-top:26px;font-size:65px}.cover .cover-paper h1 strong{font-size:94px}.cover .author-rule{margin:23px 0 18px}
.envelope-shell{position:absolute;left:52px;top:38px;width:736px;height:618px;transform:translateZ(100px);transform-style:preserve-3d;pointer-events:none}
.envelope-liner{position:absolute;inset:-5px;border:3px solid #c78746;transform:translateZ(-75px);background:#8c302c}
.envelope-wing,.envelope-pocket,.envelope-lid{position:absolute;inset:0;transform-style:preserve-3d}
.envelope-wing,.envelope-pocket,.lid-face,.lid-back{background:#b44234 url(assets/paper-grain.svg);background-size:180px;backface-visibility:hidden}
.wing-left{clip-path:polygon(0 0,56% 50%,0 100%);transform-origin:left center;transform:translateZ(2px) rotateY(0)}
.wing-right{clip-path:polygon(100% 0,44% 50%,100% 100%);transform-origin:right center;transform:translateZ(3px) rotateY(0);background-color:#9c322c}
.envelope-pocket{clip-path:polygon(0 35%,50% 65%,100% 35%,100% 100%,0 100%);transform-origin:center bottom;transform:translateZ(4px) rotateX(0);background-color:#bd4c38}
.envelope-lid{height:405px;transform-origin:center top;transform:translateZ(6px) rotateX(0)}
.lid-face,.lid-back{position:absolute;inset:0;clip-path:polygon(0 0,100% 0,50% 100%)}
.lid-face{background-color:#a6342e}.lid-back{background-color:#d39b62;transform:rotateY(180deg)}
.lid-face:after{content:'';position:absolute;width:76px;height:76px;left:calc(50% - 38px);bottom:24px;background:url(assets/theatre/stationery-seal.webp) center/contain no-repeat}
.envelope-postmark{position:absolute;left:0;right:0;bottom:100px;text-align:center;color:#fbe0a3;font:34px 'KaiTi',serif;transform:translateZ(8px)}.envelope-postmark span{display:block;font:14px 'Microsoft YaHei',sans-serif;margin-top:12px}
.entered .envelope-lid{animation:lid-unfold 1500ms 300ms cubic-bezier(.4,0,.2,1) both}
.entered .wing-left{animation:left-unfold 1600ms 1300ms cubic-bezier(.4,0,.2,1) both}
.entered .wing-right{animation:right-unfold 1600ms 1400ms cubic-bezier(.4,0,.2,1) both}
.entered .envelope-pocket{animation:pocket-unfold 1600ms 1500ms cubic-bezier(.4,0,.2,1) both}
.entered .envelope-postmark{animation:postmark-leave 600ms 1250ms both}
@keyframes lid-unfold{to{transform:translateZ(6px) rotateX(178deg)}}
@keyframes left-unfold{to{transform:translateZ(2px) rotateY(-165deg)}}
@keyframes right-unfold{to{transform:translateZ(3px) rotateY(165deg)}}
@keyframes pocket-unfold{to{transform:translateZ(4px) rotateX(-165deg)}}
@keyframes postmark-leave{to{opacity:0}}
.global-view .envelope-wing,.global-view .envelope-lid,.global-view .envelope-pocket,.global-view .envelope-postmark{visibility:hidden}
/* Shoulder cutouts sit UNDER the shirt silhouette. There are no painted joint caps. */
.puppet .joint-upper:before{content:none}
.puppet .rig-body{z-index:4}
.puppet .joint-upper{z-index:3;width:62px;height:124px;transform-origin:50% 19%;top:187px}
.puppet .joint-upper.left{left:105px}.puppet .joint-upper.right{left:233px}
.puppet .part-upper{clip-path:inset(16% 0 0 0);object-fit:fill}
.puppet .joint-lower{top:93px;left:5px;width:54px;height:139px;transform-origin:50% 18%}
.puppet .joint-head{left:110px;top:16px;width:180px;height:186px;transform-origin:50% 82%;transform:rotate(0);z-index:5}
.puppet .rig-head{clip-path:polygon(0 0,100% 0,100% 85%,63% 88%,43% 88%,0 82%)}
.puppet.rig-writer .rig-body,.puppet.rig-elder .rig-body{left:100px;top:171px;width:200px;height:247px}
.puppet.rig-writer .joint-head,.puppet.rig-elder .joint-head{left:104px;top:21px;width:192px;height:196px;transform-origin:50% 81%}
.puppet.rig-writer .joint-upper,.puppet.rig-elder .joint-upper{top:190px}
.puppet.rig-writer .joint-upper.left,.puppet.rig-elder .joint-upper.left{left:98px}
.puppet.rig-writer .joint-upper.right,.puppet.rig-elder .joint-upper.right{left:242px}
.puppet.rig-writer .joint-upper.left{--rest:16deg}.puppet.rig-writer .joint-upper.right{--rest:-16deg}
.puppet.rig-writer .joint-lower.left{--rest:-70deg}.puppet.rig-writer .joint-lower.right{--rest:67deg}
.puppet.pose-point .joint-upper.right{--rest:-42deg}.puppet.pose-point .joint-lower.right{--rest:-43deg}
.puppet.pose-point .joint-upper.left{--rest:10deg}.puppet.pose-point .joint-lower.left{--rest:0deg}
.puppet.pose-listen .joint-upper.left{--rest:15deg}.puppet.pose-listen .joint-lower.left{--rest:-15deg}
.puppet.pose-listen .joint-upper.right{--rest:-12deg}.puppet.pose-listen .joint-lower.right{--rest:12deg}
.puppet.rig-exercise .joint-upper{top:187px}.puppet.rig-exercise .joint-upper.left{left:105px}.puppet.rig-exercise .joint-upper.right{left:233px}
@keyframes nod{0%,100%{transform:rotate(0)}40%{transform:rotate(1.5deg)}70%{transform:rotate(-1deg)}}
@keyframes point-shoulder{0%,100%{transform:rotate(var(--rest))}40%,70%{transform:rotate(calc(var(--rest) - 7deg))}}
@keyframes point-elbow{0%,100%{transform:rotate(var(--rest))}40%,70%{transform:rotate(calc(var(--rest) - 9deg))}}
@keyframes stretch-left{0%,100%{transform:rotate(7deg)}38%,70%{transform:rotate(80deg)}}
@keyframes stretch-right{0%,100%{transform:rotate(-7deg)}38%,70%{transform:rotate(-80deg)}}
@keyframes stretch-elbow-left{0%,100%{transform:rotate(-6deg)}38%,70%{transform:rotate(-18deg)}}
@keyframes stretch-elbow-right{0%,100%{transform:rotate(6deg)}38%,70%{transform:rotate(18deg)}}
.cover-person{top:225px}.cover-desk{top:594px}.cover-desk .desk-paper{top:-28px;left:110px;width:235px;height:75px}
/* Forward movement keeps chapter titles and all labels inside the safe reading area. */
.life-ending{bottom:42px}.closing-page .reflection{font-size:19px}.closing-page .next-plans li{font-size:23px}.closing-page .closing{font-size:18px}
.puppet .rig-body{z-index:1}
.puppet .rig-shoulders{position:absolute;left:113px;top:164px;width:174px;height:425px;object-fit:fill;z-index:4;clip-path:inset(0 0 81% 0)}
.puppet.rig-writer .rig-shoulders,.puppet.rig-elder .rig-shoulders{left:100px;top:171px;width:200px;height:247px;clip-path:inset(0 0 69% 0)}
.puppet.rig-writer .rig-head{clip-path:polygon(0 0,100% 0,100% 72%,74% 72%,69% 78%,62% 82%,55% 85%,47% 87%,0 87%)}
.puppet .part-upper{clip-path:inset(16% 0 22% 0)}
.puppet .joint-lower{top:78px;clip-path:inset(10% 0 0 0)}
.cover .puppet.rig-writer .joint-upper.left{--rest:8deg}.cover .puppet.rig-writer .joint-lower.left{--rest:-44deg}
.cover .puppet.rig-writer .joint-upper.right{--rest:-8deg}.cover .puppet.rig-writer .joint-lower.right{--rest:44deg}

.cover-person{top:245px}

.puppet .joint-lower{top:64px;clip-path:inset(20% 0 0 0);transform-origin:50% 28%}
.cover-person{top:235px}.cover-desk .desk-paper{top:-8px;height:62px}
.cover .cover-paper h1{margin-top:50px}
.practice .system-flow{display:grid;grid-template-columns:minmax(0,1fr) 24px minmax(0,1fr) 24px minmax(0,1fr) 24px minmax(0,1fr);gap:12px;left:465px;right:78px}
.practice .system-flow b{font-size:20px;white-space:nowrap}.practice .system-flow span{font-size:12px;white-space:nowrap}.practice .theatre-leaves{width:82px;height:110px;bottom:-55px;right:0}
.cover .depth-layer:has(.cover-desk){transform:translateZ(60px)}
.cover-person .rig-body{clip-path:inset(0 0 15% 0)}
.cover-desk .desk-paper{top:-22px}
.playback-ui{top:10px;bottom:auto}.page-number{top:63px}
.puppet.rig-exercise .rig-shoulders{display:none}
.puppet.rig-exercise .joint-upper{top:177px}
.puppet.rig-exercise .joint-upper.left{left:117px}
.puppet.rig-exercise .joint-upper.right{left:221px}
/* Keep torso behind the desk while the articulated forearms reach over the paper. */
.cover .depth-layer:has(.cover-desk){transform:translateZ(98px)}
.cover-person,.cover-person .puppet,.cover-person .rig-torso,.cover-person .joint-upper{transform-style:preserve-3d}
.cover-person .rig-body{clip-path:none}
.cover-person .joint-upper{transform:translateZ(60px) rotate(var(--rest))}
.cover-person .part-upper{transform:translateZ(-60px)}
.acting .cover-person .joint-upper.left{animation:cover-shoulder 5000ms 900ms ease-in-out}
@keyframes cover-shoulder{0%,100%{transform:translateZ(60px) rotate(var(--rest))}45%{transform:translateZ(60px) rotate(calc(var(--rest) + 3deg))}}
.puppet.rig-exercise .joint-upper{top:197px}
