:root{--motion-ease:cubic-bezier(.22,1,.36,1)}
/* Контент виден, пока JS не подготовил управляемое открытие. */
.hero .portrait,.hero .portrait-frame,.hero .hero-shade,.hero .hero-content{opacity:1;transition:none}
.intro-prepared:not(.cover-enter) .hero .portrait-frame,.intro-prepared:not(.cover-enter) .hero .hero-shade,.intro-prepared:not(.cover-enter) .hero .hero-content{opacity:0;transform:translateY(var(--cover-shift-px,20px))}
.intro-prepared .hero .portrait-frame,.intro-prepared .hero .hero-shade,.intro-prepared .hero .hero-content{transition:opacity var(--cover-ms,900ms) var(--motion-ease),transform var(--cover-ms,900ms) var(--motion-ease)}
.hero-motion-ready .name-part{opacity:0;transform:translateX(calc(var(--name-shift-px,100px)*-1));transition:opacity var(--name-fade-ms,3000ms) ease,transform var(--name-ms,10000ms) var(--motion-ease)}
.hero-motion-ready .name-part--second{transform:translateX(var(--name-shift-px,100px))}
.hero-motion-ready.cover-enter .name-part{opacity:1;transform:none}
.hero-motion-ready.cover-enter .portrait{animation:portrait-arrive var(--portrait-ms,10000ms) var(--motion-ease) both}
@keyframes portrait-arrive{from{transform:scale(var(--portrait-scale,1.25))}to{transform:scale(1)}}
.envelope-screen{perspective:1400px;transform-style:preserve-3d}
.envelope{perspective:1400px;transform-style:preserve-3d}
.flap{transform-origin:0 50%;backface-visibility:hidden;transition:transform var(--flap-ms,750ms) var(--motion-ease) 80ms}
.opening .flap{transform:rotateY(-170deg)}
.envelope-screen.opening{opacity:0;transform:translateY(-18px);transition:opacity var(--shell-ms,500ms) var(--motion-ease) var(--shell-delay-ms,550ms),transform var(--shell-ms,500ms) var(--motion-ease) var(--shell-delay-ms,550ms)}
.opening .seal{opacity:0;transform:translate(-50%,-50%) scale(.94);transition:transform 100ms var(--motion-ease),opacity var(--seal-ms,220ms) ease 70ms}
.opening .envelope-hint{opacity:0;transition:opacity var(--seal-ms,220ms) ease}
.reveal{opacity:1!important;transform:none!important}
[data-reveal]{transition:opacity var(--text-ms,750ms) var(--motion-ease) var(--item-delay,0ms),transform var(--text-ms,750ms) var(--motion-ease) var(--item-delay,0ms)}
[data-reveal=photo]{transition-duration:var(--photo-ms,1000ms)}
[data-reveal=decor]{transition-duration:var(--decor-ms,1100ms)}
.reveal-pending{opacity:0;transform:translateY(var(--text-shift-px,24px))}
.reveal-pending[data-reveal=photo]{transform:translateY(var(--photo-shift-px,30px))}
.reveal-pending[data-reveal=decor]{transform:translateY(var(--decor-shift-px,18px)) rotate(-3deg)}
.petal-region{position:relative;isolation:isolate}
.petals{position:absolute;inset:0;overflow:hidden;pointer-events:none;z-index:3;visibility:hidden;contain:layout paint}
.petals.active{visibility:visible}
.petal-fall{position:absolute;top:0;width:var(--size);height:var(--size);animation:petal-fall var(--fall) linear var(--lag) infinite;opacity:0}
.petal-sway{display:block;animation:petal-sway var(--sway) ease-in-out var(--lag) infinite alternate}
.petal-sway img{display:block;width:100%;height:auto;animation:petal-spin var(--spin) linear var(--lag) infinite;animation-direction:var(--direction)}
.petals:not(.active) *,.petals.paused *{animation-play-state:paused!important}
@keyframes petal-fall{0%{transform:translateY(-45px);opacity:0}8%,88%{opacity:var(--alpha)}100%{transform:translateY(calc(var(--petal-height,1600px) + 45px));opacity:0}}
@keyframes petal-sway{from{transform:translateX(calc(var(--amplitude)*-1))}to{transform:translateX(var(--amplitude))}}
@keyframes petal-spin{to{transform:rotate(360deg)}}
.trap-field{position:absolute!important;width:1px;height:1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap;pointer-events:none}
@media(prefers-reduced-motion:reduce){
 .petals{display:none!important}
 .hero-motion-ready .name-part,.hero-motion-ready .portrait,.intro-prepared .hero .portrait-frame,.intro-prepared .hero .hero-shade,.intro-prepared .hero .hero-content,[data-reveal]{opacity:1!important;transform:none!important;transition:none!important;animation:none!important}
 .envelope-screen.opening,.opening .flap,.opening .seal{transition:none!important;transform:none}
}
