/* Motion is separate from layout. Text stays visible if animation APIs are unavailable. */
.scene-motion .scene-line{display:inline-block;max-width:100%}
.scene-motion .scene-atmosphere{position:absolute;inset:0;overflow:hidden;pointer-events:none;z-index:3;contain:strict}
.scene-motion .section-copy{z-index:4}
.scene-particle{position:absolute;display:block;color:var(--particle-color);line-height:1;opacity:.25;pointer-events:none;animation-duration:var(--duration);animation-delay:var(--delay);animation-iteration-count:infinite;animation-timing-function:ease-in-out;animation-play-state:paused}
.is-visible>.scene-atmosphere .scene-particle{animation-play-state:running}
.particle-petal{animation-name:scene-petal-drift;background:#b9848c;border-radius:100% 0;scale:.65}
.particle-paper{animation-name:scene-paper-turn;background:#ed653b;border-radius:2px;scale:.56 .28}
.particle-dust{animation-name:scene-dust;background:#fff3d4;border-radius:50%;opacity:.15}
.particle-glow{animation-name:scene-glow;border-radius:50%;background:#e0c795;box-shadow:0 0 8px #e0c79577}
.particle-confetti{animation-name:scene-confetti;background:var(--particle-color);border-radius:1px;opacity:.7;animation-timing-function:linear}
.scene-motion .is-visible:not(.scene-settled) .scene-line{animation:scene-line-in .9s cubic-bezier(.18,.65,.25,1) both;animation-delay:var(--line-delay)}
.scene-motion .is-visible:not(.scene-settled) .section-kicker{animation:scene-fade-in .8s ease both}
.scene-motion .is-visible:not(.scene-settled) .section-body{animation:scene-message-in 1s .25s ease both}
.scene-motion .is-visible:not(.scene-settled) .section-media>img{animation:scene-photo-in 1.2s .15s cubic-bezier(.18,.65,.25,1) both}
.scene-motion.preset-letter .type-hero.is-visible .section-media{--photo-tilt:-3deg;animation:scene-paper-float 6s ease-in-out infinite}
.scene-motion.preset-letter .type-letter.is-visible:not(.scene-settled) .section-body{animation:scene-letter-reveal 1.6s .3s ease both}
.scene-motion.preset-scrapbook .type-hero.is-visible .section-media{--photo-tilt:3deg;animation:scene-paper-float 5s ease-in-out infinite}
.scene-motion.preset-scrapbook .is-visible:not(.scene-settled) .media-gallery>img:nth-child(even){animation:scene-polaroid-in 1.1s .15s ease both}
.scene-motion.preset-scrapbook .is-visible:not(.scene-settled) .media-gallery>img:nth-child(odd){animation:scene-polaroid-in 1.1s .3s ease both}
.scene-motion.preset-cinema .type-hero .section-media{overflow:hidden}
.scene-motion.preset-cinema .type-hero.is-visible .section-media>img{animation:scene-film-pan 13s ease-in-out infinite alternate}
.scene-motion.preset-cinema .is-visible:not(.scene-settled) .scene-line{animation-name:scene-film-title;animation-duration:1.25s}
.scene-motion.preset-cinema .is-visible:not(.scene-settled) .section-body{animation-name:scene-film-title}
.scene-motion.preset-midnight .is-visible .section-media{animation:scene-portrait-float 7s ease-in-out infinite}
.scene-motion.preset-party .type-hero.is-visible .section-media{animation:scene-portrait-float 7s ease-in-out infinite}
.scene-motion.preset-party .is-visible:not(.scene-settled) .scene-line{animation-name:scene-party-pop;animation-duration:.95s;animation-timing-function:cubic-bezier(.2,.8,.25,1.15)}
.scene-motion.preset-editorial .is-visible:not(.scene-settled) .section-media>img{animation:scene-curtain 1.3s .2s cubic-bezier(.2,.65,.2,1) both}
.scene-motion.preset-editorial .is-visible:not(.scene-settled) .section-kicker{animation:scene-rule-in 1.1s ease both}
.scene-motion.preset-editorial .is-visible:not(.scene-settled) .scene-line{animation-name:scene-editorial-in;animation-duration:1.1s}
.scene-motion .type-video .section-media{animation:none!important}
.scene-controls{position:fixed;right:12px;top:12px;z-index:20;display:flex;gap:5px;border:1px solid #ffffff88;border-radius:24px;padding:4px;background:#faf7f0eb;box-shadow:0 2px 12px #0001;backdrop-filter:blur(10px)}
.scene-controls button{display:grid;place-items:center;padding:0;width:31px;height:31px;border:0;border-radius:50%;background:transparent;color:#514538;cursor:pointer}
.scene-controls button:hover{background:#e5dacb}.scene-controls button:disabled{opacity:.45;cursor:default}
.scene-celebrate{position:fixed;right:14px;bottom:20px;z-index:20;border:1px solid #e1d3bd;background:#faf7f0ed;color:#a25960;box-shadow:0 2px 12px #0001;border-radius:22px;padding:10px 13px;font:inherit;font-size:12px;line-height:1.4;cursor:pointer}
.scene-controls button:focus-visible,.scene-celebrate:focus-visible{outline:2px solid #a886bc;outline-offset:3px}
.scene-controls[hidden],.scene-celebrate[hidden]{display:none}
#scene-burst{position:fixed;inset:0;pointer-events:none;overflow:hidden;z-index:19}
.scene-burst-piece{position:absolute;right:35px;bottom:40px;width:7px;height:11px;border-radius:2px;background:var(--particle-color);animation:scene-burst 1.35s var(--delay) cubic-bezier(.12,.5,.3,1) both;pointer-events:none}
.scene-burst-piece.is-petal{border-radius:100% 0;width:9px;height:14px}
.scene-feedback{position:absolute;clip-path:inset(50%);width:1px;height:1px;overflow:hidden;white-space:nowrap}
.catalog-scene .scene-controls,.catalog-scene .scene-celebrate{display:none}
.hide-atmosphere .scene-atmosphere,.motion-level-none .scene-atmosphere{display:none!important}
.motion-level-none *,.motion-level-none *:before,.motion-level-none *:after{animation:none!important;transition:none!important}
.motion-level-gentle .scene-particle{animation-duration:calc(var(--duration) * 1.8)!important}
.motion-level-gentle .section-media{animation-duration:10s!important}
.motion-level-gentle .type-hero .section-media>img{animation-duration:2s!important}
.motion-level-gentle.preset-cinema .type-hero .section-media>img{animation-duration:22s!important}
.ai-styled .celebration-section[data-font=sans] .section-title{font-family:DM Sans,Arial,sans-serif!important}
.ai-styled .celebration-section[data-font=serif] .section-title{font-family:DM Serif,Georgia,serif!important}
.ai-palette .celebration-section{background-color:var(--section-bg)!important;color:var(--section-ink)!important}
.ai-palette .section-title,.ai-palette .section-body,.ai-palette .section-kicker{color:var(--section-ink)!important}
html.motion-paused .scene-motion *,html.motion-paused .scene-motion *:before,html.motion-paused .scene-motion *:after{animation-play-state:paused!important}
html.motion-paused .scene-line,html.motion-paused .section-kicker,html.motion-paused .section-body,html.motion-paused .scene-motion .section-media>img{animation:none!important;opacity:1;clip-path:none}
html.motion-paused .scene-line{filter:none}
html.motion-reduced .scene-motion *,html.motion-reduced .scene-motion *:before,html.motion-reduced .scene-motion *:after{animation:none!important;transition:none!important}
html.motion-reduced .scene-atmosphere,html.motion-reduced #scene-burst{display:none}
@keyframes scene-line-in{from{opacity:0;transform:translate3d(0,23px,0);filter:blur(4px)}to{opacity:1;transform:none;filter:none}}
@keyframes scene-fade-in{from{opacity:0}to{opacity:1}}
@keyframes scene-message-in{from{opacity:0;transform:translateY(14px)}to{opacity:1;transform:none}}
@keyframes scene-photo-in{from{opacity:0;transform:translateY(24px) scale(.96)}to{opacity:1;transform:none}}
@keyframes scene-paper-float{0%,100%{transform:translateY(0) rotate(var(--photo-tilt))}50%{transform:translateY(-7px) rotate(calc(var(--photo-tilt) + 1.8deg))}}
@keyframes scene-portrait-float{0%,100%{transform:translateY(0)}50%{transform:translateY(-7px)}}
@keyframes scene-letter-reveal{from{opacity:0;clip-path:inset(0 0 100% 0)}to{opacity:1;clip-path:inset(0)}}
@keyframes scene-polaroid-in{from{opacity:0;transform:translateY(35px) rotate(-10deg) scale(.92)}to{opacity:1}}
@keyframes scene-film-pan{from{transform:scale(1.02) translateX(0)}to{transform:scale(1.12) translateX(-1%)}}
@keyframes scene-film-title{from{opacity:0;transform:translateX(26px);filter:blur(3px)}to{opacity:1;transform:none;filter:none}}
@keyframes scene-party-pop{0%{opacity:0;transform:translateY(25px) scale(.9)}70%{opacity:1;transform:translateY(-2px) scale(1.025)}100%{opacity:1;transform:none}}
@keyframes scene-curtain{from{clip-path:inset(0 0 100% 0);transform:scale(1.08)}to{clip-path:inset(0);transform:none}}
@keyframes scene-rule-in{from{opacity:0;clip-path:inset(0 50%)}to{opacity:1;clip-path:inset(0)}}
@keyframes scene-editorial-in{from{opacity:0;transform:translateY(40px)}to{opacity:1;transform:none}}
@keyframes scene-petal-drift{0%,100%{opacity:.12;transform:translateY(12px) rotate(-8deg)}50%{opacity:.42;transform:translateY(-14px) rotate(8deg)}}
@keyframes scene-paper-turn{0%,100%{opacity:.22;transform:rotate(-20deg) scale(.8)}50%{opacity:.6;transform:rotate(30deg) scale(1.1)}}
@keyframes scene-dust{0%,100%{opacity:.08;transform:translate(0,12px)}50%{opacity:.4;transform:translate(var(--drift),-20px)}}
@keyframes scene-glow{0%,100%{opacity:.18;transform:scale(.65)}50%{opacity:.9;transform:scale(1.15)}}
@keyframes scene-confetti{0%{opacity:0;transform:translate(0,-90px) rotate(0)}15%{opacity:.7}85%{opacity:.7}100%{opacity:0;transform:translate(var(--drift),310px) rotate(250deg)}}
@keyframes scene-burst{0%{opacity:0;transform:translate(0,0) rotate(0) scale(.4)}15%{opacity:1}55%{opacity:1;transform:translate(var(--mx),var(--my)) rotate(var(--turn)) scale(1)}100%{opacity:0;transform:translate(var(--dx),var(--dy)) rotate(var(--turn)) scale(.65)}}
@media(max-width:360px){.scene-celebrate{padding-inline:10px;right:8px}}
@media(prefers-reduced-motion:reduce){.scene-motion *, .scene-motion *:before,.scene-motion *:after{animation:none!important;transition:none!important}.scene-atmosphere,#scene-burst{display:none!important}}
