.opening-effect-scene{position:absolute;inset:0;z-index:1;display:block;overflow:hidden;pointer-events:none;--fx-accent:var(--opening-accent,#d5a84b);--fx-duration:var(--opening-duration,1300ms)}
.opening-effect-scene>b,.opening-effect-scene>em,.opening-effect-scene>span,.opening-effect-scene i{position:absolute;display:block}
.opening-effect-scene>span{inset:0}.opening-effect-scene i{--fx-delay:calc(var(--fx-i)*28ms)}
.invitation-welcome .welcome-hint{position:relative;z-index:6}
.invitation-welcome.is-opening{pointer-events:none}
.invitation-welcome.is-opening .welcome-hint{animation:fx-hint-out .28s ease both}
@keyframes fx-hint-out{to{opacity:0;transform:translateY(8px)}}

.effect-door_split>b,.effect-door_split>em{inset-block:0;width:51%;background:linear-gradient(90deg,#160f1a,#4e2948 72%,color-mix(in srgb,var(--fx-accent) 68%,#7b493d));box-shadow:inset -2px 0 0 rgba(255,255,255,.12)}
.effect-door_split>b{left:0}.effect-door_split>em{right:0;transform:scaleX(-1)}
.is-playing.effect-door_split>b,.invitation-welcome.is-opening .effect-door_split>b{animation:fx-door-left var(--fx-duration) cubic-bezier(.7,0,.22,1) both}
.is-playing.effect-door_split>em,.invitation-welcome.is-opening .effect-door_split>em{animation:fx-door-right var(--fx-duration) cubic-bezier(.7,0,.22,1) both}
@keyframes fx-door-left{70%,100%{transform:translateX(-103%) rotateY(-12deg)}}@keyframes fx-door-right{70%,100%{transform:translateX(103%) scaleX(-1) rotateY(-12deg)}}

.effect-seal_break{background:radial-gradient(circle,rgba(0,0,0,.05),rgba(29,18,30,.94))}.effect-seal_break>b{top:50%;left:50%;width:92px;aspect-ratio:1;border:8px double #f4d58a;border-radius:50%;background:radial-gradient(circle,#9c3142,#541522);box-shadow:0 0 34px rgba(255,213,128,.45);transform:translate(-50%,-50%)}
.effect-seal_break>em{top:50%;left:50%;width:2px;height:120px;background:#ffe6a5;opacity:0;transform:translate(-50%,-50%) rotate(28deg)}
.is-playing.effect-seal_break>b,.invitation-welcome.is-opening .effect-seal_break>b{animation:fx-seal var(--fx-duration) cubic-bezier(.2,.8,.2,1) both}.is-playing.effect-seal_break>em,.invitation-welcome.is-opening .effect-seal_break>em{animation:fx-seal-line var(--fx-duration) ease both}
@keyframes fx-seal{0%,30%{transform:translate(-50%,-50%) scale(1)}55%{transform:translate(-50%,-50%) scale(1.18) rotate(8deg)}100%{transform:translate(-50%,-50%) scale(2.8) rotate(24deg);opacity:0}}@keyframes fx-seal-line{35%{opacity:0}45%{opacity:1}100%{height:100vh;opacity:0}}

.effect-curtain_reveal>b,.effect-curtain_reveal>em{inset-block:0;width:54%;background:repeating-linear-gradient(90deg,#3a102d 0 12%,#7b294e 20%,#2a0b22 31%);box-shadow:inset 0 0 46px #160913}
.effect-curtain_reveal>b{left:0;transform-origin:left}.effect-curtain_reveal>em{right:0;transform-origin:right}
.is-playing.effect-curtain_reveal>b,.invitation-welcome.is-opening .effect-curtain_reveal>b{animation:fx-curtain-left var(--fx-duration) cubic-bezier(.6,0,.25,1) both}.is-playing.effect-curtain_reveal>em,.invitation-welcome.is-opening .effect-curtain_reveal>em{animation:fx-curtain-right var(--fx-duration) cubic-bezier(.6,0,.25,1) both}
@keyframes fx-curtain-left{to{transform:translateX(-96%) scaleX(.48)}}@keyframes fx-curtain-right{to{transform:translateX(96%) scaleX(.48)}}

.effect-envelope_open{background:linear-gradient(145deg,#efe2ca,#b99770)}.effect-envelope_open>b{left:8%;right:8%;bottom:10%;height:58%;background:#f7ead1;clip-path:polygon(0 0,50% 48%,100% 0,100% 100%,0 100%)}.effect-envelope_open>em{left:8%;right:8%;top:18%;height:42%;background:#d9bc8b;clip-path:polygon(0 0,100% 0,50% 100%);transform-origin:top}
.is-playing.effect-envelope_open>em,.invitation-welcome.is-opening .effect-envelope_open>em{animation:fx-envelope-flap var(--fx-duration) cubic-bezier(.2,.8,.2,1) both}.is-playing.effect-envelope_open>b,.invitation-welcome.is-opening .effect-envelope_open>b{animation:fx-envelope-body var(--fx-duration) ease both}
@keyframes fx-envelope-flap{40%,100%{transform:rotateX(175deg);opacity:.15}}@keyframes fx-envelope-body{55%{transform:translateY(0)}100%{transform:translateY(85%);opacity:0}}

.effect-floral_bloom{background:radial-gradient(circle,#fff7f1,#e8c7c9)}.effect-floral_bloom i{top:50%;left:50%;width:24%;height:42%;border-radius:80% 5% 80% 5%;background:linear-gradient(145deg,#fff8f2,color-mix(in srgb,var(--fx-accent) 66%,#e698a6));transform:translate(-50%,-50%) rotate(calc(var(--fx-i)*30deg)) scale(.05);transform-origin:50% 100%;opacity:0}
.is-playing.effect-floral_bloom i,.invitation-welcome.is-opening .effect-floral_bloom i{animation:fx-bloom var(--fx-duration) cubic-bezier(.18,.75,.25,1) var(--fx-delay) both}@keyframes fx-bloom{25%{opacity:1}65%{transform:translate(-50%,-50%) rotate(calc(var(--fx-i)*30deg)) scale(1)}100%{transform:translate(-50%,-50%) rotate(calc(var(--fx-i)*30deg)) scale(1.75);opacity:0}}

.effect-cinematic_light{background:#080b14}.effect-cinematic_light>b{inset:-30%;background:linear-gradient(112deg,transparent 38%,rgba(255,247,210,.1) 45%,rgba(255,247,210,.95) 50%,rgba(255,247,210,.12) 56%,transparent 63%);transform:translateX(-70%) skewX(-10deg)}
.effect-cinematic_light>em{inset:0;background:radial-gradient(circle at 70% 40%,rgba(255,224,142,.55),transparent 38%)}
.is-playing.effect-cinematic_light>b,.invitation-welcome.is-opening .effect-cinematic_light>b{animation:fx-cinema var(--fx-duration) cubic-bezier(.45,0,.2,1) both}.is-playing.effect-cinematic_light>em,.invitation-welcome.is-opening .effect-cinematic_light>em{animation:fx-overlay-out var(--fx-duration) ease both}@keyframes fx-cinema{to{transform:translateX(72%) skewX(-10deg);opacity:0}}

.effect-photo_mosaic{display:grid;grid-template-columns:repeat(4,1fr);grid-template-rows:repeat(3,1fr);background:#17121a}.effect-photo_mosaic>span{position:static;display:grid;grid-template-columns:repeat(4,1fr);grid-template-rows:repeat(3,1fr)}.effect-photo_mosaic i{position:relative;background:linear-gradient(145deg,color-mix(in srgb,var(--fx-accent) 55%,#513b59),#17121a);border:1px solid rgba(255,255,255,.16);transform:translate(calc((var(--fx-i) - 5)*8px),calc((var(--fx-i) - 5)*-6px)) rotate(calc((var(--fx-i) - 6)*2deg));opacity:1}
.is-playing.effect-photo_mosaic i,.invitation-welcome.is-opening .effect-photo_mosaic i{animation:fx-mosaic var(--fx-duration) cubic-bezier(.6,0,.2,1) var(--fx-delay) both}@keyframes fx-mosaic{55%{transform:none;opacity:1}100%{transform:scale(.65);opacity:0}}

.effect-gold_line{background:#17131a}.effect-gold_line>b{top:0;bottom:0;left:50%;width:3px;background:linear-gradient(transparent,#fff1b8 20%,var(--fx-accent) 80%,transparent);box-shadow:0 0 24px #f8d36f;transform:scaleY(0)}.effect-gold_line>em{inset:0;background:linear-gradient(90deg,#17131a 0 49.5%,transparent 49.5% 50.5%,#17131a 50.5%)}
.is-playing.effect-gold_line>b,.invitation-welcome.is-opening .effect-gold_line>b{animation:fx-gold-line var(--fx-duration) ease both}.is-playing.effect-gold_line>em,.invitation-welcome.is-opening .effect-gold_line>em{animation:fx-gold-open var(--fx-duration) cubic-bezier(.7,0,.2,1) both}@keyframes fx-gold-line{35%{transform:scaleY(1)}100%{transform:scaleY(1);opacity:0}}@keyframes fx-gold-open{45%{clip-path:inset(0)}100%{clip-path:inset(0 50%);opacity:0}}

.effect-mist_reveal{background:#dfe6e2}.effect-mist_reveal i{inset:auto;top:calc((var(--fx-i)%6)*17% - 8%);left:-30%;width:160%;height:25%;border-radius:50%;background:rgba(255,255,255,.68);filter:blur(18px);transform:translateX(calc((var(--fx-i)%2)*18%))}
.is-playing.effect-mist_reveal i,.invitation-welcome.is-opening .effect-mist_reveal i{animation:fx-mist var(--fx-duration) ease-in-out var(--fx-delay) both}@keyframes fx-mist{to{transform:translateX(calc((var(--fx-i)%2)*65% - 32%));opacity:0}}

.effect-confetti{background:linear-gradient(145deg,#6a315c,#2d1837)}.effect-confetti i{top:-15%;left:calc((var(--fx-i) + 1)*7.5%);width:9px;height:22px;background:hsl(calc(var(--fx-i)*33) 80% 62%);transform:rotate(calc(var(--fx-i)*23deg))}
.is-playing.effect-confetti i,.invitation-welcome.is-opening .effect-confetti i{animation:fx-confetti var(--fx-duration) cubic-bezier(.2,.6,.35,1) var(--fx-delay) both}@keyframes fx-confetti{70%{opacity:1}100%{top:115%;transform:rotate(540deg) translateX(calc((var(--fx-i) - 5)*5px));opacity:0}}

.effect-cloud_reveal{background:#dceaf2}.effect-cloud_reveal i{top:calc((var(--fx-i)%6)*18% - 8%);left:calc((var(--fx-i)%2)*45% - 18%);width:72%;height:28%;border-radius:50%;background:#fff;filter:blur(7px);box-shadow:30px 0 0 rgba(255,255,255,.9)}
.is-playing.effect-cloud_reveal i,.invitation-welcome.is-opening .effect-cloud_reveal i{animation:fx-cloud var(--fx-duration) ease-in-out var(--fx-delay) both}@keyframes fx-cloud{to{transform:translateX(calc((var(--fx-i)%2)*160% - 80%));opacity:0}}

.effect-leaf_reveal{background:#253a2b}.effect-leaf_reveal i{top:calc((var(--fx-i)%6)*16% + 2%);left:calc((var(--fx-i)%2)*72% + 5%);width:23%;height:36%;border-radius:100% 0 100% 0;background:linear-gradient(145deg,#9bb878,#365d3f);transform:rotate(calc(var(--fx-i)*17deg)) scale(1.4)}
.is-playing.effect-leaf_reveal i,.invitation-welcome.is-opening .effect-leaf_reveal i{animation:fx-leaf var(--fx-duration) cubic-bezier(.5,0,.2,1) var(--fx-delay) both}@keyframes fx-leaf{to{transform:translateX(calc((var(--fx-i)%2)*180% - 90%)) rotate(calc(var(--fx-i)*33deg)) scale(.6);opacity:0}}

.effect-soft_fade{background:linear-gradient(145deg,#f8f1ed,#dfcfd7)}.effect-soft_fade>b{inset:0;background:radial-gradient(circle,var(--fx-accent),transparent 65%);opacity:.2}.is-playing.effect-soft_fade,.invitation-welcome.is-opening .effect-soft_fade{animation:fx-soft var(--fx-duration) ease both}@keyframes fx-soft{0%,30%{opacity:1}100%{opacity:0;transform:scale(1.035)}}

.effect-light_burst{background:#2f1640}.effect-light_burst>b{top:50%;left:50%;width:12px;aspect-ratio:1;border-radius:50%;background:#fff7cf;box-shadow:0 0 30px 18px var(--fx-accent);transform:translate(-50%,-50%) scale(.1)}.effect-light_burst i{top:50%;left:50%;width:3px;height:58%;background:linear-gradient(#fff,transparent);transform-origin:50% 0;transform:rotate(calc(var(--fx-i)*30deg)) scaleY(.1)}
.is-playing.effect-light_burst>b,.invitation-welcome.is-opening .effect-light_burst>b{animation:fx-burst var(--fx-duration) ease-out both}.is-playing.effect-light_burst i,.invitation-welcome.is-opening .effect-light_burst i{animation:fx-ray var(--fx-duration) ease-out var(--fx-delay) both}@keyframes fx-burst{55%{transform:translate(-50%,-50%) scale(8);opacity:1}100%{transform:translate(-50%,-50%) scale(16);opacity:0}}@keyframes fx-ray{50%{transform:rotate(calc(var(--fx-i)*30deg)) scaleY(1);opacity:1}100%{transform:rotate(calc(var(--fx-i)*30deg)) scaleY(1.5);opacity:0}}

.effect-ceremonial_light{background:#14213d}.effect-ceremonial_light>b{left:10%;right:10%;bottom:0;height:90%;border:5px solid #eac46b;border-bottom:0;border-radius:48% 48% 0 0;box-shadow:0 0 34px rgba(234,196,107,.55),inset 0 0 34px rgba(234,196,107,.25);transform:translateY(25%) scale(.8);opacity:0}.effect-ceremonial_light>em{inset:0;background:linear-gradient(90deg,#14213d,transparent 45% 55%,#14213d)}
.is-playing.effect-ceremonial_light>b,.invitation-welcome.is-opening .effect-ceremonial_light>b{animation:fx-ceremony var(--fx-duration) ease-out both}.is-playing.effect-ceremonial_light>em,.invitation-welcome.is-opening .effect-ceremonial_light>em{animation:fx-overlay-out var(--fx-duration) ease both}@keyframes fx-ceremony{35%{opacity:1;transform:translateY(0) scale(1)}100%{opacity:0;transform:translateY(0) scale(1.2)}}

.effect-golden_glow{background:#2c1a18}.effect-golden_glow>b{inset:0;background:radial-gradient(circle at 50% 55%,#fff5c9 0,#e9b84b 22%,rgba(185,112,32,.35) 48%,transparent 72%);transform:scale(.25);opacity:.25}.effect-golden_glow>em{inset:0;background:linear-gradient(120deg,transparent 20%,rgba(255,235,172,.55),transparent 70%);transform:translateX(-100%)}
.is-playing.effect-golden_glow>b,.invitation-welcome.is-opening .effect-golden_glow>b{animation:fx-golden var(--fx-duration) ease-out both}.is-playing.effect-golden_glow>em,.invitation-welcome.is-opening .effect-golden_glow>em{animation:fx-golden-sweep var(--fx-duration) ease both}@keyframes fx-golden{55%{transform:scale(1.4);opacity:1}100%{transform:scale(2.2);opacity:0}}@keyframes fx-golden-sweep{to{transform:translateX(100%);opacity:0}}

@keyframes fx-overlay-out{50%{opacity:1}100%{opacity:0}}

.effect-mini-phone{position:relative;display:block;width:112px;aspect-ratio:9/19.5;margin-inline:auto;overflow:hidden;background:#1a141d;border:5px solid #1a141d;border-radius:21px;box-shadow:0 12px 30px rgba(25,15,29,.18)}
.effect-mini-phone .opening-effect-scene{border-radius:15px}.effect-mini-copy{position:absolute;z-index:3;inset:0;display:grid;place-content:center;text-align:center;color:#fff;text-shadow:0 2px 8px rgba(0,0,0,.55)}.effect-mini-copy strong{font-family:Georgia,serif;font-size:.86rem}.effect-mini-copy small{font-size:.58rem;letter-spacing:.16em;text-transform:uppercase}
.opening-effect-card:not(.previewing) .opening-effect-scene{animation:none!important}.opening-effect-card:not(.previewing) .opening-effect-scene>*{animation:none!important}
.opening-effect-card.previewing .opening-effect-scene{--fx-duration:var(--preview-duration,1300ms)}

@media (prefers-reduced-motion:reduce){.invitation-welcome .opening-effect-scene,.invitation-welcome .opening-effect-scene *{animation:none!important;transform:none!important}.invitation-welcome.is-opening{animation:fx-soft .35s ease both}.opening-effect-card .opening-effect-scene,.opening-effect-card .opening-effect-scene *{animation:none!important}}
