/* 主体大、细节少、动作有语义：为七十二候提供连续而克制的动效。 */
.detailed-scene{isolation:isolate}.detailed-scene .focus-label{font-family:"PingFang SC",sans-serif;font-size:15px;letter-spacing:.7px;fill:var(--accent)}.detailed-scene .tradition-label{font-size:13px;letter-spacing:1px;fill:#7f877b}.detailed-scene .direction-mark{font-size:21px;letter-spacing:2px;fill:#809581}.detail-label{animation:detailReveal .9s var(--ease) both}.plant-sway,.grain-sway,.dry-grass{transform-box:fill-box;transform-origin:bottom center;animation:botanicalSway 5s ease-in-out infinite}.grain-sway{animation-duration:6s}.dry-grass{animation-duration:7s}.water-move{transform-box:fill-box;transform-origin:center;animation:waterSpread 4.5s ease-in-out infinite}.ice-drift{animation:iceDrift 6s ease-in-out infinite}.ice-glow{animation:iceBright 5s ease-in-out infinite}.cloud-drift{animation:cloudDrift 9s ease-in-out infinite}.air-flow path{stroke-dasharray:120 24;animation:airPass 5s linear infinite}.air-up{animation:airUp 4s ease-in-out infinite}.air-down{animation:airDown 4s ease-in-out infinite}.animal-breathe,.sleep-breathe,.insect-breathe,.shell-breathe{transform-box:fill-box;transform-origin:bottom center;animation:creatureBreath 4s ease-in-out infinite}.sleep-breathe{animation-duration:7s}.wing-glide{animation:wingGlide 4s ease-in-out infinite}.wing-beat{transform-box:fill-box;transform-origin:center;animation:wingBeat 1.8s ease-in-out infinite}.wing-flutter{transform-box:fill-box;transform-origin:bottom right;animation:wingFlutter 3s ease-in-out infinite}.bird-bob{animation:birdBob 4s ease-in-out infinite}.migration-north{animation:northPass 7s ease-in-out infinite}.migration-south{animation:southPass 7s ease-in-out infinite}.fish-swim{animation:fishPass 6s ease-in-out infinite}.worm-curl{transform-box:fill-box;transform-origin:center;animation:wormMove 5s ease-in-out infinite}.flower-open{transform-box:fill-box;transform-origin:top center;animation:flowerSway 5s ease-in-out infinite}.note-rise{animation:noteRise 3.5s ease-in-out infinite}.sound-wave{transform-box:fill-box;transform-origin:left center;animation:soundExpand 3s ease-out infinite}.sound-fade{animation:soundFade 6s ease-in-out infinite}.thunder-wave{transform-box:fill-box;transform-origin:top center;animation:thunderExpand 4s ease-in-out infinite}.lightning-flash{animation:lightningBright 5s ease-in-out infinite}.rainbow-appear{animation:rainbowShow 6s ease-in-out infinite}.rainbow-fade{animation:rainbowHide 7s ease-in-out infinite}.duckweed-drift{animation:duckweedFloat 6s ease-in-out infinite}.vine-grow{stroke-dasharray:420;animation:vineReveal 8s ease-in-out infinite}.antler-fall{animation:antlerFall 6s ease-in-out infinite}.firefly-glow{animation:fireflyLight 3.5s ease-in-out infinite;filter:drop-shadow(0 0 5px #decc8a)}.firefly-float{animation:fireflyFloat 5s ease-in-out infinite}.heat-rise{animation:heatRise 4s ease-in-out infinite}.rain-fall{animation:rainFall 1.7s linear infinite}.rain-fall:nth-child(3n){animation-delay:-.7s}.rain-fall:nth-child(2n){animation-delay:-1.1s}.dew-glint,.frost-glint{animation:dewShine 5s ease-in-out infinite}.soil-settle{animation:soilSettle 5s ease-in-out infinite}.mouse-hide{animation:mouseRest 6s ease-in-out infinite}.leaf-tumble{transform-box:fill-box;transform-origin:center;animation:leafTurn 6s ease-in-out infinite}.leaf-tumble.slow{animation-delay:-3s}.autumn-fall{animation:autumnFall 7s ease-in-out infinite}.autumn-fall:nth-of-type(2n){animation-delay:-3s}.snow-fall{animation:snowDrift 7s linear infinite}.snow-1{animation-delay:-2.4s}.snow-2{animation-delay:-4.7s}.sprout-rise{transform-box:fill-box;transform-origin:bottom center;animation:sproutStretch 6s ease-in-out infinite}.speed-lines{stroke-dasharray:60 18;animation:speedPass 2s linear infinite}
@keyframes detailReveal{from{opacity:0;transform:translateY(5px)}to{opacity:1;transform:translateY(0)}}@keyframes botanicalSway{0%,100%{transform:rotate(-1deg)}50%{transform:rotate(2deg)}}@keyframes waterSpread{50%{transform:scaleX(1.06);opacity:.55}}@keyframes iceDrift{50%{transform:translate(5px,2px)}}@keyframes iceBright{50%{opacity:.76}}@keyframes cloudDrift{50%{transform:translateX(9px)}}@keyframes airPass{to{stroke-dashoffset:-144}}@keyframes airUp{50%{transform:translateY(-10px);opacity:.65}}@keyframes airDown{50%{transform:translateY(10px);opacity:.65}}@keyframes creatureBreath{50%{transform:scaleY(1.025)}}@keyframes wingGlide{50%{transform:translateY(-7px)}}@keyframes wingBeat{50%{transform:scaleY(.65)}}@keyframes wingFlutter{50%{transform:rotate(-8deg)}}@keyframes birdBob{50%{transform:translateY(-3px)}}@keyframes northPass{50%{transform:translateY(-11px)}}@keyframes southPass{50%{transform:translateY(11px)}}@keyframes fishPass{50%{transform:translateX(12px)}}@keyframes wormMove{50%{transform:scaleX(.97) scaleY(1.035)}}@keyframes flowerSway{50%{transform:rotate(3deg)}}@keyframes noteRise{50%{transform:translate(5px,-8px);opacity:.5}}@keyframes soundExpand{0%,100%{opacity:.3;transform:scale(.94)}50%{opacity:.8;transform:scale(1.04)}}@keyframes soundFade{0%,100%{opacity:.07}50%{opacity:.3}}@keyframes thunderExpand{50%{opacity:.3;transform:scale(1.07)}}@keyframes lightningBright{0%,100%{opacity:.4}50%{opacity:1}}@keyframes rainbowShow{0%,100%{opacity:.55}50%{opacity:1}}@keyframes rainbowHide{0%,100%{opacity:.35}50%{opacity:.04}}@keyframes duckweedFloat{50%{transform:translate(5px,-2px)}}@keyframes vineReveal{0%,100%{stroke-dashoffset:0}50%{stroke-dashoffset:25}}@keyframes antlerFall{0%,100%{transform:translate(0,-5px)}50%{transform:translate(3px,8px)}}@keyframes fireflyLight{50%{opacity:.4;filter:drop-shadow(0 0 9px #dfce82)}}@keyframes fireflyFloat{50%{transform:translate(7px,-8px)}}@keyframes heatRise{50%{transform:translateY(-13px);opacity:.4}}@keyframes rainFall{from{transform:translate(9px,-13px);opacity:.3}45%{opacity:1}to{transform:translate(-9px,17px);opacity:.3}}@keyframes dewShine{50%{opacity:.55}}@keyframes soilSettle{50%{transform:translate(3px,2px)}}@keyframes mouseRest{50%{transform:translateY(2px)}}@keyframes leafTurn{50%{transform:translate(8px,6px) rotate(8deg)}}@keyframes autumnFall{0%,100%{transform:translate(-4px,-5px)}50%{transform:translate(8px,20px)}}@keyframes snowDrift{from{transform:translate(-4px,-14px);opacity:.1}40%{opacity:.9}to{transform:translate(6px,34px);opacity:.1}}@keyframes sproutStretch{50%{transform:scaleY(1.04)}}@keyframes speedPass{to{stroke-dashoffset:-78}}
@media(prefers-reduced-motion:reduce){.detailed-scene *{animation:none!important}.detailed-scene .sound-fade{opacity:.25}.detailed-scene .rainbow-fade{opacity:.16}}
/* v0.5：肢体关节与环境动效分层，定位保留在外层，动作只影响内层。 */
.bird-head,.bird-head-quiet,.deer-head,.mammal-head,.otter-head{transform-box:fill-box;transform-origin:35% 90%;animation:headLook 5.2s ease-in-out infinite}.bird-head-quiet{animation-duration:9s}.deer-head{transform-origin:35% 100%;animation-duration:7s}.otter-head{transform-origin:50% 95%;animation:otterLook 6s ease-in-out infinite}.mammal-head{transform-origin:8% 85%;animation-duration:6.2s}.bird-tail,.mammal-tail,.mouse-tail{transform-box:fill-box;transform-origin:90% 20%;animation:tailSway 3.6s ease-in-out infinite}.mammal-tail{animation-duration:4.8s}.mouse-tail{animation-duration:4s}.bird-wing{transform-box:fill-box;transform-origin:75% 20%;animation:wingSettle 4s ease-in-out infinite}.flight-wing-left,.flight-wing-right{transform-box:fill-box;transform-origin:95% 95%;animation:flightFlap 2.4s ease-in-out infinite}.flight-wing-right{transform-origin:10% 90%;animation-name:flightFlapRight}.animal-blink{transform-box:fill-box;transform-origin:center;animation:slowBlink 5.6s ease-in-out infinite}.ear-twitch{transform-box:fill-box;transform-origin:50% 100%;animation:earFlick 7s ease-in-out infinite}.beak-chirp{transform-box:fill-box;transform-origin:0% 70%;animation:beakSpeak 3.1s ease-in-out infinite}.crest-fan{transform-box:fill-box;transform-origin:50% 100%;animation:crestOpen 5.3s ease-in-out infinite}.antenna-twitch{transform-box:fill-box;transform-origin:50% 100%;animation:antennaFeel 3.4s ease-in-out infinite}.insect-wing-left,.insect-wing-right{transform-box:fill-box;transform-origin:75% 0%;animation:insectWing 3.8s ease-in-out infinite}.insect-wing-right{transform-origin:20% 0%;animation-direction:reverse}.fish-tail{transform-box:fill-box;transform-origin:100% 50%;animation:fishTail 1.8s ease-in-out infinite}.whisker-twitch{transform-box:fill-box;transform-origin:center;animation:whiskerMove 4.4s ease-in-out infinite}.leaf-fan{transform-box:fill-box;transform-origin:80% 100%;animation:leafFan 4.3s ease-in-out infinite}.flower-pulse{transform-box:fill-box;transform-origin:center;animation:flowerBreath 5s ease-in-out infinite}.ambient-wind{stroke-dasharray:70 24;animation:ambientWind 7s linear infinite}.ambient-leaf,.ambient-petal{animation:ambientLeaf 8s linear infinite}.ambient-petal{animation-duration:9s}.leaf-phase-1{animation-delay:-2.7s}.leaf-phase-2{animation-delay:-5.3s}.leaf-phase-3{animation-delay:-7s}.ambient-snow{animation:ambientSnow 8.5s linear infinite}.snow-phase-1{animation-delay:-2.1s}.snow-phase-2{animation-delay:-4.2s}.snow-phase-3{animation-delay:-6.3s}.ambient-spark{animation:ambientSpark 5s ease-in-out infinite}.ambient-pollen{animation:pollenFloat 7s ease-in-out infinite}.detailed-scene.scene-paused *{animation-play-state:paused!important}
@keyframes headLook{0%,15%,100%{transform:rotate(0)}38%{transform:rotate(-5deg)}60%,72%{transform:rotate(3deg)}}@keyframes otterLook{0%,100%{transform:translateY(0) rotate(0)}40%{transform:translateY(-4px) rotate(-4deg)}70%{transform:translateY(-1px) rotate(3deg)}}@keyframes tailSway{0%,100%{transform:rotate(-4deg)}50%{transform:rotate(7deg)}}@keyframes wingSettle{0%,100%{transform:rotate(0)}45%{transform:rotate(-4deg)}60%{transform:rotate(2deg)}}@keyframes flightFlap{0%,100%{transform:rotate(-4deg) scaleY(.94)}50%{transform:rotate(9deg) scaleY(1.04)}}@keyframes flightFlapRight{0%,100%{transform:rotate(4deg) scaleY(.94)}50%{transform:rotate(-9deg) scaleY(1.04)}}@keyframes slowBlink{0%,39%,45%,100%{transform:scaleY(1)}42%{transform:scaleY(.08)}}@keyframes earFlick{0%,48%,64%,100%{transform:rotate(0)}53%{transform:rotate(9deg)}58%{transform:rotate(-5deg)}}@keyframes beakSpeak{0%,35%,65%,100%{transform:rotate(0)}44%{transform:rotate(7deg)}54%{transform:rotate(-2deg)}}@keyframes crestOpen{50%{transform:scaleX(1.09) rotate(3deg)}}@keyframes antennaFeel{0%,100%{transform:rotate(-4deg)}50%{transform:rotate(6deg)}}@keyframes insectWing{0%,40%,80%,100%{transform:rotate(0)}55%{transform:rotate(-6deg)}65%{transform:rotate(3deg)}}@keyframes fishTail{0%,100%{transform:rotate(-7deg) scaleX(.95)}50%{transform:rotate(7deg) scaleX(1)}}@keyframes whiskerMove{50%{transform:rotate(3deg)}}@keyframes leafFan{0%,100%{transform:rotate(-2deg)}50%{transform:rotate(4deg)}}@keyframes flowerBreath{50%{transform:scale(1.035) rotate(2deg)}}@keyframes ambientWind{from{stroke-dashoffset:0;opacity:.14}45%{opacity:.6}to{stroke-dashoffset:-188;opacity:.14}}@keyframes ambientLeaf{0%{transform:translate(-8px,-10px) rotate(-12deg);opacity:0}18%{opacity:.65}75%{opacity:.5}100%{transform:translate(38px,92px) rotate(80deg);opacity:0}}@keyframes ambientSnow{0%{transform:translate(-7px,-16px);opacity:0}20%{opacity:.85}80%{opacity:.65}100%{transform:translate(12px,102px);opacity:0}}@keyframes ambientSpark{0%,100%{opacity:.15}50%{opacity:.75}}@keyframes pollenFloat{0%,100%{transform:translate(0,0);opacity:.15}50%{transform:translate(8px,-14px);opacity:.6}}
@media(prefers-reduced-motion:reduce){.detailed-scene *{animation:none!important}}
.motion-suspended .detailed-scene *{animation-play-state:paused!important}
